1.9 KiB
1.9 KiB
D-009. Заказы, платежи, движения по счёту; всё через баланс
Статус: принято, 20.10.2026.
Контекст
У пользователя есть счёт. Заказ можно оплатить картой, с баланса или частично. Нужна ручная оплата из админки, которая запускает те же действия, что и настоящая.
Решение
- Три сущности: Заказ (что покупают), Платёж (деньги извне), Движение по счёту (неизменяемые записи «+» и «−»).
- Любой успешный платёж зачисляется на баланс, любой заказ списывается с баланса.
- Одна точка проведения
processPayment, идемпотентная. - Ручная оплата — платёжная система
manual. Платёж проводится, когда получает статусsucceeded. Галочки «провести как реальную» нет. - Корректировка баланса — отдельная операция: только движение, без цепочки действий.
Рассмотренные варианты
- Одна сущность «транзакция» — смешивает коммерческий документ, деньги провайдера и баланс; сложно с частичной оплатой и повторами вебхуков.
- Галочка «провести как реальную оплату» — не нужна: проведение запускает смена статуса.
Последствия
Правило «списывается только разница с балансом» получается само. Подробно — 04-billing.md.