Утверждён вариант B для отменённых: строка в БД остаётся, в активных её нет, в архиве фильтр.
Срыв матча до in_progress заказ не отменяет: тот же orders возвращается в published, клиент продолжает поиск. Из in_progress заказ в поиск не возвращается.
На published полная отмена клиентом без причины.
| Статус | Клиент | Исполнитель | Система / админ |
|---|---|---|---|
draft |
удалить черновик | — | — |
published |
отмена без причины (ожидающий запрос снимается) | — | «исполнитель не найден» (срочный — 24 ч без действий клиента, плановый — дата начала); админ |
in_negotiation |
отмена с причиной | только «отклонить партнёра» → поиск | админ |
awaiting_payment |
отмена с причиной (платёж вернуть) | только «отклонить партнёра» → поиск (платёж вернуть) | админ |
in_progress, плановый до planned_start_at |
отмена с причиной | отмена с причиной | админ |
in_progress после начала |
только спор | только спор | админ |
completed |
— | — | — (только спор / апелляция) |
disputed |
— | — | закрытие спора админом |
Заказ остаётся, статус published:
in_negotiation, awaiting_payment);Создаётся новый заказ с копией фильтра (категория, тариф, количество, адрес, координаты, описание, search_mode, дата и время начала если плановый, режим расчёта). Связь: repeated_from_order_id. Новый заказ в published без кандидата или в draft, если клиент не отправил сразу.
Доступно с:
cancelled (любая причина, включая системную и админскую);completed — после подтверждения исполнения обеими сторонами (или автоподтверждения).После закрытия спора/апелляции в cancelled или принятый completed — та же кнопка. Вернуть исходный заказ в published после in_progress нельзя.
POST /orders/{id}/repeat.Таймаут неоплаты не требует repeat: заказ уже снова в поиске.
При отмене с причиной:
cancel_reason_codecancel_reason_text (для other)cancelled_by_user_idcancelled_by_role (client |
executor |
system |
admin) |
Системная и админская отмена — без кода из справочника. Исход cancelled после спора выставляет админ. На disputed кнопки отмены нет.
Отказ партнёра без отмены заказа — в order_candidates (reject_reason_code / reject_reason_text).