130 lines
7.3 KiB
Markdown
130 lines
7.3 KiB
Markdown
# SuperSam: Обзор системы
|
||
|
||
`SuperSam` — это система управления доставкой заказов, которая объединяет внутренние рабочие кабинеты сотрудников и публичную страницу для клиента. Приложение помогает пройти путь от готовности заказа к отгрузке до согласования доставки, назначения исполнителей, фиксации результата и контроля исключений.
|
||
|
||
## Задачи приложения
|
||
|
||
- собрать в одном месте информацию по заказам, доставке, истории действий и коммуникациям;
|
||
- разделить рабочие зоны по ролям, чтобы каждый сотрудник видел только свой контур задач;
|
||
- дать логисту инструмент для запуска и контроля согласования доставки;
|
||
- дать клиенту простую ссылку, по которой он может выбрать дату и половину дня доставки;
|
||
- сохранить в Supabase историю изменений, статусы и интеграционные события.
|
||
|
||
## Роли
|
||
|
||
### Менеджер
|
||
|
||
Менеджер работает с заказами на ранних этапах:
|
||
- видит список заказов и карточки клиентов;
|
||
- следит за составом заказа и комментариями;
|
||
- передаёт заказ дальше по процессу после подтверждения.
|
||
|
||
### Логист
|
||
|
||
Логист отвечает за доставку:
|
||
- видит готовые к запуску и проблемные заказы;
|
||
- контролирует статусы согласования доставки;
|
||
- назначает и корректирует слоты;
|
||
- переводит заказ в ручную обработку, если клиент не ответил;
|
||
- отслеживает историю и связанные сообщения.
|
||
|
||
### Водитель
|
||
|
||
Водитель работает только со своими доставками:
|
||
- видит назначенные маршруты;
|
||
- открывает карточку точки доставки;
|
||
- фиксирует ход доставки и итоговый статус.
|
||
|
||
### Администратор
|
||
|
||
Администратор видит всю систему:
|
||
- пользователей и роли;
|
||
- общие списки заказов и событий;
|
||
- состояние интеграций и служебные данные.
|
||
|
||
### Клиент
|
||
|
||
Клиент не входит во внутренний кабинет. Он получает публичную ссылку вида `/delivery/:token` и по ней:
|
||
- видит номер заказа;
|
||
- выбирает удобную дату;
|
||
- выбирает половину дня: `До обеда` или `После обеда`;
|
||
- подтверждает выбор.
|
||
|
||
## Основные сценарии
|
||
|
||
### Внутренний сценарий
|
||
|
||
1. Заказ попадает в систему.
|
||
2. Менеджер и внутренние сотрудники ведут заказ по этапам.
|
||
3. Когда заказ готов к доставке, логист запускает приглашение клиенту.
|
||
4. Клиент выбирает слот по публичной ссылке.
|
||
5. Система переводит заказ в `Доставка согласована`.
|
||
6. Логист и водитель доводят доставку до результата.
|
||
|
||
### Сценарий клиента
|
||
|
||
Клиентская страница работает по token из таблицы `public.delivery_invitations`. Для рабочего показа используется заранее загруженный seed-набор данных.
|
||
|
||
После загрузки seed можно открыть ссылку:
|
||
|
||
`/delivery/client-flow-1001`
|
||
|
||
Эта ссылка должна показывать:
|
||
- заказ `CD-240031`;
|
||
- четыре варианта слота;
|
||
- две даты;
|
||
- две половины дня: `До обеда` и `После обеда`.
|
||
|
||
После подтверждения выбора:
|
||
- invitation переводится в состояние `agreed`;
|
||
- заказ переводится в `Доставка согласована`;
|
||
- в `order_history` появляется запись о подтверждении;
|
||
- в `delivery_slots` фиксируется подтверждённый слот.
|
||
|
||
## Что хранится в Supabase
|
||
|
||
### Основные таблицы
|
||
|
||
- `public.users` — пользователи и роли;
|
||
- `public.orders` — заказы и текущие статусы;
|
||
- `public.order_history` — история изменений;
|
||
- `public.delivery_slots` — возможные и подтверждённые слоты доставки;
|
||
- `public.delivery_invitations` — публичные invitation token и состояние клиентского flow;
|
||
- `public.integration_events` — технические и интеграционные события.
|
||
|
||
### Важные поля для клиентского flow
|
||
|
||
- `delivery_invitations.token_hash` — хеш публичного токена;
|
||
- `delivery_invitations.state` — состояние приглашения;
|
||
- `delivery_invitations.available_slots` — список доступных вариантов для клиента;
|
||
- `delivery_invitations.delivery_date` и `delivery_invitations.delivery_time` — выбранный или основной слот;
|
||
- `orders.status` — текущий рабочий статус заказа;
|
||
- `orders.delivery_agreement_status` — статус согласования доставки.
|
||
|
||
## Как подготовить систему к показу
|
||
|
||
1. Загрузить схему `supabase/schema.sql`.
|
||
2. Создать нужных пользователей в `auth.users`.
|
||
3. Выполнить `supabase/seed/stage-1-demo.sql`.
|
||
4. Убедиться, что Edge Functions развернуты:
|
||
- `get-delivery-invitation`
|
||
- `confirm-delivery-choice`
|
||
- `create-delivery-invitation`
|
||
5. Открыть внутренний кабинет.
|
||
6. Открыть клиентскую ссылку `/delivery/client-flow-1001`.
|
||
|
||
## Что показывать на встрече
|
||
|
||
- вход во внутренний кабинет;
|
||
- список заказов для менеджера, логиста и водителя;
|
||
- карточку заказа и статусы;
|
||
- клиентскую ссылку с выбором даты и половины дня;
|
||
- изменение статуса заказа после подтверждения клиентом.
|
||
|
||
## Полезные документы
|
||
|
||
- [README](/Users/mihailkucer/Documents/super-sam/README.md)
|
||
- [Архитектура](/Users/mihailkucer/Documents/super-sam/docs/architecture.md)
|
||
- [Сценарии](/Users/mihailkucer/Documents/super-sam/docs/scenarios.md)
|
||
- [Edge Functions](/Users/mihailkucer/Documents/super-sam/supabase/functions/README.md)
|