GH GambleHub

PSP töleglerini we hasabatlaryny deňeşdirmek

TL; DR

Deňeşdirme, PSP/satyn alyjylaryň/banklaryň hasabatlary bilen ledjeriňizi we wakalaryňyzy (auth/capture/refund/payout) her gün awtomatlaşdyrylan tikmekdir. Üstünligiň açary: maglumatlaryň ýeke-täk modeli, determinirlenen deňeşdirme açarlary, berk idempotentlik ,/FX/wagtyň jemleri boýunça çydamlylyk, jedelli ýagdaýlar üçin DLQ nobaty we awto düzedişleriň pleýbuklary. KPI: Recon Mismatch Rate↓, Aging of Unreconciled↓, Auto-match%↑.

1) Näme üçin we näme üçin barlaýarys

Maksatlar: girdejiniň we komissiýalaryň tassyklanylmagy, goşa/ýitginiň tapylmagy, günler we walýutalar boýunça dogry settlement, refund-to-source gözegçiligi, auditiň/düzgünleşdirijiniň berjaý edilmegi.

Deňeşdirme obýektleri:
  • Deposits: `auth → capture → settle`
  • Refunds: full/partial, statuslar we mukdar
  • Payouts/Withdrawals: usullar boýunça gidýän tölegler
  • Fees & Adjustments: PSP komissiýalary, alyş-çalyş shemalary, düzedişler
  • Chargebacks/Disputes: inisiatiwaňyzyň daşynda
  • FX/Öwrülişikler: kurslar, spreadler, düzedilen pursat

2) Maglumat çeşmeleri

Internal Events (siziňki): Waka tekeri/Kafka, 'payments _ flat', 'refunds', 'payouts', siziň Ledger.

PSP Reports (SFTP/API/webhook dump):
  • Transactions (operasiýa göçürmeleri)
  • Settlements/Batches (töleg bölekleri T + N)
  • Fees/Statements (komissiýalar, düzedişler)
  • Chargebacks/Disputes
  • Payouts/OCT/RTP/SEPA sanawlary
  • Bank Statements: MT940/CSV/ISO20022 CAMT, tölegleri çekmek.
💡 Ammar: landing → raw → normalized → matched. Ähli gelýän faýllar - gözegçilik mukdary we wersiýasy bilen.

3) Deňeşdirme açarlary (matching keys)

Esasy açar agajy (takyklygy azalmak boýunça):

1. provider_txid provider_txid (PSP özboluşly ID)

2. idempotency_key/ merchant_reference (PSP-de durnukly bolsa)

3. (amount, currency, timestamp_bucket, last4/bin, auth_code)

4. Fuzzy gatlak: ±/wagt toleranslary, BIN/issuer country, status family

Teklipler:
  • Ikisini hem saklaň: 'payment _ id' we 'provider _ txid'.
  • partial/refund üçin - 'sequence _ index' ýa-da 'refund _ line _ id' goşuň.
  • Для payouts — `payout_batch_id + line_id`.
  • FX üçin - 'exec _ id' (konwersiýa) we kurs çeşmesi.

4) Maglumatlaryň modeli (kadaly gatlak)

json
{
"source": "INTERNAL    PSP_TX    PSP_SETTLEMENT    BANK",
"provider": "Acquirer_A",
"payment_id": "pay_123",
"provider_txid": "psp_tx_789",
"kind": "AUTH    CAPTURE    REFUND    PAYOUT    FEE    SETTLEMENT    CHARGEBACK",
"sequence": 0,
"amount": 100. 00,
"currency": "EUR",
"fee_amount": 1. 20,
"fx_rate": 1. 0000,
"fx_src": "PSP    ECB    BANK",
"status": "APPROVED    CAPTURED    SUCCESS    FAILED    SETTLED",
"event_ts": "2025-11-03T12:00:00Z",
"settlement_date": "2025-11-05",
"account": "PSP_MERCHANT_CARD_A",
"matching_keys": {
"provider_txid": "psp_tx_789",
"merchant_ref": "mr_456",
"idem_key": "idem_abc"
},
"hash_row": "sha256(...)"
}

5) Deňeşdirme prosesi (ETL/orkestr)

1. Ingest: PSP (SFTP/API) hasabatlaryny alýarys, shema/gollary tassyklaýarys, 'raw' -da saklaýarys.
2. Normalize: bitewi formatdaky meýdan mappimi (currency ISO, decimals, timzona UTC).
3. Match: agaç açarlaryny çydamlylyk bilen deňeşdirmek algoritmi.
4. Post-match: ledger/düzedişler üçin diff (tapawutlar) we journal entries emele getirýäris.
5. Settle: tikýäris 'PSP _ SETTLEMENT BANK' (hasapa geçirimler), günlere/batlara dargatýarys.
6. Hasabat: daşbord, alertler; DLQ-de el bilen seljermek/awto oýnamak üçin jedelli.

Idempotentlik: her faýl/sahypa üçin - 'ingest _ id'. Gaýtadan ýüklemek netijäni üýtgetmeýär.

6) Çydamlylyk (çydamlylyk) we düzgünler

Wagt: amallar üçin '± 15 min', settlement üçin '± 1 gün'.
Jemi: '≤ 0. 01 'esasy walýuta ýa-da' ≤ 10 bps 'FX/fee-tapawutlar üçin.
FX: walýuta hümmetiniň çeşmesi başga bolsa, bank bilen gapma-garşylyga ýol berýäris; 'fx _ src' düzedýäris.
Partial/Multiple: partial/refund çyzyklary boýunça jemi içerki galyndy bilen deň bolmaly.

7) Tapawutlary gaýtadan işlemek (diff taxonomy)

Diff görnüşiDüşündirişHereket
MISSING_INTERNALPSP-de bar, bizde ýokOrphan case dörediň, webhooks/retraini barlaň
MISSING_PSPBizde bar, PSP ýokStatusyny/gaýtalanmagyny, PSP aragatnaşygyny barlaň
AMOUNT_MISMATCHPullar tapawutlanýar> toleransAwtoulag düzedişi/magazineurnaly, zerur bolanda eskalasiýa
FEE_MISMATCHKomissiýalar tapawutlanýarPSP-ni "hakykat" (policy) hökmünde kabul et ýa-da credit note talap et
STATUS_DRIFTCAPTURE bizde, AUTH PSPWebhoki capture/settlement
DUPLICATESatrlar'provider _ txid/idempotency _ key'
FX_DRIFTKurslar tapawutlanýarResmi çeşmäni bul, P&L düzet
REFUND_OVERRefund > capturedGyssagly blok, el bilen seljerme, tersine düzediş magazineurnaly

8) Ledger & Accounting

Capture: `DR Accounts Receivable / CR Revenue` и `DR Cash (upon settle) / CR Accounts Receivable`

Fee: `DR Fees / CR Cash or Payable`

Refund: ters simler partial proporsional

Çargeback: jedeller üçin aýratyn hasaplar we ätiýaçlyk

FX reval: "fx _ src _ policy" hümmeti boýunça AR/keş balansynyň gündelik gaýtadan bahalandyrylmagy

9) KPI we maksatlar

Auto-match% = awtomatiki deňeşdirilen setirler/ähli setirler (maksat ≥ 95%)

Recon Mismatch Rate = diff-setirler/ähli setirler (≤ 1-2%)

Aging of Unreconciled: p50/p95 gün DLQ (p95 ≤ 3 gün)

Settlement Timeliness: Bank D-gün bilen tikilen batçalaryň paýy (99% ≥)

Fee Accuracy: üpjün edijiler boýunça komissiýalaryň tapawudy (≤ 0. 1% dolanyşyk)

Duplicate/Orphan Incidents: 0-a çalyşýar

10) SQL bölekleri

10. 1 Esasy deňeşdirme provider_txid

sql
WITH i AS (
SELECT provider, provider_txid, kind, amount, currency, event_ts
FROM internal_norm
),
p AS (
SELECT provider, provider_txid, kind, amount, currency, event_ts
FROM psp_norm
)
SELECT
COALESCE(i. provider_txid, p. provider_txid) AS txid,
COALESCE(i. provider, p. provider) AS provider,
i.kind AS kind_internal, p. kind AS kind_psp,
i.amount AS amount_internal, p. amount AS amount_psp,
i.currency, p. currency,
CASE
WHEN i.provider_txid IS NULL THEN 'MISSING_INTERNAL'
WHEN p. provider_txid IS NULL THEN 'MISSING_PSP'
WHEN ABS(i. amount - p. amount) > 0. 01 THEN 'AMOUNT_MISMATCH'
ELSE 'MATCHED'
END AS recon_status
FROM i
FULL OUTER JOIN p USING (provider, provider_txid);

10. 2 Settlement ↔ Bank

sql
SELECT s. settlement_date, s. batch_id, s. currency,
s. amount_settled, b. amount_bank,
(b. amount_bank - s. amount_settled) AS diff
FROM psp_settlements s
LEFT JOIN bank_statements b
ON b. value_date = s. settlement_date
AND b. currency = s. currency
AND ABS(b. amount_bank - s. amount_settled) <= 0. 5;

10. 3 Aging DLQ

sql
SELECT diff_type,
COUNT() AS cnt,
PERCENTILE_CONT(0. 5) WITHIN GROUP (ORDER BY AGE(NOW(), created_at)) AS p50_age,
PERCENTILE_CONT(0. 95) WITHIN GROUP (ORDER BY AGE(NOW(), created_at)) AS p95_age
FROM recon_dlq
GROUP BY diff_type
ORDER BY cnt DESC;

11) Relsler/keýslar boýunça aýratynlyklar

Kartlar: 'auth' we 'capture' arasyndaky tapawutlar, giç 'settlement' düzedişler, interchainj/shema fee - aýry-aýry setirler.
A2A/Open Banking/RTP: derrew tassyklamalar, ýöne 'reversal' mümkin; 'payout' we yzyna gaýtaryşlary barlaň.
Gapjyklar: köplenç ajaýyp 'provider _ txid', çalt 'refund'; fee-liniýalary yzarlaň.
Talonlar: simmetrik refund ýok - syýasatda we hasabatlarda dogry görkeziň.
Kripto: on-chain hash provider_txid; N konfirmalar; toruň komissiýalarynyň we bolup biljek rebeitleriň hasaby; walýuta hümmeti - öwrülişik pursatynda.

12) Iş pleýbuklary

MISSING_INTERNAL köpelmegi: webhuklaryň/retraýlaryň ýitgisini barlamak, ingestiony ýeňmek, API pollingi açmak.
Bir PSP-den AMOUNT_MISMATCH: tegelekleri/goşulan baha üçin salgydy/fee-modeli deňeşdiriň, düzediji statement soraň.
Settlement bank bilen tikilmeýär: value date, bank komissiýalaryny, gijikdirmeleri barlamak T + N; "Suspense Account" -a wagtlaýyn goýmak.
Köpçülikleýin REFUND_OVER: awto-refandlary derrew duruzmak, idempotentligiň barlagy, el bilen düzediş.
FX_DRIFT: hümmet çeşmesiniň syýasatyny düzetmek (ECB/PSP/BANK), P&L tapawudyny sanamak.

13) Gözegçilik we howpsuzlyk

Ingestion idempotentligi: 'file _ id + checksum' we göçürip alýanlar.
Elýeterlilik (RBAC) we 4 gözli gözegçilik: el düzedişleri/gazet geçirişleri üçin.
Audit-trail: ähli oýunlar/difler/düzedişler - üýtgemeýän žurnalda.
Maglumatlaryň hili: shemalar, hökmany meýdanlar, walýuta/skailiň walidasiýasy.

14) Daşbord we alertler

Widjetler: Auto-match%, Mismatch Rate, Aging DLQ, Settlement Timeliness, Fee Accuracy, Diff top-PSP, Diff-görnüşli kartoçka.

Alertler:
  • 'Auto-match% <90%' provayder/gün → P1
  • 'Aging p95> 3 gün' → P2
  • `AMOUNT_MISMATCH spike` → P1
  • "Bank ≠ Settlement" jemi/walýuta boýunça → P0

15) Synag haltalary (UAT/Prod)

1. Şol bir faýly täzeden ýüklemek → 0 zyýanly täsirleri (idempotentlik).
2. Bölekleýin refandlar (3 setir) → jemi gabat gelýär, sequence boýunça oýun.
3. FX-öwrülişik: toleransyň çägindäki hümmetiň tapawudy → dogry match.
4. Dublikatlar hasabatda provider_txid.
5. Ýitirilen webhook capture → polling gapy ýapdy, status deňleşdirildi.
6. Settlement batch with fee-line → Revenue/Fee/Net-de dogry bölüniş.

16) Ýygy-ýygydan ýalňyşlyklar we nädip öňüni almaly

Deňeşdirme bazalarynyň garyşmagy (compare 'attempt' vs 'capture') → birmeňzeş granulýasiýany saklaň.
'provider _ txid' -iň ýoklugy → oýnuň takyklygyny ýitirýär.
settlement seneleri boýunça Ignor taymzon → süýşmeler.
DLQ/retrailer ýok → "baky" gapma-garşylyklar.
Magazineurnalsyz el bilen düzedişler → audit bilen gabat gelmezlik.
Düşnüksiz tolerantlar → ýa-da "hemme zat DLQ-de".

17) Girizmegiň gözegçilik çek-sanawy

  • Ýeke-täk kadalaşma shemasy we PSP/usullar/hasaplar üçin gollanmalar
  • Key agajy (txid → merchant_ref → fuzzy)
  • Jemi/wagt çydamlary/FX, kurs çeşmesi syýasaty
  • Idempotent ingestion, DLQ, retrailer, aladalar
  • Settlement Bank, Suspense Account syýasatyny deňeşdirmek
  • KPI dashbord, maliýe/audit üçin hasabat
  • Pleibook we SLA diff-cases derňewi

Gysgaça maglumat

Deňeşdirme in engineeringenerçilik düzgünidir: kadalaşma, ygtybarly açarlar, çydamlylyk, awtomatiki oýunlar we aç-açan düzedişler. Şeýle kontur bilen siz girdejiňizi we komissiýalaryňyzy durnuklaşdyrarsyňyz, "gara deşikleri" azaldarsyňyz, döwrüň ýapylmagyny çaltlaşdyrarsyňyz we agyrysyz auditden geçersiňiz: Auto-match% ↑, Mismatch ↓, Aging ↓.

Contact

Biziň bilen habarlaşyň

Islendik sorag ýa-da goldaw boýunça bize ýazyp bilersiňiz.Biz hemişe kömek etmäge taýýar.

Telegram
@Gamble_GC
Integrasiýany başlamak

Email — hökmany. Telegram ýa-da WhatsApp — islege görä.

Adyňyz obýýektiw däl / islege görä
Email obýýektiw däl / islege görä
Tema obýýektiw däl / islege görä
Habar obýýektiw däl / islege görä
Telegram obýýektiw däl / islege görä
@
Eger Telegram görkezen bolsaňyz — Email-den daşary şol ýerden hem jogap bereris.
WhatsApp obýýektiw däl / islege görä
Format: ýurduň kody we belgi (meselem, +993XXXXXXXX).

Düwmäni basmak bilen siz maglumatlaryňyzyň işlenmegine razylyk berýärsiňiz.