Казначейство: ликвидность и резервы
TL;DR
Казначейство в iGaming — это управляемая сеть «карманов» ликвидности (банки, PSP, кошельки, крипто-кастоди, мерчант-аккаунты) с разными SLA на ввод/вывод. Цель — нулевые кассовые разрывы при минимальной себестоимости: точный прогноз потоков, лимиты по контрагентам и валютам, резервная политика (операционные буферы + регуляторные safeguarding + стресс-резерв), дисциплина prefunding и sweep-правил, SLO по Time-to-Payout и Time-to-Fund.
1) Карта ликвидности: уровни, карманы, потоки
1.1 Уровни ликвидности (по доступности)
L0 (T0) — мгновенная ликвидность: операционные остатки на мерчант-счетах, instant A2A/RTP, кошельки, стейбл-резервы, наличные буферы для payout T0.
L1 (T+1…T+3) — ликвидность короткого горизонта: расчетные счета PSP/эквайеров, банковские текущие счета с внутридневными лимитами.
L2 (T+5…T+10) — ликвидность среднего горизонта: депозитные/сберегательные счета, свипы в казначейские инструменты (T-bills, MMF), «парковка» стейблов на кастоди с быстрым off-ramp.
L3 (T+10+) — стратегическая ликвидность/капитал: длинные депозиты, облигации, зарезервированный капитал.
1.2 Карманы ликвидности (пример)
Bank_OPS (операционный банк): вход/выход фиата, зарплатный, налоги.
PSP_MERCHANT: мерчант-аккаунты по методам (Card, A2A, Wallet).
PSP_SETTLEMENT: счета расчетов/аккумуляции (T+N).
CRYPTO_CUSTODY: он-чейн/кастоди, стейблы и базовые активы.
PAYOUT_POOLS: отдельные пулы для мгновенных выплат.
SAFEGUARD_ACCOUNTS: сегрегированные счета по требованиям регулятора/лицензии.
1.3 Главные потоки
`Deposits → PSP_MERCHANT → Settlement → Bank_OPS`
`Bank_OPS → Payout_Pools/PSP → Withdrawals`
`On/Off-ramp ↔ Crypto_Custody`
`Sweeps: L0↔L1↔L2` по расписанию и триггерам.
2) Политика ликвидности и резервов
2.1 Цели
Нулевые кассовые разрывы на критичных рельсах выплат.
Минимальная стоимость владения ликвидностью (комиссии, FX, упущенный доход).
Соответствие регуляторике: safeguarding, сегрегация клиентских средств (где применимо).
Прозрачность: ежедневная сверка и дашборды по SLO.
2.2 Класс резервов
1. Операционный резерв (OpRes) — покрытие payout-пика и вариабельности settlement (например, p99 дневного нетто-вывода + буфер 20–30%).
2. Регуляторный резерв (RegRes) — суммы, требуемые лицензией (segregated, safeguarding, ring-fencing).
3. Стресс-резерв (StressRes) — покрытие редких шоков: «двойной» пиковый вывод, задержка T+N у ключевого PSP, FX-шок.
4. Технический резерв (TechRes) — на фейловер/инциденты (заморозка площадки/биржи/банка).
2.3 Формула целевого остатка по карману
Target_Balance = OpRes(p99 horizon H) + RegRes + StressRes - Incoming_Settlement(T_window)
Горизонт H и окно T_window зависят от рельса (например, RTP H=1d, Card H=3d).
3) Прогнозирование кассовых потоков
3.1 Входные ряды
Deposits by method/provider (p7/p30 сезонность, дни недели, акции).
Withdrawals & Payouts (скорость и доля к депозитам, VIP/джекпоты).
Settlement schedules (T+N по PSP/эквайерам).
FX-календарь (переоценки, крупные конвертации).
Операционные платежи (налоги, комиссии, зарплаты).
3.2 Модель (минимум)
Локально-взвешенный или SARIMA/Prophet для депо/выводов.
Прикладные коэффициенты: `Cash-out Rate`, `Jackpot Probability`, `Promo Lift`.
Нетто-позиция по карману: `Inflow_psp_settlement − Outflow_payouts ± Sweeps`.
3.3 Метрики качества прогноза
MAPE / WAPE по daily нетто.
Coverage: доля дней, когда фактический пик ≤ планового OpRes.
Stockout Incidents: разы, когда L0 ушел < минимального порога.
4) Prefunding, sweeps и правила пополнения
4.1 Prefunding (предоплата рельсов)
Для instant payout рельсов и некоторых APM требуется баланс.
Правило: поддерживать rolling-порог (например, p95 дневных выплат последней недели) + буфер 20%.
Триггеры автопополнения: `Balance < LowWatermark` → `TopUp to Target_Balance`.
4.2 Sweeps (свип-переводы)
Ежедневные: PSP_MERCHANT → Bank_OPS после settlement окна.
Интрадей: L0↔L1 при отклонениях от целевых коридоров.
В сторону L2: ночной свип избыточных остатков в MMF/T-Bills/стейблы (политика возврата в L0 ≤ T+1).
4.3 Приоритеты расходования (waterfall)
1. Payout_Pools (T0 обязательства)
2. Казначейские платежи с фиксированным дедлайном (налоги/зарплата)
3. Конвертации/ребаланс FX
4. Инвестиции L2/L3
5) Валюты, FX и процентная среда
FX-экспозиция: баланс входящих/исходящих по валютам; натуральный хедж (поддерживать выплаты в той же валюте).
Политика конвертаций: TWAP/POV-алго для крупных сумм, лимиты на слippage bps, idempotent exec-id.
Процентная доходность L2: MMF/короткие T-bills; ограничения по контрагентам и минимальная ликвидность (T+0/T+1).
SLO FX-конвертаций: время от решения до исполнения (p95 ≤ X минут), журнализация котировок.
6) Контрагентский риск и лимиты
Лимиты на контрагента: банк, PSP, крипто-кастоди, биржа/OTC.
Рейтинговая матрица: капитал/лицензии/инциденты/доступность/Proof-of-Reserves (для крипто).
Диверсификация: минимум 2–3 провайдера на критичный рельс, распределение остатков по кластерам.
Custody-политика: мультисиг/HSM, лимиты на вывод, адресные allow-листы, ежедневные сверки.
7) Регуляторные и комплаенс-аспекты
Safeguarding/segregation: отдельные счета для клиентских средств (где требуется), трекинг балансов, запрет смешения.
Отчетность: ежедневные отчеты регулятору/аудиту по остаткам и резервам.
KYC/AML: on/off-ramp контрагенты, санкционный скрининг, SoF/SoW для крупных переводов.
DSAR/retention: хранение платежных следов и журналов переводов.
8) Метрики, SLO и алерты
8.1 KPI
Time-to-Payout (TtP) p95 по методам.
Time-to-Fund (TtF) p95 для пополнений пулов.
Stockout Rate L0 (инциденты недостатка мгновенной ликвидности).
Cash Utilization = Выплаты из L0 / Target_Balance.
Idle Cash % = (Баланс − Target_Balance) / Баланс.
Counterparty Concentration = max(доля по провайдеру).
FX Slippage bps, FX Cost/GGR.
Safeguard Coverage = min(баланс сегрегированных счетов / требуемая сумма).
8.2 Алерты
`Balance < LowWatermark` → P1 (автопополнение).
`Stockout Incident` → P0 (блок мгновенных выплат/включение альтернативы).
`Counterparty Concentration > лимита` → P2 (ребаланс).
`Safeguard Coverage < 100%` → P0.
`TtF p95 > SLO` → P1 (инцидент у банка/PSP).
9) Модель данных (казначейский «слой»)
json
{
"as_of": "2025-11-03T12:00:00Z",
"pocket_id": "PSP_MERCHANT_CARD_A",
"currency": "EUR",
"balance": 425000. 00,
"target_balance": 380000. 00,
"low_watermark": 300000. 00,
"inflows_t0": 52000. 00,
"outflows_t0": 61000. 00,
"expected_settlement_t1": 210000. 00,
"safeguard_required": 150000. 00,
"safeguard_balance": 160000. 00,
"counterparty": "Acquirer_A",
"limits": {
"counterparty_limit": 1200000. 00,
"fx_slippage_bps_limit": 5
},
"alerts": ["BALANCE_BELOW_TARGET"],
"notes": "Expect promo cash-out spike tonight"
}
Плоский факт-слой (для BI):
date, pocket_id, counterparty, currency,
balance, target_balance, low_watermark,
inflows_t0, outflows_t0, expected_settlement_t1,
safeguard_required, safeguard_balance,
payout_slo_p95_sec, fund_slo_p95_sec
10) SQL-срезы
10.1 Движение остатков и попадание в коридоры
sql
SELECT date,
pocket_id,
currency,
balance,
target_balance,
low_watermark,
CASE WHEN balance < low_watermark THEN 1 ELSE 0 END AS stockout_flag,
GREATEST(0, balance - target_balance) AS idle_cash
FROM treasury_balances_daily
ORDER BY date DESC, pocket_id;
10.2 Концентрация по контрагентам
sql
SELECT date,
counterparty,
SUM(balance) AS bal,
SUM(SUM(balance)) OVER (PARTITION BY date) AS bal_total,
(SUM(balance) / NULLIF(SUM(SUM(balance)) OVER (PARTITION BY date),0)) AS share
FROM treasury_balances_daily
GROUP BY 1,2
ORDER BY date DESC, share DESC;
10.3 Покрытие safeguarding
sql
SELECT date, pocket_id, currency,
safeguard_balance, safeguard_required,
safeguard_balance / NULLIF(safeguard_required,0) AS coverage_ratio
FROM treasury_balances_daily
WHERE safeguard_required > 0;
11) Дашборд (минимальные виджеты)
1. Heatmap карманов: `balance vs target vs low_watermark`.
2. Кассовая воронка: `inflows/outflows/settlements` по дням.
3. TtP/TtF p50/p95 по методам/провайдерам.
4. Counterparty concentration и алерты.
5. Safeguard coverage: 100%-линия, нарушения.
6. FX панель: slippage/стоимость, крупные конвертации.
12) Плейбуки
Всплеск выводов (cash-out wave)
Действия: увеличить Target_Balance в Payout_Pools, ускорить свип PSP→Bank_OPS, временно снизить лимиты вывода для high-risk, включить второй провайдер instant-выплат.
Задержка settlement у PSP
Действия: активировать StressRes, открыть кредитную линию/овердрафт, временно перераспределить выплаты на альтернативный рельс, эскалация в PSP.
Заморозка банка/биржи/кастоди
Действия: kill-switch переводов, перевод остатков на альтернативных контрагентов, запуск DR-плана, отзыв ключей/доступов, коммуникация с регулятором.
FX-шок / перевыполненный спрос в валюте
Действия: включить натурал-хедж (выплаты в той же валюте), ускоренный TWAP, перераспределить акции/бонусы в «домашней» валюте.
Нехватка safeguard-покрытия
Действия: немедленный свип средств на сегрегированный счет, блокировка необязательных выплат, отчет и подтверждение регулятору.
13) Тест-кейсы (UAT/Prod-готовность)
1. Stockout drill: симулировать пик выплат p99 → пул L0 остается ≥ low_watermark.
2. PSP settlement delay: +2 дня к T+N → StressRes покрывает, TtP не выходит за SLO.
3. FX TWAP идемпотентность: повтор вебхука котировки → 1 исполнение.
4. Safeguard breach: автоматический свип и блокировка non-critical платежей.
5. Counterparty cap: превышение лимита по провайдеру → алерт + авто-ребаланс.
6. Intraday sweep: баланс > Target_Balance + δ → свип в L2 и возврат при пороге.
14) Частые ошибки и как их избежать
Один провайдер на критичный рельс → отсутствие фейловера. Держите минимум два.
Отсутствие p-уровня в OpRes → резервы «на глаз» и частые stockout. Применяйте p95/p99.
Немаркированные safeguard-счета → смешение средств. Введите строгую сегрегацию и отчетность.
Игнор settlement-календаря → неверные целевые остатки. Автоматизируйте ingestion расписаний PSP.
Простой кэш в L0/L1 → высокая стоимость упущенной доходности. Настройте свипы в L2.
Нет единого «реестра карманов» → хаос остатков. Введите Pocket Registry.
15) Реестр карманов (Pocket Registry, API эскиз)
json
{
"pocket_id": "PAYOUT_POOL_EUR",
"type": "L0",
"counterparty": "Bank_X",
"currency": "EUR",
"segregated": false,
"prefund_required": true,
"slo": { "ttp_p95_sec": 60, "ttf_p95_min": 30 },
"limits": {
"low_watermark": 200000,
"target_balance": 350000,
"counterparty_limit": 1000000
},
"sweep_policy": {
"to_l2_when_idle_cash_over": 100000,
"intraday": true
}
}
Резюме
Устойчивое казначейство — это система, а не набор счетов: стратифицированные уровни ликвидности (L0–L3), управляемые резервы (OpRes/RegRes/StressRes), жесткие лимиты и SLO, прогнозирование потоков и автоматические prefunding/sweep-механики. Так вы даете бизнесу минимальный TtP, избегаете кассовых разрывов, снижаете стоимость капитала и одновременно соответствуете требованиям регуляторов и аудита.