GH GambleHub

Ієрархія лімітів

Ліміт - це формалізоване обмеження операції в часі/обсязі/вартості. У iGaming і фінтехе ліміти - основа безпеки, відповідності регуляціям і управління ризиками. Ієрархія лімітів задає, чиє правило головніше і де воно виконується, щоб не допустити подвійної витрати, перевищення ставок/депозитів, зловживань бонусами і порушень відповідальної гри.

1) Класифікація лімітів

За силою застосування

Hard - непереборні (заборона операції).
Soft - попередження/фрикція (капча, підтвердження), ескалація до hard при повторі.

За природою

Грошові: сума депозиту/ставки/виплати; денні/тижневі/місячні межі.
Тимчасові: тривалість сесії, перерви, «охолодження», тайм-аути.
Кількісні: число транзакцій, спінів, запитів API.
Швидкісні (rate limits): RPS/конкурентність.
Квоти: бюджет дій за вікно (N на добу/тиждень).
Контекстні: по грі/провайдеру/методу оплати/пристрою/країні.

За власником

Регуляторні/брендові (тенант/регіон)

Системні (платформа, захист інфраструктури)

Призначені для користувача (self-limits в рамках RG)

2) Вимірювання та ключі (scoping)

Кожен ліміт прив'язується до контексту (ключа):

tenant_id · region · license · currency · channel · brand player_id · kyc_tier · rg_state · age game_id · provider_id · product (casino/sports/live)
payment_method · device_fingerprint · ip_asn

Чим точніше ключ, тим вище пріоритет (див. ієрархію нижче).

3) Ієрархія та пріоритети (most specific wins)

Впорядкуємо рівні від загального до приватного:

GLOBAL_DEFAULT
< TENANT/BRAND
< REGION/LICENCE
< PRODUCT/PROVIDER/GAME
< CURRENCY/CHANNEL/PAYMENT_METHOD
< PLAYER (KYC/RG)
< SESSION/DEVICE
<REQUEST (idempotency-key operation)
Правила:
  • Більш вузький контекст перекриває широкий: player > region.
  • Будь-яке явне deny перемагає allow.
  • Конфлікти soft/hard вирішуються на користь hard.
  • При мерджі квот/вікон перемагає мінімально допустиме значення (min-cap).

4) Модель даних (спрощено)

sql
CREATE TABLE limits (
id      bigserial primary key,
scope jsonb, -- context keys (tenant, region, player_id,...)
kind     text,     -- bet_amount, deposit_daily, rps_api, payout_single, session_duration type     text,     -- HARD      SOFT      QUOTA     RATE value numeric, -- sum/qty/seconds/ops window_sec int, -- for QUOTA/RATE, else null burst int, -- for RATE token-bucket currency text, -- if applicable reason_code text, -- regulator/product/security valid_from timestamptz,
valid_to   timestamptz,
priority int default 0, -- manual specificity overlide created_by text,
created_at  timestamptz default now()
);

CREATE TABLE limit_counters (
key_hash   text primary key,  -- hash(scope,kinda,window_start)
window_start timestamptz,
consumed numeric, -- money/pcs/sec updated_at timestamptz
);

Ідемпотентність: всі операції несуть'operation _ id'; інкремент лічильника виконується один раз (inbox/outbox або compare-and-swap за версією).

5) Алгоритм оцінки (evaluation)

1. Збір кандидатів по «kind» і перетину «scope».
2. Ранжування за специфічністю (число збіглися вимірювань) і «priority».
3. Мердж параметрів: жорсткість (hard> soft), min-cap, min-window.
4. Перевірка квот/рейт-ліміту: токен-бакет (RATE) + фікс/ковзне вікно (QUOTA).
5. Рішення: `ALLOW | SOFT_WARN | DENY` + `retry_after`/`remaining`.
6. Запис сліду: аудит події та метрики.

Псевдокод result-контракту:
json
{
"decision":"DENY",
"kind":"deposit_daily",
"remaining":0,
"window_reset_at":"2025-10-31T21:00:00Z",
"matched_limit_id":12345,
"policy":"REGULATORY",
"reason":"DAILY_CAP_REACHED"
}

6) Точки застосування (enforcement points)

API Gateway - захист інфраструктури: RATE (RPS), CONCURRENCY, burst.
Доменні сервіси - смислові ліміти: депозити, ставки, виплати, сесії.
Провайдерські адаптери - дублюючі/локальні ліміти провайдерів (валідувати до виклику).
Клієнтський UX - превентивні підказки (SOFT), «залишилося N», таймери.

Правило: одного разу списуємо квоту/токени - там, де операція стає незворотною (після резервування гаманця/валідного автентифікованого кроку).

7) Грошові ліміти: депозит/ставка/виплата

Per currency: зберігайте ліміти у валюті операції, а не через FX «на льоту».
Min/Max: `min_bet`, `max_bet`, `max_payout_single`.
Вікна: 'deposit _ daily/weekly/monthly'з фіксованими кордонами (наприклад, в таймзоні ліцензії).
Композиція: підсумковий дозволений діапазон = перетин (регіональні ∩ брендові ∩ призначені для користувача).

8) Відповідальна гра (RG)

Self-limits (гравець задав сам) завжди жорсткіше брендових.
Тимчасові обмеження: `session_duration`, `cool_off`, `self_exclusion`.
Ескалація: перевищення soft-ліміту → попередження, повтор → hard (в рамках вікна).
Аудит: кожна зміна RG фіксується незатираемо (хто/коли/чому).

9) Rate limit vs Quota: коли що

Rate limit (token-bucket/leaky): захист від сплесків; застосовувати на gateway/адаптерах.
Quota (fixed/sliding window): управління сумарним бюджетом дій/грошей; застосовувати в домені (deposit_daily, bet_count_hourly).
Часто використовуються разом: 'RATE'( миттєві піки) +'QUOTA'( добовий бюджет).

10) Мульти-тенант і мульти-регіон

Ліміти завжди містять'tenant _ id'і'region/licence'.
Residency: лічильники і зберігання - в «домашньому» регіоні.
Fairness: розділяйте пули RATE/QUOTA per tenant, щоб «галасливий» не зривав SLO інших.

11) Ідемпотентність і консистентність

Команди з'operation _ id'; повтор не повинен збільшувати'consumed'.
Для грошей - strict path: резерв гаманця та інкремент counters в одній транзакції/сазі (TCC).
Для RATE - використовуйте атомарні інкременти/склади поточне вікно.

12) Спостережуваність

Метрики:
  • `limit_eval_p95_ms`, `decision_rate{ALLOW,DENY,SOFT}`,
  • 'quota _ remaining _ percent'за основними видами,
  • `rate_throttled`, `burst_dropped`,
  • `rg_self_limit_hits`, `regulatory_hits`.

Логи/трейсинг: `matched_limit_id`, `scope_hash`, `operation_id`, `window_start/reset`, `remaining`.

Алерти: зростання'DENY '/' 429'понад порог, часте досягнення регуляторних капів, «hot key» по гравцеві/пристрою.

13) Версіонування та аудит

Кожне правило - з'valid _ from/valid _ to','created _ by','reason _ code'.
Події: `LimitCreated/Updated/Deleted`, `LimitHit`, `LimitDenied`.
Зберігайте «знімок» активних правил для відтворення історичних рішень (dispute-ready).

14) Тестування

Contract tests: схема і мердж специфічностей/пріоритетів.
Property-based: «most specific wins», «deny перемагає allow», «min-cap».
Golden cases: набір еталонних конфліктів (тенант vs регіон, RG vs бренд).
Chaos: сплески запитів (RATE), гонки по лічильниках, повтор команд (ідемпотентність).
E2E: матчинги лімітів на чек-листах регулятора (депозит/тиждень/місяць).

15) Плейбуки

1. Шторм 429/throttling на gateway

Знизити concurrency, збільшити токен-бакет тимчасово, включити пріоритизацію критичних шляхів, проаналізувати джерела (ASN/IP).

2. Масові відмови щодо регуляторного ліміту

Перевірити розклад вікон і таймзону; пролонгувати soft-UX (пояснення), повідомити комплаєнс.

3. Помилково-позитивні відмови через перегони

Включити серіалізацію по ключу'player _ id/kind', перейти на CAS/дедуп по'operation _ id'.

4. Розбіжність з провайдерським лімітом

Синхронізувати min/max per game, додати передвалідацію в адаптер, тимчасово знизити каталог/плейсмент гри.

16) Типові помилки

Відсутність ієрархії → «перетягування каната» між правилами.
Обчислення лімітів в UI без серверної валідації.
Підміна квот рейт-лімітами (і навпаки).
Ігнорування валют/кроків при грошових лімітах (CLP/JPY).
Немає ідемпотентності → подвійне списання квоти.
Єдиний пул RATE на всіх тенантів → шейрінг проблем.
Відсутність аудиту → неможливо пояснити відмову.

17) Швидкі рецепти

Прийом ставки: 'max _ bet'= min (регіон, гра, провайдер, користувацький RG); RATE на '/bets. place'= 20 rps/player, QUOTA = 500 ставок/день.
Депозити: `deposit_daily/monthly` + `deposit_single`; пред-валідувати PSP-ліміти.
Сесії: 'session _ duration'hard + нагадування кожні N хвилин (soft).
API-захист: глобальний RATE за ключами'ip _ asn'і'tenant _ id'; канаркові вікна для релізів.

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

Зафіксована ієрархія специфічності і політика мерджа (most specific wins, deny> allow).

  • Модель даних з'scope','kind','type', вікнами, валютами і пріоритетами.
  • Точки застосування: gateway (RATE), домен (QUOTA/грошові), адаптери (провайдерські).
  • Ідемпотентність ('operation _ id') і серіалізація за ключами; лічильники атомарні.
  • Спостережуваність: метрики рішень, лаги вікон, алерти; трасування з'matched _ limit _ id'.
  • Версіонування і незмінний аудит змін і спрацьовувань.
  • Тест-пакет: contract/property/golden/chaos/E2E.
  • Мульти-тенант fairness і data residency дотримані.
  • UX для SOFT-лімітів: зрозумілі повідомлення,'remaining/retry _ after'.
  • Плейбуки інцидентів узгоджені з комплаєнсом і підтримкою.

Висновок

Ієрархія лімітів - це система прийняття рішень, а не набір розрізнених чисел. Чітка специфічність і порядок пріоритетів, єдина модель даних, правильні точки застосування, ідемпотентність і спостережуваність перетворюють ліміти в надійний контур безпеки і відповідності, який масштабується по тенантах, регіонах і продуктах - і не заважає зростанню.

Contact

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

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

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

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

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

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