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,我們將在 Email 之外,同步於 Telegram 回覆您。
WhatsApp 選填
格式:國碼 + 電話號碼(例如:+886XXXXXXXXX)。

按下此按鈕即表示您同意我們處理您的資料。