diff options
author | Yves Fischer <yvesf-git@xapek.org> | 2019-04-05 08:01:00 +0200 |
---|---|---|
committer | Yves Fischer <yvesf-git@xapek.org> | 2019-04-05 08:02:12 +0200 |
commit | cb9f2096cd6ae8bf8a894cc06600526448b584ca (patch) | |
tree | f3be927c49b0d6e1e56e8273e1d244559c22aab2 /transaction_details.py | |
parent | 7dc3d95458e9aeb2e3b71047af2f83786d075f9f (diff) | |
download | finanzstatus-cb9f2096cd6ae8bf8a894cc06600526448b584ca.tar.gz finanzstatus-cb9f2096cd6ae8bf8a894cc06600526448b584ca.zip |
Diffstat (limited to 'transaction_details.py')
-rw-r--r-- | transaction_details.py | 78 |
1 files changed, 0 insertions, 78 deletions
diff --git a/transaction_details.py b/transaction_details.py deleted file mode 100644 index baa6ef3..0000000 --- a/transaction_details.py +++ /dev/null @@ -1,78 +0,0 @@ -# see https://github.com/raphaelm/python-fints/pull/8 - -# https://www.db-bankline.deutsche-bank.com/download/MT940_Deutschland_Structure2002.pdf -DETAIL_KEYS = { - '': 'Geschäftsvorfall-Code', - '00': 'Buchungstext', - '10': 'Primanota', - '20': 'Verwendungszweck', - '30': 'Auftraggeber BLZ', - '31': 'Auftraggeber Kontonummer', - '32': 'Auftraggeber Name', - '34': 'Rücklastschriften', - '35': 'Empfänger: Name', - '60': 'Zusätzl. Verwendungszweckangaben', -} - -# https://www.hettwer-beratung.de/sepa-spezialwissen/sepa-technische-anforderungen/sepa-geschäftsvorfallcodes-gvc-mt-940/ -VERWENDUNGSZWECK_KEYS = { - '': 'Verwendungszweck', - 'IBAN': 'Auftraggeber IBAN', - 'BIC': 'Auftraggeber BIC', - 'EREF': 'End to End Referenz', - 'MREF': 'Mandatsreferenz', - 'CRED': 'Auftraggeber Creditor ID', - 'PURP': 'Purpose Code', - 'SVWZ': 'Verwendungszweck', - 'MDAT': 'Mandatsdatum', - 'ABWA': 'Abweichender Auftraggeber', - 'ABWE': 'Abweichender Empfänger', - 'SQTP': 'FRST / ONE / OFF /RECC', - 'ORCR': 'SEPA Mandatsänderung: alte SEPA CI', - 'ORMR': 'SEPA Mandatsänderung: alte SEPA Mandatsreferenz', - 'DDAT': 'SEPA Settlement Tag für R- Message', - 'KREF': 'Kundenreferenz', - 'DEBT': 'Debtor Identifier bei SEPA Überweisung', - 'COAM': 'Compensation Amount', - 'OAMT': 'Original Amount', -} - - -def parse_transaction_details(details): - detail_str = ''.join(d.strip() for d in details.splitlines()) - detail_str = detail_str[3:] - result = dict(map(lambda k: [k,None], DETAIL_KEYS.values())) - result.update(dict(map(lambda k: [k,None], VERWENDUNGSZWECK_KEYS.values()))) - pre_result = {} - for segment in detail_str.split('?'): - pre_result[segment[0:2]] = segment[2:] - for key, value in pre_result.items(): - if key in DETAIL_KEYS: - result[DETAIL_KEYS[key]] = value - else: - if key == '33': - result[DETAIL_KEYS['32']] = (result[DETAIL_KEYS['32']] or '') + value - elif key.startswith('2'): - result[DETAIL_KEYS['20']] = (result[DETAIL_KEYS['20']] or '') + value - else: - raise ValueError('Found Key ?{}, which is not documented'.format(key)) - post_result = {} - segment_type = None - text = '' - for index, char in enumerate(result['Verwendungszweck']): - if char == '+' and result['Verwendungszweck'][index-4:index] in VERWENDUNGSZWECK_KEYS: - if segment_type: - post_result[segment_type] = text[:-4] - text = '' - else: - text = '' - segment_type = result['Verwendungszweck'][index-4:index] - else: - text += char - if segment_type: - post_result[segment_type] = text - else: - post_result[''] = text - for key, value in post_result.items(): - result[VERWENDUNGSZWECK_KEYS[key]] = value - return result
\ No newline at end of file |