English Deutsch

Processing CAMT documents

If orders were submitted in batch mode, there are three methods to resolve the underlying transactions. Either (A) directly within the CAMT52/CAMT53 document, (B) within a separate CAMT54 document or (C) by a reference to the originally transferred PAIN message. The applied method depends on the bank (method B is most commonly used). It could be handeled differently for incoming and outgoing transactions.

import fintech
fintech.register()

from fintech.ebics import EbicsKeyRing, EbicsBank, EbicsUser, EbicsClient
from fintech.sepa import CAMTDocument

keyring = EbicsKeyRing(keys='~/mykeys', passphrase='mysecret')
bank = EbicsBank(keyring=keyring, hostid='MYBANK', url='https://www.mybank.de/ebics')
user = EbicsUser(keyring=keyring, partnerid='CUSTOMER123', userid='USER1')

start = '2016-11-01'
end = '2016-11-30'

with EbicsClient(bank, user) as client:

    camt53 = client.C53(start, end)
    camt54 = client.C54(start, end)

    for name in sorted(camt53):
        doc = CAMTDocument(camt53[name], camt54)
        print('transactions for account:', doc.iban)
        for trans in doc:
            if trans.batch:
                if len(trans):
                    for subtrans in trans:
                        print(subtrans.date, subtrans.name, subtrans.purpose, subtrans.amount)
                elif trans.kref:
                    # Batch transactions referenced by KREF (method C)
                    for subtrans in get_submitted_transactions_by_kref(trans.kref):
                        print(trans.date, subtrans['name'], subtrans['purpose'], subtrans['amount'])
                else:
                    raise RuntimeError('Unresolved batch transaction')
            else:
                print(trans.date, trans.name, trans.purpose, trans.amount)