
CAMT-bestanden zijn XML-rapportages die banken gebruiken om financiële mutaties en saldi door te geven. Denk aan je rekeningafschrift, maar dan in een gestandaardiseerd digitaal jasje. Het idee daarvan is dat software die bestanden makkelijker kan uitlezen en automatisch verwerken.
Verschillende versies
Er zijn verschillende “smaken” CAMT-bestanden die elk een ander doel dienen:
-
camt.052: Deze gaat vooral over intraday-transacties (tussenstanden gedurende de dag).
-
camt.053: Dit is je dagelijkse of periodieke rekeningafschrift.
-
camt.054: Geeft meldingen van individuele bij- en afschrijvingen (krediet- en debetnotificaties).
Ze lijken qua structuur behoorlijk op elkaar, maar de inhoud en timing verschillen. Over het algemeen is CAMT.053 (het “End-of-Day Statement”) het meest geschikt voor auditdoeleinden, omdat dit type een volledig overzicht van alle transacties en het eindsaldo voor een bepaalde periode (meestal per dag) biedt.
Hoewel CAMT.052 (intraday) en CAMT.054 (notificaties) ook nuttig kunnen zijn bij bijvoorbeeld het identificeren of traceren van transacties gedurende de dag, zijn deze berichten doorgaans minder geschikt als formele bron voor audits. Ze bieden immers geen ‘afgesloten’ periode‐overzicht, maar eerder (tussentijdse) statusrapporten of notificaties.
Welke banken gebruiken CAMT?
Veel Europese banken ondersteunen intussen CAMT-standaarden. In Nederland kun je denken aan banken als ING, Rabobank en ABN AMRO die het aanbieden als opvolger van de oude MT940-standaard. Ook in andere Europese landen zie je dat grootbanken steeds vaker CAMT-rapportages uitdelen. Het idee is een uniforme standaard, zodat bedrijven en accountants niet hoeven te puzzelen met telkens verschillende bestandsformaten.
Nadelen van batchdetails
Toch is niet alles rozengeur en maneschijn. Soms worden transacties in een batch verzameld. Een voorbeeld: als je een paar onlinebestellingen dezelfde dag doet via één partij, dan kunnen die betalingen gebundeld in je CAMT-bestand staan. Je ziet dan één totaalbedrag in plaats van meerdere losse transacties. Dat is dus wat minder handig als je precies wilt weten welke betalingen er allemaal in dat “gecombineerde” bedrag zitten.
Vaak als je dit soort batch-betalingen doet in de bank, moet hiervoor een SEPA-bestand importeren. Het is aan te raden om deze niet verwijderen; je kunt deze vaak namelijk nog wel achteraf koppelen met een CAMT-bestand, zodat je de details toch kunt inzien.
CAMT naar CSV of Excel
Wanneer je een CAMT-bestand opent, zul je daar niet direct veel van kunnen maken. Vandaar dat veel mensen zoeken naar een geschikte manier om dit om te zetten. Hieronder vind je een simpel Python-scripje. Het is niet supersonisch uitgebreid, maar het laat het principe zien. Je hebt dan nog wel wat XML-kennis nodig, vooral omdat CAMT-bestanden vaak namespaces hebben (zoals urn:iso:std:iso:20022:tech:xsd:camt.053.001.02). Je moet dus even checken welke namespace in jouw CAMT-file staat, en die hierop aanpassen.
import xml.etree.ElementTree as ET
import pandas as pd
import os
# --- Configuratie ---
# Plaats de naam van je CAMT.053 XML-bestand hier
xml_file = 'dummy_camt.053.xml'
# Gewenste naam voor je Excel-bestand
output_excel_file = 'camt_basis_output.xlsx'
# --- Einde Configuratie ---
# Namespace voor CAMT-bestanden
ns = {'camt': 'urn:iso:std:iso:20022:tech:xsd:camt.053.001.02'}
# Controleer of het XML-bestand bestaat
if not os.path.exists(xml_file):
print(f"Error: Het bestand '{xml_file}' niet gevonden. Controleer de bestandsnaam en de map.")
else:
# Parse het XML-bestand
tree = ET.parse(xml_file)
root = tree.getroot()
# Lijst om transactiegegevens op te slaan
transactions = []
# Itereer door alle 'Entry' (transactie) elementen
for entry in root.findall('.//camt:Ntry', ns):
# Basisgegevens
amount_element = entry.find('camt:Amt', ns)
amount = float(amount_element.text) if amount_element is not None else 'N/A'
credit_debit_element = entry.find('camt:CdtDbtInd', ns)
credit_debit = credit_debit_element.text if credit_debit_element is not None else 'N/A'
booking_date_element = entry.find('.//camt:BookgDt/camt:Dt', ns)
booking_date = booking_date_element.text if booking_date_element is not None else 'N/A'
val_date_element = entry.find('.//camt:ValDt/camt:Dt', ns)
value_date = val_date_element.text if val_date_element is not None else 'N/A'
addtl_info_element = entry.find('camt:AddtlNtryInf', ns)
additional_info = addtl_info_element.text if addtl_info_element is not None else 'N/A'
transactions.append({
'Bedrag': amount,
'Type': 'Credit' if credit_debit == 'CRDT' else 'Debet',
'Boekingsdatum': booking_date,
'Valutadatum': value_date,
'Omschrijving': additional_info
})
# Maak een DataFrame en sla op als Excel
if transactions:
df = pd.DataFrame(transactions)
df.to_excel(output_excel_file, index=False)
print(f"Succes! {len(transactions)} transacties zijn geëxporteerd naar '{output_excel_file}'.")
else:
print("Geen transacties gevonden in het bestand.")
Belangrijke CAMT-velden
Het helpt om de structuur te begrijpen wanneer je het script wil gaan uitbreiden of begrijpen:
- Statement Metadata (
Stmt) – Bevat het statement-ID, de aanmaakdatum, rekening en valuta. Dit is de basisbronverwijzing. - Balances (
Bal) – Bevat openings-, eind- en tussentijdse saldi, elk met bedrag en tijdstempel. Deze moeten aansluiten op de grootboek- en bankbevestigingen. - Entries (
Ntry) – De transactieregels met boekingsdatum, valutadatum, bedrag en credit/debit-indicator. Batchbetalingen komen hier vaak als één grote regel terecht. - Entry Details (
NtryDtls→TxDtls) – Verdere details zoals tegenrekening, IBAN/BIC, omschrijving en referenties. Niet alle banken vullen alle velden in, dus scripts moeten ontbrekende velden goed afhandelen.
Als je weet waar deze datapunten staan, kun je makkelijker extra informatie ophalen zoals tegenrekening-IBAN (RltdPties/RltdAcct/Id/IBAN) of betalingsreferenties (RmtInf/Strd).

Hoe CAMT gebruikt wordt in de audit
Auditors gebruiken CAMT-bestanden op verschillende manieren. Een van de meest voorkomende is voor bankaansluiting: de balanssecties (Bal) en transactielijsten maken het eenvoudig om te controleren of alle geldstromen volledig zijn vastgelegd in het grootboek.
Ze zijn ook waardevol voor cut-off- en volledigheidstesten. Door CAMT-bestanden rondom periode-einde te bekijken, kun je controleren of transacties in de juiste periode zijn geboekt.
Tot slot bieden CAMT-bestanden een grote hoeveelheid detail, wat helpt bij het opsporen van afwijkingen. De gestructureerde data maakt het eenvoudiger om zaken te herkennen zoals dubbele betalingen, betalingen naar ongebruikelijke landen, ronde bedragen of betalingen aan nieuwe leveranciers.
Afronding
CAMT-bestanden ogen in eerste instantie ingewikkeld, maar zodra je de belangrijkste elementen kent en een eenvoudige converter hebt, blijken ze een hartstikke handige databron te zijn. Begin nu eerst met een voorbeeldbestand, check een aantal saldi tegen het grootboek, en breid vervolgens het script uit om de extra attributen op te halen die relevant zijn voor jouw audit. Succes!



