Статусная модель заказа доставки
Диаграмма состояний
Описание состояний
Создание и оценка заказа
new
Начальное состояние заказа. Заказ только что создан в системе.
Переходы:
- →
estimated- успешно получена предварительная стоимость заказа - →
estimate_failed- не удалось рассчитать параметры заказа
estimated
Заказ успешно оценен. Рассчитана стоимость доставки, время и маршрут.
Переходы:
- →
pending- если передан параметрdeferred_till(отложенный поиск) - →
performer_lookup- если параметрdeferred_tillне передан, начинается немедленный поиск исполнителя
estimate_failed 🔴
Терминальный статус
Не удалось выполнить оценку заказа (невозможно построить маршрут, недоступна зона доставки и т.д.).
Отложенное выполнение
pending
Условие: Этот статус выставляется только если был передан параметр deferred_till (отложенный поиск).
Заказ ожидает наступления даты и времени, указанных в параметре deferred_till. Система находится в режиме ожидания и не начинает поиск исполнителя до наступления указанного времени.
Переходы:
- →
performer_lookup- наступило время, указанное вdeferred_till - →
cancellation_in_progress- инициирована отмена заказа
Основной поток выполнения заказа
performer_lookup
Система активно ищет доступного исполнителя для заказа.
Как попадаем:
- Из
estimated- еслиdeferred_tillне был передан (немедленный поиск) - Из
pending- когда наступило время, указанное вdeferred_till
Переходы:
- →
driving_to_pickup- исполнитель назначен и едет к точке забора - →
cancellation_in_progress- отмена заказа во время поиска исполнителя
driving_to_pickup
Исполнитель в пути к точке забора груза.
Переходы:
- →
arrived_to_pickup- исполнитель прибыл к точке забора - →
cancellation_in_progress- отмена заказа
arrived_to_pickup
Исполнитель прибыл к точке забора и ожидает передачи груза.
Переходы:
- →
picked_up- груз передан исполнителю - →
cancellation_in_progress- отмена заказа
picked_up
Груз получен исполнителем, начинается доставка.
Переходы:
- →
driving_to_dropoff- исполнитель едет к точке доставки - →
cancellation_in_progress- отмена заказа (может потребоваться возврат груза)
driving_to_dropoff
Исполнитель в пути к точке доставки с грузом.
Переход: → arrived_to_dropoff
arrived_to_dropoff
Исполнитель прибыл к точке доставки.
Переход: → dropped_off
dropped_off
Груз успешно доставлен получателю.
Переход: → done
done 🔴
Терминальный статус
Заказ успешно завершён. Доставка полностью выполнена.
Процесс отмены заказа
cancellation_in_progress
Начат процесс отмены заказа. Система обрабатывает отмену в зависимости от текущего состояния и причины отмены.
Переходы:
- →
cancelled- заказ отменён - →
performer_not_found- исполнитель не найден - →
driving_to_return- требуется возврат груза отправителю
performer_not_found 🔴
Терминальный статус
Не удалось найти исполнителя для заказа или исполнитель отказался от выполнения заказа.
cancelled 🔴
Терминальный статус
Заказ отменён по инициативе клиента, системы или по другим причинам.
Процесс возврата груза
driving_to_return
Исполнитель везёт груз обратно к точке отправления после отмены заказа.
Переход: → arrived_to_return
arrived_to_return
Исполнитель прибыл к точке возврата груза.
Переход: → returned
returned 🔴
Терминальный статус
Груз успешно возвращён отправителю после отмены заказа.
Терминальные состояния
Заказ завершает свой жизненный цикл при достижении одного из следующих терминальных состояний:
| Статус | Описание | Причина |
|---|---|---|
estimate_failed | Ошибка оценки | Не удалось рассчитать параметры доставки |
done | Успешное завершение | Заказ выполнен, груз доставлен |
performer_not_found | Исполнитель не найден | Не удалось назначить исполнителя |
returned | Груз возвращён | Груз возвращён отправителю после отмены |
cancelled | Заказ отменён | Отмена по инициативе клиента/системы |
Основные сценарии
✅ Успешная доставка (немедленный поиск)
Условие: deferred_till не передан
new → estimated → performer_lookup → driving_to_pickup →
arrived_to_pickup → picked_up → driving_to_dropoff → arrived_to_dropoff →
dropped_off → done [ТЕРМИНАЛЬНЫЙ]⏰ Успешная доставка (отложенный поиск)
Условие: передан параметр deferred_till
new → estimated → pending → [ожидание deferred_till] → performer_lookup →
driving_to_pickup → arrived_to_pickup → picked_up → driving_to_dropoff →
arrived_to_dropoff → dropped_off → done [ТЕРМИНАЛЬНЫЙ]❌ Отмена заказа
new → estimated → performer_lookup → driving_to_pickup →
cancellation_in_progress → cancelled [ТЕРМИНАЛЬНЫЙ]🔍 Исполнитель не найден
new → estimated → performer_lookup → cancellation_in_progress →
performer_not_found [ТЕРМИНАЛЬНЫЙ]🔄 Возврат груза после отмены
new → estimated → performer_lookup → driving_to_pickup →
arrived_to_pickup → picked_up → cancellation_in_progress →
driving_to_return → arrived_to_return → returned [ТЕРМИНАЛЬНЫЙ]⚠️ Неудачная оценка
new → estimated → estimate_failed [ТЕРМИНАЛЬНЫЙ]Параметры заказа
deferred_till
Тип: DateTime (ISO 8601)
Обязательный: Нет
Описание: Дата и время, до которого заказ должен находиться в состоянии pending перед началом поиска исполнителя.
Поведение:
- ✅ Передан →
estimated→pending→ (ожидание) →performer_lookup - ❌ Не передан →
estimated→performer_lookup(немедленный поиск)
Пример:
{
"deferred_till": "2024-01-15T14:30:00Z"
}Примечания
- Терминальные статусы:
estimate_failed,done,performer_not_found,returned,cancelled- из этих статусов переходы невозможны - Отложенный поиск: Статус
pendingиспользуется только при передаче параметраdeferred_till - Точки отмены: Заказ может быть отменён на этапах:
pending,performer_lookup,driving_to_pickup,arrived_to_pickup,picked_up - Возврат груза: Процесс возврата (
driving_to_return→arrived_to_return→returned) инициируется из состоянияcancellation_in_progress - Немедленное выполнение: Если
deferred_tillне передан, заказ минует статусpendingи сразу переходит к поиску исполнителя - Множественные исходы отмены: Из
cancellation_in_progressвозможны три варианта завершения:cancelled,performer_not_found, или процесс возврата с финальным статусомreturned