TL;DR: SWIFT wird MT940 bis November 2028 abschalten. Bank Statement Parser verarbeitet sowohl MT940 als auch CAMT.053 mit einer einzigen API. So funktioniert Ihre Parsing-Pipeline während der Umstellung und danach.
Warum diese Migration wichtig ist
SWIFT stellt die alten MT-Nachrichtenformate zugunsten des reichhaltigeren ISO 20022-Standards ein. Für Treasury- und Finanzteams bedeutet das: Ihre Verarbeitungspipelines für Kontoauszüge müssen vor den festen Fristen von MT940 auf CAMT.053 umgestellt werden.
SWIFT-Migrationszeitplan
| Datum | Meilenstein | Auswirkung |
|---|---|---|
| November 2025 | Ende der MT-zu-MX-Koexistenz für grenzüberschreitende Zahlungen | PACS-Nachrichten sind jetzt nur noch ISO 20022 |
| November 2026 | Strukturierte/hybride Adressen obligatorisch; MT101 Multi-Instruction abgelehnt; Case Management Phase 1 | Adressformate müssen konform sein; einige MT-Nachrichten werden abgelehnt |
| Ende 2026 | Opt-in für den Empfang von CAMT.052/.053/.054 beginnt | Finanzinstitute können native ISO-Auszüge empfangen |
| November 2027 | Alle Finanzinstitute müssen CAMT.053 nativ empfangen können | SWIFT stellt die Konvertierung von MT nach ISO ein; Ihre Systeme müssen CAMT direkt parsen |
| November 2028 | Vollständige Abschaltung von MT940/MT942/MT950/MT900/MT910 | Alte Auszugsformate nicht mehr verfügbar; CAMT.052/.053/.054 sind die einzige Option |
Was sich für Ihren Code ändert
Vorher: Nur MT940
from bankstatementparser import Mt940Parser
parser = Mt940Parser("statement.mt940")
df = parser.parse()
Nachher: Beide Formate mit automatischer Erkennung
from bankstatementparser import create_parser, detect_statement_format
fmt = detect_statement_format("statement.xml") # or .mt940
parser = create_parser("statement.xml", fmt)
df = parser.parse() # Same DataFrame schema regardless of format
Die Funktion detect_statement_format() erkennt, ob die Datei MT940, CAMT.053, PAIN.001 oder ein anderes unterstütztes Format ist. Die Funktion create_parser() gibt den passenden Parser zurück. Ihr nachgelagerter Code funktioniert unabhängig vom Quellformat identisch.
CAMT.053 vs. MT940: Wesentliche Unterschiede
| Merkmal | MT940 | CAMT.053 |
|---|---|---|
| Datenreichtum | Begrenzte Felder | 3–5x mehr Daten pro Transaktion |
| Zeichensatz | Begrenzt (SWIFT-Zeichensatz) | Volles Unicode |
| Struktur | Flacher Text mit Tags | XML mit Namespaces |
| Saldomeldung | Nur Anfangs-/Endsaldo | Mehrere Saldotypen |
| Referenzen | Einzelnes Referenzfeld | Mehrere Referenztypen |
| Währungsbehandlung | Einfach | Volle Multi-Währung mit Wechselkursen |
So hilft Bank Statement Parser
- Einheitliche API: MT940, CAMT.053 und PDF-Auszüge mit demselben Workflow parsen — konsistente DataFrame-Ausgabe.
- Automatische Erkennung: Das Format muss nicht vorab bekannt sein.
detect_statement_format()identifiziert es automatisch. - Hybride PDF-Pipeline: Banken, die während der Umstellung nur PDF-Auszüge liefern, werden von
smart_ingest()mit automatischer Saldoprüfung verarbeitet. - Namespace-agnostisch: Verarbeitet jede CAMT.053-Variante (001.02, 001.04 oder bankspezifische Wrapper) ohne Konfiguration.
- Multi-Währungs-Prüfung:
verify_balance_multi_currency()führt die Golden Rule pro Währungsgruppe aus — essenziell für Multi-Währungs-CAMT-Auszüge. - Streaming: Große CAMT-Dateien (50 MB+, 50K+ Transaktionen) mit begrenztem Speicher verarbeiten.
- Ledger-Export: Direkt nach hledger oder beancount-Journalformat für die Treasury-Buchhaltung exportieren.
- Migrationstests: Beide Parser nebeneinander für denselben Zeitraum ausführen, um die Ausgabekonsistenz vor dem Umschalten zu prüfen.
Erste Schritte
pip install bankstatementparser
from bankstatementparser import create_parser, detect_statement_format
# Works with MT940 today, CAMT.053 tomorrow, PDF anytime
for file in bank_statement_files:
fmt = detect_statement_format(file)
parser = create_parser(file, fmt)
df = parser.parse()
process(df) # Your code doesn't change
Für PDF-Auszüge von Banken, die noch keine strukturierten CAMT-Exporte anbieten:
from bankstatementparser.hybrid import smart_ingest
result = smart_ingest("statement.pdf")
assert result.verification.status == "VERIFIED"
Die vollständige Dokumentation lesen
Mit Alternativen vergleichen ❯ | Reale Anwendungsfälle ansehen ❯