From: Henryk Plötz Date: Sun, 26 Aug 2018 23:05:55 +0000 (+0200) Subject: Add querying of scheduled debits (untested, my bank doesn't support it) X-Git-Tag: v2.0.0~1^2~72 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c6501f20ed77e6c321828aef2a8d99dff797ff05;p=thirdparty%2Fpython-fints.git Add querying of scheduled debits (untested, my bank doesn't support it) --- diff --git a/fints/client.py b/fints/client.py index c370efc..c60ad2f 100644 --- a/fints/client.py +++ b/fints/client.py @@ -29,7 +29,7 @@ from .segments.accounts import HISPA1, HKSPA1 from .segments.auth import HKTAB4, HKTAB5, HKTAN3, HKTAN5 from .segments.depot import HKWPD5, HKWPD6 from .segments.dialog import HISYN4, HKSYN3 -from .segments.debit import HKDSE1, HKDSE2, HKDME1, HKDME2, HKDMC1 +from .segments.debit import HKDSE1, HKDSE2, HKDME1, HKDME2, HKDMC1, HKDBS1, HKDBS2, HKDMB1 from .segments.saldo import HKSAL5, HKSAL6, HKSAL7 from .segments.statement import HKKAZ5, HKKAZ6, HKKAZ7 from .segments.transfer import HKCCM1, HKCCS1 @@ -371,6 +371,28 @@ class FinTS3Client: logger.debug('No HIWPD response segment found - maybe account has no holdings?') return holdings + def get_scheduled_debits(self, account: SEPAAccount, multiple=False): + with self._get_dialog() as dialog: + if multiple: + command_classes = (HKDMB1, ) + response_type = "HIDMB" + else: + command_classes = (HKDBS1, HKDBS2) + response_type = "HKDBS" + + hkdbs = self._find_highest_supported_command(*command_classes) + + responses = self._fetch_with_touchdowns( + dialog, + lambda touchdown: hkdbs( + account=hkdbs._fields['account'].type.from_sepa_account(account), + touchdown_point=touchdown, + ), + response_type, + ) + + return responses + def get_communication_endpoints(self): with self._get_dialog() as dialog: hkkom = self._find_highest_supported_command(HKKOM4) diff --git a/fints/formals.py b/fints/formals.py index 47c39a9..dc01fd9 100644 --- a/fints/formals.py +++ b/fints/formals.py @@ -763,3 +763,42 @@ class ScheduledCOR1BatchDebitParameter1(DataElementGroup): supported_sepa_formats = DataElementField(type='an', max_length=256, max_count=9, required=False, _d="Unterstützte SEPA-Datenformate") +class SupportedSEPAPainMessages1(DataElementGroup): + """Unterstützte SEPA pain messages, version 1 + + Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Messages -- Multibankfähige Geschäftsvorfälle """ + sepa_descriptors = DataElementField(type='an', max_length=256, max_count=99, _d="SEPA Descriptor") + +class QueryScheduledDebitParameter1(DataElementGroup): + """Parameter Bestand terminierter SEPA-Einzellastschriften, version 1 + + Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Messages -- Multibankfähige Geschäftsvorfälle """ + date_range_allowed = DataElementField(type='jn', _d="Zeitraum möglich") + +class QueryScheduledDebitParameter2(DataElementGroup): + """Parameter Bestand terminierter SEPA-Einzellastschriften, version 2 + + Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Messages -- Multibankfähige Geschäftsvorfälle """ + max_number_responses_allowed = DataElementField(type='jn', _d="Eingabe Anzahl Einträge erlaubt") + date_range_allowed = DataElementField(type='jn', _d="Zeitraum möglich") + supported_sepa_formats = DataElementField(type='an', max_length=256, max_count=9, required=False, _d="Unterstützte SEPA-Datenformate") + +class QueryScheduledBatchDebitParameter1(DataElementGroup): + """Parameter Bestand terminierter SEPA-Sammellastschriften, version 1 + + Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Messages -- Multibankfähige Geschäftsvorfälle """ + max_number_responses_allowed = DataElementField(type='jn', _d="Eingabe Anzahl Einträge erlaubt") + date_range_allowed = DataElementField(type='jn', _d="Zeitraum möglich") + +class SEPACCode1(RepresentableEnum): + REVERSAL = '1' #: Reversal + REVOCATION = '2' #: Revocation + DELETE = '3' #: Delete + +class StatusSEPATask1(RepresentableEnum): + ## FIXME Enum names in english + PENDING = '1' #: In Terminierung + DECLINED = '2' #: Abgelehnt von erster Inkassostelle + IN_PROGRESS = '3' #: in Bearbeitung + PROCESSED = '4' #: Creditoren-seitig verarbeitet, Buchung veranlasst + REVOKED = '5' #: R-Transaktion wurde veranlasst diff --git a/fints/segments/debit.py b/fints/segments/debit.py index cd498da..75a41a5 100644 --- a/fints/segments/debit.py +++ b/fints/segments/debit.py @@ -1,7 +1,7 @@ from . import FinTS3Segment from ..models import SEPAAccount -from ..fields import DataElementField, DataElementGroupField -from ..formals import ScheduledCOR1BatchDebitParameter1, KTI1, Amount1, ScheduledBatchDebitParameter1, ScheduledBatchDebitParameter2, ScheduledDebitParameter1, ScheduledDebitParameter2 +from ..fields import DataElementField, DataElementGroupField, CodeField +from ..formals import ScheduledCOR1BatchDebitParameter1, KTI1, Amount1, ScheduledBatchDebitParameter1, ScheduledBatchDebitParameter2, ScheduledDebitParameter1, ScheduledDebitParameter2, SupportedSEPAPainMessages1, QueryScheduledDebitParameter1, QueryScheduledDebitParameter2, SEPACCode1, StatusSEPATask1, QueryScheduledBatchDebitParameter1 from . import ParameterSegment class BatchDebitBase(FinTS3Segment): @@ -118,3 +118,99 @@ class HIDMCS1(ParameterSegment): Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Messages -- Multibankfähige Geschäftsvorfälle """ parameter = DataElementGroupField(type=ScheduledCOR1BatchDebitParameter1, _d="Parameter terminierte SEPA-COR1-Sammellastschrift") + + + +class HKDBS1(FinTS3Segment): + """Bestand terminierter SEPA-Einzellastschriften anfordern, version 1 + + Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Messages -- Multibankfähige Geschäftsvorfälle """ + account = DataElementGroupField(type=KTI1, _d="Kontoverbindung international") + supported_sepa_pain_messages = DataElementGroupField(type=SupportedSEPAPainMessages1, _d="Unterstützte SEPA pain messages") + date_start = DataElementField(type='dat', required=False, _d="Von Datum") + date_end = DataElementField(type='dat', required=False, _d="Bis Datum") + max_number_responses = DataElementField(type='num', max_length=4, required=False, _d="Maximale Anzahl Einträge") + touchdown_point = DataElementField(type='an', max_length=35, required=False, _d="Aufsetzpunkt") + + +class HIDBS1(DebitResponseBase): + """Bestand terminierter SEPA-Einzellastschriften rückmelden, version 1 + + Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Messages -- Multibankfähige Geschäftsvorfälle """ + account = DataElementGroupField(type=KTI1, _d="Kontoverbindung international") + sepa_descriptor = DataElementField(type='an', max_length=256, _d="SEPA Descriptor") + sepa_pain_message = DataElementField(type='bin', _d="SEPA pain message") + task_id = DataElementField(type='an', max_length=99, required=False, _d="Auftragsidentifikation") + task_cancelable = DataElementField(type='jn', required=False, _d="Auftrag löschbar") + task_changeable = DataElementField(type='jn', required=False, _d="Auftrag änderbar") + +class HIDBSS1(ParameterSegment): + """Bestand terminierter SEPA-Einzellastschriften Parameter, version 1 + + Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Messages -- Multibankfähige Geschäftsvorfälle """ + parameter = DataElementGroupField(type=QueryScheduledDebitParameter1, _d="Parameter Bestand terminierter SEPA-Einzellastschriften") + + + +class HKDBS2(FinTS3Segment): + """Bestand terminierter SEPA-Einzellastschriften anfordern, version 2 + + Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Messages -- Multibankfähige Geschäftsvorfälle """ + account = DataElementGroupField(type=KTI1, _d="Kontoverbindung international") + supported_sepa_pain_messages = DataElementGroupField(type=SupportedSEPAPainMessages1, _d="Unterstützte SEPA pain messages") + date_start = DataElementField(type='dat', required=False, _d="Von Datum") + date_end = DataElementField(type='dat', required=False, _d="Bis Datum") + max_number_responses = DataElementField(type='num', max_length=4, required=False, _d="Maximale Anzahl Einträge") + touchdown_point = DataElementField(type='an', max_length=35, required=False, _d="Aufsetzpunkt") + + +class HIDBS2(DebitResponseBase): + """Bestand terminierter SEPA-Einzellastschriften rückmelden, version 2 + + Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Messages -- Multibankfähige Geschäftsvorfälle """ + account = DataElementGroupField(type=KTI1, _d="Kontoverbindung international") + sepa_descriptor = DataElementField(type='an', max_length=256, _d="SEPA Descriptor") + sepa_pain_message = DataElementField(type='bin', _d="SEPA pain message") + task_id = DataElementField(type='an', max_length=99, required=False, _d="Auftragsidentifikation") + sepa_c_code = CodeField(enum=SEPACCode1, _d="SEPA-C-Code") + task_changeable = DataElementField(type='jn', required=False, _d="Auftrag änderbar") + status_sepa_task = CodeField(enum=StatusSEPATask1, _d="Status SEPA-Auftrag") + +class HIDBSS2(ParameterSegment): + """Bestand terminierter SEPA-Einzellastschriften Parameter, version 2 + + Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Messages -- Multibankfähige Geschäftsvorfälle """ + parameter = DataElementGroupField(type=QueryScheduledDebitParameter2, _d="Parameter Bestand terminierter SEPA-Einzellastschriften") + + + +class HKDMB1(FinTS3Segment): + """Bestand terminierter SEPA-Sammellastschriften anfordern, version 1 + + Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Messages -- Multibankfähige Geschäftsvorfälle """ + account = DataElementGroupField(type=KTI1, _d="Kontoverbindung international") + date_start = DataElementField(type='dat', required=False, _d="Von Datum") + date_end = DataElementField(type='dat', required=False, _d="Bis Datum") + max_number_responses = DataElementField(type='num', max_length=4, required=False, _d="Maximale Anzahl Einträge") + touchdown_point = DataElementField(type='an', max_length=35, required=False, _d="Aufsetzpunkt") + + +class HIDMB1(DebitResponseBase): + """Bestand terminierter SEPA-Sammellastschriften rückmelden, version 1 + + Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Messages -- Multibankfähige Geschäftsvorfälle """ + task_id = DataElementField(type='an', max_length=99, required=False, _d="Auftragsidentifikation") + account = DataElementGroupField(type=KTI1, _d="Kontoverbindung international") + date_entered = DataElementField(type='dat', required=False, _d="Einreichungsdatum") + date_booked = DataElementField(type='dat', required=False, _d="Ausführungsdatum") + debit_count = DataElementField(type='num', max_length=6, _d="Anzahl der Aufträge") + sum_amount = DataElementGroupField(type=Amount1, _d="Summe der Beträge") + +class HIDMBS1(ParameterSegment): + """Bestand terminierter SEPA-Sammellastschriften Parameter, version 1 + + Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Messages -- Multibankfähige Geschäftsvorfälle """ + parameter = DataElementGroupField(type=QueryScheduledBatchDebitParameter1, _d="Parameter Bestand terminierter SEPA-Sammellastschriften") + + +