diff --git a/account_banking_uk_hsbc/hsbc_mt940.py b/account_banking_uk_hsbc/hsbc_mt940.py index 400bf7aaa..ca775617d 100644 --- a/account_banking_uk_hsbc/hsbc_mt940.py +++ b/account_banking_uk_hsbc/hsbc_mt940.py @@ -45,13 +45,13 @@ class transaction(models.mem_bank_transaction): 'value_date': 'valuedate', 'local_currency': 'currency', 'transfer_type': 'bookingcode', - 'reference': 'custrefno', 'message': 'furtherinfo' } type_map = { 'NTRF': bt.ORDER, 'NMSC': bt.ORDER, + 'NACH': bt.ORDER, 'NPAY': bt.PAYMENT_BATCH, 'NCHK': bt.CHECK, } @@ -67,6 +67,10 @@ class transaction(models.mem_bank_transaction): self.transferred_amount = record2float(record, 'amount') + ref = record.get('custrefno') + if ref and ref != 'NONREF': + self.reference = ref + # Set the transfer type based on the bookingcode if record.get('bookingcode', 'ignore') in self.type_map: self.transfer_type = self.type_map[record['bookingcode']] @@ -151,7 +155,7 @@ class statement(models.mem_bank_statement): record[k] for k in ( 'infoline{0}'.format(i) - for i in range(2, 5) + for i in range(1, 5) ) if k in record )) diff --git a/account_banking_uk_hsbc/mt940_parser.py b/account_banking_uk_hsbc/mt940_parser.py index 1b987aa3b..725259236 100644 --- a/account_banking_uk_hsbc/mt940_parser.py +++ b/account_banking_uk_hsbc/mt940_parser.py @@ -35,7 +35,10 @@ class HSBCParser(object): def __init__(self): recparse = dict() - patterns = {'ebcdic': r"\w/\?:\(\).,'+{} -"} + # Allowed characters. The list was originally taken from HSBC's + # spec, but the ampersand character was found out in the wild in + # the customer account name + patterns = {'ebcdic': r"\w/\?:\(\).,'+{} &-"} # MT940 header recparse["20"] = r":(?P20):(?P.{1,16})"