# Сценарии работы приложения ## 1. Оператор входит в систему 1. Оператор (логист, водитель или админ) открывает `/login` и вводит email. 2. Система отправляет одноразовый код на почту. На экране подсказка: «Проверьте входящие и папку Спам». 3. Если email не найден в системе, показывается: «Email не найден в системе. Обратитесь к администратору.» 4. После ввода верного кода оператор попадает в дашборд согласно роли. ## 2. Логист открывает рабочее пространство доставки 1. Логист видит **LogisticsReadinessBoard** — доску с наборами доставки, сгруппированными по статусам: - **На подходе**: не все заказы набора приняты ОТК. - **Готово к запуску**: все заказы приняты, можно запускать доставку. - **Ожидает клиента**: отправлено приглашение, ждём ответа. - **Нужна ручная работа**: передано логисту, платное хранение, проблема. - **Согласовано**: клиент подтвердил слот. - **Завершено**: все заказы доставлены. 2. Клик по набору открывает **DeliverySetDetailPanel** с: - Перечнем заказов набора, их 1С-номерами и шагами производства (раскрой, склейка, криволинейные, приёмка ОТК, отгрузка). - Телефоном и email клиента, городом, связанными счетами. - Текущим статусом слота. 3. Логист может запустить приглашение, назначить водителя или перейти к ручной обработке. ## 3. Согласование доставки с клиентом 1. Когда набор доставки готов, логист запускает отправку приглашения клиенту. 2. Клиент получает ссылку на `/delivery/:token`. 3. На странице клиент видит **DeliverySlotsPicker** с доступными датами и половинами дня. 4. Клиент выбирает слот и подтверждает. Статус набора переходит в «Ожидает клиента» → «Согласовано». 5. Если клиент не отвечает, система или логист переводит набор в «Нужна ручная работа». ## 4. Перенос доставки 1. Клиент нажимает «Запросить новую ссылку», логист получает уведомление. 2. Логист может переназначить слот или отправить новое приглашение. 3. Выбранный слот сохраняется в `delivery_slots`. ## 5. Исключение 1. Если клиент не отвечает в течение SLA, система создаёт исключение. 2. Набор переходит в «Нужна ручная работа». 3. Логист может снова отправить приглашение, перевести в платное хранение или отменить. 4. Администратор видит инцидент в панели аудита. ## 6. Водитель выполняет доставку 1. Водитель видит назначенные доставки с адресом, городом, интервалом и составом заказа. 2. Переводит статус: Загружен → В пути → Доставлен. 3. При проблеме переводит в «Проблема доставки». ## 7. Завершение доставки 1. Статус «Доставлен» подтверждает физическую передачу заказа клиенту. 2. После закрытия всех заказов набора он переходит в «Завершено». 3. В истории появляется финальная запись, а чат закрывается для активных действий. ## Demo-скрипт для первого платного milestone 1. Зайти под логистом (email: `mk7029953@yandex.ru`). 2. На дашборде увидеть LogisticsReadinessBoard с наборами: - Волкова М.А. — «На подходе» (кухня готова, столешница ещё в производстве). - Савин А.П. — «Готово к запуску» (все заказы приняты ОТК). - Тарасова Е.И. — «Ожидает клиента» (приглашение отправлено). - Фролова И.Д. — «Нужна ручная работа» (платное хранение). - Орлова Н.С. — «Завершено». 3. Кликнуть по набору Савина — увидеть source-поля, production-шаги, готовность к запуску. 4. Перейти на публичную страницу приглашения — увидеть DeliverySlotsPicker с выбором даты и половины дня. 5. Зайти под водителем — увидеть назначенные доставки с адресами и быстрыми действиями. 6. Зайти под несуществующим email — увидеть «Email не найден в системе. Обратитесь к администратору.»