Процесс
Платежи: пополнение, резервы и возвраты
Баланс меняется только после проверенного серверного события. Бронь, энергия и возврат резерва отражаются отдельными проводками.
Последовательность
Основной и альтернативный потоки
Схема показывает только ключевые события; детали ошибок перечислены ниже.
На узком экране прокручивается по горизонтали
Отрисовываем схему…
Все действия на портале демонстрационные. Внешние системы не вызываются.
Состояния
Машина состояний
Недопустимые переходы должны блокироваться проверками, а не только интерфейсом.
На узком экране прокручивается по горизонтали
Отрисовываем схему…
Неопределённый результат команды не должен превращаться в успех.
Шаги процесса
1
Создание попытки
Сумма, назначение, провайдер и ключ идемпотентности.
Актор: Backend
2
Проверка webhook
Подпись, внешний event ID, сумма и заказ.
Актор: Backend
3
Проводка
Только после подтверждения; повтор не создаёт второй эффект.
Актор: Кошелёк
4
Резерв
Доступный баланс уменьшается на сумму активного резерва.
Актор: Кошелёк
5
Финализация
Фактическая энергия списывается, остаток резерва освобождается.
Актор: Backend
6
Возврат
Отдельная обратная операция с причиной и связью.
Актор: Backend
Правила
- Деньги — целые минимальные единицы, без плавающей точки.
- Проводка неизменяема; корректировка — отдельная запись.
- Резерв не может сделать доступный баланс отрицательным.
- Ошибка кассы не удаляет сессию и платёж.
Отказы и граничные случаи
| Случай | Поведение | Денежный эффект | Тест |
|---|---|---|---|
| Повторный webhook | Событие дедуплицируется, новая проводка не создаётся. | Нулевой дополнительный эффект. | AT-04 |
| Позднее подтверждение | Сопоставляется с операцией; при конфликте — сверка. | Возврат/сверка. | AT-04 |
| Ошибка кассы | Чек в статусе error, очередь повтора, история доступна. | Списание и сессия сохранены. | AT-11 |