GH GambleHub

PSP төлемдері мен есептерін салыстыру

TL; DR

Салыстыру - бұл сіздің леджеріңіз бен оқиғаларыңызды (auth/capture/refund/payout) PSP/эквайерлер/банктердің есептерімен күнделікті автоматтандырылған тігу. Табысқа жетудің кілті: бірыңғай деректер моделі, детерминирленген салыстыру кілттері, қатаң идемпотенттілік, сома/FX/уақыт бойынша толеранстар, даулы кейстерге арналған DLQ кезегі және автокоррекция плейбуктері. KPI: Recon Mismatch Rate↓, Aging of Unreconciled↓, Auto-match%↑.

1) Неге және не салыстырып тексереміз

Мақсаттары: түсімдер мен комиссияларды растау, дубльдерді/жоғалтуды анықтау, күндер мен валюталар бойынша түзетілген settlement, refund-to-source бақылау, аудитке/реттеушіге сәйкестігі.

Салыстыру нысандары:
  • Deposits: `auth → capture → settle`
  • Refunds: full/partial, мәртебелері мен сомалары
  • Payouts/Withdrawals: әдістер бойынша шығыс төлемдері
  • Fees & Adjustments: PSP комиссиялары, интерчейндж схемалары, түзету
  • Chargebacks/Disputes: сіздің бастамаңыздан тыс
  • FX/Айырбастау: бағамдар, спредтер, белгілеу сәті

2) Деректер көздері

Internal Events (сіздің): оқиға шинасы/Kafka, 'payments _ flat', 'refunds', 'payouts', сіздің Ledger.

PSP Reports (SFTP/API/webhook dump):
  • Transactions (операциялық үзінділер)
  • Settlements/Batches (есептеулерді бөлу T + N)
  • Fees/Statements (комиссиялар, түзетулер)
  • Chargebacks/Disputes
  • Payouts/OCT/RTP/SEPA тізілімдері
  • Bank Statements: MT940/CSV/ISO20022 CAMT, аударымдарды тарту.
💡 Сақтау орны: landing → raw → normalized → matched. Барлық кіріс файлдары - бақылау сомалары мен нұсқалары бар.

3) Салыстыру кілттері (matching keys)

Кілттердің басым ағашы (дәлдіктің азаюы бойынша):

1. provider_txid provider_txid (PSP бірегей ID)

2. idempotency_key/ merchant_reference (егер PSP тұрақты болса)

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

4. Fuzzy-қабат: сома/уақыт бойынша ± толеранстар, BIN/issuer country, status family

Ұсынымдар:
  • Екеуін де сақтаңыз: 'payment _ id' және 'provider _ txid'.
  • partial/refund үшін - 'sequence _ index' немесе 'refund _ line _ id' қосыңыз.
  • Для payouts — `payout_batch_id + line_id`.
  • FX үшін - 'exec _ id' (айырбастау) және курс көзі.

4) Деректер моделі (қалыпқа келтірілген қабат)

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) Салыстыру процесі (ETL/оркестрлеу)

1. Ingest: PSP (SFTP/API) есептерін аламыз, схеманы/қолтаңбаны растаймыз, 'raw' -те сақтаймыз.
2. Normalize: өріс маппимі біріздендірілген пішімде (currency ISO, decimals, UTC таймзоны).
3. Match: ағаш кілттерін толеранстармен салыстыру алгоритмі.
4. Post-match: леджер/түзетулер үшін diff (айырмашылықтар) және journal entries қалыптастырамыз.
5. Settle: тігеміз 'PSP _ SETTLEMENT BANK' (шотқа аударымдар), күндер/күндер бойынша таратамыз.
6. Report: дашборд, алерта; DLQ-да қолмен талдауға/автоойнатуға даулы.

Сәйкестік: әрбір файл/бет үшін - 'ingest _ id'. Қайта қотару нәтижені өзгертпейді.

6) Толеранстар (tolerances) және ережелер

Уақыт: '± 15 мин' транзакциялар үшін, '± 1 күн' settlement үшін.
Сомасы: '≤ 0. 01 'базалық валюта немесе FX/fee-айырмашылықтар үшін' 10 bps '≤.
FX: егер бағам көзі әртүрлі болса, банкпен алшақтыққа жол береміз; 'fx _ src' тіркейміз.
Partial/Multiple: partial/refund желілері бойынша сома ішкі қалдыққа тең болуы тиіс.

7) Айырмашылықтарды өңдеу (diff taxonomy)

diff түріСипаттамасыӘрекет
MISSING_INTERNALPSP-де бар, бізде жоқOrphan case жасау, webhooks/ретрайлерді тексеру
MISSING_PSPБізде бар, PSP жоқКүйін/қайталауын, PSP контактісін тексеру
AMOUNT_MISMATCHСомасы ерекшеленеді> толерансҚажет болған жағдайда автоматты түзету/журнал, эскалация
FEE_MISMATCHКомиссиялар ерекшеленедіPSP-ні «ақиқат» (policy) ретінде қабылдау немесе credit note талап ету
STATUS_DRIFTCAPTURE бізде, AUTH PSPcapture/settlement вебхоктарын тексеру
DUPLICATEЕкі жол'provider _ txid/idempotency _ key' дедупы
FX_DRIFTКурстар әр түрліРесми дереккөзді орнату, P&L түзету
REFUND_OVERRefund > capturedЖедел блок, қолмен талдау, кері түзету журналы

8) Ledger & Accounting (өткізгіштер)

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

Fee: `DR Fees / CR Cash or Payable`

Refund: кері сымдар partial пропорционалды

Chargeback: жеке шоттар және дауларға арналған резерв

FX reval: 'fx _ src _ policy' бағамы бойынша AR/кэш қалдығын күнделікті қайта бағалау

9) KPI және мақсаттар

Auto-match% = автоматты түрде салыстырылған жолдар/барлық жолдар (мақсат ≥ 95%)

Recon Mismatch Rate = diff-жолдар/барлық жолдар (1-2% ≤)

Aging of Unreconciled: p50/p95 DLQ-да болған күні (p95 ≤ 3 күн)

Settlement Timeliness: банкпен тігілген батчалардың үлесі D-күні (99% ≥)

Fee Accuracy: провайдерлер бойынша комиссия айырмашылықтары (≤ 0. 1% айналым)

Duplicate/Orphan Incidents: 0-ге ұмтылады

10) SQL кесінділері

10. 1 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) Рельстер/кейстер бойынша ерекшеліктер

Карталар: 'auth' және 'capture' арасындағы айырмашылықтар, кейіннен 'settlement' түзетулері, интерчейндж/схемалық fee - жеке сызықтар.
A2A/Open Banking/RTP: бірден растау, бірақ 'reversal' болуы мүмкін; 'payout' және қайтаруларды салыстырыңыз.
Әмияндар: көбінесе мінсіз 'provider _ txid', жылдам 'refund'; fee-сызықтарды қадағалаңыз.
Ваучерлер: симметриялық refund жоқ - саясат пен есептерде дұрыс көрсетіңіз.
Крипто: он-чейн hash provider_txid; N конфирмалары; желі комиссияларын және ықтимал ребейттерді есепке алу; бағам - айырбастау сәтінде.

12) Операциялық плейбуктер

MISSING_INTERNAL өрісі: вебхуктардың/ретрайлардың жоғалуын тексеру, ingestion-ды қайталау, API поллингін қосу.
Бір PSP AMOUNT_MISMATCH: дөңгелектеуді/ҚҚС/fee-моделін салыстыру, түзетуші statement сұрату.
Settlement банкпен тігілмейді: value date, банк комиссиясы, кідірістер T + N; уақытша «Suspense Account» қойылсын.
Жаппай REFUND_OVER: авто-рефандтарды дереу тоқтату, демпотенттілік аудиті, қолмен түзету.
FX_DRIFT: бағам көзінің policy (ECB/PSP/BANK) белгілеу, P&L айырмашылығын қайта есептеу.

13) Бақылау және қауіпсіздік

ingestion сәйкестігі: 'file _ id + checksum' және жүктеу журналы.
Қолжетімділік (RBAC) және 4-көзбен бақылау: қолмен түзету/журнал өткізгіштеріне.
Аудит-трейл: барлық матчтар/дифтар/түзетулер - өзгермейтін журналда.
Деректер сапасы: схемалар, міндетті өрістер, валюта/скейл валидациясы.

14) Дашборд және алерталар

Виджеттер: Auto-match%, Mismatch Rate, Aging DLQ, Settlement Timeliness, Fee Accuracy, дифам бойынша топ-PSP, diff-типті карта.

Алерталар:
  • 'Auto-match% <90%' провайдері/күні → P1
  • 'Aging p95> 3 күн' → P2
  • `AMOUNT_MISMATCH spike` → P1
  • 'Bank ≠ Settlement' сомасы/валютасы бойынша → P0

15) Тест-кейстер (UAT/Prod)

1. Бір файлды қайта жүктеу → 0 жанама әсері (теңсіздік).
2. Жартылай рефандар (3 сызық) → сома сәйкес келеді, sequence бойынша матч.
3. FX-айырбастау: толеранс шегінде бағам айырмашылығы → дұрыс match.
4. Дубликаттар → дедуп және алерт есебінде provider_txid.
5. Жоғалған webhook capture → поллинг жабылды gap, мәртебесі теңестірілді.
6. fee сызығы бар Settlement батч → Revenue/Fee/Net дұрыс бөлу.

16) Жиі қателер және қалай болдырмау керек

Салыстыру базаларын араластыру (compare 'attempt' vs 'capture') → бірдей гранулярды сақтаңыз.
→ логында 'provider _ txid' болмауы матчтың дәлдігін жоғалтады.
settlement күні бойынша ығысу → Ignor таймзоны.
DLQ/ретрайлер жоқ → «мәңгілік» айырмашылықтар.
Журналсыз қолмен түзету → аудитпен үйлеспеушілік.
Анық емес толеранстар → не пере-матч, не «барлығы DLQ».

17) Енгізудің бақылау чек-парағы

  • Бірыңғай қалыпқа келтіру схемасы және PSP/әдістер/аккаунттар анықтамалықтары
  • Кiлттер ағашы (txid → merchant_ref → fuzzy)
  • Сома/уақыт бойынша толеранттар/FX, бағам көзінің саясаты
  • Іспеттес ingestion, DLQ, ретра, алерталар
  • Settlement Bank, Suspense Account саясатын салыстыру
  • Дашборд KPI, қаржы/аудит үшін есептілік
  • Playbook және SLA diff-кейстерді талдау

Түйіндеме

Салыстыру - бұл инженерлік тәртіп: қалыпқа келтіру, сенімді кілттер, толеранстар, автоматты матчтар және ашық түзетулер. Осындай контурмен сіз түсім мен комиссияны тұрақтандырасыз, «қара тесіктерді» азайтасыз, кезеңнің жабылуын жылдамдатасыз және ауыртпалықсыз аудиттен өтесіз: Auto-match% ↑, Mismatch ↓, Aging ↓.

Contact

Бізбен байланысыңыз

Кез келген сұрақ немесе қолдау қажет болса, бізге жазыңыз.Біз әрдайым көмектесуге дайынбыз!

Telegram
@Gamble_GC
Интеграцияны бастау

Email — міндетті. Telegram немесе WhatsApp — қосымша.

Сіздің атыңыз міндетті емес
Email міндетті емес
Тақырып міндетті емес
Хабарлама міндетті емес
Telegram міндетті емес
@
Егер Telegram-ды көрсетсеңіз — Email-ге қоса, сол жерге де жауап береміз.
WhatsApp міндетті емес
Пішім: +ел коды және номер (мысалы, +7XXXXXXXXXX).

Батырманы басу арқылы деректерді өңдеуге келісім бересіз.