Multivalyuta kitabları və kursları
1) «Multivalyuta kitabları» nədir
Kitab (ledger) - eyni vaxtda bir neçə valyutada həyata keçirilən ikiqat yazıya malik tranzaksiya ledceri:- Wallet kitab: oyunçu hesabı (oyun/valyuta).
- Settlement kitab: PSP/ekvayer ilə hesablaşmalar (settlement valyutası).
- Treasury-kitab: bank hesabları, konvertasiya, hedcinq əməliyyatları.
- Hesabat kitabı: hesabat valyutasında (məsələn, EUR) məhsul metriklərinin retrospektiv yenidən qiymətləndirilməsi olmadan.
Hər bir kitab əməliyyatın valyutasını, təqdimat valyutasını və tanınma anındakı məzənnəni qeyd edir.
2) Valyuta iyerarxiyası və siyasətçilər
1. Base/Reporting Currency - vahid hesabat valyutası (məsələn, EUR).
2. Wallet Currencies - pul kisələrinin valyutaları (USD/EUR/TRY/UAH və s.).
3. Settlement Currencies - PSP nə göndərir (məsələn, USD).
4. Bank Currencies - ticarət/xəzinə hesabının valyutası.
- Məhsul metrikləri (ND/NGR/ARPPU) - hadisənin tarixi kursu ilə (adətən 'settled _ at').
- Maliyyə/treyderlər - əlavə olaraq 'funded _ at' və 'payout _ at' -da məzənnə təyin edirlər.
- Ərzaq vitrinlərində «gizli» yenidən qiymətləndirmə qadağandır.
3) Kurslar və onların mənbələri
Intraday reference (tick/minute): Refinitiv/ECB/banklar - hadisələrin normallaşdırılması üçün.
EOD (günün sonu): qalıqların yenidən qiymətləndirilməsi üçün (unrealized FX).
Effective FX: PSP/bank faylından (çevirmə faktı).
Triangulation: birbaşa kotirovka olmadıqda lövbər (EUR və ya USD) vasitəsilə.
Quote policy: `mid` либо `bid/ask` → `mid ± spread_bps`. Spread ayrıca saxlanılır.
Saxlayın: 'fx _ source', 'fx _ pair', 'fx _ rate', 'fx _ timestamp', 'quote _ type', 'spread _ bps' və triangulation marşrutu.
4) Tanıma nöqtələri və kurs təbəqələri
'authorize _ at' - kurs sabit deyil (heç bir tanınma tutulmadan).
'captured/settled _ at' - məhsul təbəqəsi və ND üçün tarixi kurs.
'funded _ at' - banka daxil olma kursu (FI/treasury üçün realized FX).
'payout _ at' - oyunçuya ödəmə kursu.
'eod' - qalıqların yenidən qiymətləndirilməsi üçün günün sonu kursu (unrealized FX).
5) Dəqiqlik, yuvarlaqlaşdırma, minimum vahidlər
Pul - valyuta kataloqunda bütün minor units (int) + 'scale'.
Kurslar - vergüldən sonra ən azı 8-10 işarə.
Yuvarlaqlaşdırma: hesabat üçün bank (half-even); UI - yerli qaydalar.
Ayrı sahələrə rəhbərlik edin: 'amount _ original', 'amount _ wallet', 'amount _ reporting', 'amount _ effective'.
6) Qoşa giriş və GL kartı (sadələşdirilmiş)
Kabel nümunələri:6. 1. DEPOSIT_CAPTURED (GBP, hesabat - EUR)
Dt: AR: PSP (GBP)
Cc: Player Balance (cüzdan üzrə GBP/EUR)
Paralel olaraq 'fx _ rate _ settle (GBP → EUR)' və 'amount _ reporting' yazılır.
6. 2. FUNDING_RECEIVED (bank üçün USD)
Dt: Bank USD
Qt: AR: PSP GBP (ekvivalent bağlayın; fərq → Realized FX).
6. 3. WITHDRAWAL_PAID (TRY)
Дт: Liability: Player (TRY)
Kt: Bank TRY (və ya Bank EUR + konvertasiya; fərq - realized FX).
7) Məlumat arxitekturası (minimum model)
ref. currencies (
code PK, scale, symbol, is_crypto, is_active
)
ref. fx_rates_intraday (
pair PK, ts PK, rate, quote_type, source, spread_bps, triangulation_meta
)
ref. fx_rates_eod (
pair PK, date PK, rate, source
)
ledger. entries (
entry_id PK, book, -- WALLET SETTLEMENT TREASURY REPORTING debit_account, credit_account,
amount_original, currency_original,
amount_reporting, reporting_currency,
fx_rate_at_settle, fx_source, fx_pair, fx_timestamp,
event_type, event_id, user_id, provider, method,
occurred_at, created_at, meta
)
treasury. funding_receipts (
funding_id PK, provider, bank_account,
currency, amount, fx_to_reporting, amount_reporting,
received_at, value_date, meta
)
treasury. balances (
date PK, account PK, currency PK, amount
)
dw. transactions_flat (
tx_id PK, user_id, provider, method, type, status,
amount_original, currency_original,
amount_reporting, reporting_currency, fx_rate_at_settle,
settled_at, funded_at, conversion_owner, meta
)
8) Normallaşdırma axını (ETL/ELT)
1. Ingest xammal → PSP statuslarının normallaşdırılması.
2. 'fx _ rates _ intraday' -dən 'settled _ at' -a tarixi kurs təyin etmək.
3. İstədiyiniz kitab (wallet/settlement) qoşa kabel yazmaq.
4. Ayrı idxal funding və effective FX.
5. Gündəlik reval qalıqları 'fx _ rates _ eod' (treasury-kitab).
6. Vitrinlərin (ND/NGR/LTV) retro yenidən qiymətləndirilmədən qurulması.
9) Yoxlama və sabitlik
Tx → File: bütün captured/settled PSP faylına daxil edilmişdir (məbləğlər/valyutalar/tarixlər üzrə).
File → Tx: fayldakı hər şey kitablarda/tellərdə əks olunur.
FX Reference vs Effective: saymaq 'slippage _ bps'; qapıdan çıxmaq üçün alert.
Triangulation yoxlama: 'A → B → C' ≈ 'A → C' bps tolerans daxilində.
İdempotentlik: 'event _ id' və 'idempotency _ key' - dubl müdafiəsi.
10) Tez-tez ssenarilər və onları necə aparmaq olar
Multi-wallet: Oyunçunun cüzdanı depozitdən fərqli valyutada ola bilər - məzənnənizlə daxili konvertasiya edin ('conversion _ owner =' MERCHANT 'siyasəti).
PSP-conversion: PSP marjasını təhlil etmək üçün 'fx _ effective', 'fx _ reference' və 'spread _ bps' saxlayın.
Kriptovalyutası: VWAP pəncərəsi üzrə qiymətləndirmə; Stablesdə funding - ikinci FX təbəqəsi.
Cross-wallet transfer: platforma daxilində hərəkət - FX gəliri olmadan, sadəcə kitablar arasında transfer.
11) SQL şablonları
11. 1. Tarixi məzənnə üzrə hesabat valyutasında məbləğin normallaşdırılması
sql
SELECT t. tx_id,
t. amount_original,
t. currency_original,
r. rate AS fx_rate_at_settle,
ROUND(t. amount_original r. rate, rep. scale) AS amount_reporting
FROM raw. transactions t
JOIN ref. fx_rates_intraday r
ON r. pair = CONCAT(t. currency_original, '/',:reporting_ccy)
AND r. ts = (
SELECT MAX(ts) FROM ref. fx_rates_intraday
WHERE pair = r. pair AND ts <= t. settled_at
)
JOIN ref. currencies rep ON rep. code =:reporting_ccy
WHERE t. settled_at BETWEEN:from AND:to;
11. 2. PSP yayılmasının ölçülməsi (effective vs reference)
sql
SELECT provider, method, DATE(settled_at) AS d,
SUM(original_amount fx_reference_rate) AS ref_in_reporting,
SUM(settlement_amount_in_reporting) AS eff_in_reporting,
10000 (SUM(settlement_amount_in_reporting) /
NULLIF(SUM(original_amount fx_reference_rate),0) - 1) AS spread_bps
FROM dw. fx_settlement_view
WHERE settled_at BETWEEN:from AND:to
GROUP BY 1,2,3;
11. 3. EOD-qalıqların yenidən qiymətləndirilməsi (unrealized FX)
sql
INSERT INTO treasury. fx_reval_ledger (date, currency, position_amount, rate_eod, amount_reporting_eod, reval_diff, type)
SELECT
:eod AS date, b. currency, b. amount,
e. rate AS rate_eod,
b. amount e. rate AS amount_reporting_eod,
b. amount (e. rate - COALESCE(l. rate_eod, e. rate)) AS reval_diff,
'UNREALIZED'
FROM treasury. balances b
JOIN ref. fx_rates_eod e
ON e. pair = CONCAT(b. currency, '/',:reporting_ccy) AND e. date =:eod
LEFT JOIN LATERAL (
SELECT rate_eod FROM treasury. fx_reval_ledger
WHERE currency=b. currency AND date=:eod - INTERVAL '1 day'
ORDER BY date DESC LIMIT 1
) l ON TRUE;
12) KPI və daşbordlar
PSP/metod/MID ilə FX Slippage (bps).
Realized FX P&L (funding/payout) и Unrealized FX (EOD/EOM).
Açıq FX Mövqe valyuta vs limitləri siyasət.
Hit-rate «vaxtında alınan» kursları (stale-rates hadisələr).
Pay PSP-conversion vs Merchant-conversion və onun TCO.
Dəyirmanların dəqiqliyi (məbləğlərin sapmaları ≥ 1 minor unit - bayraq).
13) Alertlər və eşiklər
Stale rate: hadisə zamanı heç bir kurs → fallback-mənbə/retray.
Triangulation mismatch: uyğunsuzluq> X bps.
Spread spike: 'spread _ bps' major/major həddindən yuxarıda.
Open position breach: hər hansı bir valyuta limitini aşmaq.
Reval shock: gündəlik yenidən qiymətləndirmə <− X σ və ya> + X σ - review.
14) Best practices (qısa)
1. Məhsul qatını (tarixi FX) və FI/treasury (maliyyə/payout/reval) ciddi şəkildə ayırın.
2. Minor units istifadə edin və kursları yüksək dəqiqliklə saxlayın.
3. conversion_owner loqotip və PSP marjasını ölçün (effective vs reference).
4. Hadisələrin idempotentliyini və ikitərəfli yoxlamanı həyata keçirin (Tx → File və File → Tx).
5. Triangulation üçün anchor valyuta saxlayın və bps-də uyğunsuzluqları doğrulayın.
6. Qalıqları ayrı bir GL ilə EOD proseduru ilə yenidən qiymətləndirin.
7. Settle/funding kursları təyin edərkən DST/taymzonları nəzərə alın.
8. Mütəmadi olaraq yuvarlaqlaşdırma test (property-based tests sərhədləri scale).
15) Giriş çek siyahısı
- Reporting currency və tarixi FX siyasəti müəyyən edilmişdir.
- Kurs mənbələri: intraday + EOD, fallback və SLA yeniləmələri.
- Modellər 'ledger. entries`, `fx_rates_`, `funding_receipts`, `balances`, витрина `transactions_flat`.
- Triangulation mexanizmi və log marşrutu.
- Алерты: stale-rates, spread spike, triangulation mismatch, open position breach.
- KPI daşbordları və PSP/Bank ilə yoxlama aktları.
- realized/unrealized FX üçün reval prosedurları və ayrı GL.
- Yuvarlaqlaşdırma və saxlama dəqiqliyi test dəstləri.
Xülasə
Multi-valyuta kitabları təbəqələrin bölünməsi intizamıdır: məhsul üçün tarixi FX, trejeri üçün faktiki, balans üçün EOD yenidən qiymətləndirilməsi. Şəffaf məzənnə mənbələri, dəqiq məlumat modeli, ikiqat qeyd və avtomatlaşdırılmış müqayisə ilə siz analitikadan «valyuta səs-küyünü» aradan qaldıracaq, audit təmin edəcək və qlobal monetizasiya zamanı idarə olunan FX riskini əldə edəcəksiniz.