GH GambleHub

PSP to’lovlari va hisobotlarini solishtirish

TL; DR

Solishtirish - bu har kuni PSP/ekvayer/bank hisobotlari bilan ledjer va hodisalarni (auth/capture/refund/payout) avtomatlashtirilgan tikishdir. Muvaffaqiyat kaliti: ma’lumotlarning yagona modeli, determinatsiyalangan taqqoslash kalitlari, qat’iy idempotentlik ,/FX/vaqt yig’indisi bo’yicha toleranslar, bahsli keyslar va avto tuzatish pleybuklari uchun DLQ navbati. KPI: Recon Mismatch Rate↓, Aging of Unreconciled↓, Auto-match%↑.

1) Nima uchun va nimani solishtiryapmiz

Maqsadlar: tushum va komissiyalarni tasdiqlash, dubllar/yo’qotishlarni aniqlash, kunlar va valyutalar bo’yicha to’g "ri settlement, refund-to-source nazorati, audit/tartibga soluvchiga muvofiqlik.

Solishtirish obʼektlari:
  • Deposits: `auth → capture → settle`
  • Refunds: full/partial, maqomi va summasi
  • Payouts/Withdrawals: usullar bo’yicha chiqadigan to’lovlar
  • Fees & Adjustments: PSP komissiyalari, intercheynj sxemalari, tuzatishlar
  • Chargebacks/Disputes: tashabbusingizdan tashqari
  • FX/Konvertatsiyalar: kurslar, spredlar, qayd etish momenti

2) Ma’lumotlar manbalari

Internal Events (sizniki): Voqealar shinasi/Kafka,’payments _ flat’,’refunds’,’payouts’, sizning Ledger.

PSP Reports (SFTP/API/webhook dump):
  • Transactions (operatsion ko’chirmalar)
  • Settlements/Batches (T + N ajratmalari)
  • Fees/Statements (komissiya, tuzatishlar)
  • Chargebacks/Disputes
  • Payouts/OCT/RTP/SEPA reyestrlari
  • Bank Statements: MT940/CSV/ISO20022 CAMT, o’tkazmalarni tortish.
💡 Ombor: landing → raw → normalized → matched. Barcha kiruvchi fayllar - nazorat summalari va versiyalash bilan.

3) Taqqoslash kalitlari (matching keys)

Kalitlarning ustuvor daraxti (aniqlik kamayishi boʻyicha):

1. provider_txid provider_txid (noyob PSP ID)

2. idempotency_key/ merchant_reference (agar PSPda barqaror boʻlsa)

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

4. Fuzzy-qatlam: yigʻindisi/vaqti boʻyicha ± toleranslar, BIN/issuer country, status family

Tavsiyalar:
  • Ikkalasini ham saqlang:’payment _ id’va’provider _ txid’.
  • partial/refund uchun’sequence _ index’yoki’refund _ line _ id’qoʻshing.
  • Для payouts — `payout_batch_id + line_id`.
  • FX uchun -’exec _ id’(konvertatsiya) va kurs manbai.

4) Ma’lumotlar modeli (normallashtirilgan qatlam)

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) Solishtirish jarayoni (ETL/orkestrlash)

1. Ingest: PSP (SFTP/API) hisobotlarini olib, sxema/imzolarni tasdiqlaymiz,’raw’da saqlaymiz.
2. Normalize: yagona formatdagi maydon mappimi (currency ISO, decimals, UTC taymzon).
3. Match: yogʻoch kalitlarini tolerans bilan taqqoslash algoritmi.
4. Post-match: diff (tafovutlar) va journal entries ni tuzatish/tuzatish uchun shakllantiramiz.
5. Settle:’PSP _ SETTLEMENT BANK’ni tikamiz (hisobvaraqqa o’tkazamiz), kunlar/kunlar bo’yicha tarqatamiz.
6. Report: dashbord, alertlar; DLQda bahs-munozaralar qo’lda tahlil qilish/avto qayta o’ynash uchun.

Idempotentlik: har bir fayl/sahifa uchun -’ingest _ id’. Qayta yuklash natijani oʻzgartirmaydi.

6) Tolerans (tolerances) va qoidalar

Vaqt: tranzaksiyalar uchun’± 15 daqiqa’, settlement uchun’± 1 kun’.
Summa:’0 ≤. 01’bazaviy valyuta yoki’≤ 10 bps’uchun FX/fee-farqlar.
FX: agar kurs manbai boshqacha bo’lsa, bank bilan tafovutga yo’l qo’yamiz; ’fx _ src’ ni aniqlaymiz.
Partial/Multiple: partial/refund liniyalari bo’yicha summa ichki qoldiqga teng bo’lishi kerak.

7) Tafovutlarni qayta ishlash (diff taxonomy)

Diff turiTavsifiAmal qilish
MISSING_INTERNALPSP’da mavjud, bizda mavjud emasOrphan case yaratish, webhooks/retrajlarni tekshirish
MISSING_PSPPSP mavjud emasMaqom/takrorlashni tekshirish, PSP aloqasi
AMOUNT_MISMATCHSummalar farqlanadi> toleransAvtokorreksiya/jurnal, zarurat bo’lganda eskalatsiya
FEE_MISMATCHKomissiyalar har xilPSPni «haqiqat» (policy) deb qabul qilish yoki credit note
STATUS_DRIFTCAPTURE bizda, AUTH PSPdaVebxuklarni tekshirish capture/settlement
DUPLICATEDubli satrlarDedup’provider _ txid/idempotency _ key ’
FX_DRIFTKurslar turlichaRasmiy manbani belgilash, P&L ni tuzatish
REFUND_OVERRefund > capturedTezkor blok, qo’lda tahlil, teskari tuzatish jurnali

8) Ledger & Accounting (simlar)

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

Fee: `DR Fees / CR Cash or Payable`

Refund: partial proporsional teskari simlar

Chargeback: alohida hisobvaraqlar va nizolar uchun zaxira

FX reval: «fx _ src _ policy» kursi bo’yicha har kuni AR/kesh qoldig’ini qayta baholash

9) KPI va maqsadlar

Auto-match% = avtomatik ravishda taqqoslangan satrlar/barcha satrlar (maqsad ≥ 95%)

Recon Mismatch Rate = diff-satrlar/barcha satrlar (1-2% ≤)

Aging of Unreconciled: p50/p95 DLQ da bo’lish kuni (p95 ≤ 3 kun)

Settlement Timeliness: bank bilan tikilgan batchalar ulushi D-kun (99% ≥)

Fee Accuracy: provayderlar boʻyicha komissiya tafovutlari (≤ 0. 1% aylanma)

Duplicate/Orphan Incidents: 0 ga intiladi

10) SQL-kesmalar

10. 1 provider_txid bo’yicha bazaviy taqqoslash

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) Relslar/keyslar bo’yicha xususiyatlar

Xaritalar:’auth’va’capture’orasidagi farqlar, kech’settlement’tuzatishlar, intercheynj/sxema fee - alohida chiziqlar.
A2A/Open Banking/RTP: bir zumda tasdiqlash, lekin «reversal» bo’lishi mumkin; ’payout’ va qaytarishlarni tekshiring.
Hamyonlar: ko’pincha ideal’provider _ txid’, tez’refund’; fee-liniyalarni kuzatib boring.
Vaucherlar: simmetrik refund yo’q - siyosat va hisobotlarda to’g’ri aks ettiring.
Kripto: on-cheyn hash provider_txid; N konfirmalar; tarmoq komissiyalari va mumkin bo’lgan rebeytlar hisobi; kurs - konvertatsiya qilish vaqtida.

12) Operatsion pleybuklar

MISSING_INTERNAL koʻtarilishi: vebxuklarni/retraylarni yoʻqotishni tekshirish, ingestionni ortda qoldirish, API pollingi yoqish.
AMOUNT_MISMATCH bitta PSPdan: yaxlitlash/QQS/fee-modelni solishtirish, tuzatuvchi statement so’rash.
Settlement bank bilan tikilmaydi: value date, bank komissiyasini tekshirish, kechikishlar T + N; vaqtincha «Suspense Account» ga qo’yish.
Ommaviy REFUND_OVER: avto-refandlarni darhol to’xtatish, idempotentlik auditi, qo’lda tuzatish.
FX_DRIFT: kursning policy manbaini (ECB/PSP/BANK) qayd etish, P&L farqini qayta hisoblash.

13) Nazorat va xavfsizlik

ingestion idempotentligi:’file _ id + checksum’va yuklash jurnali.
Kirish (RBAC) va 4 ko’zli nazorat: qo’lda tuzatish/jurnal o’tkazmalariga.
Audit-trail: barcha o’yinlar/diflar/tuzatishlar - o’zgarmas jurnalda.
Ma’lumotlar sifati: sxemalar, majburiy maydonlar, valyuta/skayl validatsiyasi.

14) Dashbord va alertlar

Vidjetlar: Auto-match%, Mismatch Rate, Aging DLQ, Settlement Timeliness, Fee Accuracy, Diff-tiplar xaritasi.

Alertlar:
  • ’Auto-match% <90%’ provayder/kun → P1
  • ’Aging p95> 3 kun’ → P2
  • `AMOUNT_MISMATCH spike` → P1
  • «Bank ≠ Settlement» summasi/valyutasi bo’yicha → P0

15) Test-keyslar (UAT/Prod)

1. Shu faylni qayta yuklash → 0 nojo’ya ta’sirlar (idempotentlik).
2. Qisman refandlar (3 satr) → summa mos keladi, sequence match.
3. FX konvertatsiyasi: kursning tolerans doirasidagi tafovuti → to’g "ri match.
4. Dublikatlar hisobotda provider_txid → dedup va alert.
5. Yoʻqolgan webhook capture → polling gapni yopdi, maqomi tenglashtirildi.
6. Settlement batch bilan fee-liniya → Revenue/Fee/Net’da to’g’ri bo’lingan.

16) Tez-tez xatolar va qanday qilib qochish mumkin

Qiyoslash bazalarini aralashtirish (compare’attempt’vs’capture’) → bir xil granulyarlikni saqlang.
’provider _ txid’ log’da yo’qligi o’yinning aniqligini yo’qotadi.
Signor taymzon → settlement sanalari boʻyicha siljishlar.
Hech qanday DLQ/retraj yo’q → «abadiy» tafovutlar.
Jurnalsiz qoʻlda tuzatishlar → audit bilan mos kelmaslik.
Noaniq toleranslar → yoki pere-match yoki «hammasi DLQda».

17) Joriy etishning nazorat chek-varaqasi

  • Yagona normallashtirish sxemasi va PSP/usullar/akkauntlar ma’lumotnomalari
  • Taqqoslash kalitlari daraxti (txid → merchant_ref → fuzzy)
  • Summa/vaqt/FX bo’yicha tolerans, kurs manbai siyosati
  • Idempotent ingestion, DLQ, retray, alertlar
  • Settlement Bank, Suspense Account siyosatini solishtirish
  • Dashbord KPI, moliya/audit uchun hisobot
  • Pleybuklar va diff-keyslarni tahlil qilish SLA

Xulosa

Solishtirish - bu muhandislik fanidir: normallashtirish, ishonchli kalitlar, toleranslar, avtomatik o’yinlar va shaffof tuzatishlar. Bunday kontur bilan siz tushum va komissiyalarni barqarorlashtirasiz, «qora teshiklarni» minimallashtirasiz, davrni yopishni tezlashtirasiz va og’riqsiz auditdan o’tasiz: Auto-match ↑, Mismatch ↓, Aging ↓.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Telegram
@Gamble_GC
Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.