From: Raphael Michel Date: Fri, 7 Dec 2018 14:46:29 +0000 (+0100) Subject: Support SEPAAccounts outside of Germany X-Git-Tag: v2.0.0~1^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=20b36b08dc80e33bd4c5706cb0ffc6cea02c13fa;p=thirdparty%2Fpython-fints.git Support SEPAAccounts outside of Germany --- diff --git a/fints/client.py b/fints/client.py index 19ba927..94bb952 100644 --- a/fints/client.py +++ b/fints/client.py @@ -155,7 +155,7 @@ class FinTS3Client: if isinstance(bank_identifier, BankIdentifier): self.bank_identifier = bank_identifier elif isinstance(bank_identifier, str): - self.bank_identifier = BankIdentifier('280', bank_identifier) + self.bank_identifier = BankIdentifier(BankIdentifier.COUNTRY_ALPHA_TO_NUMERIC['DE'], bank_identifier) else: raise TypeError("bank_identifier must be BankIdentifier or str (BLZ)") self.system_id = SYSTEM_ID_UNASSIGNED diff --git a/fints/formals.py b/fints/formals.py index afe65d0..8cc5477 100644 --- a/fints/formals.py +++ b/fints/formals.py @@ -110,6 +110,44 @@ class SignatureAlgorithm(DataElementGroup): class BankIdentifier(DataElementGroup): + COUNTRY_ALPHA_TO_NUMERIC = { + # Kapitel E.4 der SEPA-Geschäftsvorfälle + 'BE': '056', + 'BG': '100', + 'DK': '208', + 'DE': '280', + 'FI': '246', + 'FR': '250', + 'GR': '300', + 'GB': '826', + 'IE': '372', + 'IS': '352', + 'IT': '380', + 'JP': '392', + 'CA': '124', + 'HR': '191', + 'LI': '438', + 'LU': '442', + 'NL': '528', + 'AT': '040', + 'PL': '616', + 'PT': '620', + 'RO': '642', + 'RU': '643', + 'SE': '752', + 'CH': '756', + 'SK': '703', + 'SI': '705', + 'ES': '724', + 'CZ': '203', + 'TR': '792', + 'HU': '348', + 'US': '840', + 'EU': '978' + } + COUNTRY_NUMERIC_TO_ALPHA = {v: k for k, v in COUNTRY_ALPHA_TO_NUMERIC.items()} + COUNTRY_NUMERIC_TO_ALPHA['276'] = 'DE' # not yet in use by banks, but defined by ISO + country_identifier = DataElementField(type='ctr') bank_code = DataElementField(type='an', max_length=30) @@ -418,9 +456,6 @@ class KTZ1(DataElementGroup): from fints.models import SEPAAccount if not self.is_sepa: return None - if not self.bank_identifier.country_identifier == '280': - # FIXME Limitation of SEPAAccount object - return None return SEPAAccount(self.iban, self.bic, self.account_number, self.subaccount_number, self.bank_identifier.bank_code) @classmethod @@ -432,7 +467,7 @@ class KTZ1(DataElementGroup): account_number=acc.accountnumber, subaccount_number=acc.subaccount, bank_identifier=BankIdentifier( - country_identifier='280', + country_identifier=BankIdentifier.COUNTRY_ALPHA_TO_NUMERIC[acc.bic[4:6]], bank_code=acc.blz ) ) @@ -470,7 +505,7 @@ class Account2(DataElementGroup): return cls( account_number=acc.accountnumber, subaccount_number=acc.subaccount, - country_identifier='280', + country_identifier=BankIdentifier.COUNTRY_ALPHA_TO_NUMERIC[acc.bic[4:6]], bank_code=acc.blz, ) @@ -489,7 +524,7 @@ class Account3(DataElementGroup): account_number=acc.accountnumber, subaccount_number=acc.subaccount, bank_identifier=BankIdentifier( - country_identifier='280', + country_identifier=BankIdentifier.COUNTRY_ALPHA_TO_NUMERIC[acc.bic[4:6]], bank_code=acc.blz ) )