KPI ödəniş bordu
TL; DR
Bir daşbord - üç qat: Huni Sağlamlığı (Attempt → Auth → Capture), Maliyyə Səmərəliliyi (TtW/TtR, Cost/GGR, FX) və Infrastruktur Etibarlılığı (Webhook/Latency/Settlement). Sirr - düzgün hesablama bazaları, məcburi seqmentasiya (country × provider × method × BIN × ticket _ size × risk), eşik SLOları və dəhlizlərdən çıxarkən hazır pleybuklar.
1) Kim üçün və hansı sualları bağlayırıq
CEO/GM (gündəlik, 3-5 dəq): "Ödənişlərin çevirilməsi və geri çəkilmə sürəti normaldır? Pulun qəbulunun qiyməti nəzarət altındadır?"
Head of Payments/Treasury (hər saat): "Provayder/ölkə/metod üzrə deqradasiya haradadır? Ani ödənişlər üçün kifayət qədər likvidlik varmı?"
Fraud/Risk (gündəlik): "Antifrod nəzərə alınmaqla AR? Abandon на 3DS и Soft declines?»
Support/Operations (onlayn): "Çıxarış və geri qaytarma ETA nədir? Vebhuk harada?"
Finance/Recon (D + 1): "Settlement vaxtında? Komissiyalar və FX plana uyğundur?"
2) Əsas metriklər və dəqiq təriflər
2. 1 Ödəniş hunisi
Attempt - Təşəbbüs ödənişləri.
Auth Approved - təsdiq edilmiş icazələr.
Captured - uğurla silindi.
- `AR_gross = Auth_Approved / Auth_Attempted`
- `AR_net = Captured_Tx / Auth_Attempted`
- `Capture_Success = Captured_Tx / Capture_Attempted_Tx`
- `Capture_Latency_p95 = p95(capture_ts - auth_ts)`
2. 2 Nəticələr və geri qaytarmalar
Payout Success % = Success_Payouts / Attempted_Payouts
TtW p95 = p95(payout_credited_at - payout_initiated_at)
Refund Rate = Refunded_Tx / Captured_Tx
TtR p95 = p95(refund_credit_at - refund_initiated_at)
Refund Error % = Refund_Failed / Refund_Attempted
Refund_to_Source% - ilkin üsula qaytarma payı
2. 3 Qiymət və FX
Cost/Tx = Fee_fixed + AmountFee_pct + FX_Spread
Cost/GGR = ΣCost / GGR
FX Slippage (bps) = (exec_px − mid_px)/mid_px × 10 000
2. 4 inteqrasiya etibarlılığı
Webhook Delivery p95 (сек), Success %
API Latency p95/p99 (auth/capture/refund/payout)
Settlement Timeliness = T + N elan edilmiş batches/bütün batches dövr üçün gəldi
2. 5 3DS/sürtünmə (kartlar üçün)
3DS Challenge Share = Challenge / 3DS_Total
Frictionless Share = Frictionless / 3DS_Total
Abandon on 3DS = 3DS_Started − 3DS_Completed
3) Kəsiklər və filtrlər (minimum dəst)
Фильтры в шапке: `date range (UTC)`, `country`, `provider`, `method_group`, `BIN`, `device/os`, `ticket_size bucket (≤€50 / €50–200 / >€200)`, `risk_segment`, `kyc_tier`, `new_vs_returning`, `affiliate`.
Qrafik/cədvəllərdə məcburi kəsiklər:- country×provider, BIN×country, method×provider, device/os, ticket_size.
4) Əsas ekran nişanı (Layout)
1. Üst KPI dəsti (dünən/bu gün üçün, p7 mediana müqayisə):
`AR_net`, `Capture_Success`, `Payout Success%`, `TtW p95`, `TtR p95`, `Cost/GGR`, `Webhook p95`, `Settlement Timeliness`.
2. Funnel (Attempt → Auth → Capture) seqment seçimi və nasazlıq səbəbləri (üst kodları ISO/relslərdə).
3. Heatmap AR 'country × provider' və üst həcmi üçün ayrı BIN heatmap.
4. 3DS panel: Challenge/Frictionless/Abandon + bench line müqayisə.
5. Payout & Refund Health: Success%, p95 (TtW/TtR), ошибки, Refund_to_Source %.
6. Cost & FX: Metodlara görə Cost/GGR, saytlara görə FX slippage/fees.
7. İnteqrasiya etibarlılığı: Webhook delivery p95/Success%, API latency p95/p99, Duplicate rate, Report delivery SLA.
8. Hadisə paneli: aktiv alertlər (bax § 8), feylover statusu və xəzinə qeydləri (qalıqlar L0, prefund).
5) SLO və alertlər (dəhlizlər)
Göstərişlər (portfel/bazarlar üçün kalibrlənir):- 'AR _ gross' kartları 3DS2: 82-92% (seqment üzrə); 'AR _ net' ≥ 80%
- `Capture_Success` ≥ 98. 5% (saat)
- `Webhook p95` ≤ 3 с, Success ≥ 99. 9%
- `Payout TtW p95` instant ≤ 120 с; (T + 1) - gündə 100% D + 1
- 'Refund TtR p95' kart ≤ T + 1 b.d.; instant ≤ 60 с
- `Refund Error %` < 0. 3%
- `Settlement Timeliness` ≥ 99%
- 'Cost/GGR' - metodla fərdi hədəf dəhlizi
- 'AR _ gross ↓> 3 p.p.' 7 günlük mediana (ölkə üzrə/PSP/BIN) → P1/P0
- `Capture_Success < 98%` (час) → P1
- 'Webhook p95> 5 c' və ya təkrarlanan> 0 → P1
- `Payout TtW p95 > SLO` или Success%<99% → P1
- `Refund Error% > 0. 3%` или `Double Refund > 0` → P0
- `Settlement on-time < 99%` → P1
- 'Cost/GGR' → P2 metodu ilə dəhlizdən çıxmaq
Hər bir alert runbook kartını açır (hərəkət/eskalasiya/feylover).
6) Formullar və hesablama bazaları (detalları)
Bütün paylar - açıq baza ilə: 'denominator' yazın.
Vaxt - UTC; p-kvantili: PERCENTILE_CONT.
'AR _ clean' (əməliyyat) = 'Auth _ Approved/( )'
`Net_Conversion` = `Captured_Tx / Auth_Attempted_Tx`
`Refund_to_Source %` = `Refund_to_Original_Method / Total_Refunds`
'Idle Cash%' (xəzinə mini-widgetında) = '(Balance − Target_Balance )/Balance'
7) UX nümunələri
Yuxarıda KPI Plush, aşağıda - funnel + heatmaps, aşağıda - inteqrasiya və maliyyə.
Formulu/bazası/istisnaları olan tuliplər (məsələn, «antifroddan sonra»).
Müqayisəli xətt: p7 median və «dünən «/» ötən bazar ertəsi ».
Basın Drill-down: BIN cədvəlinə heatmap → Issuer → uğursuzluq kodları.
RCA üçün Snapshots: post-mortem üçün cari görünüşü «bərk» düyməsi.
8) Playbook (daxili hərəkət kartları)
Auth drop → smart-routing keçid, BIN 3DS-challenge qaldırmaq, retras məhdudlaşdırmaq.
Webhook gecikmələr → polling daxil, avto-refand dondurmaq/təhlükəli avto-ödənişlər, idempotentlik gücləndirmək.
Payout deqradasiya → rels feilover, treasury top-up, VIP prioritetləşdirilməsi.
Settlement gecikmə → StressRes, «Suspense» işarəsi, PSP-də eskalasiya.
Refund səhvlər/dubl → refund-freeze, müqayisə, üzlü dubl.
(Kartda yoxlama siyahısı və eskalasiya kontaktları var.)
9) Məlumat modeli (minimum kifayət qədər)
events/payments_flat:
payment_id, user_id, country, provider, method_code, action(deposit/refund/payout),
attempt_ts, auth_status, auth_ts, three_ds(flow, challenge_flag, started_ts, completed_ts),
capture_status, capture_amount, capture_ts, partial_flag,
refund_status, refund_amount, refund_initiated_ts, refund_credit_ts,
payout_status, payout_amount, payout_initiated_ts, payout_credited_ts,
fees_fixed, fees_pct, fx_spread, currency, amount,
risk_segment, kyc_tier, bin, asn, device_os, ticket_bucket
events/webhooks:
provider, event_kind, event_ts, delivered_ts, retries, duplicate_flag, idempotency_key
settlements/reports:
provider, batch_id, settlement_date, amount_settled, currency, fee_amount, status
treasury/pockets (mini-widget):
pocket_id, counterparty, currency, balance, target_balance, low_watermark, updated_at
Indekslər: 'provider', 'method _ code', 'country', 'bin', 'event _ ts'.
10) SQL dilimləri (nümunə)
10. 1 Huni və AR
sql
WITH base AS (
SELECT
DATE_TRUNC('hour', attempt_ts) AS h,
country, provider, method_code,
COUNT() FILTER (WHERE auth_status='ATTEMPTED') AS auth_attempted,
COUNT() FILTER (WHERE auth_status='APPROVED') AS auth_approved,
COUNT() FILTER (WHERE capture_status='CAPTURED') AS captured_tx
FROM payments_flat
WHERE action='deposit'
GROUP BY 1,2,3,4
)
SELECT h, country, provider, method_code,
auth_approved::decimal / NULLIF(auth_attempted,0) AS ar_gross,
captured_tx::decimal / NULLIF(auth_attempted,0) AS ar_net
FROM base;
10. 2 Webhook SLA
sql
SELECT
DATE_TRUNC('hour', event_ts) AS h, provider,
PERCENTILE_CONT(0. 95) WITHIN GROUP (ORDER BY EXTRACT(EPOCH FROM (delivered_ts - event_ts))) AS wb_p95_sec,
AVG(CASE WHEN retries=0 AND NOT duplicate_flag THEN 1 ELSE 0 END) AS wb_success
FROM webhooks
GROUP BY 1,2;
10. 3 Refund & Payout Health
sql
SELECT
DATE_TRUNC('day', COALESCE(refund_initiated_ts, payout_initiated_ts)) d,
method_code, provider,
COUNT() FILTER (WHERE refund_status='ATTEMPTED') AS refund_attempted,
COUNT() FILTER (WHERE refund_status='SUCCESS') AS refund_success,
PERCENTILE_CONT(0. 95) WITHIN GROUP (ORDER BY EXTRACT(EPOCH FROM (refund_credit_ts - refund_initiated_ts))) AS ttr_p95_sec,
COUNT() FILTER (WHERE payout_status='ATTEMPTED') AS payout_attempted,
COUNT() FILTER (WHERE payout_status='SUCCESS') AS payout_success,
PERCENTILE_CONT(0. 95) WITHIN GROUP (ORDER BY EXTRACT(EPOCH FROM (payout_credited_ts - payout_initiated_ts))) AS ttw_p95_sec
FROM payments_flat
GROUP BY 1,2,3;
10. 4 Cost/GGR
sql
SELECT
DATE_TRUNC('day', capture_ts) d,
method_code, provider,
SUM(fees_fixed + amountfees_pct + fx_spread) AS total_cost,
SUM(capture_amount) AS total_captured,
(SUM(fees_fixed + amountfees_pct + fx_spread) / NULLIF(SUM(total_captured),0)) AS cost_to_captured
FROM payments_flat
WHERE capture_status='CAPTURED'
GROUP BY 1,2,3;
11) Əlavə ekranlar
BIN Drilldown: AR/decline-codes, 3DS-sürtünmə, emitentlər üçün latency.
Provider Scorecard: SLA metriklər, hadisələr, kreditlər, Cost/GGR.
Treasury Snapshot: L0/L1 qalıqları, prefund, StressRes, TtF doldurulması.
Recon View: Settlement Timeliness, Aging tikilməmiş batches, Fee accuracy.
12) Məlumatların keyfiyyəti
KPI lüğəti (formula/baza/istisnalar).
Vahid TZ = UTC, p-kvantili - yalnız CONT.
Hadisələrin idempotentliyi və veb-hook dedupu.
Zaman/Məbləğ/FX tolerans siyasəti (yoxlama/gizlilik üçün).
CI-də data tests: boş bölünmə bazaları, vaxt işarələrinin monotonluğu, NULL payı.
13) Giriş: çek siyahısı
- KPI/formullar/bazalar müəyyən və lüğətdə qeyd.
- ingestion və hadisələrin/reyestrlərin normallaşdırılması.
- 'payments _ flat', 'webhooks', 'settlements', 'treasury' vitrinləri inşa edilmişdir.
- həyata heatmaps, funnel, latency, payout/refund panels.
- SLO və alertlərin astanaları açılmışdır; playbook ilə bağlıdır.
- Giriş rolları: C-level (read-only summary), Ops/Fraud (drill-down).
- Provider Scorecard əsasında provayderlər üçün həftəlik QBR.
- UAT test dəsti: demo-dataset, p-kvantil yoxlaması, bazaların düzgünlüyü, alertlər.
14) Tez-tez səhvlər
Bazaların qarışması ('attempt' vs 'capture') → yanlış nəticələr.
No seqmentasiya 'ticket _ size' → təhrif rəsm AR.
Ignor abandon haqqında 3DS → «şişirdilmiş» provayder ilə problem.
Nəzarət yoxdur webhook duplicates → ikili fəaliyyət.
Natamam vitrin settlement/fees → Cost/GGR qiymətləndirmək mümkün deyil.
SLO və playbook olmadan dashboard «heç bir hərəkət vitrin» çevrilir.
Xülasə
KPI ödəniş bordu sadəcə qrafiklər deyil, əməliyyat alətidir. Huni, pul və infrastrukturu birləşdirir, dəqiq düsturlara və seqmentlərə əsaslanır, avtomatik siqnallar verir və dərhal fəaliyyət təklif edir. Nəticədə: yuxarıda AR_net, dəhlizlərdə TtW/TtR, Cost/GGR nəzarət altında, hadisələr tez lokallaşdırılır və provayderlərlə dialoq rəqəmlərə əsaslanır.