# Сценарии работы приложения ## 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 не найден в системе. Обратитесь к администратору.»