Browse Source

[UPD] parse more fields as of (#71)

* [UPD] parse more fields for MT940

as of https://www.ing.nl/media/ING_ming_mt940s_24_juli_tcm162-46356.pdf
p 8ff

* [FIX] There is no CR or LF in mt940 data to be parsed.

The calling logic from the MT940 parser concatenates all lines from a mt940 tag.
pull/94/head
Holger Brunn 8 years ago
committed by Stefan Rijnhart (Opener)
parent
commit
689688d817
  1. 22
      account_bank_statement_import_mt940_base/mt940.py
  2. 4
      account_bank_statement_import_mt940_nl_ing/mt940.py

22
account_bank_statement_import_mt940_base/mt940.py

@ -83,14 +83,28 @@ def handle_common_subfields(transaction, subfields):
for counterpart_field in ['CNTP', 'BENM', 'ORDP']: for counterpart_field in ['CNTP', 'BENM', 'ORDP']:
if counterpart_field in subfields: if counterpart_field in subfields:
get_counterpart(transaction, subfields[counterpart_field]) get_counterpart(transaction, subfields[counterpart_field])
if not transaction.message:
transaction.message = ''
# REMI: Remitter information (text entered by other party on trans.): # REMI: Remitter information (text entered by other party on trans.):
if 'REMI' in subfields: if 'REMI' in subfields:
transaction.message = (
'/'.join(x for x in subfields['REMI'] if x))
transaction.message += (
subfields['REMI'][2]
# this might look like
# /REMI/USTD//<remittance info>/
# or
# /REMI/STRD/CUR/<betalingskenmerk>/
if len(subfields['REMI']) >= 3 and subfields['REMI'][0] in [
'STRD', 'USTD'
]
else
'/'.join(x for x in subfields['REMI'] if x)
)
# EREF: End-to-end reference
if 'EREF' in subfields:
transaction.message += '/'.join(filter(bool, subfields['EREF']))
# Get transaction reference subfield (might vary): # Get transaction reference subfield (might vary):
if transaction.eref in subfields: if transaction.eref in subfields:
transaction.eref = ''.join(
subfields[transaction.eref])
transaction.eref = ''.join(subfields[transaction.eref])
class MT940(object): class MT940(object):

4
account_bank_statement_import_mt940_nl_ing/mt940.py

@ -29,7 +29,8 @@ class MT940Parser(MT940):
tag_61_regex = re.compile( tag_61_regex = re.compile(
r'^(?P<date>\d{6})(?P<line_date>\d{0,4})' r'^(?P<date>\d{6})(?P<line_date>\d{0,4})'
r'(?P<sign>[CD])(?P<amount>\d+,\d{2})N(?P<type>.{3})' r'(?P<sign>[CD])(?P<amount>\d+,\d{2})N(?P<type>.{3})'
r'(?P<reference>\w{1,50})'
r'(?P<reference>\w{0,16})'
r'(//(?P<ingid>\w{14})/TRCD/(?P<ingtranscode>\w{0,34})){0,1}'
) )
def __init__(self): def __init__(self):
@ -47,6 +48,7 @@ class MT940Parser(MT940):
self.current_transaction.transferred_amount = ( self.current_transaction.transferred_amount = (
str2amount(parsed_data['sign'], parsed_data['amount'])) str2amount(parsed_data['sign'], parsed_data['amount']))
self.current_transaction.eref = parsed_data['reference'] self.current_transaction.eref = parsed_data['reference']
self.current_transaction.id = parsed_data['ingid']
def handle_tag_86(self, data): def handle_tag_86(self, data):
"""Parse 86 tag containing reference data.""" """Parse 86 tag containing reference data."""

Loading…
Cancel
Save