Статусы заказа

Обработка заказа и переходы статусов в схеме DBS.

Статусы и ключевые правила

Статусы заказа DBS

NEWНовый заказ — поступил на склад продавца
CONFIRMEDПодтверждён продавцом, можно начинать сборку
PACKEDУпакован, готов к передаче в доставку / ПВЗ
DELIVERINGКурьер или СД везут покупателю, либо товар едет в ПВЗ / на точку C&C
READY_FOR_PICKUPОжидает выдачи в ПВЗ или на точке самовывоза; если покупатель не забрал заказ или отказался — переход в CANCELLED
DELIVEREDДоставлен / выдан покупателю
CANCELLEDОтменён — через cancellation/* (запрос покупателя) или status/update (мерчант)

Типы доставки

COURIERКурьер до адреса — address_tail обязателен. Цепочка через DELIVERING
PICKUP_POINTДоставка в ПВЗ — provider_location_id; NEW → CONFIRMED → PACKED → DELIVERING → READY_FOR_PICKUP → DELIVERED или CANCELLED** (не забрал или отказался)
CLICK_AND_COLLECTСамовывоз с точки продавца — NEW → CONFIRMED → PACKED → DELIVERING или READY_FOR_PICKUP → DELIVERED или CANCELLED (не забрал или отказался)

Ключевые правила интеграции

Единица работыОдин заказ = один товар. Нет отгрузок и грузомест (в отличие от FBS).
Инфраструктураlocation/create → polygon/create → polygon/bind — зона, стоимость и слоты доставки; см. сценарий 0. Дополнительно: location/archive, polygon/delete, polygon/list
Остатки и ценыДо начала работы: product/stock/update — остатки на каждый склад (items[] с location_id); product/price/update — цены (items[]). Чтение: product/stock/info, product/price/info
ОпросНа MVP: order/dbs/list. В будущем: order/dbs/status/list для событий (filter.updated_at, status), order/dbs/list для деталей. Webhook в API нет.
Карточка заказаitem_type: PRODUCT или SERVICE; для услуги — linked_merchant_order_ids. Поле actions — разрешённые действия (сейчас cancel)
Экземплярыexemplar/set — опционально, если есть необходимость. Один объект exemplar; сверять с requirements в карточке заказа
СлотыЗадаются на полигоне (delivery_options.time_slots). Покупатель выбирает слот на витрине; витрины могут накладывать свои ограничения. timeslot/set — позволяет мерчанту изменить дату или интервал доставки
Адрес и слотСлот и дату можно изменить, если это согласовано с клиентом (timeslot/set); адрес — по договорённости (delivery-address/set)
Код врученияhandover-code/set — опционально, тело handover_codes[] с merchant_order_id + code. По договорённости витрины и мерчанта код можно передать покупателю или витрине; курьер получает код от мерчанта напрямую, не через API
Трек СДdelivery-provider/update — внешний трек-номер
ОтменаПокупатель → витрина → cancellation/list + cancellation/update. Мерчант → status/update → CANCELLED
Возвратыreturn/list, return/get, return/dbs/status/set, return/dbs/timeslot/set
State machineДопустимые переходы в спецификации не описаны — ниже предлагаемая таблица
Ошибки APIHTTP 400, 401, 429, 500; тело ApiError: error_type, code, message, details

Предлагаемая state machine заказа DBS

Рекомендация для спецификации, не официальная часть API. Таблица отражает логику сценариев из этой инструкции. Реализация витрины может отличаться до фиксации в спецификации.

Допустимые переходы

ИзВКто инициируетУсловия / примечания
NEWCONFIRMEDMERCHANTМерчант принял заказ в работу (status/update)
NEWCANCELLEDMERCHANTstatus/update → CANCELLED (отмена мерчантом)
NEWCANCELLEDCLIENT / MARKETЧерез cancellation/* → APPROVED_CANCEL (запрос покупателя через витрину)
CONFIRMEDPACKEDMERCHANTЗаказ собран; exemplar/set — опционально, если есть необходимость
CONFIRMEDCANCELLEDMERCHANTstatus/update → CANCELLED
CONFIRMEDCANCELLEDCLIENT / MARKETЧерез cancellation/update → APPROVED_CANCEL
PACKEDDELIVERINGMERCHANTКурьер, внешняя СД, ПВЗ и C&C. Опционально handover-code/set; для СД — delivery-provider/update
PACKEDREADY_FOR_PICKUPMERCHANTВторой допустимый путь для PICKUP_POINT и CLICK_AND_COLLECT: из PACKED сразу в READY_FOR_PICKUP, без DELIVERING. Дальше DELIVERED или CANCELLED (не забрал или отказался).
PACKEDCANCELLEDMERCHANTstatus/update → CANCELLED
DELIVERINGDELIVEREDMERCHANTФакт вручения курьером или СД. Для курьерки из DELIVERING в рекомендуемой цепочке дальше DELIVERED**
DELIVERINGPACKED или CANCELLEDMERCHANTПо согласованию мерчанта и витрины: недозвон, отказ у двери, перенос. Куда именно — PACKED или CANCELLED — зависит от бизнес-процесса мерчанта. Ограничения у каждой витрины свои, детализацию обсуждают при проектировании
DELIVERINGREADY_FOR_PICKUPMERCHANTPICKUP_POINT и CLICK_AND_COLLECT: товар передан в ПВЗ или на точку
READY_FOR_PICKUPDELIVEREDMERCHANTПокупатель забрал заказ
READY_FOR_PICKUPCANCELLEDMERCHANTПокупатель не забрал заказ или отказался от заказа (status/update)
DELIVERED——Терминальный статус
CANCELLED——Терминальный статус

Нерекомендуемые переходы

Технически API может принять и другие смены статуса, но для корректного понимания жизненного цикла заказа мерчантом не рекомендуется пропускать этапы или смешивать ветки доставки:

ПереходПочему не рекомендуется
NEW → PACKED / DELIVERING / DELIVEREDПропуск подтверждения и подготовки — затрудняет учёт на складе
CONFIRMED → DELIVERING / DELIVEREDБез статуса PACKED не отражён факт сборки
PACKED → DELIVERED (курьер)Для COURIER ожидается промежуточный DELIVERING
Любой → из DELIVERED / CANCELLEDТерминальные статусы

Предусловия перед ключевыми статусами

Целевой статусРекомендуемые предусловия
PACKEDexemplar/set — опционально, если есть необходимость (например IMEI/маркировка в requirements)
DELIVERINGСтатус PACKED; для внешней СД — delivery-provider/update
READY_FOR_PICKUPСтатус PACKED или DELIVERING; физическая передача в ПВЗ или на точку C&C
DELIVEREDИз DELIVERING или READY_FOR_PICKUP
CANCELLEDЛибо cancellation/update → APPROVED_CANCEL (покупатель), либо status/update → CANCELLED (мерчант); в т.ч. из READY_FOR_PICKUP, если покупатель не забрал заказ или отказался