Реестрлерди парсинг жана автоматташтыруу
TL; DR
Ишенимдүү "сыноо" автоматика үч киттерге негизделген: determinated ingestion (коопсуз жеткирүү, идемпотенттүүлүк, бүтүндүгүн көзөмөлдөө), нормалдаштырылган маалымат катмары (бирдиктүү схема, салыштыруу ачкычтары, стандартташтырылган убакыт/валюта/белги бирдиктери) жана катуу сапат дисциплинасы (валидациялар, толеранстар, DLQ, алерттер, автокоррекция). Максаты - ар түрдүү файлдарды/вебхокторду SLA менен салыштыруу, отчеттуулук жана BI үчүн туруктуу таблицаларга айландыруу.
1) Булактардын жана форматтардын ландшафты
1. 1 булактары
PSP/эквайерлер/агрегаторлор: транзакциялар, комплекттер, комиссиялар, талаш-тартыштар.
Банктар: MT940 көчүрмөлөрү, ISO 20022 CAMT. 052/053/054, PAIN төлөмдөрү. 001/002.
ARM/капчыктар/төлөмдөр (OCT/RTP/SEPA): payouts реестрлери, кайтарымдар.
Крипто-кастоди/биржалар: он-чейн транзакциялары, конвертация/комиссия отчеттору.
Салыктар/мамлекеттик. порталдар: CSV/XLSX/PDF, кээде scripted браузер аркылуу.
1. 2 форматтары
CSV/TSV (вариативдик бөлгүчтөр, локалдар, коддоолор).
XLSX (көп-shit, бириккен клеткалар).
XML (ISO 20022 CAMT/PAIN, XSD өзгөчө схемалар).
SWIFT MT940/942 (позициялык талаалар).
JSON-API/NDJSON (инкременталдык жүктөр, курсорлор).
PDF (таблица - parser; сканерлер - OCR).
ZIP/TAR. GZ (бир нече файлдар менен согуш).
2) Архитектура ingestion-пайплайн
Контурлар:1. Landing: коопсуз файлдарды кабыл алуу (SFTP/FTPS/WebDAV/API/webhooks) → дароо текшерүү карап, чийки затты сактап калат.
2. Raw: даталар/провайдерлер/батам боюнча жайгаштыруу, версиялар менен сактоо.
3. Normalize: parsing → түрлөрүн/бирдиктерин бириктирүү → normalized столдор.
4. Validated: пост-валидация (сапат эрежелери) → желектер, DLQ.
5. Matched: ички окуялар/банк менен салыштыруу.
6. Serving/BI: салыштыруу/каржы/иш үчүн терезелер.
Негизги талаптар:- Indempotentity ingestion: '(provider, file_name, file_size, checksum, statement_date)' → уникалдуу ачкыч.
- Кайталоо/Ретра: файлды кайталап айдоо дубль жаратпайт.
- DLQ (dead-letter queue): бардык таанылбаган/эрежелерди бузган - обочолонгон кезек.
- Version: ошол эле күнү жаңы файл → мурунку шилтеме менен жаңы версия.
3) Жеткирүү жана сырлар коопсуздугу
Каналдар: чектелген ачкычтар менен SFTP; FTPS - катуу TLS менен гана; API - OAuth2/кыска TTL менен токендер.
Мазмунду шифрлөө: PGP/GPG файлдарды жүктөөдө; S/MIME электрондук почта инбокстору үчүн (колдонулса).
бүтүндүгүн көзөмөлдөө: SHA-256/512 checksum, манифестте хэш менен салыштыруу.
Сырлар: Vault/KMS сактоо, айлануу, -файлдар/логдор тыюу салынган.
Жеткиликтүүлүктөр: RBAC + "эң аз артыкчылыктар" принциби, жеке тейлөө эсептери.
4) нормалдаштыруу жана маалыматтар схемасы
4. 1 Универсалдуу эрежелер
Убакыт: ар дайым ISO-8601 UTC; даталар үчүн settlement - 'DATE' TZ жок.
Суммасы: 'DECIMAL (p, s)' менен minor units + өзүнчө 'scale'; белги: кириш/чыгаша сөздүк боюнча катуу.
Валюталары: ISO-4217, белгиленген курс таблицасы 'fx _ src'.
Locals: autodetekt тыюу - бөлгүчтөрдүн ачык-айкын орнотуу/ондук/ми.
Коддоолор: 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) формат боюнча Parsers: ыкмалары жана тырмоо
5. 1 CSV/TSV
Так суроо 'delimiter', 'quotechar', 'escapechar', 'encoding'.
5. 2 XLSX
sheet whitelist боюнча окуу; автоматташтырууга тыюу салуу - бириктирилген уячаларды тегиздөө.
Формулаларды мааниге айландыруу; күндөр ачык TZ менен Excel → UTC.
5. 3 XML (ISO 20022 CAMT/PAIN)
XSD боюнча валидация; XPath-mapping реквизиттери ('<Ntry>', '<TxDtls>', '<Amt>', '<CdtDbtInd>').
Normalization credit/debit → белги; көп колдоо '<Chrgs>', '<RmtInf>'.
5. 4 MT940
Tags талдоо ': 61:', ': 86:'; улуттук кеңейтүүлөрдү колдоо; позиция талаалары → slicing эрежелери.
Бир нече консолидация ': 61:' бир батч.
5. 5 JSON/NDJSON/API
5. 6 PDF/OCR
Биринчи табличка parsing аракет (табличка Detector), андан кийин гана OCR (Tesseract) whitelist белгилер менен.
Пост-валидация: суммалар, контролдук жыйынтыктар, саптардын санын салыштыруу.
5. 7 Archives/батчи
түзүлүшүн сактоо менен ачуу; ар бир файл үчүн өзүнчө 'file _ id'; манифест, бардык бөлүктөрүн көзөмөлдөө.
6) Валидация жана маалымат сапаты эрежелери
Милдеттүү текшерүүлөр:- Схема: бардык required талаалар бар.
- Түрлөрү: суммасы - сандык, датасы - парс.
- Контролдук суммалар/жыйынтыктар: саптардын суммасы = файлдагы жыйынтык (эгерде бар болсо).
- Диапазондор: акылдуу терезеде дата; сумма> 0 (же жол берилүүчү терс сөздүк боюнча).
- Уникалдуулук: '(provider, provider_txid, sequence)' normalized менен кайталанбайт.
- Толеранттар: жол берилген айырмачылыктар 'amount/fx/time'.
натыйжасы: 'VALID', 'VALID _ WITH _ WARNINGS', 'INVALID → DLQ (reason_code)'.
7) Демпотенттүүлүк жана дедупликация
Ingestion key: '(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: 'Time-to-Availability (TtA)' чейин 'normalized = READY'.
Retry: экспоненциалдуу backoff + jitter; аракет лимиттери; так статустары.
Параллелизм жана изоляция: оор OCR/парсинг XLSX - CPU/RAM лимити менен өзүнчө пулда/воркерде.
DLQ-replay: эрежелерди/mapping жаңыртып жатканда мезгил-мезгили менен reprocess.
9) Байкоо жана аллергия
Метрикасы:- Ingestion Success%, Parse Success% булактары тарабынан.
- TtA p50/p95, Throughput (сап/мин).
- DLQ Rate и Aging DLQ p50/p95.
- Schema Drift Incidents (аталыштарын/форматын өзгөртүү).
- Duplicate Rate по `provider_txid`.
- `TtA p95 > SLA` → P1.
- 'DLQ Rate> 2%' P1.
- 'Schema Drift detected' → P0 (auto-матч булагы боюнча токтотуу).
- 'Duplicate spike' → P2 (провайдерди/вебхокту текшерүү).
Dashbord: Huni 'files → rows_raw → rows_norm → rows_valid → rows_matched', DLQ карта себептерден улам, TtA-quantiles.
10) Auto түзөтүү жана Mapping
Header aliases: версиялары менен сөздүк (e. g., `Amount`→`amt`, `AMOUNT`→`amt`).
11) "PSP төлөмдөрдү жана отчетторду салыштыруу" менен байланыш
Даяр normalized катмары - матч (provider_txid/merchant_ref/fuzzy), diff-таксономияны эсептөө, авто-журналдар жана settlement, bank-тигүү үчүн кирүү. Негизги талаалар: 'provider _ txid', 'sequence', 'kind', 'amount _ minor', 'value _ date', 'account'.
12) Сактоо модели жана таблицалар
landed жадыбалы: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/email/тел → 'sha256 + salt', Логи - баштапкы маанисиз.
Сактоо саясаты: булактын түрү боюнча 'retention' (AML/бухгалтердик эсеп).
PII жетүү - ролу боюнча гана; окуу/экспорттун аудити.
15) KPI жана максаттары (parsing/ingestion үчүн)
Ingestion Success % ≥ 99. 5 %/күн булагына.
Parse Success % ≥ 99%, DLQ ≤ 1%.
TtA p95 (файл → normalized) ≤ 15 мүнөт (CSV/XML), ≤ 60 мүнөт (PDF/OCR).
Schema Drift Incidents: 0/ай алерта/фикс жок.
Duplicate Rate по `provider_txid` ≤ 0. 05%.
16) Playbook окуялар
Shema drift: токтотуу auto-матч, ML-детекторунун колонка менен "жумшак" parser күйгүзүү, alias-патч даярдоо, DLQ-replay айдап.
DLQ секирүү: акыркы файлдарды оңдоо, коддоону/жергиликтүү/белгини текшерүү, толеранттуулуктун катаалдыгын убактылуу төмөндөтүү (желек менен).
SFTP кечигүү: API-polling/Webhook которуу, retrains жогорулатуу, жөнөтүүчү менен байланыш.
Spikes duplicates: кошумча текшерүүнү 'row _ hash', кайталоо блогу такталганга чейин күйгүзүү.
17) Test Case пакети (UAT/Prod даярдыгы)
1. Демпотенттик: Ошол эле жүктөө кайталоо → 1 'file _ id', 0 жаңы саптар.
2. Жергиликтүү: ', '/'. '/боштуктар → туура суммалар менен файлдар.
3. Partial/refund: бир нече 'sequence' үчүн 'provider _ txid'.
4. XML XSD: жөнөкөй CAMT → 'INVALID' + DLQ.
5. MT940 өзгөрүүлөр: улуттук кеңейтүү → туура талдоо.
6. PDF → OCR: ызы-чуу менен сканерлөө → негизги эрежелерди алуу жана өтүү.
7. Shema drift: жаңы хедер → alias-патч жана тарыхый файлдарды кайра иштетүү.
8. Throughput: жүктөө сыноо N Files/саат → TtA SLA сактоо.
9. PII-Edition: PAN/электрондук почта жок Логи, гана хэш.
18) Киргизүү чек-тизмеси
- Булактардын реестри: протокол, график, SLA, формат, байланыш.
- Коопсуз каналдар (SFTP/PGP/API), жашыруун сактоо.
- Idempotent ingestion + checksum + версиялары.
- формат боюнча Parsers, alias-сөздүк, sign/locale-саясат.
- Нормалдаштырылган катмар жана ачкыч индекстери.
- валидация, толеранс, DLQ жана replay эрежелери.
- Оркестр (DAG), retry/backoff, ресурстардын көлмөсү.
- Байкоо: метриктер, дашборддор, алерталар.
- GDPR/PII-камуфляж, кирүү аудиттери.
- Сыноо учурлары жана үзгүлтүксүз shema-drift drills.
Резюме
Парсингди автоматташтыруу - бул "парсерди жазуу" эмес, өнөр жай контурун куруу: ишенимдүү жеткирүү жана шифрлөө, демпотенттик пайплайндар, катуу нормалдаштыруу, сапат эрежелери жана ачык-айкын тобокелдиктер. Мындай контур ар кандай реестрлерди маалыматтардын жеткиликтүүлүгү боюнча кепилденген SLA менен болжолдонгон таблицаларга айландырат - салыштыруу, казыналык жана башкаруу отчеттуулугунун негизи.