GH GambleHub

注册表解析和自动化

TL;DR

可靠的"焊接"自动化建立在三条鲸鱼上:确定性输入(安全交付,等效性,完整性控制),标准化数据层(单个电路,匹配密钥,标准化的时间/货币/符号单位)和严格的质量纪律(验证,tolerance,DLQ,Alerta,自动校正)。目的是将杂项文件/webhooks转换为稳定的表,以与SLA进行匹配,报告和BI。


1)源和格式的景观

1.1个来源

PSP/收购者/聚合器:交易,设置,佣金,分配。

银行: MT940对账单,ISO 20022 CAMT。052/053/054,PAIN付款。001/002.

ARM/钱包/付款(OCT/RTP/SEPA):付款登记册,退款。
Crypto Castody/Exchange:电子交易,转换/佣金报告。
税收/政府。门户:CSV/XLSX/PDF,有时通过脚本浏览器。

1.2种格式

CSV/TSV(可变分隔符,位点,编码)。
XLSX(多缝合,组合单元)。
XML(ISO 20022 CAMT/PAIN,XSD定制sche-me)。
SWIFT MT940/942(位置字段)。
JSON-API/NDJSON(增量上载、游标)。
PDF(表格解析器;扫描-OCR)。
ZIP/TAR.GZ(多文件蹦床)。


2) ingestion-pipline架构

轮廓:

1.Landing:安全接收文件(SFTP/FTPS/WebDAV/API/webhooks) →立即考虑使用checksum,我们始终保留原材料。

2.Raw:按日期/提供商/蹦床布局,保留版本。

3.Normalize:对类型→单位进行分类→统一化表。

4.验证:后验证(质量规则)→标志,DLQ。

5.匹配:与内部事件/银行匹配。

6.Serving/BI:对账/财务/交易的展示。

关键要求:
  • 等效性ingestion: '(provider, file_name, file_size, checksum, statement_date)'→唯一的钥匙。
  • 重播/转发:重新运行文件不会产生双倍。
  • DLQ (dead-letter queue):所有未知/违反规则的人都进入孤立的队列。
  • Version:当天的新文件→参考上一版本的新版本。

3)交货和秘密安全

通道:密钥有限的SFTP;FTPS-仅在严格的TLS下;API是具有短TTL的OAuth2/令牌。
内容加密:下载文件时的PGP/GPG;S/MIME用于电子邮件收件箱(如果使用)。
完整性控制:SHA-256/512 checksum,与清单中的哈希进行比较。
保密:保存在Vault/KMS中,轮换,禁止在config 文件/logs中。
可用性:RBAC+"最小特权"原则,单独的服务帐户。


4)标准化和数据模式

4.1通用规则

时间:ISO-8601始终是UTC;对于定居日期-没有TZ的"DATE"。
总和:小单位中的"DECIMAL(p,s)"+单独的"规模";符号:严格按字典排列/消耗。
货币:ISO-4217,带有"fx_src"的固定汇率表。
Locali:禁止自动测试是分隔符/小数点/千分的显式设置。
编码:输入UTF-8;其他的-转换与日志。

4.2归一化的"平面"层(示例)

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)按格式划分的解析器: 技术和耙子

5.1 CSV/TSV

明确设置"delimiter"、"quotechar"、"escapechar"、"encoding"。

空行/标题移位的细节;支持header aliases(例如'AmountAMTTxnAmount`).
符号转换(减去/括号),将千分之一(","/"/空格")归一化。

5.2 XLSX

通过表白主义者阅读;禁止自动关闭-使联合单元变平。
将公式转换为值;Excel → UTC日期带有显式TZ。

5.3 XML (ISO 20022 CAMT/PAIN)

通过XSD验证;XPath映射道具("<Ntry>,"<TxDtls>","<Amt>","<CdtDbtInd>")。
信用正常化/借阅→标志;支持多个"<Chrgs>,"<RmtInf>"。

5.4 MT940

标记解析为':61:',':86:';支持国家扩展;位置字段→滑动规则。
将多个':61:'合并为一个战斗。

5.5 JSON/NDJSON/API

游标'since_idcreated_atpage_token`;rate-limit aware retrai(429 → backoff+jitter)。
分区语义(单个"provider_txid"的多个重构行)。

5.6 PDF/OCR

首先尝试进行表格解调(tab检测器),然后仅尝试使用带有白色主义符号的OCR(Tesseract)。
后验证:总和,基准,行数核对。

5.7 Archives/Batchy

解压缩并保留结构;每个文件都是单独的"file_id";宣言,控制所有部分。


6)验证和数据质量规则

强制性检查:
  • 方案:存在所有请求字段。
  • 类型:总和是数字,日期是错位的。
  • 校验和:行和=文件中的总和(如果有)。
  • 范围:明智窗口中的日期;总和>0(或可接受的负词典)。
  • 唯一性:"(provider,provider_txid,序列)"在正常化中不重复。
  • Tolerans:允许的"amount/fx/time"差异。

结果:"VALID","VALID_WITH_WARNINGS","INVALID → DLQ(reason_code)"。


7)相似性和重复数据消除

入口键:'(provider, file_name, filesize, checksum, statement_date)'→唯一的'file_id'。
Row-level idem: `row_hash = sha256(normalized_row_compact)`;重新加载不会创建新条目。
Webhooks/API:"idempotency_key"提供商+您的标签("exec_id"),存储TTL。
提供者的配对:"provider_txid"+"sequence"的后代,而差异则在DLQ_DUPLICATE中。


8)编排和时间表

Оркестратор: Airflow/Dagster (DAG: `fetch → decrypt → parse → normalize → validate → publish → match`).

SLA/SLO:从文件出现到"正常化=READY"的"时间到可用性(TtA)"。
Retrai:指数backoff+jitter;尝试限制;明确的状态。
并发和绝缘:XLSX的重型OCR/抛光-在单独的CPU/RAM限制池/操作员中。
DLQ-replay:更新规则/映射时,定期重新执行。


9)可观察性和异同

度量标准:
  • 按来源分列的Ingestion Success%、Parse Success%。
  • TtA p50/p95,Throughput(行/分钟)。
  • DLQ Rate и Aging DLQ p50/p95.
  • Schema Drift Incidents(标题/格式更改)。
  • Duplicate Rate по `provider_txid`.
Alertes(示例):
  • `TtA p95 > SLA` → P1.
  • "DLQ Rate> 2%"按→ P1提供商每小时。
  • "Schema Drift detected" → P0(通过源停止自动对决)。
  • 'Duplicate spike' → P2(检查提供商/webhooks)。

Dashbord:漏斗'files ,DLQ卡出于原因,TtA量子。


10)自动校正和mappings

Header aliases: 版本字典(e.g., `Amount`→`amt`, `AMOUNT`→`amt`).

代码映射:提供商状态→参考资料('APPROVEDCAPTUREDSETTLED`).
标记政策:"CR/DR","C/D",括号为单个"标志性"模型。
Amount修复:去除千分隔符,使缺点正常化。
时间区修复:提供商的本地时间→ UTC,含DST。
💡 任何自动校正-在"repair_flags"中进行逻辑和标记。

11)与"PSP支付和报告核对"的联系"

完成的规范化层是匹配的输入(provider_txid/merchant_ref/fuzzy),diff分类法计算,自动日志和settlement↔bank字符。关键字段是:"provider_txid","sequence","kind","amount_minor","value_date","account"。


12)存储模型和表格

登录的文件表:
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
);
归一化行:
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)解析器的伪代码

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和日志编辑

掩码/哈希:PAN/电子邮件/电话 → 'sha 256+salt',logi-没有主值。
保留策略:按源类型(AML/bukuchet)"保留"。
PII的访问权限仅限于角色;读数/导出审核。


15)KPI和目标(用于parsing/ingestion)

Ingestion Success % ≥ 99.每源5%/天。

Parse Success % ≥ 99%, DLQ ≤ 1%.

TtA p95(fayl→normalized)≤ 15分钟(CSV/XML),≤ 60分钟(PDF/OCR)。
Schema Drift Incidents:0/个月,没有警报/假人。

Duplicate Rate по `provider_txid` ≤ 0.05%.


16)事件花花公子

Schema drift:停止自动对决,打开带有ML扬声器检测器的"软"解析器,准备外来补丁,赶走DLQ-replay。
DLQ激增:调试最新文件,检查编码/位置/符号,暂时降低tolerans的严格(带有标志)。
SFTP延迟:切换到API-polling/webhook,增加转发,与提供商通信。
Spikes duplicates:启用"row_hash"多普查,重复块,直到澄清。


17)测试桉例包(UAT/Prod准备)

1.相同性:重复相同的下载→ 1'file_id',0条新行。
2.Locali:带有','/'/空格的文件→正确的金额。
3.Partial/refund:对一个"provider_txid"进行一些"序列"。
4.XML XSD:非验证CAMT → 'INVALID'+DLQ。
5.MT940变化:国家扩展→正确分析。
6.PDF→OCR:噪音扫描→提取和通过基本规则。
7.Schema drift:新的hader → alias补丁和历史文件的重新处理。
8.Throughput:负载测试N文件/小时→遵守TtA SLA。
9.PII修订版:没有PAN/电子邮件的博客,只有哈希。


18)实施支票

  • 来源注册:协议、时间表、SLA、格式、联系人。
  • 安全通道(SFTP/PGP/API), Vault for Secret。
  • 异位输入+checksum+版本。
  • 按格式,alias字典,标记/本地策略的解析器。
  • 归一化层和密钥索引。
  • 验证规则,tolerance,DLQ和replay。
  • 管弦乐队(DAG),retrai/backoff,资源池。
  • 可观察性:度量,dashbords,alertes。
  • GDPR/PII掩码,访问审核。
  • 测试桉例和常规模式驱动程序。

二.总结

解析自动化不是"写解析器",而是构建一个工业轮廓:可靠的交付和加密,等效派伊线,严格的规范化,质量规则和透明的差速器。这样的轮廓可以将任何注册表转换为可预测的表格,并在数据可用性方面有保证的SLA,这是交换、财务和管理报告的基础。

Contact

联系我们

如需任何咨询或支持,请随时联系我们。我们随时准备提供帮助!

开始集成

Email — 必填。Telegram 或 WhatsApp — 可选

您的姓名 可选
Email 可选
主题 可选
消息内容 可选
Telegram 可选
@
如果填写 Telegram,我们也会在 Telegram 回复您。
WhatsApp 可选
格式:+国家代码 + 号码(例如:+86XXXXXXXXX)。

点击按钮即表示您同意数据处理。