code: function parseTransaction(json) {
    try {
      //  try parse the date from 'Date.Sort[1]' first
      const dateTag = json.Date.Sort[1];
      let t = moment.utc(dateTag, 'YYYYMMDDHHmmssSSS').tz('Australia/Sydney');
      if (!t.isValid()) {
        //  try parse the date from 'Date.Text' if previous attempt failed
        t = moment(json.Date.Text, 'DD MMM YYYY');
        //  use sort order to distinguish different transactions.
        if (dateTag && !Number.isNaN(+dateTag)) {
          t.millisecond(+dateTag);
        }
      }
  
      return {
        timestamp: t.valueOf(),
        date: t.format(),
        //  replace newline with '; '
        description: json.Description.Text.replace(/\n/g, '; '),
        amount: parseCurrencyText(json.Amount.Text),
        balance: parseCurrencyText(json.Balance.Text),
        trancode: json.TranCode.Text || '',
        receiptnumber: json.ReceiptNumber.Text || '',
      };
    } catch (err) {
      //  ignore the error for the misformatted transaction, and return null.
      debug(err);
      debug(`Cannot parse the given transaction: ${JSON.stringify(json)}`);
      return null;
    }
  }
docs: Transaction format { timestamp, date, description, amount, balance, trancode, receiptnumber }