GH GambleHub

Сеттлмент циклы и cut-off

1) Понятийная база

Settlement (сеттлмент) — расчет между PSP/Acquirer и мерчантом (оператором), при котором деньги по успешно захваченным транзакциям перечисляются на мерчантский счет.
Cut-off — ежедневный «срез» операций, попадающих в конкретный расчетный цикл (обычно фиксированное время в таймзоне провайдера).
T+N — типовая нотация задержки разнесения средств: T — дата cut-off, N — количество рабочих дней до фактического зачисления.

Примеры:
  • Карты (Visa/Mastercard): часто T+2/T+3 banking days, cut-off 23:00 UTC (примерно).
  • A2A / Open Banking: от T+0 до T+1.
  • SEPA Credit Transfer: T+1/T+2 (Instant — T+0).
  • ACH (US): T+2/T+3; Same Day ACH — T+0/T+1.
  • RTP (US): T+0, но возможны cut-off по отчетам.
  • Крипто: фактически T+0 по сети, но PSP может применять собственные funding окна (T+0/1).

2) Как работает cut-off и что в него попадает

1. Провайдер фиксирует окно сбора (например, 00:00–23:00 UTC).
2. Все settled/captured транзакции в этом окне попадают в пакет (batch).
3. К пакету агрегируются возвраты, чарджбеки, коррекции, чтобы рассчитать gross и net funding.
4. По наступлении cut-off формируется settlement file и стартует таймер T+N до зачисления.

Важно: авторизация без capture в пакет не попадает. Отмененные выводы — тоже нет.

3) Типы расчетов: gross vs net, резервы и комиссии

Gross settlement — перечисляется валовая сумма capture (минус отдельное списание комиссий).
Net settlement — провайдер удерживает fees, chargebacks, refunds, rolling reserve и перечисляет net amount.
Rolling reserve — удержание % оборота на N дней (например, 10% на 180 дней) для покрытия риска.
Negative carry-over — если «нетто» за день уходит в минус, дефицит переносится и погашается следующими циклами.

Рекомендация: хранить расшифровку обеих плоскостей — operational gross (по транзакциям) и funding net (по файлам провайдера).

4) Таймзоны, локальные выходные и DST

Cut-off определяется таймзоной провайдера, которая может отличаться от вашей.
Учитывайте DST (переход на летнее время) — срезы могут сдвигаться на ±1 час относительно локального времени.
Праздники/выходные в юрисдикции банка-получателя влияют на N в T+N (например, T+2 banking days превращается в T+4 вокруг праздников).
Практика: нормализуйте все технические времена в UTC, параллельно храните `provider_tz_cutoff_at` и `local_tz_posted_at`.

5) Settlement календарь (funding calendar) и SLA

Составьте календарь сеттлментов на квартал:
  • cut-off время и tz для каждого метода/PSP,
  • стандартный T+N и исключения (праздники),
  • ожидаемые суммы (прогнозы),
  • SLA получения: например, «не позднее 12:00 Europe/Kyiv в день T+2».

Любые отклонения SLA → алерт и тикет в Ops/Finance.

6) Взаимосвязь с Net Deposits и выводами

ND (чистые внесения) считается по settled транзакциям (см. связанную статью).
Выводы (withdrawals) не участвуют в funding от PSP по депозитам, но влияют на кассу мерчанта.
Планирование ликвидности: inflow по сеттлменту минус outflow по выплатам/налогам/операционным расходам.

7) Сверка (reconciliation) и артефакты провайдеров

Минимальный набор для каждой партии (batch):
  • `batch_id / settlement_id`, дата cut-off в tz провайдера,
  • суммы по типам: `captured_deposits`, `refunds`, `chargeback_debits`, `chargeback_credits`, `fees`, `reserve_delta`, `net_funding`,
  • расшифровка по методам/мерчант-аккаунтам (`MID`, `descriptor`, `MCC`),
  • референсы транзакций (`provider_tx_id`, `rrn`, `arn` — если карты),
  • файл(ы): CSV/XML/JSON + человекочитаемый statement (PDF/HTML).
Сверка идет в две стороны:

1. От транзакций к файлам (все, что мы считали, попало в файл?)

2. От файлов к транзакциям (все, что в файле, есть в нашей витрине? статусы совпадают?)

8) Специфика по рельсам оплаты (в общих чертах)

Карты: частые сценарии presentment delay; возможны поздние `chargeback` (до 120–540 дней по кейсу); interchange & scheme fees появляются в файлах, в ND не вычитаются.
SEPA/ACH: батчи зависят от банковских окон; отмены/возвраты имеют собственные коды; Same Day варианты — отдельные cut-off.
Open Banking / A2A: T+0/1, но файлы могут идти post-factum; необходимость строгих RPP/Unique ID для матчей.
RTP/Instant: деньги приходят быстро, но отчетный файл — по расписанию.
Крипто: ончейн-сетлмент мгновенный, но провайдер делает `payout windows`; хранить `fx_at_settle`.

9) Учет, проводки и отчетность (FI/Accounting)

9.1. Аккруал vs кэш-метод

Для управленческой отчетности часто применяется аккруал: признаем выручку/движение в момент `settled_at`.
Для казначейства/ДДС — кэш-метод: признаем по факту поступления `funded_at`.

9.2. Типовые проводки (упрощенно)

При `DEPOSIT_CAPTURED`:
  • Дт: Денежные средства в расчетах с PSP (AR: PSP)
  • Кт: Обязательства перед игроком (кошелек/баланс игрока)
При поступлении funding (net):
  • Дт: Банк (касса мерчанта)
  • Кт: Денежные средства в расчетах с PSP
  • Дт: Расходы (PSP fees), Дт/Кт: Резервы (если изменились)

Храните связку `transaction_id → batch_id → funding_id` для трассировки.

10) Риск-менеджмент и алерты

Missed file: нет settlement-файла до X:YY — P1.
Funding delay: T+N истек, денег нет — P1.
Delta thresholds: расхождение `our_gross` vs `file_gross` > 0.5% — P2; `fees` вне диапазона — P2.
Negative carry-over: серия отрицательных нетто-пакетов — расследование.
Holiday impact: автоматический прогноз с учетом календаря; если факт < 80% прогноза — тикет.

11) Модель данных (упрощенно)


finance. payment_transactions (
id, user_id, method, provider, mid, mcc,
type, status, amount_original, currency_original,
amount_reporting, reporting_currency, fx_rate_at_settle,
authorized_at, captured_at, settled_at,
provider_tx_id, arn, rrn, meta
)

finance. settlement_batches (
batch_id, provider, mid, method,
provider_cutoff_at, provider_tz,
period_start_at, period_end_at,
gross_captured, refunds, cb_debits, cb_credits,
fees, reserve_delta, net_funding_expected,
file_name, file_hash, file_type, meta
)

finance. funding_receipts (
funding_id, provider, bank_account,
received_at, value_date,
currency, amount_received,
batch_id, statement_ref, meta
)

-- Binding showcase:
finance. recon_links (
id, transaction_id, batch_id, funding_id, link_type, created_at
)

12) Примеры SQL-шаблонов

12.1. Регистрация «среза» по cut-off

sql
INSERT INTO finance. settlement_batches (
batch_id, provider, mid, method,
provider_cutoff_at, provider_tz,
period_start_at, period_end_at,
gross_captured, refunds, cb_debits, cb_credits,
fees, reserve_delta, net_funding_expected,
file_name, file_hash, file_type, meta
)
VALUES (:batch_id,:provider,:mid,:method,
:cutoff_at,:tz,
:start_at,:end_at,
:gross,:refunds,:cb_deb,:cb_cr,
:fees,:reserve_delta,:net_expected,
:file_name,:file_hash,:file_type,:meta::jsonb);

12.2. Сверка «от транзакций к файлу»

sql
WITH tx AS (
SELECT provider, mid, method,
SUM(CASE WHEN type='DEPOSIT' AND status IN ('CAPTURED','SETTLED') THEN amount_reporting ELSE 0 END) AS gross,
SUM(CASE WHEN type='REFUND' AND status='SETTLED' THEN amount_reporting ELSE 0 END) AS refunds,
SUM(CASE WHEN type='CHARGEBACK_DEBIT' AND status='SETTLED' THEN amount_reporting ELSE 0 END) AS cb_deb,
SUM(CASE WHEN type='CHARGEBACK_CREDIT' AND status='SETTLED' THEN amount_reporting ELSE 0 END) AS cb_cr
FROM finance. payment_transactions
WHERE settled_at >=:start_at AND settled_at <:end_at
GROUP BY 1,2,3
)
SELECT b. batch_id, b. provider, b. mid, b. method,
tx. gross AS our_gross, b. gross_captured AS file_gross,
tx. refunds AS our_refunds, b. refunds AS file_refunds,
tx. cb_deb AS our_cb_deb, b. cb_debits AS file_cb_deb,
tx. cb_cr AS our_cb_cr, b. cb_credits AS file_cb_cr
FROM finance. settlement_batches b
LEFT JOIN tx
ON tx. provider=b. provider AND tx. mid=b. mid AND tx. method=b. method
WHERE b. provider_cutoff_at BETWEEN:cutoff_from AND:cutoff_to;

12.3. Прогноз поступлений (cash-flow T+N)

sql
SELECT provider, mid, method,
DATE(provider_cutoff_at) AS t_date,
net_funding_expected,
CASE
WHEN EXTRACT (DOW FROM provider_cutoff_at)::int IN (5,6) THEN provider_cutoff_at + INTERVAL '3day' -- conditional example
ELSE provider_cutoff_at + INTERVAL '2 day'
END AS expected_funding_at
FROM finance. settlement_batches
WHERE provider_cutoff_at BETWEEN:from AND:to;

13) Процессы и SLO

SLO 1: импорт settlement-файлов — T+0, до 08:00 Europe/Kyiv.
SLO 2: первичная сверка — до 09:00, алерты по расхождениям >0.5%.
SLO 3: обновление cash-flow прогноза — до 10:00.
SLO 4: закрытие дня — все funding-матчи заведены в DWH.

14) Edge-cases и как их обрабатывать

Late presentment: транзакция попала в следующий batch — храните «факт источника» (`presented_in_batch_id`).
Partial capture: несколько capture на одну авторизацию — корректно агрегируйте в batch.
Multi-MID: один провайдер, разные MIDs по гео/брендам — не смешивать в одной партии.
Reprocessing: при косяке файла — версионирование `batch_revision` и полная пере-сверка.
FX-скачки: курсы — на `settled_at`; funding в иной валюте — заведите `fx_at_funding` и дельту.

15) Дашборды и KPI

Funding ETA: ожидаемая дата/время поступления vs факт.
Hit-rate SLA: доля файлов, пришедших вовремя.
Delta gross/net по провайдерам, методам, MIDs.
Fees % of volume, Reserve balance, Negative carry-over streak.
Holiday impact: прогноз vs факт по неделям с праздниками.

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

1. Нормализуйте время в UTC, но храните provider_tz cut-off.
2. Разделяйте operational gross и funding net; не путайте ND и funding.
3. Внедрите funding calendar с заранее внесенными праздниками по банкам.
4. Автоматизируйте импорт и сверку settlement-файлов + алерты на SLA/дельты.
5. Реализуйте версионирование партий (`batch_revision`) и детерминированный reprocess.
6. Введите single source of truth: связи `transaction ↔ batch ↔ funding`.
7. Сохраняйте ARN/RRN и эквайринговые поля для карт — критично для диспутов.
8. Прогнозируйте cash-flow с учетом выходных/праздников, резервов и комиссий.

17) Чек-листы внедрения

Данные и схемы

  • Таблицы `payment_transactions`, `settlement_batches`, `funding_receipts`, `recon_links`.
  • Поля таймзон: UTC + provider_tz.
  • Поля FX: `fx_rate_at_settle`, `fx_at_funding`.

Импорт и валидации

  • Парсеры CSV/XML/JSON + хэши файлов.
  • Валидация сумм/валют/дат; match по `provider_tx_id/ARN`.
  • Хендлеры «late presentment», «partial capture», «reversal».

Операции и алерты

  • SLA-монитор cut-off, missed files, funding delays.
  • Delta-пороговые алерты (gross, fees, net).
  • Отчет по holiday impact и negative carry-over.

18) FAQ

Q: Почему T+2 превратилось в T+4?
A: Были выходные/праздники в банке-корреспонденте или у банка-получателя; см. funding calendar.

Q: В файле net меньше, чем наш расчет net. Что смотреть?
A: Проверьте fees, reserve_delta, поздние refund/chargeback, и корректность курсов.

Q: Как учитывать крипту?
A: По фиатному эквиваленту на `settled_at`; funding может прийти в USDT/фиат — храните отдельный `fx_at_funding`.

Q: Можно ли один общий cut-off для всех провайдеров?
A: Нет, у каждого PSP свой tz/час. Делайте агрегирующую витрину поверх их срезов.

Резюме

Сеттлмент-циклы и cut-off — это «скелет» денежной логистики. Корректный учет T+N, таймзон, праздников, резервов и комиссий позволяет:
  • точно сверять провайдеров,
  • прогнозировать ликвидность и покрывать выплаты,
  • соблюсти SLA и сократить операционные риски,
  • говорить на одном языке с финансами и комплаенсом.

Внедрив единый funding calendar, строгую модель данных и автоматизированную сверку, вы сделаете денежный поток предсказуемым и управляемым.

Contact

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

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

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

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

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

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