147 lines
8.8 KiB
Markdown
147 lines
8.8 KiB
Markdown
# SuperSam: Обзор системы
|
||
|
||
`SuperSam` — это система управления доставкой заказов. В текущем scope она состоит из трёх внутренних ролей и одной публичной страницы для клиента: менеджер, логист, водитель и клиент.
|
||
|
||
## Задачи приложения
|
||
|
||
- показать менеджеру единый реестр доставочных заказов с поиском и карточкой заказа;
|
||
- показать логисту список доставок на сегодня и ближайшие дни с половинами дня;
|
||
- показать водителю свои доставки, адрес, состав заказа и базовые статусы;
|
||
- дать клиенту публичную ссылку, по которой он выбирает дату и половину дня доставки **или самовывоза**;
|
||
- хранить состояние заказов, приглашений и истории изменений в Supabase.
|
||
|
||
## Роли
|
||
|
||
### Менеджер
|
||
|
||
- видит список заказов доставки;
|
||
- ищет по номеру заказа, клиенту и телефону;
|
||
- открывает карточку заказа и смотрит состав, комментарии и историю;
|
||
- может назначить тип доставки (доставка/самовывоз), дату самовывоза и половину дня;
|
||
- не работает с созданием заказов и внутренними служебными экранами.
|
||
|
||
### Логист
|
||
|
||
- видит заказы, готовые к доставке;
|
||
- смотрит ближайшие даты: сегодня, завтра и послезавтра;
|
||
- смотрит половину дня и текущий статус доставки;
|
||
- открывает карточку заказа, чтобы свериться с деталями;
|
||
- может перевести статус заказа в «Самовывоз» и указать дату.
|
||
|
||
### Водитель
|
||
|
||
- видит только свои доставки;
|
||
- открывает адрес, клиента, состав заказа и комментарии;
|
||
- меняет базовый статус доставки по маршруту.
|
||
|
||
### Клиент
|
||
|
||
- получает публичную ссылку вида `/delivery/:token`;
|
||
- видит номер заказа и состав заказа;
|
||
- **выбирает тип получения: Доставка или Самовывоз**;
|
||
- при выборе доставки — выбирает дату и половину дня: `До обеда` или `После обеда`;
|
||
- при выборе самовывоза — выбирает дату (сегодня/завтра/послезавтра с учётом выходных) и половину дня;
|
||
- видит информацию о бесплатном хранении (2 рабочих дня) и платном (300₽/день начиная с 3-го рабочего дня);
|
||
- подтверждает выбор без входа во внутренний кабинет.
|
||
|
||
## Самовывоз
|
||
|
||
### Клиентский флоу
|
||
|
||
1. Клиент открывает ссылку `/delivery/:token`.
|
||
2. Видит две вкладки: **🚚 Доставка** и **🏪 Самовывоз**.
|
||
3. На вкладке «Самовывоз» видит:
|
||
- Доступные даты: сегодня (если до 12:00 текущего дня готовности), завтра, послезавтра (выходные пропускаются).
|
||
- Две половины дня: «До обеда» и «После обеда».
|
||
- Информационный блок: «Бесплатное хранение — 2 рабочих дня. С 3-го рабочего дня — 300₽/день.»
|
||
4. Выбирает дату и половину дня, подтверждает.
|
||
5. Статус заказа переходит в `pickup`, в БД сохраняются `pickup_date` и `pickup_time_slot`.
|
||
|
||
### Управление в карточке заказа
|
||
|
||
- Менеджер, логист и администратор могут переключить тип доставки (Доставка ↔ Самовывоз).
|
||
- При самовывозе доступны поля: дата самовывоза и половина дня.
|
||
- Статус «Самовывоз» доступен в кнопках смены статуса.
|
||
|
||
### База данных
|
||
|
||
В таблице `order_groups` добавлены колонки:
|
||
- `delivery_type text DEFAULT 'delivery'` — тип получения: `delivery` или `pickup`
|
||
- `pickup_date date` — дата самовывоза
|
||
- `pickup_time_slot text` — половина дня самовывоза (`До обеда` / `После обеда`)
|
||
|
||
Статус `delivery_status` пополнился значением `pickup` — «Самовывоз».
|
||
|
||
## Основные сценарии
|
||
|
||
### Внутренний сценарий
|
||
|
||
1. Заказ появляется в Supabase.
|
||
2. Менеджер видит его в реестре и сверяет состав.
|
||
3. Логист отслеживает готовность и ближайшее окно доставки.
|
||
4. Водитель получает свою доставку и доводит её до результата.
|
||
|
||
### Сценарий клиента (доставка)
|
||
|
||
Клиентская страница работает по token из таблицы `public.delivery_invitations`.
|
||
|
||
После загрузки seed можно открыть ссылку:
|
||
|
||
`/delivery/client-flow-1001`
|
||
|
||
Эта ссылка показывает:
|
||
- заказ `CD-240031`;
|
||
- состав заказа;
|
||
- вкладки «Доставка» и «Самовывоз»;
|
||
- на вкладке «Доставка» — четыре варианта слота, две даты, две половины дня.
|
||
|
||
### Сценарий клиента (самовывоз)
|
||
|
||
При выборе вкладки «Самовывоз»:
|
||
- доступны даты начиная с дня готовности (если до 12:00) или завтра;
|
||
- две половины дня: «До обеда» и «После обеда»;
|
||
- информационный блок о стоимости хранения;
|
||
- подтверждение устанавливает `delivery_type = 'pickup'`, `delivery_status = 'pickup'`.
|
||
|
||
## Что хранится в Supabase
|
||
|
||
- `public.users` — пользователи и роли;
|
||
- `public.orders` — заказы и текущие статусы;
|
||
- `public.order_history` — история изменений;
|
||
- `public.order_groups` — группы заказов с полями доставки и самовывоза:
|
||
- `delivery_type` — `delivery` или `pickup`;
|
||
- `delivery_date`, `delivery_time` — слот доставки;
|
||
- `pickup_date`, `pickup_time_slot` — слот самовывоза;
|
||
- `delivery_status` — статус согласования (включая `pickup`);
|
||
- `public.delivery_slots` — возможные и подтверждённые слоты доставки;
|
||
- `public.delivery_invitations` — публичные invitation token и состояние клиентского flow;
|
||
- `public.integration_events` — технические и интеграционные события.
|
||
|
||
## Как подготовить систему к показу
|
||
|
||
1. Загрузить схему `supabase/schema.sql`.
|
||
2. Выполнить `supabase/seed/stage-1-demo.sql`.
|
||
3. Убедиться, что развернуты Edge Functions:
|
||
- `get-delivery-invitation`
|
||
- `confirm-delivery-choice`
|
||
- `create-delivery-invitation`
|
||
4. Открыть внутренний кабинет и пройти вход под ролью.
|
||
5. Открыть клиентскую ссылку `/delivery/client-flow-1001`.
|
||
|
||
## Что показывать на встрече
|
||
|
||
- вход менеджера, логиста и водителя;
|
||
- реестр заказов и карточку заказа;
|
||
- список доставок по датам для логиста;
|
||
- карточку доставки водителя;
|
||
- клиентскую ссылку с выбором типа получения (доставка/самовывоз) и датой;
|
||
- информационный блок о стоимости хранения при самовывозе.
|
||
|
||
## Полезные документы
|
||
|
||
- [README](../README.md)
|
||
- [Архитектура](architecture.md)
|
||
- [Сценарии](scenarios.md)
|
||
- [Поток n8n](n8n-order-group-delivery-flow.md)
|
||
- [Edge Functions](../supabase/functions/README.md)
|