Как собирается выдача машин для клиента. Сценарий — USER_SCENARIOS.md.
Календаря занятости нет. Система не считает, свободна ли машина по времени. Для срочного заказа единственный признак доступности — ручной флаг исполнителя «принимаю срочные заказы».
Клиент заполняет (экран фильтра / черновик / будущий заказ), затем ищет.
| Поле | Обязательно | Смысл |
|---|---|---|
category_id |
да | тип транспорта из machinery_categories |
pricing_type |
да | тариф, разрешённый категории |
quantity |
да | часы / смены / сутки / месяцы / рейсы / км |
search_mode |
да | urgent или planned |
planned_start_at |
только для planned |
дата и время начала, выбирается в календаре; справочно для исполнителя, на выдачу не влияет |
lat, lng |
да | точка работ (для расстояния) |
description |
нет | свободный текст для исполнителя, на выдачу не влияет |
max_amount |
нет | потолок посчитанной цены |
radius_km |
нет | фильтр по дистанции |
У urgent даты нет. У planned только дата и время начала, без окончания. Длительность и занятость из тарифа и количества не выводятся.
Стоимость по карточке: machinery_pricing_rules.base_rate выбранного тарифа × quantity. Клиент сумму не вводит. Какие тарифы вообще доступны — задаёт тип транспорта (TARIFF_TYPES.md): у одних часы/смены/месяцы, у других километры и рейсы.
Карточка выдачи — единица транспорта: фото, локация, расстояние, посчитанная цена, имя и аватар исполнителя, средняя оценка и число публичных отзывов. Контактов нет.
Единица попадает в выдачу, если одновременно:
pricing_type;search_mode = urgent — у владельца accepts_urgent_orders = true; для planned флаг не проверяется;executor_subscription_enabled — подписка active (пока флаг выключен, проверка не действует);license_category не пустой — у исполнителя лицензия на эту категорию в статусе approved;declined / auto_declined / expired / negotiation_rejected / terms_expired по exclude_for_order_id (поиск в рамках существующего заказа);max_amount — base_rate × quantity ≤ max_amount;radius_km — дистанция ≤ радиуса.Текущие заказы исполнителя (в переговорах, в работе, в споре) на выдачу не влияют. Один исполнитель может одновременно получить несколько запросов от разных клиентов; что с ними происходит при принятии — ORDER_STATE_MACHINE.md, раздел 6.1.
Список: по расстоянию от точки работ до локации машины, по возрастанию (первый — ближайший).
При одинаковом расстоянии (округление до 0.1 км) — меньшая посчитанная цена.
Внутренний рейтинг в сортировке не используется и в UI не показывается.
Клиент сужает выдачу фильтрами (это параметры того же запроса, не отдельный ранжирующий ключ):
radius_km);max_amount).Смена тарифа или количества — перезапрос: цена пересчитывается на сервере. Смена даты планового заказа выдачу не меняет.
Те же элементы, без своей сортировки. Точки с одинаковыми координатами — счётчик +N, по клику список машин точки.
Новый заказ — POST /orders с machinery_unit_id, копией фильтра и режимом расчёта; цена фиксируется по текущей ставке машины. Внутри существующего заказа в published (опубликованный черновик, возврат в поиск) — POST /orders/{id}/request-executor, выдача запрашивается с exclude_for_order_id. Дальше матчинг — один ожидающий кандидат на заказ, 5 минут, как в ORDER_STATE_MACHINE.md.
Заказ в published без ожидающего кандидата система снимает сама: срочный через 24 часа без действий клиента, плановый при наступлении даты начала.