Datenschutz und Compliance
Verlassen Daten meine Infrastruktur?
Nein. Kontoauszug-Parser arbeitet als zustandslose Bibliothek. Die gesamte Verarbeitung -- Parsen, PII-Maskierung, Archiv-Extraktion -- erfolgt im lokalen Arbeitsspeicher Ihrer Laufzeitumgebung. Keine API-Aufrufe, keine Cloud-Dienste, keine Telemetrie. Die XML-Parser sind mit no_network=True gehaertet, wodurch saemtlicher ausgehender Netzwerkverkehr auf Parser-Ebene blockiert wird. Ihre Finanzdaten verlassen zu keinem Zeitpunkt Ihre Umgebung.
Wie funktioniert die PII-Maskierung?
Sensible Felder werden maskiert, bevor sie Ihre Anwendungslogik erreichen. Der Parser erkennt Schuldnernamen, Glaeubigerbezeichnungen, IBANs und Postanschriften und ersetzt diese in der Konsolenausgabe und im Streaming-Modus durch ***REDACTED***.
- Die Maskierung ist standardmaessig aktiv in der CLI-Ausgabe und im Streaming-Modus.
- Dateiexporte (CSV, JSON, Excel) enthalten die vollstaendigen, unmaskierten Daten fuer die Weiterverarbeitung.
- Vollstaendige Daten erhalten Sie mit
--show-piiin der CLI oderredact_pii=Falsein der API.
Ist der Extraktionsprozess deterministisch?
Ja -- byteidentische Ausgabe bei jedem Durchlauf. Bei identischer Eingabedatei liefert der Parser jedes Mal dasselbe Ergebnis. Kein Zufall, keine Modellinferenz, keine heuristische Stichprobennahme. Die CI-Pipeline erzwingt Determinismus mit 467 Tests bei 100 % Branch Coverage, einschliesslich eigenschaftsbasiertem Fuzzing ueber Hypothesis.
Welche Compliance-Standards befolgt das Projekt?
Das Projekt pflegt eine an ISO 13485 ausgerichtete Dokumentation mit vollstaendiger Rueckverfolgbarkeit:
- Ein quantifiziertes Risikoregister mit Schweregrad-/Wahrscheinlichkeitsbewertung und Restrisikobewertung.
- Ein Verifizierungs- und Validierungsplan mit 19 Qualitaetsstufen in 5 Phasen.
- Ein Aenderungssteuerungsverfahren mit Auswirkungsanalyse und Rollback-Protokollen.
- Ein SOUP-Register, das alle Abhaengigkeiten mit Risikostufen und EOL-Tracking abdeckt.
- Eine Rueckverfolgbarkeitsmatrix, die Designanforderungen auf Implementierung und Verifikation abbildet.
Jedes Release beinhaltet ein CycloneDX SBOM, SHA-256-Pruefsummen und eine GitHub Build-Provenance-Attestierung.
Leistung und Skalierbarkeit
Wie schnell ist Kontoauszug-Parser?
Die Leistungsschwellenwerte werden in der CI-Pipeline bei jedem Commit validiert:
| Metrik | Wert |
|---|---|
| CAMT.053-Durchsatz | 27.000+ Transaktionen/Sekunde |
| PAIN.001-Durchsatz | 52.000+ Transaktionen/Sekunde |
| Latenz pro Transaktion (CAMT) | 37 Mikrosekunden |
| Latenz pro Transaktion (PAIN.001) | 19 Mikrosekunden |
| Zeit bis zum ersten Ergebnis | < 2 ms |
Wie werden grosse Dateien verarbeitet?
Streaming mit konstantem Speicherverbrauch -- getestet mit 50.000 Transaktionen pro Datei. Verwenden Sie parse_streaming(), um XML-Dateien inkrementell zu verarbeiten. Jede Transaktion wird als Dictionary zurueckgegeben; Elemente werden nach der Verarbeitung freigegeben, um ein Anwachsen des Speicherverbrauchs zu verhindern. Der Speicherbedarf skaliert nicht mit der Dateigroesse -- der Test mit 50.000 Transaktionen (25+ MB) benoetigt weniger als das Doppelte des Speichers im Vergleich zum Test mit 10.000 Transaktionen.
Fuer Dateien ueber 50 MB (z. B. Host-to-Host PAIN.001-Batches mit 100.000+ Zahlungen) streamt der Parser ueber eine temporaere Datei mit chunk-basiertem Namespace-Stripping -- das vollstaendige Dokument wird nie in den Speicher geladen.
Wie werden ZIP-Archive sicher verarbeitet?
iter_secure_xml_entries() validiert jeden Eintrag vor der Extraktion:
- Groessenbegrenzung pro Eintrag (Standard 10 MB pro Eintrag)
- Gesamtgroessenbegrenzung unkomprimiert (Standard 50 MB)
- Kompressionsverhaeltnis-Limit (Standard 100:1) zum Schutz vor ZIP-Bomben
- Ablehnung verschluesselter Eintraege
Es werden keine Dateien auf die Festplatte geschrieben. Die XML-Bytes werden direkt ueber from_bytes() an den Parser uebergeben.
Kann ich mehrere Dateien parallel parsen?
Ja. Verwenden Sie parse_files_parallel(), das die Arbeit auf einen ProcessPoolExecutor verteilt:
from bankstatementparser import parse_files_parallel
results = parse_files_parallel([
"statements/jan.xml",
"statements/feb.xml",
"statements/mar.xml",
])
for r in results:
print(r.path, r.status, len(r.transactions), "rows")
Unterstuetzte Formate
Welche Kontoauszugsformate werden unterstuetzt?
| Format | Standard | Dateitypen | Parser-Klasse |
|---|---|---|---|
| CAMT.053 | ISO 20022 Bank-to-Customer Statement | .xml |
CamtParser |
| PAIN.001 | ISO 20022 Credit Transfer Initiation | .xml |
Pain001Parser |
| CSV | Generische Bankexporte | .csv |
CsvStatementParser |
| OFX | Open Financial Exchange | .ofx |
OfxParser |
| QFX | Quicken Financial Exchange | .qfx |
QfxParser |
| MT940 | SWIFT-Standard | .mt940, .sta |
Mt940Parser |
Verarbeitet der Parser bankspezifische Dialekte von CAMT.053?
Ja -- konzeptionell Namespace-unabhaengig. Der Parser entfernt XML-Namespaces vor der Verarbeitung und behandelt jede CAMT.053-Variante (camt.053.001.02, camt.053.001.04 oder proprietaere Bank-Wrapper) ohne Namespace-spezifische Konfiguration. XPath-Abfragen zielen auf die Elementstruktur, nicht auf Namespace-URIs.
Fuer Banken, die CAMT in einen eigenen Umschlag einbetten, verwenden Sie from_string() oder from_bytes(), um das innere Dokument direkt zu uebergeben.
Kann ich benutzerdefinierte CSV-Spaltenkoepfe auf das Standardschema abbilden?
Ja -- automatische Normalisierung ohne Konfiguration. CsvStatementParser erkennt gaengige Kopfzeilenvarianten: "Date", "Transaction Date", "Booking Date" werden dem Feld date zugeordnet. "Amount", "Value", "Sum" werden amount zugeordnet. Separate Haben-/Soll-Spalten (z. B. "Credit" und "Debit") werden erkannt und automatisch zu einem einzigen vorzeichenbehafteten Betrag zusammengefuehrt.
Welches Ausgabeformat wird verwendet?
Alle Parser erzeugen standardisierte pandas DataFrames mit einheitlichen Spaltentypen:
| Format | Wichtige Spalten |
|---|---|
| CAMT | Amount, Currency, DrCr, Debtor, Creditor, Reference, ValDt, BookgDt, AccountId |
| PAIN.001 | PmtInfId, PmtMtd, InstdAmt, Currency, CdtrNm, EndToEndId, MsgId, CreDtTm, NbOfTxs |
| CSV/OFX/QFX/MT940 | date, description, amount (normalisiert) |
Sie koennen zusaetzlich nach CSV, JSON, Excel exportieren oder in Polars DataFrames konvertieren.
Treasury-Workflows
Wie behandelt der Parser Kontoauszuege mit mehreren Waehrungen?
Jede Transaktion behaelt ihre urspruengliche Waehrung -- keine implizite Umrechnung. Das Feld Currency wird aus dem XML-Attribut Ccy pro Transaktion extrahiert. Kontoauszuege mit mehreren Waehrungen bleiben unveraendert. Die Methode get_account_balances() liefert Eroeffnungs- und Schlusssalden pro Konto mit den originalen Waehrungscodes. Die waehrungsuebergreifende Abstimmung obliegt Ihrer nachgelagerten Logik, in der Sie die Wechselkursquelle selbst bestimmen.
Unterstuetzt der Parser sowohl ausgehende als auch eingehende Formate?
Ja. Pain001Parser verarbeitet ISO 20022 PAIN.001-Ueberweisungsinitiierungsdateien (ausgehende Zahlungen). CamtParser verarbeitet CAMT.053-Kontoauszugsdateien (eingehende Berichte). Beide unterstuetzen Streaming, PII-Maskierung und Export nach CSV, JSON und Excel. Verwenden Sie detect_statement_format(), um das Format automatisch zu erkennen.
Was geschieht bei fehlerhaften Transaktionseintraegen?
Das Verhalten haengt vom Verarbeitungsmodus ab:
parse()(Batch-Modus) -- Fehlerhafte Eintraege, denen erforderliche Felder fehlen (Amount,CurrencyoderCdtDbtInd), werden mit einer Warnmeldung uebersprungen. Der Rest des Kontoauszugs wird normal verarbeitet.parse_streaming()(Streaming-Modus) -- Parsing-Fehler werden sofort als Ausnahmen weitergegeben. Kein stiller Datenverlust. Dieses Fail-Fast-Verhalten ist bewusst fuer Finanz-Workflows konzipiert, in denen jede Transaktion erfasst werden muss.
Wie funktioniert die Deduplizierung?
Die Klasse Deduplicator erkennt exakte Duplikate und vermutete Uebereinstimmungen mit nachvollziehbaren Konfidenzwerten:
from bankstatementparser import CamtParser, Deduplicator
parser = CamtParser("statement.xml")
dedup = Deduplicator()
result = dedup.deduplicate(dedup.from_dataframe(parser.parse()))
print(f"Unique: {len(result.unique_transactions)}")
print(f"Exact duplicates: {len(result.exact_duplicates)}")
print(f"Suspected matches: {len(result.suspected_matches)}")
Installation und Kompatibilitaet
Wie installiere ich Kontoauszug-Parser?
pip install bankstatementparser
Fuer optionale Polars DataFrame-Unterstuetzung:
pip install bankstatementparser[polars]
Welche Python-Versionen werden unterstuetzt?
Python 3.9 bis 3.14. Alle Versionen werden in der CI-Pipeline mit 467 Tests bei 100 % Branch Coverage getestet.
Welche Abhaengigkeiten gibt es?
Die Bibliothek hat 5 direkte Abhaengigkeiten:
lxml-- XML-Parsing mit Sicherheitshaertungpandas-- DataFrames und Datenmanipulationopenpyxl-- Excel-Exportpydantic-- Datenvalidierung und Modelledefusedxml-- XXE-Schutz
Alle Abhaengigkeiten verwenden SHA-256-gehashte Versionen. Das CycloneDX SBOM dokumentiert jede Laufzeitkomponente.
Funktioniert es unter macOS, Linux und Windows?
Ja. Die Bibliothek laeuft unter macOS, Linux und Windows (via WSL). Es gibt keine plattformspezifischen Abhaengigkeiten.
Reproduzierbarkeit und Sicherheit
Wie kann ich die Reproduzierbarkeit ueberpruefen?
python -m pytest # 467 tests, 100% branch coverage
python scripts/verify_locked_hashes.py # SHA-256 hash verification
git log --show-signature -1 # Verify commit signature
Welche Sicherheitsmassnahmen sind integriert?
- XXE-Schutz:
resolve_entities=False,no_network=True,load_dtd=False - ZIP-Bomben-Schutz: Kompressionsverhaeltnis-Limits, Groessenbegrenzungen pro Eintrag, Ablehnung verschluesselter Eintraege
- Path-Traversal-Schutz: Blockliste fuer gefaehrliche Muster und Symlink-Aufloesung
- Eingabevalidierung: Dateigroessenlimits (Standard 100 MB), Validierung von Erweiterungen und Formaten
- Supply-Chain-Sicherheit: SHA-256-gehashte Abhaengigkeiten, CycloneDX SBOM, Build-Provenance-Attestierung
- Signierte Commits: In der CI-Pipeline erzwungen
Wie unterscheidet sich Kontoauszug-Parser von pyiso20022?
pyiso20022 ist ein umfassendes ISO 20022-Toolkit, das Python-Datenklassen aus ISO-XML-Schemas generiert. Es deckt ein breites Spektrum an ISO 20022-Nachrichtentypen ab (PACS, PAIN, CAMT, ADMI) und bietet Schema-Validierung. Kontoauszug-Parser hingegen ist speziell fuer das Parsen von Kontoauszuegen konzipiert -- mit Streaming-Unterstuetzung, PII-Maskierung, Deduplizierung und einer einheitlichen API ueber sechs Formate hinweg, einschliesslich Nicht-ISO-Formate (CSV, OFX, QFX, MT940). Wenn Sie Kontoauszuege in DataFrames mit produktionsreifer Sicherheit parsen moechten, verwenden Sie Kontoauszug-Parser. Wenn Sie mit dem vollstaendigen ISO 20022-Nachrichtenkatalog arbeiten muessen, verwenden Sie pyiso20022.
Was sind die SWIFT ISO 20022-Migrationsfristen?
SWIFT hat einen stufenweisen Migrationsplan veroeffentlicht:
- November 2026: Strukturierte und hybride Adressen werden verpflichtend. MT101-Mehrfachanweisungen werden abgelehnt. Case Management Phase 1 beginnt.
- November 2027: Alle Finanzinstitute muessen CAMT.053-Kontoauszuege nativ empfangen koennen. SWIFT stellt die Konvertierung von MT in das ISO-Format ein.
- November 2028: Vollstaendige Abschaltung von MT940, MT942, MT950, MT900 und MT910. Diese werden durch CAMT.052, CAMT.053 und CAMT.054 ersetzt.
Kontoauszug-Parser unterstuetzt sowohl das bisherige MT940-Format als auch die modernen CAMT.053/PAIN.001-Formate und ist damit ideal fuer den Uebergangszeitraum geeignet.