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, чегерүүлөрдү көтөрүү.
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)
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 ↓.