Պարսինգը կիսագունդներ և ավտոմատիզացիա
TL; DR
Հուսալի «ճոճվող» ավտոմատիկան կառուցվում է երեք կետերում 'դետերմինացված ingestion (անվտանգ առաքում, գաղափարախոսություն, ամբողջականության վերահսկում), նորմալացված տվյալների շերտ (մեկ սխեմա, բանալիներ, ժամանակի ստանդարտ միավորներ/արժեթղթեր/նշաններ) և որակի կոշտ կարգապահություն (վալիդացիա, տոլերանսներ, DLQ, ալերտա, ավտորեկցիաներ)։ Նպատակը բազմազան ֆայլեր/webhuks վերածելն է կայուն սեղանների, հաշվետվությունների և BI-ի 'SLA-ի հասանելիության համար։
1) Աղբյուրների և ձևերի լանդշաֆտը
1. 1 Աղբյուրներ
PMS/ecwayers/ագրեգատորներ 'գործարքներ, ցանցեր, հյուրանոցներ, բանավեճեր։
ARM/դրամապանակներ/վճարումներ (OCT/RTP/SEPA) 'payouts, ավելացումներ։
Crypto-castodi/փոխանակում 'նա գործարքներ է, փոխարկումների հաշվետվություններ/։
Բանկերը ՝ MT940, CSA 20022 CAMT։ 052/053/054, PAIN վճարումները։ 001/002.
Հարկեր/պետական։ պորտալներ ՝ CSV/XLSX/PDF, երբեմն ջութակահար զննարկչի միջոցով։
1. 2 Lenta.ru
CSV/TSV (փոփոխական բաժանողներ, լոկալներ, կոդավորում)։
XLSX (մուլտֆիլմ-շիտ, միավորված կոմպոզիցիաներ)։
XML (III 20022 CAMT/PAIN, XSD կաստոմային շեմ)։
SWIFT MT940/942 (դիրքային դաշտեր)։
JSON-API/NDJSON (retremental, կուրսորները)։
PDF (պլաստիկ - պարսեր; սկանները OCR են)։
ZIP/TAR. GZ (մի քանի ֆայլերի հետ)։
2) ingestion-interpline ճարտարապետությունը
Ուրվագծեր
1. Landing: Ֆայլերի անվտանգ ընդունումը (SFTP/FTPS/WinDAV/API/webhooks) անմիջապես համարվում է ksum, մենք պահպանում ենք հումքը անփոփոխ։
2. Rox: դասավորություն ամսաթվերի/պրովայդերների/մարտերի, տարբերակների հետ։
3. Normalize: Պարսինգը բացատրում է տեսակների/միավորների միավորումը normalized աղյուսակում։
4. Validated: Post-validation (որակի կանոնները) ռուսական դրոշներ, DLQ։
5. Matched 'համեմատություն ներքին իրադարձությունների/բանկի հետ։
6. Serving/BI: վիտրիններ/ֆինանսական/վիրահատության համար։
Հիմնական պահանջները
Ingestion: «(provider, բանաձև _ name, բանաձևը _ size, delksum, statrone _ date)» եզակի բանալին է։
Կրկնություններ/ռետրաններ, ֆայլի կրկնօրինակումը դուբլներ չի ստեղծում։
DLQ (dead-letter queue) 'բոլոր չբացահայտված/խախտող կանոնները մեկուսացված են։
Տարբերակումը 'նույն օրվա նոր ֆայլը նոր տարբերակ է, որը հղում է նախորդին։
3) Առաքման և գաղտնիքների անվտանգությունը
Ալիքները ՝ SFTP սահմանափակ լուծումներով; FTPS-ը միայն TFC-ի կառուցվածքով է։ API - OAuth2/հոսանք կարճ TTL-ով։
Բովանդակության կոդավորումը 'PGP/GPG ֆայլերի բեռնման ժամանակ։ S/MIME-ը e-mail-inbox-ի համար (եթե օգտագործվում են)։
Ամբողջականության վերահսկումը 'SHA-256/512 ksum, համեմատություն մանիֆեստի հեշի հետ։
Գաղտնիքները 'պահել Vox/KFC-ում, ռոտացիան, արգելված է դելգ ֆայլերում/լոգլերում։
Հասանելի են ՝ RBAC + «նվազագույն արտոնությունների» սկզբունքը, առանձին ծառայողական հաշիվները։
4) Նորմալացում և տվյալների սխեմա
4. 1 Համընդհանուր կանոններ
Ժամանակը 'միշտ UTC-ում RF-8601; settlation-ի համար '«DATE» առանց TZ-ի։
Գումարներ ՝ «DECIMAL (p, s)» minor units + առանձին «scale»; նշանը 'ծխելը/սպառումը խստորեն բառարանում։
Արժույթները ՝ CSA-2417, ֆիքսված աշխատանքային դասընթացները '«fx _ 24c»։
Լոկալի ՝ մեքենայի արգելքը բաժանողների/տասանորդ կետերի/հազարավոր։
Կոդավորում ՝ 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
Հստակ տվեք 'www.imiter "," www.techar "," escapechar "," encoding "։
5. 2 XLSX
Կարդալ sheet whitelist; ավտոսրահների արգելքը փչացումն է։
Բանաձևի փոխակերպումը արժեքներին. UTC-ի թողարկման ամսաթվերը ակնհայտ TZ-ով։
5. 3 XML (ISO 20022 CAMT/PAIN)
Վալիդացիան XSD-ով; XPath-mapping rexizits (<
Credit/debit-ի նորմալացումը նշված նշան է։ Բազմաթիվ աջակցություն
5. 4 MT940
Թեգերի վերլուծություն '61: "," ՝ 86: "; ազգային ընդարձակման աջակցություն; դիրքային դաշտերը կարգավորում են slicing կանոնները։
Համախմբում մի քանի '61: "մեկ բաթում։
5. 5 JSON/NDJSON/API
5. 6 PDF/OCR
Սկզբում պլաստիկ պարսինգի (դետեկտոր) փորձը, միայն դրանից հետո OCR (Tesseract) 'whitelist-ով։
Փոստ-վալիդացիա 'գումարներ, ստուգողական արդյունքներ, տողերի քանակը։
5. 7 Արխիվներ/մարտեր
Բացումը կառուցվածքի պահպանմամբ. յուրաքանչյուր ֆայլ 'առանձին «բանաձև _ id»; մանիֆեստ, բոլոր մասերի վերահսկողություն։
6) Վալիդացիաները և տվյալների որակի կանոնները
Պարտադիր ստուգումներ
Սխեմա 'բոլոր required դաշտերը ներկա են։
Տեսակներ 'գումարներ' թվային, ամսաթվերը 'տղաներ։
Ստուգման գումարները/արդյունքները 'տողերի գումարը = արդյունքը ֆայլում (եթե կա)։
Միջակայքները 'բանական պատուհանի ամսաթիվը։ գումարը> 0 (կամ ընդունելի բացասական բառարանում)։
Եզակիությունը '«(provider, provider _ txid, sequence)» չի կրկնվում normalized-ում։
Տոլերանսներ 'թույլատրելի տարբերություններ' «amount/fx/time»։
Արդյունքը ՝ «VALID», «VALID _ WITH _ WARNINGS», «MSALID no DLQ (Reason _ code)»։
7) Idempotenty և deduplication
Ingestion key: "(provider, medesize, www.ksum, statrone _ date)" միակն "է։
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: «Time-to-Availability (TTA)» -ից մինչև «normalized = READY»։
Retrai: էքսպոնենցիալ backoff + jitter; փորձերի սահմանները. հստակ արձաններ։
Զուգահեռ և մեկուսացում 'ծանր OCR/parsing XLSX - առանձին պուլում/worker CPU/RAM-ի հետ։
DLQ-replay: պարբերական reprocess կանոնների/մապինգների նորարարման ժամանակ։
9) Դիտողությունն ու ալերտները
Մետրիկները
Ingestion Success%, Parse Success տոկոսը աղբյուրներով։
TtA p50/p95, Throughput (տողեր/րոպե)։
Schema Drift Incidents (վերնագրերի/ձևաչափի փոփոխություն)։
DLQ Rate и Aging DLQ p50/p95.
Duplicate Rate по `provider_txid`.
Ալերտա (օրինակ)
`TtA p95 > SLA` → P1.
«DLQ Rate> 2%» մեկ ժամվա ընթացքում P1։
"Schema Drift detected 'no P0 (աղբյուրի վրա մեքենա-խաղալու կանգառը)։
"Duplicate spike 'no P2 (ստուգել պրովայդերը/webhuki)։
Dashbord: World 'wwww.rows _ rows _ norm medrows _ valid _ matched ", DLQ քարտեզը պատճառներով, TTA-quanali։
10) Ավտորեքսիան և մապինգները
Header aliases: բառարանը տարբերակներով (e. g., `Amount`→`amt`, `AMOUNT`→`amt`).
11) Կապը «Վճարումների և PBS» -ի հետ։
Պատրաստ normalized շերտը կոդավորված է խաղալու համար (provider _ txid/merchance _ ref/fuzzy), հաշվարկելով diff-տաքսոնոմիան, auto-ամսագրերը և settlant-bank-shika։ Հիմնական դաշտերը ՝ «provider _ txid», «sequence», «kind», «amount _ minor», «value _ date», «account»։
12) Ստանդարտ և աղյուսակի մոդել
Winlanded ֆայլերը
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) Parsers Prindocod
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 և լոգարանների խմբագրում
Masking/hashing: PAN/email/հեռախոսը 'sha256 + salt ", լոգները' առանց առաջնային արժեքների։
Պահեստավորման քաղաքականությունը '«retention» տեսակի աղբյուրով (AML/ծովում)։
Հասանելի PII-ին միայն դերի միջոցով։ ընթերցանության/օրինագծերի աուդիտ։
15) KPI և նպատակները (պարսինգի/ingestion)
Ingestion Success % ≥ 99. 5 %/օր աղբյուրը։
Parse Success % ≥ 99%, DLQ ≤ 1%.
TTA p95 (normalized) 3515 րոպե (CSV/XML), 3660 րոպե (PDF/OCR)։
Schema Drift Incidents: 0/ամիս առանց ալերտի/ֆիքսի։
Duplicate Rate по `provider_txid` ≤ 0. 05%.
16) Պլեյբուկի
Schema drift 'Auto-matching-ի կանգառը, միացնել «փափուկ» պարսերը ML դետեկտորի հետ, պատրաստել alias-patch, դուրս հանել DLQ-replay-ից։
DLQ-ի աճը 'վերջին ֆայլերի կարգաբերումը, կոդավորման/լոկալի/նշանի ստուգումը, ժամանակավորապես նվազեցնել տոլերանսների կառուցվածքը (դրոշով)։
SFTP-ի ձգձգումները 'API-poling/webhuks-ի անցումը, գետերի ավելացումը, պրովայդերի հետ հաղորդակցումը։
Spikes duplicates: Միացրեք doprower 'row _ hash ", բլոկը մինչև պարզելը։
17) Թեստ-քեյս փաթեթը (UAT/Tramp-պատրաստակամություն)
1. Idempotention: Նույն բեռնման կրկնօրինակը '1' բանաձև _ id ", 0 նոր տողեր։
2. Լոկալի 'ֆայլերը' «,» «/»/կոդերով, ճիշտ գումարներ են։
3. Partial/refund: Մի քանի 'sequence' k մեկ 'provider _ txid "։
4. XML XSD 'անգնահատելի CAMT no' MS ALID '+ DLQ։
5. MT940 տատանումները 'ազգային ընդարձակումները ճիշտ վերլուծություն են։
6. PDJ OCR 'աղմուկով սկանը բացատրում է հիմնական կանոնները։
7. Schema drift: նոր hader medalias-patch և պատմական ֆայլերի վերարտադրումը։
8. Throughput: N ֆայլերի/ժամի բեռի թեստը ցույց է տալիս TTA SLA-ի պահպանումը։
9. PII-խմբագրություն 'լոգներ առանց PAN/e-mail, միայն հեշեր։
18) Ներդրման թուղթ
- Ռուսական աղբյուրներ ՝ արձանագրություն, կոդավորում, SLA, ձևաչափ, կապ։
- Անվտանգ ալիքները (SFTP/PGP/API), Vox գաղտնիքների համար։
- Idempotent ingestion + www.ksum + տարբերակը։
- Պարսերներ ֆորմատներով, alias բառարանով, som/wwww.ale քաղաքականությամբ։
- Նորմալացված շերտը և ինդեքսները։
- Վալիդացիայի կանոնները, տոլերանսները, DLQ և replay։
- Օրկեստրատորը (DAG), retrai/backoff, ռեսուրսների փամփուշտներ։
- Դիտարկումը 'մետրեր, դաշբորդներ, ալերտներ։
- GDPR/PII դիմակավորում, մուտքի աուդիտներ։
- Թեստ-Քեյսներ և www.schema-drift medills.
Ռեզյումե
Պարսինգի ավտոմատիզացումը ոչ թե «պարկեր գրելն» է, այլ արդյունաբերական ձեռնարկություն կառուցելը 'հուսալի առաքում և կոդավորում, կուռքի դիֆերենցիալ, խիստ նորմալացում, որակի կանոններ և թափանցիկ ալտերտեր։ Այս ֆորումը վերածում է կանխատեսելի աղյուսակների, որոնք երաշխավորված են SLA-ով տվյալների հասանելիության համար, հիմք է, գանձարանի և կառավարման հաշվետվությունների համար։