Saalesparkasse: `Exception: Cannot change TAN mechanism with a standing dialog`
Hello,
I got new access data for my online banking and now the query via Fints no longer works. The new access data is stored correctly (if I change it, a different error message appears).
fints throws me two exceptions directly at
client = FinTS3PinTanClient(…)
with client:
Traceback (most recent call last):
File "/home/verwaltung/deployment/work/portal/.appenv/ee2dd6b6/lib/python3.10/site-packages/fints/dialog.py", line 85, in init
retval = self.send(*segments, internal_send=True)
File "/home/verwaltung/deployment/work/portal/.appenv/ee2dd6b6/lib/python3.10/site-packages/fints/dialog.py", line 156, in send
self.client.process_response_message(self, response, internal_send=internal_send)
File "/home/verwaltung/deployment/work/portal/.appenv/ee2dd6b6/lib/python3.10/site-packages/fints/client.py", line 241, in process_response_message
self._process_response(dialog, segment, response)
File "/home/verwaltung/deployment/work/portal/.appenv/ee2dd6b6/lib/python3.10/site-packages/fints/client.py", line 1290, in _process_response
self.set_tan_mechanism('999')
File "/home/verwaltung/deployment/work/portal/.appenv/ee2dd6b6/lib/python3.10/site-packages/fints/client.py", line 1344, in set_tan_mechanism
raise Exception("Cannot change TAN mechanism with a standing dialog")
Exception: Cannot change TAN mechanism with a standing dialog
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/verwaltung/deployment/work/portal/bin/import_transactions", line 8, in <module>
sys.exit(import_transactions())
File "/home/verwaltung/deployment/work/portal/.appenv/ee2dd6b6/lib/python3.10/site-packages/sw/allotmentclub/scripts.py", line 82, in import_transactions
import_transactions_from_fints(user)
File "/home/verwaltung/deployment/work/portal/.appenv/ee2dd6b6/lib/python3.10/site-packages/sw/allotmentclub/account.py", line 169, in import_transactions_from_fints
with client:
File "/home/verwaltung/deployment/work/portal/.appenv/ee2dd6b6/lib/python3.10/site-packages/fints/client.py", line 251, in __enter__
self._standing_dialog.__enter__()
File "/home/verwaltung/deployment/work/portal/.appenv/ee2dd6b6/lib/python3.10/site-packages/fints/dialog.py", line 37, in __enter__
self.init()
File "/home/verwaltung/deployment/work/portal/.appenv/ee2dd6b6/lib/python3.10/site-packages/fints/dialog.py", line 103, in init
raise FinTSDialogInitError("Couldn't establish dialog with bank, Authentication data wrong?") from e
fints.exceptions.FinTSDialogInitError: Couldn't establish dialog with bank, Authentication data wrong?
The error also occurs with the test code from the documentation (extended to include the product_id parameter, which is mandatory since version 4.0.0).
I've already gone through the code with the debugger and noticed that self.get_tan_mechanisms() is always empty.
Does anyone have an idea what's going wrong here?
Thanks in advance!
Here the output of the debug script from the documentation:
DEBUG:fints.connection:Sending >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
fints.message.FinTSCustomerMessage([
fints.segments.message.HNHBK3( # Nachrichtenkopf
header = fints.formals.SegmentHeader('HNHBK', 1, 3), # Segmentkopf
message_size = 401, # Größe der Nachricht (nach Verschlüsselung und Komprimierung)
hbci_version = 300, # HBCI-Version
dialog_id = '0', # Dialog-ID
message_number = 1, # Nachrichtennummer
),
fints.segments.message.HNVSK3( # Verschlüsselungskopf, version 3
header = fints.formals.SegmentHeader('HNVSK', 998, 3), # Segmentkopf
security_profile = fints.formals.SecurityProfile( # Sicherheitsprofil
security_method = fints.formals.SecurityMethod.PIN, # Sicherheitsverfahren
security_method_version = 1, # Version des Sicherheitsverfahrens
),
security_function = '998', # Sicherheitsfunktion, kodiert
security_role = fints.formals.SecurityRole.ISS, # Rolle des Sicherheitslieferanten, kodiert: Erfasser, Erstsignatur
security_identification_details = fints.formals.SecurityIdentificationDetails( # Sicherheitsidentifikation, Details
identified_role = fints.formals.IdentifiedRole.MS, # Message Sender
cid = None,
identifier = '0',
),
security_datetime = fints.formals.SecurityDateTime( # Sicherheitsdatum und -uhrzeit
date_time_type = fints.formals.DateTimeType.STS, # Sicherheitszeitstempel
date = datetime.date(2023, 12, 11),
time = datetime.time(15, 2, 36, 643587),
),
encryption_algorithm = fints.formals.EncryptionAlgorithm( # Verschlüsselungsalgorithmus
usage_encryption = fints.formals.UsageEncryption.OSY, # Owner Symmetric
operation_mode = fints.formals.OperationMode.CBC, # Cipher Block Chaining
encryption_algorithm = fints.formals.EncryptionAlgorithmCoded.TWOKEY3DES, # 2-Key-Triple-DES
algorithm_parameter_value = b'\x00\x00\x00\x00\x00\x00\x00\x00',
algorithm_parameter_name = fints.formals.AlgorithmParameterName.KYE, # Symmetrischer Schlüssel, verschlüsselt mit symmetrischem Schlüssel
algorithm_parameter_iv_name = fints.formals.AlgorithmParameterIVName.IVC, # Initialization value, clear text
),
key_name = fints.formals.KeyName( # Schlüsselname
bank_identifier = fints.formals.BankIdentifier(
country_identifier = '280',
bank_code = '80053762',
),
user_id = 'MatthiasSchulz',
key_type = fints.formals.KeyType.V, # Schlüsselart: Chiffrierschlüssel
key_number = 0,
key_version = 0,
),
compression_function = fints.formals.CompressionFunction.NULL, # Komprimierungsfunktion: Keine Kompression
),
fints.segments.message.HNVSD1( # Verschlüsselte Daten, version 1
header = fints.formals.SegmentHeader('HNVSD', 999, 1), # Segmentkopf
data = fints.types.SegmentSequence([ # Daten, verschlüsselt
fints.segments.message.HNSHK4( # Signaturkopf, version 4
header = fints.formals.SegmentHeader('HNSHK', 2, 4), # Segmentkopf
security_profile = fints.formals.SecurityProfile( # Sicherheitsprofil
security_method = fints.formals.SecurityMethod.PIN, # Sicherheitsverfahren
security_method_version = 1, # Version des Sicherheitsverfahrens
),
security_function = '999', # Sicherheitsfunktion, kodiert
security_reference = '7980934', # Sicherheitskontrollreferenz
security_application_area = fints.formals.SecurityApplicationArea.SHM, # Bereich der Sicherheitsapplikation, kodiert: Signaturkopf und HBCI-Nutzdaten
security_role = fints.formals.SecurityRole.ISS, # Rolle des Sicherheitslieferanten, kodiert: Erfasser, Erstsignatur
security_identification_details = fints.formals.SecurityIdentificationDetails( # Sicherheitsidentifikation, Details
identified_role = fints.formals.IdentifiedRole.MS, # Message Sender
cid = None,
identifier = '0',
),
security_reference_number = 1, # Sicherheitsreferenznummer
security_datetime = fints.formals.SecurityDateTime( # Sicherheitsdatum und -uhrzeit
date_time_type = fints.formals.DateTimeType.STS, # Sicherheitszeitstempel
date = datetime.date(2023, 12, 11),
time = datetime.time(15, 2, 36, 642778),
),
hash_algorithm = fints.formals.HashAlgorithm( # Hashalgorithmus
usage_hash = '1',
hash_algorithm = '999',
algorithm_parameter_name = '1',
),
signature_algorithm = fints.formals.SignatureAlgorithm( # Signaturalgorithmus
usage_signature = '6',
signature_algorithm = '10',
operation_mode = '16',
),
key_name = fints.formals.KeyName( # Schlüsselname
bank_identifier = fints.formals.BankIdentifier(
country_identifier = '280',
bank_code = '80053762',
),
user_id = 'MatthiasSchulz',
key_type = fints.formals.KeyType.S, # Schlüsselart: Signierschlüssel
key_number = 0,
key_version = 0,
),
),
fints.segments.auth.HKIDN2( # Identifikation, version 2
header = fints.formals.SegmentHeader('HKIDN', 3, 2), # Segmentkopf
bank_identifier = fints.formals.BankIdentifier( # Kreditinstitutskennung
country_identifier = '280',
bank_code = '80053762',
),
customer_id = 'MatthiasSchulz', # Kunden-ID
system_id = '0', # Kundensystem-ID
system_id_status = fints.formals.SystemIDStatus.ID_NECESSARY, # Kundensystem-Status: Kundensystem-ID wird benötigt
),
fints.segments.auth.HKVVB3( # Verarbeitungsvorbereitung, version 3
header = fints.formals.SegmentHeader('HKVVB', 4, 3), # Segmentkopf
bpd_version = 0, # BPD-Version
upd_version = 0, # UPD-Version
language = fints.formals.Language2.DE, # Dialogsprache: Deutsch, 'de', Subset Deutsch, Codeset 1 (Latin 1)
product_name = '2AC02E69EB63F836395DAE10A', # Produktbezeichnung
product_version = '4.0.0', # Produktversion
),
fints.segments.dialog.HKSYN3( # Synchronisierung, version 3
header = fints.formals.SegmentHeader('HKSYN', 5, 3), # Segmentkopf
synchronization_mode = fints.formals.SynchronizationMode.NEW_SYSTEM_ID, # Neue Kundensystem-ID zurückmelden
),
fints.segments.message.HNSHA2( # Signaturabschluss, version 2
header = fints.formals.SegmentHeader('HNSHA', 6, 2), # Segmentkopf
security_reference = '7980934', # Sicherheitskontrollreferenz
user_defined_signature = fints.formals.UserDefinedSignature( # Benutzerdefinierte Signatur
pin = '***',
),
),
]),
),
fints.segments.message.HNHBS1( # Nachrichtenabschluss
header = fints.formals.SegmentHeader('HNHBS', 7, 1), # Segmentkopf
message_number = 1, # Nachrichtennummer
),
])
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): banking-st5.s-fints-pt-st.de:443
DEBUG:urllib3.connectionpool:https://banking-st5.s-fints-pt-st.de:443 "POST /fints30 HTTP/1.1" 200 14572
DEBUG:fints.connection:Received <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
fints.message.FinTSInstituteMessage([
fints.segments.message.HNHBK3( # Nachrichtenkopf
header = fints.formals.SegmentHeader('HNHBK', 1, 3), # Segmentkopf
message_size = 10649, # Größe der Nachricht (nach Verschlüsselung und Komprimierung)
hbci_version = 300, # HBCI-Version
dialog_id = '915348896396=747655803543CN8H=', # Dialog-ID
message_number = 1, # Nachrichtennummer
reference_message = fints.formals.ReferenceMessage( # Bezugsnachricht
dialog_id = '915348896396=747655803543CN8H=',
message_number = 1,
),
),
fints.segments.message.HNVSK3( # Verschlüsselungskopf, version 3
header = fints.formals.SegmentHeader('HNVSK', 998, 3), # Segmentkopf
security_profile = fints.formals.SecurityProfile( # Sicherheitsprofil
security_method = fints.formals.SecurityMethod.PIN, # Sicherheitsverfahren
security_method_version = 1, # Version des Sicherheitsverfahrens
),
security_function = '998', # Sicherheitsfunktion, kodiert
security_role = fints.formals.SecurityRole.ISS, # Rolle des Sicherheitslieferanten, kodiert: Erfasser, Erstsignatur
security_identification_details = fints.formals.SecurityIdentificationDetails( # Sicherheitsidentifikation, Details
identified_role = fints.formals.IdentifiedRole.MR, # Message Receiver
cid = None,
identifier = '0',
),
security_datetime = fints.formals.SecurityDateTime( # Sicherheitsdatum und -uhrzeit
date_time_type = fints.formals.DateTimeType.STS, # Sicherheitszeitstempel
date = datetime.date(2023, 12, 11),
time = datetime.time(15, 2, 36),
),
encryption_algorithm = fints.formals.EncryptionAlgorithm( # Verschlüsselungsalgorithmus
usage_encryption = fints.formals.UsageEncryption.OSY, # Owner Symmetric
operation_mode = fints.formals.OperationMode.CBC, # Cipher Block Chaining
encryption_algorithm = fints.formals.EncryptionAlgorithmCoded.TWOKEY3DES, # 2-Key-Triple-DES
algorithm_parameter_value = b'\x00\x00\x00\x00\x00\x00\x00\x00',
algorithm_parameter_name = fints.formals.AlgorithmParameterName.KYE, # Symmetrischer Schlüssel, verschlüsselt mit symmetrischem Schlüssel
algorithm_parameter_iv_name = fints.formals.AlgorithmParameterIVName.IVC, # Initialization value, clear text
),
key_name = fints.formals.KeyName( # Schlüsselname
bank_identifier = fints.formals.BankIdentifier(
country_identifier = '280',
bank_code = '80053762',
),
user_id = 'MatthiasSchulz',
key_type = fints.formals.KeyType.V, # Schlüsselart: Chiffrierschlüssel
key_number = 0,
key_version = 0,
),
compression_function = fints.formals.CompressionFunction.NULL, # Komprimierungsfunktion: Keine Kompression
),
fints.segments.message.HNVSD1( # Verschlüsselte Daten, version 1
header = fints.formals.SegmentHeader('HNVSD', 999, 1), # Segmentkopf
data = fints.types.SegmentSequence([ # Daten, verschlüsselt
fints.segments.message.HNSHK4( # Signaturkopf, version 4
header = fints.formals.SegmentHeader('HNSHK', 2, 4), # Segmentkopf
security_profile = fints.formals.SecurityProfile( # Sicherheitsprofil
security_method = fints.formals.SecurityMethod.PIN, # Sicherheitsverfahren
security_method_version = 1, # Version des Sicherheitsverfahrens
),
security_function = '999', # Sicherheitsfunktion, kodiert
security_reference = '7980934', # Sicherheitskontrollreferenz
security_application_area = fints.formals.SecurityApplicationArea.SHM, # Bereich der Sicherheitsapplikation, kodiert: Signaturkopf und HBCI-Nutzdaten
security_role = fints.formals.SecurityRole.ISS, # Rolle des Sicherheitslieferanten, kodiert: Erfasser, Erstsignatur
security_identification_details = fints.formals.SecurityIdentificationDetails( # Sicherheitsidentifikation, Details
identified_role = fints.formals.IdentifiedRole.MR, # Message Receiver
cid = None,
identifier = '0',
),
security_reference_number = 1, # Sicherheitsreferenznummer
security_datetime = fints.formals.SecurityDateTime( # Sicherheitsdatum und -uhrzeit
date_time_type = fints.formals.DateTimeType.STS, # Sicherheitszeitstempel
date = datetime.date(2023, 12, 11),
time = datetime.time(15, 2, 36),
),
hash_algorithm = fints.formals.HashAlgorithm( # Hashalgorithmus
usage_hash = '1',
hash_algorithm = '999',
algorithm_parameter_name = '1',
),
signature_algorithm = fints.formals.SignatureAlgorithm( # Signaturalgorithmus
usage_signature = '6',
signature_algorithm = '10',
operation_mode = '16',
),
key_name = fints.formals.KeyName( # Schlüsselname
bank_identifier = fints.formals.BankIdentifier(
country_identifier = '280',
bank_code = '80053762',
),
user_id = 'MatthiasSchulz',
key_type = fints.formals.KeyType.S, # Schlüsselart: Signierschlüssel
key_number = 0,
key_version = 0,
),
),
fints.segments.dialog.HIRMG2( # Rückmeldungen zur Gesamtnachricht
header = fints.formals.SegmentHeader('HIRMG', 3, 2), # Segmentkopf
responses = [ # Rückmeldung
fints.formals.Response( # Rückmeldung
code = '3060',
reference_element = None,
text = 'Bitte beachten Sie die enthaltenen Warnungen/Hinweise.',
),
],
),
fints.segments.dialog.HIRMS2( # Rückmeldungen zu Segmenten
header = fints.formals.SegmentHeader('HIRMS', 4, 2, 5), # Segmentkopf
responses = [ # Rückmeldung
fints.formals.Response( # Rückmeldung
code = '0020',
reference_element = None,
text = 'Auftrag ausgeführt.',
),
],
),
fints.segments.dialog.HIRMS2( # Rückmeldungen zu Segmenten
header = fints.formals.SegmentHeader('HIRMS', 5, 2, 4), # Segmentkopf
responses = [ # Rückmeldung
fints.formals.Response( # Rückmeldung
code = '3050',
reference_element = None,
text = 'BPD nicht mehr aktuell, aktuelle Version enthalten.',
),
fints.formals.Response( # Rückmeldung
code = '3920',
reference_element = None,
text = 'Zugelassene Zwei-Schritt-Verfahren für den Benutzer.',
parameters = [
'923',
],
),
fints.formals.Response( # Rückmeldung
code = '0020',
reference_element = None,
text = 'Der Auftrag wurde ausgeführt.',
),
],
),
fints.segments.bank.HIBPA3( # Bankparameter allgemein, version 3
header = fints.formals.SegmentHeader('HIBPA', 6, 3, 4), # Segmentkopf
bpd_version = 12, # BPD-Version
bank_identifier = fints.formals.BankIdentifier( # Kreditinstitutskennung
country_identifier = '280',
bank_code = '80053762',
),
bank_name = 'Saalesparkasse', # Kreditinstitutsbezeichnung
number_tasks = 3, # Anzahl Geschäftsvorfallarten pro Nachricht
supported_languages = fints.formals.SupportedLanguages2( # Unterstützte Sprachen
languages = [
fints.formals.Language2.DE, # Deutsch, 'de', Subset Deutsch, Codeset 1 (Latin 1)
],
),
supported_hbci_version = fints.formals.SupportedHBCIVersions2( # Unterstützte HBCI-Versionen
versions = [
'300',
],
),
),
fints.segments.bank.HIKOM4( # Kommunikationszugang rückmelden, version 4
header = fints.formals.SegmentHeader('HIKOM', 7, 4, 4), # Segmentkopf
bank_identifier = fints.formals.BankIdentifier( # Kreditinstitutskennung
country_identifier = '280',
bank_code = '80053762',
),
default_language = fints.formals.Language2.DE, # Standardsprache: Deutsch, 'de', Subset Deutsch, Codeset 1 (Latin 1)
communication_parameters = [ # Kommunikationsparameter
fints.formals.CommunicationParameter2( # Kommunikationsparameter
service_type = fints.formals.ServiceType2.HTTPS, # Kommunikationsdienst: https
address = 'banking-st5.s-fints-pt-st.de/fints30', # Kommunikationsadresse
),
],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HISHV', 8, 3, 4), # Segmentkopf
_additional_data = ['N', ['PIN', '1']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HICSUS', 9, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['INTC;CORT', 'urn:iso:std:iso:20022:tech:xsd:pain.001.001.03']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIPKBS', 10, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', 'N'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIPKAS', 11, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HISALS', 12, 8, 4), # Segmentkopf
_additional_data = ['1', '1', '0', 'J'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIPCRS', 13, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIPWES', 14, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', 'J'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIPWLS', 15, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['N', 'J', 'J']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIPWBS', 16, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['N', 'N']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIPWAS', 17, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', 'J'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIBMBS', 18, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['J', 'J']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIDMLS', 19, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIBMLS', 20, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.debit.HIDMBS1( # Bestand terminierter SEPA-Sammellastschriften Parameter, version 1
header = fints.formals.SegmentHeader('HIDMBS', 21, 1, 4), # Segmentkopf
max_number_tasks = 1, # Maximale Anzahl Aufträge
min_number_signatures = 1, # Anzahl Signaturen mindestens
security_class = fints.formals.SecurityClass.NONE, # Sicherheitsklasse: Kein Sicherheitsdienst erforderlich
parameter = fints.formals.QueryScheduledBatchDebitParameter1( # Parameter Bestand terminierter SEPA-Sammellastschriften
max_number_responses_allowed = True, # Eingabe Anzahl Einträge erlaubt
date_range_allowed = True, # Zeitraum möglich
),
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIIPZS', 22, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', [';', 'urn:iso:std:iso:20022:tech:xsd:pain.001.001.03']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIIPSS', 23, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['10', 'urn:iso:std:iso:20022:tech:xsd:pain.001.001.03']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIWOKS', 24, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['9999999,99', 'EUR']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIWDHS', 25, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['J', 'N', '730']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIBVES', 26, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', 'E'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIPTZS', 27, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', 'J'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIEEAS', 28, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['DKPTZ', '1', 'N']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIALES', 29, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['V-EC-KARTE', 'V-S-CARD', 'V-WERTKARTE']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIALLS', 30, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIALNS', 31, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['V-EC-KARTE', 'V-S-CARD', 'V-WERTKARTE']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIANAS', 32, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['1', '15']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIANLS', 33, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIBAZS', 34, 2, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['J', 'J']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIBKDS', 35, 4, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIBKUS', 36, 3, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['J', 'N']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIBUMS', 37, 3, 4), # Segmentkopf
_additional_data = ['1', '1', '0', 'N'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIBVAS', 38, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIBVBS', 39, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIBVDS', 40, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIBVKS', 41, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['J', 'V-EC-KARTE', 'V-S-CARD', 'V-WERTKARTE']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIBVPS', 42, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['8', '20']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIBVRS', 43, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['8', '20', None, 'N', 'N']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIBVSS', 44, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIBVSS', 45, 2, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIDFAS', 46, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', 'N'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIDFBS', 47, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIDFCS', 48, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIDFDS', 49, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIDFLS', 50, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIDFUS', 51, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', 'N'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIDFUS', 52, 2, 4), # Segmentkopf
_additional_data = ['1', '1', '0', 'N'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIDIHS', 53, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIDFSS', 54, 2, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['N', '1;DekaBank-Konzern;5;Swisscanto;7;JPMorgan Fleming;8;Lombard Odier;10;Franklin Templeton;11;Gartmore;12;Goldman Sachs;13;Black Rock Merrill;14;Threadneedle;15;UBS;16;Schroders', '10_10', 'Aktienfonds Asien - Pazifik ohne Japan', '10_20', 'Aktienfonds Branche', '10_30', 'Aktienfonds Deutschland', '10_40', 'Aktienfonds Emerging Markets', '10_50', 'Aktienfonds Euroland', '10_60', 'Aktienfonds Europa Länder', '10_70', 'Aktienfonds Europa', '10_80', 'Aktienfonds Japan', '10_90', 'Aktienfonds Lateinamerika', '10_100', 'Aktienfonds Nordamerika', '10_110', 'Aktienfonds Osteuropa', '10_120', 'Aktienfonds Welt', '10_400', 'Aktienfonds Afrika', '10_410', 'Aktienfonds Mittlerer Osten', '10_420', 'Aktienfonds Nordeuropa', '20_130', 'Dachfonds Chance Plus', '20_140', 'Dachfonds Chance', '20_150', 'Dachfonds Ertrag Plus', '20_160', 'Dachfonds Ertrag', '20_170', 'Dachfonds Wachstum', '20_180', 'Dachfonds laufzeitbegrenzt', '30_430', 'Garantiefonds', '40_200', 'Geldmarktfonds', '40_210', 'Geldmarktnahe Fonds', '50_220', 'Alternative Investmentfonds Hedgefonds', '50_230', 'Alternative Investmentfonds Private Equity', '50_240', 'Alternative Investmentfonds Rohstofffonds', '60_250', 'Sonderkonzepte Absolute-/Total-Returnstrategiefonds', '60_260', 'Sonderkonzepte Altersvorsorgefonds', '60_270', 'Sonderkonzepte Institutionelle Fondskonzepte', '60_280', 'Sonderkonzepte Steuerorientierte Fonds', '70_30', 'Immobilienfonds Deutschland', '70_70', 'Immobilienfonds Europa', '70_120', 'Immobilienfonds Welt', '80_50', 'Mischfonds Euroland', '80_290', 'Mischfonds ausgewogen', '80_300', 'Mischfonds dynamisch', '80_310', 'Mischfonds flexibel', '80_320', 'Mischfonds konservativ', '90_330', 'Rentenfonds Inflationsindexierte Anleihen', '90_340', 'Rentenfonds Laufzeitfonds', '90_350', 'Rentenfonds MBS', '90_360', 'Rentenfonds Nachranganleihen', '90_370', 'Rentenfonds Staatsanleihen', '90_380', 'Rentenfonds Unternehmensanleihen', '90_390', 'Rentenfonds Wandelanleihen']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIDDIS', 55, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['DKDOF;2', 'DKDFO;2']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIDFOS', 56, 2, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIDFPS', 57, 2, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIDPFS', 58, 2, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIDFES', 59, 2, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIDEFS', 60, 2, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIDOFS', 61, 2, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIFAFS', 62, 2, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['N', 'N']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIGBAS', 63, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIGBSS', 64, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', 'J'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIKAUS', 65, 3, 4), # Segmentkopf
_additional_data = ['1', '1', '0', 'N'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIKKAS', 66, 2, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['N', 'N', '2']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIKKSS', 67, 3, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.statement.DIKKUS2( # Kreditkartenumsätze anfordern Parameter, version 2
header = fints.formals.SegmentHeader('DIKKUS', 68, 2, 4), # Segmentkopf
max_number_tasks = 1, # Maximale Anzahl Aufträge
min_number_signatures = 1, # Anzahl Signaturen mindestens
security_class = fints.formals.SecurityClass.NONE, # Sicherheitsklasse: Kein Sicherheitsdienst erforderlich
parameter = fints.formals.QueryCreditCardStatements2( # Parameter Kreditkartenumsätze anfordern
cutoff_days = 90, # Maximale Vorhaltezeit der Umsätze
max_number_responses_allowed = False, # Eingabe Anzahl Einträge erlaubt
date_range_allowed = True, # Zeitraum möglich
),
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIPAES', 69, 1, 4), # Segmentkopf
_additional_data = ['1', '1'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIPSAS', 70, 1, 4), # Segmentkopf
_additional_data = ['1', '1'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIPSPS', 71, 1, 4), # Segmentkopf
_additional_data = ['1', '1'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIQUOS', 72, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIQUTS', 73, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DITLAS', 74, 1, 4), # Segmentkopf
_additional_data = ['1', '1'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DITLFS', 75, 1, 4), # Segmentkopf
_additional_data = ['1', '1', 'N'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DITLFS', 76, 2, 4), # Segmentkopf
_additional_data = ['1', '1', 'N'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DITSPS', 77, 1, 4), # Segmentkopf
_additional_data = ['1', '1', 'N'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIVVDS', 78, 1, 4), # Segmentkopf
_additional_data = ['3', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIVVUS', 79, 1, 4), # Segmentkopf
_additional_data = ['3', '1', '0', ['N', 'J']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIWAPS', 80, 1, 4), # Segmentkopf
_additional_data = ['1', '1', ['J', 'STOP;SLOS;LMTO;MAKT', 'J', 'J', 'GDAY;GTMO;GTHD', 'J', '1', 'N', 'N', 'N', '9999999,99', 'EUR']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIWAPS', 81, 4, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['J', 'STOP;STLI;LMTO;MAKT;OCOO;TRST', 'J', 'J', 'J', 'J', 'J', 'GDAY;GTMO;GTHD', 'J', '1', 'N', 'N', 'N', '9999999,99', 'EUR']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIWDGS', 82, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['J', 'N', 'N']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIWGVS', 83, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['J', '730', 'N']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIWLVS', 84, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['J', '365', 'N']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DINZPS', 85, 3, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['N', 'N', '4', 'N', 'N', None, None, 'N', 'J']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIFOPS', 86, 3, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['N', '4', 'N', 'N', 'N', None, None, None, 'MAKT', 'N', 'J']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIFPOS', 87, 3, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['N', '4', 'N', 'N', None, None, 'N', 'J']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIWOPS', 88, 5, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['0', 'N', '4', 'N', 'N', None, None, None, '9999999,99', 'EUR', 'STOP;STLI;LMTO;MAKT;OCOO;TRST', 'BUYI;SELL;AUCT;CONT;ALNO;DIHA', 'GDAY;GTMO;GTHD;GTCA;IOCA;OPEN;CLOS;FIKI', 'N', 'J']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIWVBS', 89, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['N', 'N']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIZDFS', 90, 2, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('DIZDLS', 91, 2, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIAUBS', 92, 5, 4), # Segmentkopf
_additional_data = ['1', '1', '1'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIBMES', 93, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['2', '28', '2', '28', '1000', 'J', 'N']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIBSES', 94, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['2', '28', '2', '28']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HICAZS', 95, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['450', 'N', 'N', 'urn:iso:std:iso:20022:tech:xsd:camt.052.001.02', 'urn:iso:std:iso:20022:tech:xsd:camt.052.001.08']],
),
fints.segments.transfer.HICCMS1( # SEPA-Sammelüberweisung Parameter, version 1
header = fints.formals.SegmentHeader('HICCMS', 96, 1, 4), # Segmentkopf
max_number_tasks = 1, # Maximale Anzahl Aufträge
min_number_signatures = 1, # Anzahl Signaturen mindestens
security_class = fints.formals.SecurityClass.NONE, # Sicherheitsklasse: Kein Sicherheitsdienst erforderlich
parameter = fints.formals.BatchTransferParameter1( # Parameter SEPA-Sammelüberweisung
max_transfer_count = 1000, # Maximale Anzahl CreditTransferTransactionInformation
sum_amount_required = True, # Summenfeld benötigt
single_booking_allowed = False, # Einzelbuchung erlaubt
),
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HICCSS', 97, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HICDBS', 98, 1, 4), # Segmentkopf
_additional_data = ['3', '1', '0', 'N'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HICDES', 99, 1, 4), # Segmentkopf
_additional_data = ['3', '1', '0', ['4', '0', '9999', '0102030612', '01020304050607080910111213141516171819202122232425262728293099']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HICDLS', 100, 1, 4), # Segmentkopf
_additional_data = ['3', '1', '0', ['0', '9999', 'J', 'J']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HICDNS', 101, 1, 4), # Segmentkopf
_additional_data = ['3', '1', '0', ['0', '0', '9999', 'J', 'J', 'J', 'J', 'J', 'N', 'J', 'J', 'J', '0102030612', '01020304050607080910111213141516171819202122232425262728293099']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HICDUS', 102, 1, 4), # Segmentkopf
_additional_data = ['3', '1', '0', ['1', '0', '9999', '1', 'N', 'N']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HICMBS', 103, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['N', 'J']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HICMES', 104, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['1', '360', '1000', 'J', 'N']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HICMLS', 105, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HICSAS', 106, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['1', '360']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HICSBS', 107, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['N', 'J']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HICSES', 108, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['1', '360']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HICSLS', 109, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', 'J'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HICUBS', 110, 1, 4), # Segmentkopf
_additional_data = ['3', '1', '0', 'J'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HICUMS', 111, 1, 4), # Segmentkopf
_additional_data = ['3', '1', '0', [';', 'urn:iso:std:iso:20022:tech:xsd:pain.001.001.03']],
),
fints.segments.debit.HIDMES1( # Terminierte SEPA-Sammellastschrift einreichen Parameter, version 1
header = fints.formals.SegmentHeader('HIDMES', 112, 1, 4), # Segmentkopf
max_number_tasks = 1, # Maximale Anzahl Aufträge
min_number_signatures = 1, # Anzahl Signaturen mindestens
security_class = fints.formals.SecurityClass.NONE, # Sicherheitsklasse: Kein Sicherheitsdienst erforderlich
parameter = fints.formals.ScheduledBatchDebitParameter1( # Parameter terminierte SEPA-Sammellastschrift einreichen
min_advance_notice_FNAL_RCUR = 2, # Minimale Vorlaufzeit FNAL/RCUR
max_advance_notice_FNAL_RCUR = 28, # Maximale Vorlaufzeit FNAL/RCUR
min_advance_notice_FRST_OOFF = 2, # Minimale Vorlaufzeit FRST/OOFF
max_advance_notice_FRST_OOFF = 28, # Maximale Vorlaufzeit FRST/OOFF
max_debit_count = 1000, # Maximale Anzahl DirectDebitTransfer TransactionInformation
sum_amount_required = True, # Summenfeld benötigt
single_booking_allowed = False, # Einzelbuchung erlaubt
),
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIDSBS', 113, 1, 4), # Segmentkopf
_additional_data = ['3', '1', '0', ['J', 'J', '56']],
),
fints.segments.debit.HIDSES1( # Terminierte SEPA-Einzellastschrift einreichen Parameter, version 1
header = fints.formals.SegmentHeader('HIDSES', 114, 1, 4), # Segmentkopf
max_number_tasks = 1, # Maximale Anzahl Aufträge
min_number_signatures = 1, # Anzahl Signaturen mindestens
security_class = fints.formals.SecurityClass.NONE, # Sicherheitsklasse: Kein Sicherheitsdienst erforderlich
parameter = fints.formals.ScheduledDebitParameter1( # Parameter terminierte SEPA-Sammellastschrift einreichen
min_advance_notice_FNAL_RCUR = 2, # Minimale Vorlaufzeit FNAL/RCUR
max_advance_notice_FNAL_RCUR = 28, # Maximale Vorlaufzeit FNAL/RCUR
min_advance_notice_FRST_OOFF = 2, # Minimale Vorlaufzeit FRST/OOFF
max_advance_notice_FRST_OOFF = 28, # Maximale Vorlaufzeit FRST/OOFF
),
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIDSWS', 115, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', 'N'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIEKAS', 116, 2, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['J', 'J', 'N', '1']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIEKAS', 117, 3, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['J', 'J', 'N', '1']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIEKPS', 118, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['J', 'J', 'N']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIFGBS', 119, 2, 4), # Segmentkopf
_additional_data = ['3', '1'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIFGBS', 120, 3, 4), # Segmentkopf
_additional_data = ['3', '1'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIFRDS', 121, 1, 4), # Segmentkopf
_additional_data = ['1', '1'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIFRDS', 122, 4, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['N', 'J', 'N', '0', 'Kreditinstitut', '1', 'DekaBank']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIKAZS', 123, 4, 4), # Segmentkopf
_additional_data = ['1', '1', ['360', 'J']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIKAZS', 124, 5, 4), # Segmentkopf
_additional_data = ['1', '1', ['360', 'J', 'N']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIKDMS', 125, 2, 4), # Segmentkopf
_additional_data = ['3', '0', '2048'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIKDMS', 126, 3, 4), # Segmentkopf
_additional_data = ['3', '0', '2048'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIKDMS', 127, 4, 4), # Segmentkopf
_additional_data = ['3', '0', '2048'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIKIFS', 128, 1, 4), # Segmentkopf
_additional_data = ['1', '1'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIKIFS', 129, 4, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['J', 'J']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIKIFS', 130, 5, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['J', 'J']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIKIFS', 131, 6, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['J', 'J']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIMTAS', 132, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', 'N'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIMTAS', 133, 2, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['N', 'J']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIMTFS', 134, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIMTRS', 135, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', 'N'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIMTRS', 136, 2, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['N', 'J']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HINEAS', 137, 1, 4), # Segmentkopf
_additional_data = ['1', '1', ['1', '2', '3', '4']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HINEZS', 138, 3, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['N', 'N', '4', 'N', 'N', None, None, 'N', 'J']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIWFOS', 139, 3, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['N', '4', 'N', 'N', 'N', None, None, None, 'MAKT', 'N', 'J']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIWPOS', 140, 5, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['0', 'N', '4', 'N', 'N', None, None, None, '9999999,99', 'EUR', 'STOP;STLI;LMTO;MAKT;OCOO;TRST', 'BUYI;SELL;AUCT;CONT;ALNO;DIHA', 'GDAY;GTMO;GTHD;GTCA;IOCA;OPEN;CLOS;FIKI', 'N', 'J']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIWSDS', 141, 5, 4), # Segmentkopf
_additional_data = ['3', '1', '0', ['J', 'A;Inland DAX', 'B;Inland Sonstige', 'C;Ausland Europa', 'D;Ausland Sonstige']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIFPOS', 142, 3, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['N', '4', 'N', 'N', None, None, 'N', 'J']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIPAES', 143, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIPPDS', 144, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['1', 'Telekom', 'Xtra-Card', 'N', None, None, '15;30;50', '2', 'Vodafone', 'CallYa', 'N', None, None, '15;25;50', '3', 'E-Plus', 'Free and easy', 'N', None, None, '15;20;30', '4', 'O2', 'Loop', 'N', None, None, '15;20;30', '5', 'congstar', 'congstar', 'N', None, None, '15;30;50', '6', 'blau', 'blau', 'N', None, None, '15;20;30', '8', 'o.tel.o', 'o.tel.o', 'N', None, None, '9;19;29', '9', 'SIM Guthaben', 'SIM Guthaben', 'N', None, None, '15;30;50']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIQTGS', 145, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HISALS', 146, 5, 4), # Segmentkopf
_additional_data = ['1', '1'],
),
fints.segments.accounts.HISPAS1( # SEPA-Kontoverbindung anfordern, Parameter, version 1
header = fints.formals.SegmentHeader('HISPAS', 147, 1, 4), # Segmentkopf
max_number_tasks = 1, # Maximale Anzahl Aufträge
min_number_signatures = 1, # Anzahl Signaturen mindestens
security_class = fints.formals.SecurityClass.NONE, # Sicherheitsklasse: Kein Sicherheitsdienst erforderlich
parameter = fints.formals.GetSEPAAccountParameter1( # Parameter SEPA-Kontoverbindung anfordern
single_account_query_allowed = True, # Einzelkontenabruf erlaubt
national_account_allowed = False, # Nationale Kontoverbindung erlaubt
structured_purpose_allowed = False, # Strukturierter Verwendungszweck erlaubt
supported_sepa_formats = [ # Unterstützte SEPA-Datenformate
'urn:iso:std:iso:20022:tech:xsd:pain.001.001.03', # Unterstützte SEPA-Datenformate
'urn:iso:std:iso:20022:tech:xsd:pain.008.001.02', # Unterstützte SEPA-Datenformate
],
),
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HISPAS', 148, 2, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['J', 'N', 'N', 'N', 'urn:iso:std:iso:20022:tech:xsd:pain.001.001.03', 'urn:iso:std:iso:20022:tech:xsd:pain.008.001.02']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIIPES', 149, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['0', '5', '360', '1000', 'J', ';', 'urn:iso:std:iso:20022:tech:xsd:pain.001.001.03', 'urn:iso:std:iso:20022:tech:xsd:pain.001.001.08']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIIPMS', 150, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['1000', 'J', ';', 'urn:iso:std:iso:20022:tech:xsd:pain.001.001.03']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIISSS', 151, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['5', 'urn:iso:std:iso:20022:tech:xsd:pain.002.001.03']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HITABS', 152, 2, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HITABS', 153, 3, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HITABS', 154, 4, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HITAUS', 155, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['N', 'N', 'J']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HITAZS', 156, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HITAZS', 157, 2, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HITMLS', 158, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HITSYS', 159, 1, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['N', 'N']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIWDUS', 160, 4, 4), # Segmentkopf
_additional_data = ['3', '1', '999'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIWFPS', 161, 2, 4), # Segmentkopf
_additional_data = ['3', '1', ['RENTEN', 'INVESTMENTFONDS', 'GENUSSSCHEINE', 'SPARBRIEFE', 'UNTERNEHMENSANLEIHEN', 'EMERGING MARKET ANLEIHEN', 'STRUKTURIERTE ANLEIHEN', 'ZERTIFIKATE', 'AKTIEN', 'OPTIONSSCHEINE', 'ALLE ANGEBOTE EIGENES INSTITUT', 'ALLE ANGEBOTE UEBERGEORD. INSTITUTE']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIWOAS', 162, 2, 4), # Segmentkopf
_additional_data = ['1', '1', ['J', 'STOP;SLOS;LMTO;MAKT', 'J', 'J', 'GDAY;GTMO;GTHD', 'J', '1', 'N', 'N', 'N', '9999999,99', 'EUR']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIWOAS', 163, 4, 4), # Segmentkopf
_additional_data = ['1', '1', '0', ['J', 'STOP;STLI;LMTO;MAKT;OCOO;TRST', 'J', 'J', 'J', 'J', 'J', 'GDAY;GTMO;GTHD', 'J', '1', 'N', 'N', 'N', '9999999,99', 'EUR']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIWPDS', 164, 5, 4), # Segmentkopf
_additional_data = ['1', '1', ['J', 'N', 'N']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIWPRS', 165, 1, 4), # Segmentkopf
_additional_data = ['3', '1', ['J', 'J', 'N', 'N', None, 'Aktien', 'Festverzinsliche Wertpapiere', 'Fonds', 'Fremdwährungsanleihen', 'Genussscheine', 'Indexzertifikate', 'Optionsscheine', 'Wandel- und Optionsanleihen cum']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIWPSS', 166, 1, 4), # Segmentkopf
_additional_data = ['3', '1', 'J'],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIWSOS', 167, 4, 4), # Segmentkopf
_additional_data = ['3', '1', '0', ['J', 'J', '90', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11']],
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HIWSOS', 168, 5, 4), # Segmentkopf
_additional_data = ['3', '1', '0', ['J', 'J', '90', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17']],
),
fints.segments.auth.HITANS6(
header = fints.formals.SegmentHeader('HITANS', 169, 6, 4), # Segmentkopf
max_number_tasks = 1, # Maximale Anzahl Aufträge
min_number_signatures = 1, # Anzahl Signaturen mindestens
security_class = fints.formals.SecurityClass.AUTH, # Sicherheitsklasse: Sicherheitsdienst 'Authentikation'
parameter = fints.formals.ParameterTwostepTAN6(
onestep_method_allowed = True,
multiple_tasks_allowed = False,
task_hash_algorithm = fints.formals.TaskHashAlgorithm.NONE, # Auftrags-Hashwertverfahren: Auftrags-Hashwert nicht unterstützt
twostep_parameters = [
fints.formals.TwoStepParameters6(
security_function = '910', # Sicherheitsfunktion kodiert
tan_process = '2', # TAN-Prozess
tech_id = 'HHD1.3.0', # Technische Identifikation TAN-Verfahren
zka_id = None, # ZKA TAN-Verfahren
zka_version = None, # Version ZKA TAN-Verfahren
name = 'chipTAN manuell', # Name des Zwei-Schritt-Verfahrens
max_length_input = 6, # Maximale Länge des Eingabewertes im Zwei-Schritt-Verfahren
allowed_format = fints.formals.AllowedFormat.NUMERIC, # Erlaubtes Format im Zwei-Schritt-Verfahren: numerisch
text_return_value = 'TAN-Nummer', # Text zur Belegung des Rückgabewertes im Zwei-Schritt-Verfahren
max_length_return_value = 3, # Maximale Länge des Rückgabewertes im Zwei-Schritt-Verfahren
multiple_tans_allowed = True, # Mehrfach-TAN erlaubt
tan_time_dialog_association = fints.formals.TANTimeDialogAssociation.ALLOWED, # TAN Zeit- und Dialogbezug: TAN zeitversetzt / dialogübergreifend erlaubt
cancel_allowed = False, # Auftragsstorno erlaubt
sms_charge_account_required = fints.formals.SMSChargeAccountRequired.MUST_NOT, # SMS-Abbuchungskonto erforderlich: SMS-Abbuchungskonto darf nicht angegeben werden
principal_account_required = fints.formals.PrincipalAccountRequired.MUST_NOT, # Auftraggeberkonto erforderlich: Auftraggeberkonto darf nicht angegeben werden
challenge_class_required = False, # Challenge-Klasse erforderlich
challenge_structured = False, # Challenge strukturiert
initialization_mode = fints.formals.InitializationMode.CLEARTEXT_PIN_NO_TAN, # Initialisierungsmodus: Initialisierungsverfahren mit Klartext-PIN und ohne TAN
description_required = fints.formals.DescriptionRequired.MUST_NOT, # Bezeichnung des TAN-Medium erforderlich: Bezeichnung des TAN-Mediums darf nicht angegeben werden
response_hhd_uc_required = False, # Antwort HHD_UC erforderlich
supported_media_number = 1, # Anzahl unterstützter aktiver TAN-Medien
),
fints.formals.TwoStepParameters6(
security_function = '911', # Sicherheitsfunktion kodiert
tan_process = '2', # TAN-Prozess
tech_id = 'HHD1.3.2OPT', # Technische Identifikation TAN-Verfahren
zka_id = 'HHDOPT1', # ZKA TAN-Verfahren
zka_version = '1.3.2', # Version ZKA TAN-Verfahren
name = 'chipTAN optisch', # Name des Zwei-Schritt-Verfahrens
max_length_input = 6, # Maximale Länge des Eingabewertes im Zwei-Schritt-Verfahren
allowed_format = fints.formals.AllowedFormat.NUMERIC, # Erlaubtes Format im Zwei-Schritt-Verfahren: numerisch
text_return_value = 'TAN-Nummer', # Text zur Belegung des Rückgabewertes im Zwei-Schritt-Verfahren
max_length_return_value = 3, # Maximale Länge des Rückgabewertes im Zwei-Schritt-Verfahren
multiple_tans_allowed = True, # Mehrfach-TAN erlaubt
tan_time_dialog_association = fints.formals.TANTimeDialogAssociation.ALLOWED, # TAN Zeit- und Dialogbezug: TAN zeitversetzt / dialogübergreifend erlaubt
cancel_allowed = False, # Auftragsstorno erlaubt
sms_charge_account_required = fints.formals.SMSChargeAccountRequired.MUST_NOT, # SMS-Abbuchungskonto erforderlich: SMS-Abbuchungskonto darf nicht angegeben werden
principal_account_required = fints.formals.PrincipalAccountRequired.MUST_NOT, # Auftraggeberkonto erforderlich: Auftraggeberkonto darf nicht angegeben werden
challenge_class_required = False, # Challenge-Klasse erforderlich
challenge_structured = False, # Challenge strukturiert
initialization_mode = fints.formals.InitializationMode.CLEARTEXT_PIN_NO_TAN, # Initialisierungsmodus: Initialisierungsverfahren mit Klartext-PIN und ohne TAN
description_required = fints.formals.DescriptionRequired.MUST_NOT, # Bezeichnung des TAN-Medium erforderlich: Bezeichnung des TAN-Mediums darf nicht angegeben werden
response_hhd_uc_required = False, # Antwort HHD_UC erforderlich
supported_media_number = 1, # Anzahl unterstützter aktiver TAN-Medien
),
fints.formals.TwoStepParameters6(
security_function = '912', # Sicherheitsfunktion kodiert
tan_process = '2', # TAN-Prozess
tech_id = 'HHD1.3.2USB', # Technische Identifikation TAN-Verfahren
zka_id = 'HHDUSB1', # ZKA TAN-Verfahren
zka_version = '1.3.2', # Version ZKA TAN-Verfahren
name = 'chipTAN-USB', # Name des Zwei-Schritt-Verfahrens
max_length_input = 6, # Maximale Länge des Eingabewertes im Zwei-Schritt-Verfahren
allowed_format = fints.formals.AllowedFormat.NUMERIC, # Erlaubtes Format im Zwei-Schritt-Verfahren: numerisch
text_return_value = 'TAN-Nummer', # Text zur Belegung des Rückgabewertes im Zwei-Schritt-Verfahren
max_length_return_value = 3, # Maximale Länge des Rückgabewertes im Zwei-Schritt-Verfahren
multiple_tans_allowed = True, # Mehrfach-TAN erlaubt
tan_time_dialog_association = fints.formals.TANTimeDialogAssociation.ALLOWED, # TAN Zeit- und Dialogbezug: TAN zeitversetzt / dialogübergreifend erlaubt
cancel_allowed = False, # Auftragsstorno erlaubt
sms_charge_account_required = fints.formals.SMSChargeAccountRequired.MUST_NOT, # SMS-Abbuchungskonto erforderlich: SMS-Abbuchungskonto darf nicht angegeben werden
principal_account_required = fints.formals.PrincipalAccountRequired.MUST_NOT, # Auftraggeberkonto erforderlich: Auftraggeberkonto darf nicht angegeben werden
challenge_class_required = False, # Challenge-Klasse erforderlich
challenge_structured = False, # Challenge strukturiert
initialization_mode = fints.formals.InitializationMode.CLEARTEXT_PIN_NO_TAN, # Initialisierungsmodus: Initialisierungsverfahren mit Klartext-PIN und ohne TAN
description_required = fints.formals.DescriptionRequired.MUST_NOT, # Bezeichnung des TAN-Medium erforderlich: Bezeichnung des TAN-Mediums darf nicht angegeben werden
response_hhd_uc_required = False, # Antwort HHD_UC erforderlich
supported_media_number = 1, # Anzahl unterstützter aktiver TAN-Medien
),
fints.formals.TwoStepParameters6(
security_function = '913', # Sicherheitsfunktion kodiert
tan_process = '2', # TAN-Prozess
tech_id = 'Q1S', # Technische Identifikation TAN-Verfahren
zka_id = 'Secoder_UC', # ZKA TAN-Verfahren
zka_version = '1.2.0', # Version ZKA TAN-Verfahren
name = 'chipTAN-QR', # Name des Zwei-Schritt-Verfahrens
max_length_input = 6, # Maximale Länge des Eingabewertes im Zwei-Schritt-Verfahren
allowed_format = fints.formals.AllowedFormat.NUMERIC, # Erlaubtes Format im Zwei-Schritt-Verfahren: numerisch
text_return_value = 'TAN-Nummer', # Text zur Belegung des Rückgabewertes im Zwei-Schritt-Verfahren
max_length_return_value = 3, # Maximale Länge des Rückgabewertes im Zwei-Schritt-Verfahren
multiple_tans_allowed = True, # Mehrfach-TAN erlaubt
tan_time_dialog_association = fints.formals.TANTimeDialogAssociation.ALLOWED, # TAN Zeit- und Dialogbezug: TAN zeitversetzt / dialogübergreifend erlaubt
cancel_allowed = False, # Auftragsstorno erlaubt
sms_charge_account_required = fints.formals.SMSChargeAccountRequired.MUST_NOT, # SMS-Abbuchungskonto erforderlich: SMS-Abbuchungskonto darf nicht angegeben werden
principal_account_required = fints.formals.PrincipalAccountRequired.MUST_NOT, # Auftraggeberkonto erforderlich: Auftraggeberkonto darf nicht angegeben werden
challenge_class_required = False, # Challenge-Klasse erforderlich
challenge_structured = False, # Challenge strukturiert
initialization_mode = fints.formals.InitializationMode.CLEARTEXT_PIN_NO_TAN, # Initialisierungsmodus: Initialisierungsverfahren mit Klartext-PIN und ohne TAN
description_required = fints.formals.DescriptionRequired.MUST_NOT, # Bezeichnung des TAN-Medium erforderlich: Bezeichnung des TAN-Mediums darf nicht angegeben werden
response_hhd_uc_required = False, # Antwort HHD_UC erforderlich
supported_media_number = 1, # Anzahl unterstützter aktiver TAN-Medien
),
fints.formals.TwoStepParameters6(
security_function = '920', # Sicherheitsfunktion kodiert
tan_process = '2', # TAN-Prozess
tech_id = 'smsTAN', # Technische Identifikation TAN-Verfahren
zka_id = None, # ZKA TAN-Verfahren
zka_version = None, # Version ZKA TAN-Verfahren
name = 'smsTAN', # Name des Zwei-Schritt-Verfahrens
max_length_input = 6, # Maximale Länge des Eingabewertes im Zwei-Schritt-Verfahren
allowed_format = fints.formals.AllowedFormat.NUMERIC, # Erlaubtes Format im Zwei-Schritt-Verfahren: numerisch
text_return_value = 'TAN-Nummer', # Text zur Belegung des Rückgabewertes im Zwei-Schritt-Verfahren
max_length_return_value = 3, # Maximale Länge des Rückgabewertes im Zwei-Schritt-Verfahren
multiple_tans_allowed = True, # Mehrfach-TAN erlaubt
tan_time_dialog_association = fints.formals.TANTimeDialogAssociation.ALLOWED, # TAN Zeit- und Dialogbezug: TAN zeitversetzt / dialogübergreifend erlaubt
cancel_allowed = False, # Auftragsstorno erlaubt
sms_charge_account_required = fints.formals.SMSChargeAccountRequired.MUST_NOT, # SMS-Abbuchungskonto erforderlich: SMS-Abbuchungskonto darf nicht angegeben werden
principal_account_required = fints.formals.PrincipalAccountRequired.MUST_NOT, # Auftraggeberkonto erforderlich: Auftraggeberkonto darf nicht angegeben werden
challenge_class_required = False, # Challenge-Klasse erforderlich
challenge_structured = False, # Challenge strukturiert
initialization_mode = fints.formals.InitializationMode.CLEARTEXT_PIN_NO_TAN, # Initialisierungsmodus: Initialisierungsverfahren mit Klartext-PIN und ohne TAN
description_required = fints.formals.DescriptionRequired.MUST, # Bezeichnung des TAN-Medium erforderlich: Bezeichnung des TAN-Mediums muss angegeben werden
response_hhd_uc_required = False, # Antwort HHD_UC erforderlich
supported_media_number = 5, # Anzahl unterstützter aktiver TAN-Medien
),
fints.formals.TwoStepParameters6(
security_function = '921', # Sicherheitsfunktion kodiert
tan_process = '2', # TAN-Prozess
tech_id = 'pushTAN', # Technische Identifikation TAN-Verfahren
zka_id = None, # ZKA TAN-Verfahren
zka_version = None, # Version ZKA TAN-Verfahren
name = 'pushTAN', # Name des Zwei-Schritt-Verfahrens
max_length_input = 6, # Maximale Länge des Eingabewertes im Zwei-Schritt-Verfahren
allowed_format = fints.formals.AllowedFormat.NUMERIC, # Erlaubtes Format im Zwei-Schritt-Verfahren: numerisch
text_return_value = 'TAN-Nummer', # Text zur Belegung des Rückgabewertes im Zwei-Schritt-Verfahren
max_length_return_value = 3, # Maximale Länge des Rückgabewertes im Zwei-Schritt-Verfahren
multiple_tans_allowed = True, # Mehrfach-TAN erlaubt
tan_time_dialog_association = fints.formals.TANTimeDialogAssociation.ALLOWED, # TAN Zeit- und Dialogbezug: TAN zeitversetzt / dialogübergreifend erlaubt
cancel_allowed = False, # Auftragsstorno erlaubt
sms_charge_account_required = fints.formals.SMSChargeAccountRequired.MUST_NOT, # SMS-Abbuchungskonto erforderlich: SMS-Abbuchungskonto darf nicht angegeben werden
principal_account_required = fints.formals.PrincipalAccountRequired.MUST_NOT, # Auftraggeberkonto erforderlich: Auftraggeberkonto darf nicht angegeben werden
challenge_class_required = False, # Challenge-Klasse erforderlich
challenge_structured = False, # Challenge strukturiert
initialization_mode = fints.formals.InitializationMode.CLEARTEXT_PIN_NO_TAN, # Initialisierungsmodus: Initialisierungsverfahren mit Klartext-PIN und ohne TAN
description_required = fints.formals.DescriptionRequired.MUST, # Bezeichnung des TAN-Medium erforderlich: Bezeichnung des TAN-Mediums muss angegeben werden
response_hhd_uc_required = False, # Antwort HHD_UC erforderlich
supported_media_number = 2, # Anzahl unterstützter aktiver TAN-Medien
),
fints.formals.TwoStepParameters6(
security_function = '900', # Sicherheitsfunktion kodiert
tan_process = '2', # TAN-Prozess
tech_id = 'iTAN', # Technische Identifikation TAN-Verfahren
zka_id = None, # ZKA TAN-Verfahren
zka_version = None, # Version ZKA TAN-Verfahren
name = 'iTAN', # Name des Zwei-Schritt-Verfahrens
max_length_input = 6, # Maximale Länge des Eingabewertes im Zwei-Schritt-Verfahren
allowed_format = fints.formals.AllowedFormat.NUMERIC, # Erlaubtes Format im Zwei-Schritt-Verfahren: numerisch
text_return_value = 'TAN-Nummer', # Text zur Belegung des Rückgabewertes im Zwei-Schritt-Verfahren
max_length_return_value = 3, # Maximale Länge des Rückgabewertes im Zwei-Schritt-Verfahren
multiple_tans_allowed = True, # Mehrfach-TAN erlaubt
tan_time_dialog_association = fints.formals.TANTimeDialogAssociation.ALLOWED, # TAN Zeit- und Dialogbezug: TAN zeitversetzt / dialogübergreifend erlaubt
cancel_allowed = False, # Auftragsstorno erlaubt
sms_charge_account_required = fints.formals.SMSChargeAccountRequired.MUST_NOT, # SMS-Abbuchungskonto erforderlich: SMS-Abbuchungskonto darf nicht angegeben werden
principal_account_required = fints.formals.PrincipalAccountRequired.MUST_NOT, # Auftraggeberkonto erforderlich: Auftraggeberkonto darf nicht angegeben werden
challenge_class_required = False, # Challenge-Klasse erforderlich
challenge_structured = False, # Challenge strukturiert
initialization_mode = fints.formals.InitializationMode.CLEARTEXT_PIN_NO_TAN, # Initialisierungsmodus: Initialisierungsverfahren mit Klartext-PIN und ohne TAN
description_required = fints.formals.DescriptionRequired.MUST_NOT, # Bezeichnung des TAN-Medium erforderlich: Bezeichnung des TAN-Mediums darf nicht angegeben werden
response_hhd_uc_required = False, # Antwort HHD_UC erforderlich
supported_media_number = 0, # Anzahl unterstützter aktiver TAN-Medien
),
],
),
),
fints.segments.base.FinTS3Segment(
header = fints.formals.SegmentHeader('HITANS', 170, 7, 4), # Segmentkopf
_additional_data = ['1', '1', '1', ['N', 'N', '0', '922', '2', 'pushTAN-dec', 'Decoupled', None, 'pushTAN 2.0', None, None, 'Aufforderung', '2048', 'J', '2', 'N', '0', '0', 'N', 'N', '00', '2', 'N', '2', '180', '1', '1', 'J', 'J', '923', '2', 'pushTAN-cas', 'Decoupled', None, 'pushTAN 2.0', None, None, 'Aufforderung', '2048', 'J', '2', 'N', '0', '0', 'N', 'N', '00', '2', 'N', '5', '180', '1', '1', 'J', 'J']],
),
fints.segments.auth.HIPINS1( # PIN/TAN-spezifische Informationen, version 1
header = fints.formals.SegmentHeader('HIPINS', 171, 1, 4), # Segmentkopf
max_number_tasks = 1, # Maximale Anzahl Aufträge
min_number_signatures = 1, # Anzahl Signaturen mindestens
security_class = fints.formals.SecurityClass.NONE, # Sicherheitsklasse: Kein Sicherheitsdienst erforderlich
parameter = fints.formals.ParameterPinTan( # Parameter PIN/TAN-spezifische Informationen
min_pin_length = 5,
max_pin_length = 38,
max_tan_length = 6,
user_id_field_text = 'USERID',
customer_id_field_text = 'CUSTID',
transaction_tans_required = [
fints.formals.TransactionTanRequired(
transaction = 'HKCSU',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKPKB',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKPKA',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKSAL',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKPCR',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKPWE',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKPWL',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKPWB',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKPWA',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKBMB',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKDML',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKBML',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKDMB',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKIPZ',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKIPS',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKWOK',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKWDH',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKBVE',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'DKPTZ',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKEEA',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKALE',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'DKALL',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'DKALN',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'DKANA',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'DKANL',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'DKBAZ',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKBKD',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKBKU',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKBUM',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKBVA',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'DKBVB',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'DKBVD',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKBVK',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKBVP',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'DKBVR',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'DKBVS',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKDFA',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKDFB',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKDFC',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'DKDFD',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKDFL',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'DKDFU',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKDIH',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'DKDFS',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKDDI',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKDFO',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'DKDFP',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'DKDPF',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKDFE',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'DKDEF',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKDOF',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKFAF',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKGBA',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'DKGBS',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'DKKAU',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKKKA',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKKKS',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKKKU',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKPAE',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKPSA',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'DKPSP',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKQUO',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKQUT',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKTLA',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKTLF',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'DKTSP',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKVVD',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKVVU',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKWAP',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKWDG',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKWGV',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKWLV',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKNZP',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKFOP',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKFPO',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKWOP',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKWVB',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'DKZDF',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'DKZDL',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKAUB',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKBME',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKBSE',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKCAZ',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKCCM',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKCCS',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKCDB',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKCDE',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKCDL',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKCDN',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKCDU',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKCMB',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKCME',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKCML',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKCSA',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKCSB',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKCSE',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKCSL',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKCUB',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKCUM',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKDME',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKDSB',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKDSE',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKDSW',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKEKA',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKEKP',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKFGB',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKFRD',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKKAZ',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKKDM',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKKIF',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKMTA',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKMTF',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKMTR',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKNEA',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKNEZ',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKWFO',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKWPO',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKWSD',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKFPO',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKPAE',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKPPD',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKQTG',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKSPA',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKIPE',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKIPM',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKISS',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKTAB',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKTAU',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKTAZ',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKTML',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKTSY',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKWDU',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKWFP',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKWOA',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKWPD',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKWPR',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKWPS',
tan_required = True,
),
fints.formals.TransactionTanRequired(
transaction = 'HKWSO',
tan_required = False,
),
fints.formals.TransactionTanRequired(
transaction = 'HKTAN',
tan_required = False,
),
],
),
),
fints.segments.dialog.HISYN4( # Synchronisierungsantwort
header = fints.formals.SegmentHeader('HISYN', 172, 4, 5), # Segmentkopf
system_id = '18d105370282417086c6b3761baae9', # Kundensystem-ID
),
fints.segments.message.HNSHA2( # Signaturabschluss, version 2
header = fints.formals.SegmentHeader('HNSHA', 173, 2), # Segmentkopf
security_reference = '7980934', # Sicherheitskontrollreferenz
),
]),
),
fints.segments.message.HNHBS1( # Nachrichtenabschluss
header = fints.formals.SegmentHeader('HNHBS', 174, 1), # Segmentkopf
message_number = 1, # Nachrichtennummer
),
])
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
DEBUG:fints.connection:Sending >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
fints.message.FinTSCustomerMessage([
fints.segments.message.HNHBK3( # Nachrichtenkopf
header = fints.formals.SegmentHeader('HNHBK', 1, 3), # Segmentkopf
message_size = 427, # Größe der Nachricht (nach Verschlüsselung und Komprimierung)
hbci_version = 300, # HBCI-Version
dialog_id = '915348896396=747655803543CN8H=', # Dialog-ID
message_number = 2, # Nachrichtennummer
),
fints.segments.message.HNVSK3( # Verschlüsselungskopf, version 3
header = fints.formals.SegmentHeader('HNVSK', 998, 3), # Segmentkopf
security_profile = fints.formals.SecurityProfile( # Sicherheitsprofil
security_method = fints.formals.SecurityMethod.PIN, # Sicherheitsverfahren
security_method_version = 1, # Version des Sicherheitsverfahrens
),
security_function = '998', # Sicherheitsfunktion, kodiert
security_role = fints.formals.SecurityRole.ISS, # Rolle des Sicherheitslieferanten, kodiert: Erfasser, Erstsignatur
security_identification_details = fints.formals.SecurityIdentificationDetails( # Sicherheitsidentifikation, Details
identified_role = fints.formals.IdentifiedRole.MS, # Message Sender
cid = None,
identifier = '18d105370282417086c6b3761baae9',
),
security_datetime = fints.formals.SecurityDateTime( # Sicherheitsdatum und -uhrzeit
date_time_type = fints.formals.DateTimeType.STS, # Sicherheitszeitstempel
date = datetime.date(2023, 12, 11),
time = datetime.time(15, 2, 37, 170645),
),
encryption_algorithm = fints.formals.EncryptionAlgorithm( # Verschlüsselungsalgorithmus
usage_encryption = fints.formals.UsageEncryption.OSY, # Owner Symmetric
operation_mode = fints.formals.OperationMode.CBC, # Cipher Block Chaining
encryption_algorithm = fints.formals.EncryptionAlgorithmCoded.TWOKEY3DES, # 2-Key-Triple-DES
algorithm_parameter_value = b'\x00\x00\x00\x00\x00\x00\x00\x00',
algorithm_parameter_name = fints.formals.AlgorithmParameterName.KYE, # Symmetrischer Schlüssel, verschlüsselt mit symmetrischem Schlüssel
algorithm_parameter_iv_name = fints.formals.AlgorithmParameterIVName.IVC, # Initialization value, clear text
),
key_name = fints.formals.KeyName( # Schlüsselname
bank_identifier = fints.formals.BankIdentifier(
country_identifier = '280',
bank_code = '80053762',
),
user_id = 'MatthiasSchulz',
key_type = fints.formals.KeyType.V, # Schlüsselart: Chiffrierschlüssel
key_number = 0,
key_version = 0,
),
compression_function = fints.formals.CompressionFunction.NULL, # Komprimierungsfunktion: Keine Kompression
),
fints.segments.message.HNVSD1( # Verschlüsselte Daten, version 1
header = fints.formals.SegmentHeader('HNVSD', 999, 1), # Segmentkopf
data = fints.types.SegmentSequence([ # Daten, verschlüsselt
fints.segments.message.HNSHK4( # Signaturkopf, version 4
header = fints.formals.SegmentHeader('HNSHK', 2, 4), # Segmentkopf
security_profile = fints.formals.SecurityProfile( # Sicherheitsprofil
security_method = fints.formals.SecurityMethod.PIN, # Sicherheitsverfahren
security_method_version = 1, # Version des Sicherheitsverfahrens
),
security_function = '999', # Sicherheitsfunktion, kodiert
security_reference = '4656607', # Sicherheitskontrollreferenz
security_application_area = fints.formals.SecurityApplicationArea.SHM, # Bereich der Sicherheitsapplikation, kodiert: Signaturkopf und HBCI-Nutzdaten
security_role = fints.formals.SecurityRole.ISS, # Rolle des Sicherheitslieferanten, kodiert: Erfasser, Erstsignatur
security_identification_details = fints.formals.SecurityIdentificationDetails( # Sicherheitsidentifikation, Details
identified_role = fints.formals.IdentifiedRole.MS, # Message Sender
cid = None,
identifier = '18d105370282417086c6b3761baae9',
),
security_reference_number = 1, # Sicherheitsreferenznummer
security_datetime = fints.formals.SecurityDateTime( # Sicherheitsdatum und -uhrzeit
date_time_type = fints.formals.DateTimeType.STS, # Sicherheitszeitstempel
date = datetime.date(2023, 12, 11),
time = datetime.time(15, 2, 37, 169712),
),
hash_algorithm = fints.formals.HashAlgorithm( # Hashalgorithmus
usage_hash = '1',
hash_algorithm = '999',
algorithm_parameter_name = '1',
),
signature_algorithm = fints.formals.SignatureAlgorithm( # Signaturalgorithmus
usage_signature = '6',
signature_algorithm = '10',
operation_mode = '16',
),
key_name = fints.formals.KeyName( # Schlüsselname
bank_identifier = fints.formals.BankIdentifier(
country_identifier = '280',
bank_code = '80053762',
),
user_id = 'MatthiasSchulz',
key_type = fints.formals.KeyType.S, # Schlüsselart: Signierschlüssel
key_number = 0,
key_version = 0,
),
),
fints.segments.dialog.HKEND1( # Dialogende, version 1
header = fints.formals.SegmentHeader('HKEND', 3, 1), # Segmentkopf
dialog_id = '915348896396=747655803543CN8H=', # Dialog-ID
),
fints.segments.message.HNSHA2( # Signaturabschluss, version 2
header = fints.formals.SegmentHeader('HNSHA', 4, 2), # Segmentkopf
security_reference = '4656607', # Sicherheitskontrollreferenz
user_defined_signature = fints.formals.UserDefinedSignature( # Benutzerdefinierte Signatur
pin = '***',
),
),
]),
),
fints.segments.message.HNHBS1( # Nachrichtenabschluss
header = fints.formals.SegmentHeader('HNHBS', 5, 1), # Segmentkopf
message_number = 2, # Nachrichtennummer
),
])
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): banking-st5.s-fints-pt-st.de:443
DEBUG:urllib3.connectionpool:https://banking-st5.s-fints-pt-st.de:443 "POST /fints30 HTTP/1.1" 200 610
DEBUG:fints.connection:Received <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
fints.message.FinTSInstituteMessage([
fints.segments.message.HNHBK3( # Nachrichtenkopf
header = fints.formals.SegmentHeader('HNHBK', 1, 3), # Segmentkopf
message_size = 446, # Größe der Nachricht (nach Verschlüsselung und Komprimierung)
hbci_version = 300, # HBCI-Version
dialog_id = '915348896396=747655803543CN8H=', # Dialog-ID
message_number = 2, # Nachrichtennummer
reference_message = fints.formals.ReferenceMessage( # Bezugsnachricht
dialog_id = '915348896396=747655803543CN8H=',
message_number = 2,
),
),
fints.segments.message.HNVSK3( # Verschlüsselungskopf, version 3
header = fints.formals.SegmentHeader('HNVSK', 998, 3), # Segmentkopf
security_profile = fints.formals.SecurityProfile( # Sicherheitsprofil
security_method = fints.formals.SecurityMethod.PIN, # Sicherheitsverfahren
security_method_version = 1, # Version des Sicherheitsverfahrens
),
security_function = '998', # Sicherheitsfunktion, kodiert
security_role = fints.formals.SecurityRole.ISS, # Rolle des Sicherheitslieferanten, kodiert: Erfasser, Erstsignatur
security_identification_details = fints.formals.SecurityIdentificationDetails( # Sicherheitsidentifikation, Details
identified_role = fints.formals.IdentifiedRole.MR, # Message Receiver
cid = None,
identifier = '18d105370282417086c6b3761baae9',
),
security_datetime = fints.formals.SecurityDateTime( # Sicherheitsdatum und -uhrzeit
date_time_type = fints.formals.DateTimeType.STS, # Sicherheitszeitstempel
),
encryption_algorithm = fints.formals.EncryptionAlgorithm( # Verschlüsselungsalgorithmus
usage_encryption = fints.formals.UsageEncryption.OSY, # Owner Symmetric
operation_mode = fints.formals.OperationMode.CBC, # Cipher Block Chaining
encryption_algorithm = fints.formals.EncryptionAlgorithmCoded.TWOKEY3DES, # 2-Key-Triple-DES
algorithm_parameter_value = b'\x00\x00\x00\x00\x00\x00\x00\x00',
algorithm_parameter_name = fints.formals.AlgorithmParameterName.KYE, # Symmetrischer Schlüssel, verschlüsselt mit symmetrischem Schlüssel
algorithm_parameter_iv_name = fints.formals.AlgorithmParameterIVName.IVC, # Initialization value, clear text
),
key_name = fints.formals.KeyName( # Schlüsselname
bank_identifier = fints.formals.BankIdentifier(
country_identifier = '280',
bank_code = '80053762',
),
user_id = 'MatthiasSchulz',
key_type = fints.formals.KeyType.V, # Schlüsselart: Chiffrierschlüssel
key_number = 0,
key_version = 0,
),
compression_function = fints.formals.CompressionFunction.NULL, # Komprimierungsfunktion: Keine Kompression
),
fints.segments.message.HNVSD1( # Verschlüsselte Daten, version 1
header = fints.formals.SegmentHeader('HNVSD', 999, 1), # Segmentkopf
data = fints.types.SegmentSequence([ # Daten, verschlüsselt
fints.segments.message.HNSHK4( # Signaturkopf, version 4
header = fints.formals.SegmentHeader('HNSHK', 2, 4), # Segmentkopf
security_profile = fints.formals.SecurityProfile( # Sicherheitsprofil
security_method = fints.formals.SecurityMethod.PIN, # Sicherheitsverfahren
security_method_version = 1, # Version des Sicherheitsverfahrens
),
security_function = '999', # Sicherheitsfunktion, kodiert
security_reference = '4656607', # Sicherheitskontrollreferenz
security_application_area = fints.formals.SecurityApplicationArea.SHM, # Bereich der Sicherheitsapplikation, kodiert: Signaturkopf und HBCI-Nutzdaten
security_role = fints.formals.SecurityRole.ISS, # Rolle des Sicherheitslieferanten, kodiert: Erfasser, Erstsignatur
security_identification_details = fints.formals.SecurityIdentificationDetails( # Sicherheitsidentifikation, Details
identified_role = fints.formals.IdentifiedRole.MR, # Message Receiver
cid = None,
identifier = '18d105370282417086c6b3761baae9',
),
security_reference_number = 1, # Sicherheitsreferenznummer
security_datetime = fints.formals.SecurityDateTime( # Sicherheitsdatum und -uhrzeit
date_time_type = fints.formals.DateTimeType.STS, # Sicherheitszeitstempel
),
hash_algorithm = fints.formals.HashAlgorithm( # Hashalgorithmus
usage_hash = '1',
hash_algorithm = '999',
algorithm_parameter_name = '1',
),
signature_algorithm = fints.formals.SignatureAlgorithm( # Signaturalgorithmus
usage_signature = '6',
signature_algorithm = '10',
operation_mode = '16',
),
key_name = fints.formals.KeyName( # Schlüsselname
bank_identifier = fints.formals.BankIdentifier(
country_identifier = '280',
bank_code = '80053762',
),
user_id = 'MatthiasSchulz',
key_type = fints.formals.KeyType.S, # Schlüsselart: Signierschlüssel
key_number = 0,
key_version = 0,
),
),
fints.segments.dialog.HIRMG2( # Rückmeldungen zur Gesamtnachricht
header = fints.formals.SegmentHeader('HIRMG', 3, 2), # Segmentkopf
responses = [ # Rückmeldung
fints.formals.Response( # Rückmeldung
code = '0010',
reference_element = None,
text = 'Nachricht entgegengenommen.',
),
fints.formals.Response( # Rückmeldung
code = '0100',
reference_element = None,
text = 'Dialog beendet.',
),
],
),
fints.segments.message.HNSHA2( # Signaturabschluss, version 2
header = fints.formals.SegmentHeader('HNSHA', 4, 2), # Segmentkopf
security_reference = '4656607', # Sicherheitskontrollreferenz
),
]),
),
fints.segments.message.HNHBS1( # Nachrichtenabschluss
header = fints.formals.SegmentHeader('HNHBS', 5, 1), # Segmentkopf
message_number = 2, # Nachrichtennummer
),
])
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Traceback (most recent call last):
File "/home/verwaltung/deployment/work/portal/test_sk.py", line 21, in <module>
minimal_interactive_cli_bootstrap(f)
File "/home/verwaltung/deployment/work/portal/lib/python3.10/site-packages/fints/utils.py", line 319, in minimal_interactive_cli_bootstrap
if client.is_tan_media_required() and not client.selected_tan_medium:
File "/home/verwaltung/deployment/work/portal/lib/python3.10/site-packages/fints/client.py", line 1180, in is_tan_media_required
tan_mechanism = self.get_tan_mechanisms()[self.get_current_tan_mechanism()]
KeyError: '999'
Yes, I get the same error. I was able to narrow down the problem somewhat: it occurs at sparkasse that have switched to bpd_version 13. I still have access to sparkasse that work with bpd_vesion 12, so it still works.
They only give 923 as allowed_security_functions. but this is no longer found.
Hi there,
I can confirm @Julzk findings: I still have access to another working account and when I put the debug output of the fints library side by side, the only key difference is the approved two-step procedures returned for the user. Working: 921, 922, not working: 923.
Does the fints library need an update here?
Best regards, Sebastian
This seems to be about the possible TAN authentications, at least that's what I can see from the log:
922: pushTAN-dec (working)
923: pushTAN-cas (not working)
What's the difference here and can you possibly configure this yourself in your account?
now i use https://github.com/torstenklement/libfintx it works with 923
I just spoke on the phone to a technology employee at the savings bank. It is actually the case that the Sparkasse is currently rolling out a newer version of the pushTAN. My account (the one that works) is still on the old one, the one that doesn't work is already on the new method.
@raphaelm: Do you have the capacity to build support for the new procedure (pushTAN-cas, 923) into the library? Unfortunately, I completely lack the technical background here.
I currently don't, if I have, I will check if my Sparkasse is already part of the rollout. Adding support for something I can't test is usually too time-consuming.
We also suddenly have this issue since about a week with Berliner Sparkasse. For 1-2 years it was working fine, but it suddenly broke and i also see only '923' under parameters of 'Zugelassene Zwei-Schritt-Verfahren für den Benutzer.'
The same here since a week. I found some details about the pushTAN CAS standard.
Im FinTS Standard am besten mal nach HKTAN 7 und Status-Abruf schauen. Darauf beruht die ganze Magie letztlich. Nachdem der Auftrag abgeschickt wurde wird mittels HKTAN-Statusabruf per polling oder auf Aufforderung des Kunden die asynchrone Freigabe abgefragt. https://www.hbci-zka.de/spec/aenderungen/kk_3_0_sec_pt.htm und speziell: https://www.hbci-zka.de/dokume…KTAN_7.pdf
Füge primär erstmal den Support für HKTAN7 hinzu. Das ist nicht so viel Aufwand, da sich gegenüber HKTAN6 nicht viel geändert hat (im Wesentlichen sind in den BPD ein paar neue Parameter für PushTAN decoupled hinzugekommen). Das Polling im Hintergrund habe ich in Hibiscus weggelassen, weil es den ganzen Prozess multi-threaded und damit deutlich komplexer gemacht hätte. Im Wesentlichen muss man nur erkennen, ob es sich um ein TAN-loses Verfahren handelt (im ZKA-Methodennamen des Verfahrens steht irgendwas mit "Decouple*". Wenn das der Fall ist, zeige ich statt dem Dialog zur Eingabe der TAN einen quasi eingabelosen Dialog an, der nur einen OK- und Abbrechen-Knopf enthält und den von der Bank übermittelten Text. Sobald der User auf "OK" klickt, gehe ich davon aus, dass der User die Freigabe in der App durchgeführt hat. Der restliche Prozess ist quasi 1:1 der selbe wie mit TAN - nur mit dem Unterschied, dass in der Nachricht nur noch die PIN geschickt wird und die TAN ein Leerstring ist.
Aufpassen muss man dann nur noch bei der TAN-Prozess-Schritten. Neben den Schritten 1,2 und 4 ist jetzt noch ein Schritt "S" hinzugekommen, der in dem Fall stattdessen verwendet wird. Finde ich etwas unglücklich, weil man den Wert jetzt nicht mehr als Integer parsen kann sondern intern als String behandeln muss.
Interesting! I have someone willing to pay me to fix that, but I'm lacking an account to test with still.
If you give me a branch, I'll give you the tracebacks.
Can you have a look at https://github.com/raphaelm/python-fints/pull/162?
Checked the main branch. Throws error. Installed the branch. It works. There are only a few warnings:
pip install "git+https://github.com/raphaelm/python-fints@hktan7"
$ python test.py
Dialog response: 3060 - Bitte beachten Sie die enthaltenen Warnungen/Hinweise.
Dialog response: 3076 - Starke Kundenauthentifizierung nicht notwendig.
Dialog response: 3060 - Bitte beachten Sie die enthaltenen Warnungen/Hinweise.
Dialog response: 3076 - Starke Kundenauthentifizierung nicht notwendig.
Dialog response: 3060 - Bitte beachten Sie die enthaltenen Warnungen/Hinweise.
Dialog response: 3076 - Starke Kundenauthentifizierung nicht notwendig.
Dialog response: 3060 - Bitte beachten Sie die enthaltenen Warnungen/Hinweise.
Dialog response: 3076 - Starke Kundenauthentifizierung nicht notwendig.
Dialog response: 3060 - Bitte beachten Sie die enthaltenen Warnungen/Hinweise.
Dialog response: 3076 - Starke Kundenauthentifizierung nicht notwendig.
Nice one, will check this out soon. 👍🏻
I also tried it - it works, thank you!