spectaxi

Поиск исполнителей

Как собирается выдача машин для клиента. Сценарий — USER_SCENARIOS.md.

Календаря занятости нет. Система не считает, свободна ли машина по времени. Для срочного заказа единственный признак доступности — ручной флаг исполнителя «принимаю срочные заказы».

1) Сначала фильтр заказа

Клиент заполняет (экран фильтра / черновик / будущий заказ), затем ищет.

Поле Обязательно Смысл
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): у одних часы/смены/месяцы, у других километры и рейсы.

2) Кого показываем

Карточка выдачи — единица транспорта: фото, локация, расстояние, посчитанная цена, имя и аватар исполнителя, средняя оценка и число публичных отзывов. Контактов нет.

Единица попадает в выдачу, если одновременно:

Текущие заказы исполнителя (в переговорах, в работе, в споре) на выдачу не влияют. Один исполнитель может одновременно получить несколько запросов от разных клиентов; что с ними происходит при принятии — ORDER_STATE_MACHINE.md, раздел 6.1.

3) Сортировка и фильтры

Список: по расстоянию от точки работ до локации машины, по возрастанию (первый — ближайший).

При одинаковом расстоянии (округление до 0.1 км) — меньшая посчитанная цена.

Внутренний рейтинг в сортировке не используется и в UI не показывается.

Клиент сужает выдачу фильтрами (это параметры того же запроса, не отдельный ранжирующий ключ):

Смена тарифа или количества — перезапрос: цена пересчитывается на сервере. Смена даты планового заказа выдачу не меняет.

4) Карта

Те же элементы, без своей сортировки. Точки с одинаковыми координатами — счётчик +N, по клику список машин точки.

5) Запрос после выбора

Новый заказ — POST /orders с machinery_unit_id, копией фильтра и режимом расчёта; цена фиксируется по текущей ставке машины. Внутри существующего заказа в published (опубликованный черновик, возврат в поиск) — POST /orders/{id}/request-executor, выдача запрашивается с exclude_for_order_id. Дальше матчинг — один ожидающий кандидат на заказ, 5 минут, как в ORDER_STATE_MACHINE.md.

Заказ в published без ожидающего кандидата система снимает сама: срочный через 24 часа без действий клиента, плановый при наступлении даты начала.