Multivalyuta kitoblari va kurslari
1) «Multivalyuta kitoblari» nima?
Kitob (ledger) - bir vaqtning o’zida bir nechta valyutada olib boriladigan ikki tomonlama yozuvli tranzaksion legger (ikki tomonlama o’tkazmalar):- Wallet-kitob: o’yinchining hisobi (o’yin valyutasi/valyutalari).
- Settlement-kitob: PSP/ekvayer bilan hisob-kitoblar (settlement valyutasi).
- Treasury-kitob: bank hisobvaraqlari, konvertatsiyalar, xedj-bitimlar.
- Reporting-kitob: mahsulot metrikasini retrospektiv qayta baholashsiz hisobot valyutasidagi (masalan, EUR) yig’indisi.
Har bir kitob tan olish paytidagi operatsiya valyutasi, taqdim etish valyutasi va kursini qayd etadi.
2) Valyuta ierarxiyasi va siyosatchilar
1. Base/Reporting Currency - yagona hisobot valyutasi (masalan, EUR).
2. Wallet Currencies - hamyonlarning valyutalari (USD/EUR/TRY/UAH va h.k.).
3. Settlement Currencies - PSP yuboradigan narsa (masalan, USD).
4. Bank Currencies - savdo/g’aznachilik hisobvarag’ining valyutasi.
- Mahsulot metrikasi (ND/NGR/ARPPU) - voqeaning tarixiy kursi bo’yicha (odatda’settled _ at’).
- Moliya/trejyerlar - qo’shimcha ravishda’funded _ at’va’payout _ at’kursini belgilaydi.
- Oziq-ovqat vitrinalarida «yashirin» qayta baholash taqiqlangan.
3) Kurslar va ularning manbalari
Intraday reference (tick/minute): Refinitiv/ECB/banklar - voqealarni normallashtirish uchun.
EOD (kun oxiri): qoldiqlarni qayta baholash uchun (unrealized FX).
Effective FX: PSP/bank faylidan (konvertatsiya fakti).
Triangulation: langar orqali (EUR yoki USD) to’g «ridan to’g» ri kotirovka qilinmaganda.
Quote policy: `mid` либо `bid/ask` → `mid ± spread_bps`. Spred alohida saqlanadi.
’fx _ source’,’fx _ pair’,’fx _ rate’,’fx _ timestamp’,’quote _ type’,’spread _ bps’va triangulation yoʻnalishlarini saqlang.
4) Tan olish nuqtalari va kurslar qatlamlari
’authorize _ at’ - kursni aniqlamaymiz (ushlashsiz tan olinmaydi).
’captured/settled _ at’ - mahsulot qatlami va ND uchun tarixiy kurs.
’funded _ at’ - bankka tushum kursi (FI/treasury uchun realized FX).
’payout _ at’ - o’yinchiga to’lashda kurs.
’eod’ - qoldiqlarni qayta baholash uchun kun yakuni kursi (unrealized FX).
5) Aniqlik, yaxlitlash, minimal birliklar
Pul - valyuta ma’lumotnomasida butun minor units (int) +’scale’.
Kurslar - verguldan keyin kamida 8-10 belgi.
Yaxlitlash: bank hisoboti uchun (half-even); UI - mahalliy qoidalar.
’amount _ original’,’amount _ wallet’,’amount _ reporting’,’amount _ effective’kabi alohida maydonlarni yuritish.
6) Ikki tomonlama yozuv va GL-karta (soddalashtirilgan)
Simlar namunalari:6. 1. DEPOSIT_CAPTURED (GBP, hisobot - EUR)
Dt: AR: PSP (GBP)
Kt: Player Balance (hamyon bo’yicha GBP/EUR)
Shu bilan birga’fx _ rate _ settle (GBP → EUR)’va’amount _ reporting’.
6. 2. FUNDING_RECEIVED (bankka USD)
Dt: Bank USD
Kt: AR: PSP GBP (ekvivalent bo’yicha yopamiz; farq → Realized FX).
6. 3. WITHDRAWAL_PAID (TRY)
Дт: Liability: Player (TRY)
Kt: Bank TRY (yoki Bank EUR + konvertatsiya; farq - realized FX).
7) Ma’lumotlar arxitekturasi (minimal 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) Normallashuv oqimi (ETL/ELT)
1. Xom ashyo ingesti → PSP maqomlarini normallashtirish.
2. ’settled _ at’ uchun tarixiy kursni’fx _ rates _ intraday’ga berish.
3. Kerakli kitobga (wallet/settlement) ikki marta uzatishni yozish.
4. Alohida import funding va effective FX.
5. ’fx _ rates _ eod’ bo’yicha har kungi reval qoldiqlari (treasury-kitob).
6. Vitrinalarni (ND/NGR/LTV) retro qayta baholashsiz qurish.
9) Solishtirish va konsistentlik
Tx → File: hamma captured/settled PSP fayliga kiritildi (summalar/valyutalar/sanalar boʻyicha).
File → Tx: fayldagi hamma narsa kitob/simlarda aks etgan.
FX Reference vs Effective:’slippage _ bps’deb hisoblash; ostonadan chiqish uchun alert.
Triangulation tekshiruvi:’A → B → C’≈’A → C’bps-tolerans doirasida.
Idempotentlik:’event _ id’va’idempotency _ key’- dubllardan himoya qilish.
10) Tez-tez uchraydigan stsenariylar va ularni qanday yuritish
Multi-wallet: o’yinchining hamyoni depozitdan boshqa valyutada bo’lishi mumkin - ichki konvertatsiyani kursingiz bo’yicha amalga oshiring (’conversion _ owner =’MERCHANT’siyosati).
PSP-conversion: PSP marjasini tahlil qilish uchun’fx _ effective’,’fx _ reference’va’spread _ bps’ni saqlang.
Kripto: VWAP-oyna bo’yicha baholash; stabllarda funding - FX ning ikkinchi qatlami.
Cross-wallet transfer: platforma ichida harakatlanish - FX daromadsiz, shunchaki kitoblar o’rtasida o’tkazish.
11) SQL namunalari
11. 1. Tarixiy kurs bo’yicha hisobot valyutasidagi summani normallashtirish
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 spredini oʻlchash (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. Qoldiqlarni EOD-qayta baholash (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 va dashbordlar
PSP/MID usuli boʻyicha FX Slippage (bps).
Realized FX P&L (funding/payout) и Unrealized FX (EOD/EOM).
Valyuta bo’yicha Open FX Position vs siyosat limitlari.
Hit-rate «o’z vaqtida olingan» kurslar (stale-rates hodisalar).
PSP-conversion vs Merchant-conversion va uning TCO ulushi.
Tegirmonlarning aniqligi (summalarning chetga chiqishi ≥ 1 minor unit - bayroq).
13) Alerta va ostonalar
Stale rate: hodisa uchun kurs yoʻq → fallback-manba/retray.
Triangulation mismatch: tafovut> X bps.
Spread spike:’spread _ bps’major/meyner chegarasidan yuqori.
Open position breach: har qanday valyuta bo’yicha limitning oshib ketishi.
Reval shock: kunlik qayta baholash <− X σ yoki> + X σ - revyu.
14) Best practices (qisqacha)
1. Mahsulot qatlamini (tarixiy FX) va FI/treasury (funding/payout/reval) bilan qat’iy ajrating.
2. Minor units dan foydalaning va kurslarni yuqori aniqlikda saqlang.
3. conversion_owner logini va PSP (effective vs reference) marjasini oʻlchang.
4. Voqealarning idempotentligini va ikki tomonlama solishtirishni amalga oshiring (Tx → File va File → Tx).
5. Triangulation uchun anchor valyutasini saqlang va farqlarni bps bilan tasdiqlang.
6. Qoldiqlarni alohida GL bilan EOD tartibida qayta baholang.
7. Settle/funding kurslarini belgilashda DST/taymzonlarni hisobga oling.
8. Doira (property-based tests) ni muntazam ravishda sinab ko’ring.
15) Joriy etish chek-varaqasi
- Reporting currency va tarixiy FX siyosati aniqlandi.
- Kurs manbalari: intraday + EOD, fallback va SLA yangilanishlari.
- Modellar’ledger. entries`, `fx_rates_`, `funding_receipts`, `balances`, витрина `transactions_flat`.
- Triangulation mexanizmi va yo’nalish.
- Алерты: stale-rates, spread spike, triangulation mismatch, open position breach.
- KPI dashbordlari va PSP/bank bilan solishtirish dalolatnomalari.
- Reval protseduralari va realized/unrealized FX uchun alohida GL.
- Yaxlitlash va saqlash aniqligining test to’plamlari.
Xulosa
Multivalyuta kitoblari - bu qatlamlarni ajratish fanidir: mahsulot uchun tarixiy FX, trejeri uchun haqiqiy, balanslar uchun EOD-qayta baholash. Kurslarning shaffof manbalari, aniq ma’lumotlar modeli, ikki tomonlama yozuv va avtomatlashtirilgan taqqoslash bilan siz «valyuta shovqinini» tahlildan olib tashlaysiz, auditni ta’minlaysiz va global pul topishda boshqariladigan FX xavfini olasiz.