GH GambleHub

Parsing de registros e automação

TL; DR

A «solavancagem» confiável é baseada em três baleias: ingestão definida (entrega segura, idempotação, controle de integridade), camada de dados normalizada (esquema único, chaves de comparação, unidades de tempo/moedas/caracteres normalizados) e disciplina de qualidade rígida (validação, tolerance, DLQ, alertas, auto). O objetivo é transformar arquivos/webhooks compartilhados em tabelas estáveis para acréscimos, relatórios e BI com SLA de disponibilidade.


1) Paisagem de fontes e formatos

1. 1 Fontes

PSP/equeiros/agregadores: transações, redes, comissões, displays.
Bancos: extratos MT940, ISO 20022 CAMT. 052/053/054, pagamentos PAIN. 001/002.
ARM/carteiras/pagamentos (OCT/RTP/SEPA): registros de payouts, devoluções.
Kripto-castody/bolsas: transações, relatórios de conversões/comissões.
Impostos/estatais. portais: CSV/XLSX/PDF, às vezes por meio de um navegador.

1. 2 Formatos

CSV/TSV (separadores variáveis, locais, codificações).
XLSX (multi-shit, células combinadas).
O URL (ISO 20022 CAMT/PAIN, XSD Kastoms).
SWIFT MT940/942 (campos de posição).
JSON-API/NDJSON (descarregadores, cursores).
PDF (tabelas - parser; scan - OCR).
ZIP/TAR. GZ (batches com arquivos múltiplos).


2) Arquitetura ingestion-pipline

Caminhos:

1. Landing: recepção segura de arquivos (SFTP/FTPS/WebDAV/API/webhooks) → imediatamente achamos checksum, preservando a matéria-prima invariavelmente.

2. Raw: localização de datas/provedores/batches, armazenamento com versões.

3. Normalize: parsing unificação de tipos/unidades da tabela normalizável.

4. Validated: pós-validação (regras de qualidade) → bandeiras, DLQ.

5. Matched: mapeamento com eventos/bancos internos.

6. Serving/BI: vitrines para acréscimo/finanças/transações.

Requisitos essenciais:
  • Idempotidade ingestion: '(provider, arquivo _ name, arquivo _ size, checksum, statement _ data)' → uma chave única.
  • Repetições/retraí: a reaproximação do arquivo não cria duplicações.
  • DLQ (dead-letter queue): todas as regras não identificadas/violadas estão em uma fila isolada.
  • Versioning: o novo arquivo do mesmo dia → uma nova versão com referência ao anterior.

3) Segurança de entrega e segredos

Canais: SFTP com chaves limitadas; FTPS - somente com TLS rigoroso; API - OAuth2/tokens com TTL curto.
Criptografia de conteúdo: PGP/GPG ao carregar arquivos; S/MIME para e-mail-inbox (se usado).
Controle de integridade: SHA-256/512 checksum, comparação com a hashtag no manifesto.
Segredos: armazenados em Vault/KMS, rotação, proibidos em ficheiros de config/logs.
Acessíveis: RBAC + princípio de «menores privilégios», contas de serviço individuais.


4) Normalização e esquema de dados

4. 1 Regras Universais

Hora: sempre UTC no ISO-8601; para datas de senslement - 'DATA' sem TZ.
Somas: 'DECIMAL (p, s)' em menor units + «scale» individual; sinal: chegada/consumo rigorosamente no dicionário.
Moedas: ISO-4217, tabela fixa de cursos com 'fx _ src'.
Local: proibição do dispositivo automático - configuração clara de divisores/pontos decimais/milésimos.
Codificações: entrada UTF-8; outros - conversão com logs.

4. 2 Camada «plana» normalizada (exemplo)

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) Parsers em formatos: técnicas e roubos

5. 1 CSV/TSV

Especifique claramente «delimiter», «cotechar», «escapechar», «encoding».

Detecção de linhas vazias/deslocamentos de cabeçalho; suporte a header aliases (por exemplo, 'AmountAMTTxnAmount`).
Converter (menos/parênteses), normalizar milésimos (', '/'. '/espaços).

5. 2 XLSX

Leitura por sheet whitelist; a proibição de camadas automáticas é uma vaga de células combinadas.
Converter fórmulas em valores; datas Excel → UTC com TZ explícito.

5. 3 XML (ISO 20022 CAMT/PAIN)

Validação por XSD; XPath-mapping de adereços ('<Ntry>', '<TxDtls>', 'Amt>', '<CdtDbtInd>').
Normalizar credit/debit → um sinal; suporte múltiplo '<Chrgs>', '<RmtInf>'.

5. 4 MT940

Analisar marcas de formatação ': 61:', ': 86:'; Apoio às extensões nacionais; campos de posição → regras slicing.
Consolidação de vários '61:' em um único batch.

5. 5 JSON/NDJSON/API

Cursores 'since _ idcreated_atpage_token`; rate-limit aware retrai (429 → backoff + jitter).
Semântica partial (várias linhas de refand para um 'provider _ txid').

5. 6 PDF/OCR

Primeiro, a tentativa de parsing de tabela (por exemplo, detector), só depois OCR (Tesseract) com os caracteres whitelist.
Pós-validação: somas, resumos de verificação, verificação do número de linhas.

5. 7 Arquivos/Batches

Descompasso mantendo a estrutura; cada arquivo é «arquivo _ id» separado; manifesto, controlo de todas as partes.


6) Validações e regras de qualidade de dados

Verificações obrigatórias:
  • Esquema: todos os campos de required estão presentes.
  • Os tipos: somas são numéricos, as datas são parceladas.
  • Somas de referência/resumos: soma de linhas = resultado no arquivo (se houver).
  • Faixas: data em uma janela inteligente; soma> 0 (ou dicionário negativo válido).
  • Exclusividade: '(provider, provider _ txid, sequence)' não é duplicado no normalized.
  • Tolerance: variações válidas 'amount/fx/time'.

Resultado: 'VALID', 'VALID _ WITH _ WARNINGS', 'INVALID → DLQ'.


7) Idempotidade e dedução

Ingestion key: '(provider, arquivo _ name, filesize, checksum, statement _ data)' → o único 'arquivo _ id'.
Row-level idem: `row_hash = sha256(normalized_row_compact)`; carregar novamente não cria novos registros.
Webhooks/API: 'idempotency _ key' provedor + seus rótulos ('exec _ id'), armazenar TTL.
O provedor de duplos é «provider _ txid '+' sequence», e o DLQ _ DUPLICATE, quando o provedor está em divergência.


8) Orquestra e agendamento

Оркестратор: Airflow/Dagster (DAG: `fetch → decrypt → parse → normalize → validate → publish → match`).
SLA/SLO: 'Time-to-Availability (TtA)' desde o aparecimento do arquivo até 'normalize = READY'.
Retrai: backoff exponencial + jitter; limites de tentativa; estatais claras.
Paralelismo e isolamento: pesados OCR/parsing XLSX - em um pool/worker separado com limite CPU/RAM.
DLQ-replay: reprocess periódico quando as regras/muppings são atualizadas.


9) Observabilidade e alertas

Métricas:
  • Sugestão Sucess%, Parse Sucess% segundo as fontes.
  • TtA p50/p95, Throughput (linhas/min).
  • DLQ Rate и Aging DLQ p50/p95.
  • Schema Drift Invidents (mudar de cabeçalho/formato).
  • Duplicate Rate по `provider_txid`.
Alerts (exemplo):
  • `TtA p95 > SLA` → P1.
  • 'DLQ Rate> 2%' por hora no provedor → P1.
  • 'Schema Drivt detected' → P0 (parar o jogo automático pela fonte).
  • 'Duplicate spike' → P2 (verificar provedores/webhooks).

Dashboard: vórtice 'files' raw _ raw _ rows _ normal _ valid _ rows _ matched ', mapa DLQ por razões, TtA-quantili.


10) Correções automáticas e muppings

Header aliases: dicionário com versões (e. g., `Amount`→`amt`, `AMOUNT`→`amt`).

Código maps: estados do provedor → sua guia de referência ('APPROVEDCAPTUREDSETTLED`).
Sign policy: 'CR/DR', 'C/D', parênteses em um único modelo 'emblemático'.
Amount repair: remoção de milésimos divisores, normalização de desvantagem.
Timezone repair: tempo local do provedor → UTC com DST.
💡 Qualquer correção automática - É logado e marcado em 'repair _ flags'.

11) Relação com «Pagamento e relatórios PSP»

Camada normalizante - entrada para matching (provider _ txid/merchant _ ref/fuzzy), calculação de diff-taxonomia, revistas automáticas e settlement↔bank. Os campos-chave são 'provider _ txid', 'sequence', 'kind',' amount _ menor ',' value _ data ',' account '.


12) Modelo de armazenamento e tabela

Tabela de arquivos 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
);
Linhas normalizadas:
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 parsers

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 edição de logs

Camuflagem/hash: PAN/email/telefone → 'sha256 + salt', logs sem valores primários.
Política de armazenamento «retentão» por tipo de origem (AML/contabilidade).
Acessíveis ao PII - somente pelo papel; auditoria de leitura/exportação.


15) KPI e alvos (para parsing/ingestão)

Ingestion Success % ≥ 99. 5 %/dia por fonte.
Parse Success % ≥ 99%, DLQ ≤ 1%.
TtA p95 (fayl→normalized) ≤ 15 minutos (CSV/URL), ≤ 60 minutos (PDF/OCR).
Schema Drift Invidents: 0/mês sem alert/fix.
Duplicate Rate по `provider_txid` ≤ 0. 05%.


16) Playbooks incidentes

Schema draft: parar o jogo automático, incluir um parser «macio» com pormenores de coluna ML, preparar alias-patch, expulsar o DLQ-replay.
Bits de DLQ: depuração de arquivos recentes, verificação de codificação/localização/sinal, rebaixamento temporário do rigor de tolerance (com bandeira).
Atrasos de SFTP: mudança para API-polling/webhooks, aumento de retais, comunicação com o provedor.
Spikes duplicates: inclua o aditivo 'row _ hash', o bloco de repetição antes de ser descoberto.


17) Pacote de teste-mala (UAT/Prd-pronto)

1. Idempotidade: repetição do mesmo download → 1 'arquivo _ id', 0 novas linhas.
2. Locais: arquivos com ', '/'/'/espaços → valores corretos.
3. Partial/refund: vários 'sequence' para um 'provider _ txid'.
4. URL XSD: CAMT → 'INVALID' + DLQ.
5. Variações MT940: extensões nacionais → análise correta.
6. PDF→OCR: roça com ruído → extração e regras básicas.
7. Schema draft: novo hader → alias-patch e reaproveitamento de arquivos históricos.
8. Throughput: teste de carga de arquivos N/hora → cumprimento de TtA SLA.
9. Edição PII: logs sem PAN/e-mail, apenas hashies.


18) Folha de cheque de implementação

  • Registro de origem: protocolo, programação, SLA, formato, contato.
  • Canais seguros (SFTP/PGP/API), Vault para segredos.
  • Inhestion Idempotent + checksum + versão.
  • Parsers por formatos, dicionário alias, sign/políticas locais.
  • Camada normalizada e índices de chave.
  • Regras de validação, tolerance, DLQ e replay.
  • Orquestrador (DAG), retraí/backoff, pool de recursos.
  • Observabilidade: métricas, dashboards, alertas.
  • Camuflagem GDPR/PII, auditorias de acesso.
  • Malas de teste e regulares schema-drivt drills.

Currículos

A automação do parsing não é «escrever parser», mas construir um circuito industrial, como entrega e criptografia confiáveis, pipas idumpotentes, normalização rigorosa, regras de qualidade e alertas transparentes. Esse caminho transforma quaisquer registros em tabelas previsíveis, com SLA garantido de disponibilidade de dados - fundamentos para dobradinha, tesouraria e relatórios gerenciais.

Contact

Entrar em contacto

Contacte-nos para qualquer questão ou necessidade de apoio.Estamos sempre prontos para ajudar!

Iniciar integração

O Email é obrigatório. Telegram ou WhatsApp — opcionais.

O seu nome opcional
Email opcional
Assunto opcional
Mensagem opcional
Telegram opcional
@
Se indicar Telegram — responderemos também por lá.
WhatsApp opcional
Formato: +indicativo e número (ex.: +351XXXXXXXXX).

Ao clicar, concorda com o tratamento dos seus dados.