spectaxi

Базовая концепция продукта SpexTaxi (MVP)

1) Позиционирование продукта

SpexTaxi — мобильный маркетплейс для поиска и заказа спецтехники.

Платформа поддерживает три пользовательских сценария в рамках одной учетной записи:

Один пользователь имеет один аккаунт и может переключаться между ролями клиент и исполнитель. Поток заказа у частного и бизнес-клиента одинаковый. Режим интерфейса — одно поле current_mode.

2) Принципы MVP

3) Ключевые пользовательские сценарии

Полные шаги — в USER_SCENARIOS.md. Кратко:

Поиск и запрос (клиент)

Фильтр: тип, тариф (набор зависит от типа транспорта — часы/смены/месяцы или километры/рейсы), количество, срочный (без даты) или плановый (дата и время начала, справочно для исполнителя), точка, опционально потолок цены. Список ближайших машин, карта с кластерами. Цена на карточке = ставка × количество. Календаря занятости нет: по срочным показываются только исполнители с включённым флагом «принимаю срочные заказы». Контакты после «принять запрос». Один ожидающий запрос на заказ. Черновик можно сохранить без отправки. Подробности — SEARCH_ALGORITHM.md.

Парк, тарифы и статус (исполнитель)

Тарифы на единицу из списка категории. Тип транспорта — строка machinery_categories (code, категория прав, текст UI). Лицензия — одна на категорию, без approve админа машина не в поиске. Флаг «принимаю срочные заказы» — ручной чекбокс в профиле. Подписка исполнителя спрятана под executor_subscription_enabled.

Отклик, переговоры, работа

«Принять запрос» открывает контакты (срок подтверждения условий — 1 сутки). «Подтвердить условия» фиксирует посчитанную сумму. Сделка → оплата 1 сутки, иначе возврат в поиск; прямая → сразу работа. Пока не in_progress, срыв матча возвращает заказ к поиску; полную отмену делает только клиент, исполнитель только отклоняет партнёра. Из in_progress отмена только спором (исключение — плановый до даты начала); completed когда обе стороны подтвердили исполнение. Заказ без найденного исполнителя система снимает сама (срочный — 24 ч без действий клиента, плановый — дата начала).

4) Границы домена в MVP

Входит в MVP

Не обязательно для MVP

5) Требования к модели заказа

Каждый заказ должен поддерживать два режима расчета:

Каталожные тарифы живут на единице транспорта и задаются исполнителем. Типы: час, смена, сутки, месяц, рейс, километр — какие доступны, зависит от категории (TARIFF_TYPES.md).

Стоимость заказа считает система: ставка выбранного тарифа машины × количество. Заказчик сумму не вводит. Исполнитель подтверждает эти условия отдельной кнопкой после первого «принять» (1 сутки).

Запрос на ожидании ответа — только одному исполнителю. Клиент может снять его до принятия/отказа и выбрать другого. Исполнитель, который отказал или не ответил 5 минут, по этому заказу в выдаче не показывается.

6) Требования к платежной архитектуре

Оплата через приложение не является обязательной для MVP, но архитектура должна быть готова к интеграции платежей.

Нужен абстрактный платежный слой:

Функции, которые должны поддерживаться архитектурно:

Источник истины по реальным денежным средствам — внешний платежный провайдер, а не баланс в базе данных.

После captured платформа деньги больше не двигает (админ — только санкции).

7) «Безопасная сделка» как опциональный модуль

«Безопасная сделка» включается по выбору клиента и не должна быть обязательной по умолчанию.

Целевой поток:

  1. клиент выбирает безопасную сделку;
  2. исполнитель подтверждает условия (посчитанная сумма);
  3. awaiting_payment, форма оплаты, 1 сутки;
  4. провайдер холдит после оплаты клиентом; успех → in_progress;
  5. обе стороны подтверждают исполнение → выплата;
  6. спор до выплаты — деньги по решению админа; после выплаты — только санкции;
  7. expires_at провайдера → disputed только если холд уже был (authorized);
  8. одна апелляция на тот же спор;
  9. комиссия платформы.

Если клиент не создал платёж — провайдер ничего не возвращает; наш таймаут возвращает заказ в поиск исполнителя.

Правка деталей на awaiting_payment — вернуть/отменить платёж, снова переговоры.

7.1) Подписка исполнителя (executor_subscription_enabled)

В MVP флаг выключен.

Когда включён — без активной подписки исполнитель не в поиске и не принимает заказы.

Автоактивация после оплаты (целевой вариант под флагом): отдельный платёж (не холд заказа), webhook → active + срок, по истечении expired и скрытие из поиска. Нужны: продукт подписки в ЮKassa, POST /executor/subscription/pay, идемпотентный webhook, джоба expiry.

Через админку: админ ставит active / срок вручную (оплата вне приложения или без оплаты). Нужны: экран очереди, аудит. Медленнее, зато без рекуррента.

Лицензии подтверждает админ отдельно, не смешивать с оплатой подписки.

Модуль должен быть изолирован так, чтобы MVP можно было запустить без него и безопасно подключить позже.

8) Правила назначения

На ожидании первого ответа — один исполнитель. Не ответил за 5 минут = отказ, повторно на этот заказ нельзя.

Первое «принять» открывает контакты. Если принят срочный заказ — остальные ожидающие срочные запросы этого исполнителя закрываются автоотказом, клиенты получают уведомление, их заказы остаются в поиске; плановые запросы висят до ответа. «Подтвердить условия» (1 сутки) → direct_payment сразу in_progress, secure_deal → awaiting_payment → холд → in_progress. completed — когда обе стороны подтвердили исполнение. На этом заказе после начала работы нового поиска нет.

Минимальные технические гарантии:

9) Рекомендуемые сущности MVP

Сущности позже:

10) Черновые модели статусов

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

Статус платежа (только для secure_deal)

11) Модели монетизации для проверки

Нужно проверить минимум три варианта:

  1. подписка для исполнителей;
  2. комиссия с «Безопасной сделки»;
  3. гибридная модель.

В MVP можно стартовать с подписки (или бесплатного периода), а «Безопасную сделку» подключить после подтверждения базовой гипотезы и юридической модели.

12) Отдельный трек исследования для России

Перед запуском «Безопасной сделки» отдельно проверить:

13) Рекомендуемый поэтапный запуск

Этап 1 (быстрая проверка гипотезы):

Этап 2:

Этап 3:

14) Непересматриваемые архитектурные ограничения

15) Сроки в правилах сервиса

Текст правил — SERVICE_RULES.md: