GH GambleHub

Parsing dei registri e automazione

TL; DR

L'automazione a saldatura solida si basa su tre balene: un'ingestione determinata (consegna sicura, idampotenza, controllo dell'integrità), un livello di dati normalizzato (un unico schema, chiavi di mappatura, unità di tempo/valuta/carattere standardizzate) e una rigida disciplina di qualità (validazioni, tolerance, DLQ, alert, correzione automatica). Lo scopo è quello di trasformare file/webhoop distribuiti in tabelle stabili per la riconciliazione, il report e BI con SLA di disponibilità.


1) Paesaggio di fonti e formati

1. 1 Sorgenti

PSP/equayers/aggregatori: transazioni, reti, commissioni, display.
Banche: estratti conto MT940, ISO 20022 CAMT. 052/053/054, pagamenti PAIN. 001/002.
ARM/portafogli/pagamenti (OCT/RTP/SEPA): registri payouts, rimborsi.
Crypto-castodi/borsa: transazioni, rapporti di conversione/commissione.
Tasse/Stato. portali CSV/XLSX/PDF, a volte tramite un browser script.

1. 2 Formati

CSV/TSV (separatori variabili, locali, codifiche).
XLSX (multi-cuit, celle unite).
XML (ISO 20022 CAMT/PAIN, schemi di custome XSD).
SWIFT MT940/942 (campi di posizione).
JSON-API/NDJSON (caricamenti incrementali, cursori).
PDF (tabelle - parser; scan - OCR).
ZIP/TAR. GZ (batch con più file).


2) Architettura ingestione-pipeline

Tracciati:

1. La ricezione sicura dei file ( ) è un checksum immediato, manteniamo la materia prima invariata.

2. Raw: mappatura data/provider/batch, memorizzazione con versioni.

3. Normalize: parsing unificazione dei tipi/unità della tabella normalizzata.

4. Validated: post-convalida (regole di qualità) bandiere, DLQ.

5. Matched: mappatura con eventi/banche interni.

6. Serving/BI - Vetrine di saldaggio/finanza/transazione.

Requisiti chiave:
  • Idempotence ingestion: '(provider, file _ name, file _ size, checksum, statement _ date)' → una chiave univoca.
  • Ripetizioni/retrai - La ripetizione del file non crea riprese.
  • DLQ (dead-letter queue) - Tutte le regole non riconosciute/violate sono in una coda isolata.
  • Versioning - Lo stesso giorno il nuovo file ha → una nuova versione con riferimento alla versione precedente.

3) Sicurezza delle consegne e dei segreti

Canali: SFTP con chiavi limitate FTPS: solo con TLS rigoroso API - OAuth2/token con TTL corto.
Crittografia dei contenuti: PGP/GPG durante il caricamento dei file; S/MIME per e-mail-inbox (se in uso).
Controllo integrità: SHA-256/512 checksum, confronto con l'hashtag nel manifesto.
I segreti - Memorizzare in Vault/KMS, rotazione, non sono consentiti nei file config/login.
Disponibili: RBAC + «privilegi minimi», account di servizio separati.


4) Normalizzazione e diagramma dei dati

4. 1 Regole universali

Ora: sempre UTC in ISO-8601; per le date settlement - 'DATE', senza TZ.
Importi: «DECIMAL (p, s)» in minor units + singola «scale»; segno: parrocchia/flusso rigorosamente secondo il dizionario.
Valute: ISO-4217, fx _ src fissa.
Locali: disabilitazione del prodotto automatico - Impostazione esplicita dei separatori/decimale/millesimi.
Codifica: accesso UTF-8; altri sono la conversione con il tubo.

4. 2 Livello «piatto» normalizzato (esempio)

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 formati - tecniche e rapine

5. 1 CSV/TSV

Definisci chiaramente «delimiter», «quotechar», «escapechar», «encoding».

Un oggetto di righe vuote o spostamenti di intestazione; Supporto header alienes (es. 'AmountAMTTxnAmount`).
Conversione del segno (meno/parentesi), normalizzazione di migliaia di caratteri (', '/'. '/spazi).

5. 2 XLSX

Lettura di sheet whitelist; Proibire la composizione automatica - offuscare le celle unite.
Convertire le formule in valori date Excel → UTC con TZ esplicito.

5. 3 XML (ISO 20022 CAMT/PAIN)

Convalida XSD; XPath-mapping degli oggetti («<Ntry>», «<TxDtls>», «Amt>», «<CdtDbtInd>»).
Normalizzazione credit/debit segno; Supporto multiplo «<Christgs>», «<RmtInf>».

5. 4 MT940

Analizzare i tag «: 61:», «: 86:»; Supporto delle estensioni nazionali; i campi di posizione → le regole di slicing.
Consolidamento di «61:» in un battello.

5. 5 JSON/NDJSON/API

Puntatori dì since _ idcreated_atpage_token`; rate-limit aware retrai (429 → backoff + jitter).
Semantica partiale (più righe refand a una «provider _ txid»).

5. 6 PDF/OCR

Prima, tentativo di parsing a tabelle (rilevatore di tabelle), quindi solo OCR (Tesseract) con caratteri whitelist.
Post-convalida: importi, totali di controllo, compressione del numero di righe.

5. 7 Archivi/batch

Decompressione mantenendo la struttura; ogni file è «file _ id» separato; manifesto, controllo di tutte le parti.


6) Validazioni e regole di qualità dei dati

Controlli obbligatori:
  • Schema - Tutti i campi richired sono presenti.
  • Tipi: gli importi sono numerici, le date sono parziali.
  • Checksum/totale: somma delle righe = totale del file (se disponibile).
  • Intervalli: data in una finestra ragionevole; Importo> 0 (o per dizionario negativo valido).
  • Univoco: '(provider, provider _ txid, sequence)' non è duplicato nella normalization.
  • Tholerans: soluzioni temporane'amount/fx/time '.

Risultato: 'VALID', 'VALID _ WITH _ WARNINGS', 'INVALID' DLQ '(reason _ code)'.


7) Idampotenza e deduplicazione

Ingestion key: '(provider, file _ name, filesize, checksum, statement _ date) è l'unico' file _ id '.
Row-level idem: `row_hash = sha256(normalized_row_compact)`; Il nuovo caricamento non crea nuovi record.
Webhooks/API: 'idempotency _ key'provider + etichette (' exec _ id '), memorizzare TTL.
Doppie provider: DLQ _ PROVIDER _ txid + sequence, DLQ _ DUPLICATE.


8) Orchestrazione e pianificazione

Оркестратор: Airflow/Dagster (DAG: `fetch → decrypt → parse → normalize → validate → publish → match`).
SLA/SLO: 'Time-to-Availability (TtA)' dall'apparizione del file à normalization = READY ".
Retrai: backoff esponenziale + jitter; Limiti di tentativo Stati chiari.
Parallelismo e isolamento: OSSR/parsing XLSX pesanti - in un pool/worker separato con un limite CPU/RAM.
DLQ-replay: reprocess periodico durante l'aggiornamento delle regole/mupping.


9) Osservabilità e alert

Metriche:
  • Ingestion Success%, Parse Success% per origine.
  • TtA p50/p95, Throughput (righe/min).
  • DLQ Rate и Aging DLQ p50/p95.
  • Schema Drivt Incidents (cambia intestazione/formato).
  • Duplicate Rate по `provider_txid`.
Alert (esempio):
  • `TtA p95 > SLA` → P1.
  • DLQ Rate> 2% in un'ora sul provider P1.
  • «Schema Draft detected» → P0 (arresto del matching automatico all'origine).
  • «Duplicato spike» → P2 (controlla provider/webhoop).

Dashboard: vortice «files _ row _ raw _ row _ normale _ valid _ rows _ matched», mappa DLQ per motivi, TtA-quantili.


10) Correzioni automatiche e mapping

Header alienes - Dizionario con versioni (e. g., `Amount`→`amt`, `AMOUNT`→`amt`).

Code maps: lo stato del provider → la tua guida ('APPROVEDCAPTUREDSETTLED`).
Sign policy: «CR/DR», «C/D», parentesi in un unico modello «emblematico».
Amount repair: rimozione di migliaia di separatori, normalizzazione dello svantaggio.
Timezone repair: tempo locale del provider di → UTC con DST.
💡 Qualsiasi correzione automatica - Viene riepilogata e contrassegnata in «repair _ flags».

11) Relazione a Accodamento pagamenti e report PSP

Il livello normalizio è l'ingresso per matching (provider _ txid/merchant _ ref/fuzzy), calcolo differf-tassonomia, registri auto e firmware. I campi chiave sono «provider _ txid», «sequence», «kind», «amount _ minore», «value _ date», «account».


12) Modello di storage e tabella

Tabella dei file landed:
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
);
Righe normalizzate:
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) Pseudo-codice 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) GDPR/PII e modifica dei cassetti

Masking/hash: PAN/email/telefono → 'sha256 + salt', nessun valore primario.
Criteri di conservazione per tipo di origine (AML/Building).
Accesso al PII solo per ruolo; Controllo delle letture/esportazioni.


15) KPI e obiettivi (per parsing/ingestione)

Ingestion Success % ≥ 99. 5 %/giorno per fonte.
Parse Success % ≥ 99%, DLQ ≤ 1%.
p95 ( ) 15 minuti (CSV/XML), 60 minuti (PDF/OCR).
Schema Drivt Incidents: 0/mese senza alert/fix.
Duplicate Rate по `provider_txid` ≤ 0. 05%.


16) Playbook incidenti

Schema draft: stop del matching automatico, attivare il parser «morbido» con il dettaglio ML delle colonne, preparare alias-patch, cacciare il DLQ-replay.
Output DLQ: debug i file più recenti, controlla codifica/locali/caratteri, riduce temporaneamente la rigidità del tolerance (con flag).
Ritardi SFTP: passare a API-polling/webhoop, aumentare i retrai, comunicare con il provider.
Spikes duplicates - Abilita il supplemento «row _ hash», il blocco di ripetizione prima di scoprirlo.


17) Kit di prova (UAT/Prod-pronto)

1. Idempotenza: ripetizione dello stesso caricamento → 1 'file _ id', 0 nuove righe.
2. Locali, i file con, '/'/'/Spazi sono stati corretti.
3. Partial/refund: più «sequence» a uno «provider _ txid».
4. XML XSD: CAMT → 'INVALID' + DLQ.
5. Variazioni MT940: espansione nazionale, analisi corretta.
6. : scan con rumore per estrarre e superare le regole di base.
7. Schema draft: nuovo hader →-patch e rielaborazione dei file storici.
8. Throughput: il test di carico N dei file/ora consente di rispettare la SLA.
9. Redazione PII: fogli senza PAN/e-mail, solo hash.


18) Assegno foglio di implementazione

  • Registro delle origini: protocollo, pianificazione, SLA, formato, contatto.
  • Canali sicuri (SFTP/PGP/API), Vault per i segreti.
  • Idempotente ingestione + checksum + versione.
  • Parsers per formati, alias-dizionario, sign/criteri-locali.
  • Livello normalizzato e indici delle chiavi.
  • Regole di validazione, tolerance, DLQ e replay.
  • Orchestratore (DAG), retrai/backoff, pool di risorse.
  • Osservabilità: metriche, dashboard, alert.
  • GDPR/PII-occultamento, verifiche di accesso.
  • valigette di prova e regolari schema-drift drills.

Curriculum

L'automazione del parsing non è «scrivere parser», ma costruire un circuito industriale: spedizione e crittografia affidabili, pipline idompotenti, normalizzazione rigorosa, regole di qualità e alert trasparenti. Questo tracciato trasforma tutti i registri in tabelle prevedibili con una SLA garantita per la disponibilità dei dati, che sono le basi per i registri, il Tesoro e i report di gestione.

Contact

Mettiti in contatto

Scrivici per qualsiasi domanda o richiesta di supporto.Siamo sempre pronti ad aiutarti!

Avvia integrazione

L’Email è obbligatoria. Telegram o WhatsApp — opzionali.

Il tuo nome opzionale
Email opzionale
Oggetto opzionale
Messaggio opzionale
Telegram opzionale
@
Se indichi Telegram — ti risponderemo anche lì, oltre che via Email.
WhatsApp opzionale
Formato: +prefisso internazionale e numero (ad es. +39XXXXXXXXX).

Cliccando sul pulsante, acconsenti al trattamento dei dati.