Таҳлили феҳрист ва автоматизатсия
TL; ДР
Автоматизатсияи боэътимоди "санҷиш" ба се сутун асос ёфтааст: воридкунии детерминистӣ (таҳвили бехатар, idempotence, назорати якпорчагӣ), қабати муқарраршудаи маълумот (схемаи ягона, калидҳои мувофиқ, воҳидҳои стандартии вақт/асъор/аломатҳо) ва интизоми қатъии сифат (санҷишҳо, таҳаммулпазирӣ, DLQ, огоҳиҳо, ислоҳоти худкор). Ҳадаф аз табдил додани файлҳои motley/webhooks ба ҷадвалҳои устувор барои оштӣ, гузоришдиҳӣ ва BI бо SLA-ҳо оид ба мавҷудият мебошад.
1) Манзараи манбаъ ва формат
1. 1 Манбаъ
PSP/харидорон/агрегаторҳо: муомилот, маҷмӯаҳо, комиссияҳо, баҳсҳо.
Бонкҳо: иқтибосҳо MT940, ISO 20022 CAMT. 052/053/054, пардохтҳои PAIN. 001/002.
AWS/ҳамёнҳо/пардохтҳо (OCT/RTP/SEPA): бақайдгирии пардохтҳо, баргардонидан.
Crypto-custom/мубодила: транзаксияҳои занҷир, ҳисоботҳои табдили/комиссия.
Андозҳо/Порталҳои давлатӣ: CSV/XLSX/PDF, баъзан тавассути браузери скрипт.
1. Форматҳои 2
CSV/TSV (ҷудосозандагони тағирёбанда, локалҳо, рамзҳо).
XLSX (бисёр варақ, ҳуҷайраҳои якҷояшуда).
XML (ISO 20022 CAMT/PAIN, схемаҳои фармоишии XSD).
SWIFT MT940/942 (майдонҳои мавқеъ).
JSON-API/NDJSON (боркуниҳои афзоянда, курсорҳо).
PDF (ҷадвалбандӣ - таҳлилгар; скан - OCR).
ZIP/TAR. GZ (бастаҳои бисёр файл).
2) Меъмории лӯлаи воридшавӣ
Контурҳо:1. Фурудгоҳ: қабули бехатари файл (SFTP/FTPS/Web
2. Хом: тарҳ аз рӯи санаҳо/провайдерҳо/қассобҳо, нигоҳдорӣ бо версияҳо.
3. Муътадил кардан: таҷзияи → муттаҳидсозии намудҳо/воҳидҳо → ҷадвалҳои муқарраршуда.
4. Тасдиқшуда: пас аз санҷиш (қоидаҳои сифат) → парчамҳо, DLQ.
5. Мувофиқат: харитасозӣ ба рӯйдодҳои дохилӣ/бонк.
6. Хизматрасонӣ/BI: намоиши парвандаҳо барои оштӣ/молия/амалиёт.
Талаботи асосӣ:- Idempotency воридкунӣ: '(провайдер, file_name, file_size, checksum, statement_date) → калиди беназир.
- Reruns/Retrays: такрори файл нусхаҳоро эҷод намекунад.
- DLQ (навбати мактуб): ҳама қоидаҳои эътирофнашуда/вайронкунанда - ба навбати ҷудогона.
- Версия: файли нав барои худи ҳамон рӯз → нусхаи нав бо истинод ба файли қаблӣ.
3) Амнияти таҳвил ва асрори
Каналҳо: SFTP бо калидҳои маҳдуд; FTPS - танҳо бо TLS-и қатъӣ; Нишонаҳои API - OAuth2/short TTL.
Рамзгузории мундариҷа: PGP/GPG ҳангоми зеркашии файлҳо; S/MIME барои паёмдони почтаи электронӣ (агар истифода шавад).
Тафтиши якпорчагӣ: SHA-256/512 санҷиш, муқоиса бо ҳаш дар ошкор.
Асрҳо: дар Vault/KMS нигоҳ доред, гардиш, дар файлҳо/гузоришҳои конфигуратсия манъ аст.
Дастрасӣ: RBAC + принсипи "камтарин имтиёзҳо", ҳисобҳои алоҳидаи хидматӣ.
4) Нормализатсия ва нақшаи маълумот
4. 1 Қоидаҳои универсалӣ
Вақт: ҳамеша UTC дар ISO-8601; барои санаҳои ҳисоббаробаркунӣ, 'САНА' бе TZ.
Маблағҳо: 'DECIMAL (p, s)' дар воҳидҳои хурд + миқёси инфиродӣ '; аломат: гирифтан/хароҷот ба таври қатъӣ тибқи луғат.
Асъорҳо: ISO-4217, ҷадвали меъёри муқарраршуда бо 'fx _ src'.
Локалӣ: манъи автодетект - танзими возеҳи ҷудосозандагон/нуқтаи даҳӣ/ҳазорҳо.
Рамзгузорӣ: вуруди 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
Ба таври возеҳ 'ҷудокунанда', 'квотехар', 'escapechar', 'рамзгузорӣ' -ро муайян кунед.
5. 2 XLSX
Хондани варақи сафедпӯст; Auto Merge Inhibit - Flattens ҳуҷайраҳои якҷояшуда.
Табдили формулаҳо ба арзишҳо; Excel → UTC санаҳои бо TZ возеҳ.
5. 3 XML (ISO 20022 CAMT/PAIN)
Санҷиш аз ҷониби XSD; Харитасозии шахсияти XP (' Нормализатсияи қарз/дебет → аломати; дастгирии якчанд ' 5. 4 MT940 Барчаспҳои таҳлилӣ ': 61:', ': 86:'; дастгирии васеъкунии миллӣ; майдонҳои мавқеъ → қоидаҳои буридан. 5. 5 JSON/NDJSON/API 5. 6 PDF/OCR Аввалан, кӯшиши таҳлили ҷадвал (детектори ҷадвал), танҳо баъд OCR (Tesseract) бо аломатҳои сафедпӯст. 5. 7 бойгонӣ/маҷмӯаҳо Кушодан бо ҳифзи сохтор; ҳар як файл - алоҳида 'файл _ ид'; зоҳир, назорат аз болои ҳамаи қисмҳо. 6) Санҷишҳо ва қоидаҳои сифати маълумот Натиҷа: 'ЭЪТИБОР', 'ДУРӮҒ _ БО _ ОГОҲӢ', 'INVALID → DLQ (reason_code)'. 7) Шиносоӣ ва такрорӣ Калиди воридшавӣ: '(провайдер, file_name, filesize, checksum, statement_date) Идемияи сатр: 'row _ hash = sha256 (normalized_row_compact)'; азнавборкунӣ сабтҳои нав эҷод намекунад. 8) Оркестр ва ҷадвалҳо Orkestrator: Airflow/Dagster (DAG: 'ба даст овардан → рамзкушоӣ → таҳлил → муътадил кардан → тасдиқ кардан → нашр кардан → match'). 9) Мушоҳида ва огоҳиҳо Dashbord: файлҳои ғалтак → → → →, корти DLQ бо сабабҳо, TT-quantiles. 10) Ислоҳоти худкор ва харитасозӣ Тахаллуси сарлавҳа: луғат бо версияҳо (масалан, 'Маблағ' → 'amt', 'TOUNT' → 'amt'). 11) Истинод ба "Муқоисаи пардохтҳо ва ҳисоботҳои PSP" Қабати муқарраршудаи тайёр - вуруд барои муқоиса (provider_txid/merchant_ref/fuzzy), ҳисоб кардани дифф-таксономия, худкор-гузоришҳо ва settlement↔bank-ститчинг). Соҳаҳои асосӣ: 'провайдер _ txid', 'пайдарпаӣ', 'намуди', 'миқдор _ минор', 'value _ date', 'ҳисоб'. 12) Модели нигоҳдорӣ ва ҷадвалҳо 13) Псевдокоди таҳлилгар 14) GDPR/PII ва таҳрири журнал Маска/хэш: PAN/email/phone → 'sha256 + намак', гузоришҳо - бе арзишҳои аввалия. 15) Ҳадафҳои KPI (барои таҳлил/воридшавӣ) Муваффақияти воридшавӣ% ≥ 99. 5 %/рӯз дар як манбаъ. 16) Китобҳои бозӣ Кашиши схема: муқоисаи худкорро қатъ кунед, таҳлилгари "мулоим" -ро бо ML-муайянкунии баландгӯякҳо фурӯзон кунед, ямоқи тахаллусро омода кунед, DLQ-такрори онро иҷро кунед. 17) Бастаи парвандаҳои санҷишӣ (UAT/Prod-Ready) 1. Idempotency: Бори якхеларо такрор кунед → 1 'file _ id', 0 хатҳои нав. 18) Рӯйхати назорати амалисозӣ Автоматикунонии таҳлил ин "навиштани таҳлилгар" нест, балки сохтани схемаи саноатӣ: таҳвил ва рамзгузории боэътимод, қубурҳои бекорхобида, муқаррароти қатъӣ, қоидаҳои сифат ва огоҳиҳои шаффоф. Чунин нақша ҳама гуна регистрҳоро ба ҷадвалҳои пешгӯишаванда бо SLA-и кафолатдор оид ба мавҷудияти маълумот табдил медиҳад - асоси ҳисобот оид ба оштӣ, хазинадорӣ ва идоракунӣ.
Муттаҳидсозии якчанд ': 61:' ба як партия.
Пас аз санҷиш: миқдор, маҷмӯи назорат, муқоисаи шумораи хатҳо.
Webhooks/API: 'idempotency _ key' провайдер + барчаспҳои шумо ('exec _ id'), TTL-ро нигоҳ доред.
Нусхаҳои провайдер: тарҳ аз ҷониби 'provider _ txid' + 'пайдарпаӣ', дар ҳолати номувофиқатӣ - дар DLQ_DUPLICATE.
SLA/SLO: 'Вақт ба-дастрасӣ (TTA)' аз пайдоиши файл то 'муқаррарӣ = READY'.
Retrai: backoff экспоненсиалӣ + jitter; маҳдудиятҳои кӯшиш; статусҳои равшан.
Мувофиқат ва ҷудокунӣ: OCR/таҳлили XLSX вазнин - дар ҳавзи алоҳида/коргар бо маҳдудияти CPU/RAM.
Такрори DLQ: коркарди даврӣ ҳангоми навсозии қоидаҳо/харитасозӣ.
Огоҳиҳо (мисол):
Сатрҳои муқарраршуда:
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);
XML CAMT:
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
OCR PDF (бозгашт):
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 fieldspython 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)
Сиёсати нигоҳдорӣ: 'нигоҳ доштан' аз рӯи намуди манбаъ (AML/баҳисобгирӣ).
Дастрасии PII - танҳо аз рӯи нақш; аудити хондан/содирот.
Муваффақияти коркард% ≥ 99%, DLQ ≤ 1%.
TTA p95 (fayl → муқаррарӣ) 15 дақиқа (CSV/XML), 60 дақиқа (PDF/OCR).
Ҳодисаҳои Schema Drift: 0/моҳ бидуни ҳушдор/ислоҳ.
Такрори меъёри po 'провайдер _ txid' ≤ 0. 05%.
Афзоиши DLQ: ислоҳи файлҳои охирин, санҷиши рамзгузорӣ/локал/аломат, муваққатан паст кардани шиддати таҳаммулпазирӣ (бо парчам).
Таъхирҳои SFTP: гузаштан ба пурсиши API/webhooks, афзоиш ёфтани бозгашт, иртибот бо провайдер.
Хӯшаҳо такрор мешаванд: имкон медиҳад, ки санҷиши иловагии 'row _ hash', блоки такрорӣ то дақиқ карда шавад.
2. Ҷойгоҳҳо: файлҳо бо ', '/'. '/фосила → маблағи дуруст.
3. Қисман/баргардонидан: пайдарпаии сершумор ба як 'провайдер _ txid'.
4. XML XSD: беэътибор CAMT → 'INVALID' + DLQ.
5. MT940 вариантҳо: васеъшавии миллӣ → таҳлили дуруст.
6. PDF → OCR: сканкунӣ бо садо → истихроҷ ва қабули қоидаҳои асосӣ.
7. Drift Schema: сарлавҳаи нав → ямоқи тахаллус ва коркарди файлҳои таърихӣ.
8. Интиқол: санҷиши сарбории файлҳои N/соат → мутобиқат бо TTA SLA.
9. Нашри PII: гузоришҳо бе PAN/e-mail, танҳо hash.
Хулосаи дубора