96 lines
8.1 KiB
Markdown
96 lines
8.1 KiB
Markdown
# Сценарии работы приложения
|
||
|
||
## 1. Оператор входит в систему
|
||
|
||
1. Оператор (логист, водитель или админ) открывает `/login` и вводит email.
|
||
2. Система отправляет одноразовый код на почту. На экране подсказка: «Проверьте входящие и папку Спам».
|
||
3. Если email не найден в системе, показывается: «Email не найден в системе. Обратитесь к администратору.»
|
||
4. После ввода верного кода оператор попадает в дашборд согласно роли.
|
||
|
||
## 2. Логист открывает рабочее пространство доставки
|
||
|
||
1. Логист видит **LogisticsReadinessBoard** — доску с наборами доставки, сгруппированными по статусам:
|
||
- **На подходе**: не все заказы набора прошли контроль качества.
|
||
- **Готово к запуску**: все заказы приняты, можно запускать доставку.
|
||
- **Ожидает клиента**: отправлено приглашение, ждём ответа.
|
||
- **Нужна ручная работа**: передано логисту, платное хранение, проблема.
|
||
- **Согласовано**: клиент подтвердил слот.
|
||
- **Завершено**: все заказы доставлены.
|
||
2. Клик по набору открывает **DeliverySetDetailPanel** с:
|
||
- Перечнем заказов набора, их 1С-номерами и шагами производства (раскрой, склейка, криволинейные, контроль качества, отгрузка).
|
||
- Телефоном и email клиента, городом, связанными счетами.
|
||
- Текущим статусом слота.
|
||
|
||
## 3. Согласование доставки с клиентом
|
||
|
||
1. Когда набор доставки готов, логист запускает отправку приглашения клиенту.
|
||
2. Клиент получает ссылку на `/delivery/:token`.
|
||
3. На странице клиент видит вкладки **🚚 Доставка** и **🏪 Самовывоз**.
|
||
4. На вкладке «Доставка» — **DeliverySlotsPicker** с доступными датами и половинами дня.
|
||
5. На вкладке «Самовывоз» — **PickupSlotsPicker** с датами (сегодня до 12:00, завтра, послезавтра, без выходных) и половинами дня, а также информационный блок: «Бесплатное хранение — 2 рабочих дня. С 3-го рабочего дня — 300₽/день.»
|
||
6. Клиент выбирает тип получения, слот и подтверждает. Статус набора переходит в «Ожидает клиента» → «Согласовано» или «Самовывоз».
|
||
7. Если клиент не отвечает, система или логист переводит набор в «Нужна ручная работа».
|
||
|
||
## 4. Перенос доставки
|
||
|
||
1. Клиент нажимает «Запросить новую ссылку», логист получает уведомление.
|
||
2. Логист может переназначить слот или отправить новое приглашение.
|
||
3. Выбранный слот сохраняется в `delivery_slots`.
|
||
|
||
## 5. Исключение
|
||
|
||
1. Если клиент не отвечает в течение SLA, система создаёт исключение.
|
||
2. Набор переходит в «Нужна ручная работа».
|
||
3. Логист может снова отправить приглашение, перевести в платное хранение или отменить.
|
||
4. Администратор видит инцидент в панели аудита.
|
||
|
||
## 6. Водитель выполняет доставку
|
||
|
||
1. Водитель видит назначенные доставки с адресом, городом, интервалом и составом заказа.
|
||
2. Переводит статус: Загружен → В пути → Доставлен.
|
||
3. При проблеме переводит в «Проблема доставки».
|
||
|
||
## 7. Завершение доставки
|
||
|
||
1. Статус «Доставлен» подтверждает физическую передачу заказа клиенту.
|
||
2. После закрытия всех заказов набора он переходит в «Завершено».
|
||
3. В истории появляется финальная запись, а чат закрывается для активных действий.
|
||
|
||
## 8. Самовывоз
|
||
|
||
### Клиентский сценарий
|
||
|
||
1. Клиент открывает ссылку `/delivery/:token`.
|
||
2. Выбирает вкладку **🏪 Самовывоз**.
|
||
3. Видит доступные даты: сегодня (если до 12:00 текущего дня готовности), завтра, послезавтра (выходные пропускаются).
|
||
4. Выбирает дату и половину дня: «До обеда» или «После обеда».
|
||
5. Видит информационный блок: «Бесплатное хранение — 2 рабочих дня. С 3-го рабочего дня — 300₽/день.»
|
||
6. Подтверждает выбор.
|
||
7. В БД устанавливаются: `delivery_type = 'pickup'`, `delivery_status = 'pickup'`, `pickup_date`, `pickup_time_slot`.
|
||
|
||
### Сценарий менеджера/логиста
|
||
|
||
1. В карточке заказа (**OrderDetailPanel**) менеджер видит вкладки Доставка/Самовывоз.
|
||
2. При выборе «Самовывоз» — поля даты и половины дня для самовывоза.
|
||
3. Кнопка статуса «Самовывоз» доступна для менеджера, логиста и администратора.
|
||
4. Менеджер может переключить тип доставки в любой момент до передачи водителю.
|
||
|
||
### Статусы самовывоза
|
||
|
||
- `pickup` — заказ ожидает самовывоза клиентом.
|
||
- Переходы: `pending_confirmation` → `pickup`, `manual_confirmation_required` → `pickup`, `pickup` → `assigned_to_driver`, `pickup` → `delivered`, `pickup` → `cancelled`.
|
||
|
||
## Сценарий показа заказчику
|
||
|
||
1. Зайти под логистом.
|
||
2. На дашборде увидеть `LogisticsReadinessBoard` с наборами:
|
||
- Волкова М.А. — «На подходе» (кухня готова, столешница ещё в производстве).
|
||
- Савин А.П. — «Готово к запуску» (все заказы прошли контроль качества).
|
||
- Тарасова Е.И. — «Ожидает клиента» (приглашение отправлено).
|
||
- Фролова И.Д. — «Нужна ручная работа» (платное хранение).
|
||
- Орлова Н.С. — «Завершено».
|
||
3. Кликнуть по набору Савина — увидеть source-поля, production-шаги, готовность к запуску.
|
||
4. Перейти на публичную страницу приглашения — увидеть вкладки «Доставка» и «Самовывоз» с выбором даты и половины дня.
|
||
5. Зайти под водителем — увидеть назначенные доставки с адресами и быстрыми действиями.
|
||
6. Зайти под несуществующим email — увидеть «Email не найден в системе. Обратитесь к администратору.»
|