RGP Market · бэкенд · спецификация
Расширенный набор статусов и переходов для агентской схемы с мультипродавцом: заказ бьётся на под-заказы по продавцам, у каждого своя доставка, свой статус и свой холд выплаты.
Статусы разнесены по сущностям, чтобы не смешивать «оплату всего заказа», «сборку у одного продавца» и «возврат одной позиции».
| Сущность | Зачем | Где виден |
|---|---|---|
Order — заказ | Агрегат: одна оплата, одна корзина. Статус вычисляется из под-заказов. | покупатель |
SubOrder — под-заказ | Главная машина. Один продавец, один пакет, свой холд выплаты. | покупатель + продавец + админ |
Payment — оплата | Взаимодействие с ЮKassa / СБП / списанием баллов. | покупатель + бухгалтерия |
Shipment — отгрузка | Способ доставки, ПВЗ отправки/получения, трек, вебхуки службы. | продавец + покупатель |
Return — возврат | Заявка на возврат одной или нескольких позиций под-заказа, спор. | покупатель + продавец + модератор |
| Из | В | Событие / кто | Побочные эффекты |
|---|---|---|---|
new | paid | payment.succeeded (весь заказ оплачен) | под-заказ виден продавцу; резерв остатков подтверждён |
new | cancelled | таймаут оплаты 30 мин / покупатель | резерв остатков снят; заказ закрыт |
paid | confirmed | продавец подтвердил (≤ 24 ч, иначе автонапоминание → эскалация) | — |
paid / confirmed | cancelled | продавец (нет товара) или покупатель | полный возврат денег покупателю через ЮKassa; остатки возвращены; уведомления |
confirmed | packed | продавец собрал, создал отгрузку | создаётся Shipment; бронь ПВЗ отправки |
packed | shipped | продавец передал в службу / получен трек-номер | трек виден покупателю; старт трекинга по вебхукам |
shipped | in_transit → arrived | вебхуки службы доставки | обновление ETA у покупателя |
arrived | delivered | вебхук «вручено» / подтверждение получения покупателем | старт холда 14 дней и окна возврата 7 дней; кэшбэк/бонусы начисляются (позже) |
delivered | completed | прошло 14 дней без открытого возврата (фоновая задача) | сумма нетто продавца → в недельный реестр выплат; заказ-агрегат может стать completed |
delivered | return_requested | покупатель открыл возврат в течение 7 дней | холд по этому под-заказу заморожен до закрытия возврата |
PaymentPayment на весь Order; сумма к возврату собирается из закрытых возвратов и отменённых под-заказов.Return| Статус | Что происходит |
|---|---|
requested | Покупатель выбрал позиции и причину. Окно — 7 дней после delivered. |
approved / rejected | Продавец рассматривает ≤ 3 дней. Молчание → авто-approved. Отказ → покупатель может открыть dispute. |
shipping_back | Покупатель отправляет товар обратно (трек обязателен). |
received | Продавец принял и подтвердил состояние товара. |
refund_issued | Возврат денег через ЮKassa (полный или частичный); остатки возвращены на склад продавца. |
dispute → closed | Спор разбирает модератор: решение в пользу покупателя (refund_issued) или продавца (под-заказ → completed). |
Товар надлежащего качества (передумал, не подошёл): обратную доставку оплачивает
покупатель — это допускает ЗоЗПП. Уже оплаченная доставка «туда» не возвращается.
Брак / не то / не пришло: все расходы (доставка туда и обратно) — на продавце,
возврат 100%.
Настройка удержаний — параметр политики площадки (return_policy), спорные случаи
всегда идут к модератору.
| Таймер | Длительность | Действие по истечении |
|---|---|---|
| Оплата заказа | 30 мин от создания | все под-заказы new → cancelled, резерв снят |
| Подтверждение продавцом | 24 ч от paid | напоминание, затем эскалация админу (не авто-отмена) |
| Окно возврата | 7 дней от delivered | возврат больше не открыть покупателем |
| Холд выплаты | 14 дней от delivered | delivered → completed, нетто в недельный реестр |
| Реестр выплат | еженедельно | формируется список к выплате → ручное подтверждение админом → выплата |
| Рассмотрение возврата продавцом | 3 дня | авто-approved |
OrderВычисляется из статусов под-заказов, покупателю показывается один:
Статус Order | Правило |
|---|---|
awaiting_payment | есть Payment в pending |
processing | оплачен; есть под-заказы не в терминальном статусе |
partially_completed | часть под-заказов completed/refunded, часть ещё в работе |
completed | все под-заказы completed |
cancelled | все под-заказы cancelled (оплата не прошла или всё отменено до отгрузки) |
refunded | все под-заказы закрыты возвратом |
| Актор | Действия |
|---|---|
| Покупатель | оплатить; подтвердить получение; отменить (до packed); открыть возврат; открыть спор |
| Продавец | подтвердить/отклонить под-заказ; собрать и создать отгрузку; передать в доставку (трек); принять/отклонить возврат; принять возвращённый товар |
| Служба доставки | вебхуки: принято, в пути, в ПВЗ, вручено, возврат отправителю |
| ЮKassa | вебхуки: payment.succeeded, payment.canceled, refund.succeeded |
| Модератор / админ | решить спор; принудительно отменить под-заказ с возвратом; подтвердить недельный реестр выплат; ручные корректировки |
| Фоновые задачи | таймауты оплаты; закрытие холда; авто-approve возврата; формирование реестра; напоминания |
Спецификация к бэкенду RGP Market (Маркетплейс\backend\, отдельный сервис,
БД rgpmarket, api.rgpmarket.ru). Черновик — уточняется при реализации.
Партнёрские программы, блогеры, совместные закупки, кэшбэк — вне этой машины, добавляются позже.