GH GambleHub

PSP төлөмдөрүн жана отчетторун салыштыруу

TL; DR

Салыштыруу - бул PSP/эквайерлердин/банктардын отчеттору менен сиздин менеджериңизди жана окуяларды (auth/capture/refund/payout) күнүмдүк автоматташтырылган тигүү. Ийгиликтин ачкычы: маалыматтардын бирдиктүү модели, детерминацияланган салыштыруу ачкычтары, катуу демпотенттүүлүк, суммалар/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/Convertions: курстар, спреддер, белгиленген учур

2) Маалымат булактары

Internal Events (сиздин): шина окуялар/Kafka, 'payments _ flat', 'refunds', 'payouts', сиздин Ledger.

PSP Reports (SFTP/API/webhook dump):
  • Transactions
  • Settlements/Batches (Т + 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: бирдиктүү түрдө mappim талаа (currency ISO, decimals, UTC убакыт зонасы).
3. Match: жыгач ачкычтарын толеранттуулук менен салыштыруу алгоритми.
4. Post-match: diff түзүү (айырмачылыктар) жана journal entries үчүн башкаруучу/оңдоо.
5. Settle: "PSP _ SETTLEMENT BANK" (эсепке чегерүүлөр) тигебиз, күндөргө/батчаларга чачабыз.
6. Report: дашборд, алерталар; DLQда кол менен талдоо/авто ойноо боюнча талаш-тартыштар бар.

Демпотенттик: ар бир файл/баракка - 'ingest _ id'. Кайра жүктөө натыйжаны өзгөртпөйт.

6) Толеранттуулук (толеранттуулук) жана эрежелер

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

7) айырмачылыктарды дарылоо (diff taxonomy)

diff түрүСүрөттөөИш-аракет
MISSING_INTERNALPSP бар, биз жокOrphan case түзүү, webhooks/retray текшерүү
MISSING_PSPБиз бар, PSP жокСтатус/кайталоону текшерүү, PSP байланыш
AMOUNT_MISMATCHСуммалар айырмаланат> толерансАвтокоррекция/журнал, зарыл болгон учурда эскалация
FEE_MISMATCHКомиссиялар айырмаланатPSP кабыл алуу "чындык" (policy) же талап credit note
STATUS_DRIFTCAPTURE бизде, AUTH PSPВебхокторду текшерүү capture/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: партиялык пропорционалдуу тескери зымдар

Chargeback: талаш-тартыштар үчүн жеке эсептер жана камдар

FX reval: АР/кэштин калдыгын күн сайын кайра баалоо 'fx _ src _ policy'

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) Операциялык плейбуктар

Splash MISSING_INTERNAL: Webhook/Retrains жоготуу текшерүү, ingestion сабап, Polling API кирет.
бир PSP AMOUNT_MISMATCH :/КНС/fee-моделин тегеректөө салыштырып, түзөтүү statement сурап.
Settlement банк менен байланышпайт: value date, банк комиссиялары, T + N кечигүүлөрдү текшерүү; убактылуу "Suspense Account".
Массалык REFUND_OVER: токтоосуз токтоо auto-refand, демпотенттик аудит, кол менен оңдоо.
FX_DRIFT: курстун policy булагы (ECB/PSP/BANK) бекитүү, P & L-айырмасын кайра саноо.

13) Контролдоо жана коопсуздук

Idempotentity ingestion: 'file _ id + checksum' жана жүктөө журналы.
Access (RBAC) жана 4-көз Control: кол түзөтүүлөр/журнал өткөргүчтөр.
Аудит-трейл: Бардык матчтар/дифалар/оңдоолор - өзгөрүлбөгөн журналда.
Маалыматтардын сапаты: схемалар, милдеттүү талаалар, валидация валюталары/скейлдер.

14) Dashbord жана Алерт

Виджеты: 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) Test Cases (UAT/Prod)

1. Ошол эле файлды кайра жүктөө → 0 терс таасирлери (демпотенттик).
2. Жарым-жартылай Refand (3 сызык) → суммасы дал келет, sequence боюнча матч.
3. FX-Conversion: толеранттуулук → туура дал чегинде алмашуу курсу.
4. Dublikates баяндамада provider_txid → дедуп жана alert.
5. Жоголгон webhook capture → polling жабылды gap, статус тегизделди.
6. Settlement fee сызык менен батч → Revenue/Fee/Net туура бөлүү.

16) Көп каталар жана кантип качуу керек

Салыштыруу базаларын аралаштыруу (compare 'attempt' vs 'capture') → бирдей гранулярдуулукту сактоо.
Жок 'provider _ txid' логинде → матчтын тактыгын жоготот.
Ignor Таймзон → settlement даталары боюнча жылыштар.
Жок DLQ/retrains → "түбөлүк" айырмачылыктар.
Журналсыз кол менен оңдоо → аудит менен дал келбестик.
Бүдөмүк толеранстар → же кайра матч, же "баары DLQ".

17) Киргизүүнүн контролдук чек-баракчасы

  • Бирдиктүү нормалдаштыруу схемасы жана PSP/ыкмалары/эсептери колдонмолор
  • дарак ачкычтар салыштыруу (txid → merchant_ref → fuzzy)
  • Сумма/убакыт боюнча толеранттуулук/FX, курс булагы саясаты
  • Idempotent ingestion, DLQ, retrais, alert
  • Settlement Bank салыштыруу, Suspense Account саясаты
  • Dashboard KPI, каржы/аудит үчүн отчеттуулук
  • Playbook жана SLA diff-cases талдоо

Резюме

Салыштыруу - бул инженердик дисциплина: нормалдаштыруу, ишенимдүү ачкычтар, толеранттар, автоматтык матчтар жана ачык-айкын оңдоолор. Мындай контур менен сиз кирешени жана комиссияларды турукташтырып, "кара тешиктерди" азайтып, мезгилдин жабылышын тездетип, оорутпай аудиттен өтөсүз: Auto-match% ↑, Mismatch ↓, Aging ↓.

Contact

Биз менен байланышыңыз

Кандай гана суроо же колдоо керек болбосун — бизге кайрылыңыз.Биз дайым жардам берүүгө даярбыз!

Telegram
@Gamble_GC
Интеграцияны баштоо

Email — милдеттүү. Telegram же WhatsApp — каалооңузга жараша.

Атыңыз милдеттүү эмес
Email милдеттүү эмес
Тема милдеттүү эмес
Билдирүү милдеттүү эмес
Telegram милдеттүү эмес
@
Эгер Telegram көрсөтсөңүз — Emailден тышкары ошол жактан да жооп беребиз.
WhatsApp милдеттүү эмес
Формат: өлкөнүн коду жана номер (мисалы, +996XXXXXXXXX).

Түшүрүү баскычын басуу менен сиз маалыматтарыңыздын иштетилишине макул болосуз.