GH GambleHub

Реестрлерди парсинг жана автоматташтыруу

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'.

Бош саптардын/аталыштардын жылыштарынын деталдары; колдоо header aliases (мисалы, 'AmountAMTTxnAmount`).
белгини өзгөртүү (минус/кашаа), нормалдаштыруу (', '/'. '/боштуктар).

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

Курсорлор 'since _ idcreated_atpage_token`; rate-limit aware retray (429 → backoff + життер).
Партиялык семантика (бир 'provider _ txid' үчүн бир нече рефанд-саптар).

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`.
Alerta (мисал):
  • `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`).

Code maps: провайдер статусу → Сиздин колдонмо ('APPROVEDCAPTUREDSETTLED`).
Sign policy: 'CR/DR', 'C/D', кашаалар - бирдиктүү "белги" моделине.
Amount repair: ми ажыраткычтарды алып салуу, минус нормалдаштыруу.
Timezone repair: жергиликтүү убакыт жөнөтүүчү → DST эске алуу менен UTC.
💡 Ар бир Auto оңдоо - Логин жана 'repair _ flags' белгиленет.

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 менен болжолдонгон таблицаларга айландырат - салыштыруу, казыналык жана башкаруу отчеттуулугунун негизи.

Contact

Биз менен байланышыңыз

Кандай гана суроо же колдоо керек болбосун — бизге кайрылыңыз.Биз дайым жардам берүүгө даярбыз!

Интеграцияны баштоо

Email — милдеттүү. Telegram же WhatsApp — каалооңузга жараша.

Атыңыз милдеттүү эмес
Email милдеттүү эмес
Тема милдеттүү эмес
Билдирүү милдеттүү эмес
Telegram милдеттүү эмес
@
Эгер Telegram көрсөтсөңүз — Emailден тышкары ошол жактан да жооп беребиз.
WhatsApp милдеттүү эмес
Формат: өлкөнүн коду жана номер (мисалы, +996XXXXXXXXX).

Түшүрүү баскычын басуу менен сиз маалыматтарыңыздын иштетилишине макул болосуз.