GH GambleHub

რეგისტრატორების პარსინგი და ავტომატიზაცია

TL; DR

საიმედო „სანთლის“ ავტომატიზაცია ემყარება სამ ვეშაპს: დეტერმინის ინვესტიცია (უსაფრთხო მიწოდება, იდემპოტენტურობა, მთლიანობის კონტროლი), ნორმალიზებული მონაცემთა ფენა (ერთიანი სქემა, შედარების გასაღებები, დროის/ვალუტის/ნიშნების სტანდარტიზებული ერთეულები) და მკაცრი ხარისხის დისციპლინა (ვალიდაცია, ტოლერანტობა, DLQ, ალერტები, ავტო კორექტირება). მიზანია მრავალფეროვანი ფაილების/ვებჰუკების სტაბილურ ცხრილებად გადაქცევა curved, ანგარიშგების და BI SLA- სთან წვდომის თვალსაზრისით.


1) წყაროების და ფორმატების ლანდშაფტი

1. 1 წყაროები

PSP/შემქმნელები/აგრეგატორები: გარიგებები, ნაკრები, საკომისიო, დავები.
ბანკები: MT940, ISO 20022 CAMT ამონაწერები. 052/053/054, PAIN გადახდები. 001/002.
ARM/საფულეები/გადახდები (OCT/RTP/SEPA): payouts რეესტრები, ზარალი.
Crypto-castodi/გაცვლა: on-chein გარიგებები, კონვერტაციის/საკომისიო ანგარიშები.
გადასახადები/სახელმწიფო. პორტალები: CSV/XLSX/PDF, ზოგჯერ სკრიპტირებული ბრაუზერის საშუალებით.

1. 2 ფორმატები

CSV/TSV (ვარიატიული გამყოფი, ლოკალი, კოდირება).
XLSX (მულტფილმები, კომბინირებული უჯრედები).
XML (ISO 20022 CAMT/PAIN, კასტომიური XSD სქემა).
SWIFT MT940/942 (პოზიციური ველები).
JSON-API/NDJSON (სავარაუდო გადმოტვირთვები, კურსორები).
PDF (ფირფიტა - პარსერი; Skans - OCR).
ZIP/TAR. GZ (ბრძოლები რამდენიმე ფაილით).


2) განაწილების არქიტექტურა

კონტურები:

1. Landing: უსაფრთხო ფაილების მიღება (SFTP/FTPS/WebDAV/API/webhooks), დაუყოვნებლივ მიგვაჩნია checksum, ჩვენ ყოველთვის ვრჩებით ნედლეულს.

2. Raw: განლაგება თარიღების/პროვაიდერების/ბრძოლების მიხედვით, შენახვა ვერსიით.

3. Normalize: პარსინგი - ტიპების/ერთეულების გაერთიანება ნორმალიზებული ცხრილის შესახებ.

4. Validated: პოსტვალიდაცია (ხარისხის წესები) - დროშები, DLQ.

5. Matched: შედარება შიდა მოვლენებთან/ბანკთან.

6. Serving/BI: ფანჯრები გადამოწმების/ფინანსების/ოპერაციებისთვის.

ძირითადი მოთხოვნები:
  • Idempotention ungestion: '(provider, file _ name, file _ size, checksum, statement _ date)' არის უნიკალური გასაღები.
  • გამეორება/გამეორება: ფაილის განმეორება არ ქმნის დუბლს.
  • DLQ (dead-letter queue): ყველა ამოუცნობი/არღვევს წესებს - იზოლირებულ რიგში.
  • ვერსია: ახალი ფაილი იმავე დღეს არის ახალი ვერსია წინა მითითებით.

3) მიწოდებისა და საიდუმლოების უსაფრთხოება

არხები: SFTP შეზღუდული კლავიშებით; FTPS - მხოლოდ მკაცრი TLS- ით; API - OAuth2/ნიშნები მოკლე TTL.
შინაარსის დაშიფვრა: PGP/GPG ფაილების ჩატვირთვისას; S/MIME ელექტრონული ფოსტის ინბოქსებისთვის (თუ გამოიყენება).
მთლიანობის კონტროლი: SHA-256/512 checksum, შედარება ჰაშასთან მანიფესტში.
საიდუმლოებები: შენახვა Vault/KMS- ში, როტაცია, აკრძალულია კონფისკაციის ფაილებში/ლოგოებში.
წვდომა: RBAC + „მინიმალური შეღავათების“ პრინციპი, ინდივიდუალური მომსახურების ანგარიშები.


4) ნორმალიზაცია და მონაცემთა სქემა

4. 1 უნივერსალური წესები

დრო: ყოველთვის UTC ISO-8601; Settlement თარიღებისთვის - 'DATE' TZ- ის გარეშე.
თანხები: 'DECIMAL (p, s)' minor units + ცალკე 'scale "; ნიშანი: მრევლი/მოხმარება მკაცრად ლექსიკონის მიხედვით.
ვალუტები: 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

აშკარად დაუსვით 'delimiter', 'é techar', 'escapechar', 'encoding'.

სათაურების ცარიელი სტრიქონების/ცვლების დეტალი; მხარდაჭერა header aliases (მაგალითად, 'AmountAMTTxnAmount`).
ნიშნის ტრანსფორმაცია (მინუს/ფრჩხილები), ათასობით ნორმალიზება (', '/'. '/ხარვეზები).

5. 2 XLSX

წაიკითხეთ sheet whitelist; ავტოკატასტროფების აკრძალვა არის ერთიანი უჯრედების გავრცელება.
ფორმულების მნიშვნელობებად გადაქცევა; Excel-UTC თარიღები აშკარა TZ- ით.

5. 3 XML (ISO 20022 CAMT/PAIN)

XSD ვალიდაცია; XPath-mapping დეტალები ('<Ntry>', '<TxDtls>', '<Amt>', '<CdtDbtInd>').
Credit/debit- ის ნორმალიზაცია ნიშანი; მხარდაჭერა მრავლობითი '<Chrgs>', '<RmtInf>'.

5. 4 MT940

ჭდეების ანალიზი ': 61:', ': 86:'; ეროვნული გაფართოების მხარდაჭერა; პოზიციური ველები - slicing წესები.
რამდენიმე 'კონსოლიდაცია: 61:' ერთ ბატში.

5. 5 JSON/NDJSON/API

'since _ id კურსორებიcreated_atpage_token`; rate-limit aware (429-backoff + gitter).
Semantic partial (რამდენიმე რეფანდის სტრიქონი ერთ 'provider _ txid').

5. 6 PDF/OCR

ჯერ ფირფიტის პარსინგის მცდელობა (ტაბლეტის დეტექტორი), მხოლოდ ამის შემდეგ OCR (Tesseract) whitelist სიმბოლოებით.
პოსტვალიდაცია: თანხები, საკონტროლო შედეგები, ხაზების რაოდენობის შერიგება.

5. 7 არქივები/ბატჩები

რასპაკოვკა სტრუქტურის შენარჩუნებით; თითოეული ფაილი - ცალკეული 'file _ id'; მანიფესტი, ყველა ნაწილის კონტროლი.


6) ვალიდაცია და მონაცემთა ხარისხის წესები

სავალდებულო შემოწმებები:
  • სქემა: ყველა required ველი არსებობს.
  • ტიპები: თანხები - რიცხვები, თარიღები - ფხვიერი.
  • მაკონტროლებელი თანხები/შედეგები: ხაზების ჯამი = შედეგი ფაილში (თუ არსებობს).
  • დიაპაზონი: თარიღი გონივრულ ფანჯარაში; თანხა> 0 (ან დასაშვები უარყოფითი ლექსიკონის მიხედვით).
  • უნიკალურობა: '(provider, provider _ txid, sequence)' არ არის დუბლირებული normalized.
  • ტოლერანები: დასაშვები განსხვავებები 'amount/fx/time'.

შედეგი: 'VALID', 'VALID _ WITH _ WARNINGS', 'INVALID-DLQ (reason _ code) ".


7) Idempotence და deduplication

Ingestion key: '(provider, file _ name, filesize, checksum, statement _ date)' არის ერთადერთი 'file _ id ".
Row-level idem: `row_hash = sha256(normalized_row_compact)`; განმეორებითი დატვირთვა არ ქმნის ახალ ჩანაწერებს.
Webhooks/API: 'idempotence _ key' პროვაიდერი + თქვენი ეტიკეტები ('exec _ id'), შენახვა TTL.
პროვაიდერის დუბლები: დედაპლატი 'provider _ txid' + 'sequence', შეუსაბამობის დროს - DLQ _ DUPLICATE- ში.


8) ორკესტრი და გრაფიკი

Оркестратор: Airflow/Dagster (DAG: `fetch → decrypt → parse → normalize → validate → publish → match`).
SLA/SLO: 'Time-to-Availity (TtA)' ფაილის გამოჩენიდან 'normalized = READY ".
Retrai: ექსპონენციალური backoff + jitter; მცდელობის შეზღუდვები; მკაფიო სტატუსები.
პარალელიზმი და იზოლაცია: მძიმე OCR/პარსინგი XLSX - ცალკეულ აუზში/ვორკერში, CPU/RAM ლიმიტით.
DLQ-replay: პერიოდული რეპლიკა წესების/მაპინგის განახლების დროს.


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 (მანქანის მატჩის შეჩერება წყაროს მიხედვით).
  • 'Duplicate spike' P2 (შეამოწმეთ პროვაიდერი/ვებჰუკი).

Dashboard: ძაბრი 'files' rows _ rows _ norm - rows _ valid- ის rows _ matched ', DLQ რუკა მიზეზების გამო, TtA კვარტალი.


10) ავტო კორექცია და მაპინგი

Header aliases: ლექსიკონი ვერსიებით (e. g., `Amount`→`amt`, `AMOUNT`→`amt`).

Code maps: პროვაიდერის სტატუსები და თქვენი საცნობარო წიგნი ('APPROVEDCAPTUREDSETTLED`).
Sign policy: 'CR/DR', 'C/D', ფრჩხილები - ერთ „ხატულ“ მოდელში.
Amount repair: ათასობით გამყოფის წაშლა, მინუსის ნორმალიზაცია.
Timezone repair: მიმწოდებლის ადგილობრივი დრო არის UTC, DST- ის გათვალისწინებით.
💡 ნებისმიერი ავტოკორექტირება - offication და აღინიშნება 'repair _ flags' -ში.

11) კავშირი „PSP გადახდისა და ანგარიშების შერიგებასთან“

მზა normalized ფენა - შესასვლელი მატჩის ჩასატარებლად (provider _ txid/merchant _ ref/fuzzy), diff ტაქსონომიის გაანგარიშება, ავტო ჟურნალები და stettlement - bank-fuzzy. ძირითადი ველები: '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 და მიზნები (პარსინგისთვის/განაწილებისთვის)

Ingestion Success % ≥ 99. 5 %/დღე წყაროზე.
Parse Success % ≥ 99%, DLQ ≤ 1%.
TtA p95 (ფაილი - ნორმალიზებული) - 15 წუთი (CSV/XML), 60 წუთი (PDF/OCR).
Schema Drift Incidents: 0/თვე ალერტის/ფიქსის გარეშე.
Duplicate Rate по `provider_txid` ≤ 0. 05%.


16) ინციდენტების ფლეიბუკი

Schema drift: მანქანების მატჩის გაჩერება, ჩართეთ „რბილი“ პარსერი ML დეტალურ სვეტებთან, მოამზადეთ alias-patch, გაიყვანეთ DLQ-replay.
DLQ- ის ზრდა: უახლესი ფაილების გამართვა, კოდირების/ლოკალის/ნიშნის შემოწმება, დროებით შეამციროს ტოლერანტების სიმძიმე (დროშით).
SFTP შეფერხებები: გადასვლა API-polling/webhuks- ზე, retray- ის ზრდა, კომუნიკაცია პროვაიდერთან.
Spikes duplicates: ჩართეთ 'row _ hash', გამეორების ბლოკი დაზუსტებამდე.


17) ტესტის შემთხვევის პაკეტი (UAT/Snews)

1. Idempotence: იგივე დატვირთვის განმეორება - 1 'file _ id', 0 ახალი სტრიქონი.
2. Lockaly: ფაილები ', '/'. '/ხარვეზები - სწორი თანხები.
3. Partial/refund: რამდენიმე 'sequence' ერთი 'provider _ txid'.
4. XML XSD: შეუმჩნეველი CAMT 'INVALID' + DLQ.
5. MT940 ვარიაციები: ეროვნული გაფართოებები და სწორი ანალიზი.
6. PDF - OCR: სკანირება ხმაურით - ძირითადი წესების მოპოვება და გავლა.
7. Schema drift: ახალი hader-alias-patch და ისტორიული ფაილების ხელახალი დამუშავება.
8. Throughput: დატვირთვის ტესტირება N ფაილები/სთ - შესაბამისობა TtA SLA.
9. PII გამოცემა: ლოგოები PAN/ელ.ფოსტის გარეშე, მხოლოდ ჰეში.


18) განხორციელების შემოწმების სია

  • წყაროების რეესტრი: ოქმი, გრაფიკი, SLA, ფორმატი, კონტაქტი.
  • უსაფრთხო არხები (SFTP/PGP/API), საიდუმლო Vault.
  • Idempotent ingestion + checksum + ვერსია.
  • პარსერები ფორმატებში, alias ლექსიკონში, ადგილობრივ პოლიტიკაში.
  • ნორმალიზებული ფენა და გასაღების ინდექსები.
  • ვალიდაციის წესები, ტოლერანები, DLQ და რეპლეი.
  • ორკესტრი (DAG), retrai/backoff, რესურსების აუზები.
  • დაკვირვება: მეტრიკები, დაშბორდები, ალერტები.
  • GDPR/PII ნიღბები, წვდომის აუდიტი.
  • ტესტის შემთხვევები და რეგულარული schema-drift drills.

რეზიუმე

პარსინგის ავტომატიზაცია არ არის „პარსერის დაწერა“, არამედ სამრეწველო წრის შექმნა: საიმედო მიწოდება და დაშიფვრა, idempotent payplines, მკაცრი ნორმალიზაცია, ხარისხის წესები და გამჭვირვალე ალერტები. ასეთი წრე ნებისმიერ რეესტრს გადააქცევს პროგნოზირებულ ცხრილში გარანტირებულ SLA- ს მონაცემების ხელმისაწვდომობის შესახებ - შედუღების, ხაზინის და მენეჯმენტის ანგარიშგების საფუძველი.

Contact

დაგვიკავშირდით

დაგვიკავშირდით ნებისმიერი კითხვის ან მხარდაჭერისთვის.ჩვენ ყოველთვის მზად ვართ დაგეხმაროთ!

ინტეგრაციის დაწყება

Email — სავალდებულოა. Telegram ან WhatsApp — სურვილისამებრ.

თქვენი სახელი არასავალდებულო
Email არასავალდებულო
თემა არასავალდებულო
შეტყობინება არასავალდებულო
Telegram არასავალდებულო
@
თუ მიუთითებთ Telegram-ს — ვუპასუხებთ იქაც, დამატებით Email-ზე.
WhatsApp არასავალდებულო
ფორმატი: ქვეყნის კოდი და ნომერი (მაგალითად, +995XXXXXXXXX).

ღილაკზე დაჭერით თქვენ ეთანხმებით თქვენი მონაცემების დამუშავებას.