GH GambleHub

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'.

Detail der Leerzeilen/Titel Verschiebungen; Unterstützung für header aliases (z.B. 'AmountAMTTxnAmount`).
Zeichen konvertieren (minus/Klammern), Tausendstel normalisieren (', '/'. '/Leerzeichen).

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

Cursor 'since _ idcreated_atpage_token`; rate-limit aware retrays (429 → backoff + jitter).
Semantik partial (mehrere Refandstrings zu einem 'provider _ txid').

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`.
Alerts (Beispiel):
  • `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`).

Code-Karten: Provider-Status → Ihre Referenz ('APPROVEDCAPTUREDSETTLED`).
Zeichenrichtlinie: 'CR/DR', 'C/D', Klammern - in einem einzigen „Zeichen“ -Modell.
Amount-Reparatur: Tausendstelseparatoren entfernen, Minus normalisieren.
Timezone-Reparatur: Lokale Zeit des Providers → UTC unter Berücksichtigung von DST.
💡 Jede Autokorrektur - protokolliert und markiert in 'repair _ flags'.

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.

Contact

Kontakt aufnehmen

Kontaktieren Sie uns bei Fragen oder Support.Wir helfen Ihnen jederzeit gerne!

Integration starten

Email ist erforderlich. Telegram oder WhatsApp – optional.

Ihr Name optional
Email optional
Betreff optional
Nachricht optional
Telegram optional
@
Wenn Sie Telegram angeben – antworten wir zusätzlich dort.
WhatsApp optional
Format: +Ländercode und Nummer (z. B. +49XXXXXXXXX).

Mit dem Klicken des Buttons stimmen Sie der Datenverarbeitung zu.