GH GambleHub

レジストリの解析と自動化

TL;DR(ドクター)

信頼できる「検証」の自動化は、決定論的な摂取(安全な配達、偶像性、整合性制御)、正規化されたデータ層(単一スキーム、マッチングキー、標準化された時間/通貨/標識単位)、厳格な品質規律(検証、許容、DLQ、アラート、自動修正)の3つの柱に基づいています。目標は、可用性にSLAとの和解、レポート、BIのための安定したテーブルにモトリーファイル/webhookを有効にすることです。


1)ソースとフォーマットのランドスケープ

1.1ソース

PSP/acquirers/aggregators:トランザクション、セット、コミッション、紛争。

銀行: 抽出MT940、 ISO 20022 CAMT。052/053/054、 PAIN支払い。001/002.

AWS/wallets/payouts (OCT/RTP/SEPA): payoutレジスタ、リターン。
Crypto-custom/exchange:オンチェーントランザクション、コンバージョン/コミッションレポート。
税金/州ポータル:CSV/XLSX/PDF、時々スクリプト化されたブラウザを介して。

1.2つのフォーマット

JSON-API/NDJSON(増分アップロード、カーソル)

CSV/TSV(可変区切り、ロケール、エンコーディング)。
XLSX(マルチシート、マージされたセル)。
XML (ISO 20022 CAMT/PAIN、 XSDカスタムスキーマ)。
SWIFT MT940/942(位置フィールド)。
PDF(表形式-パーサ;スキャン-OCR)。
ZIP/TAR。GZ(マルチファイルバッチ)。


2) Ingestionパイプラインアーキテクチャ

輪郭:

1.ランディング:安全なファイル受け入れ(SFTP/FTPS/WebDAV/API/Webhook)→すぐにチェックサムを考慮し、原材料を常に保持します。

2.Raw:日付/プロバイダ/バッチ、バージョンのストレージによるレイアウト。

3.正規化:解析→統一型/単位→正規化されたテーブル。

4.検証:検証後(品質規則)→フラグ、DLQ。

5.マッチ:内部イベント/バンクへのマッピング。

6.サービング/BI:和解/財務/取引のためのケースを表示します。

主な要件:
  • idempotency of ingestion: '(provider、 file_name、 file_size、 checksum、 statement_date)'→a unique key。
  • Reruns/Retrays:ファイルを再実行しても重複は作成されません。
  • DLQ(デッドレターキュー):認識されていない/違反するすべてのルール-孤立したキューへ。
  • バージョン管理:同じ日の新しいファイル→前のファイルへのリンクがある新しいバージョン。

3)配達および秘密の保証

チャネル:限られたキーが付いているSFTP;FTPS-厳密なTLSとだけ;API-OAuth2/short TTLトークン。
コンテンツ暗号化:ファイルをダウンロードするときのPGP/GPG;メールインボックスのS/MIME(使用されている場合)。
Integrity check: SHA-256/512チェックサム、マニフェストのハッシュとの比較。
秘密:Vault/KMSに保存、回転、設定ファイル/ログで禁止。
アクセス: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'を明示的に指定します。

空のライン/ヘッダーシフトの検出;ヘッダーエイリアスのサポート(例:'AmountAMTTxnAmount')。
符号の変換(マイナス/括弧)、千分の正規化('、'/。'/spaces)。

5.XLSX×2

シートのホワイトリストによる読書;Auto Merge Inhibit-マージされたセルを平らにします。
数式を値に変換する。explicit TZでExcel→UTC日付。

5.3 XML (ISO 20022 CAMT/PAIN)

XSDによる検証;XPath IDマッピング('<Ntry>'、 '<TxDtls>'、 '<Amt>'、 '<CdtDbtInd>')。
クレジット/デビット正規化→記号;複数の'<Chrgs>'、 '<RmtInf>'をサポートしています。

5.4 MT940

タグ':61:'、':86:';国民の延長のためのサポート;位置フィールド→スライスルール。
複数の':61:'を1つのバッチに統合。

5.5 JSON/NDJSON/API

カーソル'since_idcreated_atpage_token';rate-limit対応レトライ(429→バックオフ+ジッタ)。
部分的な意味論(1つの'provider_txid'への複数のリファンド文字列)。

5.6 PDF/OCR

まず、テーブル解析(テーブル検出器)を試行し、ホワイトリスト文字を持つOCR (Tesseract)のみを試行します。
ポストバリデーション:金額、制御合計、行の数の調整。

5.7アーカイブ/バッチ

構造の保存とUnpacking;各ファイル-別個の'file_id';マニフェスト、すべての部品の制御。


6)データ品質の検証とルール

必須チェック:
  • スキーマ-すべての必須フィールドが存在します。
  • タイプ:量-数値、日付-解析。
  • チェックサム/合計-行の合計=ファイル内の合計(もしあれば)。
  • 範囲:適度な窓の日付;sum> 0(または許可された負の辞書による)。
  • 一意性:'(プロバイダ、provider_txid、シーケンス)'は正規化では重複しません。
  • 許容は「amount/fx/time」の相違が許容される。

結果:'VALID'、 'VALID_WITH_WARNINGS'、 'INVALID→DLQ (reason_code)'。


7)アイデンティティと重複除外

Ingestion key: '(provider、 file_name、 filesize、 checksum、 statement_date)'→単一の'file_id'。
行レベルのidem: 'row_hash=sha256 (normalized_row_compact)';再ロードしても新しいレコードは作成されません。
Webhooks/API: 'idempotency_key'プロバイダ+タグ('exec_id')、 TTLを保存します。
プロバイダの重複:'provider_txid'+'sequence'によるdedup (DLQ_DUPLICATEでの矛盾の場合)。


8)オーケストレーションとスケジュール

Airflow/Dagster (DAG: 'fetch→decrypt→parse→normalize→validate→publish→match')。
SLA/SLO: 'Time-to-Availability (TtA)'ファイルの発生から'normalized=READY'まで。
レトライ:指数関数バックオフ+ジッタ;限界を試みる;ステータスをクリアします。
同時性と分離:重いOCR/解析 XLSX-CPU/RAM制限のある個別のプール/ワーカーで。
DLQ-replay:規則/マッピングを更新するときの定期的な再処理。


9) Observabilityおよび警報

メトリクス:
  • Ingestion Success%、 Parse Success% by source。
  • TtA p50/p95、スループット(ライン/分)。
  • DLQレートエージングDLQ p50/p95。
  • スキーマドリフトインシデント。
  • 「provider_txid」の重複率。
アラート(例):
  • 'TtA p95> SLA'→P1。
  • 'DLQ Rate> 2%'→プロバイダーP 1の1時間あたり。
  • 'Schema Drift detected'→P0(ソースによる自動マッチングを停止)。
  • 'Duplicate spike'→P2 (check provider/webhooks)。

Dashbord:ファネルのファイル→rows_raw→rows_norm→rows_valid→rows_matched'、理由からDLQカード、TtA-quantles。


10)自動補正とマッピング

ヘッダーエイリアス:バージョンのある辞書(例:'Amount'→'amt'、'AMOUNT'→'amt')。

コードマップ:プロバイダのステータス→ディレクトリ('APPROVEDキャプチャされたSETTLED')。
サインポリシー:'CR/DR'、 'C/D'、括弧-単一の「記号」モデルに。
量の修理:1000分の分離器の取り外し、マイナスの正規化。
タイムゾーン修復:DSTを含むプロバイダ→UTCの現地時間。
💡 任意の自動補正-'repair_flags'に記録され、マークされます。

11) 「PSP決済とレポートの調整」へのリンク"

Ready normalized layer-マッチング(provider_txid/merchant_ref/fuzzy)、 diff-taxonomy、 auto-logs、 settlement↔bank -stitchingのための入力。キーフィールド:'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) 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(フォールバック):
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/email/phone→'sha256+salt'、ログ-プライマリ値なし。
保持ポリシー:ソースタイプ(AML/accounting)による'保持'。
PIIアクセス-役割のみ;読み取り/エクスポートの監査。


15) KPIとターゲット(パース/インジェクション)

摂取成功%≥ 99。ソースあたり5%/日。
Parse Success% ≥ 99%、 DLQ ≤ 1%。
TtA p95 (fayl→normalized) ≤ 15分(CSV/XML)、 ≤ 60分(PDF/OCR)。
スキーマドリフトインシデント:アラート/修正なしの0/月。

Duplicate Rate 'provider_txid' ≤ 0。05%.


16)インシデントプレイブック

スキーマドリフト:自動マッチングを停止し、スピーカーのML検出で「ソフト」パーサーをオンにし、エイリアスパッチを準備し、DLQリプレイを実行します。
DLQサージ:最新のファイルをデバッグし、エンコード/ロケール/記号をチェックし、一時的に公差の重大度を下げます(フラグ付き)。
SFTP遅延:API ポーリング/webhookへの切り替え、リトレースの増加、プロバイダとの通信。
スパイクの重複:追加の検証'row_hash'を有効にします。


17)テストケースパッケージ(UAT/Prod-Ready)

1.Idempotency:同じロード→1 'file_id'、 0行を繰り返します。
2.ロケール:'、'/'を持つファイル。'/spaces→正しい和。
3.部分的/払い戻し:1つの'provider_txid'に複数の'sequence'。
4.XML XSD:無効なCAMT→'INVALID'+DLQ。
5.MT940バリエーション:国家拡張→正しい分析。
6.PDF→OCR:ノイズでスキャン→基本ルールを抽出して渡す。
7.スキーマドリフト:新しいヘッダー→エイリアスパッチと履歴ファイルの再処理。
8.スループット:Nファイル/時間の負荷テスト→TtA SLAへの準拠。
9.PIIエディション:PAN/電子メールなしのログ、ハッシュのみ。


18)実装チェックリスト

  • ソースレジストリ:プロトコル、スケジュール、SLA、フォーマット、連絡先。
  • セキュアチャネル(SFTP/PGP/API)、秘密の保管庫。
  • Idempotent ingestion+チェックサム+バージョン。
  • フォーマット、エイリアス辞書、署名/ロケールポリシーによるパーサ。
  • 正規化されたレイヤーとキーインデックス。
  • 検証ルール、公差、DLQ、リプレイ。
  • オーケストレーター(DAG)、レトライ/バックオフ、リソースプール。
  • オブザビリティ:メトリック、ダッシュボード、アラート。
  • GDPR/PIIマスキング、アクセス監査。
  • テストケースと通常のスキーマドリフトドリル。

履歴書のサマリー

解析の自動化は「パーサを書く」ことではなく、信頼性の高い配信と暗号化、特異なパイプライン、厳格な正規化、品質規則、透明なアラートなどの産業回路を構築することです。このようなアウトラインは、データの可用性に関する保証されたSLAを使用して、すべてのレジスタを予測可能なテーブルに変換します。

Contact

お問い合わせ

ご質問やサポートが必要な場合はお気軽にご連絡ください。いつでもお手伝いします!

統合を開始

Email は 必須。Telegram または WhatsApp は 任意

お名前 任意
Email 任意
件名 任意
メッセージ 任意
Telegram 任意
@
Telegram を入力いただいた場合、Email に加えてそちらにもご連絡します。
WhatsApp 任意
形式:+国番号と電話番号(例:+81XXXXXXXXX)。

ボタンを押すことで、データ処理に同意したものとみなされます。