limit_type = DataElementField(type='code', length=1, required=False)
limit_amount = DataElementField(type='btg', required=False)
limit_days = DataElementField(type='num', max_length=3, required=False)
+
+class TwoStepParameters(DataElementGroup):
+ security_function = DataElementField(type='code', max_length=3)
+ tan_process = DataElementField(type='code', length=1)
+ technical_identification_tan_process = DataElementField(type='id')
+ name_twostep_process = DataElementField(type='an', max_length=30)
+ max_length_tan_entry = DataElementField(type='num', max_length=2)
+ allowed_format_tan_entry = DataElementField(type='code', length=1)
+ return_value_text = DataElementField(type='an', max_length=30)
+ max_length_return_value = DataElementField(type='num', max_length=3)
+ number_supported_tan_lists = DataElementField(type='num', length=1)
+ multiple_tans_allowed = DataElementField(type='jn')
+ tan_time_delayed_allowed = DataElementField(type='jn')
+
+class ParameterTwostepTAN(DataElementGroup):
+ onestep_method_allowed = DataElementField(type='jn')
+ multiple_tasks_allowed = DataElementField(type='jn')
+ hash_algorithm = DataElementField(type='code', length=1)
+ security_profile_bank_signature = DataElementField(type='code', length=1)
+ twostep_parameters = DataElementGroupField(type=TwoStepParameters, min_count=1, max_count=98)
for number, (name, field) in enumerate(retval._fields.items()):
repeat = field.count != 1
constructed = isinstance(field, DataElementGroupField)
+ is_last = number == len(retval._fields)-1
if not repeat:
if not constructed:
break
else:
- deg = self.parse_deg(field.type, data_i, required and field.required)
+ require_last = (field.max_count is None) if is_last else True
+ deg = self.parse_deg(field.type, data_i, require_last and required and field.required)
getattr(retval, name)[i] = deg
i = i + 1
import re
-from fints.formals import Container, ContainerMeta, SegmentHeader, DataElementGroupField, DataElementField, ReferenceMessage, SegmentSequenceField, SecurityProfile, SecurityIdentificationDetails, SecurityDateTime, EncryptionAlgorithm, KeyName, Certificate, HashAlgorithm, SignatureAlgorithm, UserDefinedSignature, Response, AccountInformation, AccountLimit, AllowedTransaction
+from fints.formals import Container, ContainerMeta, SegmentHeader, DataElementGroupField, DataElementField, ReferenceMessage, SegmentSequenceField, SecurityProfile, SecurityIdentificationDetails, SecurityDateTime, EncryptionAlgorithm, KeyName, Certificate, HashAlgorithm, SignatureAlgorithm, UserDefinedSignature, Response, AccountInformation, AccountLimit, AllowedTransaction, ParameterTwostepTAN
from fints.utils import classproperty, SubclassesMixin
account_limit = DataElementGroupField(type=AccountLimit, required=False)
allowed_transactions = DataElementGroupField(type=AllowedTransaction, max_count=999, required=False)
extension = DataElementField(type='an', max_length=2048, required=False)
+
+class HISYN4(FinTS3Segment):
+ customer_system_id = DataElementField(type='id')
+ message_number = DataElementField(type='num', max_length=4, required=False)
+ security_reference_signature_key = DataElementField(type='num', max_length=16, required=False)
+ security_reference_digital_signature = DataElementField(type='num', max_length=16, required=False)
+
+
+class HITANS1(FinTS3Segment):
+ max_number_tasks = DataElementField(type='num', max_length=3)
+ min_number_signatures = DataElementField(type='num', length=1)
+ security_class = DataElementField(type='num', length=1)
+ parameters_twostep_tan = DataElementGroupField(type=ParameterTwostepTAN)