Registerparsing und Automatisierung
TL; DR
Zuverlässige „Swing“ -Automatik basiert auf drei Säulen: deterministische Ingestion (sichere Lieferung, Idempotenz, Integritätskontrolle), normalisierte Datenschicht (einheitliches Schema, Matching-Schlüssel, standardisierte Zeiteinheiten/Währungen/Zeichen) und strenge Qualitätsdisziplin (Validierungen, Toleranzen, DLQ, Alerts, Autokorrekturen). Ziel ist es, heterogene Dateien/Webhooks in stabile Tabellen für Abstimmung, Reporting und BI mit SLAs nach Verfügbarkeit zu verwandeln.
1) Quellen- und Formatlandschaft
1. 1 Quellen
PSPs/Acquirer/Aggregatoren: Transaktionen, Sets, Provisionen, Dispute.
Banken: Auszüge aus MT940, ISO 20022 CAMT. 052/053/054, PAIN-Zahlungen. 001/002.
AWS/Wallets/Payments (OCT/RTP/SEPA): Payouts-Register, Retouren.
Krypto-Depots/Börsen: On-Chain-Transaktionen, Umwandlungen/Provisionsberichte.
Steuern/Staat. Portale: CSV/XLSX/PDF, manchmal über einen scripted Browser.
1. 2 Formate
CSV/TSV (variable Trennzeichen, Locals, Codierungen).
XLSX (Multi-Sheet, verbundene Zellen).
XML (ISO 20022 CAMT/PAIN, XSD Custom Shes).
SWIFT MT940/942 (Positionsfelder)
JSON-API/NDJSON (inkrementelle Uploads, Cursor).
PDF (tabellarisch - Parser; Scans - OCR).
ZIP/TAR. GZ (Batchi mit mehreren Dateien).
2) ingestion-pipline Architektur
Konturen:1. Landing: Sichere Dateiannahme (SFTP/FTPS/WebDAV/API/Webhooks) → betrachten sofort checksum, halten Rohstoffe unverändert.
2. Raw: Layout nach Datum/Anbieter/Schlacht, Lagerung mit Versionen.
3. Normalize: Parsen → Vereinheitlichung von Typen/Einheiten → normalisierte Tabellen.
4. Validiert: Post-Validierungen (Qualitätsregeln) → Flags, DLQ.
5. Matched: Vergleich mit internen Ereignissen/Bank.
6. Serving/BI: Vitrinen für Abstimmung/Finanzen/Betrieb.
Die wichtigsten Anforderungen sind:- Die Idempotenz von ingestion:'(provider, file_name, file_size, checksum, statement_date) '→ ein eindeutiger Schlüssel.
- Wiederholungen/Retrays: Das erneute Durchblättern einer Datei erzeugt keine Takes.
- DLQ (Dead-Letter-Queue): Alles, was nicht erkannt wird/gegen Regeln verstößt, befindet sich in einer isolierten Warteschlange.
- Versionierung: Eine neue Datei am selben Tag → eine neue Version mit einem Link zur vorherigen.
3) Liefersicherheit und Geheimnisse
Kanäle: SFTP mit begrenzten Schlüsseln; FTPS - nur mit strengem TLS; API - OAuth2/Token mit kurzer TTL.
Inhaltsverschlüsselung: PGP/GPG beim Herunterladen von Dateien; S/MIME für E-Mail-Inboxen (falls verwendet).
Integritätskontrolle: SHA-256/512 checksum, Vergleich mit dem Hash im Manifest.
Geheimnisse: Speichern in Vault/KMS, Rotation, verboten in Config-Dateien/Logs.
Zugriffe: RBAC + Prinzip der „geringsten Privilegien“, separate Service-Accounts.
4) Normalisierung und Datenschema
4. 1 Universelle Regeln
Zeit: immer UTC in ISO-8601; für Settlement-Daten ist 'DATE' ohne TZ.
Beträge: „DECIMAL (p, s)“ in minor units + separate „scale“; Zeichen: Ankunft/Verbrauch streng nach Wörterbuch.
Währungen: ISO-4217, feste Kurstabelle mit 'fx _ src'.
Lokale: Verbot des Autodetektors - explizite Einstellung von Trennzeichen/Dezimalstellen/Tausendstel.
Kodierungen: Eingang zu UTF-8; andere - Konvertierung mit einem Protokoll.
4. 2 Normalisierte „flache“ Ebene (Beispiel)
json
{
"provider": "Acquirer_A",
"source_kind": "PSP_TX PSP_SETTLEMENT BANK WALLET CRYPTO",
"kind": "AUTH CAPTURE REFUND PAYOUT FEE SETTLEMENT CHARGEBACK",
"payment_id": "pay_123", // ваше
"provider_txid": "psp_abc_789", // внешнее
"merchant_ref": "mr_456",
"sequence": 0, // partial/refund line index
"amount_minor": 100000, // 1000.00
"currency": "EUR",
"fee_minor": 120, // 1.20
"fx_rate": 1.0000,
"fx_src": "PSP ECB BANK",
"event_ts": "2025-11-03T12:00:00Z",
"value_date": "2025-11-05",
"account": "PSP_MERCHANT_CARD_A",
"bin": "425000",
"last4": "1234",
"status": "APPROVED CAPTURED SUCCESS FAILED SETTLED",
"file_id": "ing_20251103_001",
"row_hash": "sha256(raw_row)"
}
5) Parser nach Format: Empfänge und Rechen
5. 1 CSV/TSV
Stellen Sie explizit 'delimiter', 'quotechar', 'escapechar', 'encoding'.
5. 2 XLSX
Lesen durch Blatt Whitelist; AutoSlides verbieten - Die verbundenen Zellen werden abgeflacht.
Konvertieren von Formeln in Werte; Datum Excel → UTC mit expliziter TZ.
5. 3 XML (ISO 20022 CAMT/PAIN)
Validierung nach XSD; XPath-Mapping-Details ('<Ntry>','<TxDtls>','<Amt>','<CdtDbtInd>').
Normalisierung von Credit/Debit → Zeichen Unterstützung für mehrere'<Chrgs>','<RmtInf>'.
5. 4 MT940
Analyse der Tags': 61:',': 86:'; Unterstützung nationaler Erweiterungen; Positionsfelder → Slicing-Regeln.
Konsolidierung mehrerer': 61: 'in einem Batch.
5. 5 JSON/NDJSON/API
5. 6 PDF/OCR
Zuerst der Versuch des tabellarischen Parsings (Tab-Detektor), erst dann OCR (Tesseract) mit Whitelist-Zeichen.
Nachvalidierung: Summen, Checksummen, Abgleich der Zeilenzahl.
5. 7 Archive/Batchi
Entpacken unter Beibehaltung der Struktur; für jede Datei eine eigene „file _ id“; Manifest, Kontrolle aller Teile.
6) Validierungen und Datenqualitätsregeln
Obligatorische Prüfungen:- Schema: Alle erforderlichen Felder sind vorhanden.
- Typen: Summen sind numerisch, Daten sind parsierend.
- Prüfsummen/Summen: Summe der Zeilen = Summe in der Datei (falls vorhanden).
- Bereiche: Datum in einem vernünftigen Fenster; Summe> 0 (oder nach dem Wörterbuch der zulässigen negativen).
- Einzigartigkeit:'(provider, provider_txid, sequence) 'wird nicht in normalized dupliziert.
- Toleranzen: Zulässige Abweichungen 'amount/fx/time'.
Ergebnis: "VALID'," VALID _ WITH _ WARNINGS "," INVALID → DLQ (reason_code) ".
7) Idempotenz und Deduplizierung
Ingestion key:'(provider, file_name, filesize, checksum, statement_date) '→ die einzige' file _ id'.
Row-level idem: `row_hash = sha256(normalized_row_compact)`; Beim erneuten Laden werden keine neuen Datensätze erstellt.
Webhooks/API: 'idempotency _ key' des Anbieters + Ihre Tags ('exec _ id'), speichern Sie die TTL.
Anbieter-Dubletten: Dedup nach 'provider _ txid' + 'sequence', bei Diskrepanz nach DLQ_DUPLICATE.
8) Orchestrierung und Zeitpläne
Оркестратор: Airflow/Dagster (DAG: `fetch → decrypt → parse → normalize → validate → publish → match`).
SLA/SLO: „Time-to-Availability (TtA)“ vom Erscheinen der Datei bis zu „normalized = READY“.
Retrays: exponentieller Backoff + Jitter; Grenzen der Versuche; klaren Status.
Parallelität und Isolation: Schwere OCR/Parsing XLSX - in einem separaten Pool/Worker mit CPU/RAM-Limit.
DLQ-replay: periodische Wiederholung bei der Aktualisierung von Regeln/Muppings.
9) Beobachtbarkeit und Warnungen
Metriken:- Ingestion Erfolg%, Parse Erfolg% nach Quellen.
- TtA p50/p95, Durchlauf (Zeilen/min).
- DLQ Rate и Aging DLQ p50/p95.
- Schema Drift Incidents (Änderung der Überschriften/des Formats).
- Duplicate Rate по `provider_txid`.
- `TtA p95 > SLA` → P1.
- „DLQ Rate> 2%“ pro Stunde nach Anbieter → P1.
- „Schema Drift detected“ → P0 (Stoppen des Auto-Matches an der Quelle).
- 'Duplicate spike' → P2 (überprüfen Sie den Anbieter/webhooks).
Daschbord: der Trichter ' files → rows_raw → rows_norm → rows_valid → rows_matched ', die Karte DLQ aus den Gründen, TtA-kwantili.
10) Autokorrekturen und Muppings
Header aliases: Wörterbuch mit Versionen (e. g., `Amount`→`amt`, `AMOUNT`→`amt`).
11) Verknüpfung mit „Zahlungsabgleich und PSP-Berichte“
Die fertige normalisierte Schicht ist der Eingang für das Matching (provider_txid/merchant_ref/fuzzy), Berechnung der Diff-Taxonomie, Auto-Protokolle und settlement↔bank-Vernetzung. Schlüsselfelder: 'provider _ txid', 'sequence', 'kind', 'amount _ minor', 'value _ date', 'account'.
12) Speichermodell und Tabellen
Tabelle der Landed-Dateien:sql
CREATE TABLE landed_files (
file_id TEXT PRIMARY KEY,
provider TEXT,
source_kind TEXT,
file_name TEXT,
file_size BIGINT,
checksum TEXT,
statement_date DATE,
received_at TIMESTAMP WITH TIME ZONE,
version INT,
status TEXT, -- RECEIVED PARSED FAILED error TEXT
);
Normalisierte Zeichenfolgen:
sql
CREATE TABLE psp_norm (
row_id BIGSERIAL PRIMARY KEY,
file_id TEXT REFERENCES landed_files(file_id),
provider TEXT,
source_kind TEXT,
kind TEXT,
payment_id TEXT,
provider_txid TEXT,
merchant_ref TEXT,
sequence INT,
amount_minor BIGINT,
currency CHAR(3),
fee_minor BIGINT,
fx_rate NUMERIC(18,8),
fx_src TEXT,
event_ts TIMESTAMPTZ,
value_date DATE,
account TEXT,
status TEXT,
row_hash TEXT UNIQUE,
repair_flags TEXT[]
);
CREATE INDEX idx_psp_norm_txid ON psp_norm(provider, provider_txid, sequence);
13) Pseudocode der Parser
CSV/XLSX:python def parse_table(file, spec):
df = load_csv_or_xlsx(file, delimiter=spec.delim, encoding=spec.enc, sheet=spec.sheet)
df = rename_headers(df, spec.header_aliases)
df = clean_amounts(df, thousand=spec.thousand, decimal=spec.decimal, sign_policy=spec.sign)
rows = []
for r in df.itertuples():
rows.append(normalize_row(r, spec))
return rows
XML CAMT:
python def parse_camt(xml):
root = parse_xml(xml, xsd="camt053.xsd")
for ntry in root.findall('.//Ntry'):
sign = 1 if ntry.findtext('CdtDbtInd') == 'CRDT' else -1 amt = Decimal(ntry.findtext('Amt')) sign
... map to normalized fields
OCR PDF (fallback):
python def parse_pdf_ocr(pdf):
text = tesseract(pdf, lang="eng", psm=6, whitelist="0123456789.,-;:/A-Za-z")
table = detect_table(text)
return normalize_table(table)
14) DSGVO/PII und Protokollbearbeitung
Masking/Hash: PAN/email/phone → 'sha256 + salt', Protokolle - ohne Primärwerte.
Aufbewahrungsrichtlinie: 'retention' nach Quellentyp (AML/Buchhaltung).
PII-Zugriffe - nur nach Rolle; Prüfung von Lesungen/Exporten.
15) KPIs und Ziele (für Parsing/Ingestion)
Ingestion Success % ≥ 99. 5 %/Tag pro Quelle.
Parse Success % ≥ 99%, DLQ ≤ 1%.
TtA p95 (fayl→normalized) ≤ 15 Minuten (CSV/XML), ≤ 60 Minuten (PDF/OCR).
Schema Drift Incidents: 0/Monat ohne Alert/Fix.
Duplicate Rate по `provider_txid` ≤ 0. 05%.
16) Playbooks der Vorfälle
Schema drift: Auto-Matching stoppen, „Soft“ -Parser mit ML-Lautsprecherdetektion einschalten, Alias-Patch vorbereiten, DLQ-Replay vertreiben.
DLQ-Burst: Debuggen der neuesten Dateien, Überprüfen der Codierung/Lokalität/Vorzeichen, vorübergehend reduzieren Sie die Strenge der Toleranzen (mit Flagge).
SFTP-Verzögerungen: Wechsel zu API-Polling/Webhooks, Erhöhung der Retrays, Kommunikation mit dem Anbieter.
Spikes duplicates: Aktivieren Sie den Doppeltest 'row _ hash', einen Block von Wiederholungen bis zur Klärung.
17) Testfallpaket (UAT/Prod-ready)
1. Idempotenz: Wiederholung des gleichen Downloads → 1 'file _ id', 0 neue Zeilen.
2. Locales: Dateien mit', '/' ./Leerzeichen → korrekte Beträge.
3. Partial/refund: mehrere' sequence' zu einem 'provider _ txid'.
4. XML XSD: nicht-valide CAMT → 'INVALID' + DLQ.
5. MT940 Variationen: nationale Erweiterungen → korrekte Analyse.
6. PDF→OCR: Scannen mit Rauschen → Extrahieren und Durchlaufen der Grundregeln.
7. Schema drift: Neuer Header → Alias-Patch und Neubearbeitung historischer Dateien.
8. Durchlauf: Belastungstest N Dateien/Stunde → Einhaltung der TtA SLA.
9. PII-Revision: Protokolle ohne PAN/E-Mail, nur Hashes.
18) Checkliste Umsetzung
- Quellregister: Protokoll, Zeitplan, SLA, Format, Kontakt.
- Sichere Kanäle (SFTP/PGP/API), Tresor für Geheimnisse.
- Idempotente ingestion + checksum + Versionen.
- Parser nach Format, Alias-Wörterbuch, Sign/Locale-Richtlinien.
- Normalisierte Ebene und Schlüsselindizes.
- Validierungsregeln, Toleranzen, DLQ und Replay.
- Orchestrator (DAG), Retrays/Backoff, Resource Pools.
- Beobachtbarkeit: Metriken, Dashboards, Alerts.
- DSGVO/PII-Masking, Zugriffsprüfungen.
- Testfälle und regelmäßige Schema-Driftbohrungen.
Zusammenfassung
Bei der Automatisierung des Parsings geht es nicht darum, „einen Parser zu schreiben“, sondern eine industrielle Kontur aufzubauen: zuverlässige Lieferung und Verschlüsselung, idempotente Pipelines, strenge Normalisierung, Qualitätsregeln und transparente Alerts. Eine solche Gliederung verwandelt alle Register in vorhersehbare Tabellen mit garantierten SLAs zur Datenverfügbarkeit - die Grundlage für Sweeps, Treasury und Management Reporting.