Reyestrlar parsingi va avtomatlashtirish
TL; DR
Ishonchli «solishtirma» avtomatika uchta kitga asoslanadi: determinizatsiya qilingan ingestion (xavfsiz yetkazib berish, idempotentlik, yaxlitlikni nazorat qilish), me’yorlashtirilgan ma’lumotlar qatlami (yagona sxema, taqqoslash kalitlari, vaqt/valyuta/belgilarning standartlashtirilgan birliklari) va qat’iy sifat intizomi (validatsiyalar, toleranslar, DLQ, alertalar, avto tuzatish). Maqsad - turli xil fayl/vebxuklarni SLA bilan solishtirish, hisobot va BI uchun barqaror jadvallarga aylantirishdir.
1) Manbalar va formatlar landshafti
1. 1 Manbalar
PSP/ekvayerlar/agregatorlar: tranzaksiyalar, setlar, komissiyalar, tortishuvlar.
Banklar: MT940 ko’chirmalari, ISO 20022 CAMT. 052/053/054, PAIN to’lovlari. 001/002.
ARM/hamyonlar/to’lovlar (OCT/RTP/SEPA): payouts reyestrlari, qaytarishlar.
Kripto-kastodi/birjalar: on-cheyn tranzaksiyalar, konvertatsiya/vositachilik hisobotlari.
Soliqlar/davlat. portallar: CSV/XLSX/PDF, ba’zan skriptlangan brauzer orqali.
1. 2 Formatlar
CSV/TSV (variativ ajratgichlar, lokallar, kodlashlar).
XLSX (multi-shit, birlashgan kataklar).
XML (ISO 20022 CAMT/PAIN, XSD maxsus sxemalari).
SWIFT MT940/942 (pozitsion maydonlari).
JSON-API/NDJSON (inkremental yuklar, kursorlar).
PDF (jadval - parser; skanlar - OCR).
ZIP/TAR. GZ (koʻp faylli batchi).
2) Ingestion-payplayn arxitekturasi
Konturlar:1. Landing: fayllarni xavfsiz qabul qilish (SFTP/FTPS/WebDAV/API/webhooks) → darhol checksum hisoblaymiz, xomashyoni o’zgarishsiz saqlaymiz.
2. Raw :/provayderlar/batchlar bo’yicha joylashtirish, versiyalar bilan saqlash.
3. Normalize: parsing → tiplar/birliklarni birlashtirish → normalized jadvallar.
4. Validated: post-validatsiya (sifat qoidalari) → bayroqlar, DLQ.
5. Matched: ichki voqealar/bank bilan taqqoslash.
6. Serving/BI: solishtirish/moliya/operatsiyalar uchun vitrinalar.
Asosiy talablar:- Idempotentlik ingestion:’(provider, file_name, file_size, checksum, statement_date)’→ noyob kalit.
- Takrorlash/retraj: faylni takrorlash dubl yaratmaydi.
- DLQ (dead-letter queue): tanilmagan/qoidalarni buzgan hamma narsa - izolyatsiya qilingan navbatga.
- Version: oʻsha kundagi yangi fayl → oldingisiga bogʻlangan yangi versiya.
3) Yetkazib berish va sirlarning xavfsizligi
Kanallar: Cheklangan kalitli SFTP; FTPS - faqat qattiq TLSda; API - OAuth2/qisqa TTLli tokenlar.
Tarkibni shifrlash: Fayllarni yuklashda PGP/GPG; E-mail-inboxlar uchun S/MIME (agar foydalanilsa).
Yaxlitlikni nazorat qilish: SHA-256/512 checksum, manifestdagi xesh bilan taqqoslash.
Sirlar: Vault/KMS’da saqlash, rotatsiya, fayl/log’larda taqiqlangan.
Foydalanuvchilar: RBAC + «eng kichik imtiyozlar» printsipi, alohida servis-hisoblar.
4) Ma’lumotlarni normallashtirish va sxemasi
4. 1 Universal qoidalar
Vaqt: har doim ISO-8601 UTC; settlement sanalari uchun -’DATE’TZsiz.
Summalar:’DECIMAL (p, s)’v minor units + alohida’scale’; belgi: kirish/xarajat qat’iy ravishda lug’at bo’yicha.
Valyutalar: ISO-4217,’fx _ src’bilan belgilangan kurslar jadvali.
Lokallar: avtodetektni taqiqlash - ajratgichlarni/o’nlik nuqtani/minginchi nuqtani aniq sozlash.
Kodlashlar: UTF-8 ga kirish; boshqalari - log bilan konvertatsiya qilish.
4. 2 Normallashtirilgan «yassi» qatlam (misol)
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) Parserlar formatlar bo’yicha: usullar va tirnoq
5. 1 CSV/TSV
Aniq’delimiter’,’quotechar’,’escapechar’,’encoding’.
5. 2 XLSX
Sheet whitelist boʻyicha oʻqish; avtosayyoralarni taqiqlash - birlashgan kataklarni tekislash.
Formulalarni qiymatlarga aylantirish; aniq TZ bilan Excel → UTC sanalari.
5. 3 XML (ISO 20022 CAMT/PAIN)
XSD bo’yicha validatsiya; XPath-mapping rekvizitlari (’<Ntry>’,’<TxDtls>’,’<Amt>’,’<CdtDbtInd>’).
Normalizatsiya credit/debit → belgi; ’<Chrgs>’,’<RmtInf>’.
5. 4 MT940
Tafsilotlar’: 61:’,’: 86:’; milliy kengayishlarni qo’llab-quvvatlash; pozitsion maydonlar → slicing qoidalari.
Bir nechta’: 61:’ni bir batchga birlashtirish.
5. 5 JSON/NDJSON/API
5. 6 PDF/OCR
Avval jadval parsingiga urinish (tab-detektor), shundan keyingina whitelist belgilari bilan OCR (Tesseract).
Post-validatsiya: summalar, nazorat yakunlari, satrlar sonini solishtirish.
5. 7 Arxivlar/batchi
Tuzilmasini saqlab qolgan holda ochish; har bir faylga alohida’file _ id’; manifest, barcha qismlarni nazorat qilish.
6) Validatsiyalar va ma’lumotlar sifati qoidalari
Majburiy tekshiruvlar:- Sxema: barcha required maydonlari mavjud.
- Turlari: summalar - son, sanalar - pars.
- Nazorat summalari/yakunlari: satrlar summasi = fayldagi yakun (agar mavjud bo’lsa).
- Diapazonlar: oqilona oynadagi sana; summa> 0 (yoki yo’l qo’yiladigan salbiy lug’at bo’yicha).
- Noyoblik:’(provider, provider_txid, sequence)’normalized’ga takrorlanmaydi.
- Toleranslar:’amount/fx/time’.
Natija:’VALID’,’VALID _ WITH _ WARNINGS’,’INVALID → DLQ (reason_code)’.
7) Idempotentlik va deduplikatsiya
Ingestion key:’(provider, file_name, filesize, checksum, statement_date)’→ yagona’file _ id’.
Row-level idem: `row_hash = sha256(normalized_row_compact)`; qayta yuklash yangi yozuvlarni yaratmaydi.
Webhooks/API:’idempotency _ key’provayderi + sizning belgilaringiz (’exec _ id’), TTLni saqlash.
Provayderning dubli:’provider _ txid’+’sequence’bo’yicha dedup, tafovut bo’lganda - DLQ_DUPLICATE.
8) Orkestr va jadvallar
Оркестратор: Airflow/Dagster (DAG: `fetch → decrypt → parse → normalize → validate → publish → match`).
SLA/SLO:’Time-to-Availability (TtA)’fayldan’normalized = READY’gacha.
Retray: eksponensial backoff + jitter; urinishlar limitlari; aniq maqomlar.
Parallelizm va izolyatsiya: og’ir OCR/parsing XLSX - CPU/RAM limitli alohida hovuz/vorkerda.
DLQ-replay: mapping qoidalarini yangilashda davriy reprocess.
9) Kuzatish va alertlar
Metriklar:- Ingestion Success%, Parse Success% manbalari boʻyicha.
- TtA p50/p95, Throughput (satr/min).
- DLQ Rate и Aging DLQ p50/p95.
- Schema Drift Incidents (sarlavha/formatni oʻzgartirish).
- Duplicate Rate по `provider_txid`.
- `TtA p95 > SLA` → P1.
- ’DLQ Rate> 2%’ provayder orqali soatiga → P1.
- ’Schema Drift detected’ → P0 (avto-matchingni manba bo’yicha to’xtatish).
- ’Duplicate spike’ → P2 (provayderni/vebxukini tekshirish).
Dashbord: huni’files → rows_raw → rows_norm → rows_valid → rows_matched', sabablarga ko’ra DLQ xaritasi, TtA kvantillari.
10) Avto tuzatishlar va mappinglar
Header aliases: versiyali lugʻat (e. g., `Amount`→`amt`, `AMOUNT`→`amt`).
11) «PSP to’lovlari va hisobotlarini solishtirish» bilan aloqa
Tayyor normalized qatlam - matching (provider_txid/merchant_ref/fuzzy), diff-taksonomiya hisob-kitobi, avto-jurnallar va settlement, bank-tikishlar uchun kirish. Asosiy maydonlar:’provider _ txid’,’sequence’,’kind’,’amount _ minor’,’value _ date’,’account’.
12) Ombor modeli va jadvallar
Landed fayllar jadvali: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
);
Normallashtirilgan satrlar:
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) Parserlarning soxta hujjati
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 va loglarni tahrirlash
Niqoblash/xeshlash: PAN/email/telefon →’sha256 + salt’, loglar - birlamchi qiymatlarsiz.
Saqlash siyosati: manba turi bo’yicha’retention’(AML/buxgalteriya hisobi).
PII ga kirish - faqat roli bo’yicha; o’qish/eksport auditi.
15) KPI va maqsadlar (parsing/ingestion uchun)
Ingestion Success % ≥ 99. Kuniga 5%.
Parse Success % ≥ 99%, DLQ ≤ 1%.
TtA p95 (fayl → normalized) ≤ 15 daqiqa (CSV/XML), ≤ 60 daqiqa (PDF/OCR).
Schema Drift Incidents: 0/oy alert/fikssiz.
Duplicate Rate по `provider_txid` ≤ 0. 05%.
16) Hodisalar pleybuklari
Schema drift: avto-matchingni to’xtatish, ML-detektorli yumshoq parserni yoqish, alias-patchni tayyorlash, DLQ-replayni haydash.
DLQ portlashi: oxirgi fayllarni tuzatish, kodlash/lokal/belgini tekshirish, vaqtincha telerans qattiqligini pasaytirish (bayroqli).
SFTP kechikishlari: API-polling/vebxukka oʻtish, retraylarni koʻpaytirish, provayder bilan aloqa qilish.
Spikes duplicates:’row _ hash’qoʻshimcha tekshiruvini, takrorlash blokini aniqlashgacha yoqish.
17) Test-keys-paket (UAT/Prod-tayyorlik)
1. Idempotentlik: xuddi shu yuklashni takrorlash → 1’file _ id’, 0 yangi satr.
2. Lokallar:’, ’/’. ’/boʻshliqlar → toʻgʻri summalar.
3. Partial/refund: bir nechta’sequence’ga’provider _ txid’.
4. XML XSD: nolalid CAMT →’INVALID’+ DLQ.
5. MT940 oʻzgarishlar: milliy kengaytmalar → toʻgʻri tahlil.
6. PDF → OCR: shovqin bilan tekshirish → asosiy qoidalarni olish va o’tish.
7. Schema drift: yangi xeder → alias-patch va tarixiy fayllarni qayta ishlash.
8. Throughput: N fayl/soat yuklash testi → TtA SLAga rioya qilish.
9. PII tahriri: PAN/e-mail’siz loglar, faqat xeshlar.
18) Joriy etish chek-varaqasi
- Manbalar reyestri: protokol, jadval, SLA, format, aloqa.
- Xavfsiz kanallar (SFTP/PGP/API), maxfiy Vault.
- Idempotent ingestion + checksum + versiyalar.
- Format bo’yicha parserlar, alias-lug’at, sign/locale-siyosat.
- Normal qatlami va kalitlar indekslari.
- Validatsiya, tolerans, DLQ va replay qoidalari.
- Orkestrator (DAG), retryalar/backoff, resurslar hovuzlari.
- Kuzatish darajasi: metriklar, dashbordlar, alertlar.
- GDPR/PII-niqoblash, kirish auditlari.
- Test-keyslar va muntazam schema-drift drills.
Xulosa
Parsingni avtomatlashtirish - bu «parser yozish» emas, balki sanoat konturini qurish: ishonchli yetkazib berish va shifrlash, idempotent payplaynlar, qat’iy normallashtirish, sifat qoidalari va shaffof alertlar. Bunday kontur har qanday reyestrni ma’lumotlarning mavjudligi bo’yicha kafolatlangan SLAga ega bo’lgan jadvallarga aylantiradi - taqqoslash, g’aznachilik va boshqaruv hisobotlari uchun asos.