]> git.ipfire.org Git - thirdparty/python-fints.git/commitdiff
Add querying of scheduled debits (untested, my bank doesn't support it)
authorHenryk Plötz <henryk@ploetzli.ch>
Sun, 26 Aug 2018 23:05:55 +0000 (01:05 +0200)
committerRaphael Michel <mail@raphaelmichel.de>
Mon, 3 Dec 2018 18:34:29 +0000 (19:34 +0100)
fints/client.py
fints/formals.py
fints/segments/debit.py

index c370efc5db1b1571d93505b6e4eea93ccdf172e9..c60ad2f19c059ad141db481eef0db95ea52ebdf6 100644 (file)
@@ -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)
index 47c39a96673689286b5de2635b43a14cc3a2852c..dc01fd91a55dd78ac46647620d4162d4bbe9b083 100644 (file)
@@ -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
index cd498daccc626e7e5efafa7b3286d92df408e332..75a41a5a0767bd3f419cff4908c50f1db418670e 100644 (file)
@@ -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")
+
+
+