]> git.ipfire.org Git - thirdparty/python-fints.git/commitdiff
Shuffle segments around
authorHenryk Plötz <henryk@ploetzli.ch>
Sat, 8 Sep 2018 19:11:12 +0000 (21:11 +0200)
committerRaphael Michel <mail@raphaelmichel.de>
Mon, 3 Dec 2018 18:34:29 +0000 (19:34 +0100)
17 files changed:
fints/client.py
fints/message.py
fints/parser.py
fints/segments/__init__.py
fints/segments/_base.py [new file with mode: 0644]
fints/segments/accounts.py
fints/segments/auth.py
fints/segments/bank.py [new file with mode: 0644]
fints/segments/debit.py
fints/segments/depot.py
fints/segments/dialog.py
fints/segments/journal.py
fints/segments/message.py
fints/segments/saldo.py
fints/segments/statement.py
fints/segments/transfer.py
fints/types.py

index 2a181c6e0df6477e00db9b0e6b2c01eea8d7bc4c..501e602cae5829844dd87be3916dfd34218b5002 100644 (file)
@@ -27,11 +27,11 @@ from .security import (
     PinTanDummyEncryptionMechanism, PinTanOneStepAuthenticationMechanism,
     PinTanTwoStepAuthenticationMechanism,
 )
-from .segments import HIBPA3, HIRMG2, HIRMS2, HIUPA4, HIPINS1, HKKOM4
+from .segments.bank import HIBPA3, HIUPA4, HKKOM4
 from .segments.accounts import HISPA1, HKSPA1
-from .segments.auth import HKTAB4, HKTAB5, HKTAN3, HKTAN5
+from .segments.auth import HKTAB4, HKTAB5, HKTAN3, HKTAN5, HIPINS1
 from .segments.depot import HKWPD5, HKWPD6
-from .segments.dialog import HISYN4, HKSYN3
+from .segments.dialog import HISYN4, HKSYN3, HIRMG2, HIRMS2
 from .segments.debit import HKDSE1, HKDSE2, HKDME1, HKDME2, HKDSC1, HKDMC1, HKDBS1, HKDBS2, HKDMB1, DebitResponseBase
 from .segments.saldo import HKSAL5, HKSAL6, HKSAL7
 from .segments.statement import HKKAZ5, HKKAZ6, HKKAZ7, DKKKU2
index dc6f5a2f22f2d6a9b898f51b64ea3ff81a5579ab..30d66d8a7eb3ed281da97ed341f8d69e2891038d 100644 (file)
@@ -2,7 +2,10 @@ import random
 from enum import Enum
 
 from .formals import SegmentSequence
-from .segments import HIBPA3, HIRMG2, HIRMS2, FinTS3Segment, HITANSBase
+from .segments._base import FinTS3Segment
+from .segments.auth import HITANSBase
+from .segments.bank import HIBPA3
+from .segments.dialog import HIRMG2, HIRMS2
 from .segments.message import HNHBK3, HNHBS1
 
 
index d313253342061320c7d7509349f571ab38a57ce9..6a2a218489e94420b984e68c7a1030e38862c815 100644 (file)
@@ -6,7 +6,7 @@ from enum import Enum
 from .formals import (
     Container, DataElementGroupField, SegmentSequence, ValueList,
 )
-from .segments import FinTS3Segment
+from .segments._base import FinTS3Segment
 
 # 
 # FinTS 3.0 structure:
index 59ab6cd00a2659cd5498881c42ec844a613ff7a6..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,173 +0,0 @@
-import re
-
-from fints.fields import CodeField, IntCodeField
-from fints.formals import (
-    KTZ1, AccountInformation, AccountLimit, AllowedTransaction, BankIdentifier,
-    Certificate, CompressionFunction, Container, ContainerMeta,
-    DataElementField, DataElementGroupField, EncryptionAlgorithm, HashAlgorithm,
-    KeyName, ParameterPinTan, ParameterTwostepTAN1, ParameterTwostepTAN2,
-    ParameterTwostepTAN3, ParameterTwostepTAN4, ParameterTwostepTAN5,
-    ParameterTwostepTAN6, ReferenceMessage, Response, SecurityApplicationArea,
-    SecurityClass, SecurityDateTime, SecurityIdentificationDetails,
-    SecurityProfile, SecurityRole, SegmentHeader, SegmentSequenceField,
-    SignatureAlgorithm, SupportedHBCIVersions2, SupportedLanguages2, UPDUsage,
-    UserDefinedSignature, Language2, CommunicationParameter2,
-)
-from fints.utils import SubclassesMixin, classproperty
-
-TYPE_VERSION_RE = re.compile(r'^([A-Z]+)(\d+)$')
-
-class FinTS3SegmentMeta(ContainerMeta):
-    @staticmethod
-    def _check_fields_recursive(instance):
-        for name, field in instance._fields.items():
-            if not isinstance(field, (DataElementField, DataElementGroupField)):
-                raise TypeError("{}={!r} is not DataElementField or DataElementGroupField".format(name, field))
-            if isinstance(field, DataElementGroupField):
-                FinTS3SegmentMeta._check_fields_recursive(field.type)
-
-    def __new__(cls, name, bases, classdict):
-        retval = super().__new__(cls, name, bases, classdict)
-        FinTS3SegmentMeta._check_fields_recursive(retval)
-        return retval
-
-class FinTS3Segment(Container, SubclassesMixin, metaclass=FinTS3SegmentMeta):
-    header = DataElementGroupField(type=SegmentHeader, _d="Segmentkopf")
-
-    @classproperty
-    def TYPE(cls):
-        match = TYPE_VERSION_RE.match(cls.__name__)
-        if match:
-            return match.group(1)
-
-    @classproperty
-    def VERSION(cls):
-        match = TYPE_VERSION_RE.match(cls.__name__)
-        if match:
-            return int( match.group(2) )
-
-    def __init__(self, *args, **kwargs):
-        if 'header' not in kwargs:
-            kwargs['header'] = SegmentHeader(self.TYPE, None, self.VERSION)
-
-        args = (kwargs.pop('header'), ) + args
-
-        return super().__init__(*args, **kwargs)
-
-    @classmethod
-    def find_subclass(cls, segment):
-        h = SegmentHeader.naive_parse(segment[0])
-        target_cls = None
-
-        for possible_cls in cls._all_subclasses():
-            if getattr(possible_cls, 'TYPE', None) == h.type and getattr(possible_cls, 'VERSION', None) == h.version:
-                target_cls = possible_cls
-
-        if not target_cls:
-            target_cls = cls
-
-        return target_cls
-
-
-class HIRMG2(FinTS3Segment):
-    "Rückmeldungen zur Gesamtnachricht"
-    responses = DataElementGroupField(type=Response, min_count=1, max_count=99, _d="Rückmeldung")
-
-class HIRMS2(FinTS3Segment):
-    "Rückmeldungen zu Segmenten"
-    responses = DataElementGroupField(type=Response, min_count=1, max_count=99, _d="Rückmeldung")
-
-class HIUPA4(FinTS3Segment):
-    "Userparameter allgemein"
-    user_identifier = DataElementField(type='id', _d="Benutzerkennung")
-    upd_version = DataElementField(type='num', max_length=3, _d="UPD-Version")
-    upd_usage = CodeField(UPDUsage, length=1, _d="UPD-Verwendung")
-    username = DataElementField(type='an', max_length=35, required=False, _d="Benutzername")
-    extension = DataElementField(type='an', max_length=2048, required=False, _d="Erweiterung, allgemein")
-
-class HIUPD6(FinTS3Segment):
-    "Kontoinformationen"
-    account_information = DataElementGroupField(type=AccountInformation, required=False, _d="Kontoverbindung")
-    iban = DataElementField(type='an', max_length=34, _d="IBAN")
-    customer_id = DataElementField(type='id', _d="Kunden-ID")
-    account_type = DataElementField(type='num', max_length=2, _d="Kontoart")
-    account_currency = DataElementField(type='cur', _d="Kontowährung")
-    name_account_owner_1 = DataElementField(type='an', max_length=27, _d="Name des Kontoinhabers 1")
-    name_account_owner_2 = DataElementField(type='an', max_length=27, required=False, _d="Name des Kontoinhabers 2")
-    account_product_name = DataElementField(type='an', max_length=30, required=False, _d="Kontoproduktbezeichnung")
-    account_limit = DataElementGroupField(type=AccountLimit, required=False, _d="Kontolimit")
-    allowed_transactions = DataElementGroupField(type=AllowedTransaction, count=999, required=False, _d="Erlaubte Geschäftsvorfälle")
-    extension = DataElementField(type='an', max_length=2048, required=False, _d="Erweiterung, kontobezogen")
-
-class ParameterSegment_22(FinTS3Segment):
-    max_number_tasks = DataElementField(type='num', max_length=3, _d="Maximale Anzahl Aufträge")
-    min_number_signatures = DataElementField(type='num', length=1, _d="Anzahl Signaturen mindestens")
-
-class ParameterSegment(FinTS3Segment):
-    max_number_tasks = DataElementField(type='num', max_length=3, _d="Maximale Anzahl Aufträge")
-    min_number_signatures = DataElementField(type='num', length=1, _d="Anzahl Signaturen mindestens")
-    security_class = IntCodeField(SecurityClass, length=1, _d="Sicherheitsklasse")
-
-class HITANSBase(ParameterSegment):
-    pass
-
-class HITANS1(HITANSBase):
-    parameter = DataElementGroupField(type=ParameterTwostepTAN1)
-
-class HITANS2(HITANSBase):
-    parameter = DataElementGroupField(type=ParameterTwostepTAN2)
-
-class HITANS3(HITANSBase):
-    parameter = DataElementGroupField(type=ParameterTwostepTAN3)
-
-class HITANS4(HITANSBase):
-    parameter = DataElementGroupField(type=ParameterTwostepTAN4)
-
-class HITANS5(HITANSBase):
-    parameter = DataElementGroupField(type=ParameterTwostepTAN5)
-
-class HITANS6(HITANSBase):
-    parameter = DataElementGroupField(type=ParameterTwostepTAN6)
-
-class HIPINS1(ParameterSegment):
-    """PIN/TAN-spezifische Informationen, version 1
-
-    Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Sicherheitsverfahren PIN/TAN 
-    """
-    parameter = DataElementGroupField(type=ParameterPinTan, _d="Parameter PIN/TAN-spezifische Informationen") 
-
-
-class HIBPA3(FinTS3Segment):
-    """Bankparameter allgemein, version 3
-
-    Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Formals"""
-    bpd_version = DataElementField(type='num', max_length=3, _d="BPD-Version")
-    bank_identifier = DataElementGroupField(type=BankIdentifier, _d="Kreditinstitutskennung")
-    bank_name = DataElementField(type='an', max_length=60, _d="Kreditinstitutsbezeichnung")
-    number_tasks = DataElementField(type='num', max_length=3, _d="Anzahl Geschäftsvorfallarten pro Nachricht")
-    supported_languages = DataElementGroupField(type=SupportedLanguages2, _d="Unterstützte Sprachen")
-    supported_hbci_version = DataElementGroupField(type=SupportedHBCIVersions2, _d="Unterstützte HBCI-Versionen")
-    max_message_length = DataElementField(type='num', max_length=4, required=False, _d="Maximale Nachrichtengröße")
-    min_timeout = DataElementField(type='num', max_length=4, required=False, _d="Minimaler Timeout-Wert")
-    max_timeout = DataElementField(type='num', max_length=4, required=False, _d="Maximaler Timeout-Wert")
-
-class HKKOM4(FinTS3Segment):
-    """Kommunikationszugang anfordern, version 4
-
-    Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Formals"""
-    start_bank_identifier = DataElementGroupField(type=BankIdentifier, required=False, _d="Von Kreditinstitutskennung")
-    end_bank_identifier = DataElementGroupField(type=BankIdentifier, required=False, _d="Bis Kreditinstitutskennung")
-    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 HIKOM4(FinTS3Segment):
-    """Kommunikationszugang rückmelden, version 4
-
-    Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Formals"""
-    bank_identifier = DataElementGroupField(type=BankIdentifier, _d="Kreditinstitutskennung")
-    default_language = CodeField(enum=Language2, max_length=3, _d="Standardsprache")
-    communication_parameters = DataElementGroupField(type=CommunicationParameter2, min_count=1, max_count=9, _d="Kommunikationsparameter")
-
-from . import (
-    accounts, auth, debit, depot, dialog, message, saldo, statement, transfer, journal,
-)
diff --git a/fints/segments/_base.py b/fints/segments/_base.py
new file mode 100644 (file)
index 0000000..7680f89
--- /dev/null
@@ -0,0 +1,69 @@
+import re
+
+from fints.fields import DataElementField, DataElementGroupField, IntCodeField
+from fints.types import Container, ContainerMeta
+from fints.formals import SegmentHeader, SecurityClass
+from fints.utils import SubclassesMixin, classproperty
+
+TYPE_VERSION_RE = re.compile(r'^([A-Z]+)(\d+)$')
+
+class FinTS3SegmentMeta(ContainerMeta):
+    @staticmethod
+    def _check_fields_recursive(instance):
+        for name, field in instance._fields.items():
+            if not isinstance(field, (DataElementField, DataElementGroupField)):
+                raise TypeError("{}={!r} is not DataElementField or DataElementGroupField".format(name, field))
+            if isinstance(field, DataElementGroupField):
+                FinTS3SegmentMeta._check_fields_recursive(field.type)
+
+    def __new__(cls, name, bases, classdict):
+        retval = super().__new__(cls, name, bases, classdict)
+        FinTS3SegmentMeta._check_fields_recursive(retval)
+        return retval
+
+class FinTS3Segment(Container, SubclassesMixin, metaclass=FinTS3SegmentMeta):
+    header = DataElementGroupField(type=SegmentHeader, _d="Segmentkopf")
+
+    @classproperty
+    def TYPE(cls):
+        match = TYPE_VERSION_RE.match(cls.__name__)
+        if match:
+            return match.group(1)
+
+    @classproperty
+    def VERSION(cls):
+        match = TYPE_VERSION_RE.match(cls.__name__)
+        if match:
+            return int( match.group(2) )
+
+    def __init__(self, *args, **kwargs):
+        if 'header' not in kwargs:
+            kwargs['header'] = SegmentHeader(self.TYPE, None, self.VERSION)
+
+        args = (kwargs.pop('header'), ) + args
+
+        return super().__init__(*args, **kwargs)
+
+    @classmethod
+    def find_subclass(cls, segment):
+        h = SegmentHeader.naive_parse(segment[0])
+        target_cls = None
+
+        for possible_cls in cls._all_subclasses():
+            if getattr(possible_cls, 'TYPE', None) == h.type and getattr(possible_cls, 'VERSION', None) == h.version:
+                target_cls = possible_cls
+
+        if not target_cls:
+            target_cls = cls
+
+        return target_cls
+
+
+class ParameterSegment_22(FinTS3Segment):
+    max_number_tasks = DataElementField(type='num', max_length=3, _d="Maximale Anzahl Aufträge")
+    min_number_signatures = DataElementField(type='num', length=1, _d="Anzahl Signaturen mindestens")
+
+class ParameterSegment(FinTS3Segment):
+    max_number_tasks = DataElementField(type='num', max_length=3, _d="Maximale Anzahl Aufträge")
+    min_number_signatures = DataElementField(type='num', length=1, _d="Anzahl Signaturen mindestens")
+    security_class = IntCodeField(SecurityClass, length=1, _d="Sicherheitsklasse")
index fad213d18da2dec30220dc9aa7c436a524680a78..677c73e315f0c93c11f4c2d7d55eabbe42e9e983 100644 (file)
@@ -1,4 +1,4 @@
-from . import FinTS3Segment, ParameterSegment
+from ._base import FinTS3Segment, ParameterSegment
 from ..fields import DataElementGroupField
 from ..formals import KTZ1, Account3, GetSEPAAccountParameter1
 
index c6278db1a8202d7a58104735f842aa9c9f076941..06131073f1f08921d6e050fd4081558e9c309d00 100644 (file)
@@ -2,9 +2,12 @@ from fints.fields import CodeField, DataElementField, DataElementGroupField
 from fints.formals import (
     BankIdentifier, Language2, SynchronisationMode, SystemIDStatus,
     TANMediaType2, TANMediaClass4, TANMedia5, TANMediaClass3, TANMedia4, TANUsageOption,
-    KTI1, ParameterChallengeClass, ResponseHHDUC, ChallengeValidUntil
+    KTI1, ParameterChallengeClass, ResponseHHDUC, ChallengeValidUntil,
+    ParameterTwostepTAN1, ParameterTwostepTAN2, ParameterTwostepTAN3, ParameterTwostepTAN4,
+    ParameterTwostepTAN5, ParameterTwostepTAN6, ParameterPinTan, SupportedLanguages2,
+    SupportedHBCIVersions2
 )
-from . import FinTS3Segment
+from ._base import FinTS3Segment, ParameterSegment
 
 
 class HKIDN2(FinTS3Segment):
@@ -149,3 +152,33 @@ class HITAB5(FinTS3Segment):
 
     tan_usage_option = CodeField(enum=TANUsageOption, _d="TAN_Einsatzoption")
     tan_media_list = DataElementGroupField(type=TANMedia5, max_count=99, required=False, _d="TAN-Medium-Liste")
+
+class HITANSBase(ParameterSegment):
+    pass
+
+class HITANS1(HITANSBase):
+    parameter = DataElementGroupField(type=ParameterTwostepTAN1)
+
+class HITANS2(HITANSBase):
+    parameter = DataElementGroupField(type=ParameterTwostepTAN2)
+
+class HITANS3(HITANSBase):
+    parameter = DataElementGroupField(type=ParameterTwostepTAN3)
+
+class HITANS4(HITANSBase):
+    parameter = DataElementGroupField(type=ParameterTwostepTAN4)
+
+class HITANS5(HITANSBase):
+    parameter = DataElementGroupField(type=ParameterTwostepTAN5)
+
+class HITANS6(HITANSBase):
+    parameter = DataElementGroupField(type=ParameterTwostepTAN6)
+
+class HIPINS1(ParameterSegment):
+    """PIN/TAN-spezifische Informationen, version 1
+
+    Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Sicherheitsverfahren PIN/TAN 
+    """
+    parameter = DataElementGroupField(type=ParameterPinTan, _d="Parameter PIN/TAN-spezifische Informationen") 
+
+
diff --git a/fints/segments/bank.py b/fints/segments/bank.py
new file mode 100644 (file)
index 0000000..645b8f9
--- /dev/null
@@ -0,0 +1,56 @@
+from ._base import FinTS3Segment
+from fints.fields import DataElementField, CodeField, DataElementGroupField
+from fints.formals import UPDUsage, AccountInformation, AccountLimit, AllowedTransaction, BankIdentifier, Language2, CommunicationParameter2, SupportedLanguages2, SupportedHBCIVersions2
+
+class HIBPA3(FinTS3Segment):
+    """Bankparameter allgemein, version 3
+
+    Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Formals"""
+    bpd_version = DataElementField(type='num', max_length=3, _d="BPD-Version")
+    bank_identifier = DataElementGroupField(type=BankIdentifier, _d="Kreditinstitutskennung")
+    bank_name = DataElementField(type='an', max_length=60, _d="Kreditinstitutsbezeichnung")
+    number_tasks = DataElementField(type='num', max_length=3, _d="Anzahl Geschäftsvorfallarten pro Nachricht")
+    supported_languages = DataElementGroupField(type=SupportedLanguages2, _d="Unterstützte Sprachen")
+    supported_hbci_version = DataElementGroupField(type=SupportedHBCIVersions2, _d="Unterstützte HBCI-Versionen")
+    max_message_length = DataElementField(type='num', max_length=4, required=False, _d="Maximale Nachrichtengröße")
+    min_timeout = DataElementField(type='num', max_length=4, required=False, _d="Minimaler Timeout-Wert")
+    max_timeout = DataElementField(type='num', max_length=4, required=False, _d="Maximaler Timeout-Wert")
+
+class HIUPA4(FinTS3Segment):
+    "Userparameter allgemein"
+    user_identifier = DataElementField(type='id', _d="Benutzerkennung")
+    upd_version = DataElementField(type='num', max_length=3, _d="UPD-Version")
+    upd_usage = CodeField(UPDUsage, length=1, _d="UPD-Verwendung")
+    username = DataElementField(type='an', max_length=35, required=False, _d="Benutzername")
+    extension = DataElementField(type='an', max_length=2048, required=False, _d="Erweiterung, allgemein")
+
+class HIUPD6(FinTS3Segment):
+    "Kontoinformationen"
+    account_information = DataElementGroupField(type=AccountInformation, required=False, _d="Kontoverbindung")
+    iban = DataElementField(type='an', max_length=34, _d="IBAN")
+    customer_id = DataElementField(type='id', _d="Kunden-ID")
+    account_type = DataElementField(type='num', max_length=2, _d="Kontoart")
+    account_currency = DataElementField(type='cur', _d="Kontowährung")
+    name_account_owner_1 = DataElementField(type='an', max_length=27, _d="Name des Kontoinhabers 1")
+    name_account_owner_2 = DataElementField(type='an', max_length=27, required=False, _d="Name des Kontoinhabers 2")
+    account_product_name = DataElementField(type='an', max_length=30, required=False, _d="Kontoproduktbezeichnung")
+    account_limit = DataElementGroupField(type=AccountLimit, required=False, _d="Kontolimit")
+    allowed_transactions = DataElementGroupField(type=AllowedTransaction, count=999, required=False, _d="Erlaubte Geschäftsvorfälle")
+    extension = DataElementField(type='an', max_length=2048, required=False, _d="Erweiterung, kontobezogen")
+
+class HKKOM4(FinTS3Segment):
+    """Kommunikationszugang anfordern, version 4
+
+    Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Formals"""
+    start_bank_identifier = DataElementGroupField(type=BankIdentifier, required=False, _d="Von Kreditinstitutskennung")
+    end_bank_identifier = DataElementGroupField(type=BankIdentifier, required=False, _d="Bis Kreditinstitutskennung")
+    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 HIKOM4(FinTS3Segment):
+    """Kommunikationszugang rückmelden, version 4
+
+    Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Formals"""
+    bank_identifier = DataElementGroupField(type=BankIdentifier, _d="Kreditinstitutskennung")
+    default_language = CodeField(enum=Language2, max_length=3, _d="Standardsprache")
+    communication_parameters = DataElementGroupField(type=CommunicationParameter2, min_count=1, max_count=9, _d="Kommunikationsparameter")
index 84763bc6c93fa897ba4ab4966ee2fff4512b934e..33673de46d394e2e368330386dd78f79db0b346b 100644 (file)
@@ -1,8 +1,7 @@
-from . import FinTS3Segment
+from ._base import FinTS3Segment, ParameterSegment
 from ..models import SEPAAccount
 from ..fields import DataElementField, DataElementGroupField, CodeField
 from ..formals import ScheduledCOR1DebitParameter1, ScheduledCOR1BatchDebitParameter1, KTI1, Amount1, ScheduledBatchDebitParameter1, ScheduledBatchDebitParameter2, ScheduledDebitParameter1, ScheduledDebitParameter2, SupportedSEPAPainMessages1, QueryScheduledDebitParameter1, QueryScheduledDebitParameter2, SEPACCode1, StatusSEPATask1, QueryScheduledBatchDebitParameter1
-from . import ParameterSegment
 
 class BatchDebitBase(FinTS3Segment):
     account = DataElementGroupField(type=KTI1, _d="Kontoverbindung international")
index 63d6730223843258792cec2e39582e832b99d35a..9bd781cc49cfdff77b9a568ae98f2ca081211026 100644 (file)
@@ -1,7 +1,7 @@
 from fints.fields import DataElementField, DataElementGroupField
 from fints.formals import Account2, Account3
 
-from . import FinTS3Segment
+from ._base import FinTS3Segment
 
 
 class HKWPD5(FinTS3Segment):
index 9421ba08c2c622294318b4c5d821f0cdffbc4028..5773eeed61867e3de5cf884802e1c3a501737124 100644 (file)
@@ -1,6 +1,6 @@
-from . import FinTS3Segment
-from ..fields import CodeField, DataElementField
-from ..formals import SynchronisationMode
+from ._base import FinTS3Segment
+from ..fields import CodeField, DataElementField, DataElementGroupField
+from ..formals import SynchronisationMode, Response
 
 
 class HKSYN3(FinTS3Segment):
@@ -21,3 +21,12 @@ class HKEND1(FinTS3Segment):
 
     Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Formals"""
     dialogue_id = DataElementField(type='id', _d="Dialog-ID")
+
+class HIRMG2(FinTS3Segment):
+    "Rückmeldungen zur Gesamtnachricht"
+    responses = DataElementGroupField(type=Response, min_count=1, max_count=99, _d="Rückmeldung")
+
+class HIRMS2(FinTS3Segment):
+    "Rückmeldungen zu Segmenten"
+    responses = DataElementGroupField(type=Response, min_count=1, max_count=99, _d="Rückmeldung")
+
index 4718befdb6c52e0d2154441e12045d464bf7c610..25a9b7725673c966b489caa4f9646125ce8a4be5 100644 (file)
@@ -3,7 +3,7 @@ from fints.formals import (
     ReferenceMessage, Response
 )
 
-from . import FinTS3Segment, ParameterSegment, ParameterSegment_22
+from ._base import FinTS3Segment, ParameterSegment, ParameterSegment_22
 
 class HKPRO3(FinTS3Segment):
     """Statusprotokoll anfordern, version 3
index f214283a2896243ca57b9e4ae8166a3d65526f36..93d1f5b049fbe8690df32fd0a7dd5ff8fd9b7d92 100644 (file)
@@ -10,7 +10,7 @@ from fints.formals import (
     SecurityDateTime, SecurityIdentificationDetails, SecurityProfile,
     SecurityRole, SignatureAlgorithm, UserDefinedSignature,
 )
-from . import FinTS3Segment
+from ._base import FinTS3Segment
 
 
 class HNHBK3(FinTS3Segment):
index a4264493430b180e9f26524f29f281d678b85982..5f35a796e5a3a60c72eab2fc4a96beb45ae53a5b 100644 (file)
@@ -3,7 +3,7 @@ from fints.formals import (
     KTI1, Account2, Account3, Amount1, Balance1, Balance2, Timestamp1,
 )
 
-from . import FinTS3Segment
+from ._base import FinTS3Segment
 
 
 class HKSAL5(FinTS3Segment):
index c3fede31ac80d51de6b0ac98903a86422ee28cfe..b3c61945d73cb5d994186693c53c19638b7f1f5c 100644 (file)
@@ -3,7 +3,7 @@ from fints.formals import (
     KTI1, Account3, Account2, QueryCreditCardStatements2
 )
 
-from . import FinTS3Segment, ParameterSegment
+from ._base import FinTS3Segment, ParameterSegment
 
 
 
index 739769611b3ebee27a560825a8dded26f7233f09..515cf68fc2ebd1ad82af612b74aeb4af8d619d84 100644 (file)
@@ -3,7 +3,7 @@ from fints.formals import (
     KTI1, Amount1, BatchTransferParameter1
 )
 
-from . import FinTS3Segment, ParameterSegment
+from ._base import FinTS3Segment, ParameterSegment
 from ..models import SEPAAccount
 
 
index b24cfd9fbd8395e883b57312cdb7f7d0abb0b638..a44a015d3a2d98f5af7190f3243f4865e4ba6a5e 100644 (file)
@@ -2,7 +2,6 @@ from collections import Iterable, OrderedDict
 
 import fints.fields
 
-
 class ValueList:
     def __init__(self, parent):
         self._parent = parent