Skip to main content

ТЗ на модуль Диспетчера

Техническое задание на разработку модуля диспетчера системы «MobileCharge»

Оглавление

1. Общие положения

  • 1.1. Термины и определения (Глоссарий)
  • 1.2. Цель и назначение модуля диспетчера
  • 1.3. Описание автоматизируемых процессов диспетчера
  • 1.4. Модель предметной области (ссылка на общую модель)
  • 1.5. Ролевая модель диспетчера

2. Требования к набору функциональных блоков модуля диспетчера

2.1. Блок «Дашбоард диспетчера»

  • UC001: Просмотр оперативной сводки по заказам
  • UC002: Просмотр статистики по техникам и автопарку
  • UC003: Просмотр аналитики выполнения заказов
  • UC004: Просмотр критичных уведомлений и алертов

2.2. Блок «Управление заказами»

  • UC005: Просмотр списка заказов с фильтрацией
  • UC006: Просмотр детальной информации заказа
  • UC007: Редактирование параметров заказа
  • UC008: Изменение статуса заказа
  • UC009: Создание нового заказа (от имени клиента)
  • UC010: Отмена заказа с указанием причины
  • UC011: Массовые операции с заказами

2.3. Блок «Управление маршрутами»

  • UC012: Просмотр списка маршрутов
  • UC013: Создание нового маршрута
  • UC014: Автоматическое формирование оптимального маршрута
  • UC015: Редактирование маршрута (добавление/удаление заказов)
  • UC016: Назначение ресурсов на маршрут (техник + комплект ТС и станции)
  • UC017: Просмотр детальной информации маршрута
  • UC018: Отслеживание выполнения маршрута в реальном времени
  • UC019: Завершение и архивирование маршрута

2.4. Блок «Управление автопарком»

  • UC020: Просмотр списка сервисных ТС
  • UC021: Добавление нового сервисного ТС
  • UC022: Редактирование информации о сервисном ТС
  • UC023: Управление статусом ТС (доступен/в работе/на ТО/недоступен)
  • UC024: Просмотр истории использования ТС
  • UC025: Планирование и учет технического обслуживания ТС
  • UC026: Деактивация/архивирование ТС

2.5. Блок «Управление зарядными станциями»

  • UC027: Просмотр списка зарядных станций
  • UC028: Добавление новой зарядной станции
  • UC029: Редактирование информации о станции
  • UC030: Управление статусом станции
  • UC031: Назначение станции на сервисное ТС (формирование комплекта)
  • UC032: Отвязка станции от ТС
  • UC033: Просмотр истории использования станции
  • UC034: Планирование и учет технического обслуживания станций
  • UC035: Деактивация/архивирование станции

2.6. Блок «Управление техниками»

  • UC036: Просмотр списка техников
  • UC037: Добавление нового техника
  • UC038: Редактирование профиля техника
  • UC039: Управление статусом техника (активен/неактивен)
  • UC040: Просмотр рабочих смен техников
  • UC041: Создание и редактирование рабочих смен
  • UC042: Просмотр истории работы техника
  • UC043: Просмотр операций техника в реальном времени
  • UC044: Деактивация/архивирование учетной записи техника

2.7. Блок «Обработка обращений клиентов»

  • UC045: Просмотр списка открытых обращений
  • UC046: Просмотр детальной информации обращения
  • UC047: Ответ на обращение клиента
  • UC048: Изменение статуса обращения
  • UC049: Закрытие обращения
  • UC050: Просмотр истории переписки по обращению

2.8. Блок «Управление справочниками»

  • UC051: Управление справочником "Производители станций"
  • UC052: Управление справочником "Модели зарядных станций"
  • UC053: Управление справочником "Бренды автомобилей"
  • UC054: Управление справочником "Модели автомобилей"
  • UC055: Управление справочником "Тарифы"
  • UC056: Управление справочником "Зоны обслуживания"
  • UC057: Управление справочником "Типы коннекторов"
  • UC058: Управление справочником "Причины отмены заказов"
  • UC059: Управление справочником "Типы операций техников"

3. Требования к интерфейсу модуля диспетчера

  • 3.1. Общие требования к интерфейсу
  • 3.2. Требования к навигации
  • 3.3. Требования к отображению данных
  • 3.4. Требования к формам ввода
  • 3.5. Требования к уведомлениям

4. Требования к безопасности и разграничению доступа

  • 4.1. Аутентификация диспетчеров
  • 4.2. Авторизация и права доступа
  • 4.3. Аудит действий диспетчера

5. Интеграционные требования

  • 5.1. Интеграция с внешними сервисами (карты, уведомления)

Список основных функций модуля диспетчера

Основные функциональные области:

  1. Дашбоард и аналитика - оперативная сводка, статистика, уведомления
  2. Управление заказами - просмотр, создание, редактирование, изменение статусов
  3. Управление маршрутами - создание, оптимизация, назначение ресурсов, отслеживание
  4. Управление автопарком - учет ТС, статусы, ТО, история использования
  5. Управление станциями - учет станций, комплектация с ТС, статусы, ТО
  6. Управление техниками - профили, смены, статусы, мониторинг работы
  7. Обработка обращений - просмотр, ответы, управление статусами
  8. Управление справочниками - CRUD операции для всех справочных данных

Ключевые возможности:

  • Создание и оптимизация маршрутов с учетом всех ограничений
  • Мониторинг выполнения заказов в реальном времени
  • Управление ресурсами (техники, ТС, станции) и их распределение
  • Обработка обращений клиентов
  • Ведение справочной информации системы
  • Аналитика и отчетность по работе службы

Блок «Дашбоард диспетчера»

UC001: Просмотр оперативной сводки по заказам

Описание: Диспетчер просматривает список нераспределенных заказов, анализирует их приоритеты и принимает решения о назначении на маршруты.

Activity-диаграмма (Диаграмма деятельности)

graph TD
    Start([Начало]) --> A1[Пользователь: Открывает дашбоард диспетчера]
    A1 --> S1[Система: Загружает нераспределенные заказы<br/>link: СписокНераспределенныхЗаказов]
    S1 --> S2[Система: Отображает заказы со статусами NEW, CONFIRMED<br/>сортированные по времени прибытия]
    S2 --> A2[Пользователь: Выбирает заказ для назначения]
    A2 --> S3[Система: Отображает варианты назначения<br/>link: ФормаНазначенияЗаказа]
    S3 --> D1{Выбор варианта назначения}
    D1 -->|Добавить в существующий маршрут| S4[Система: Отображает список подходящих маршрутов]
    D1 -->|Создать новый маршрут| S5[Система: Переходит к UC013 Создание маршрута]
    D1 -->|Изменить предложенный маршрут| S6[Система: Переходит к UC015 Редактирование маршрута]
    S4 --> A3[Пользователь: Выбирает маршрут]
    A3 --> S7[Система: Назначает заказ на выбранный маршрут]
    S5 --> End([Конец])
    S6 --> End
    S7 --> S8[Система: Обновляет статус заказа на ASSIGNED]
    S8 --> S9[Система: Обновляет список через WebSocket]
    S9 --> End

Модель интерфейсов

classDiagram
    class СписокНераспределенныхЗаказов {
        <<Screen>>
        +ОбластьФильтровЗаказов : ОбластьФильтров
        +ОбластьСпискаЗаказов : ОбластьСписка
        +КнопкаСоздатьМаршрут : Кнопка
        +КнопкаОбновить : Кнопка
    }
    
    class ОбластьФильтров {
        <<Area>>
        +ФильтрПоТипу : СелекторТипаЗаказа
        +ФильтрПоВремени : ВременнойИнтервал
        +ПолеПоиска : ТекстовоеПоле
    }
    
    class ОбластьСписка {
        <<Area>>
        +КарточкаЗаказа : КарточкаЗаказаВСписке[]
    }
    
    class КарточкаЗаказаВСписке {
        <<Area>>
        +НомерЗаказа : Текст
        +ТипЗаказа : ИконкаТипа
        +ВремяПрибытия : Время
        +АдресЗаказа : Текст
        +КлиентИнформация : Текст
        +КнопкаНазначить : Кнопка
        +КнопкаДетали : Кнопка
    }
    
    class ФормаНазначенияЗаказа {
        <<Screen>>
        +ВариантыНазначения : ОбластьВариантов
        +ИнформацияОЗаказе : ОбластьИнформации
        +КнопкаПодтвердить : Кнопка
        +КнопкаОтмена : Кнопка
    }
    
    СписокНераспределенныхЗаказов *-- ОбластьФильтров
    СписокНераспределенныхЗаказов *-- ОбластьСписка
    ОбластьСписка *-- КарточкаЗаказаВСписке

Функциональные требования

RQ001. Требование к отображению нераспределенных заказов. Система должна отображать только заказы со статусами NEW и CONFIRMED, сортированные по полю Orders.scheduledDate в порядке возрастания (ближайшие по времени первыми).

RQ002. Требование к обновлению списка в реальном времени. При получении WebSocket-сообщения о новом заказе или изменении статуса, Система должна автоматически обновить отображение списка без перезагрузки страницы.

RQ003. Требование к визуальному выделению экстренных заказов. Заказы с типом "экстренный" должны отображаться с красной иконкой молнии и выделенным фоном.

RQ004. Требование к отображению информации о заказе. Карточка заказа должна содержать: номер заказа, тип (экстренный/плановый), время прибытия, адрес, информацию о клиенте (имя, телефон), кнопки "Назначить" и "Детали".

RQ005. Требование к функции назначения заказа. При нажатии кнопки "Назначить" Система должна отобразить модальное окно с вариантами: "Добавить в существующий маршрут", "Создать новый маршрут", "Изменить предложенный маршрут".

RQ006. Требование к фильтрации заказов. Система должна предоставлять фильтры по типу заказа (все/экстренные/плановые) и поиск по номеру заказа или адресу.

RQ007. Требование к счетчику нераспределенных заказов. В заголовке секции должен отображаться счетчик количества нераспределенных заказов в формате "Нераспределенные заказы (X)".

UC002: Просмотр активных маршрутов и карты

Описание: Диспетчер мониторит текущее состояние всех активных маршрутов, отслеживает местоположение техников на карте и анализирует выполнение заказов.

Activity-диаграмма (Диаграмма деятельности)

graph TD
    Start([Начало]) --> A1[Пользователь: Просматривает карту и список маршрутов]
    A1 --> S1[Система: Загружает активные маршруты<br/>link: КартаИСписокМаршрутов]
    S1 --> S2[Система: Отображает маршруты кроме статуса DRAFT]
    S2 --> S3[Система: Обновляет позиции техников через WebSocket]
    S3 --> A2[Пользователь: Выбирает маршрут для детального просмотра]
    A2 --> S4[Система: Отображает маршрут на карте<br/>link: КартаМаршрута]
    S4 --> S5[Система: Показывает текущую позицию техника и прогресс]
    S5 --> D1{Техник отстает от графика?}
    D1 -->|Да, более 15 минут| S6[Система: Отображает индикатор задержки]
    D1 -->|Нет| S7[Система: Отображает нормальный статус]
    S6 --> A3[Пользователь: Может связаться с техником]
    S7 --> A3
    A3 --> End([Конец])

Модель интерфейсов

В данном параграфе описана модель интерфейсов

classDiagram
    class КартаИСписокМаршрутов {
        <<Screen>>
        +ОбластьКарты : ОбластьИнтерактивнойКарты
        +ОбластьСпискаМаршрутов : ОбластьСписка
        +ПанельФильтров : ОбластьФильтров
    }
    
    class ОбластьИнтерактивнойКарты {
        <<Area>>
        +МаркерыТехников : МаркерТехника[]
        +МаршрутНаКарте : ЛинияМаршрута
        +МаркерыЗаказов : МаркерЗаказа[]
    }
    
    class КарточкаМаршрута {
        <<Area>>
        +НомерМаршрута : Текст
        +ИмяТехника : Текст
        +СтатусМаршрута : СтатусИндикатор
        +КоличествоЗаказов : Число
        +ТекущаяТочка : Текст
        +ОтставаниеОтГрафика : ИндикаторЗадержки
        +КнопкаПодробнее : Кнопка
    }
    
    class МаркерТехника {
        <<Area>>
        +ПозицияНаКарте : GeoPoint
        +ИконкаТехника : Иконка
        +СтатусИндикатор : СтатусЦвет
        +ВсплывающаяИнформация : Подсказка
    }
    
    КартаИСписокМаршрутов *-- ОбластьИнтерактивнойКарты
    КартаИСписокМаршрутов *-- КарточкаМаршрута
    ОбластьИнтерактивнойКарты *-- МаркерТехника

Функциональные требования

RQ008. Требование к отображению активных маршрутов. Система должна отображать маршруты со всеми статусами, кроме DRAFT, с актуальной информацией о текущем выполнении.

RQ009. Требование к обновлению позиций техников. Позиции техников на карте должны обновляться через WebSocket-сообщения technician_location_updated не реже чем каждые 30 секунд.

RQ010. Требование к индикации отставания от графика. Если техник отстает от запланированного времени более чем на 15 минут, карточка маршрута должна отображаться с красным индикатором и иконкой предупреждения.

RQ011. Требование к отображению маршрута на карте. При выборе маршрута из списка, Система должна отобразить на карте: траекторию маршрута, текущую позицию техника, точки заказов с их статусами.

RQ012. Требование к фильтрации маршрутов. Система должна предоставлять фильтры по статусу маршрута (все/запланированные/в работе) и по технику.

RQ013. Требование к компоновке карты и списка. Карта должна занимать верхнюю правую четверть дашбоарда (50% × 50%), список маршрутов — нижнюю правую четверть (50% × 50%).

UC003: Анализ выполнения маршрутов

Описание: Диспетчер анализирует информацию о выполнении маршрутов на основе данных, отображаемых в карточках маршрутов (план, факт, расчетные показатели).

Activity-диаграмма (Диаграмма деятельности)

graph TD
    Start([Начало]) --> A1[Пользователь: Просматривает карточки маршрутов]
    A1 --> S1[Система: Отображает информацию о выполнении<br/>link: КарточкиМаршрутовСАналитикой]
    S1 --> S2[Система: Показывает плановые и фактические показатели]
    S2 --> A2[Пользователь: Анализирует отклонения от плана]
    A2 --> D1{Требуется детализация?}
    D1 -->|Да| S3[Система: Отображает детальную информацию по маршруту]
    D1 -->|Нет| End([Конец])
    S3 --> End

Модель интерфейсов

classDiagram
    class КарточкиМаршрутовСАналитикой {
        <<Screen>>
        +СписокМаршрутов : КарточкаАналитикиМаршрута[]
        +ФильтрыАналитики : ОбластьФильтров
    }
    
    class КарточкаАналитикиМаршрута {
        <<Area>>
        +НомерМаршрута : Текст
        +ПлановоеВремя : Время
        +ФактическоеВремя : Время
        +ОтклонениеОтПлана : ИндикаторОтклонения
        +КоличествоЗаказовПлан : Число
        +КоличествоЗаказовФакт : Число
        +ЭффективностьВыполнения : Процент
    }
    
    КарточкиМаршрутовСАналитикой *-- КарточкаАналитикиМаршрута

Функциональные требования

RQ014. Требование к отображению плановых показателей. Каждая карточка маршрута должна отображать плановое время выполнения, количество заказов, расчетное время прибытия.

RQ015. Требование к отображению фактических показателей. Карточка должна показывать фактическое время выполнения, текущий прогресс, отклонения от плана.

RQ016. Требование к расчету эффективности. Система должна автоматически рассчитывать процент выполнения плана и отображать его цветовым индикатором (зеленый >90%, желтый 70-90%, красный <70%).

UC004: Обработка обращений клиентов

Описание: Диспетчер просматривает открытые обращения клиентов и отвечает на них.

Activity-диаграмма (Диаграмма деятельности)

graph TD
    Start([Начало]) --> A1[Пользователь: Просматривает список обращений]
    A1 --> S1[Система: Загружает открытые обращения<br/>link: СписокОбращений]
    S1 --> S2[Система: Отображает обращения со статусом не CLOSED, не DELETED]
    S2 --> A2[Пользователь: Выбирает обращение]
    A2 --> S3[Система: Отображает детали обращения<br/>link: ДеталиОбращения]
    S3 --> A3[Пользователь: Читает обращение]
    A3 --> D1{Требуется ответ?}
    D1 -->|Да| A4[Пользователь: Вводит ответ]
    D1 -->|Нет| End([Конец])
    A4 --> S4[Система: Отправляет ответ клиенту]
    S4 --> S5[Система: Обновляет статус обращения]
    S5 --> End

Модель интерфейсов

classDiagram
    class СписокОбращений {
        <<Screen>>
        +ОбластьФильтровОбращений : ОбластьФильтров
        +ОбластьСпискаОбращений : ОбластьСписка
        +СчетчикОткрытыхОбращений : СчетчикУведомлений
    }
    
    class КарточкаОбращения {
        <<Area>>
        +НомерОбращения : Текст
        +ТемаОбращения : Текст
        +ИмяКлиента : Текст
        +ВремяСоздания : Время
        +ПриоритетОбращения : ИндикаторПриоритета
        +КнопкаОтветить : Кнопка
    }
    
    class ДеталиОбращения {
        <<Screen>>
        +ИсторияПереписки : ОбластьСообщений
        +ФормаОтвета : ОбластьВвода
        +ИнформацияОЗаказе : ОбластьИнформации
        +КнопкаОтправить : Кнопка
    }
    
    СписокОбращений *-- КарточкаОбращения

Функциональные требования

RQ017. Требование к отображению открытых обращений. Система должна отображать обращения клиентов со всеми статусами, кроме CLOSED и DELETED.

RQ018. Требование к счетчику обращений. В заголовке секции должен отображаться счетчик открытых обращений в формате "Открытые обращения (X)".

RQ019. Требование к приоритизации обращений. Обращения должны сортироваться по приоритету: сначала связанные с активными заказами, затем по времени создания.

RQ020. Требование к ответу на обращение. При отправке ответа Система должна сохранить сообщение в истории переписки и уведомить клиента.

RQ021. Требование к автоматическому закрытию. Обращения должны автоматически закрываться через 24 часа после последнего ответа диспетчера, если от клиента не поступило новых сообщений.

Модель интерфейсов дашбоарда

Общая компоновка дашбоарда

classDiagram
    class ДашбоардДиспетчера {
        <<Screen>>
        +ЗаголовокДашбоарда : Заголовок
        +СекцияНераспределенныхЗаказов : ОбластьЗаказов
        +СекцияКарты : ОбластьКарты
        +СекцияОбращений : ОбластьОбращений
        +СекцияМаршрутов : ОбластьМаршрутов
    }
    
    class ОбластьЗаказов {
        <<Area>>
        +СписокНераспределенныхЗаказов : СписокЗаказов
        +Позиция : ВерхнийЛевыйКвадрант
        +Размер : 50процентовШиринына50процентовВысоты
    }
    
    class ОбластьКарты {
        <<Area>>
        +ИнтерактивнаяКарта : Карта
        +МаркерыТехников : МаркерТехника[]
        +Позиция : ВерхнийПравыйКвадрант
        +Размер : 50процентовШиринына50процентовВысоты
    }
    
    class ОбластьОбращений {
        <<Area>>
        +СписокОткрытыхОбращений : СписокОбращений
        +Позиция : НижнийЛевыйКвадрант
        +Размер : 50процентовШиринына50процентовВысоты
    }
    
    class ОбластьМаршрутов {
        <<Area>>
        +СписокАктивныхМаршрутов : СписокМаршрутов
        +Позиция : НижнийПравыйКвадрант
        +Размер : 50процентовШиринына50процентовВысоты
    }
    
    ДашбоардДиспетчера *-- ОбластьЗаказов
    ДашбоардДиспетчера *-- ОбластьКарты
    ДашбоардДиспетчера *-- ОбластьОбращений
    ДашбоардДиспетчера *-- ОбластьМаршрутов

Технические требования к дашбоарду

Требования к компоновке

RQ022. Требование к структуре дашбоарда. Дашбоард должен состоять из четырех равных секций размером 50% × 50% каждая:

  • Верхний левый квадрант: Нераспределенные заказы
  • Верхний правый квадрант: Интерактивная карта
  • Нижний левый квадрант: Открытые обращения
  • Нижний правый квадрант: Список активных маршрутов

RQ023. Требование к фиксированному заголовку. Дашбоард должен иметь фиксированный заголовок высотой 60px с навигационными элементами и индикаторами статуса системы.

Требования к взаимодействию в реальном времени

RQ024. Требование к WebSocket-подключению. При загрузке дашбоарда Система должна автоматически установить WebSocket-соединение с сервером на эндпоинт /ws/dispatcher/{dispatcher_id}.

RQ025. Требование к обработке сообщений. Система должна обрабатывать следующие типы WebSocket-сообщений:

{
  "type": "order_created",
  "data": {
    "order": { /* объект заказа */ },
    "priority": "normal|high|urgent"
  }
}

{
  "type": "technician_location_updated", 
  "data": {
    "technician_id": "string",
    "location": {"lat": 0.0, "lng": 0.0},
    "timestamp": "datetime"
  }
}

{
  "type": "support_ticket_created",
  "data": {
    "ticket_id": "string",
    "client_id": "string",
    "subject": "string",
    "priority": "low|normal|high|urgent"
  }
}

RQ026. Требование к восстановлению соединения. При разрыве WebSocket-соединения Система должна автоматически переподключаться с экспоненциальной задержкой (1с, 2с, 4с, 8с, максимум 30с).

RQ027. Требование к ручному обновлению. Кнопка "Обновить" в заголовке дашбоарда должна выполнять полную перезагрузку всех данных, эквивалентную обновлению страницы.

Требования к производительности

RQ028. Требование к времени отклика. Обновление интерфейса при получении WebSocket-сообщения должно происходить не более чем за 200 миллисекунд.

RQ029. Требование к оптимизации рендеринга. Система должна использовать виртуализацию для списков с более чем 50 элементами.

RQ030. Требование к адаптивности. Дашбоард должен корректно отображаться на экранах с разрешением от 1366x768 до 2560x1440 пикселей с сохранением пропорций секций.

Блок «Управление заказами» - Модуль диспетчера

UC005: Просмотр списка заказов с фильтрацией

Описание: Диспетчер просматривает список всех заказов в системе, применяет фильтры для поиска нужных заказов и переходит к детальному просмотру или редактированию.

Activity-диаграмма (Диаграмма деятельности)

graph TD
    Start([Начало]) --> A1[Пользователь: Открывает страницу заказов]
    A1 --> S1[Система: Загружает список заказов<br/>сортированный по scheduledDate]
    S1 --> S2[Система: Отображает заказы с пагинацией<br/>20 записей на странице]
    S2 --> A2[Пользователь: Применяет фильтры или поиск]
    A2 --> S3[Система: Фильтрует заказы по критериям]
    S3 --> S4[Система: Обновляет список заказов]
    S4 --> D1{Выбор действия}
    D1 -->|Просмотр деталей| A3[Пользователь: Нажимает на заказ]
    D1 -->|Редактирование| A4[Пользователь: Нажимает Редактировать]
    D1 -->|Изменение статуса| A5[Пользователь: Нажимает Изменить статус]
    A3 --> S5[Система: Переход к UC006 Просмотр деталей]
    A4 --> S6[Система: Переход к UC007 Редактирование заказа]
    A5 --> S7[Система: Переход к UC008 Изменение статуса]
    S5 --> End([Конец])
    S6 --> End
    S7 --> End

Модель интерфейсов

classDiagram
    class СписокЗаказов {
        <<Screen>>
        +ЗаголовокСтраницы : Заголовок
        +ОбластьФильтров : ОбластьФильтрации
        +ОбластьПоиска : ПолеПоиска
        +СписокКарточекЗаказов : ОбластьСписка
        +Пагинация : КомпонентПагинации
        +КнопкаСоздатьЗаказ : Кнопка
    }
    
    class ОбластьФильтрации {
        <<Area>>
        +ФильтрСтатус : Селектор
        +ФильтрКлиент : ПолеВыбораКлиента
        +ФильтрДатаСоздания : ДатаИнтервал
        +ФильтрПлановаяДата : ДатаИнтервал
        +КнопкаПрименить : Кнопка
        +КнопкаСброс : Кнопка
    }
    
    class КарточкаЗаказа {
        <<Area>>
        +НомерЗаказа : Текст
        +СтатусЗаказа : СтатусИндикатор
        +ТипЗаказа : ИконкаТипа
        +КлиентИнформация : Текст
        +АдресЗаказа : Текст
        +ПлановоеВремя : ДатаВремя
        +НазначенныйТехник : Текст
        +КнопкиДействий : ГруппаКнопок
    }
    
    class ПолеПоиска {
        <<Area>>
        +ТекстовоеПоле : Ввод[255]
        +КнопкаПоиска : Кнопка
        +ПодсказкаПоиска : Текст
    }
    
    СписокЗаказов *-- ОбластьФильтрации
    СписокЗаказов *-- КарточкаЗаказа
    СписокЗаказов *-- ПолеПоиска

Функциональные требования

RQ101. Требование к загрузке списка заказов. Система должна загружать заказы со всеми статусами, сортированные по Orders.scheduledDate в порядке возрастания (ближайшие по времени первыми).

RQ102. Требование к пагинации. Система должна отображать 20 заказов на странице с возможностью навигации по страницам.

RQ103. Требование к фильтрации по статусу. Система должна предоставлять мультиселект фильтр по Orders.status со всеми возможными значениями статусов.

RQ104. Требование к фильтрации по клиенту. Система должна предоставлять поле автодополнения для поиска клиента по Clients.firstName, Clients.lastName, Clients.email.

RQ105. Требование к фильтрации по датам. Система должна предоставлять интервальные фильтры:

  • По дате создания (Orders.createdAt)
  • По плановой дате исполнения (Orders.scheduledDate)

RQ106. Требование к функции поиска. При вводе текста в поле поиска и нажатии кнопки "Поиск", Система должна искать по вхождению подстроки в:

  • Orders.orderNumber
  • Orders.address
  • Clients.firstName + Clients.lastName
  • Clients.email

RQ107. Требование к отображению информации в карточке заказа. Каждая карточка должна содержать:

  • Номер заказа с префиксом типа
  • Цветовой индикатор статуса
  • Иконку типа заказа (экстренный/плановый)
  • ФИО клиента и телефон
  • Адрес заказа
  • Плановые дату и время
  • ФИО назначенного техника (если есть)

RQ108. Требование к действиям с заказом. Для каждого заказа должны быть доступны кнопки:

  • "Просмотр" - всегда доступна
  • "Редактировать" - доступна для статусов NEW, CONFIRMED, ASSIGNED
  • "Изменить статус" - доступна для активных заказов

UC006: Просмотр детальной информации заказа

Описание: Диспетчер просматривает полную информацию о заказе, включая историю изменений статусов, детали клиента и автомобиля, назначенные ресурсы.

Activity-диаграмма (Диаграмма деятельности)

graph TD
    Start([Начало]) --> A1[Пользователь: Нажимает на заказ в списке]
    A1 --> S1[Система: Загружает детальную информацию]
    S1 --> S2[Система: Отображает информацию о заказе]
    S2 --> S3[Система: Загружает историю статусов<br/>из OrderStatusHistories]
    S3 --> S4[Система: Отображает информацию о клиенте<br/>и автомобиле]
    S4 --> S5[Система: Отображает назначенные ресурсы<br/>техник и маршрут]
    S5 --> D1{Выбор действия}
    D1 -->|Редактировать| A2[Пользователь: Нажимает Редактировать]
    D1 -->|Изменить статус| A3[Пользователь: Нажимает Изменить статус] 
    D1 -->|Назначить в маршрут| A4[Пользователь: Нажимает Назначить в маршрут]
    D1 -->|Вернуться| A5[Пользователь: Нажимает Назад]
    A2 --> S6[Система: Переход к UC007 Редактирование заказа]
    A3 --> S7[Система: Переход к UC008 Изменение статуса]
    A4 --> S8[Система: Переход к UC012 Назначение в маршрут]
    A5 --> End([Конец])
    S6 --> End
    S7 --> End  
    S8 --> End

Функциональные требования

RQ109. Требование к отображению основной информации. Система должна отображать:

  • Номер заказа и текущий статус
  • Тип заказа (экстренный/плановый)
  • Дату и время создания, плановую дату исполнения
  • Полный адрес и координаты
  • Комментарий к заказу

RQ110. Требование к отображению информации о клиенте. Система должна отображать:

  • ФИО клиента
  • Контактные данные (телефон, email)
  • Дату регистрации
  • Статус клиента (активен/неактивен)

RQ111. Требование к отображению информации об автомобиле. Система должна отображать данные из связанного Vehicles:

  • Марка и модель автомобиля
  • Государственный номер
  • Год выпуска
  • Цвет

RQ112. Требование к отображению истории статусов. Система должна отображать хронологический список изменений статуса из OrderStatusHistories с указанием:

  • Предыдущий и новый статус
  • Дата и время изменения
  • Инициатор изменения (пользователь или система)
  • Причина изменения (если указана)

RQ113. Требование к отображению назначенных ресурсов. При наличии назначений Система должна отображать:

  • ФИО и контакты назначенного техника
  • Информацию о сервисном ТС
  • Номер маршрута и ссылку на детали маршрута

UC007: Редактирование параметров заказа

Описание: Диспетчер изменяет параметры заказа в зависимости от его текущего статуса.

Activity-диаграмма (Диаграмма деятельности)

graph TD
    Start([Начало]) --> A1[Пользователь: Нажимает Редактировать заказ]
    A1 --> S1[Система: Проверяет статус заказа]
    S1 --> D1{Статус позволяет редактирование?}
    D1 -->|Нет| S2[Система: Отображает сообщение об ошибке]
    D1 -->|Да| S3[Система: Определяет доступные поля<br/>на основе статуса]
    S3 --> S4[Система: Отображает форму редактирования]
    S4 --> A2[Пользователь: Изменяет параметры заказа]
    A2 --> A3[Пользователь: Нажимает Сохранить]
    A3 --> S5[Система: Валидирует введенные данные]
    S5 --> D2{Данные корректны?}
    D2 -->|Нет| S6[Система: Отображает ошибки валидации]
    D2 -->|Да| S7[Система: Сохраняет изменения в Orders]
    S7 --> S8[Система: Создает запись в аудит-лог]
    S8 --> S9[Система: Отображает подтверждение]
    S9 --> End([Конец])
    S6 --> A2
    S2 --> End

Модель интерфейсов

classDiagram
    class ФормаРедактированияЗаказа {
        <<Screen>>
        +ЗаголовокФормы : Заголовок
        +ОбластьОсновныхПараметров : ОбластьПолей
        +ОбластьВремениИМеста : ОбластьПолей
        +ОбластьТарифаИАвто : ОбластьПолей
        +ПолеКомментария : ТекстовоеПоле
        +КнопкаСохранить : Кнопка
        +КнопкаОтмена : Кнопка
    }
    
    class ОбластьПолей {
        <<Area>>
        +НаборПолейВвода : ПолеВвода[]
        +ПодписиПолей : Текст[]
        +ИндикаторыОбязательности : Индикатор[]
    }

Функциональные требования

RQ114. Требование к проверке возможности редактирования. Система должна разрешать редактирование только для заказов со статусами NEW, CONFIRMED, ASSIGNED.

RQ115. Требование к набору редактируемых полей по статусам:

  • NEW, CONFIRMED: address, scheduledDate, scheduledTime, idTariff, chargeLevel, chargeValue, комментарий, выбор автомобиля клиента
  • ASSIGNED: scheduledTime, комментарий (ограниченное редактирование)
  • Остальные статусы: редактирование недоступно

RQ116. Требование к валидации данных. Система должна проверять:

  • Плановая дата не может быть в прошлом
  • Адрес должен быть валидным и геокодируемым
  • Выбранный автомобиль должен принадлежать клиенту заказа
  • Выбранный тариф должен быть активным

RQ117. Требование к сохранению изменений. При успешной валидации Система должна:

  • Обновить соответствующие поля в таблице Orders
  • Создать запись в аудит-лог с указанием изменившихся полей
  • Установить Orders.updatedBy = текущий диспетчер
  • Установить Orders.updatedAt = текущее время

RQ118. Требование к ограничениям редактирования. Система не должна позволять изменять:

  • Клиента заказа (Orders.idClient)
  • Номер заказа (Orders.orderNumber)
  • Статус заказа (только через UC008)
  • Техническую информацию (totalKwh, totalPrice до завершения)

UC008: Изменение статуса заказа

Описание: Диспетчер изменяет статус заказа с обязательным логированием действия в истории.

Activity-диаграмма (Диаграмма деятельности)

graph TD
    Start([Начало]) --> A1[Пользователь: Нажимает Изменить статус]
    A1 --> S1[Система: Загружает текущий статус заказа]
    S1 --> S2[Система: Определяет доступные статусы<br/>для перехода]
    S2 --> S3[Система: Отображает форму изменения статуса]
    S3 --> A2[Пользователь: Выбирает новый статус]
    A2 --> A3[Пользователь: Опционально вводит причину]
    A3 --> A4[Пользователь: Нажимает Подтвердить]
    A4 --> S4[Система: Валидирует возможность перехода]
    S4 --> D1{Переход разрешен?}
    D1 -->|Нет| S5[Система: Отображает ошибку]
    D1 -->|Да| S6[Система: Обновляет Orders.status]
    S6 --> S7[Система: Создает запись в OrderStatusHistories]
    S7 --> S8[Система: Уведомляет заинтересованные стороны]
    S8 --> S9[Система: Отображает подтверждение]
    S9 --> End([Конец])
    S5 --> A2

Функциональные требования

RQ119. Требование к доступным переходам статусов. Диспетчер может инициировать переходы согласно диаграмме состояний, последовательно по жизненному циклу заказа.

RQ120. Требование к форме изменения статуса. Система должна отображать:

  • Текущий статус заказа
  • Селектор доступных статусов для перехода
  • Необязательное поле для комментария/причины
  • Информацию о последствиях изменения статуса

RQ121. Требование к созданию записи в истории. При изменении статуса Система должна создать запись в OrderStatusHistories:

  • previousStatus = текущий статус
  • newStatus = выбранный статус
  • idUser = текущий диспетчер
  • reason = введенный комментарий
  • createdAt = текущее время

RQ122. Требование к уведомлениям. После изменения статуса Система должна:

  • Отправить push-уведомление клиенту (если применимо)
  • Уведомить назначенного техника (если применимо)
  • Обновить связанные маршруты и смены

UC009: Создание нового заказа (от имени клиента)

Описание: Диспетчер создает заказ для существующего клиента с привязанной картой оплаты.

Activity-диаграмма (Диаграмма деятельности)

graph TD
    Start([Начало]) --> A1[Пользователь: Нажимает Изменить статус]
    A1 --> S1[Система: Загружает текущий статус заказа]
    S1 --> S2[Система: Определяет доступные статусы<br/>для перехода]
    S2 --> S3[Система: Отображает форму изменения статуса]
    S3 --> A2[Пользователь: Выбирает новый статус]
    A2 --> A3[Пользователь: Опционально вводит причину]
    A3 --> A4[Пользователь: Нажимает Подтвердить]
    A4 --> S4[Система: Валидирует возможность перехода]
    S4 --> D1{Переход разрешен?}
    D1 -->|Нет| S5[Система: Отображает ошибку]
    D1 -->|Да| S6[Система: Обновляет Orders.status]
    S6 --> S7[Система: Создает запись в OrderStatusHistories]
    S7 --> S8[Система: Уведомляет заинтересованные стороны]
    S8 --> S9[Система: Отображает подтверждение]
    S9 --> End([Конец])
    S5 --> A2

Функциональные требования

RQ123. Требование к выбору клиента. Система должна предоставить поиск по клиентам с автодополнением по ФИО, email, телефону.

RQ124. Требование к проверке карты оплаты. Система должна проверить наличие активной привязанной карты у клиента и не позволять создание заказа без неё.

RQ125. Требование к доступным типам заказов. Диспетчер может создать:

  • Экстренный заказ (с префиксом "EO-")
  • Плановый заказ (с префиксом "PO-")

RQ126. Требование к обязательным полям. При создании заказа обязательны:

  • Клиент
  • Автомобиль клиента
  • Адрес
  • Тип заказа
  • Для планового: дата и время
  • Тариф
  • Параметры зарядки

RQ127. Требование к автоматическим полям. Система должна автоматически установить:

  • status = NEW
  • orderNumber = автогенерируемый номер
  • createdBy = текущий диспетчер
  • createdAt = текущее время

UC010: Отмена заказа с указанием причины

Описание: Диспетчер отменяет заказ с обязательным указанием причины и расчетом компенсации.

Activity-диаграмма (Диаграмма деятельности)

graph TD
    Start([Начало]) --> A1[Пользователь: Нажимает Отменить заказ]
    A1 --> S1[Система: Проверяет возможность отмены]
    S1 --> D1{Отмена разрешена?}
    D1 -->|Нет| S2[Система: Отображает сообщение о невозможности]
    D1 -->|Да| S3[Система: Отображает форму отмены]
    S3 --> A2[Пользователь: Выбирает причину отмены]
    A2 --> A3[Пользователь: Вводит комментарий]
    A3 --> A4[Пользователь: Нажимает Подтвердить отмену]
    A4 --> S4[Система: Рассчитывает сумму к возврату]
    S4 --> S5[Система: Изменяет статус на CANCELLED]
    S5 --> S6[Система: Создает запись в OrderStatusHistories]
    S6 --> S7[Система: Создает транзакцию возврата]
    S7 --> S8[Система: Освобождает назначенные ресурсы]
    S8 --> S9[Система: Уведомляет клиента и техника]
    S9 --> End([Конец])
    S2 --> End

Функциональные требования

RQ128. Требование к проверке возможности отмены. Отмена разрешена для заказов со статусами: NEW, CONFIRMED, ASSIGNED, EN_ROUTE. Запрещена для: CHARGING, COMPLETED, CANCELLED, FAILED.

RQ129. Требование к обязательной причине. Диспетчер обязан выбрать причину отмены из предопределенного справочника и может добавить текстовый комментарий.

RQ130. Требование к расчету возврата. Система должна рассчитать сумму возврата на основе:

  • Стадии выполнения заказа
  • Фактически потребленных ресурсов
  • Действующих тарифов на штрафы

RQ131. Требование к освобождению ресурсов. При отмене Система должна:

  • Убрать заказ из маршрута техника
  • Обновить рабочую смену
  • Освободить зарезервированное время техника

UC011: Массовые операции с заказами

Описание: Диспетчер выполняет операции над группой выбранных заказов.

Activity-диаграмма (Диаграмма деятельности)

graph TD
    Start([Начало]) --> A1[Пользователь: Выбирает заказы в списке<br/>с помощью чекбоксов]
    A1 --> A2[Пользователь: Нажимает Массовые операции]
    A2 --> S1[Система: Отображает меню операций]
    S1 --> D1{Выбор операции}
    D1 -->|Назначить в маршрут| A3[Пользователь: Выбирает маршрут]
    D1 -->|Изменить статус| A4[Пользователь: Выбирает новый статус]
    D1 -->|Отменить заказы| A5[Пользователь: Выбирает причину]
    D1 -->|Экспорт| A6[Пользователь: Выбирает формат экспорта]
    A3 --> S2[Система: Назначает заказы в маршрут]
    A4 --> S3[Система: Изменяет статус у всех заказов]
    A5 --> S4[Система: Отменяет выбранные заказы]
    A6 --> S5[Система: Экспортирует данные заказов]
    S2 --> S6[Система: Отображает результат операции]
    S3 --> S6
    S4 --> S6  
    S5 --> S7[Система: Предлагает скачать файл]
    S6 --> End([Конец])
    S7 --> End

Функциональные требования

RQ132. Требование к выбору заказов. Пользователь должен иметь возможность:

  • Выбирать заказы индивидуально через чекбоксы
  • Выбирать все заказы на странице
  • Выбирать все заказы по текущему фильтру

RQ133. Требование к доступным массовым операциям:

  • Назначение в маршрут: для заказов со статусами NEW, CONFIRMED
  • Изменение статуса: только разрешенные переходы
  • Массовая отмена: для активных заказов с обязательной причиной
  • Экспорт: в форматах Excel, CSV с выбираемым набором полей

RQ134. Требование к валидации массовых операций. Система должна:

  • Проверить применимость операции к каждому заказу
  • Показать предупреждение о заказах, к которым операция неприменима
  • Дать возможность продолжить операцию только для подходящих заказов

RQ135. Требование к отчету о результатах. После выполнения массовой операции Система должна показать:

  • Количество успешно обработанных заказов
  • Количество заказов с ошибками
  • Детали ошибок для заказов, которые не удалось обработать

RQ136. Требование к экспорту данных. Функция экспорта должна включать:

  • Настраиваемый набор полей для экспорта
  • Форматы: Excel (.xlsx), CSV (.csv)
  • Экспорт с учетом текущих фильтров и сортировки
  • Лимит: не более 1000 заказов за один экспорт

Общие требования к блоку «Управление заказами»

Требования к безопасности

RQ137. Требование к авторизации. Все функции блока доступны только пользователям с ролью ДИСПЕТЧЕР или АДМИНИСТРАТОР.

RQ138. Требование к аудиту. Все действия диспетчера должны логироваться с указанием:

  • Типа операции
  • Идентификатора заказа
  • Пользователя-инициатора
  • Времени операции
  • Измененных данных (до/после)

Требования к производительности

RQ139. Требование к времени отклика. Загрузка списка заказов должна выполняться не более чем за 3 секунды при нагрузке до 10 000 заказов.

RQ140. Требование к оптимизации запросов. Система должна использовать индексы для ускорения поиска и фильтрации по полям:

  • Orders.status
  • Orders.createdAt
  • Orders.scheduledDate
  • Orders.orderNumber
  • Clients.firstName, Clients.lastName

Требования к интеграции

RQ141. Требование к real-time обновлениям. Изменения статусов заказов должны отображаться в интерфейсе диспетчера в реальном времени через WebSocket-соединение.

RQ142. Требование к уведомлениям. При изменении важных параметров заказа должны отправляться уведомления:

  • Клиенту - при изменении времени, отмене, назначении техника
  • Технику - при назначении заказа, изменении адреса или времени
  • Другим диспетчерам - при критических изменениях