From 57732105882fdda0309de5e04fdaeaf0a900667b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henryk=20Pl=C3=B6tz?= Date: Sun, 9 Jun 2019 22:12:26 +0200 Subject: [PATCH 1/2] First few fields of DIKKU2 based on guessing --- fints/formals.py | 22 ++++++++++++++++++++++ fints/segments/statement.py | 10 +++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/fints/formals.py b/fints/formals.py index cde95f6..1ad0920 100644 --- a/fints/formals.py +++ b/fints/formals.py @@ -654,6 +654,28 @@ def as_mt940_Balance(self): ) +class CreditCardTransaction1(DataElementGroup): + """Kreditkartenumsatz + + Source: Reverse engineered""" + credit_card_number = DataElementField(type='an', _d="Kreditkartennummer") + _date_1 = DataElementField(type='dat', _d="Datum") # FIXME booked vs. valued date? + _date_2 = DataElementField(type='dat', _d="Datum") + _unknown_1 = DataElementField(type='an') + amount = DataElementField(type='wrt', _d="Wert") + currency = DataElementField(type='cur', _d="Währung") + credit_debit = CodeField(enum=CreditDebit2, length=1, _d="Soll-Haben-Kennzeichen") + _unknown_2 = DataElementField(type='an') + _amount_2 = DataElementField(type='wrt', _d="Wert") # FIXME Maybe own vs. other currency? + _currency_2 = DataElementField(type='cur', _d="Währung") + _credit_debit_2 = CodeField(enum=CreditDebit2, length=1, _d="Soll-Haben-Kennzeichen") + memo = DataElementField(type='an', _d="Betreff") + _unknown_3 = DataElementField(type='an', count=8) + _unknown_4 = DataElementField(type='jn') + _unknown_5 = DataElementField(type='an') + + + class Timestamp1(DataElementGroup): """Zeitstempel diff --git a/fints/segments/statement.py b/fints/segments/statement.py index c21121b..bc3cc27 100644 --- a/fints/segments/statement.py +++ b/fints/segments/statement.py @@ -1,5 +1,6 @@ from fints.fields import DataElementField, DataElementGroupField -from fints.formals import KTI1, Account2, Account3, QueryCreditCardStatements2, SupportedMessageTypes +from fints.formals import KTI1, Account2, Account3, QueryCreditCardStatements2, SupportedMessageTypes, Balance1,\ + CreditCardTransaction1 from .base import FinTS3Segment, ParameterSegment @@ -81,6 +82,13 @@ class DIKKU2(FinTS3Segment): """Kreditkartenumsätze rückmelden, version 2 Source: Reverse engineered""" + credit_card_number = DataElementField(type='an', _d="Kreditkartennummer") + _unknown_1 = DataElementField(type='an') + balance = DataElementGroupField(type=Balance1, _d="Saldo") + _unknown_2 = DataElementField(type='an') + _unknown_3 = DataElementField(type='an') + transactions = DataElementGroupField(type=CreditCardTransaction1, _d="Kreditkartenumsatz", min_count=1, required=False) + class DIKKUS2(ParameterSegment): """Kreditkartenumsätze anfordern Parameter, version 2 From 4e53b4197789f94f0701e2e7650531594204faa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henryk=20Pl=C3=B6tz?= Date: Sun, 9 Jun 2019 22:40:42 +0200 Subject: [PATCH 2/2] Implement more DIKKU2 fields (looking at Subsembly.FinTS) --- fints/formals.py | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/fints/formals.py b/fints/formals.py index 1ad0920..1b95598 100644 --- a/fints/formals.py +++ b/fints/formals.py @@ -659,20 +659,19 @@ class CreditCardTransaction1(DataElementGroup): Source: Reverse engineered""" credit_card_number = DataElementField(type='an', _d="Kreditkartennummer") - _date_1 = DataElementField(type='dat', _d="Datum") # FIXME booked vs. valued date? - _date_2 = DataElementField(type='dat', _d="Datum") - _unknown_1 = DataElementField(type='an') - amount = DataElementField(type='wrt', _d="Wert") + receipt_date = DataElementField(type='dat', _d="Belegdatum") + booking_date = DataElementField(type='dat', _d="Buchungsatum") + value_date = DataElementField(type='dat', _d="Wertstellungsdatum") + original_amount = DataElementField(type='wrt', _d="Original-Wert") currency = DataElementField(type='cur', _d="Währung") credit_debit = CodeField(enum=CreditDebit2, length=1, _d="Soll-Haben-Kennzeichen") - _unknown_2 = DataElementField(type='an') - _amount_2 = DataElementField(type='wrt', _d="Wert") # FIXME Maybe own vs. other currency? - _currency_2 = DataElementField(type='cur', _d="Währung") - _credit_debit_2 = CodeField(enum=CreditDebit2, length=1, _d="Soll-Haben-Kennzeichen") - memo = DataElementField(type='an', _d="Betreff") - _unknown_3 = DataElementField(type='an', count=8) - _unknown_4 = DataElementField(type='jn') - _unknown_5 = DataElementField(type='an') + exchange_rate = DataElementField(type='float', _d="Umrechnungskurs") + booked_amount = DataElementField(type='wrt', _d="Gebuchter Wert") + booked_currency = DataElementField(type='cur', _d="Gebuchte Währung") + booked_credit_debit = CodeField(enum=CreditDebit2, length=1, _d="Gebuchtes Soll-Haben-Kennzeichen") + memo = DataElementField(type='an', _d="Buchungstext", count=9) + settled = DataElementField(type='jn') + booking_reference = DataElementField(type='an', _d="Buchungsreferenz")