GH GambleHub

Мультивалютні книги та курси

1) Що таке «мультивалютні книги»

Книга (ledger) - транзакційний леджер з подвійним записом (двосторонні проводки), що ведеться в декількох валютах одночасно:
  • Wallet-книга: рахунок гравця (ігрова валюта/валюти).
  • Settlement-книга: розрахунки з PSP/еквайром (валюта сеттлменту).
  • Treasury-книга: банківські рахунки, конвертації, хедж-угоди.
  • Reporting-книга: звід у звітній валюті (наприклад, EUR) без ретроспективної переоцінки продуктових метрик.

Кожна книга фіксує валюту операції, валюту подання і курс на момент визнання.

2) Ієрархія валют і політик

1. Base/Reporting Currency - єдина звітна валюта (наприклад, EUR).
2. Wallet Currencies - валюти гаманців (USD/EUR/TRY/UAH тощо).
3. Settlement Currencies - що надсилає PSP (наприклад, USD).
4. Bank Currencies - валюта рахунку мерчанта/казначейства.

Правила:
  • Продуктові метрики (ND/NGR/ARPPU) - за історичним курсом події (зазвичай'settled _ at').
  • Фінанси/трежери - додатково фіксують курс на'funded _ at'і'payout _ at'.
  • Заборонена «прихована» переоцінка в продуктових вітринах.

3) Курси та їх джерела

Intraday reference (tick/minute): Refinitiv/ECB/банки - для нормалізації подій.
EOD (кінець дня): для переоцінки залишків (unrealized FX).
Effective FX: з файлу PSP/банку (факт конвертації).
Triangulation: через якір (EUR або USD) при відсутності прямого котирування.
Quote policy: `mid` либо `bid/ask` → `mid ± spread_bps`. Спред зберігається окремо.

Зберігайте: `fx_source`, `fx_pair`, `fx_rate`, `fx_timestamp`, `quote_type`, `spread_bps`, и маршрут triangulation.

4) Точки визнання і шари курсів

'authorize _ at'- курс не фіксуємо (без захоплення немає визнання).
'captured/settled _ at'- історичний курс для продуктового шару і ND.
«funded _ at» - курс вступу на банк (realized FX для FI/treasury).
'payout _ at'- курс при виплаті гравцеві.
«eod» - курс кінця дня для переоцінки залишків (unrealized FX).

5) Точність, округлення, мінімальні одиниці

Гроші - цілі minor units (int) +'scale'в довіднику валют.
Курси - не менше 8-10 знаків після коми.
Округлення: банківське (half-even) для звітності; в UI - локальні правила.
Вести роздільні поля: `amount_original`, `amount_wallet`, `amount_reporting`, `amount_effective`.

6) Подвійний запис і GL-карта (спрощено)

Приклади проводок:

6. 1. DEPOSIT_CAPTURED (GBP, звітна - EUR)

Дт: AR: PSP (GBP)

Кт: Player Balance (GBP/EUR за гаманцем)

Паралельно фіксуємо'fx _ rate _ settle (GBP→EUR)'і'amount _ reporting'.

6. 2. FUNDING_RECEIVED (USD на банк)

Дт: Bank USD

Кт: AR: PSP GBP (закриваємо по еквіваленту; різниця → Realized FX).

6. 3. WITHDRAWAL_PAID (TRY)

Дт: Liability: Player (TRY)

Кт: Bank TRY (або Bank EUR + конвертація; різниця - realized FX).

7) Архітектура даних (мінімальна модель)


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) Потік нормалізації (ETL/ELT)

1. Інгест сировини → нормалізація статусів PSP.
2. Присвоєння історичного курсу на'settled _ at'з'fx _ rates _ intraday'.
3. Запис подвійної проводки в потрібну книгу (wallet/settlement).
4. Окремий імпорт funding і effective FX.
5. Щоденна reval залишків по'fx _ rates _ eod'( treasury-книга).
6. Побудова вітрин (ND/NGR/LTV) без ретро-переоцінки.

9) Звірка і консистентність

Tx→File: всі captured/settled потрапили у файл PSP (за сумами/валютами/датами).
File→Tx: все у файлі відображено в книгах/проводках.
FX Reference vs Effective: вважати'slippage _ bps'; алерт на вихід за поріг.
Перевірка triangulation: «A→B B→C» ≈ «A→C» в межах bps-толерансу.
Ідемпотентність: 'event _ id'і'idempotency _ key'- захист від дублів.

10) Часті сценарії і як їх вести

Multi-wallet: гаманець гравця може бути в іншій валюті, ніж депозит - робіть внутрішню конвертацію за вашим курсом (політика'conversion _ owner ='MERCHANT ").
PSP-conversion: зберігайте'fx _ effective','fx _ reference'і'spread _ bps'для аналізу маржі PSP.
Крипто: оцінка по VWAP-вікну; funding в стейблах - другий шар FX.
Cross-wallet transfer: рух всередині платформи - без FX-доходу, просто перенесення між книгами.

11) SQL-шаблони

11. 1. Нормалізація суми у звітну валюту за історичним курсом

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 (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 (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 і дашборди

FX Slippage (bps) за PSP/методом/MID.
Realized FX P&L (funding/payout) и Unrealized FX (EOD/EOM).
Open FX Position по валютах vs ліміти політики.
Hit-rate «вчасно отриманих» курсів (stale-rates інциденти).
Частка PSP-conversion vs Merchant-conversion і її TCO.
Точність округлень (відхилення сум ≥ 1 minor unit - прапор).

13) Алерти і пороги

Stale rate: немає курсу на момент події → fallback-джерело/ретрай.
Triangulation mismatch: розбіжність> X bps.
Spread spike: 'spread _ bps'вище порогу за мажорами/мейнерами.
Open position breach: перевищення ліміту по будь-якій валюті.
Reval shock: денна переоцінка <−Xσ або> + X σ - рев'ю.

14) Best practices (коротко)

1. Строго розділяйте продуктовий шар (історичний FX) і FI/treasury (funding/payout/reval).
2. Використовуйте minor units і зберігайте курси з високою точністю.
3. Логуйте conversion_owner та вимірюйте маржу PSP (effective vs reference).
4. Реалізуйте ідемпотентність подій і двосторонню звірку (Tx→File і File→Tx).
5. Тримайте anchor-валюту для triangulation і валідуйте розбіжності в bps.
6. Переоцінку залишків робіть EOD-процедурою з окремим GL.
7. Враховуйте DST/таймзони при присвоєнні курсів на settle/funding.
8. Регулярно тестуйте округлення (property-based tests на кордонах scale).

15) Чек-лист впровадження

  • Визначена reporting currency і політика історичного FX.
  • Джерела курсів: intraday + EOD, fallback і SLA оновлення.
  • Моделі'ledger. entries`, `fx_rates_`, `funding_receipts`, `balances`, витрина `transactions_flat`.
  • Механізм triangulation і лог маршруту.
  • Альберти: stale-rates, spread spike, triangulation mismatch, open position breach.
  • Дашборди KPI і акти звірки з PSP/банком.
  • Процедури reval і роздільні GL для realized/unrealized FX.
  • Тест-набори округлень і точності зберігань.

Резюме

Мультивалютні книги - це дисципліна поділу шарів: історичний FX для продукту, фактичний для трежері, EOD-переоцінка для балансів. З прозорими джерелами курсів, точною моделлю даних, подвійним записом і автоматизованою звіркою ви виключите «валютний шум» з аналітики, забезпечите аудит і отримаєте керований FX-ризик при глобальній монетизації.

Contact

Зв’яжіться з нами

Звертайтеся з будь-яких питань або за підтримкою.Ми завжди готові допомогти!

Telegram
@Gamble_GC
Розпочати інтеграцію

Email — обов’язковий. Telegram або WhatsApp — за бажанням.

Ваше ім’я необов’язково
Email необов’язково
Тема необов’язково
Повідомлення необов’язково
Telegram необов’язково
@
Якщо ви вкажете Telegram — ми відповімо й там, додатково до Email.
WhatsApp необов’язково
Формат: +код країни та номер (наприклад, +380XXXXXXXXX).

Натискаючи кнопку, ви погоджуєтесь на обробку даних.