Перейти к содержимому
Платежи
Процесс

Платежи: пополнение, резервы и возвраты

Баланс меняется только после проверенного серверного события. Бронь, энергия и возврат резерва отражаются отдельными проводками.

Последовательность

Основной и альтернативный потоки

Схема показывает только ключевые события; детали ошибок перечислены ниже.

На узком экране прокручивается по горизонтали
Отрисовываем схему…
Все действия на портале демонстрационные. Внешние системы не вызываются.

Состояния

Машина состояний

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

На узком экране прокручивается по горизонтали
Отрисовываем схему…
Неопределённый результат команды не должен превращаться в успех.

Шаги процесса

1
Создание попытки
Сумма, назначение, провайдер и ключ идемпотентности.
Актор: Backend
2
Проверка webhook
Подпись, внешний event ID, сумма и заказ.
Актор: Backend
3
Проводка
Только после подтверждения; повтор не создаёт второй эффект.
Актор: Кошелёк
4
Резерв
Доступный баланс уменьшается на сумму активного резерва.
Актор: Кошелёк
5
Финализация
Фактическая энергия списывается, остаток резерва освобождается.
Актор: Backend
6
Возврат
Отдельная обратная операция с причиной и связью.
Актор: Backend

Правила

  • Деньги — целые минимальные единицы, без плавающей точки.
  • Проводка неизменяема; корректировка — отдельная запись.
  • Резерв не может сделать доступный баланс отрицательным.
  • Ошибка кассы не удаляет сессию и платёж.

Отказы и граничные случаи

СлучайПоведениеДенежный эффектТест
Повторный webhookСобытие дедуплицируется, новая проводка не создаётся.Нулевой дополнительный эффект.AT-04
Позднее подтверждениеСопоставляется с операцией; при конфликте — сверка.Возврат/сверка.AT-04
Ошибка кассыЧек в статусе error, очередь повтора, история доступна.Списание и сессия сохранены.AT-11

Приёмка

Решения

Следующий потокЗарядка: старт, телеметрия, остановка