GH GambleHub

RTP: модель конфигурирования

RTP (Return To Player) — процент теоретического возврата на длинной дистанции, заданный математикой игры/варианта. В продакшене RTP превращается в набор управляемых ограничений и сигналов: где, кому и при каких условиях разрешен тот или иной вариант математики (97/96/94/92 и т. п.), как считать фактический возврат, как реагировать на отклонения и как документировать изменения для комплаенса.

1) Термины и уровни

Theoretical RTP (tRTP) — заявленная математика варианта (сертифицированная).
Effective RTP (eRTP) — ожидаемый возврат в проде с учетом опций (джекпот-надбавка, bonus buy, side-bets, провайдерские комиссии).
Realized RTP (rRTP) — фактический возврат по окну времени/раундам (эмпирика).
RTP Variant — конкретный билд/профиль игры (например, 96.5%).
RTP Band/Policy — разрешенные диапазоны для юрисдикций/тенантов.

Цель модели: привязать разрешенный tRTP к контексту запуска (тенант, регион, валюта, канал) и уметь верифицировать eRTP/rRTP по SLO.

2) Измерения конфигурации (где задаем правила)

1. Провайдер / Game / Variant — что вообще поддерживается.
2. Тенант / Бренд — коммерческие и UX-решения (какие RTP показывать).
3. Регион / Юрисдикция — лицензии и регуляторные рамки.
4. Канал — web/native/retail/terminal (иногда различаются пулы/параметры).
5. Валюта — пересекается с джекпотами и комиссиями (влияют на eRTP).
6. Временные окна — промо-периоды, канареечные выкладки.

3) Иерархия, приоритеты, мердж

Правило наименьшей зоны действия побеждает (most specific wins):

GLOBAL_DEFAULT < PROVIDER < GAME < VARIANT < TENANT < REGION < CHANNEL < CURRENCY < WINDOW

Где отсутствует конкретизация — наследуем от родителя. Любое явное deny перекрывает allow на нижележащих уровнях.

4) Схема конфигурации (YAML, пример)

yaml rtp_config:
schema_version: 1 global_defaults:
allowed_bands: [96, 95, 94] # percentages rounded to whole min_band: 92 show_rtp_label: true # show RTP in the providers directory/card:
prag_play:
games:
gates_of_:
variants:
"96. 5": { status: "allow", label: "96. 5%" }
"94. 0": { status: "allow", label: "94%" }
"92. 0": { status: "deny" }
jackpot_uplift_bps: 35       # +0. 35% to eRTP with tenant pool active:
brand_eu:
regions:
EE:
bands_allow: [96, 94]
default_band: 96 channel:
web:  { bands_allow: [96], default_band: 96 }
retail:{ bands_allow: [94], default_band: 94 }
DE:
bands_allow: [94]
default_band: 94 compliance:
mandate_rtp_label: true currencies:
EUR:
fee_bps: 0 # impact on eRTP
TRY:
fee_bps: 10           # -0. 10% eRTP on paid rollout features:
canary:
brand_eu: { region: "EE", game: "gates_of_", variant: "96. 5", traffic_pct: 10, ends_at: "2025-11-07T00:00:00Z" }
sla:
monitoring_windows:
- { name: "daily",  duration_h: 24, min_rounds: 1_000 }
- { name: "weekly", duration_h: 168, min_rounds: 10_000 }
ertp_tolerance_bps: 50  # eRTP vs tRTP, ±0. 50% for information alerts rrtp_tolerance_bps: 150 # rRTP vs tRTP, ± 1. 50% on weekly window

5) Валидация перед публикацией

Сертификация варианта: у варианта есть валидный сертификат/ID билда.
Юрисдикционные рамки: выбранный band разрешен в регионе.
Совместимость фич: bonus buy/джекпот/side-bets не выводят eRTP за пределы.
UI-контракты: флаг `show_rtp_label`/обязательный лейбл для некоторых рынков.
Консистентность: есть дефолтный band на каждый контекст (чтобы не было «дыр»).
Dry-run: расчет eRTP по формулам и сравнение с SLO/толерансами.

6) Как считать eRTP

Базовая формула (концептуально):

eRTP = tRTP
+ jackpot_uplift
+ side_bet_uplift
- provider_fee
- platform_fee
- bonus_buy_friction
Где:
  • jackpot_uplift — надбавка от прогрессивного пула (bps, зависит от размера пула и ставки).
  • side_bet_uplift — ожидаемая доля от side-бетов (если применимо).
  • provider/platform_fee — фикс/процент на раунд/ставку, иногда завязан на валюту.
  • bonus_buy_friction — «трение» от механики покупки бонуса (если стоимость выше fair value).

Все термины и источники считаются детерминированно и логируются в событии конфигурации.

7) Влияние фич на RTP

Bonus Buy: может менять распределение исходов; фиксируйте eRTP для buy-режима отдельно.
Jackpot: eRTP зависит от накопления; допускайте диапазон eRTP, но держите контрольные точки (например, при росте пула каждые N% — пересчет).
Side Bets/Feature Bets: отдельные профили RTP; запрещайте их в регионах с ограничениями.
Volatility profile: RTP одинаковый, но дисперсия разная; храните профиль (low/med/high) рядом с band.

8) Каталог, запуск и адаптеры

Каталог/Read Model: храним `tRTP_band`, `eRTP_range`, `label`, флаги фич.
Game Launch: при запуске сессии адаптер проверяет разрешенный band для контекста; запрещает старт, если несовместимо.
Round Events: в события `Round.Started/Resulted` добавляем `rtp_context` (variant_id, band, flags) — это упростит аудит и метрики.

9) Мониторинг, SLO и дрейф

Метрики (per game/variant/tenant/region):
  • `rRTP_window_daily/weekly` — фактический возврат по окнам.
  • `rounds_count`, `stake_sum`, `win_sum`, `jackpot_contrib`.
  • `deviation_bps = rRTP - tRTP` и `rRTP - eRTP`.
  • `bonus_buy_share`, `side_bet_share` — чтобы понимать причину дрейфа.
  • `jackpot_level` и частота срабатываний.
Алерты:
Инфо:rRTP - eRTP> ertp_tolerance_bps (на суточном окне и достаточной выборке).
Майор:rRTP - tRTP> rrtp_tolerance_bps на недельном окне, выборка ≥ min_rounds.
Крит: серия майоров + операционные сигналы (ошибки провайдера, странные выигрыши).

10) Анти-абьюз и защита

Аномалии: резкие всплески выигрышей, последовательности feature buy → проверка по устройству/аккаунту/IP/сегменту.
Политики лимитов: временно отключать bonus buy/side bets при аномалиях.
Вендор-фид: сверять вероятность фичевых исходов с референсным фидом провайдера.
Семплинг ручных ревью: по играм с высокой дисперсией и частыми жалобами.

11) Комплаенс и прозрачность

Юрисдикции: список разрешенных band и обязательных маркировок (например, отображение RTP/возрастных предупреждений).
Сертификация/ID билда: храните ссылку на отчет, версию math profile.
Отчетность: выдавайте регуляторные отчеты с `tRTP`, `eRTP`, `rRTP` и событиями изменения.
UI/Контент: в карточке игры — корректный лейбл RTP и примечания (если eRTP зависит от джекпота).

12) Канареечные релизы и A/B

Canary: включайте новый band на 5–10% трафика в одной юрисдикции → следите за `rRTP`, `rounds_count`, жалобами.
A/B: сравнивайте конверсию/вовлеченность/ARPU при разных band бизнесово, не только по RTP.
Автооткат: при выходе rRTP за критические пороги — откат конфигурации.

13) Аудит и управление изменениями

Каждая правка в `rtp_config` публикует событие:
json
{
"event_type":"RTPConfigChanged",
"changed_by":"user@company",
"tenant_id":"brand_eu",
"scope":"regions. EE. games. gates_of_",
"old":{"default_band":94},
"new":{"default_band":96},
"reason":"licence_update_2025Q4",
"occurred_at":"2025-10-31T12:00:00Z"
}

Ведение неизменяемого журнала упрощает разбор споров и соответствие требованиям.

14) Тестирование

Contract tests: валидность схемы, наличие дефолтов, deny/allow логика.
Property-based: `eRTP` не выходит за разумные рамки для любых комбинаций фич.
Replay: прогон исторических раундов поверх новой конфигурации (оффлайн) → проверка отчетов.
Chaos: перезапуски адаптера, лаги джекпот-фида, пропуски фичевых флагов.
Golden set: набор игр/вариантов с эталонными расчетами eRTP.

15) Плейбуки (runbooks)

1. rRTP уехал ниже tRTP на неделе

Проверить выборку, долю bonus buy/side bets, актуальность джекпота и фид.
Отключить спорные фичи (флаг), уведомить провайдера, включить усиленный лог.
При необходимости временно переключить band/вариант.

2. Жалобы игроков на «нечестный RTP»

Отдать `as_of` конфигурации, ID билда, недельный rRTP и методику расчета.
Проверить сегмент игрока на ограничения/лимиты/ответственную игру.

3. Несоответствие маркировок UI

Сравнить `rtp_label` с конфигом для контекста, откатить витрину, запустить e2e валидацию.

4. Сбой джекпота

Отключить uplift/лейблы, фиксировать separate accounting, держать игрока в курсе статуса.

16) Типичные ошибки

Смешивать tRTP и eRTP: показывать теорию там, где практика зависит от джекпота/фич.
Отсутствие дефолтов → игра запускается с «дырявым» контекстом.
Конфиг «на провайдера в целом» без конкретики по вариантам/юрисдикциям.
Нет порогов выборки → ложные алерты по rRTP на малых данных.
Изменения без аудита и канареек → инциденты сразу на всех рынках.
Игнорирование комиссий/fees в eRTP → расхождение ожиданий и факта.

17) Чек-лист перед продом

  • У каждого Variаnt есть сертификат/ID и зафиксированный tRTP.
  • Для каждой комбинации (tenant/region/channel) задан default_band.
  • Рассчитан eRTP (джекпот, фичи, fees) и проходит толерансы.
  • Лейблы RTP и требования юрисдикций корректно отражены в UI.
  • Мониторинг rRTP/eRTP и пороги по выборке включены; алерты настроены.
  • Канареечные выкладки для новых band; автооткат.
  • Аудит изменений и экспорт отчетов для регулятора.
  • Плейбуки на дрейф, спорные выигрыши, сбой джекпота.
  • Тесты: контракт/пороговые/property/реплей.

Заключение

Модель конфигурирования RTP — это не «процент в карточке игры», а система управления риском и доверием. Четкая иерархия правил, детерминированный расчет eRTP, наблюдаемость rRTP, канареечные релизы и строгий аудит превращают спорную тему в предсказуемый инженерный процесс — удобный для продукта, понятный игрокам и безопасный для комплаенса.

Contact

Свяжитесь с нами

Обращайтесь по любым вопросам или за поддержкой.Мы всегда готовы помочь!

Telegram
@Gamble_GC
Начать интеграцию

Email — обязателен. Telegram или WhatsApp — по желанию.

Ваше имя необязательно
Email необязательно
Тема необязательно
Сообщение необязательно
Telegram необязательно
@
Если укажете Telegram — мы ответим и там, в дополнение к Email.
WhatsApp необязательно
Формат: +код страны и номер (например, +380XXXXXXXXX).

Нажимая кнопку, вы соглашаетесь на обработку данных.