From 74e160ce5e18bca1becf4b8d3d4b9df76852036f Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 23 Jul 2015 17:24:51 +0200 Subject: [PATCH] German pain.001.003.03 format --- .../README.rst | 4 + .../data/pain.001.003.03.xsd | 474 ++++++++++++++++++ .../data/payment_type_sepa_sct.xml | 8 + .../wizard/export_sepa.py | 18 +- 4 files changed, 501 insertions(+), 3 deletions(-) create mode 100644 account_banking_sepa_credit_transfer/data/pain.001.003.03.xsd diff --git a/account_banking_sepa_credit_transfer/README.rst b/account_banking_sepa_credit_transfer/README.rst index a07eff7ef..af0817638 100644 --- a/account_banking_sepa_credit_transfer/README.rst +++ b/account_banking_sepa_credit_transfer/README.rst @@ -17,6 +17,10 @@ European Payments Council (http://http://www.europeanpaymentscouncil.eu) use PAIN version 001.001.03, so it's probably the version of PAIN that you should try first. +It also includes pain.001.003.03 which is used in Germany instead of 001.001.03. +You can read more about this here (only in german language): +http://www.ebics.de/startseite/ + Installation ============ diff --git a/account_banking_sepa_credit_transfer/data/pain.001.003.03.xsd b/account_banking_sepa_credit_transfer/data/pain.001.003.03.xsd new file mode 100644 index 000000000..0c3b51e32 --- /dev/null +++ b/account_banking_sepa_credit_transfer/data/pain.001.003.03.xsd @@ -0,0 +1,474 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + If used, it is recommended to be used at ‘Payment Information’ level and not at ‘Credit Transfer Transaction Information’ level. + + + + + + It is recommended that this element be specified at ‘Payment Information’ level. + + + + + This data element may be present either at ‘Payment Information’ or at ‘Credit Transfer Transaction Information’ level. + + + + + + + + + + + + + + + + If a Creditor Reference contains a check digit, the receiving bank is not required to validate this. +If the receiving bank validates the check digit and if this validation fails, the bank may continue its processing and send the transaction to the next party in the chain. +RF Creditor Reference may be used (ISO 11649). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Either ‘BIC or BEI’ or one +occurrence of ‘Other’ is allowed. + + + + + Either ‘Date and Place of Birth’ or one occurrence of ‘Other’ is allowed. + + + + + + + + + + ‘Name’ is limited to 70 characters +in length. + + + + + + + + + + ‘Name’ is limited to 70 characters +in length. + + + + + + + + + + + + + + + + + + Only ‘TRF’ is allowed. + + + + + If present and contains ‘true’, batch booking is requested. If present and contains ‘false’, booking per transaction is requested. If element is not present, pre-agreed customer-to-bank conditions apply. + + + + + + + If used, it is recommended to be used only at ‘Payment Information’ level and not at Credit Transfer Transaction Information’ level. +When Instruction Priority is to be used, ‘Payment Type Information’ must be present at ‘Payment Information’ level. + + + + + + + + + This data element may be present either at ‘Payment Information’ or at ‘Credit Transfer Transaction Information’ level. + + + + + It is recommended that this element be specified at ‘Payment Information’ level. + + + + + + + + + + + + + + + If present, pre-agreed customer-to-bank conditions apply. + + + + + + Depending on the agreement between the Originator and the Originator Bank, ‘Category Purpose’ may be forwarded to the Beneficiary Bank. + + + + + + + + + + Depending on the agreement between the Originator and the Originator Bank, ‘Category Purpose’ may be forwarded to the Beneficiary Bank. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Only codes from the ISO 20022 ExternalPurposeCode list are allowed. + + + + + + + + + + + + + + + + + + + + + + When present, the receiving bank is not obliged to validate the the reference information. + + + + + + + + + + diff --git a/account_banking_sepa_credit_transfer/data/payment_type_sepa_sct.xml b/account_banking_sepa_credit_transfer/data/payment_type_sepa_sct.xml index 31d851edb..dac1fffa7 100644 --- a/account_banking_sepa_credit_transfer/data/payment_type_sepa_sct.xml +++ b/account_banking_sepa_credit_transfer/data/payment_type_sepa_sct.xml @@ -40,6 +40,14 @@ + + SEPA Credit Transfer pain 001.003.03 (used in Germany) + pain.001.003.03 + payment + + + diff --git a/account_banking_sepa_credit_transfer/wizard/export_sepa.py b/account_banking_sepa_credit_transfer/wizard/export_sepa.py index 8ea02de2f..09768ca5c 100644 --- a/account_banking_sepa_credit_transfer/wizard/export_sepa.py +++ b/account_banking_sepa_credit_transfer/wizard/export_sepa.py @@ -104,12 +104,20 @@ class BankingExportSepaWizard(models.TransientModel): bic_xml_tag = 'BICFI' name_maxsize = 140 root_xml_tag = 'CstmrCdtTrfInitn' + # added pain.001.003.03 for German Banks + # it is not in the offical ISO 20022 documentations, but nearly all + # german banks are working with this instead 001.001.03 + elif pain_flavor == 'pain.001.003.03': + bic_xml_tag = 'BIC' + name_maxsize = 70 + root_xml_tag = 'CstmrCdtTrfInitn' else: raise Warning( _("Payment Type Code '%s' is not supported. The only " "Payment Type Codes supported for SEPA Credit Transfers " "are 'pain.001.001.02', 'pain.001.001.03', " - "'pain.001.001.04' and 'pain.001.001.05'.") % + "'pain.001.001.04', 'pain.001.001.05'" + " and 'pain.001.003.03'.") % pain_flavor) gen_args = { 'bic_xml_tag': bic_xml_tag, @@ -128,8 +136,12 @@ class BankingExportSepaWizard(models.TransientModel): } xml_root = etree.Element('Document', nsmap=pain_ns) pain_root = etree.SubElement(xml_root, root_xml_tag) - pain_03_to_05 = \ - ['pain.001.001.03', 'pain.001.001.04', 'pain.001.001.05'] + pain_03_to_05 = [ + 'pain.001.001.03', + 'pain.001.001.04', + 'pain.001.001.05', + 'pain.001.003.03' + ] # A. Group header group_header_1_0, nb_of_transactions_1_6, control_sum_1_7 = \ self.generate_group_header_block(pain_root, gen_args)