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. Требование к уведомлениям. При изменении важных параметров заказа должны отправляться уведомления:

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

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

UC012: Просмотр списка маршрутов

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

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

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

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

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

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

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

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

RQ203. Требование к фильтрации по статусу. Система должна предоставлять мультиселект фильтр по Routes.status со всеми возможными значениями: PLANNED, IN_PROGRESS, COMPLETED, CANCELLED.

RQ204. Требование к фильтрации по технику. Система должна предоставлять поле автодополнения для поиска техника по Users.firstName, Users.lastName с ролью TECHNICIAN.

RQ205. Требование к функции поиска. При вводе текста в поле поиска Система должна искать по вхождению подстроки в номер маршрута и имя техника.

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

  • Идентификатор маршрута
  • Цветовой индикатор статуса
  • ФИО назначенного техника
  • Дату маршрута
  • Количество заказов в маршруте
  • Плановое время начала и окончания
  • Прогресс выполнения (процент выполненных заказов)

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

  • "Просмотр" - всегда доступна
  • "Редактировать" - доступна для статусов PLANNED
  • "Отслеживать" - доступна для статуса IN_PROGRESS

UC013: Создание нового маршрута

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

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

graph TD
    Start([Начало]) --> A1[Пользователь: Нажимает Создать маршрут]
    A1 --> S1[Система: Отображает форму создания маршрута<br/>link: ФормаСозданияМаршрута]
    S1 --> S2[Система: Автоматически устанавливает базу<br/>как начальную и конечную точки]
    S2 --> A2[Пользователь: Заполняет дату маршрута]
    A2 --> A3[Пользователь: Выбирает заказы для маршрута]
    A3 --> S3[Система: Рассчитывает плановые времена<br/>для каждой точки маршрута]
    S3 --> S4[Система: Рассчитывает энергозатраты<br/>по алгоритму]
    S4 --> D1{Энергии достаточно?}
    D1 -->|Нет| S5[Система: Отображает предупреждение<br/>и предлагает альтернативы]
    D1 -->|Да| A4[Пользователь: Нажимает Создать]
    A4 --> S6[Система: Валидирует введенные данные]
    S6 --> D2{Данные корректны?}
    D2 -->|Нет| S7[Система: Отображает ошибки валидации]
    D2 -->|Да| S8[Система: Создает маршрут со статусом PLANNED]
    S8 --> S9[Система: Создает записи в RoutePoints для заказов]
    S9 --> S10[Система: Отображает подтверждение создания]
    S10 --> End([Конец])
    S5 --> A3
    S7 --> A2

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

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

  • Дата маршрута (Routes.routeDate)
  • Начальный адрес должен быть координатами базы (Routes.startAddress, startLatitude, startLongitude)
  • Конечный адрес должен быть координатами базы (Routes.endAddress, endLatitude, endLongitude)

RQ209. Требование к выбору заказов. Система должна отображать только заказы со статусами NEW и CONFIRMED, не назначенные на другие маршруты.

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

  • status = PLANNED
  • createdBy = текущий диспетчер
  • createdAt = текущее время

RQ211. Требование к обязательности базы. Маршрут должен обязательно начинаться и заканчиваться на базе. Система должна автоматически устанавливать координаты базы как начальную и конечную точки маршрута.

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

  • Плановое время выезда с предыдущей точки (RoutePoints.plannedDepartureTime)
  • Плановое время прибытия на точку заказа (RoutePoints.plannedArrivalTime)
  • Ожидаемое время в пути между точками (RoutePoints.expectedTravelTimeMinutes)

RQ213. Требование к расчету энергозатрат. При добавлении заказов в маршрут Система должна рассчитывать достаточность заряда по следующему алгоритму:

Алгоритм расчета энергозатрат:

Шаг 1. Расчет энергозатрат автомобиля техника:

Общее_расстояние_маршрута = Расстояние_от_базы_до_первого_заказа + 
                             Сумма_расстояний_между_заказами + 
                             Расстояние_от_последнего_заказа_до_базы

Энергозатраты_на_поездку = Общее_расстояние_маршрута × Расход_автомобиля_кВтч_на_км

Минимальный_заряд_автомобиля = Энергозатраты_на_поездку × 1.2  // 20% запас

Шаг 2. Расчет энергозатрат зарядной станции:

Суммарная_энергия_для_зарядки = Сумма_всех_chargeValue_в_заказах_маршрута

Энергия_для_подзарядки_автомобиля = ЕСЛИ (Текущий_заряд_автомобиля < Минимальный_заряд_автомобиля)
                                   ТО (Минимальный_заряд_автомобиля - Текущий_заряд_автомобиля)
                                   ИНАЧЕ 0

Минимальная_энергия_станции = Суммарная_энергия_для_зарядки + 
                              Энергия_для_подзарядки_автомобиля × 1.1  // 10% запас

Шаг 3. Проверка достаточности:

ЕСЛИ (Текущий_заряд_автомобиля >= Минимальный_заряд_автомобиля И 
      Текущий_заряд_станции >= Минимальная_энергия_станции)
ТО Маршрут_возможен = ИСТИНА
ИНАЧЕ Маршрут_возможен = ЛОЖЬ

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

  • Время окончания маршрута (plannedEndTime)
  • Время начала следующего запланированного маршрута для этого комплекта
  • Между ними должно быть минимум 4 часа для зарядки автомобиля и станции на базе

RQ215. Требование к валидации энергозатрат. Если расчет показывает недостаточность энергии, Система должна:

  • Отобразить предупреждение с детализацией проблемы
  • Предложить альтернативы: уменьшить количество заказов, выбрать другой комплект оборудования
  • Не позволить создать маршрут до устранения проблемы

RQ216. Требование к отображению энергетической информации. В форме создания маршрута Система должна отображать:

  • Текущий уровень заряда выбранного автомобиля и станции
  • Расчетные энергозатраты маршрута
  • Остаток энергии после выполнения маршрута
  • Цветовую индикацию (зеленый - достаточно, желтый - критично, красный - недостаточно)

UC015: Редактирование маршрута (добавление/удаление заказов)

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

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

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

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

RQ223. Требование к проверке возможности редактирования. Система должна разрешать редактирование только для маршрутов со статусом PLANNED.

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

  • Показывать только заказы со статусами NEW, CONFIRMED
  • Исключать заказы, уже назначенные на другие маршруты
  • Проверять совместимость по времени и географии
  • Автоматически пересчитывать энергозатраты по алгоритму из RQ213

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

  • Изменить статус заказа обратно на CONFIRMED
  • Удалить соответствующую запись из RoutePoints
  • Пересчитать плановые времена для оставшихся заказов
  • Пересчитать энергозатраты маршрута

RQ226. Требование к изменению порядка. Система должна позволять изменять orderIndex в RoutePoints с автоматическим пересчетом всех плановых времен и энергозатрат.


UC016: Назначение ресурсов на маршрут (техник + комплект ТС и станции)

Описание: Диспетчер назначает на маршрут техника и комплект оборудования (сервисное ТС + зарядная станция).

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

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

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

RQ217. Требование к доступности техников. Система должна отображать только техников (Users с ролью TECHNICIAN), которые:

  • Имеют статус isActive = true
  • Не назначены на другие активные маршруты в ту же дату

RQ218. Требование к доступности оборудования. Система должна отображать только комплекты, где:

  • ServiceVehicles.status = AVAILABLE
  • ChargingStations.status = AVAILABLE
  • Существует связь в StationVehicleAssignments

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

  • Время окончания данного маршрута (Routes.plannedEndTime)
  • Время начала следующего запланированного маршрута для этого комплекта
  • Между окончанием текущего и началом следующего маршрута должно быть минимум 4 часа
  • Если интервал меньше 4 часов, комплект должен быть исключен из списка доступных

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

  • Установить Routes.idTechnician = выбранный техник
  • Установить Routes.idServiceVehicle = выбранное ТС
  • Установить Routes.idChargingStation = выбранная станция
  • Изменить статусы оборудования на IN_USE

RQ221. Требование к созданию рабочей смены. Система должна автоматически создать запись в WorkShifts с:

  • idTechnician = назначенный техник
  • shiftDate = дата маршрута
  • plannedStartTime и plannedEndTime = времена маршрута
  • status = PLANNED

RQ222. Требование к валидации временных интервалов. Если выбранный комплект не удовлетворяет требованию 4-часового интервала, Система должна:

  • Отобразить предупреждение с указанием конфликтующих маршрутов
  • Показать точное время окончания предыдущего и начала следующего маршрута
  • Предложить альтернативные комплекты или изменение времени маршрута

UC017: Просмотр детальной информации маршрута

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

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

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

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

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

  • Идентификатор и статус маршрута
  • Дату маршрута
  • Начальный и конечный адреса
  • Плановые времена начала и окончания
  • Фактические времена (если доступны)

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

  • Номер заказа и его статус
  • Адрес выполнения
  • Плановое время прибытия
  • Фактическое время прибытия (если есть)
  • Статус выполнения

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

  • ФИО и контакты техника
  • Информацию о сервисном ТС (номер, модель)
  • Информацию о зарядной станции (модель, серийный номер)

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

  • Плановыми точками маршрута
  • Фактическим прогрессом выполнения
  • Отклонениями от графика

UC018: Отслеживание выполнения маршрута в реальном времени

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

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

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

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

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

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

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

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

  • Текущую позицию техника с актуальными координатами
  • Траекторию маршрута с запланированными точками
  • Маркеры заказов с цветовой индикацией статусов

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

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

RQ235. Требование к критическим уведомлениям. При отклонении от графика более чем на 30 минут Система должна отображать предупреждение с предложением связаться с техником.


UC019: Завершение и архивирование маршрута

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

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

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

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

RQ236. Требование к проверке готовности к завершению. Система должна разрешать завершение маршрута только если все заказы в нем имеют статусы COMPLETED, CANCELLED или FAILED.

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

  • Изменить Routes.status на COMPLETED
  • Установить Routes.actualEndTime = текущее время
  • Обновить Routes.updatedBy = текущий диспетчер

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

  • Изменить WorkShifts.status на COMPLETED
  • Установить ServiceVehicles.status = AVAILABLE
  • Установить ChargingStations.status = AVAILABLE

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

  • Общее время выполнения маршрута
  • Отклонения от планового времени
  • Количество успешно выполненных заказов
  • Эффективность выполнения маршрута

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


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

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

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

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

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

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

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

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

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

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

RQ246. Требование к синхронизации с заказами. При изменении состава заказов в маршруте должны автоматически обновляться статусы соответствующих заказов (ASSIGNED при добавлении, CONFIRMED при удалении).

RQ247. Требование к консистентности данных. Все операции с маршрутами должны выполняться в рамках транзакций для обеспечения целостности данных между связанными таблицами Routes, RoutePoints, WorkShifts и статусами ресурсов.

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

UC020: Просмотр списка сервисных ТС

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

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

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

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

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

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

RQ301. Требование к загрузке списка ТС. Система должна загружать сервисные ТС со всеми статусами, сортированные по ServiceVehicles.licensePlate в алфавитном порядке.

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

RQ303. Требование к фильтрации по статусу. Система должна предоставлять мультиселект фильтр по ServiceVehicles.status со значениями: AVAILABLE, IN_USE, MAINTENANCE, UNAVAILABLE.

RQ304. Требование к фильтру по необходимости ТО. Фильтр "Требуется ТО" должен показывать ТС, у которых:

  • currentMileageKm - lastServiceMileageKm >= serviceIntervalKm ИЛИ
  • Дата последнего ТО + serviceIntervalMonths <= текущая дата

RQ305. Требование к функции поиска. При вводе текста Система должна искать по вхождению подстроки в ServiceVehicles.licensePlate, ServiceVehicles.brand, ServiceVehicles.model.

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

  • Государственный номер
  • Бренд и модель ТС
  • Цветовой индикатор статуса
  • Текущий пробег
  • Назначенную зарядную станцию (если есть)
  • Индикатор необходимости ТО

RQ307. Требование к индикатору ТО. Индикатор должен показывать:

  • Зеленый: ТО не требуется
  • Желтый: ТО потребуется в ближайший месяц (на основе статистики использования)
  • Красный: ТО просрочено

UC021: Добавление нового сервисного ТС

Описание: Диспетчер добавляет новое сервисное транспортное средство в систему.

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

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

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

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

  • Государственный номер (licensePlate)
  • Бренд (brand)
  • Модель (model)
  • Интервал ТО в км (serviceIntervalKm)
  • Интервал ТО в месяцах (serviceIntervalMonths)
  • Текущий пробег (currentMileageKm)

RQ309. Требование к валидации госномера. Система должна проверять уникальность licensePlate среди всех ServiceVehicles.

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

  • status = AVAILABLE
  • createdBy = текущий диспетчер
  • createdAt = текущее время

UC022: Редактирование информации о сервисном ТС

Описание: Диспетчер изменяет информацию о сервисном ТС, включая параметры технического обслуживания.

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

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

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

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

  • Бренд и модель ТС
  • Параметры технического обслуживания
  • Текущий пробег
  • Примечания

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

  • Государственный номер (только при создании)
  • Статус ТС (только через UC023)
  • Даты создания и технической информации

UC023: Управление статусом ТС

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

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

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

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

RQ313. Требование к переходам статусов. Разрешенные переходы статусов:

  • AVAILABLE → IN_USE, MAINTENANCE, UNAVAILABLE
  • IN_USE → AVAILABLE, MAINTENANCE, UNAVAILABLE
  • MAINTENANCE → AVAILABLE, UNAVAILABLE
  • UNAVAILABLE → AVAILABLE (после устранения проблем)

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

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


UC024: Просмотр истории использования ТС

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

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

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

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

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

  • Полную информацию о ТС
  • Текущий статус и назначенную зарядную станцию
  • Статистику использования (общий пробег, количество маршрутов)

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

  • Список выполненных маршрутов с датами
  • Общее количество километров по маршрутам
  • Расход энергии по маршрутам

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

  • Дату последнего ТО и пробег
  • Дату следующего планового ТО
  • Список всех проведенных ТО

RQ319. Требование к переназначению станции. Диспетчер должен иметь возможность:

  • Просмотреть текущую назначенную станцию
  • Выбрать новую станцию из доступных
  • Отвязать станцию от ТС

UC025: Планирование и учет технического обслуживания ТС

Описание: Диспетчер планирует и регистрирует проведенное техническое обслуживание сервисного ТС.

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

graph TD
    Start([Начало]) --> A1[Пользователь: Нажимает Запланировать ТО]
    A1 --> S1[Система: Отображает форму планирования ТО]
    S1 --> A2[Пользователь: Выбирает тип действия]
    A2 --> D1{Тип действия}
    D1 -->|Запланировать| A3[Пользователь: Указывает дату планового ТО]
    D1 -->|Зарегистрировать выполненное| A4[Пользователь: Заполняет данные о проведенном ТО]
    A3 --> S2[Система: Сохраняет плановую дату ТО]
    A4 --> S3[Система: Создает запись в ServiceVehicleMaintenances]
    A4 --> S4[Система: Обновляет lastServiceDate и lastServiceMileageKm]
    S4 --> S5[Система: Рассчитывает nextMaintenanceDate]
    S5 --> S6[Система: Переводит ТС в статус AVAILABLE если было MAINTENANCE]
    S2 --> End([Конец])
    S6 --> End

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

RQ320. Требование к планированию ТО. Диспетчер должен иметь возможность:

  • Запланировать дату следующего ТО
  • Указать тип планового ТО (плановое/внеплановое)
  • Добавить комментарии к плановому ТО

RQ321. Требование к регистрации выполненного ТО. При регистрации ТО обязательны:

  • Дата проведения ТО (maintenanceDate)
  • Пробег на момент ТО (mileageKm)
  • Описание выполненных работ (description)
  • Стоимость ТО (опционально)

RQ322. Требование к автоматическому расчету. При регистрации ТО Система должна:

  • Обновить lastServiceDate и lastServiceMileageKm в ServiceVehicles
  • Рассчитать nextMaintenanceDate = maintenanceDate + serviceIntervalMonths
  • Рассчитать nextMaintenanceMileageKm = mileageKm + serviceIntervalKm

UC026: Деактивация/архивирование ТС

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

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

graph TD
    Start([Начало]) --> A1[Пользователь: Нажимает Деактивировать ТС]
    A1 --> S1[Система: Проверяет использование ТС]
    S1 --> S2[Система: Загружает связанные маршруты]
    S2 --> S3[Система: Загружает назначенные станции]
    S3 --> D1{Есть активные связи?}
    D1 -->|Да| S4[Система: Отображает предупреждение со списком связей]
    D1 -->|Нет| S5[Система: Отображает форму деактивации]
    S4 --> A2[Пользователь: Просматривает список маршрутов и комплектов]
    A2 --> A3[Пользователь: Принимает решение о продолжении]
    A3 --> D2{Продолжить деактивацию?}
    D2 -->|Нет| End([Конец])
    D2 -->|Да| S5
    S5 --> A4[Пользователь: Указывает причину деактивации]
    A4 --> A5[Пользователь: Нажимает Подтвердить]
    A5 --> S6[Система: Устанавливает isDeleted = true]
    S6 --> S7[Система: Отвязывает назначенные станции]
    S7 --> S8[Система: Логирует деактивацию]
    S8 --> End

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

RQ323. Требование к проверке перед деактивацией. Система должна проверить и отобразить:

  • Список активных маршрутов (Routes со статусами PLANNED, IN_PROGRESS)
  • Список назначенных зарядных станций через StationVehicleAssignments

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

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

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

  • Установить ServiceVehicles.isDeleted = true
  • Удалить активные записи из StationVehicleAssignments
  • Сохранить причину деактивации в аудит-лог

RQ326. Требование к мягкому удалению. Деактивированные ТС должны:

  • Исключаться из основных рабочих списков
  • Оставаться доступными в отчетах и истории
  • Иметь возможность восстановления администратором

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

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

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

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

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

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

RQ329. Требование к времени отклика. Загрузка списка ТС должна выполняться не более чем за 2 секунды при нагрузке до 500 ТС.

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

  • ServiceVehicles.licensePlate
  • ServiceVehicles.status
  • ServiceVehicles.brand, ServiceVehicles.model

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

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

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

  • О приближающемся сроке ТО (за 7 дней)
  • О просроченном ТО
  • При критических изменениях статуса ТС

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

UC027: Просмотр списка зарядных станций

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

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

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

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

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

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

RQ401. Требование к загрузке списка станций. Система должна загружать зарядные станции со всеми статусами, сортированные по ChargingStations.serialNumber в алфавитном порядке.

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

RQ403. Требование к фильтрации по статусу. Система должна предоставлять мультиселект фильтр по ChargingStations.status со значениями: AVAILABLE, IN_USE, MAINTENANCE, UNAVAILABLE.

RQ404. Требование к фильтрации по производителю и модели. Система должна предоставлять связанные селекторы для фильтрации по Manufacturers.name и ChargingStationModels.name.

RQ405. Требование к функции поиска. При вводе текста Система должна искать по вхождению подстроки в ChargingStations.serialNumber и ChargingStationModels.name.

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

  • Серийный номер станции
  • Модель и производитель
  • Цветовой индикатор статуса
  • Назначенное сервисное ТС (если есть)
  • Общее количество сессий зарядки
  • Индикатор необходимости ТО

RQ407. Требование к индикатору ТО. Индикатор должен показывать статус на основе циклов зарядки:

  • Зеленый: ТО не требуется (< 80% от интервала циклов)
  • Желтый: ТО потребуется скоро (80-100% от интервала циклов)
  • Красный: ТО просрочено (> 100% от интервала циклов)

RQ408. Требование к отслеживанию циклов зарядки. Система должна автоматически увеличивать счетчик циклов зарядки (totalChargingSessions) при каждом завершении сессии зарядки и проверять необходимость ТО.


UC028: Добавление новой зарядной станции

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

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

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

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

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

  • Модель станции (idChargingStationModel)
  • Серийный номер (serialNumber)
  • Дата производства (manufactureDate)
  • Интервал ТО по циклам зарядки (maintenanceIntervalCycles)

RQ409. Требование к валидации серийного номера. Система должна проверять уникальность serialNumber среди всех ChargingStations.

RQ410. Требование к автозаполнению характеристик. При выборе модели Система должна автоматически отобразить технические характеристики из ChargingStationModels.

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

  • status = AVAILABLE
  • totalChargingSessions = 0
  • totalKwhDelivered = 0
  • currentMaintenanceCycle = 0 (счетчик текущих циклов до ТО)
  • createdBy = текущий диспетчер
  • createdAt = текущее время

UC029: Редактирование информации о станции

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

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

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

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

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

  • Дату окончания гарантии (warrantyEndDate)
  • Дату последнего ТО (lastMaintenanceDate)
  • Дату следующего ТО (nextMaintenanceDate)
  • Интервал ТО по циклам (maintenanceIntervalCycles)

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

  • Серийный номер (только при создании)
  • Модель станции
  • Статус станции (только через UC030)
  • Счетчики использования (totalChargingSessions, totalKwhDelivered)
  • Текущий счетчик циклов ТО (currentMaintenanceCycle)

UC030: Управление статусом станции

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

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

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

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

RQ415. Требование к переходам статусов. Разрешенные переходы статусов:

  • AVAILABLE → IN_USE, MAINTENANCE, UNAVAILABLE
  • IN_USE → AVAILABLE, MAINTENANCE, UNAVAILABLE
  • MAINTENANCE → AVAILABLE, UNAVAILABLE
  • UNAVAILABLE → AVAILABLE (после устранения проблем)

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

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


UC031: Назначение станции на сервисное ТС (формирование комплекта)

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

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

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

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

RQ418. Требование к доступности ТС. Система должна отображать только сервисные ТС со статусом AVAILABLE.

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

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

RQ421. Требование к созданию назначения. При успешном назначении Система должна:

  • Создать запись в StationVehicleAssignments с assignedAt = текущее время
  • Изменить статус станции на IN_USE
  • Изменить статус ТС на IN_USE

UC032: Отвязка станции от ТС

Описание: Диспетчер разрывает связь между зарядной станцией и сервисным ТС.

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

graph TD
    Start([Начало]) --> A1[Пользователь: Нажимает Отвязать от ТС]
    A1 --> S1[Система: Проверяет использование комплекта]
    S1 --> S2[Система: Загружает активные маршруты]
    S2 --> D1{Есть активные маршруты?}
    D1 -->|Да| S3[Система: Отображает предупреждение с деталями]
    D1 -->|Нет| S4[Система: Отображает форму отвязки]
    S3 --> A2[Пользователь: Просматривает активные маршруты]
    A2 --> A3[Пользователь: Принимает решение о продолжении]
    A3 --> D2{Продолжить отвязку?}
    D2 -->|Нет| End([Конец])
    D2 -->|Да| S4
    S4 --> A4[Пользователь: Указывает причину отвязки]
    A4 --> A5[Пользователь: Нажимает Подтвердить]
    A5 --> S5[Система: Обновляет StationVehicleAssignments.unassignedAt]
    S5 --> S6[Система: Возвращает статусы AVAILABLE]
    S6 --> S7[Система: Логирует отвязку]
    S7 --> End

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

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

  • Список активных маршрутов (Routes со статусами PLANNED, IN_PROGRESS)
  • Предупреждение о последствиях отвязки

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

  • Установить StationVehicleAssignments.unassignedAt = текущее время
  • Изменить статусы станции и ТС на AVAILABLE
  • Сохранить причину отвязки в аудит-лог

UC033: Просмотр истории использования станции

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

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

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

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

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

  • Полную информацию о станции и её модели
  • Текущий статус и назначенное ТС
  • Технические характеристики из ChargingStationModels
  • Текущий счетчик циклов и прогресс до ТО

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

  • Список выполненных маршрутов с датами и техниками
  • Детали заказов по каждому маршруту с энергопотреблением
  • Общее количество сессий зарядки и прогресс до ТО
  • Суммарный объем переданной энергии по заказам

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

  • Среднее количество сессий в день/месяц/цикл ТО
  • Средний объем энергии за сессию и за заказ
  • Интервалы зарядки: минимальный, максимальный, средний
  • Объем накопленной энергии станцией между зарядками
  • Расход энергии по типам заказов (экстренные/плановые)
  • Время простоя vs время в работе
  • Эффективность использования станции по циклам

RQ427. Требование к энергетической аналитике. Система должна отображать:

  • График энергопотребления по дням/неделям
  • Распределение объемов зарядки (до 50%, 50-80%, 80-100%)
  • Сравнение фактического и теоретического энергопотребления
  • Анализ деградации батареи станции (если применимо)

UC034: Планирование и учет технического обслуживания станций

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

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

graph TD
    Start([Начало]) --> A1[Пользователь: Нажимает Запланировать ТО]
    A1 --> S1[Система: Отображает форму планирования ТО]
    S1 --> A2[Пользователь: Выбирает тип действия]
    A2 --> D1{Тип действия}
    D1 -->|Запланировать| A3[Пользователь: Указывает дату планового ТО]
    D1 -->|Зарегистрировать выполненное| A4[Пользователь: Заполняет данные о проведенном ТО]
    A3 --> S2[Система: Сохраняет плановую дату ТО]
    A4 --> S3[Система: Создает запись о ТО]
    A4 --> S4[Система: Обновляет lastMaintenanceDate]
    S4 --> S5[Система: Рассчитывает nextMaintenanceDate]
    S5 --> S6[Система: Переводит станцию в статус AVAILABLE]
    S2 --> End([Конец])
    S6 --> End

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

RQ428. Требование к планированию ТО. Диспетчер должен иметь возможность:

  • Запланировать дату следующего ТО
  • Установить интервал ТО по количеству циклов зарядки
  • Указать тип планового ТО (плановое/внеплановое/по циклам)
  • Добавить комментарии к плановому ТО

RQ429. Требование к регистрации выполненного ТО. При регистрации ТО обязательны:

  • Дата проведения ТО
  • Количество циклов зарядки на момент ТО
  • Описание выполненных работ
  • Стоимость ТО (опционально)
  • Результат ТО (успешно/требуются дополнительные работы)

RQ430. Требование к автоматическому расчету ТО. При регистрации ТО Система должна:

  • Обновить lastMaintenanceDate в ChargingStations
  • Сбросить счетчик циклов для отсчета до следующего ТО
  • Рассчитать nextMaintenanceDate на основе интервала циклов и средней интенсивности использования
  • Обновить счетчики использования и энергопотребления

RQ431. Требование к мониторингу циклов ТО. Система должна:

  • Автоматически отслеживать приближение к лимиту циклов
  • Уведомлять диспетчеров за 50 циклов до планового ТО
  • Блокировать назначение станции на новые маршруты при превышении лимита циклов на 10%

UC035: Деактивация/архивирование станции

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

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

graph TD
    Start([Начало]) --> A1[Пользователь: Нажимает Деактивировать станцию]
    A1 --> S1[Система: Проверяет использование станции]
    S1 --> S2[Система: Загружает связанные маршруты]
    S2 --> S3[Система: Загружает назначения на ТС]
    S3 --> D1{Есть активные связи?}
    D1 -->|Да| S4[Система: Отображает предупреждение со списком связей]
    D1 -->|Нет| S5[Система: Отображает форму деактивации]
    S4 --> A2[Пользователь: Просматривает список маршрутов и назначений]
    A2 --> A3[Пользователь: Принимает решение о продолжении]
    A3 --> D2{Продолжить деактивацию?}
    D2 -->|Нет| End([Конец])
    D2 -->|Да| S5
    S5 --> A4[Пользователь: Указывает причину деактивации]
    A4 --> A5[Пользователь: Нажимает Подтвердить]
    A5 --> S6[Система: Устанавливает isDeleted = true]
    S6 --> S7[Система: Отвязывает от назначенных ТС]
    S7 --> S8[Система: Логирует деактивацию]
    S8 --> End

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

RQ432. Требование к проверке перед деактивацией. Система должна проверить и отобразить:

  • Список активных маршрутов (Routes со статусами PLANNED, IN_PROGRESS)
  • Текущие назначения на ТС через StationVehicleAssignments

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

  • Все маршруты, где использовалась станция (за последние 6 месяцев)
  • Текущие назначения на ТС
  • Предупреждение о последствиях деактивации

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

  • Установить ChargingStations.isDeleted = true
  • Удалить активные записи из StationVehicleAssignments
  • Сохранить причину деактивации в аудит-лог

RQ435. Требование к мягкому удалению. Деактивированные станции должны:

  • Исключаться из основных рабочих списков
  • Оставаться доступными в отчетах и истории
  • Иметь возможность восстановления администратором

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

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

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

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

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

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

RQ438. Требование к времени отклика. Загрузка списка станций должна выполняться не более чем за 2 секунды при нагрузке до 1000 станций.

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

  • ChargingStations.serialNumber
  • ChargingStations.status
  • ChargingStationModels.name
  • Manufacturers.name

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

RQ440. Требование к синхронизации с маршрутами. При изменении статуса станции должны автоматически обновляться связанные маршруты.

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

  • О приближении к лимиту циклов ТО (за 50 циклов)
  • О просроченном ТО по циклам
  • При критических изменениях статуса станции

RQ442. Требование к консистентности данных. Все операции со станциями должны выполняться в рамках транзакций для обеспечения целостности данных между связанными таблицами ChargingStations, StationVehicleAssignments, Routes и статусами ресурсов.

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

Общее описание блока

Блок предназначен для комплексного управления техниками - сотрудниками компании, которые выполняют заказы по зарядке электромобилей с помощью мобильных зарядных станций. Блок обеспечивает полный жизненный цикл управления техниками: от регистрации в системе до архивирования учетной записи.

Основные возможности блока:

  • Ведение базы данных техников с их профилями и контактной информацией
  • Управление статусами техников (активен/неактивен)
  • Планирование рабочих смен с контролем временных пересечений
  • Мониторинг работы техников в реальном времени
  • Ведение истории работы и статистики выполнения заказов
  • Безопасное архивирование учетных записей с контролем активных назначений

UC036: Просмотр списка техников

Актор: Диспетчер, Администратор

Описание: Просмотр полного списка техников с возможностью фильтрации и сортировки для оперативного управления персоналом.

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

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

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

classDiagram
    class СписокТехников {
        <<Screen>>
        +ОбластьФильтрации : ОбластьФильтрацииТехников
        +ТаблицаТехников : ТаблицаТехников
        +КнопкаДобавитьТехника : Button
    }
    
    class ОбластьФильтрацииТехников {
        <<Area>>
        +ФильтрПоСтатусу : DropDown
        +ФильтрПоДоступности : DropDown
        +ПоискПоИмени : TextField[50]
        +КнопкаПрименить : Button
        +КнопкаСброс : Button
    }
    
    class ТаблицаТехников {
        <<Area>>
        +СтолбецИмя : TableColumn
        +СтолбецТелефон : TableColumn
        +СтолбецСтатус : TableColumn
        +СтолбецТекущаяСмена : TableColumn
        +СтолбецДействия : TableColumn
    }
    
    СписокТехников *-- ОбластьФильтрацииТехников
    СписокТехников *-- ТаблицаТехников

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

RQ320. Требование к отображению списка техников. Система должна отображать список всех техников с основной информацией: ФИО, телефон, текущий статус, наличие активной смены.

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

  • Статусу (Активен/Неактивен/Все)
  • Доступности (Доступен/На смене/Недоступен/Все)
  • Поиску по ФИО (частичное совпадение)

RQ322. Требование к сортировке списка. Система должна обеспечивать сортировку по полям: ФИО, статус, дата последней активности.

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

  • Активного статуса
  • Наличия текущей рабочей смены
  • Отсутствия назначения на активный маршрут

UC037: Добавление нового техника

Актор: Диспетчер, Администратор

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

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

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

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

classDiagram
    class ФормаТехника {
        <<Screen>>
        +ОсновнаяИнформация : ОбластьОсновнойИнформации
        +КонтактныеДанные : ОбластьКонтактныхДанных
        +КнопкаСохранить : Button
        +КнопкаОтмена : Button
    }
    
    class ОбластьОсновнойИнформации {
        <<Area>>
        +Фамилия : TextField[50]*
        +Имя : TextField[50]*
        +Отчество : TextField[50]
        +ДатаРождения : DateField
        +Фото : FileUpload
    }
    
    class ОбластьКонтактныхДанных {
        <<Area>>
        +Email : TextField[100]*
        +Телефон : TextField[20]*
        +АдресПроживания : TextField[200]
        +Комментарий : TextArea[500]
    }
    
    ФормаТехника *-- ОбластьОсновнойИнформации
    ФормаТехника *-- ОбластьКонтактныхДанных

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

RQ324. Требование к обязательным полям. При создании техника обязательными являются поля: Фамилия, Имя, Email, Телефон.

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

  • Корректность формата email
  • Корректность формата телефона (российский формат)
  • Уникальность email и телефона в системе

RQ326. Требование к генерации учетных данных. Система должна автоматически:

  • Создать учетную запись с ролью "Техник"
  • Сгенерировать временный пароль
  • Отправить учетные данные на указанный email

RQ327. Требование к статусу по умолчанию. Новый техник должен создаваться со статусом "Активен".


UC038: Редактирование профиля техника

Актор: Диспетчер, Администратор

Описание: Изменение данных профиля существующего техника, включая контактную информацию и дополнительные атрибуты.

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

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

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

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

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

RQ328. Требование к редактируемым полям. Пользователь должен иметь возможность изменять все поля профиля, кроме служебной информации.

RQ329. Требование к сохранению изменений. Система должна сохранять изменения только при успешной валидации всех данных.

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

  • Дату регистрации в системе
  • Дату последней активности
  • Количество выполненных заказов
  • Средний рейтинг от клиентов

UC039: Управление статусом техника (активен/неактивен)

Актор: Диспетчер, Администратор

Описание: Изменение статуса техника между "Активен" и "Неактивен" с контролем влияния на назначения и смены.

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

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

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

classDiagram
    class ДиалогИзмененияСтатуса {
        <<Screen>>
        +ТекущийСтатус : TextField[readonly]
        +НовыйСтатус : TextField[readonly]
        +СписокАктивныхНазначений : ListBox
        +ПричинаИзменения : TextArea[200]
        +КнопкаПодтвердить : Button
        +КнопкаОтмена : Button
    }
    
    class ПредупреждениеОНазначениях {
        <<Screen>>
        +ТекстПредупреждения : Label
        +СписокМаршрутов : ListBox
        +СписокСмен : ListBox
        +КнопкаПродолжить : Button
        +КнопкаОтмена : Button
    }

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

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

  • Наличие активных маршрутов
  • Наличие запланированных смен
  • Наличие заказов в статусе "Назначен"

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

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

RQ334. Требование к влиянию на доступность. Неактивный техник не должен:

  • Отображаться в списках для назначения на маршруты
  • Иметь возможность входа в мобильное приложение
  • Получать новые смены

UC040: Просмотр рабочих смен техников

Актор: Диспетчер, Администратор

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

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

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

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

classDiagram
    class КалендарьСмен {
        <<Screen>>
        +ПанельФильтрации : ОбластьФильтрацииСмен
        +КалендарнаяСетка : ОбластьКалендаря
        +КнопкаСоздатьСмену : Button
    }
    
    class ОбластьФильтрацииСмен {
        <<Area>>
        +ВыборПериода : DateRange
        +ВыборТехника : DropDown
        +ВыборСтатусаСмены : DropDown
        +КнопкаПрименить : Button
    }
    
    class ОбластьКалендаря {
        <<Area>>
        +Заголовки : CalendarHeader
        +ЯчейкиДней : CalendarCell[]
        +БлокиСмен : ShiftBlock[]
    }
    
    КалендарьСмен *-- ОбластьФильтрацииСмен
    КалендарьСмен *-- ОбластьКалендаря

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

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

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

  • ФИО техника
  • Время начала и окончания
  • База начала и окончания
  • Статус смены (Запланирована/Активна/Завершена)

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

  • Периоду (дата начала и окончания)
  • Конкретному технику
  • Статусу смены

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


UC041: Создание и редактирование рабочих смен

Актор: Диспетчер, Администратор

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

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

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

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

classDiagram
    class ФормаСмены {
        <<Screen>>
        +ВыборТехника : DropDown*
        +ДатаНачала : DateField*
        +ВремяНачала : TimeField*
        +БазаНачала : DropDown*
        +ДатаОкончания : DateField*
        +ВремяОкончания : TimeField*
        +БазаОкончания : DropDown*
        +Комментарий : TextArea[200]
        +КнопкаСохранить : Button
        +КнопкаОтмена : Button
    }
    
    class ПредупреждениеПересечений {
        <<Screen>>
        +ТекстПредупреждения : Label
        +СписокПересечений : ListBox
        +КнопкаПродолжить : Button
        +КнопкаОтмена : Button
    }

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

RQ339. Требование к обязательным полям. При создании смены обязательными являются: Техник, Дата начала, Время начала, База начала, Дата окончания, Время окончания.

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

  • Время окончания позже времени начала
  • Общая продолжительность смены не более 12 часов
  • Дата окончания не ранее даты начала

RQ341. Требование к проверке пересечений. Система должна проверять отсутствие пересечений смен одного техника по времени.

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

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


UC042: Просмотр истории работы техника

Актор: Диспетчер, Администратор

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

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

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

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

classDiagram
    class ПрофильТехника {
        <<Screen>>
        +ИнформацияОТехнике : ОбластьПрофиля
        +СтатистикаРаботы : ОбластьСтатистики
        +ИсторияЗаказов : ОбластьИсторииЗаказов
        +ИсторияСмен : ОбластьИсторииСмен
        +КнопкаРедактировать : Button
        +КнопкаИзменитьСтатус : Button
    }
    
    class ОбластьСтатистики {
        <<Area>>
        +ВсегоЗаказов : TextField[readonly]
        +ВыполненныхЗаказов : TextField[readonly]
        +ОтмененныхЗаказов : TextField[readonly]
        +СреднийРейтинг : TextField[readonly]
        +ОбщееВремяРаботы : TextField[readonly]
    }
    
    class ОбластьИсторииЗаказов {
        <<Area>>
        +ТаблицаЗаказов : TableView
        +ФильтрПоПериоду : DateRange
        +ФильтрПоСтатусу : DropDown
    }
    
    ПрофильТехника *-- ОбластьПрофиля
    ПрофильТехника *-- ОбластьСтатистики
    ПрофильТехника *-- ОбластьИсторииЗаказов
    ПрофильТехника *-- ОбластьИсторииСмен

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

RQ344. Требование к отображению статистики. Система должна рассчитывать и отображать:

  • Общее количество назначенных заказов
  • Количество успешно выполненных заказов
  • Количество отмененных заказов
  • Средний рейтинг от клиентов
  • Общее время работы (сумма всех смен)

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

  • Периоду выполнения
  • Статусу заказа
  • Типу заказа (срочный/плановый)

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

  • Дата и время смены
  • База начала и окончания
  • Фактическое время работы
  • Количество выполненных заказов за смену

UC043: Просмотр операций техника в реальном времени

Актор: Диспетчер, Администратор

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

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

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

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

classDiagram
    class МониторингТехника {
        <<Screen>>
        +ИнформацияОТехнике : ОбластьИнформацииТехника
        +КартаМестоположения : ОбластьКарты
        +ТекущийЗаказ : ОбластьТекущегоЗаказа
        +ИсторияОперацийДня : ОбластьИсторииОпераций
    }
    
    class ОбластьКарты {
        <<Area>>
        +КартаGPS : MapView
        +МеткаТехника : MapMarker
        +МеткаКлиента : MapMarker
        +МаршрутДвижения : MapRoute
    }
    
    class ОбластьТекущегоЗаказа {
        <<Area>>
        +НомерЗаказа : TextField[readonly]
        +СтатусЗаказа : TextField[readonly]
        +ВремяНачала : TextField[readonly]
        +ИнформацияОКлиенте : TextField[readonly]
        +ПрогрессВыполнения : ProgressBar
    }
    
    МониторингТехника *-- ОбластьИнформацииТехника
    МониторингТехника *-- ОбластьКарты
    МониторингТехника *-- ОбластьТекущегоЗаказа
    МониторингТехника *-- ОбластьИсторииОпераций

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

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

  • Текущее местоположение техника (по GPS)
  • Местоположение клиента (при наличии активного заказа)
  • Маршрут движения к клиенту

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

  • Номер и статус текущего заказа
  • Время начала выполнения заказа
  • Прогресс выполнения (В пути/Прибыл/Заряжает/Завершает)
  • Контактную информацию клиента

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

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

  • Время начала и окончания смены
  • Выполненные заказы
  • Время в пути между заказами
  • Перерывы и простои

UC044: Деактивация/архивирование учетной записи техника

Актор: Диспетчер, Администратор

Описание: Процесс архивирования учетной записи техника с контролем активных назначений и возможностью последующего восстановления.

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

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

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

classDiagram
    class ПредупреждениеАрхивирования {
        <<Screen>>
        +ТекстПредупреждения : Label
        +СписокАктивныхМаршрутов : ListBox
        +СписокЗапланированныхСмен : ListBox
        +ПричинаАрхивирования : TextArea[200]*
        +КнопкаПродолжить : Button
        +КнопкаОтмена : Button
    }
    
    class ДиалогВосстановления {
        <<Screen>>
        +ИнформацияОТехнике : TextField[readonly]
        +ДатаАрхивирования : TextField[readonly]
        +ПричинаАрхивирования : TextField[readonly]
        +КнопкаВосстановить : Button
        +КнопкаОтмена : Button
    }

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

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

  • Список активных маршрутов, на которые назначен техник
  • Список запланированных смен
  • Заказы в статусе "Назначен" или "В работе"

RQ352. Требование к обязательной причине. При архивировании техника обязательно указание причины архивирования для ведения кадрового учета.

RQ353. Требование к последствиям архивирования. После архивирования:

  • Техник переводится в статус "Архивирован"
  • Учетная запись деактивируется (вход в систему невозможен)
  • Все активные назначения снимаются
  • Запланированные смены отменяются
  • История работы сохраняется

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

  • Восстановление статуса "Активен"
  • Активация учетной записи
  • Сохранение всей истории работы
  • Возможность создания новых смен

Модель предметной области (связанные сущности)

Основные сущности блока "Управление техниками"

classDiagram
    class Пользователи {
        +Id : Number
        +Фамилия : String
        +Имя : String
        +Отчество : String
        +Email : String
        +Телефон : String
        +Статус : СтатусыПользователей
        +Роль : РолиПользователей
        +ДатаРегистрации : Date
        +ДатаПоследнейАктивности : Date
    }
    
    class РабочиеСмены {
        +Id : Number
        +Техник : Пользователи
        +ДатаНачала : Date
        +ВремяНачала : Time
        +БазаНачала : Базы
        +ДатаОкончания : Date
        +ВремяОкончания : Time
        +БазаОкончания : Базы
        +Статус : СтатусыСмен
        +Комментарий : String
    }
    
    class Маршруты {
        +Id : Number
        +НазначенныйТехник : Пользователи
        +ДатаВыполнения : Date
        +Статус : СтатусыМаршрутов
        +СпискЗаказов : Заказы[]
    }
    
    class СтатусыПользователей {
        <<enumeration>>
        Активен
        Неактивен
        Архивирован
    }
    
    class СтатусыСмен {
        <<enumeration>>
        Запланирована
        Активна
        Завершена
        Отменена
    }
    
    class Базы {
        +Id : Number
        +Название : String
        +Адрес : String
        +Координаты : String
    }
    
    Пользователи --> СтатусыПользователей
    РабочиеСмены --> Пользователи
    РабочиеСмены --> Базы
    РабочиеСмены --> СтатусыСмен
    Маршруты --> Пользователи

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

Модель предметной области (связанные сущности)

Основные сущности блока "Обработка обращений клиентов"

classDiagram
    class ОбращенияКлиентов {
        +Id : Number
        +НомерОбращения : String
        +Клиент : Пользователи
        +ТемаОбращения : String
        +ОписаниеПроблемы : String
        +Приоритет : ПриоритетыОбращений
        +Статус : СтатусыОбращений
        +ТипОбращения : ТипыОбращений
        +СвязанныйЗаказ : Заказы
        +ДатаСоздания : Date
        +ДатаПоследнегоОтвета : Date
        +НазначенныйДиспетчер : Пользователи
        +ДатаЗакрытия : Date
        +ПричинаЗакрытия : String
    }
    
    class СообщенияПереписки {
        +Id : Number
        +Обращение : ОбращенияКлиентов
        +Автор : Пользователи
        +ТекстСообщения : String
        +ДатаСоздания : Date
        +ТипСообщения : ТипыСообщений
        +ВложенияФайлов : String[]
        +ПрочитаноКлиентом : Boolean
        +ПрочитаноДиспетчером : Boolean
    }
    
    class СтатусыОбращений {
        <<enumeration>>
        NEW
        ASSIGNED
        IN_PROGRESS
        WAITING_CLIENT
        RESOLVED
        CLOSED
        DELETED
    }
    
    class ПриоритетыОбращений {
        <<enumeration>>
        LOW
        NORMAL
        HIGH
        CRITICAL
    }
    
    class ТипыОбращений {
        <<enumeration>>
        QUESTION
        COMPLAINT
        TECHNICAL_ISSUE
        PAYMENT_ISSUE
        ORDER_RELATED
        OTHER
    }
    
    class ТипыСообщений {
        <<enumeration>>
        CLIENT_MESSAGE
        DISPATCHER_RESPONSE
        SYSTEM_MESSAGE
        INTERNAL_NOTE
    }
    
    class Пользователи {
        +Id : Number
        +Фамилия : String
        +Имя : String
        +Email : String
        +Телефон : String
        +Роль : РолиПользователей
    }
    
    class Заказы {
        +Id : Number
        +НомерЗаказа : String
        +Клиент : Пользователи
        +Статус : СтатусыЗаказов
    }
    
    ОбращенияКлиентов --> СтатусыОбращений
    ОбращенияКлиентов --> ПриоритетыОбращений
    ОбращенияКлиентов --> ТипыОбращений
    ОбращенияКлиентов --> Пользователи : Клиент
    ОбращенияКлиентов --> Пользователи : НазначенныйДиспетчер
    ОбращенияКлиентов --> Заказы
    СообщенияПереписки --> ОбращенияКлиентов
    СообщенияПереписки --> Пользователи : Автор
    СообщенияПереписки --> ТипыСообщений

UC045: Просмотр списка открытых обращений

Описание: Диспетчер просматривает список всех открытых обращений клиентов с возможностью фильтрации и сортировки для эффективной обработки.

Актор: Диспетчер

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

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

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

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

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

RQ451. Требование к загрузке открытых обращений. Система должна отображать все обращения со статусами NEW, ASSIGNED, IN_PROGRESS, WAITING_CLIENT, RESOLVED, исключая CLOSED и DELETED.

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

RQ453. Требование к сортировке по умолчанию. Обращения должны сортироваться по убыванию приоритета (CRITICAL → HIGH → NORMAL → LOW), затем по времени создания (новые первыми).

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

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

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

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

RQ458. Требование к отображению приоритета. Каждая карточка должна содержать цветовой индикатор приоритета: красный (CRITICAL), оранжевый (HIGH), желтый (NORMAL), серый (LOW).


UC046: Просмотр детальной информации обращения

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

Актор: Диспетчер

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

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

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

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

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

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

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

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

RQ462. Требование к информации о связанном заказе. При наличии связи с заказом должна отображаться информация: номер заказа, статус, дата и ссылка на детали заказа.

RQ463. Требование к пометке прочитанных сообщений. При открытии обращения Система должна автоматически помечать все сообщения как прочитанные диспетчером.

RQ464. Требование к доступности действий. Кнопки действий должны быть доступны в зависимости от статуса обращения и роли пользователя.


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

Описание: Диспетчер отвечает на обращение клиента, отправляя текстовое сообщение с возможностью прикрепления файлов.

Актор: Диспетчер

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

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

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

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

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

RQ465. Требование к валидации текста ответа. Текст ответа не должен быть пустым и не должен превышать 2000 символов.

RQ466. Требование к прикреплению файлов. Система должна поддерживать прикрепление файлов размером до 10 МБ каждый, форматы: jpg, png, pdf, doc, docx, txt.

RQ467. Требование к созданию сообщения. При отправке ответа Система должна создать запись в СообщенияПереписки с типом DISPATCHER_RESPONSE.

RQ468. Требование к обновлению времени ответа. Система должна обновить поле ДатаПоследнегоОтвета в обращении текущим временем.

RQ469. Требование к изменению статуса. Если обращение имело статус NEW, Система должна изменить его на ASSIGNED и назначить текущего диспетчера.

RQ470. Требование к уведомлению клиента. Система должна отправить push-уведомление и email клиенту о получении ответа на обращение.

RQ471. Требование к сохранению черновика. Система должна автоматически сохранять черновик ответа каждые 30 секунд во время ввода текста.


UC048: Изменение статуса обращения

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

Актор: Диспетчер

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

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

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

classDiagram
    class ФормаИзмененияСтатуса {
        <<Screen>>
        +ТекущийСтатус : СтатусныйБлок
        +СелекторНовогоСтатуса : ВыпадающийСписок
        +ПолеПричины : ТекстоваяОбласть[500]
        +ИнформацияОПоследствиях : ИнформационныйБлок
        +КнопкаПодтвердить : Кнопка
        +КнопкаОтмена : Кнопка
    }
    
    class СтатусныйБлок {
        <<Area>>
        +НазваниеСтатуса : Текст
        +ЦветовойИндикатор : ИндикаторСтатуса
        +ВремяУстановки : Время
    }

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

RQ472. Требование к доступным переходам статусов. Разрешенные переходы статусов:

  • NEW → ASSIGNED, IN_PROGRESS, RESOLVED, CLOSED
  • ASSIGNED → IN_PROGRESS, WAITING_CLIENT, RESOLVED, CLOSED
  • IN_PROGRESS → WAITING_CLIENT, RESOLVED, CLOSED
  • WAITING_CLIENT → IN_PROGRESS, RESOLVED, CLOSED
  • RESOLVED → CLOSED, IN_PROGRESS (переоткрытие)

RQ473. Требование к обязательной причине. При изменении статуса обязательно указание причины для аудита и истории обращения.

RQ474. Требование к созданию системного сообщения. При изменении статуса Система должна создать сообщение типа SYSTEM_MESSAGE с описанием изменения.

RQ475. Требование к уведомлениям. Система должна уведомлять клиента об изменении статуса обращения через push-уведомления и email.

RQ476. Требование к валидации статуса RESOLVED. При установке статуса RESOLVED обязательно наличие хотя бы одного ответа диспетчера в переписке.


UC049: Закрытие обращения

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

Актор: Диспетчер

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

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

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

classDiagram
    class ФормаЗакрытияОбращения {
        <<Screen>>
        +ИнформацияОбОбращении : ОбластьКонтекста
        +ВыборПричиныЗакрытия : ВыпадающийСписок
        +ПолеФинальногоКомментария : ТекстоваяОбласть[1000]
        +ЧекбоксЗапросаОценки : ЧекБокс
        +ИнформацияОПоследствиях : ИнформационныйБлок
        +КнопкаЗакрыть : Кнопка
        +КнопкаОтмена : Кнопка
    }

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

RQ477. Требование к возможности закрытия. Закрытие обращения доступно для статусов RESOLVED, IN_PROGRESS, WAITING_CLIENT, ASSIGNED.

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

RQ479. Требование к финальному комментарию. Финальный комментарий не должен превышать 1000 символов и должен быть обязательным для причины "Другое".

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

RQ481. Требование к запросу оценки. При установке флага запроса оценки Система должна отправить клиенту отдельное уведомление с просьбой оценить качество обработки обращения.

RQ482. Требование к автоматическому закрытию. Обращения со статусом RESOLVED должны автоматически закрываться через 72 часа, если клиент не отвечает.


UC050: Просмотр истории переписки по обращению

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

Актор: Диспетчер

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

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

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

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

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

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

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

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

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

RQ487. Требование к экспорту истории. Система должна поддерживать экспорт полной истории переписки в форматах PDF и CSV с сохранением структуры и метаданных.

RQ488. Требование к статистике. В нижней части должна отображаться статистика: общее количество сообщений, количество по типам, период переписки.

RQ489. Требование к производительности. Загрузка истории переписки не должна превышать 3 секунд для обращений с количеством сообщений до 1000.


Общие требования к блоку "Обработка обращений клиентов"

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

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

RQ491. Требование к аудиту действий. Все действия диспетчера должны логироваться с указанием типа операции, идентификатора обращения, пользователя-инициатора, времени операции.

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

RQ493. Требование к времени отклика. Загрузка списка обращений должна выполняться не более чем за 3 секунды при нагрузке до 5000 обращений.

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

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

RQ495. Требование к уведомлениям. Система должна интегрироваться с сервисом уведомлений для отправки push-уведомлений в мобильное приложение

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

Требования к интерфейсу

RQ498. Требование к адаптивности. Интерфейс блока должен корректно отображаться на экранах с разрешением от 1024x768 пикселей.

RQ499. Требование к доступности. Интерфейс должен соответствовать стандартам доступности WCAG 2.1 уровня AA.

RQ500. Требование к локализации. Все текстовые элементы интерфейса должны поддерживать локализацию на русский и английский языки.