ТЗ на модуль Техника
СТРУКТУРА ТЕХНИЧЕСКОГО ЗАДАНИЯ МОДУЛЯ ТЕХНИКА
Оглавление
1. Общие положения
- 1.1. Термины и определения (ссылка на общий глоссарий)
- 1.2. Цель и назначение модуля техника
- 1.3. Описание рабочих процессов техника
- 1.4. Модель предметной области (ссылка на общую модель)
- 1.5. Ролевая модель техника
2. Требования к функциональным блокам модуля техника
2.1. Блок «Управление рабочими сменами»
2.2. Блок «Управление маршрутами»
2.3. Блок «Выполнение заказов»
2.4. Блок «Взаимодействие с клиентами»
2.5. Блок «Мониторинг оборудования»
2.6. Блок «Навигация и геолокация»
2.7. Блок «Отчетность и история»
3. Требования к интерфейсу мобильного приложения
4. Требования к геолокации и автоматизации
5. Требования к безопасности и разграничению доступа
6. Интеграционные требования
СПИСОК ФУНКЦИЙ МОДУЛЯ ТЕХНИКА
2.1. Блок «Управление рабочими сменами»
- UC001: Просмотр расписания рабочих смен
- UC002: Начало рабочей смены
- UC003: Завершение рабочей смены
- UC004: Просмотр информации о текущей смене
- UC005: Просмотр истории рабочих смен
2.2. Блок «Управление маршрутами»
- UC006: Получение и просмотр назначенного маршрута
- UC007: Принятие назначенного маршрута
- UC008: Отклонение маршрута с указанием причины
- UC009: Просмотр детальной информации маршрута
- UC010: Отслеживание прогресса выполнения маршрута
2.3. Блок «Выполнение заказов»
- UC011: Просмотр списка заказов в маршруте
- UC012: Просмотр детальной информации заказа
- UC013: Подтверждение выезда к клиенту ("Выехал")
- UC014: Автоматическая отметка прибытия (по GPS)
- UC015: Начало процесса зарядки с фотофиксацией
- UC016: Мониторинг процесса зарядки в реальном времени
- UC017: Завершение зарядки с фотоотчетом
- UC018: Сообщение о проблемах при выполнении заказа
- UC019: Просмотр истории выполненных заказов
2.4. Блок «Взаимодействие с клиентами»
- UC020: Просмотр контактной информации клиента (без номера телефона)
- UC021: Отправка сообщений в чат с клиентом
- UC022: Получение сообщений от клиента
- UC023: Просмотр истории переписки с клиентом по заказу
2.5. Блок «Мониторинг оборудования»
- UC024: Просмотр статуса сервисного ТС
- UC025: Просмотр статуса зарядной станции
- UC026: Создание заявки на неисправность ТС
- UC027: Создание заявки на неисправность зарядной станции
- UC028: Просмотр истории заявок на неисправности
- UC029: Просмотр технических характеристик оборудования
2.6. Блок «Навигация и геолокация»
- UC030: Автоматическая передача GPS-координат в систему
- UC031: Построение маршрута к адресу заказа
- UC032: Пошаговая навигация к клиенту
- UC033: Автоматическое определение прибытия в геозону заказа
- UC034: Отображение текущего местоположения на карте
2.7. Блок «Отчетность и история»
- UC035: Просмотр статистики выполненных заказов
- UC036: Просмотр статистики рабочего времени
- UC037: Формирование отчета о рабочем дне
- UC038: Просмотр рейтинга и оценок от клиентов
UC039:Экспорт данных о выполненной работе
Ключевые особенности модуля:
Автоматизация на основе GPS:
- Автоматическое переключение статусов при геособытиях
- Отслеживание маршрута движения техника
- Контроль соблюдения графика выполнения заказов
Фотодокументирование:
- Обязательные фото при начале/завершении зарядки
- Фотоотчеты при сообщении о проблемах
- Привязка фото к конкретным заказам и оборудованию
Коммуникация:
- Защищенный чат с клиентами без раскрытия телефонов
- Автоматические уведомления клиентам о статусе заказа
- Интеграция с системой уведомлений диспетчера
Мониторинг оборудования:
- Получение данных о состоянии МЗС от серверной части
- Система заявок на неисправности с фотофиксацией
- Автоматический журнал операций с оборудованием
Предлагаемые действия техника по статусам
Рабочая смена:
- PLANNED → ACTIVE: "Начать смену" (техник отмечается на работу)
- ACTIVE → COMPLETED: "Завершить смену" (техник завершает рабочий день)
Маршрут:
- ASSIGNED: Техник получает уведомление и может "Принять маршрут" или "Отклонить с причиной"
- ASSIGNED → IN_PROGRESS: "Принять маршрут"
- IN_PROGRESS → COMPLETED: автоматически при завершении всех заказов в маршруте
Заказ:
- ASSIGNED → EN_ROUTE: "Выехал к клиенту" (или автоматически при начале движения)
- EN_ROUTE → ARRIVED: автоматически по GPS при входе в геозону адреса (радиус ~100м)
- ARRIVED → CHARGING: "Начать зарядку" + обязательное фото подключения
- CHARGING → COMPLETED: "Завершить зарядку" + фото отключения и показаний счетчика
- Любой статус → FAILED: "Сообщить о проблеме" + причина + фото
Блок «Управление рабочими сменами» - Модуль Техника
Общее описание блока
Блок предназначен для управления рабочими сменами техниками через мобильное приложение. Обеспечивает полный жизненный цикл работы со сменами: от просмотра расписания до завершения смены с контролем геолокации и времени.
Основные возможности блока:
- Просмотр расписания запланированных смен
- Начало рабочей смены с геолокационным контролем
- Мониторинг текущей активной смены
- Завершение смены с указанием причин досрочного завершения
- Отмена смены с выбором причины
- Просмотр истории выполненных смен
- Получение push-уведомлений о предстоящих сменах
UC001: Просмотр расписания рабочих смен
Актор: Техник
Описание: Техник просматривает свое расписание запланированных рабочих смен на определенный период с возможностью отмены смены.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Открывает раздел 'Мои смены']
A1 --> S1[Система: Загружает смены техника из WorkShifts]
S1 --> S2[Система: Отображает календарь смен<br/>ссылка: ЭкранРасписанияСмен]
S2 --> D1{Техник выбирает действие}
D1 -->|Просмотр деталей| A2[Техник: Нажимает на смену]
D1 -->|Отменить смену| A3[Техник: Нажимает 'Отменить смену']
D1 -->|Изменить период| A4[Техник: Выбирает другой период]
A2 --> S3[Система: Отображает детали смены]
A3 --> S4[Система: Отображает форму отмены смены<br/>ссылка: ФормаОтменыСмены]
A4 --> S5[Система: Загружает смены за выбранный период]
S3 --> S2
S4 --> A5[Техник: Выбирает причину отмены]
S5 --> S2
A5 --> A6[Техник: Опционально вводит комментарий]
A6 --> A7[Техник: Подтверждает отмену]
A7 --> S6[Система: Проверяет возможность отмены]
S6 --> D2{Смену можно отменить?}
D2 -->|Да| S7[Система: Изменяет статус смены на CANCELLED]
D2 -->|Нет| S8[Система: Отображает сообщение об ошибке]
S7 --> S9[Система: Уведомляет диспетчера об отмене]
S8 --> S2
S9 --> S10[Система: Отображает подтверждение отмены]
S10 --> End([Конец])
Модель интерфейсов
classDiagram
class ЭкранРасписанияСмен {
<<Screen>>
+ВыборПериода : DateRangePicker
+КалендарьСмен : CalendarView
+СписокСмен : ListView
+КнопкаОбновить : Button
}
class КарточкаСмены {
<<Area>>
+ДатаСмены : Label
+ВремяНачалаОкончания : Label
+БазаНачала : Label
+БазаОкончания : Label
+СтатусСмены : StatusBadge
+КнопкаОтменить : Button
}
class ФормаОтменыСмены {
<<Screen>>
+ИнформацияОСмене : Area
+ПричинаОтмены : DropDown*
+Комментарий : TextArea[300]
+КнопкаПодтвердить : Button
+КнопкаОтмена : Button
}
ЭкранРасписанияСмен *-- КарточкаСмены
Функциональные требования
RQ001. Требование к отображению расписания. Система должна отображать расписание смен техника в календарном и списочном виде с возможностью переключения между видами отображения.
RQ002. Требование к фильтрации по периоду. Система должна позволять выбор периода отображения: текущая неделя, следующая неделя, текущий месяц, произвольный период.
RQ003. Требование к отображению информации о смене. Каждая смена должна отображать:
- Дату и время смены
- База начала и окончания смены
- Статус смены (Запланирована/Активна/Завершена/Отменена)
- Количество заказов в смене (если есть назначенные маршруты)
RQ004. Требование к возможности отмены. Техник может отменить смену только со статусом PLANNED не позднее чем за 2 часа до ее начала.
RQ005. Требование к причинам отмены. Система должна предоставлять список причин отмены:
- Болезнь
- Семейные обстоятельства
- Технические проблемы с ТС
- Форс-мажор
- Другое (с обязательным комментарием)
RQ006. Требование к уведомлению диспетчера. При отмене смены техником система должна автоматически уведомить ответственного диспетчера с указанием причины и времени отмены.
UC002: Начало рабочей смены
Актор: Техник
Описание: Техник начинает запланированную рабочую смену с проверкой геолокации и временного интервала.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Нажимает 'Начать смену']
A1 --> S1[Система: Проверяет наличие запланированной смены]
S1 --> D1{Есть запланированная смена?}
D1 -->|Нет| S2[Система: Отображает сообщение об отсутствии смены]
D1 -->|Да| S3[Система: Проверяет время начала смены]
S3 --> D2{Время начала смены подошло?}
D2 -->|Нет| S4[Система: Отображает время до начала смены]
D2 -->|Да| S5[Система: Запрашивает текущую геолокацию]
S5 --> S6[Система: Проверяет расстояние до базы начала смены]
S6 --> D3{Техник находится рядом с базой?}
D3 -->|Нет| S7[Система: Отображает сообщение о необходимости<br/>приблизиться к базе]
D3 -->|Да| S8[Система: Отображает подтверждение начала смены<br/>ссылка: ЭкранПодтвержденияНачалаСмены]
S8 --> A2[Техник: Подтверждает начало смены]
A2 --> S9[Система: Изменяет статус смены на ACTIVE]
S9 --> S10[Система: Устанавливает actualStartTime = текущее время]
S10 --> S11[Система: Записывает GPS-координаты начала смены]
S11 --> S12[Система: Отображает экран активной смены]
S12 --> End([Конец])
S2 --> End
S4 --> End
S7 --> End
Модель интерфейсов
classDiagram
class ЭкранПодтвержденияНачалаСмены {
<<Screen>>
+ИнформацияОСмене : Area
+ТекущееВремя : Label
+БазаНачала : Label
+ТекущееМестоположение : Label
+КнопкаНачатьСмену : Button
+КнопкаОтмена : Button
}
class ЭкранАктивнойСмены {
<<Screen>>
+СтатусСмены : StatusIndicator
+ВремяНачала : Label
+ПрошедшееВремя : Timer
+ОставшеесяВремя : Label
+КнопкаЗавершитьСмену : Button
+КнопкаПросмотретьМаршруты : Button
}
Функциональные требования
RQ007. Требование к временному окну начала смены. Техник может начать смену не ранее чем за 15 минут до запланированного времени начала и не позднее чем через 30 минут после запланированного времени.
RQ008. Требование к геолокационному контролю. Система должна проверять, что техник находится в радиусе не более 500 метров от базы начала смены перед разрешением начать смену.
RQ009. Требование к проверке предыдущей смены. Система должна проверить, что предыдущая смена техника завершена (статус COMPLETED или CANCELLED).
RQ010. Требование к автоматическим полям. При начале смены система должна автоматически:
- Установить WorkShifts.status = ACTIVE
- Установить WorkShifts.actualStartTime = текущее время
- Записать GPS-координаты места начала смены
- Создать запись в журнале операций техника
RQ011. Требование к обработке опозданий. Если техник начинает смену с опозданием более 15 минут, система должна зафиксировать опоздание и уведомить диспетчера.
UC003: Завершение рабочей смены
Актор: Техник
Описание: Техник завершает активную рабочую смену с возможностью досрочного завершения и указания причин.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Нажимает 'Завершить смену']
A1 --> S1[Система: Проверяет статус текущей смены]
S1 --> D1{Есть активная смена?}
D1 -->|Нет| S2[Система: Отображает сообщение об отсутствии активной смены]
D1 -->|Да| S3[Система: Проверяет завершенность текущих маршрутов]
S3 --> D2{Есть незавершенные маршруты?}
D2 -->|Да| S4[Система: Отображает предупреждение о незавершенных маршрутах]
D2 -->|Нет| S5[Система: Проверяет время завершения]
S5 --> D3{Досрочное завершение?}
D3 -->|Да| S6[Система: Отображает форму досрочного завершения<br/>ссылка: ФормаДосрочногоЗавершения]
D3 -->|Нет| S7[Система: Отображает стандартную форму завершения<br/>ссылка: ФормаЗавершенияСмены]
S6 --> A2[Техник: Выбирает причину досрочного завершения]
S7 --> A3[Техник: Подтверждает завершение смены]
A2 --> A4[Техник: Опционально добавляет комментарий]
A4 --> A5[Техник: Подтверждает завершение]
A3 --> S8[Система: Запрашивает геолокацию для завершения]
A5 --> S8
S8 --> S9[Система: Проверяет местоположение базы окончания]
S9 --> D4{Техник рядом с базой окончания?}
D4 -->|Нет| S10[Система: Отображает предупреждение о расстоянии]
D4 -->|Да| S11[Система: Изменяет статус смены на COMPLETED]
S11 --> S12[Система: Устанавливает actualEndTime = текущее время]
S12 --> S13[Система: Записывает GPS-координаты завершения]
S13 --> S14[Система: Рассчитывает общее время работы]
S14 --> S15[Система: Отображает итоги смены]
S15 --> End([Конец])
S2 --> End
S4 --> End
S10 --> A6[Техник: Принимает решение]
A6 --> D5{Завершить принудительно?}
D5 -->|Да| S11
D5 -->|Нет| End
Модель интерфейсов
classDiagram
class ФормаЗавершенияСмены {
<<Screen>>
+ИтогиСмены : Area
+ОтработанноеВремя : Label
+КоличествоВыполненныхЗаказов : Label
+ТекущееМестоположение : Label
+БазаОкончания : Label
+КнопкаЗавершить : Button
+КнопкаОтмена : Button
}
class ФормаДосрочногоЗавершения {
<<Screen>>
+ИнформацияОСмене : Area
+ПричинаДосрочногоЗавершения : DropDown*
+Комментарий : TextArea[300]
+КнопкаЗавершить : Button
+КнопкаОтмена : Button
}
class ЭкранИтоговСмены {
<<Screen>>
+ОбщееВремяРаботы : Label
+ВыполненоЗаказов : Label
+СтатистикаДня : Area
+КнопкаПродолжить : Button
}
Функциональные требования
RQ012. Требование к проверке незавершенных маршрутов. Система должна предупреждать техника о незавершенных маршрутах и запрашивать подтверждение завершения смены.
RQ013. Требование к досрочному завершению. Если смена завершается более чем за 30 минут до запланированного времени, система должна запросить причину досрочного завершения:
- Выполнены все задачи
- Технические проблемы с оборудованием
- Проблемы со здоровьем
- Семейные обстоятельства
- Форс-мажор
- Другое (с обязательным комментарием)
RQ014. Требование к геолокационному контролю завершения. Система должна проверять, что техник находится в радиусе 1 км от базы окончания смены, с возможностью принудительного завершения при превышении расстояния.
RQ015. Требование к автоматическим полям при завершении. При завершении смены система должна:
- Установить WorkShifts.status = COMPLETED
- Установить WorkShifts.actualEndTime = текущее время
- Рассчитать WorkShifts.totalWorkedMinutes
- Записать GPS-координаты завершения смены
- Обновить статистику техника
RQ016. Требование к принудительному завершению. Система должна позволить завершение смены вне геозоны базы окончания с обязательным указанием причины и уведомлением диспетчера.
UC004: Просмотр информации о текущей смене
Актор: Техник
Описание: Техник просматривает детальную информацию о текущей активной смене, включая временные метрики и связанные маршруты.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Переходит в раздел 'Текущая смена']
A1 --> S1[Система: Проверяет наличие активной смены]
S1 --> D1{Есть активная смена?}
D1 -->|Нет| S2[Система: Отображает сообщение об отсутствии активной смены]
D1 -->|Да| S3[Система: Загружает данные активной смены]
S3 --> S4[Система: Загружает связанные маршруты]
S4 --> S5[Система: Рассчитывает текущие метрики смены]
S5 --> S6[Система: Отображает информацию о смене<br/>ссылка: ЭкранТекущейСмены]
S6 --> D2{Техник выбирает действие}
D2 -->|Просмотр маршрутов| A2[Техник: Нажимает 'Мои маршруты']
D2 -->|Завершить смену| A3[Техник: Нажимает 'Завершить смену']
D2 -->|Обновить данные| A4[Техник: Выполняет pull-to-refresh]
A2 --> S7[Система: Переход к UC006 (Просмотр маршрутов)]
A3 --> S8[Система: Переход к UC003 (Завершение смены)]
A4 --> S5
S7 --> End([Конец])
S8 --> End
S2 --> End
Модель интерфейсов
classDiagram
class ЭкранТекущейСмены {
<<Screen>>
+СтатусСмены : StatusIndicator
+ВременныеМетрики : ОбластьВременныхМетрик
+ИнформацияОСмене : ОбластьИнформацииОСмене
+ТекущиеМаршруты : ОбластьМаршрутов
+КнопкаЗавершитьСмену : Button
+КнопкаПросмотретьМаршруты : Button
}
class ОбластьВременныхМетрик {
<<Area>>
+ВремяНачала : Label
+ТекущееВремя : LiveTimer
+ОтработанноеВремя : Timer
+ОставшеесяВремя : Label
+ПрогрессБар : ProgressBar
}
class ОбластьИнформацииОСмене {
<<Area>>
+БазаНачала : Label
+БазаОкончания : Label
+ЗапланированноеВремя : Label
+ТекущееМестоположение : LocationView
}
class ОбластьМаршрутов {
<<Area>>
+КоличествоМаршрутов : Label
+ВыполненныеМаршруты : Label
+ТекущийМаршрут : RouteCard
}
ЭкранТекущейСмены *-- ОбластьВременныхМетрик
ЭкранТекущейСмены *-- ОбластьИнформацииОСмене
ЭкранТекущейСмены *-- ОбластьМаршрутов
Функциональные требования
RQ017. Требование к отображению временных метрик. Система должна в реальном времени отображать:
- Время начала смены
- Текущее отработанное время
- Оставшееся время до конца смены
- Прогресс выполнения смены в процентах
RQ018. Требование к отображению информации о смене. Система должна показывать:
- База начала и окончания смены
- Запланированное время начала и окончания
- Текущее местоположение техника
- Статус смены
RQ019. Требование к отображению связанных маршрутов. Система должна показывать:
- Количество назначенных маршрутов на смену
- Количество выполненных маршрутов
- Информацию о текущем активном маршруте
- Прогресс выполнения заказов в маршрутах
RQ020. Требование к обновлению данных. Информация о текущей смене должна обновляться:
- Автоматически каждые 30 секунд
- При выполнении pull-to-refresh пользователем
- При изменении статуса связанных маршрутов или заказов
RQ021. Требование к навигации. С экрана текущей смены должны быть доступны переходы:
- К списку маршрутов смены
- К завершению смены
- К просмотру истории смен
UC005: Просмотр истории рабочих смен
Актор: Техник
Описание: Техник просматривает историю всех своих выполненных рабочих смен с детальной статистикой.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Переходит в раздел 'История смен']
A1 --> S1[Система: Загружает историю смен техника]
S1 --> S2[Система: Отображает список смен с фильтрами<br/>ссылка: ЭкранИсторииСмен]
S2 --> D1{Техник выбирает действие}
D1 -->|Применить фильтр| A2[Техник: Выбирает параметры фильтрации]
D1 -->|Просмотр деталей| A3[Техник: Нажимает на смену]
D1 -->|Экспорт данных| A4[Техник: Нажимает 'Экспорт']
A2 --> S3[Система: Применяет фильтры и обновляет список]
A3 --> S4[Система: Загружает детальную информацию о смене]
A4 --> S5[Система: Формирует и скачивает файл экспорта]
S3 --> S2
S4 --> S6[Система: Отображает детали смены<br/>ссылка: ЭкранДеталейСмены]
S5 --> S2
S6 --> A5[Техник: Просматривает детали]
A5 --> A6[Техник: Нажимает 'Назад']
A6 --> S2
Модель интерфейсов
classDiagram
class ЭкранИсторииСмен {
<<Screen>>
+ПанельФильтров : ОбластьФильтров
+СписокСмен : ListView
+СтатистикаОбщая : ОбластьОбщейСтатистики
+КнопкаЭкспорт : Button
}
class ОбластьФильтров {
<<Area>>
+ПериодДат : DateRangePicker
+СтатусСмены : MultiSelectDropDown
+СортировкаПо : DropDown
+КнопкаПрименить : Button
+КнопкаСброс : Button
}
class КарточкаИсторииСмены {
<<Area>>
+ДатаСмены : Label
+ВремяСмены : Label
+ДлительностьСмены : Label
+КоличествоЗаказов : Label
+СтатусСмены : StatusBadge
+БазыНачалаОкончания : Label
}
class ЭкранДеталейСмены {
<<Screen>>
+ОсновнаяИнформация : Area
+ВременныеМетрики : Area
+СписокМаршрутов : ListView
+СписокЗаказов : ListView
+СтатистикаСмены : Area
}
ЭкранИсторииСмен *-- ОбластьФильтров
ЭкранИсторииСмен *-- КарточкаИсторииСмены
Функциональные требования
RQ022. Требование к отображению истории. Система должна отображать все смены техника со статусами COMPLETED и CANCELLED, отсортированные по дате по убыванию.
RQ023. Требование к фильтрации истории. Система должна предоставлять фильтры:
- По периоду (дата начала и окончания)
- По статусу смены (Завершена/Отменена)
- По длительности смены
- По количеству выполненных заказов
RQ024. Требование к пагинации. Система должна загружать историю смен порциями по 20 записей с возможностью подгрузки следующих порций.
RQ025. Требование к детальной информации о смене. При просмотре деталей смены система должна отображать:
- Основную информацию (даты, времена, базы, статус)
- Фактическое время работы и отклонения от плана
- Список выполненных маршрутов
- Список выполненных заказов
- Статистику эффективности
RQ026. Требование к экспорту данных. Система должна позволять экспорт истории смен в формате CSV с выбором периода и полей для экспорта.
RQ027. Требование к общей статистике. На экране истории должна отображаться сводная статистика:
- Общее количество отработанных смен
- Общее время работы
- Среднее время смены
- Количество выполненных заказов
- Процент вовремя начатых/завершенных смен
Системные требования и интеграции
Требования к push-уведомлениям
RQ028. Требование к уведомлениям о смене. Система должна отправлять push-уведомления технику:
- За 24 часа до начала смены: "Напоминание: завтра у вас запланирована смена с [время] до [время] на базе [название]"
- За 1 час до начала смены: "Напоминание: через час начинается ваша рабочая смена"
- В момент времени начала смены: "Пора начинать рабочую смену! Перейдите в приложение для активации"
RQ029. Требование к настройкам уведомлений. Техник должен иметь возможность настроить:
- Включение/отключение уведомлений о сменах
- Время предварительных уведомлений
- Звуковые сигналы для уведомлений
Требования к геолокации
RQ030. Требование к точности геолокации. Система должна использовать GPS с точностью не менее 10 метров для определения местоположения техника.
RQ031. Требование к геозонам баз. Система должна определять геозоны баз с радиусом:
- 500 метров для начала смены
- 1000 метров для завершения смены
RQ032. Требование к работе в офлайн режиме. При отсутствии интернет-соединения система должна:
- Сохранять GPS-координаты локально
- Позволять начало/завершение смены с последующей синхронизацией
- Уведомлять о работе в офлайн режиме
Требования к безопасности и доступу
RQ033. Требование к аутентификации. Доступ к функциям блока предоставляется только аутентифицированным техникам с активным статусом пользователя.
RQ034. Требование к ограничению доступа. Техник может управлять только своими сменами и не имеет доступа к сменам других техников.
RQ035. Требование к аудиту операций. Все операции техника со сменами должны логироваться с указанием:
- Времени операции
- GPS-координат
- Типа операции
- Результата операции
Требования к интеграции с другими блоками
RQ036. Требование к связи с блоком маршрутов. Система должна интегрироваться с блоком "Управление маршрутами" для:
- Отображения маршрутов, назначенных на смену
- Контроля завершенности маршрутов при завершении смены
- Автоматического начала маршрутов при активации смены
RQ037. Требование к связи с блоком уведомлений. Система должна интегрироваться с сервисом уведомлений для:
- Отправки push-уведомлений о сменах
- Уведомления диспетчеров об отменах и опозданиях
- Системных уведомлений о статусе смен
RQ038. Требование к синхронизации с модулем диспетчера. Изменения статусов смен должны мгновенно отображаться в модуле диспетчера для оперативного мониторинга.
Модель предметной области (Domain Model)
Основные сущности блока
classDiagram
class РабочиеСмены {
+Id : String
+ТехникId : String
+ДатаСмены : Date
+ЗапланированноеВремяНачала : DateTime
+ЗапланированноеВремяОкончания : DateTime
+ФактическоеВремяНачала : DateTime
+ФактическоеВремяОкончания : DateTime
+Статус : СтатусыСмен
+БазаНачала : String
+БазаОкончания : String
+GPS_Начала : Координаты
+GPS_Окончания : Координаты
+ПричинаОтмены : String
+ПричинаДосрочногоЗавершения : String
+Комментарий : String
+ВсегоОтработаноМинут : Number
}
class СтатусыСмен {
<<enumeration>>
PLANNED
ACTIVE
COMPLETED
CANCELLED
}
class ПричиныОтменыСмен {
<<enumeration>>
Болезнь
СемейныеОбстоятельства
ТехническиеПроблемыСТС
ФорсМажор
Другое
}
class ПричиныДосрочногоЗавершения {
<<enumeration>>
ВыполненыВсеЗадачи
ТехническиеПроблемыСОборудованием
ПроблемыСоЗдоровьем
СемейныеОбстоятельства
ФорсМажор
Другое
}
class Техники {
+Id : String
+Фамилия : String
+Имя : String
+Email : String
+Статус : СтатусыТехников
+ТекущаяСмена : РабочиеСмены
}
class УведомленияОСменах {
+Id : String
+ТехникId : String
+СменаId : String
+ТипУведомления : ТипыУведомленийОСменах
+ВремяОтправки : DateTime
+Статус : СтатусыУведомлений
+ТекстСообщения : String
}
class ТипыУведомленийОСменах {
<<enumeration>>
За24Часа
За1Час
ВМоментНачала
ОбОтмене
ОбОпоздании
}
РабочиеСмены --> СтатусыСмен
РабочиеСмены --> ПричиныОтменыСмен
РабочиеСмены --> ПричиныДосрочногоЗавершения
Техники --> РабочиеСмены
УведомленияОСменах --> РабочиеСмены
УведомленияОСменах --> ТипыУведомленийОСменах
Блок «Управление маршрутами» - Модуль Техника
Общее описание блока
Блок «Управление маршрутами» предоставляет технику возможности для работы с назначенными маршрутами в рамках его рабочей смены. Техник может просматривать назначенные маршруты, принимать или отклонять их, отслеживать прогресс выполнения и получать детальную информацию о каждом маршруте.
Основные функции блока:
- Получение уведомлений о назначенных маршрутах
- Принятие или отклонение маршрутов с указанием причин
- Просмотр детальной информации о маршруте и входящих в него заказах
- Отслеживание прогресса выполнения текущего маршрута
- Автоматическое обновление статусов при выполнении заказов
UC006: Получение и просмотр назначенного маршрута
Описание: Техник получает уведомление о назначенном диспетчером маршруте и может просмотреть его основную информацию.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> S1[Система: Получает уведомление о назначении маршрута]
S1 --> S2[Система: Отображает push-уведомление технику]
S2 --> A1[Техник: Открывает уведомление]
A1 --> S3[Система: Отображает краткую информацию о маршруте<br/>ссылка: КарточкаНовогоМаршрута]
S3 --> A2[Техник: Просматривает информацию о маршруте]
A2 --> D1{Действие техника}
D1 -->|Принять| A3[Техник: Нажимает 'Принять маршрут']
D1 -->|Отклонить| A4[Техник: Нажимает 'Отклонить маршрут']
D1 -->|Подробнее| A5[Техник: Нажимает 'Подробная информация']
A3 --> S4[Система: Переход к UC007]
A4 --> S5[Система: Переход к UC008]
A5 --> S6[Система: Переход к UC009]
S4 --> End([Конец])
S5 --> End
S6 --> End
Модель интерфейсов
classDiagram
class КарточкаНовогоМаршрута {
<<Screen>>
+НомерМаршрута : Текст
+СтатусМаршрута : СтатусИндикатор
+ДатаМаршрута : Дата
+ВремяНачалаОкончания : ВременнойИнтервал
+КоличествоЗаказов : Число
+БазаНачалаОкончания : Текст
+КраткоеОписание : Текст
+КнопкаПринять : Кнопка
+КнопкаОтклонить : Кнопка
+КнопкаПодробнее : Кнопка
}
class ПушУведомление {
<<Area>>
+ЗаголовокУведомления : Текст
+ТекстСообщения : Текст
+ВремяПолучения : Время
+КнопкаОткрыть : Кнопка
}
Функциональные требования
RQ040. Требование к получению уведомлений. Система должна отправлять технику push-уведомление при назначении нового маршрута со статусом ASSIGNED.
RQ041. Требование к отображению краткой информации. В карточке нового маршрута должна отображаться:
- Номер маршрута из Routes.routeNumber
- Дата маршрута из Routes.routeDate
- Плановое время начала и окончания
- Количество заказов в маршруте
- База начала и окончания смены
RQ042. Требование к доступности маршрута. Техник может просматривать только маршруты, назначенные конкретно ему (Routes.idTechnician = ID текущего техника).
RQ043. Требование к временным ограничениям. Уведомление о маршруте должно отображаться до тех пор, пока техник не примет решение (принять/отклонить) или пока диспетчер не отменит назначение.
UC007: Принятие назначенного маршрута
Описание: Техник принимает назначенный маршрут, подтверждая готовность к его выполнению.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Нажимает 'Принять маршрут']
A1 --> S1[Система: Отображает форму подтверждения<br/>ссылка: ФормаПринятияМаршрута]
S1 --> S2[Система: Проверяет текущий статус маршрута]
S2 --> D1{Маршрут доступен для принятия?}
D1 -->|Нет| S3[Система: Отображает сообщение о недоступности]
D1 -->|Да| A2[Техник: Подтверждает принятие маршрута]
A2 --> S4[Система: Изменяет статус маршрута на IN_PROGRESS]
S4 --> S5[Система: Устанавливает Routes.actualStartTime]
S5 --> S6[Система: Изменяет статус рабочей смены на ACTIVE]
S6 --> S7[Система: Отправляет уведомление диспетчеру]
S7 --> S8[Система: Отображает подтверждение принятия]
S8 --> S9[Система: Переадресует к текущему маршруту]
S9 --> End([Конец])
S3 --> End
Модель интерфейсов
classDiagram
class ФормаПринятияМаршрута {
<<Screen>>
+ИнформацияОМаршруте : ОбластьИнформации
+ПредупреждениеОВремени : ПредупреждениеБлок
+ТекстПодтверждения : Текст
+КнопкаПодтвердить : Кнопка
+КнопкаОтмена : Кнопка
}
class ОбластьИнформации {
<<Area>>
+НомерМаршрута : Текст
+ДатаМаршрута : Дата
+КоличествоЗаказов : Число
+ПлановоеВремя : ВременнойИнтервал
+АвтомобильСтанция : ИнформацияОборудования
}
Функциональные требования
RQ044. Требование к проверке доступности маршрута. Система должна проверять, что маршрут имеет статус ASSIGNED и назначен текущему технику.
RQ045. Требование к изменению статуса маршрута. При принятии маршрута Система должна:
- Изменить Routes.status на IN_PROGRESS
- Установить Routes.actualStartTime = текущее время
- Обновить Routes.updatedBy = идентификатор техника
RQ046. Требование к активации рабочей смены. Система должна изменить статус связанной рабочей смены (WorkShifts.status) на ACTIVE.
RQ047. Требование к уведомлению диспетчера. При принятии маршрута техником Система должна отправить уведомление назначившему диспетчеру.
RQ048. Требование к блокировке повторного принятия. После принятия маршрута кнопка "Принять" должна стать недоступной для всех других уведомлений этого маршрута.
UC008: Отклонение маршрута с указанием причины
Описание: Техник отклоняет назначенный маршрут с обязательным указанием причины отклонения.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Нажимает 'Отклонить маршрут']
A1 --> S1[Система: Отображает форму отклонения<br/>ссылка: ФормаОтклоненияМаршрута]
S1 --> S2[Система: Загружает список причин отклонения]
S2 --> A2[Техник: Выбирает причину отклонения]
A2 --> D1{Выбрана причина 'Другое'?}
D1 -->|Да| A3[Техник: Вводит текстовый комментарий]
D1 -->|Нет| A4[Техник: Опционально добавляет комментарий]
A3 --> A5[Техник: Нажимает 'Отклонить']
A4 --> A5
A5 --> S3[Система: Валидирует данные]
S3 --> D2{Данные корректны?}
D2 -->|Нет| S4[Система: Отображает ошибки валидации]
D2 -->|Да| S5[Система: Изменяет статус маршрута на CANCELLED]
S5 --> S6[Система: Сохраняет причину отклонения]
S6 --> S7[Система: Освобождает назначенные ресурсы]
S7 --> S8[Система: Отправляет уведомление диспетчеру]
S8 --> S9[Система: Отображает подтверждение отклонения]
S9 --> End([Конец])
S4 --> A2
Модель интерфейсов
classDiagram
class ФормаОтклоненияМаршрута {
<<Screen>>
+ИнформацияОМаршруте : КраткаяИнформация
+СписокПричин : СписокВыбора*
+ПолеКомментария : ТекстовоеПоле[500]
+ПредупреждениеОПоследствиях : ПредупреждениеБлок
+КнопкаОтклонить : Кнопка
+КнопкаОтмена : Кнопка
}
class КраткаяИнформация {
<<Area>>
+НомерМаршрута : Текст
+ДатаВремяМаршрута : ДатаВремя
+КоличествоЗаказов : Число
}
Функциональные требования
RQ049. Требование к обязательному выбору причины. Техник обязан выбрать одну из предопределенных причин отклонения из системного справочника.
RQ050. Требование к списку причин отклонения. Система должна предоставлять следующие причины:
- Болезнь
- Семейные обстоятельства
- Технические проблемы с оборудованием
- Превышение рабочего времени
- Конфликт с другими обязательствами
- Недостаточно времени на подготовку
- Другое (с обязательным комментарием)
RQ051. Требование к обязательному комментарию. При выборе причины "Другое" поле комментария становится обязательным для заполнения (максимум 500 символов).
RQ052. Требование к изменению статуса маршрута. При отклонении маршрута Система должна:
- Изменить Routes.status на CANCELLED
- Сохранить причину отклонения в Routes.cancellationReason
- Сохранить комментарий техника в Routes.notes
- Установить Routes.updatedBy = идентификатор техника
RQ053. Требование к освобождению ресурсов. Система должна освободить назначенные на маршрут ресурсы:
- Изменить WorkShifts.status обратно на PLANNED
- Изменить статус всех заказов в маршруте обратно на CONFIRMED
- Освободить назначенное оборудование (ТС и станция)
RQ054. Требование к уведомлению диспетчера. Система должна немедленно уведомить диспетчера об отклонении маршрута с указанием причины и комментария.
UC009: Просмотр детальной информации маршрута
Описание: Техник просматривает подробную информацию о маршруте, включая список заказов, временную схему и информацию об оборудовании.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Открывает детальную информацию]
A1 --> S1[Система: Загружает полную информацию о маршруте]
S1 --> S2[Система: Загружает список заказов из RoutePoints]
S2 --> S3[Система: Загружает информацию об оборудовании]
S3 --> S4[Система: Отображает детальную информацию<br/>ссылка: ДетальнаяИнформацияМаршрута]
S4 --> A2[Техник: Просматривает информацию]
A2 --> D1{Выбор раздела}
D1 -->|Заказы| A3[Техник: Переключается на вкладку заказов]
D1 -->|Временная схема| A4[Техник: Переключается на временную схему]
D1 -->|Оборудование| A5[Техник: Переключается на информацию об оборудовании]
D1 -->|Карта| A6[Техник: Переключается на карту маршрута]
A3 --> S5[Система: Отображает список заказов]
A4 --> S6[Система: Отображает временную линию]
A5 --> S7[Система: Отображает информацию об оборудовании]
A6 --> S8[Система: Отображает карту с точками маршрута]
S5 --> End([Конец])
S6 --> End
S7 --> End
S8 --> End
Модель интерфейсов
classDiagram
class ДетальнаяИнформацияМаршрута {
<<Screen>>
+ЗаголовокМаршрута : Заголовок
+ОсновнаяИнформация : ОбластьОсновнойИнформации
+ВкладкиИнформации : ВкладкиКомпонент
+КнопкиДействий : ГруппаКнопок
}
class ОбластьОсновнойИнформации {
<<Area>>
+НомерМаршрута : Текст
+СтатусМаршрута : СтатусИндикатор
+ДатаМаршрута : Дата
+ВремяНачалаОкончания : ВременнойИнтервал
+КоличествоЗаказов : Число
+ОценочноеВремяВыполнения : Время
}
class ВкладкаЗаказов {
<<Area>>
+СписокЗаказов : СписокКарточек
+СуммарнаяИнформация : СводкаПоЗаказам
}
class ВкладкаВременнойСхемы {
<<Area>>
+ВременнаяЛиния : ВременнаяЛинияКомпонент
+ЛегендаСтатусов : Легенда
}
class ВкладкаОборудования {
<<Area>>
+ИнформацияАвтомобиля : КарточкаОборудования
+ИнформацияСтанции : КарточкаОборудования
+СтатусКомплекта : СтатусИндикатор
}
class ВкладкаКарты {
<<Area>>
+ИнтерактивнаяКарта : КартаКомпонент
+ЛегендаТочек : Легенда
+ИнформацияОМаршруте : СводкаМаршрута
}
ДетальнаяИнформацияМаршрута *-- ОбластьОсновнойИнформации
ДетальнаяИнформацияМаршрута *-- ВкладкаЗаказов
ДетальнаяИнформацияМаршрута *-- ВкладкаВременнойСхемы
ДетальнаяИнформацияМаршрута *-- ВкладкаОборудования
ДетальнаяИнформацияМаршрута *-- ВкладкаКарты
Функциональные требования
RQ055. Требование к отображению основной информации. Система должна отображать:
- Полную информацию о маршруте из таблицы Routes
- Текущий статус маршрута с цветовой индикацией
- Плановые и фактические времена начала/окончания
- Прогресс выполнения в процентах
RQ056. Требование к отображению заказов. Во вкладке "Заказы" должна отображаться информация:
- Список всех заказов из RoutePoints с порядком выполнения
- Статус каждого заказа
- Адрес и время прибытия к клиенту
- Информация о клиенте (ФИО, тип заказа)
- Требуемый уровень зарядки
RQ057. Требование к временной схеме. Временная линия должна отображать:
- Последовательность выполнения заказов
- Плановые времена прибытия к каждому клиенту
- Время на выполнение каждого заказа
- Время перемещения между точками
- Фактический прогресс выполнения
RQ058. Требование к информации об оборудовании. Система должна отображать:
- Информацию о назначенном сервисном ТС (модель, номер, статус)
- Информацию о зарядной станции (модель, мощность, статус)
- Текущий уровень заряда автомобиля и станции
- Техническое состояние оборудования
RQ059. Требование к отображению карты. Интерактивная карта должна показывать:
- Все точки маршрута с номерами порядка выполнения
- Оптимальные пути между точками
- Текущее местоположение техника (для активных маршрутов)
- Базу начала и окончания маршрута
UC010: Отслеживание прогресса выполнения маршрута
Описание: Техник отслеживает прогресс выполнения текущего активного маршрута, видит статусы заказов и общий прогресс.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Открывает текущий маршрут]
A1 --> S1[Система: Проверяет наличие активного маршрута]
S1 --> D1{Есть активный маршрут?}
D1 -->|Нет| S2[Система: Отображает сообщение об отсутствии активного маршрута]
D1 -->|Да| S3[Система: Загружает информацию о текущем маршруте]
S3 --> S4[Система: Загружает статусы всех заказов в маршруте]
S4 --> S5[Система: Рассчитывает общий прогресс выполнения]
S5 --> S6[Система: Отображает панель прогресса<br/>ссылка: ПанельПрогрессаМаршрута]
S6 --> L1[Цикл: Автоматическое обновление данных]
L1 --> S7[Система: Обновляет статусы заказов в реальном времени]
S7 --> S8[Система: Пересчитывает прогресс выполнения]
S8 --> S9[Система: Обновляет временные метрики]
S9 --> D2{Маршрут завершен?}
D2 -->|Нет| D3{Есть изменения в статусах?}
D2 -->|Да| S10[Система: Отображает уведомление о завершении]
D3 -->|Да| S11[Система: Обновляет интерфейс]
D3 -->|Нет| L1
S11 --> L1
S10 --> End([Конец])
S2 --> End
Модель интерфейсов
classDiagram
class ПанельПрогрессаМаршрута {
<<Screen>>
+ЗаголовокТекущегоМаршрута : Заголовок
+ОбщийПрогресс : ПрогрессБар
+ВременныеМетрики : ОбластьВременныхМетрик
+СписокЗаказовСПрогрессом : СписокПрогрессаЗаказов
+КнопкиБыстрыхДействий : ГруппаКнопок
+КнопкаОбновить : Кнопка
}
class ОбластьВременныхМетрик {
<<Area>>
+ВремяНачалаМаршрута : Время
+ТекущееВремя : Время
+ОстатокВремени : Время
+ОтклонениеОтГрафика : ВременнойИндикатор
+ПредполагаемоеВремяЗавершения : Время
}
class КарточкаПрогрессаЗаказа {
<<Area>>
+НомерЗаказа : Текст
+АдресКлиента : Текст
+СтатусЗаказа : СтатусИндикатор
+ПлановоеВремя : Время
+ФактическоеВремя : Время
+ДействияПоЗаказу : ГруппаКнопок
}
ПанельПрогрессаМаршрута *-- ОбластьВременныхМетрик
ПанельПрогрессаМаршрута *-- КарточкаПрогрессаЗаказа
Функциональные требования
RQ060. Требование к расчету общего прогресса. Система должна рассчитывать общий прогресс маршрута по формуле:
Прогресс = (Количество завершенных заказов / Общее количество заказов) × 100%
RQ061. Требование к отображению временных метрик. Система должна отображать:
- Плановое время начала и окончания маршрута
- Фактическое время начала
- Текущее время
- Расчетное время завершения на основе текущего прогресса
- Отклонение от планового графика (с цветовой индикацией)
RQ062. Требование к статусам заказов в прогрессе. Для каждого заказа должна отображаться информация:
- Текущий статус из Orders.status
- Плановое время прибытия из RoutePoints.plannedArrivalTime
- Фактическое время прибытия из Orders.actualArrivalTime (если есть)
- Время выполнения заказа (если завершен)
RQ063. Требование к автоматическому обновлению. Система должна автоматически обновлять информацию о прогрессе каждые 30 секунд при активном маршруте.
RQ064. Требование к быстрым действиям. Панель прогресса должна предоставлять быстрый доступ к:
- Текущему заказу (если есть активный)
- Навигации к следующему клиенту
- Детальной информации о маршруте
- Связи с диспетчером
RQ065. Требование к уведомлениям о завершении. При завершении всех заказов в маршруте Система должна:
- Автоматически изменить статус маршрута на COMPLETED
- Отобразить уведомление технику о завершении маршрута
- Предложить перейти к завершению рабочей смены
Общие требования к блоку «Управление маршрутами»
Требования к интеграции с другими блоками
RQ066. Требование к связи с блоком рабочих смен. Система должна интегрироваться с блоком "Управление рабочими сменами" для:
- Автоматической активации смены при принятии маршрута
- Проверки соответствия времени маршрута времени смены
- Завершения смены при завершении маршрута
RQ067. Требование к связи с блоком выполнения заказов. Система должна интегрироваться с блоком "Выполнение заказов" для:
- Автоматического обновления статусов заказов в маршруте
- Отслеживания прогресса выполнения каждого заказа
- Перехода к выполнению конкретного заказа
RQ068. Требование к связи с блоком навигации. Система должна интегрироваться с блоком "Навигация и геолокация" для:
- Построения оптимального пути между точками маршрута
- Автоматического определения прибытия в точки маршрута
- Отслеживания местоположения техника на маршруте
Требования к уведомлениям
RQ069. Требование к push-уведомлениям. Система должна отправлять push-уведомления технику при:
- Назначении нового маршрута
- Изменении маршрута диспетчером
- Критических задержках в выполнении маршрута
- Сообщениях от диспетчера по маршруту
RQ070. Требование к внутрисистемным уведомлениям. Система должна отправлять уведомления диспетчеру при:
- Принятии маршрута техником
- Отклонении маршрута техником с причиной
- Критических задержках в выполнении маршрута
- Завершении маршрута
Требования к офлайн работе
RQ071. Требование к работе без интернета. При отсутствии интернет-соединения система должна:
- Сохранять информацию о текущем маршруте локально
- Позволять просмотр маршрута и заказов в офлайн режиме
- Сохранять изменения статусов локально с последующей синхронизацией
- Уведомлять техника о работе в офлайн режиме
RQ072. Требование к синхронизации данных. При восстановлении интернет-соединения система должна:
- Автоматически синхронизировать все изменения статусов
- Получить актуальную информацию о маршруте с сервера
- Разрешить конфликты данных в пользу серверной версии
- Уведомить техника об успешной синхронизации
Требования к безопасности и доступу
RQ073. Требование к аутентификации. Доступ к функциям блока предоставляется только аутентифицированным техникам с активным статусом пользователя.
RQ074. Требование к ограничению доступа. Техник может просматривать и управлять только маршрутами, назначенными конкретно ему.
RQ075. Требование к аудиту операций. Все действия техника с маршрутами должны логироваться с указанием:
- Времени операции
- GPS-координат (если доступны)
- Типа операции (принятие, отклонение, просмотр)
- Результата операции
Требования к производительности
RQ076. Требование к времени отклика. Загрузка информации о маршруте должна выполняться не более чем за 3 секунды при стабильном интернет-соединении.
RQ077. Требование к обновлению данных. Автоматическое обновление статусов и прогресса должно выполняться не более чем за 1 секунду.
RQ078. Требование к размеру кеша. Система должна кешировать информацию о текущем маршруте локально, занимая не более 50 МБ памяти устройства.
Интеграционные требования
Требования к взаимодействию с серверной частью
RQ079. Требование к API маршрутов. Мобильное приложение должно использовать следующие API endpoints:
- GET /api/technician/routes - получение списка маршрутов техника
- POST /api/technician/routes/{id}/accept - принятие маршрута
- POST /api/technician/routes/{id}/reject - отклонение маршрута
- GET /api/technician/routes/{id}/details - детальная информация о маршруте
- GET /api/technician/routes/{id}/progress - прогресс выполнения маршрута
RQ080. Требование к WebSocket соединению. Для получения обновлений в реальном времени должно использоваться WebSocket соединение с событиями:
- route_assigned - назначение нового маршрута
- route_updated - изменение маршрута
- order_status_changed - изменение статуса заказа в маршруте
- route_cancelled - отмена маршрута диспетчером
Требования к обработке ошибок
RQ081. Требование к обработке сетевых ошибок. При сетевых ошибках система должна:
- Отображать понятные пользователю сообщения об ошибках
- Предлагать повторить операцию
- Переходить в офлайн режим при длительном отсутствии соединения
RQ082. Требование к обработке ошибок сервера. При ошибках сервера система должна:
- Логировать детальную информацию об ошибке
- Отображать технику общее сообщение о технической проблеме
- Предоставлять возможность связаться с технической поддержкой
Требования к интерфейсу мобильного приложения
Требования к удобству использования
RQ083. Требование к интуитивности интерфейса. Интерфейс блока должен быть интуитивно понятным для техников с различным уровнем технической грамотности.
RQ084. Требование к размеру элементов управления. Все кнопки и элементы управления должны иметь размер не менее 44x44 пикселей для удобного использования на мобильных устройствах.
RQ085. Требование к цветовой схеме. Система должна использовать единую цветовую схему для статусов:
- Зеленый - завершено/активно
- Желтый - в процессе/ожидание
- Красный - отменено/ошибка
- Серый - неактивно/недоступно
Требования к адаптивности
RQ086. Требование к поддержке ориентации. Интерфейс должен корректно отображаться как в портретной, так и в ландшафтной ориентации экрана.
RQ087. Требование к поддержке различных размеров экранов. Интерфейс должен адаптироваться под различные размеры экранов мобильных устройств (от 5 до 7 дюймов).
RQ088. Требование к доступности. Интерфейс должен соответствовать стандартам доступности для пользователей с ограниченными возможностями, включая поддержку screen readers.
Блок «Выполнение заказов» - Модуль Техника
Общие положения блока
Блок «Выполнение заказов» является ключевым функциональным блоком модуля техника, обеспечивающим полный жизненный цикл выполнения заказа от выезда к клиенту до завершения процедуры зарядки. Блок интегрируется с системами геолокации, фотофиксации, мониторинга оборудования и уведомлений для обеспечения автоматизированного контроля качества услуг.
Ключевые особенности блока:
- Автоматизация переходов статусов на основе GPS-событий
- Обязательная фотофиксация ключевых этапов выполнения заказа
- Мониторинг процесса зарядки в реальном времени
- Система отчетности о проблемах с эскалацией диспетчеру
- Автоматические уведомления клиентам о статусе заказа
UC011: Просмотр списка заказов в маршруте
Актор: Техник
Описание: Техник просматривает список всех заказов, назначенных ему в рамках текущего маршрута, с информацией о статусах, очередности выполнения и основных параметрах заказа.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Открывает раздел 'Заказы']
A1 --> S1[Система: Проверяет наличие активного маршрута]
S1 --> D1{Есть активный маршрут?}
D1 -->|Нет| S2[Система: Отображает сообщение об отсутствии заказов]
D1 -->|Да| S3[Система: Загружает заказы из RoutePoints<br/>отсортированные по orderIndex]
S3 --> S4[Система: Загружает актуальные статусы заказов]
S4 --> S5[Система: Отображает список заказов<br/>ссылка: СписокЗаказовМаршрута]
S5 --> L1[Цикл: Автоматическое обновление статусов]
L1 --> S6[Система: Обновляет статусы заказов через WebSocket]
S6 --> D2{Есть изменения статусов?}
D2 -->|Да| S7[Система: Обновляет отображение статусов]
D2 -->|Нет| D3{Техник выбирает заказ?}
S7 --> D3
D3 -->|Да| A2[Техник: Нажимает на заказ]
D3 -->|Нет| L1
A2 --> S8[Система: Переход к UC012 Просмотр деталей заказа]
S8 --> End([Конец])
S2 --> End
Модель интерфейсов
classDiagram
class СписокЗаказовМаршрута {
<<Screen>>
+ЗаголовокСписка : Заголовок
+ОбластьПрогрессаМаршрута : ПрогрессБар
+СписокКарточекЗаказов : ОбластьСписка
+КнопкаОбновить : Кнопка
}
class КарточкаЗаказа {
<<Area>>
+НомерПорядка : НомерПорядка
+НомерЗаказа : Текст
+СтатусЗаказа : СтатусИндикатор
+ТипЗаказа : ИконкаТипа
+АдресКлиента : Текст
+ВремяПрибытия : Время
+УровеньЗарядки : ПроцентИндикатор
+ИнформацияКлиента : КлиентИнфо
+КнопкиДействий : ГруппаКнопок
}
class КлиентИнфо {
<<Area>>
+ИмяКлиента : Текст
+МодельАвтомобиля : Текст
+НомерАвтомобиля : Текст
}
СписокЗаказовМаршрута *-- КарточкаЗаказа
КарточкаЗаказа *-- КлиентИнфо
Функциональные требования
RQ101. Требование к загрузке заказов. Система должна загружать заказы из RoutePoints для текущего активного маршрута техника, отсортированные по orderIndex в порядке возрастания.
RQ102. Требование к отображению статусов. Система должна отображать актуальные статусы заказов с цветовой индикацией:
- ASSIGNED - серый (ожидает выполнения)
- EN_ROUTE - синий (техник в пути)
- ARRIVED - желтый (техник прибыл)
- CHARGING - зеленый (процесс зарядки)
- COMPLETED - темно-зеленый (завершен)
- FAILED - красный (проблема)
RQ103. Требование к отображению информации о заказе. Каждая карточка должна содержать:
- Номер порядка выполнения в маршруте
- Номер заказа с префиксом типа (PZ- для плановых, EZ- для экстренных)
- Текущий статус заказа
- Адрес выполнения заказа
- Плановое время прибытия
- Требуемый уровень зарядки из Orders.chargeLevel и Orders.chargeValue
- ФИО клиента и модель автомобиля
- Доступные действия в зависимости от статуса
RQ104. Требование к доступным действиям. Система должна отображать кнопки действий в зависимости от статуса:
- ASSIGNED: "Выехать к клиенту", "Просмотр деталей"
- EN_ROUTE: "Прибыл", "Просмотр деталей", "Сообщить о проблеме"
- ARRIVED: "Начать зарядку", "Просмотр деталей", "Сообщить о проблеме"
- CHARGING: "Мониторинг зарядки", "Завершить зарядку", "Сообщить о проблеме"
- COMPLETED/FAILED: "Просмотр деталей"
RQ105. Требование к автоматическому обновлению. Система должна автоматически обновлять статусы заказов через WebSocket-соединение без перезагрузки экрана.
UC012: Просмотр детальной информации заказа
Актор: Техник
Описание: Техник просматривает полную информацию о конкретном заказе, включая данные клиента, параметры автомобиля, историю статусов и географическое местоположение.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Нажимает на заказ или кнопку 'Детали']
A1 --> S1[Система: Загружает детальную информацию заказа]
S1 --> S2[Система: Загружает данные клиента из Clients]
S2 --> S3[Система: Загружает данные автомобиля из ClientVehicles]
S3 --> S4[Система: Загружает историю статусов из OrderStatusHistories]
S4 --> S5[Система: Отображает детальную информацию<br/>ссылка: ДеталиЗаказа]
S5 --> D1{Выбор действия}
D1 -->|Показать на карте| A2[Техник: Нажимает 'На карте']
D1 -->|Связаться с клиентом| A3[Техник: Нажимает 'Чат с клиентом']
D1 -->|Выполнить действие| A4[Техник: Выбирает действие по статусу]
D1 -->|Назад| A5[Техник: Нажимает 'Назад']
A2 --> S6[Система: Переход к UC031 Построение маршрута]
A3 --> S7[Система: Переход к UC021 Чат с клиентом]
A4 --> S8[Система: Переход к соответствующему UC]
A5 --> End([Конец])
S6 --> End
S7 --> End
S8 --> End
Модель интерфейсов
classDiagram
class ДеталиЗаказа {
<<Screen>>
+ОсновнаяИнформация : ОбластьОсновнойИнформации
+ИнформацияКлиента : ОбластьКлиента
+ПараметрыАвтомобиля : ОбластьАвтомобиля
+ПараметрыЗарядки : ОбластьЗарядки
+ИсторияСтатусов : ОбластьИстории
+КнопкиДействий : ГруппаКнопокДействий
}
class ОбластьОсновнойИнформации {
<<Area>>
+НомерЗаказа : Текст
+ТипЗаказа : Бейдж
+ТекущийСтатус : СтатусИндикатор
+АдресВыполнения : Текст
+ПлановоеВремя : ВремяИДата
+КомментарийКлиента : Текст[500]
}
class ОбластьКлиента {
<<Area>>
+ИмяКлиента : Текст
+ТелефонКлиента : ТелефонЗамаскированный
+АватарКлиента : Изображение
+РейтингКлиента : ЗвездныйРейтинг
}
class ОбластьАвтомобиля {
<<Area>>
+БрендМодель : Текст
+ГодВыпуска : Число
+НомерАвтомобиля : Текст
+ТипКоннектора : КоннекторИнфо
+ЕмкостьБатареи : КиловаттЧасы
+ТекущийУровеньЗаряда : Процент
}
class ОбластьЗарядки {
<<Area>>
+ТребуемыйУровень : Процент
+РасчетноеВремя : Минуты
+СтоимостьУслуги : Деньги
+ПрименяемыйТариф : ТарифИнфо
}
ДеталиЗаказа *-- ОбластьОсновнойИнформации
ДеталиЗаказа *-- ОбластьКлиента
ДеталиЗаказа *-- ОбластьАвтомобиля
ДеталиЗаказа *-- ОбластьЗарядки
Функциональные требования
RQ106. Требование к загрузке данных заказа. Система должна загружать и отображать:
- Полную информацию из Orders
- Данные клиента из Clients (ФИО, замаскированный телефон, рейтинг)
- Параметры автомобиля из ClientVehicles
- Историю изменений статусов из OrderStatusHistories
- Применяемый тариф из Tariffs
RQ107. Требование к отображению конфиденциальной информации. Система должна:
- Показывать полный номер телефона клиента в формате +7 (XXX) XXX-XX-XX
- НЕ отображать email клиента и другие персональные данные
- Отображать только ФИО клиента и рейтинг
RQ108. Требование к расчетным данным. Система должна отображать:
- Расчетное время зарядки на основе текущего и требуемого уровня заряда
- Стоимость услуги согласно применяемому тарифу
- Расстояние до клиента от текущего местоположения техника
RQ109. Требование к истории статусов. Система должна отображать хронологический список изменений статусов с указанием:
- Времени изменения статуса
- Предыдущего и нового статуса
- Инициатора изменения (техник, система, диспетчер)
- GPS-координат изменения (если доступны)
- Причины изменения (если указана)
UC013: Подтверждение выезда к клиенту ("Выехал")
Актор: Техник
Описание: Техник подтверждает начало движения к клиенту, что переводит заказ в статус EN_ROUTE и активирует отслеживание местоположения.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Нажимает 'Выехать к клиенту']
A1 --> S1[Система: Проверяет статус заказа]
S1 --> D1{Статус = ASSIGNED?}
D1 -->|Нет| S2[Система: Отображает ошибку о невозможности действия]
D1 -->|Да| S3[Система: Запрашивает текущую геолокацию]
S3 --> S4[Система: Отображает форму подтверждения выезда<br/>ссылка: ФормаПодтвержденияВыезда]
S4 --> A2[Техник: Подтверждает выезд]
A2 --> S5[Система: Изменяет Orders.status на EN_ROUTE]
S5 --> S6[Система: Создает запись в OrderStatusHistories]
S6 --> S7[Система: Сохраняет GPS-координаты начала движения]
S7 --> S8[Система: Активирует отслеживание маршрута]
S8 --> S9[Система: Отправляет уведомление клиенту]
S9 --> S10[Система: Отображает подтверждение действия]
S10 --> End([Конец])
S2 --> End
Функциональные требования
RQ110. Требование к проверке статуса. Действие "Выехать к клиенту" доступно только для заказов со статусом ASSIGNED. При попытке применить к заказу с другим статусом система должна отобразить соответствующее сообщение об ошибке.
RQ111. Требование к геолокации. При подтверждении выезда система должна:
- Запросить текущие GPS-координаты техника
- Сохранить координаты в OrderStatusHistories.latitude и OrderStatusHistories.longitude
- Проверить, что техник находится в пределах 5 км от базы начала смены
- При превышении расстояния запросить подтверждение у техника
RQ112. Требование к изменению статуса. При подтверждении выезда система должна выполнить атомарную транзакцию:
- Изменить Orders.status на EN_ROUTE
- Создать запись в OrderStatusHistories с указанием времени, GPS-координат и техника
- Установить Orders.actualStartTime = текущее время
- Обновить Orders.updatedAt и Orders.idUpdatedBy
RQ113. Требование к уведомлению клиента. Система должна автоматически отправить клиенту уведомление с информацией:
- "Техник выехал к вам"
- Имя техника
- Ориентировочное время прибытия (ETA)
- Ссылка на отслеживание местоположения техника
RQ114. Требование к активации отслеживания. После изменения статуса система должна:
- Активировать непрерывную передачу GPS-координат техника
- Начать расчет ETA до адреса клиента
- Активировать автоматическое определение прибытия в геозону заказа
UC014: Автоматическая отметка прибытия (по GPS)
Актор: Система (автоматический процесс)
Описание: Система автоматически определяет прибытие техника в геозону адреса заказа и переводит заказ в статус ARRIVED без участия техника.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало: GPS-данные от техника]) --> S1[Система: Получает GPS-координаты техника]
S1 --> S2[Система: Проверяет наличие заказов со статусом EN_ROUTE]
S2 --> D1{Есть активные заказы EN_ROUTE?}
D1 -->|Нет| End([Конец])
D1 -->|Да| S3[Система: Рассчитывает расстояние до адреса заказа]
S3 --> D2{Расстояние ≤ 100 метров?}
D2 -->|Нет| S4[Система: Обновляет ETA клиенту]
D2 -->|Да| S5[Система: Проверяет время нахождения в геозоне]
S4 --> End
S5 --> D3{В геозоне > 30 секунд?}
D3 -->|Нет| S6[Система: Ожидает дополнительные GPS-данные]
D3 -->|Да| S7[Система: Изменяет Orders.status на ARRIVED]
S6 --> End
S7 --> S8[Система: Создает запись в OrderStatusHistories]
S8 --> S9[Система: Отправляет push-уведомление технику]
S9 --> S10[Система: Отправляет уведомление клиенту]
S10 --> S11[Система: Деактивирует отслеживание маршрута]
S11 --> End
Функциональные требования
RQ115. Требование к определению геозоны. Система должна считать техника прибывшим, если:
- Расстояние от GPS-координат техника до координат заказа (Orders.latitude, Orders.longitude) ≤ 100 метров
- Техник находится в данной геозоне непрерывно более 30 секунд
- Заказ имеет статус EN_ROUTE
RQ116. Требование к точности геолокации. Система должна:
- Учитывать погрешность GPS (использовать буферную зону 100±20 метров)
- Игнорировать кратковременные "скачки" GPS-сигнала
- Требовать минимум 3 последовательных измерения в геозоне для подтверждения прибытия
RQ117. Требование к автоматическому изменению статуса. При автоматическом определении прибытия система должна:
- Изменить Orders.status на ARRIVED
- Создать запись в OrderStatusHistories с указанием previousStatus = EN_ROUTE, newStatus = ARRIVED
- Установить OrderStatusHistories.idUser = техник заказа
- Указать OrderStatusHistories.reason = "Автоматическое определение прибытия по GPS"
- Сохранить точные GPS-координаты момента прибытия
RQ118. Требование к уведомлениям при автоматическом прибытии. Система должна:
- Отправить push-уведомление технику: "Вы прибыли к клиенту. Можете начинать зарядку."
- Отправить уведомление клиенту: "Техник прибыл. Ожидайте начала зарядки."
- Уведомить диспетчера об автоматическом изменении статуса
RQ119. Требование к обработке ошибок GPS. При проблемах с GPS система должна:
- Логировать ошибки определения местоположения
- Не изменять статус при неточных или отсутствующих GPS-данных
- Предоставить технику возможность ручного подтверждения прибытия
- Уведомить техника о проблемах с GPS и необходимости ручного подтверждения
UC015: Начало процесса зарядки с фотофиксацией
Актор: Техник
Описание: Техник начинает процесс зарядки автомобиля клиента с обязательной фотофиксацией состояния автомобиля до подключения зарядного оборудования.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Нажимает 'Начать зарядку']
A1 --> S1[Система: Проверяет статус заказа]
S1 --> D1{Статус = ARRIVED?}
D1 -->|Нет| S2[Система: Отображает ошибку о невозможности действия]
D1 -->|Да| S3[Система: Отображает форму фотофиксации<br/>ссылка: ФормаФотофиксацииНачала]
S3 --> A2[Техник: Делает фото области зарядного лючка автомобиля]
A2 --> S4[Система: Проверяет качество фото]
S4 --> D2{Фото соответствует требованиям?}
D2 -->|Нет| S5[Система: Показывает рекомендации по улучшению фото]
D2 -->|Да| S6[Система: Обрабатывает фото (сжатие до 1920px, JPEG, 72%)]
S5 --> A2
S6 --> A3[Техник: Подтверждает начало зарядки]
A3 --> S7[Система: Изменяет Orders.status на CHARGING]
S7 --> S8[Система: Сохраняет фото в таблицу Photos]
S8 --> S9[Система: Создает запись в OrderStatusHistories]
S9 --> S10[Система: Активирует мониторинг процесса зарядки]
S10 --> S11[Система: Отправляет уведомление клиенту]
S11 --> S12[Система: Уведомляет диспетчера о начале зарядки]
S12 --> End([Конец])
S2 --> End
Модель интерфейсов
classDiagram
class ФормаФотофиксацииНачала {
<<Screen>>
+ЗаголовокИнструкции : Заголовок
+ОбластьИнструкций : ОбластьТекста
+ОбластьКамеры : КомпонентКамеры
+ПревьюФото : ОбластьПревью
+КнопкаСделатьФото : Кнопка
+КнопкаПереснять : Кнопка
+КнопкаПодтвердить : Кнопка
+КнопкаОтмена : Кнопка
}
class ОбластьИнструкций {
<<Area>>
+ТекстИнструкции : Текст
+СписокТребований : Список
+ПримерФото : Изображение
}
class ОбластьПревью {
<<Area>>
+СделанноеФото : Изображение
+ИнформацияОФайле : ИнфоФайла
+ОценкаКачества : ИндикаторКачества
}
ФормаФотофиксацииНачала *-- ОбластьИнструкций
ФормаФотофиксацииНачала *-- ОбластьПревью
Функциональные требования
RQ120. Требование к фотофиксации начала зарядки. При начале зарядки техник должен сделать фотографии:
- Общий вид области зарядного лючка автомобиля до подключения
- Состояние лакокрасочного покрытия вокруг зарядного лючка
- Видимые элементы автомобиля в радиусе 50 см от лючка зарядки
- Показания одометра автомобиля (если видны через лобовое стекло)
RQ121. Требование к качеству фотографий. Система должна контролировать:
- Минимальное разрешение исходного фото: 1280x720 пикселей
- Отсутствие сильного размытия (автоматическая проверка резкости)
- Достаточную освещенность (автоматическая проверка яркости)
- Видимость зарядного лючка в кадре (предупреждение при его отсутствии)
RQ122. Требование к обработке фотографий. Перед сохранением система должна:
- Сжать фото до размера 1920 пикселей по большей стороне
- Конвертировать в формат JPEG с качеством 72%
- Добавить метаданные: время съемки, GPS-координаты, ID заказа
- Сохранить исходное фото локально до подтверждения отправки
RQ123. Требование к изменению статуса заказа. При подтверждении начала зарядки система должна:
- Изменить Orders.status на CHARGING
- Установить Orders.actualStartTime = текущее время
- Создать запись в OrderStatusHistories
- Сохранить фотографии в таблицу Photos с типом "charging_start"
- Связать фото с заказом через Photos.idOrder
RQ124. Требование к уведомлениям о начале зарядки. Система должна отправить:
- Клиенту: "Зарядка началась. Ожидайте завершения процесса."
- Диспетчеру: системное уведомление о начале зарядки с указанием времени и техника
- Технику: подтверждение успешного начала процесса зарядки
RQ125. Требование к возможности переснимать фото. До подтверждения начала зарядки техник должен иметь возможность:
- Удалять неудачные фотографии
- Переснимать фото неограниченное количество раз
- Просматривать сделанные фото в полном размере
- Получать подсказки по улучшению качества фото
UC016: Мониторинг процесса зарядки в реальном времени
Актор: Техник
Описание: Техник отслеживает параметры процесса зарядки в реальном времени, получает уведомления о ходе процесса и может управлять зарядкой.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Открывает мониторинг зарядки]
A1 --> S1[Система: Проверяет статус заказа]
S1 --> D1{Статус = CHARGING?}
D1 -->|Нет| S2[Система: Отображает ошибку доступа]
D1 -->|Да| S3[Система: Устанавливает WebSocket соединение с зарядной станцией]
S3 --> S4[Система: Загружает текущие параметры зарядки]
S4 --> S5[Система: Отображает панель мониторинга<br/>ссылка: ПанельМониторингаЗарядки]
S5 --> L1[Цикл: Получение данных в реальном времени]
L1 --> S6[Система: Получает новые данные от зарядной станции]
S6 --> S7[Система: Обновляет отображение параметров]
S7 --> S8[Система: Проверяет критические события]
S8 --> D2{Есть критические события?}
D2 -->|Да| S9[Система: Отображает предупреждения/ошибки]
D2 -->|Нет| D3{Достигнут целевой уровень заряда?}
S9 --> D3
D3 -->|Да| S10[Система: Предлагает завершить зарядку]
D3 -->|Нет| D4{Техник выполняет действие?}
S10 --> D4
D4 -->|Завершить зарядку| A2[Техник: Нажимает 'Завершить зарядку']
D4 -->|Остановить зарядку| A3[Техник: Нажимает 'Приостановить']
D4 -->|Продолжить наблюдение| L1
A2 --> S11[Система: Переход к UC017 Завершение зарядки]
A3 --> S12[Система: Отправляет команду остановки на станцию]
S11 --> End([Конец])
S12 --> S13[Система: Отображает подтверждение остановки]
S13 --> L1
S2 --> End
Модель интерфейсов
classDiagram
class ПанельМониторингаЗарядки {
<<Screen>>
+ОсновныеПараметры : ОбластьОсновныхПараметров
+ГрафикЗарядки : ОбластьГрафика
+ПараметрыСтанции : ОбластьСтанции
+УправлениеПроцессом : ОбластьУправления
+СтатусСоединения : ИндикаторСоединения
}
class ОбластьОсновныхПараметров {
<<Area>>
+ТекущийУровеньЗаряда : ПроцентБольшой
+ЦелевойУровень : ПроцентЦель
+ВремяДоЗавершения : ВремяОсталось
+ПотребленнаяЭнергия : КиловаттЧасы
+СредняяМощность : Киловатты
}
class ОбластьГрафика {
<<Area>>
+ГрафикУровняЗаряда : ЛинейныйГрафик
+ГрафикМощности : ЛинейныйГрафик
+ВременнаяШкала : ОсьВремени
}
class ОбластьСтанции {
<<Area>>
+СтатусСтанции : СтатусИндикатор
+ТемператураСтанции : Температура
+НапряжениеТока : Вольты
+СилаТока : Амперы
+УровеньБатареиСтанции : Процент
}
class ОбластьУправления {
<<Area>>
+КнопкаЗавершить : Кнопка
+КнопкаПриостановить : Кнопка
+КнопкаПродолжить : Кнопка
+КнопкаАварийнаяОстановка : КнопкаАварийная
}
ПанельМониторингаЗарядки *-- ОбластьОсновныхПараметров
ПанельМониторингаЗарядки *-- ОбластьГрафика
ПанельМониторингаЗарядки *-- ОбластьСтанции
ПанельМониторингаЗарядки *-- ОбластьУправления
Функциональные требования
RQ126. Требование к отображаемым параметрам зарядки. Система должна отображать в реальном времени:
- Текущий уровень заряда автомобиля (в процентах)
- Целевой уровень заряда из заказа
- Оставшееся время до завершения зарядки (расчетное)
- Потребленную энергию с начала зарядки (кВт·ч)
- Мгновенную мощность зарядки (кВт)
- Среднюю мощность за сессию
- Общее время зарядки
RQ127. Требование к параметрам зарядной станции. Система должна отображать:
- Статус работы зарядной станции (работает/ошибка/обслуживание)
- Температуру зарядной станции
- Выходное напряжение (В)
- Силу тока (А)
- Уровень заряда встроенной батареи станции (если применимо)
- Количество циклов зарядки с момента последнего ТО
RQ128. Требование к графическому отображению. Система должна отображать:
- Линейный график изменения уровня заряда автомобиля во времени
- График мощности зарядки за последние 30 минут
- Прогнозную кривую зарядки до целевого уровня
- Цветовую индикацию: зеленый (норма), желтый (предупреждение), красный (ошибка)
RQ129. Требование к автоматическим уведомлениям. Система должна уведомлять техника о:
- Достижении целевого уровня заряда
- Критических ошибках зарядной станции
- Перегреве оборудования (>70°C)
- Значительном снижении мощности зарядки
- Потере связи с зарядной станцией
RQ130. Требование к управлению процессом зарядки. Техник должен иметь возможность:
- Приостановить процесс зарядки
- Возобновить приостановленный процесс
- Выполнить аварийную остановку зарядки
- Завершить зарядку досрочно (с подтверждением)
- Изменить целевой уровень заряда (в пределах ±10% от заказанного)
RQ131. Требование к обновлению данных. Система должна:
- Обновлять параметры зарядки каждые 5 секунд
- Обновлять графики каждые 30 секунд
- Сохранять историю параметров для построения графиков
- Кешировать данные для работы при кратковременных обрывах связи
UC017: Завершение зарядки с фотоотчетом
Актор: Техник
Описание: Техник завершает процесс зарядки с обязательной фотофиксацией финального состояния автомобиля и оборудования, оформлением итогового отчета.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Нажимает 'Завершить зарядку']
A1 --> S1[Система: Проверяет статус заказа]
S1 --> D1{Статус = CHARGING?}
D1 -->|Нет| S2[Система: Отображает ошибку о невозможности действия]
D1 -->|Да| S3[Система: Отправляет команду остановки зарядки на станцию]
S3 --> S4[Система: Получает финальные показания с зарядной станции]
S4 --> S5[Система: Отображает форму завершения зарядки<br/>ссылка: ФормаЗавершенияЗарядки]
S5 --> A2[Техник: Делает фото завершения зарядки]
A2 --> S6[Система: Проверяет качество фото]
S6 --> D2{Фото соответствует требованиям?}
D2 -->|Нет| S7[Система: Показывает рекомендации по улучшению фото]
D2 -->|Да| A3[Техник: Вводит комментарии (опционально)]
S7 --> A2
A3 --> A4[Техник: Подтверждает завершение заказа]
A4 --> S8[Система: Изменяет Orders.status на COMPLETED]
S8 --> S9[Система: Сохраняет финальные данные заказа]
S9 --> S10[Система: Сохраняет фото завершения]
S10 --> S11[Система: Создает запись в OrderStatusHistories]
S11 --> S12[Система: Рассчитывает итоговую стоимость]
S12 --> S13[Система: Отправляет уведомления клиенту и диспетчеру]
S13 --> S14[Система: Отображает итоговый отчет<br/>ссылка: ИтоговыйОтчетЗаказа]
S14 --> End([Конец])
S2 --> End
Модель интерфейсов
classDiagram
class ФормаЗавершенияЗарядки {
<<Screen>>
+ИтоговыеПоказатели : ОбластьПоказателей
+ФотофиксацияЗавершения : ОбластьФото
+КомментарииТехника : ОбластьКомментариев
+ПодтверждениеЗавершения : ОбластьПодтверждения
}
class ОбластьПоказателей {
<<Area>>
+НачальныйУровеньЗаряда : Процент
+ФинальныйУровеньЗаряда : Процент
+ПотребленнаяЭнергия : КиловаттЧасы
+ВремяЗарядки : ВремяПродолжительность
+СредняяМощность : Киловатты
}
class ОбластьФото {
<<Area>>
+ИнструкцииФотофиксации : Текст
+КомпонентКамеры : КамераКомпонент
+ПревьюФотографий : ГалереяМини
+КнопкиУправленияФото : ГруппаКнопок
}
class ОбластьКомментариев {
<<Area>>
+ПолеКомментария : ТекстовоеПоле[500]
+ПредустановленныеКомментарии : СписокВыбора
+ОценкаКлиента : ЗвездныйРейтинг
}
class ИтоговыйОтчетЗаказа {
<<Screen>>
+ОбщаяИнформация : ОбластьОбщейИнформации
+ДетализацияЗарядки : ОбластьДетализации
+СтоимостьУслуг : ОбластьСтоимости
+КнопкиДействий : ГруппаКнопокОтчета
}
ФормаЗавершенияЗарядки *-- ОбластьПоказателей
ФормаЗавершенияЗарядки *-- ОбластьФото
ФормаЗавершенияЗарядки *-- ОбластьКомментариев
Функциональные требования
RQ132. Требование к фотофиксации завершения зарядки. При завершении зарядки техник должен сделать фотографии:
- Общий вид области зарядного лючка после отключения
- Финальное состояние лакокрасочного покрытия вокруг лючка
- Показания одометра автомобиля (если доступны)
- Общий вид автомобиля (для фиксации отсутствия повреждений)
- Зарядная станция в отключенном состоянии
RQ133. Требование к финальным данным заказа. При завершении зарядки система должна сохранить:
- Orders.actualEndTime = время завершения
- Orders.totalKwh = общее количество потребленной энергии
- Orders.totalPrice = итоговая стоимость услуги
- Финальный уровень заряда автомобиля
- Общее время выполнения заказа
- Среднюю мощность зарядки за сессию
RQ134. Требование к расчету итоговой стоимости. Система должна рассчитать:
- Стоимость потребленной энергии: totalKwh × Tariffs.pricePerKwh
- Разовую плату за обслуживание: Tariffs.oneTimeServiceFee (если применимо)
- Доплату за экстренность: Tariffs.emergencyServiceFee (для экстренных заказов)
- Итоговую сумму с учетом всех составляющих
- НДС и детализацию по позициям
RQ135. Требование к созданию итогового отчета. Система должна создать отчет содержащий:
- Общую информацию о заказе (номер, дата, техник)
- Детализацию процесса зарядки (время, энергия, мощность)
- Стоимость услуг с разбивкой
- Фотографии до и после зарядки
- Комментарии техника (если есть)
- QR-код для быстрого доступа клиента к отчету
RQ136. Требование к уведомлениям о завершении. Система должна отправить:
- Клиенту: "Зарядка завершена" с итоговым отчетом и ссылкой на оплату
- Диспетчеру: уведомление о завершении заказа с основными метриками
- Системе биллинга: данные для создания счета к оплате
- Технику: подтверждение успешного завершения заказа
RQ137. Требование к возможности корректировки. До финального подтверждения техник должен иметь возможность:
- Изменить комментарии к заказу
- Переснять фотографии
- Скорректировать финальные показания (в пределах ±5%)
- Отменить завершение и вернуться к процессу зарядки
UC018: Сообщение о проблемах при выполнении заказа
Актор: Техник
Описание: Техник сообщает о возникших проблемах при выполнении заказа, с возможностью классификации проблемы, фотофиксации и эскалации диспетчеру.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Нажимает 'Сообщить о проблеме']
A1 --> S1[Система: Отображает форму сообщения о проблеме<br/>ссылка: ФормаСообщенияОПроблеме]
S1 --> A2[Техник: Выбирает тип проблемы]
A2 --> A3[Техник: Вводит описание проблемы]
A3 --> D1{Требуется фото для данного типа проблемы?}
D1 -->|Да| A4[Техник: Делает фото проблемы]
D1 -->|Нет| A5[Техник: Выбирает действие с заказом]
A4 --> S2[Система: Проверяет качество фото]
S2 --> D2{Фото соответствует требованиям?}
D2 -->|Нет| S3[Система: Показывает рекомендации по фото]
D2 -->|Да| A5
S3 --> A4
A5 --> D3{Какое действие выбрано?}
D3 -->|Завершить заказ как FAILED| A6[Техник: Подтверждает завершение с проблемой]
D3 -->|Продолжить выполнение| A7[Техник: Подтверждает продолжение работ]
D3 -->|Требуется помощь диспетчера| A8[Техник: Запрашивает помощь диспетчера]
A6 --> S4[Система: Изменяет Orders.status на FAILED]
A7 --> S5[Система: Сохраняет проблему без изменения статуса]
A8 --> S6[Система: Отправляет срочное уведомление диспетчеру]
S4 --> S7[Система: Сохраняет отчет о проблеме]
S5 --> S7
S6 --> S7
S7 --> S8[Система: Создает запись в OrderStatusHistories]
S8 --> S9[Система: Отправляет уведомления заинтересованным сторонам]
S9 --> End([Конец])
Модель интерфейсов
classDiagram
class ФормаСообщенияОПроблеме {
<<Screen>>
+ВыборТипаПроблемы : ОбластьВыбораТипа
+ОписаниеПроблемы : ОбластьОписания
+ФотофиксацияПроблемы : ОбластьФото
+ДействияСЗаказом : ОбластьДействий
+КнопкиУправления : ГруппаКнопок
}
class ОбластьВыбораТипа {
<<Area>>
+КатегорииПроблем : СписокКатегорий
+ТипыПроблем : СписокВыбора
+УровеньКритичности : КритичностьИндикатор
}
class ОбластьОписания {
<<Area>>
+ПолеОписания : ТекстовоеПоле[1000]
+ВремяВозникновения : ВремяВыбор
+Теги : МножественныйВыбор
}
class ОбластьФото {
<<Area>>
+ТребованиеКФото : ИндикаторОбязательности
+КомпонентКамеры : КамераКомпонент
+ГалереяФото : СписокФото
+КнопкиФото : ГруппаКнопокФото
}
class ОбластьДействий {
<<Area>>
+ВариантыДействий : РадиоГруппа
+ОбоснованиеВыбора : ТекстовоеПоле[500]
+ОценкаВремениРешения : ВремяВыбор
}
ФормаСообщенияОПроблеме *-- ОбластьВыбораТипа
ФормаСообщенияОПроблеме *-- ОбластьОписания
ФормаСообщенияОПроблеме *-- ОбластьФото
ФормаСообщенияОПроблеме *-- ОбластьДействий
Функциональные требования
RQ138. Требование к классификации проблем. Система должна предоставлять следующие категории проблем:
Технические проблемы оборудования:
- Неисправность зарядной станции
- Проблемы с сервисным ТС
- Неисправность зарядного кабеля
- Проблемы с электропитанием
Проблемы с клиентом/автомобилем:
- Клиент недоступен по указанному адресу
- Неисправность зарядного порта автомобиля
- Несовместимость типа коннектора
- Клиент отказался от услуги
Проблемы доступа:
- Невозможность подъезда к автомобилю
- Заблокированный доступ к зарядному лючку
- Проблемы с парковкой
- Ограничения безопасности
Форс-мажорные обстоятельства:
- Неблагоприятные погодные условия
- Дорожно-транспортное происшествие
- Чрезвычайные ситуации
- Проблемы с безопасностью
RQ139. Требование к обязательности фотофиксации. Фотографии обязательны для следующих типов проблем:
- Все проблемы категории "Проблемы с клиентом/автомобилем"
- Неисправности оборудования
- Проблемы доступа к автомобилю
- Видимые повреждения или нестандартные ситуации
RQ140. Требование к действиям с заказом. Техник должен выбрать одно из действий:
- Завершить заказ как неуспешный (FAILED) - при невозможности выполнения
- Продолжить выполнение - при устранимых проблемах
- Запросить помощь диспетчера - при сложных ситуациях
- Перенести заказ - при временных препятствиях
RQ141. Требование к эскалации диспетчеру. При выборе "Запросить помощь диспетчера" система должна:
- Отправить push-уведомление диспетчеру с высоким приоритетом
- Включить в уведомление тип проблемы, описание и фото
- Указать местоположение техника и клиента
- Предоставить диспетчеру возможность связаться с техником
- Установить статус заказа в "ожидает помощи диспетчера"
RQ142. Требование к сохранению отчета о проблеме. Система должна сохранить:
- Тип и описание проблемы
- Время возникновения проблемы
- GPS-координаты техника
- Фотографии проблемы (если есть)
- Выбранное действие с заказом
- Связь с OrderStatusHistories для отслеживания
RQ143. Требование к уведомлениям о проблемах. Система должна уведомить:
- Диспетчера: о всех проблемах с указанием уровня критичности
- Клиента: при проблемах, влияющих на выполнение заказа
- Техническую поддержку: при технических неисправностях оборудования
- Службу безопасности: при проблемах безопасности
UC019: Просмотр истории выполненных заказов
Актор: Техник
Описание: Техник просматривает историю своих выполненных заказов с возможностью фильтрации, поиска и просмотра детальной информации о каждом заказе.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Открывает раздел 'История заказов']
A1 --> S1[Система: Загружает историю заказов техника]
S1 --> S2[Система: Применяет фильтры по умолчанию (последние 30 дней)]
S2 --> S3[Система: Отображает список заказов<br/>ссылка: ИсторияЗаказовТехника]
S3 --> D1{Выбор действия}
D1 -->|Применить фильтры| A2[Техник: Изменяет параметры фильтрации]
D1 -->|Поиск| A3[Техник: Вводит текст поиска]
D1 -->|Просмотр деталей| A4[Техник: Нажимает на заказ]
D1 -->|Экспорт| A5[Техник: Выбирает экспорт данных]
A2 --> S4[Система: Применяет фильтры и обновляет список]
A3 --> S5[Система: Выполняет поиск и отображает результаты]
A4 --> S6[Система: Отображает детали заказа]
A5 --> S7[Система: Генерирует файл экспорта]
S4 --> S3
S5 --> S3
S6 --> End([Конец])
S7 --> End
Модель интерфейсов
classDiagram
class ИсторияЗаказовТехника {
<<Screen>>
+ОбластьФильтров : ФильтрыИстории
+СтрокаПоиска : ПолеПоиска
+СписокЗаказовИстории : ОбластьСписка
+СтатистикаТехника : ОбластьСтатистики
+Пагинация : КомпонентПагинации
+КнопкаЭкспорт : Кнопка
}
class ФильтрыИстории {
<<Area>>
+ПериодВремени : ДатаИнтервал
+СтатусыЗаказов : МножественныйВыбор
+ТипыЗаказов : ЧекБоксы
+ДиапазонСтоимости : СлайдерДиапазон
+КлиентыЗаказов : ПолеАвтодополнения
}
class КарточкаИсторииЗаказа {
<<Area>>
+НомерИДатаЗаказа : ОсновнаяИнформация
+ИнформацияКлиента : КлиентДанные
+ПараметрыЗарядки : ЗаряднаяИнформация
+СтатусИВремя : СтатусИнформация
+СтоимостьЗаказа : ФинансоваяИнформация
+ОценкаКлиента : РейтингИнформация
+КнопкиДействий : МиниДействия
}
class ОбластьСтатистики {
<<Area>>
+КоличествоЗаказов : Число
+ОбщаяСтоимость : Деньги
+СреднийРейтинг : ЗвездныйРейтинг
+ОбщееВремяРаботы : ВремяПродолжительность
+ПотребленнаяЭнергия : КиловаттЧасы
}
ИсторияЗаказовТехника *-- ФильтрыИстории
ИсторияЗаказовТехника *-- КарточкаИсторииЗаказа
ИсторияЗаказовТехника *-- ОбластьСтатистики
Функциональные требования
RQ144. Требование к загрузке истории заказов. Система должна загружать заказы техника из Orders со статусами COMPLETED и FAILED, отсортированные по updatedAt в порядке убывания (новые первыми).
RQ145. Требование к фильтрации истории. Система должна предоставлять фильтры:
- По периоду времени: последние 7 дней, 30 дней, 3 месяца, произвольный период
- По статусу завершения: успешные (COMPLETED), неуспешные (FAILED), все
- По типу заказа: плановые, экстренные, все типы
- По диапазону стоимости: от минимальной до максимальной суммы
- По клиентам: поиск по имени клиента с автодополнением
RQ146. Требование к функции поиска. Поиск должен выполняться по:
- Номеру заказа (Orders.orderNumber)
- Имени клиента (Clients.firstName + Clients.lastName)
- Адресу выполнения заказа (Orders.address)
- Комментариям к заказу
- Модели автомобиля клиента
RQ147. Требование к отображению информации в карточке. Каждая карточка истории должна содержать:
- Номер заказа и дату выполнения
- ФИО клиента и модель автомобиля
- Адрес выполнения заказа
- Параметры зарядки (начальный/финальный уровень, потребленная энергия)
- Длительность выполнения заказа
- Итоговую стоимость услуги
- Оценку клиента (если есть)
- Статус завершения с иконкой
RQ148. Требование к детальной информации заказа. При просмотре деталей система должна отображать:
- Полную информацию о заказе и клиенте
- Хронологию выполнения заказа с временными метками
- Фотографии до и после зарядки
- Детализацию стоимости услуги
- Отзыв клиента и оценку работы техника
- Использованное оборудование (ТС и зарядная станция)
RQ149. Требование к статистике техника. Система должна рассчитывать и отображать:
- Общее количество выполненных заказов за выбранный период
- Суммарную стоимость оказанных услуг
- Средний рейтинг техника от клиентов
- Общее время работы (без учета перемещений между заказами)
- Общее количество потребленной энергии по всем заказам
- Процент успешно выполненных заказов
RQ150. Требование к экспорту данных. Система должна предоставлять возможность экспорта:
- Списка заказов за выбранный период в формате Excel или CSV
- Детального отчета по каждому заказу с фотографиями (PDF)
- Сводного отчета по статистике работы техника
- Фильтрация экспортируемых данных согласно примененным фильтрам
RQ151. Требование к пагинации. Система должна:
- Отображать 20 заказов на странице
- Предоставлять навигацию по страницам
- Показывать общее количество найденных заказов
- Сохранять параметры фильтрации при переходе между страницами
Общие требования к блоку «Выполнение заказов»
Требования к интеграции с другими блоками
RQ152. Требование к интеграции с блоком геолокации. Блок должен интегрироваться с UC030-UC034 для:
- Автоматического определения прибытия техника к клиенту
- Построения маршрута к адресу заказа
- Отслеживания местоположения техника в режиме реального времени
- Сохранения GPS-координат ключевых событий заказа
RQ153. Требование к интеграции с блоком взаимодействия с клиентами. Блок должен интегрироваться с UC020-UC023 для:
- Отправки автоматических уведомлений клиенту о смене статуса заказа
- Предоставления техникам возможности связаться с клиентом
- Получения обратной связи от клиентов по выполненным заказам
RQ154. Требование к интеграции с блоком мониторинга оборудования. Блок должен интегрироваться с UC024-UC029 для:
- Получения данных о состоянии зарядной станции в реальном времени
- Создания заявок на неисправности при обнаружении проблем
- Отслеживания использования оборудования для планирования ТО
Требования к автоматическим уведомлениям
RQ155. Требование к уведомлениям клиентов. Система должна автоматически отправлять уведомления клиенту при каждой смене статуса заказа:
- EN_ROUTE: "Техник {имя} выехал к вам. Ожидаемое время прибытия: {ETA}"
- ARRIVED: "Техник прибыл к месту зарядки. Ожидайте начала процесса."
- CHARGING: "Зарядка началась. Текущий уровень: {%}. Ожидаемое время завершения: {время}"
- COMPLETED: "Зарядка завершена! Финальный уровень: {%}. Итоговая стоимость: {сумма}"
- FAILED: "К сожалению, возникла проблема: {описание}. Свяжитесь с поддержкой."
RQ156. Требование к уведомлениям диспетчера. Система должна уведомлять диспетчера о:
- Начале и завершении каждого заказа
- Проблемах при выполнении заказов (особенно требующих вмешательства)
- Значительных отклонениях от графика выполнения заказов
- Технических неисправностях оборудования
Требования к фотофиксации
RQ157. Требование к обработке фотографий. Все фотографии должны:
- Сжиматься до размера 1920 пикселей по большей стороне
- Сохраняться в формате JPEG с качеством 72%
- Содержать метаданные: время съемки, GPS-координаты, ID заказа
- Проходить автоматическую проверку качества (резкость, освещенность)
RQ158. Требование к хранению фотографий. Система должна:
- Сохранять фотографии в таблице Photos с привязкой к заказу
- Указывать тип фото (charging_start, charging_end, problem_report)
- Обеспечивать возможность удаления/пересъемки до подтверждения действия
- Создавать резервные копии фотографий для критических заказов
Требования к работе с WebSocket
RQ159. Требование к real-time обновлениям. Система должна использовать WebSocket для:
- Получения данных мониторинга зарядки от оборудования
- Автоматического обновления статусов заказов в интерфейсе техника
- Получения команд управления от диспетчера
- Синхронизации данных между мобильным приложением и сервером
RQ160. Требование к обработке разрывов соединения. При потере WebSocket соединения система должна:
- Уведомить техника о потере связи
- Кешировать критические действия локально
- Автоматически восстанавливать соединение при появлении связи
- Синхронизировать накопленные данные после восстановления
Требования к производительности
RQ161. Требование к времени отклика. Система должна обеспечивать:
- Загрузку списка заказов не более чем за 3 секунды
- Отображение деталей заказа не более чем за 2 секунды
- Обновление статуса заказа не более чем за 1 секунду
- Отправку фотографий не более чем за 10 секунд при стабильном соединении
RQ162. Требование к обработке фотографий. Система должна:
- Сжимать фото на устройстве перед отправкой для экономии трафика
- Отображать прогресс загрузки фотографий
- Поддерживать отправку фото в фоновом режиме
- Обеспечивать возможность повторной отправки при неудаче
Требования к безопасности и аудиту
RQ163. Требование к аудиту действий. Все действия техника должны логироваться:
- Время выполнения действия
- GPS-координаты техника (если доступны)
- Тип выполненного действия
- Результат действия (успех/ошибка)
- Связанные данные (ID заказа, фотографии, комментарии)
RQ164. Требование к защите персональных данных. Система должна:
- Показывать технику только необходимую информацию о клиенте
- Маскировать номер телефона клиента в интерфейсе
- Не передавать персональные данные клиента третьим лицам
- Обеспечивать шифрование передаваемых данных
RQ165. Требование к контролю доступа. Техник должен иметь возможность:
- Выполнять действия только с назначенными ему заказами
- Просматривать историю только своих заказов
- Получать уведомления только по своим заказам
- Отправлять сообщения только клиентам по своим заказам
Диаграмма переходов статусов заказа
stateDiagram-v2
[*] --> ASSIGNED : Заказ назначен техникy
ASSIGNED --> EN_ROUTE : UC013: Техник подтвердил выезд
EN_ROUTE --> ARRIVED : UC014: Автоматически по GPS
ARRIVED --> CHARGING : UC015: Техник начал зарядку + фото
CHARGING --> COMPLETED : UC017: Техник завершил зарядку + фото
ASSIGNED --> FAILED : UC018: Сообщение о проблеме
EN_ROUTE --> FAILED : UC018: Сообщение о проблеме
ARRIVED --> FAILED : UC018: Сообщение о проблеме
CHARGING --> FAILED : UC018: Сообщение о проблеме
COMPLETED --> [*]
FAILED --> [*]
note right of CHARGING : UC016: Мониторинг зарядки
note right of FAILED : Требует ручного вмешательства диспетчера
Интеграционные требования
RQ166. Требование к API интеграции. Мобильное приложение должно использовать следующие API endpoints:
- GET /api/technician/orders - получение списка заказов техника
- POST /api/technician/orders/{id}/status - изменение статуса заказа
- POST /api/technician/orders/{id}/photos - загрузка фотографий
- GET /api/technician/orders/{id}/monitoring - получение данных мониторинга зарядки
- POST /api/technician/orders/{id}/problems - сообщение о проблеме
RQ167. Требование к интеграции с оборудованием. Система должна интегрироваться с:
- Зарядными станциями для получения данных мониторинга
- GPS-модулями сервисных ТС для отслеживания местоположения
- Системой управления автопарком для статусов оборудования
- Биллинговой системой для расчета стоимости услуг
Данный блок является основой операционной деятельности техников и напрямую влияет на качество клиентского сервиса и эффективность бизнес-процессов компании.
Блок «Взаимодействие с клиентами» - Модуль Техника
Общие положения блока
Блок «Взаимодействие с клиентами» обеспечивает защищенную коммуникацию между техником и клиентом в рамках выполнения конкретного заказа. Блок предоставляет возможность обмена текстовыми сообщениями и фотографиями без раскрытия персональных контактных данных сторон.
Ключевые особенности блока:
- Защищенная коммуникация без раскрытия номеров телефонов
- Привязка к заказу - каждый чат ведется в контексте конкретного заказа
- Временные ограничения - доступ к чату только в период выполнения маршрута
- Мультимедиа поддержка - обмен текстом и фотографиями
- Автоматическая архивация сообщений после завершения заказа
Интеграционные связи:
- UC011-UC019 (Выполнение заказов) - контекст активного заказа
- UC006-UC010 (Управление маршрутами) - проверка статуса маршрута
- Система уведомлений - отправка push-уведомлений о новых сообщениях
UC020: Просмотр контактной информации клиента
Актор: Техник
Описание: Техник просматривает доступную контактную информацию клиента по текущему заказу для идентификации и подготовки к взаимодействию.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Открывает детали заказа]
A1 --> S1[Система: Проверяет права доступа техника к заказу]
S1 --> D1{Заказ назначен технику?}
D1 -->|Нет| S2[Система: Отображает ошибку доступа]
D1 -->|Да| S3[Система: Загружает информацию клиента из Clients]
S3 --> S4[Система: Загружает данные автомобиля из ClientVehicles]
S4 --> S5[Система: Маскирует конфиденциальные данные]
S5 --> S6[Система: Отображает информацию о клиенте<br/>ссылка: ИнформацияКлиента]
S6 --> D2{Выбор действия}
D2 -->|Написать сообщение| A2[Техник: Нажимает 'Написать клиенту']
D2 -->|Позвонить через систему| A3[Техник: Нажимает 'Связаться']
D2 -->|Назад| A4[Техник: Возвращается к деталям заказа]
A2 --> S7[Система: Переход к UC021 Отправка сообщения]
A3 --> S8[Система: Проверяет доступность звонков через систему]
A4 --> End([Конец])
S2 --> End
S7 --> End
S8 --> D3{Звонки разрешены?}
D3 -->|Да| S9[Система: Инициирует системный вызов]
D3 -->|Нет| S10[Система: Предлагает написать сообщение]
S9 --> End
S10 --> S7
Модель интерфейсов
classDiagram
class ИнформацияКлиента {
<<Screen>>
+ЗаголовокЭкрана : Заголовок
+АватарКлиента : Изображение
+ОсновнаяИнформация : ОбластьОсновнойИнформации
+ИнформацияАвтомобиля : ОбластьАвтомобиля
+КнопкиДействий : ГруппаКнопокСвязи
}
class ОбластьОсновнойИнформации {
<<Area>>
+ИмяКлиента : Текст
+СтатусКлиента : СтатусИндикатор
+ДатаРегистрации : Дата
+ТелефонЗамаскированный : ТекстЗамаскированный
}
class ОбластьАвтомобиля {
<<Area>>
+БрендМодель : Текст
+ГодВыпуска : Число
+НомерАвтомобиля : Текст
+ТипКоннектора : КоннекторИнфо
+ЦветАвтомобиля : Цвет
}
class ГруппаКнопокСвязи {
<<Area>>
+КнопкаНаписать : Кнопка
+КнопкаПозвонить : Кнопка
+КнопкаИсторияЧата : Кнопка
}
ИнформацияКлиента *-- ОбластьОсновнойИнформации
ИнформацияКлиента *-- ОбластьАвтомобиля
ИнформацияКлиента *-- ГруппаКнопокСвязи
Функциональные требования
RQ201. Требование к загрузке информации клиента. Система должна загружать информацию клиента только для заказов, назначенных текущему технику (проверка Orders.idAssignedTechnician).
RQ202. Требование к маскировке персональных данных. Система должна отображать:
- Полное имя клиента из Clients.firstName
- Замаскированный номер телефона в формате "+7 (XXX) XXX-XX-67" (показать только последние 2 цифры)
- Общий статус клиента (активен/заблокирован)
RQ203. Требование к отображению автомобиля. Система должна показывать информацию о текущем автомобиле заказа:
- Бренд и модель из связанной записи ClientVehicles
- Год выпуска, номер автомобиля, цвет
- Тип коннектора для зарядки
RQ204. Требование к проверке доступности связи. Кнопка "Связаться" должна быть доступна только если:
- Маршрут техника имеет статус IN_PROGRESS
- Заказ имеет статус ASSIGNED, EN_ROUTE, ARRIVED или CHARGING
- Рабочая смена техника активна (status = ACTIVE)
RQ205. Требование к контролю конфиденциальности. Система не должна отображать:
- Полный номер телефона клиента
- Адрес проживания клиента (кроме адреса заказа)
- Историю других заказов клиента
- Финансовую информацию клиента
UC021: Отправка сообщений в чат с клиентом
Актор: Техник
Описание: Техник отправляет текстовое сообщение или фотографию клиенту в рамках выполнения конкретного заказа.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Открывает чат с клиентом]
A1 --> S1[Система: Проверяет доступность чата]
S1 --> D1{Чат доступен?}
D1 -->|Нет| S2[Система: Отображает причину недоступности]
D1 -->|Да| S3[Система: Отображает интерфейс чата<br/>ссылка: ЧатСКлиентом]
S3 --> A2[Техник: Выбирает тип сообщения]
A2 --> D2{Тип сообщения}
D2 -->|Текст| A3[Техник: Вводит текстовое сообщение]
D2 -->|Фото| A4[Техник: Выбирает фотографию]
A3 --> A5[Техник: Нажимает 'Отправить']
A4 --> S4[Система: Проверяет размер и формат фото]
S4 --> D3{Фото корректно?}
D3 -->|Нет| S5[Система: Отображает ошибку валидации]
D3 -->|Да| A6[Техник: Добавляет подпись к фото (опционально)]
A6 --> A5
S5 --> A4
A5 --> S6[Система: Валидирует сообщение]
S6 --> D4{Сообщение корректно?}
D4 -->|Нет| S7[Система: Отображает ошибки валидации]
D4 -->|Да| S8[Система: Сохраняет сообщение в Messages]
S7 --> A3
S8 --> S9[Система: Отправляет push-уведомление клиенту]
S9 --> S10[Система: Обновляет интерфейс чата]
S10 --> D5{Продолжить переписку?}
D5 -->|Да| A2
D5 -->|Нет| End([Конец])
S2 --> End
Модель интерфейсов
classDiagram
class ЧатСКлиентом {
<<Screen>>
+ЗаголовокЧата : ЗаголовокСИнформациейКлиента
+ОбластьИсторииСообщений : ОбластьСообщений
+ОбластьВводаСообщения : ОбластьВвода
+СтатусПодключения : ИндикаторСтатуса
}
class ЗаголовокСИнформациейКлиента {
<<Area>>
+ИмяКлиента : Текст
+НомерЗаказа : Текст
+СтатусОнлайн : ИндикаторОнлайн
+КнопкаИнформации : Кнопка
}
class ОбластьСообщений {
<<Area>>
+СписокСообщений : СкроллируемыйСписок
+ИндикаторТипинга : ИндикаторПечати
+ИндикаторЗагрузки : ПрогрессБар
}
class СообщениеТехника {
<<Area>>
+ТекстСообщения : Текст[1000]
+ВремяОтправки : ВремяИДата
+СтатусДоставки : ИндикаторДоставки
+Фотография : Изображение
+КнопкаПовторитьОтправку : Кнопка
}
class ОбластьВвода {
<<Area>>
+ПолеВводаТекста : ТекстовоеПоле[1000]
+КнопкаПрикрепитьФото : Кнопка
+КнопкаОтправить : Кнопка
+ПредпросмотрФото : Изображение
+КнопкаУдалитьФото : Кнопка
}
ЧатСКлиентом *-- ЗаголовокСИнформациейКлиента
ЧатСКлиентом *-- ОбластьСообщений
ЧатСКлиентом *-- ОбластьВвода
ОбластьСообщений *-- СообщениеТехника
Функциональные требования
RQ206. Требование к доступности чата. Чат должен быть доступен только если:
- Маршрут техника имеет статус IN_PROGRESS
- Заказ находится в статусе ASSIGNED, EN_ROUTE, ARRIVED или CHARGING
- Техник является исполнителем заказа (Orders.idAssignedTechnician)
RQ207. Требование к валидации текстовых сообщений. Система должна проверять:
- Длина сообщения не более 1000 символов
- Сообщение не содержит только пробельные символы
- Отсутствие запрещенного контента (спам, оскорбления)
RQ208. Требование к обработке фотографий. Система должна:
- Принимать файлы форматов JPEG, PNG размером до 10 МБ
- Автоматически сжимать изображения до 1920px по большей стороне
- Добавлять watermark с ID заказа
- Сохранять EXIF-данные о времени и местоположении съемки
RQ209. Требование к сохранению сообщений. При отправке система должна создавать запись в Messages:
- idOrder - ID текущего заказа
- idSender - ID техника (пользователь с ролью TECHNICIAN)
- idRecipient - ID клиента заказа
- messageType - TEXT или PHOTO
- content - текст сообщения или путь к файлу фото
- sentAt - текущее время сервера
RQ210. Требование к уведомлениям. После отправки сообщения система должна:
- Отправить push-уведомление клиенту с превью сообщения
- Отправить SMS-уведомление, если push недоступен
- Логировать факт отправки уведомления
RQ211. Требование к статусам доставки. Система должна отображать статусы:
- "Отправляется" - во время загрузки на сервер
- "Доставлено" - после успешного сохранения
- "Прочитано" - после открытия клиентом (если доступно)
- "Ошибка" - при сбое отправки с возможностью повтора
UC022: Получение сообщений от клиента
Актор: Техник
Описание: Техник получает и просматривает сообщения от клиента в режиме реального времени через активный чат или push-уведомления.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> Event1[Событие: Клиент отправил сообщение]
Event1 --> S1[Система: Получает сообщение через WebSocket]
S1 --> S2[Система: Валидирует принадлежность сообщения к заказу техника]
S2 --> D1{Сообщение для этого техника?}
D1 -->|Нет| End1([Игнорировать])
D1 -->|Да| S3[Система: Обновляет интерфейс чата в реальном времени]
S3 --> D2{Приложение активно?}
D2 -->|Да| S4[Система: Отображает сообщение в чате]
D2 -->|Нет| S5[Система: Отправляет push-уведомление технику]
S4 --> S6[Система: Воспроизводит звук нового сообщения]
S5 --> D3{Техник открыл уведомление?}
S6 --> A1[Техник: Просматривает новое сообщение]
D3 -->|Да| S7[Система: Открывает чат с конкретным заказом]
D3 -->|Нет| End2([Конец])
S7 --> S4
A1 --> S8[Система: Отмечает сообщение как прочитанное]
S8 --> D4{Требуется ответ?}
D4 -->|Да| A2[Техник: Переходит к UC021 Отправка сообщения]
D4 -->|Нет| A3[Техник: Продолжает работу с заказом]
A2 --> End3([Конец])
A3 --> End3
Модель интерфейсов
classDiagram
class СообщениеКлиента {
<<Area>>
+ТекстСообщения : Текст
+ВремяПолучения : ВремяИДата
+СтатусПрочтения : ИндикаторПрочтения
+Фотография : Изображение
+КнопкаОтветить : Кнопка
+КнопкаСохранитьФото : Кнопка
}
class PushУведомление {
<<Notification>>
+ЗаголовокУведомления : Текст
+ТекстПревью : Текст[100]
+ИконкаЗаказа : Изображение
+ВремяПолучения : Время
+КнопкаОтветить : Кнопка
+КнопкаПросмотреть : Кнопка
}
class ИндикаторНовыхСообщений {
<<Area>>
+КоличествоНепрочитанных : Число
+ИконкаУведомления : Значок
+АнимацияВнимания : Анимация
}
Функциональные требования
RQ212. Требование к real-time получению. Система должна:
- Использовать WebSocket для мгновенного получения сообщений
- Обновлять интерфейс чата без перезагрузки страницы
- Поддерживать работу в фоновом режиме
RQ213. Требование к валидации входящих сообщений. Система должна проверять:
- Сообщение относится к заказу, назначенному текущему технику
- Отправитель является клиентом данного заказа
- Сообщение не является дубликатом
RQ214. Требование к отображению сообщений клиента. Система должна:
- Выравнивать сообщения клиента по левой стороне
- Отображать время получения в локальном часовом поясе
- Показывать статус прочтения (прочитано/не прочитано)
- Поддерживать отображение фотографий в полном размере
RQ215. Требование к push-уведомлениям. При получении сообщения в фоновом режиме:
- Отображать краткое превью сообщения (до 100 символов)
- Показывать имя клиента и номер заказа
- Предоставлять быстрые действия (ответить, просмотреть)
- Группировать уведомления по заказам
RQ216. Требование к звуковым уведомлениям. Система должна:
- Воспроизводить звук при получении нового сообщения
- Предоставлять настройки звуковых уведомлений
- Отключать звук в режиме "Не беспокоить"
RQ217. Требование к счетчику непрочитанных. Система должна:
- Отображать количество непрочитанных сообщений на иконке чата
- Обновлять счетчик в реальном времени
- Сбрасывать счетчик при открытии чата
UC023: Просмотр истории переписки с клиентом по заказу
Актор: Техник
Описание: Техник просматривает полную историю переписки с клиентом в рамках конкретного заказа, включая все текстовые сообщения и фотографии.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Открывает историю чата с клиентом]
A1 --> S1[Система: Проверяет права доступа к заказу]
S1 --> D1{Доступ разрешен?}
D1 -->|Нет| S2[Система: Отображает ошибку доступа]
D1 -->|Да| S3[Система: Загружает все сообщения из Messages<br/>где idOrder = текущий заказ]
S3 --> S4[Система: Сортирует сообщения по sentAt по возрастанию]
S4 --> S5[Система: Группирует сообщения по дате]
S5 --> S6[Система: Отображает историю переписки<br/>ссылка: ИсторияПереписки]
S6 --> L1[Цикл: Навигация по истории]
L1 --> D2{Выбор действия}
D2 -->|Поиск в истории| A2[Техник: Вводит текст для поиска]
D2 -->|Просмотр фото| A3[Техник: Нажимает на фотографию]
D2 -->|Экспорт истории| A4[Техник: Нажимает 'Экспортировать']
D2 -->|Новое сообщение| A5[Техник: Нажимает 'Написать']
D2 -->|Назад| A6[Техник: Возвращается к деталям заказа]
A2 --> S7[Система: Фильтрует сообщения по тексту]
A3 --> S8[Система: Открывает фото в полноэкранном режиме]
A4 --> S9[Система: Формирует PDF отчет переписки]
A5 --> S10[Система: Переход к UC021 Отправка сообщения]
A6 --> End([Конец])
S7 --> S11[Система: Подсвечивает найденные результаты]
S8 --> L1
S9 --> S12[Система: Предлагает сохранить/отправить отчет]
S10 --> End
S11 --> L1
S12 --> L1
S2 --> End
Модель интерфейсов
classDiagram
class ИсторияПереписки {
<<Screen>>
+ЗаголовокИстории : ЗаголовокСИнформациейЗаказа
+ПанельПоиска : ОбластьПоиска
+ОбластьСообщений : ОбластьХронологии
+ПанельДействий : ГруппаКнопокДействий
+СтатистикаПереписки : ОбластьСтатистики
}
class ЗаголовокСИнформациейЗаказа {
<<Area>>
+НомерЗаказа : Текст
+ИмяКлиента : Текст
+ДатаЗаказа : Дата
+СтатусЗаказа : СтатусИндикатор
+ОбщееВремяПереписки : ВремяПериод
}
class ОбластьПоиска {
<<Area>>
+ПолеПоиска : ПолеВвода[100]
+КнопкаПоиск : Кнопка
+КнопкаОчистить : Кнопка
+СчетчикРезультатов : Текст
}
class ОбластьХронологии {
<<Area>>
+СписокСообщенийПоДатам : СкроллируемыйСписок
+РазделительДат : ДатаРазделитель
+ГруппировкаСообщений : ГруппаСообщений
+ИндикаторЗагрузки : ПрогрессБар
}
class ГруппаСообщений {
<<Area>>
+СообщенияТехника : СообщениеИсходящее[]
+СообщенияКлиента : СообщениеВходящее[]
+ВремяГруппы : ВремяИнтервал
+СтатистикаГруппы : КраткаяСтатистика
}
ИсторияПереписки *-- ЗаголовокСИнформациейЗаказа
ИсторияПереписки *-- ОбластьПоиска
ИсторияПереписки *-- ОбластьХронологии
ОбластьХронологии *-- ГруппаСообщений
Функциональные требования
RQ218. Требование к загрузке истории сообщений. Система должна:
- Загружать все сообщения для заказа:
SELECT * FROM Messages WHERE idOrder = ? ORDER BY sentAt ASC - Группировать сообщения по датам для удобной навигации
- Использовать пагинацию при большом количестве сообщений (по 50 сообщений на страницу)
RQ219. Требование к отображению хронологии. Система должна:
- Показывать сообщения в хронологическом порядке (старые сверху)
- Выделять разными цветами сообщения техника и клиента
- Отображать точное время отправки каждого сообщения
- Группировать сообщения, отправленные в течение 5 минут
RQ220. Требование к функции поиска. Система должна обеспечивать поиск:
- По тексту сообщений (поиск подстроки, регистронезависимый)
- По дате отправки (выбор периода)
- По типу сообщения (только текст или только фото)
- Подсвечивание найденных результатов в тексте
RQ221. Требование к работе с фотографиями. При отображении фото в истории:
- Показывать миниатюры фотографий размером 150x150px
- Открывать полноразмерное изображение при клике
- Отображать метаданные фото (время, размер, геолокация если есть)
- Предоставлять возможность сохранения фото на устройство
RQ222. Требование к экспорту истории. Функция экспорта должна:
- Формировать PDF-отчет со всей перепиской
- Включать метаданные заказа (номер, дата, участники)
- Вставлять фотографии в отчет с подписями
- Добавлять электронную подпись и timestamp экспорта
RQ223. Требование к статистике переписки. Система должна отображать:
- Общее количество сообщений в переписке
- Соотношение сообщений техника и клиента
- Общее время активной переписки
- Среднее время ответа техника на сообщения клиента
RQ224. Требование к производительности. Система должна:
- Загружать историю не более чем за 3 секунды
- Поддерживать плавную прокрутку при больших объемах переписки
- Кешировать загруженные сообщения для быстрого доступа
- Оптимизировать загрузку изображений (lazy loading)
Интеграционные требования блока
Интеграция с блоком "Выполнение заказов"
RQ225. Требование к интеграции со статусами заказов. Блок должен:
- Автоматически активировать чат при переходе заказа в статус ASSIGNED
- Ограничивать доступ к чату при статусах COMPLETED, CANCELLED, FAILED
- Отображать текущий статус заказа в интерфейсе чата
- Синхронизироваться с изменениями статуса в реальном времени
Интеграция с блоком "Управление маршрутами"
RQ226. Требование к интеграции с маршрутами. Система должна:
- Проверять статус маршрута перед предоставлением доступа к чату
- Автоматически закрывать доступ к чату при завершении маршрута
- Отображать информацию о текущем положении в маршруте
Интеграция с системой уведомлений
RQ227. Требование к уведомлениям. Система должна интегрироваться с:
- Push-уведомлениями мобильного приложения
- SMS-шлюзом для резервных уведомлений
- Email-системой для служебных уведомлений диспетчеру
- WebSocket для real-time обновлений
Интеграция с системой аудита
RQ228. Требование к логированию. Все действия должны записываться в аудит-лог:
- Начало и завершение сессий чата
- Отправка и получение каждого сообщения
- Просмотр истории переписки
- Экспорт данных переписки
Требования к безопасности и конфиденциальности
RQ229. Требование к контролю доступа. Система должна:
- Проверять права техника на доступ к каждому сообщению
- Запрещать доступ к чатам других техников
- Автоматически завершать сессии при смене статуса заказа
- Логировать все попытки несанкционированного доступа
RQ230. Требование к шифрованию данных. Система должна:
- Шифровать сообщения при передаче по сети (TLS 1.3)
- Хранить сообщения в зашифрованном виде в базе данных
- Использовать end-to-end шифрование для конфиденциальных данных
- Регулярно ротировать ключи шифрования
RQ231. Требование к хранению данных. Система должна:
- Хранить сообщения не более 1 года после завершения заказа
- Автоматически удалять персональные данные по запросу
- Вести журнал удаления данных для аудита
- Создавать резервные копии в зашифрованном виде
Требования к производительности
RQ232. Требование к времени отклика. Система должна обеспечивать:
- Доставку сообщений не более чем за 2 секунды
- Загрузку истории чата не более чем за 3 секунды
- Отправку push-уведомлений не более чем за 1 секунду
- Поиск по истории не более чем за 5 секунд
RQ233. Требование к пропускной способности. Система должна поддерживать:
- До 100 одновременных техников в чатах
- До 1000 сообщений в минуту
- Загрузку фотографий до 10 МБ каждая
- Хранение до 1 млн сообщений в активной базе
RQ234. Требование к надежности. Система должна обеспечивать:
- Доступность 99.9% времени в рабочие часы
- Автоматическое восстановление соединений
- Дублирование критических сообщений
- Откат к резервным каналам связи при сбоях
Диаграмма состояний доступности чата
stateDiagram-v2
[*] --> Недоступен : Маршрут не назначен
Недоступен --> Ожидание : Маршрут назначен (ASSIGNED)
Ожидание --> Активен : Маршрут принят (IN_PROGRESS)
Активен --> Заблокирован : Заказ завершен/отменен
Активен --> Приостановлен : Техническая проблема
Приостановлен --> Активен : Проблема устранена
Заблокирован --> Архивный : Маршрут завершен (COMPLETED)
Архивный --> [*] : Истечение срока хранения
note right of Активен : Доступны UC021, UC022, UC023
note right of Архивный : Доступен только UC023 (только чтение)
note right of Заблокирован : Доступен только UC023 (только чтение)
Блок «Мониторинг оборудования» - Модуль Техника
Общие положения блока
Блок «Мониторинг оборудования» обеспечивает технику возможность отслеживания технического состояния назначенного ему оборудования (сервисного ТС и зарядной станции), создания заявок на неисправности и просмотра технических характеристик. Блок интегрируется с серверными системами мониторинга оборудования для получения данных в реальном времени и обеспечивает оперативное реагирование на технические проблемы.
Ключевые особенности блока:
- Мониторинг в реальном времени данных о состоянии оборудования от серверной части
- Система приоритетных заявок на неисправности с фотофиксацией
- Отслеживание статуса заявок техником после создания
- Автоматические уведомления диспетчеру и технику о критичных проблемах
- Интеграция с GPS для привязки проблем к местоположению
UC024: Просмотр статуса сервисного ТС
Актор: Техник
Описание: Техник просматривает текущее техническое состояние назначенного ему сервисного ТС с данными, получаемыми от серверной части системы в реальном времени.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Открывает раздел 'Оборудование']
A1 --> S1[Система: Проверяет назначенное ТС техника]
S1 --> D1{Есть назначенное ТС?}
D1 -->|Нет| S2[Система: Отображает сообщение об отсутствии назначенного ТС]
D1 -->|Да| S3[Система: Запрашивает актуальные данные ТС от сервера]
S3 --> S4[Система: Загружает техническую информацию из ServiceVehicles]
S4 --> S5[Система: Отображает панель мониторинга ТС<br/>ссылка: ПанельМониторингаТС]
S5 --> L1[Цикл: Автоматическое обновление данных каждые 30 сек]
L1 --> S6[Система: Обновляет данные состояния ТС]
S6 --> D2{Обнаружены критичные показатели?}
D2 -->|Да| S7[Система: Отображает предупреждение]
D2 -->|Нет| D3{Техник выбирает действие?}
S7 --> D3
D3 -->|Создать заявку| A2[Техник: Нажимает 'Сообщить о проблеме']
D3 -->|Просмотр деталей| A3[Техник: Нажимает на параметр для детализации]
D3 -->|Обновить данные| L1
A2 --> S8[Система: Переход к UC026]
A3 --> S9[Система: Отображает детальную информацию параметра]
S8 --> End([Конец])
S9 --> End
S2 --> End
Модель интерфейсов
classDiagram
class ПанельМониторингаТС {
<<Screen>>
+ЗаголовокТС : Заголовок
+ОсновныеПоказатели : ОбластьПоказателей
+ДетальныеПараметры : ОбластьДеталей
+СтатусИндикаторы : ОбластьСтатусов
+КнопкаОбновить : Кнопка
+КнопкаСообщитьПроблему : Кнопка
+ВремяПоследнегоОбновления : Время
}
class ОбластьПоказателей {
<<Area>>
+УровеньЗарядаТС : ПроцентИндикатор
+ПробегТС : ЧисловойИндикатор
+РасходЭнергии : ЧисловойИндикатор
+СкоростьДвижения : ЧисловойИндикатор
+GPS_Координаты : КоординатыИндикатор
}
class ОбластьДеталей {
<<Area>>
+ТемператураСалона : ТермометрИндикатор
+СтатусДвигателя : СтатусИндикатор
+СтатусТормозов : СтатусИндикатор
+СтатусОсвещения : СтатусИндикатор
+ДавлениеШин : ЧисловойИндикатор
+УровеньОхлаждения : ПроцентИндикатор
}
class ОбластьСтатусов {
<<Area>>
+ОбщийСтатусТС : СтатусИндикатор
+ИндикаторыПредупреждений : СписокПредупреждений
+ПоследниеОшибки : СписокОшибок
}
ПанельМониторингаТС *-- ОбластьПоказателей
ПанельМониторингаТС *-- ОбластьДеталей
ПанельМониторингаТС *-- ОбластьСтатусов
Функциональные требования
RQ167. Требование к отображению основных показателей ТС. Система должна отображать:
- Уровень заряда основной батареи ТС (%)
- Текущий пробег и расход энергии (кВт⋅ч/100км)
- Текущую скорость движения (км/ч)
- GPS-координаты с точностью до метра
- Время последнего обновления данных
RQ168. Требование к отображению детальных параметров. Система должна отображать:
- Температуру в салоне и отсеках с оборудованием (°C)
- Статус систем: двигатель, тормоза, освещение, кондиционирование
- Давление в шинах (при наличии датчиков)
- Уровень охлаждающей жидкости/температуру систем охлаждения
- Напряжение бортовой сети
RQ169. Требование к индикации проблем. Система должна:
- Выделять красным цветом критичные показатели (заряд <15%, перегрев >80°C)
- Отображать желтым предупреждающие значения (заряд <30%, высокая температура >60°C)
- Показывать зеленым нормальные параметры
- Воспроизводить звуковой сигнал при критичных проблемах
RQ170. Требование к автоматическому обновлению. Система должна:
- Обновлять данные автоматически каждые 30 секунд при активном экране
- Сохранять данные локально при потере соединения
- Отображать индикатор "офлайн" при отсутствии связи с сервером
- Синхронизировать накопленные данные при восстановлении связи
UC025: Просмотр статуса зарядной станции
Актор: Техник
Описание: Техник просматривает текущее техническое состояние назначенной ему зарядной станции с данными о готовности к работе, параметрах зарядки и технических характеристиках.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Переходит на вкладку 'Зарядная станция']
A1 --> S1[Система: Проверяет назначенную зарядную станцию]
S1 --> D1{Есть назначенная станция?}
D1 -->|Нет| S2[Система: Отображает сообщение об отсутствии назначенной станции]
D1 -->|Да| S3[Система: Запрашивает актуальные данные станции от сервера]
S3 --> S4[Система: Загружает техническую информацию из ChargingStations]
S4 --> S5[Система: Отображает панель мониторинга станции<br/>ссылка: ПанельМониторингаСтанции]
S5 --> L1[Цикл: Автоматическое обновление каждые 15 сек]
L1 --> S6[Система: Обновляет данные состояния станции]
S6 --> D2{Станция заряжает клиента?}
D2 -->|Да| S7[Система: Отображает данные активной зарядки]
D2 -->|Нет| S8[Система: Отображает данные готовности к работе]
S7 --> D3{Обнаружены проблемы?}
S8 --> D3
D3 -->|Да| S9[Система: Отображает предупреждения/ошибки]
D3 -->|Нет| D4{Техник выбирает действие?}
S9 --> D4
D4 -->|Создать заявку| A2[Техник: Нажимает 'Сообщить о проблеме']
D4 -->|Техподдержка| A3[Техник: Нажимает 'Техническая поддержка']
D4 -->|Обновить| L1
A2 --> S10[Система: Переход к UC027]
A3 --> S11[Система: Отображает техническую документацию]
S10 --> End([Конец])
S11 --> End
S2 --> End
Модель интерфейсов
classDiagram
class ПанельМониторингаСтанции {
<<Screen>>
+ЗаголовокСтанции : Заголовок
+СтатусГотовности : СтатусИндикатор
+ПараметрыЗарядки : ОбластьЗарядки
+ТехническиеПараметры : ОбластьТехПараметров
+АктивнаяСессия : ОбластьАктивнойЗарядки
+КнопкаСообщитьПроблему : Кнопка
+КнопкаТехПоддержка : Кнопка
}
class ОбластьЗарядки {
<<Area>>
+ЗарядБатареиСтанции : ПроцентИндикатор
+МаксимальнаяМощность : ЧисловойИндикатор
+ТекущаяМощность : ЧисловойИндикатор
+НапряжениеВыхода : ЧисловойИндикатор
+ТокВыхода : ЧисловойИндикатор
+СтатусКоннекторов : СписокКоннекторов
}
class ОбластьТехПараметров {
<<Area>>
+ТемператураОборудования : ТермометрИндикатор
+ВремяРаботы : ВремяИндикатор
+СчетчикЦиклов : ЧисловойИндикатор
+СтатусПодключенияТС : СтатусИндикатор
+СистемныеОшибки : СписокОшибок
+ПоследняяДиагностика : ВремяИндикатор
}
class ОбластьАктивнойЗарядки {
<<Area>>
+НомерЗаказа : Текст
+ВремяНачалаЗарядки : Время
+УровеньЗарядкиАвто : ПроцентИндикатор
+ПереданоЭнергии : ЧисловойИндикатор
+ОжидаемоеВремяЗавершения : Время
+СтоимостьСессии : ЦенаИндикатор
}
ПанельМониторингаСтанции *-- ОбластьЗарядки
ПанельМониторингаСтанции *-- ОбластьТехПараметров
ПанельМониторингаСтанции *-- ОбластьАктивнойЗарядки
Функциональные требования
RQ171. Требование к отображению параметров зарядки. Система должна отображать:
- Уровень заряда батареи станции (% и кВт⋅ч)
- Максимальную мощность зарядки (кВт) и текущую выходную мощность
- Напряжение и ток на выходе (В, А)
- Статус каждого коннектора (доступен/занят/неисправен)
- Общее количество переданной энергии за смену
RQ172. Требование к отображению технических параметров. Система должна отображать:
- Температуру оборудования станции (°C)
- Общее время работы с момента начала смены
- Счетчик циклов зарядки до планового ТО
- Статус подключения к сервисному ТС
- Время последней автоматической диагностики
RQ173. Требование к отображению активной зарядки. При активной зарядке система должна отображать:
- Номер текущего заказа и время начала зарядки
- Текущий уровень заряда автомобиля клиента (%)
- Объем уже переданной энергии (кВт⋅ч)
- Примерное время завершения зарядки
- Накопленную стоимость текущей сессии
RQ174. Требование к индикации проблем зарядной станции. Система должна:
- Выделять красным критичные проблемы (заряд станции <10%, перегрев >70°C, ошибки коннекторов)
- Показывать желтым предупреждения (заряд станции <25%, температура >50°C)
- Отображать зеленым нормальное состояние
- Отправлять push-уведомление при критичных ошибках
UC026: Создание заявки на неисправность ТС
Актор: Техник
Описание: Техник создает заявку на неисправность сервисного ТС с указанием проблемы, приоритета и обязательной фотофиксацией.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Нажимает 'Сообщить о проблеме ТС']
A1 --> S1[Система: Отображает форму создания заявки<br/>ссылка: ФормаЗаявкиТС]
S1 --> A2[Техник: Описывает проблему]
A2 --> A3[Техник: Выбирает приоритет проблемы]
A3 --> A4[Техник: Делает фотографии проблемы]
A4 --> A5[Техник: Указывает влияние на работу]
A5 --> A6[Техник: Нажимает 'Отправить заявку']
A6 --> S2[Система: Валидирует данные заявки]
S2 --> D1{Данные корректны?}
D1 -->|Нет| S3[Система: Отображает ошибки валидации]
D1 -->|Да| S4[Система: Получает GPS-координаты техника]
S3 --> A2
S4 --> S5[Система: Создает заявку в EquipmentIssues]
S5 --> S6[Система: Сохраняет фотографии в Photos]
S6 --> S7[Система: Отправляет уведомление диспетчеру]
S7 --> S8[Система: Отображает подтверждение создания]
S8 --> S9[Система: Показывает номер заявки для отслеживания]
S9 --> End([Конец])
Модель интерфейсов
classDiagram
class ФормаЗаявкиТС {
<<Screen>>
+ЗаголовокФормы : Заголовок
+ИнформацияОТС : ОбластьИнформации
+ОписаниеПроблемы : TextArea*[500]
+ВыборПриоритета : RadioGroup*
+ВлияниеНаРаботу : CheckboxGroup
+ОбластьФотографий : ОбластьФото
+ДополнительныеКомментарии : TextArea[200]
+КнопкаОтправить : Button
+КнопкаОтмена : Button
}
class ОбластьИнформации {
<<Area>>
+МодельТС : TextField[readonly]
+НомерТС : TextField[readonly]
+ТекущееМестоположение : КоординатыПоле
+ВремяОбнаружения : DateTimeField
}
class ОбластьФото {
<<Area>>
+КнопкаСделатьФото : Button
+СписокФотографий : ListBox
+КнопкаУдалитьФото : Button
+ПросмотрФото : ImageViewer
}
class ВыборПриоритета {
<<RadioGroup>>
+НизкийПриоритет : RadioButton
+СреднийПриоритет : RadioButton
+ВысокийПриоритет : RadioButton
+КритическийПриоритет : RadioButton
}
ФормаЗаявкиТС *-- ОбластьИнформации
ФормаЗаявкиТС *-- ОбластьФото
ФормаЗаявкиТС *-- ВыборПриоритета
Функциональные требования
RQ175. Требование к обязательным полям заявки на ТС. При создании заявки обязательны:
- Описание проблемы (минимум 10 символов, максимум 500)
- Приоритет проблемы (низкий/средний/высокий/критический)
- Минимум 1 фотография проблемы
- Влияние на возможность работы (может работать/ограниченная работа/не может работать)
RQ176. Требование к приоритетам заявок ТС. Система должна поддерживать приоритеты:
- Критический: Полная невозможность работы, угроза безопасности
- Высокий: Серьезное влияние на качество работы
- Средний: Заметные проблемы, не критичные для работы
- Низкий: Минорные проблемы, косметические дефекты
RQ177. Требование к автоматическому заполнению данных ТС. Система должна автоматически заполнять:
- Модель и номер ТС из назначения техника
- Текущие GPS-координаты техника
- Дату и время создания заявки
- ID техника и информацию о текущей смене
RQ178. Требование к фотофиксации проблем ТС. Система должна:
- Требовать минимум 1 фотографию для создания заявки
- Позволять прикреплять до 5 фотографий к одной заявке
- Сжимать фотографии до 1920px по большей стороне
- Добавлять GPS-координаты в метаданные фотографий
RQ179. Требование к уведомлениям о заявках ТС. При создании заявки система должна:
- Отправить push-уведомление диспетчеру с приоритетом заявки
- Отправить email-уведомление при критическом приоритете
- Сохранить номер заявки для отслеживания техником
- Создать запись в истории работы техника
UC027: Создание заявки на неисправность зарядной станции
Актор: Техник
Описание: Техник создает заявку на неисправность зарядной станции с детальным описанием технической проблемы и возможным влиянием на выполнение заказов.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Нажимает 'Сообщить о проблеме станции']
A1 --> S1[Система: Отображает форму создания заявки<br/>ссылка: ФормаЗаявкиСтанции]
S1 --> A2[Техник: Выбирает тип проблемы]
A2 --> A3[Техник: Описывает проблему детально]
A3 --> A4[Техник: Выбирает приоритет]
A4 --> A5[Техник: Делает фотографии оборудования]
A5 --> D1{Проблема влияет на текущий заказ?}
D1 -->|Да| A6[Техник: Указывает влияние на заказ]
D1 -->|Нет| A7[Техник: Указывает возможность продолжения работы]
A6 --> A8[Техник: Нажимает 'Отправить заявку']
A7 --> A8
A8 --> S2[Система: Валидирует данные заявки]
S2 --> D2{Данные корректны?}
D2 -->|Нет| S3[Система: Отображает ошибки валидации]
D2 -->|Да| S4[Система: Получает текущие параметры станции]
S3 --> A2
S4 --> S5[Система: Создает заявку с техническими данными]
S5 --> S6[Система: Сохраняет фотографии и параметры]
S6 --> D3{Приоритет критический?}
D3 -->|Да| S7[Система: Отправляет экстренное уведомление]
D3 -->|Нет| S8[Система: Отправляет стандартное уведомление]
S7 --> S9[Система: Отображает подтверждение с номером заявки]
S8 --> S9
S9 --> End([Конец])
Модель интерфейсов
classDiagram
class ФормаЗаявкиСтанции {
<<Screen>>
+ЗаголовокФормы : Заголовок
+ИнформацияОСтанции : ОбластьИнформацииСтанции
+ТипПроблемы : DropDown*
+ОписаниеПроблемы : TextArea*[500]
+ВыборПриоритета : RadioGroup*
+ВлияниеНаЗаказы : CheckboxGroup
+ТекущиеПараметры : ОбластьПараметров
+ОбластьФотографий : ОбластьФото
+КнопкаОтправить : Button
+КнопкаОтмена : Button
}
class ОбластьИнформацииСтанции {
<<Area>>
+МодельСтанции : TextField[readonly]
+СерийныйНомер : TextField[readonly]
+ТекущийСтатус : StatusField[readonly]
+ВремяОбнаружения : DateTimeField
+АктивныйЗаказ : TextField[readonly]
}
class ОбластьПараметров {
<<Area>>
+ЗарядБатареи : PercentField[readonly]
+ТемператураОборудования : NumberField[readonly]
+ВыходноеНапряжение : NumberField[readonly]
+ВыходнойТок : NumberField[readonly]
+СтатусКоннекторов : StatusList[readonly]
}
class ТипПроблемы {
<<DropDown>>
+НеисправностьБатареи : Option
+ПроблемыЗарядки : Option
+НеисправностьКоннектора : Option
+Перегрев : Option
+ОшибкиПО : Option
+МеханическиеПовреждения : Option
+ПроблемыПитания : Option
+Другое : Option
}
ФормаЗаявкиСтанции *-- ОбластьИнформацииСтанции
ФормаЗаявкиСтанции *-- ОбластьПараметров
ФормаЗаявкиСтанции *-- ТипПроблемы
Функциональные требования
RQ180. Требование к типам проблем зарядных станций. Система должна предоставлять типы проблем:
- Неисправность батареи: Проблемы с накоплением/отдачей энергии
- Проблемы зарядки: Невозможность зарядить автомобиль клиента
- Неисправность коннектора: Физические проблемы с разъемами
- Перегрев: Критическая температура оборудования
- Ошибки ПО: Программные сбои в управлении станцией
- Механические повреждения: Физические повреждения корпуса/компонентов
- Проблемы питания: Проблемы с подключением к ТС или внешним источникам
- Другое: С обязательным детальным описанием
RQ181. Требование к автоматическому захвату параметров. При создании заявки система должна автоматически сохранить:
- Все текущие технические параметры станции
- Время последней успешной зарядки
- Количество ошибок в логах за последние 24 часа
- Информацию о текущем заказе (если есть)
- Историю последних 10 операций станции
RQ182. Требование к критическим заявкам станции. При критическом приоритете система должна:
- Отправить немедленное push-уведомление диспетчеру
- Отправить SMS-уведомление при отсутствии подтверждения в течение 5 минут
- Создать запись в журнале критических событий
- Предложить технику связаться с диспетчером напрямую
RQ183. Требование к влиянию на заказы. Техник должен указать влияние проблемы:
- Блокирует текущий заказ: Невозможно продолжить зарядку
- Снижает эффективность: Пониженная мощность зарядки
- Угрожает безопасности: Риск для техника или клиента
- Может повлиять на следующие заказы: Потенциальные проблемы
- Не влияет на работу: Косметические/информационные проблемы
UC028: Просмотр истории заявок на неисправности
Актор: Техник
Описание: Техник просматривает историю всех созданных им заявок на неисправности с возможностью отслеживания статуса обработки и просмотра ответов диспетчера.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Открывает раздел 'История заявок']
A1 --> S1[Система: Загружает заявки техника из EquipmentIssues]
S1 --> S2[Система: Сортирует заявки по дате создания (новые сверху)]
S2 --> S3[Система: Отображает список заявок<br/>ссылка: СписокЗаявокТехника]
S3 --> D1{Техник выбирает действие?}
D1 -->|Фильтрация| A2[Техник: Выбирает фильтры]
D1 -->|Просмотр заявки| A3[Техник: Нажимает на заявку]
D1 -->|Обновление| A4[Техник: Нажимает 'Обновить']
A2 --> S4[Система: Применяет фильтры к списку]
A3 --> S5[Система: Отображает детали заявки<br/>ссылка: ДеталиЗаявки]
A4 --> S1
S4 --> S3
S5 --> D2{Есть новые комментарии?}
D2 -->|Да| S6[Система: Отмечает заявку как просмотренную]
D2 -->|Нет| D3{Техник выбирает действие с заявкой?}
S6 --> D3
D3 -->|Добавить комментарий| A5[Техник: Вводит комментарий к заявке]
D3 -->|Закрыть заявку| A6[Техник: Подтверждает решение проблемы]
D3 -->|Назад к списку| S3
A5 --> S7[Система: Сохраняет комментарий техника]
A6 --> S8[Система: Обновляет статус заявки на 'Закрыта техником']
S7 --> S5
S8 --> S5
End([Конец])
Модель интерфейсов
classDiagram
class СписокЗаявокТехника {
<<Screen>>
+ЗаголовокСписка : Заголовок
+ОбластьФильтров : ОбластьФильтров
+СписокКарточекЗаявок : ОбластьСписка
+КнопкаОбновить : Кнопка
+ИндикаторЗагрузки : Спиннер
}
class ОбластьФильтров {
<<Area>>
+ФильтрПоСтатусу : DropDown
+ФильтрПоТипу : DropDown
+ФильтрПоПриоритету : DropDown
+ФильтрПоПериоду : DateRange
+КнопкаСброситьФильтры : Button
}
class КарточкаЗаявки {
<<Area>>
+НомерЗаявки : Текст
+ТипОборудования : ИконкаТипа
+СтатусЗаявки : СтатусИндикатор
+ПриоритетЗаявки : ПриоритетИндикатор
+ДатаСоздания : Время
+КраткоеОписание : Текст
+ИндикаторНовыхКомментариев : Значок
+ИконкаФотографий : Значок
}
class ДеталиЗаявки {
<<Screen>>
+ЗаголовокЗаявки : Заголовок
+ОсновнаяИнформация : ОбластьОсновнойИнформации
+ОписаниеПроблемы : TextArea[readonly]
+ФотографииПроблемы : ГалереяФото
+ИсторияОбработки : СписокКомментариев
+ПолеНовогоКомментария : TextArea[200]
+КнопкаДобавитьКомментарий : Button
+КнопкаЗакрытьЗаявку : Button
}
СписокЗаявокТехника *-- ОбластьФильтров
СписокЗаявокТехника *-- КарточкаЗаявки
Функциональные требования
RQ184. Требование к отображению списка заявок. Система должна отображать для каждой заявки:
- Уникальный номер заявки (например, "EQ-2024-001234")
- Тип оборудования (ТС/Зарядная станция) с соответствующей иконкой
- Текущий статус (Новая/В работе/Ожидает техника/Решена/Закрыта)
- Приоритет с цветовой индикацией
- Дату создания и краткое описание проблемы
- Индикатор непрочитанных комментариев от диспетчера
RQ185. Требование к фильтрации заявок. Система должна поддерживать фильтрацию по:
- Статусу заявки (все/активные/закрытые/ожидающие ответа)
- Типу оборудования (ТС/зарядная станция/все)
- Приоритету (все/критический/высокий/средний/низкий)
- Периоду создания (сегодня/неделя/месяц/произвольный период)
RQ186. Требование к детальному просмотру заявки. При просмотре заявки система должна отображать:
- Полную информацию о проблеме и оборудовании
- Все прикрепленные фотографии с возможностью увеличения
- Хронологию всех комментариев и изменений статуса
- Информацию о диспетчере, обрабатывающем заявку
- Ожидаемые сроки решения (если указаны диспетчером)
RQ187. Требование к уведомлениям о заявках. Система должна уведомлять техника:
- При изменении статуса заявки
- При добавлении комментария диспетчером
- При запросе дополнительной информации
- При решении/закрытии заявки
- За 1 час до истечения срока ответа на запрос диспетчера
UC029: Просмотр технических характеристик оборудования
Актор: Техник
Описание: Техник просматривает подробные технические характеристики назначенного ему оборудования, включая спецификации, инструкции по эксплуатации и контактную информацию техподдержки.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Открывает раздел 'Техническая информация']
A1 --> S1[Система: Определяет назначенное оборудование техника]
S1 --> S2[Система: Загружает характеристики ТС из ServiceVehicleModels]
S2 --> S3[Система: Загружает характеристики станции из ChargingStationModels]
S3 --> S4[Система: Отображает справочник оборудования<br/>ссылка: СправочникОборудования]
S4 --> D1{Техник выбирает раздел?}
D1 -->|ТС| A2[Техник: Выбирает 'Сервисное ТС']
D1 -->|Станция| A3[Техник: Выбирает 'Зарядная станция']
D1 -->|Инструкции| A4[Техник: Выбирает 'Инструкции по эксплуатации']
D1 -->|Контакты| A5[Техник: Выбирает 'Техподдержка']
A2 --> S5[Система: Отображает характеристики ТС<br/>ссылка: ХарактеристикиТС]
A3 --> S6[Система: Отображает характеристики станции<br/>ссылка: ХарактеристикиСтанции]
A4 --> S7[Система: Отображает инструкции по эксплуатации<br/>ссылка: ИнструкцииЭксплуатации]
A5 --> S8[Система: Отображает контакты техподдержки<br/>ссылка: КонтактыТехподдержки]
S5 --> D2{Техник выбирает действие?}
S6 --> D2
S7 --> D2
S8 --> D2
D2 -->|Назад| S4
D2 -->|Связаться| A6[Техник: Инициирует звонок/сообщение]
D2 -->|Загрузить| A7[Техник: Запрашивает загрузку документа]
A6 --> S9[Система: Открывает приложение связи]
A7 --> S10[Система: Загружает PDF-документ]
S9 --> End([Конец])
S10 --> End
Модель интерфейсов
classDiagram
class СправочникОборудования {
<<Screen>>
+ЗаголовокСправочника : Заголовок
+ВкладкиОборудования : TabControl
+ОбластьХарактеристик : ОбластьКонтента
+КнопкиДействий : ОбластьДействий
}
class ХарактеристикиТС {
<<Area>>
+МодельТС : TextField[readonly]
+ПроизводительТС : TextField[readonly]
+ГодВыпуска : NumberField[readonly]
+ЕмкостьБатареи : NumberField[readonly]
+ЗапасХода : NumberField[readonly]
+МаксимальнаяСкорость : NumberField[readonly]
+Грузоподъемность : NumberField[readonly]
+РазмерыТС : TextField[readonly]
+ТипЗарядкиТС : TextField[readonly]
}
class ХарактеристикиСтанции {
<<Area>>
+МодельСтанции : TextField[readonly]
+ПроизводительСтанции : TextField[readonly]
+МаксимальнаяМощность : NumberField[readonly]
+ЕмкостьБатареи : NumberField[readonly]
+ТипыКоннекторов : ListField[readonly]
+ВыходноеНапряжение : TextField[readonly]
+МаксимальныйТок : NumberField[readonly]
+ВремяЗарядкиСобственной : NumberField[readonly]
+РабочаяТемпература : TextField[readonly]
+ВесСтанции : NumberField[readonly]
}
class ИнструкцииЭксплуатации {
<<Area>>
+ИнструкцияПоТС : DocumentLink
+ИнструкцияПоСтанции : DocumentLink
+РуководствоПоБезопасности : DocumentLink
+АварийныеПроцедуры : DocumentLink
+ПроцедурыТО : DocumentLink
+ВидеоИнструкции : VideoLink
}
class КонтактыТехподдержки {
<<Area>>
+ГорячаяЛиния : PhoneLink
+EmailТехподдержки : EmailLink
+ЧатТехподдержки : ChatLink
+СервисныйЦентр : ContactInfo
+АварийнаяСлужба : PhoneLink
+РежимРаботы : TextField[readonly]
}
СправочникОборудования *-- ХарактеристикиТС
СправочникОборудования *-- ХарактеристикиСтанции
СправочникОборудования *-- ИнструкцииЭксплуатации
СправочникОборудования *-- КонтактыТехподдержки
Функциональные требования
RQ188. Требование к характеристикам сервисного ТС. Система должна отображать:
- Модель, производитель и год выпуска ТС
- Емкость основной батареи (кВт⋅ч) и запас хода (км)
- Максимальную скорость и грузоподъемность
- Габаритные размеры и снаряженную массу
- Тип зарядки ТС (AC/DC, мощность, тип разъема)
- Рабочий диапазон температур
RQ189. Требование к характеристикам зарядной станции. Система должна отображать:
- Модель, производитель и серийный номер станции
- Максимальную мощность зарядки (кВт)
- Емкость собственной батареи станции (кВт⋅ч)
- Поддерживаемые типы коннекторов (CCS, CHAdeMO, Type 2)
- Выходное напряжение (В) и максимальный ток (А)
- Время зарядки собственной батареи станции
- Рабочий диапазон температур и вес оборудования
RQ190. Требование к инструкциям по эксплуатации. Система должна предоставлять доступ к:
- Руководству по эксплуатации ТС в PDF формате
- Инструкции по использованию зарядной станции
- Руководству по технике безопасности
- Процедурам в аварийных ситуациях
- Инструкциям по базовому техническому обслуживанию
- Видеоинструкциям по ключевым операциям
RQ191. Требование к контактам техподдержки. Система должна предоставлять:
- Номер горячей линии техподдержки с возможностью прямого звонка
- Email техподдержки с автоматическим формированием письма
- Доступ к чату техподдержки (если доступен)
- Контакты ближайшего сервисного центра
- Номер аварийной службы для критических ситуаций
- Режим работы служб поддержки
Модель предметной области блока
Основные сущности блока
classDiagram
class ЗаявкиНаНеисправности {
+Id : String
+ТехникId : String
+ТипОборудования : ТипыОборудования
+ОборудованиеId : String
+НомерЗаявки : String
+ТипПроблемы : String
+ОписаниеПроблемы : String
+Приоритет : ПриоритетыЗаявок
+Статус : СтатусыЗаявок
+GPS_Координаты : Координаты
+ВлияниеНаРаботу : String
+ТехническиеПараметры : JSON
+ВремяСоздания : DateTime
+ВремяРешения : DateTime
+НазначенныйДиспетчер : String
+КомментарииТехника : String
+КомментарииДиспетчера : String
}
class ТипыОборудования {
<<enumeration>>
SERVICE_VEHICLE
CHARGING_STATION
}
class ПриоритетыЗаявок {
<<enumeration>>
LOW
MEDIUM
HIGH
CRITICAL
}
class СтатусыЗаявок {
<<enumeration>>
NEW
IN_PROGRESS
WAITING_TECHNICIAN
RESOLVED
CLOSED
}
class ПараметрыМониторинга {
+ОборудованиеId : String
+ТипОборудования : ТипыОборудования
+ВремяОбновления : DateTime
+СтатусПодключения : Boolean
+ТехническиеПараметры : JSON
+GPS_Координаты : Координаты
+Предупреждения : String[]
+Ошибки : String[]
}
class УведомленияОборудования {
+Id : String
+ЗаявкаId : String
+ТипУведомления : ТипыУведомлений
+ПолучательId : String
+ТипПолучателя : ТипыПолучателей
+ТекстУведомления : String
+Приоритет : ПриоритетыУведомлений
+ВремяОтправки : DateTime
+СтатусДоставки : СтатусыДоставки
}
class ТипыУведомлений {
<<enumeration>>
ISSUE_CREATED
STATUS_CHANGED
COMMENT_ADDED
CRITICAL_ALERT
ISSUE_RESOLVED
}
ЗаявкиНаНеисправности --> ТипыОборудования
ЗаявкиНаНеисправности --> ПриоритетыЗаявок
ЗаявкиНаНеисправности --> СтатусыЗаявок
ПараметрыМониторинга --> ТипыОборудования
УведомленияОборудования --> ЗаявкиНаНеисправности
УведомленияОборудования --> ТипыУведомлений
Интеграционные требования
Требования к интеграции с серверными системами
RQ192. Требование к получению данных мониторинга. Система должна:
- Получать данные состояния оборудования от серверной части через WebSocket
- Обновлять параметры ТС каждые 30 секунд при активном экране
- Обновлять параметры зарядной станции каждые 15 секунд при активной зарядке
- Кешировать последние полученные данные для работы в офлайн режиме
RQ193. Требование к синхронизации заявок. Система должна:
- Синхронизировать заявки с сервером при создании
- Получать обновления статуса заявок в реальном времени
- Загружать новые комментарии диспетчера автоматически
- Отправлять локально созданные заявки при восстановлении связи
Требования к интеграции с другими блоками
RQ194. Требование к интеграции с блоком выполнения заказов. Блок должен:
- Предоставлять данные о состоянии зарядной станции для UC016 (мониторинг зарядки)
- Получать информацию о текущем заказе для контекста заявок
- Блокировать создание заявок на оборудование при активной зарядке (кроме критических)
RQ195. Требование к интеграции с блоком уведомлений. Блок должен:
- Отправлять push-уведомления при критических проблемах оборудования
- Получать уведомления об изменениях статуса заявок
- Интегрироваться с системой SMS для экстренных уведомлений
Требования к производительности и надежности
RQ196. Требование к производительности мониторинга. Система должна:
- Отображать данные мониторинга не более чем за 2 секунды
- Обрабатывать обновления параметров без блокировки интерфейса
- Поддерживать одновременную работу мониторинга ТС и станции
- Минимизировать расход батареи мобильного устройства
RQ197. Требование к надежности работы. Система должна:
- Сохранять функциональность при потере связи с сервером до 30 минут
- Автоматически восстанавливать соединение при появлении связи
- Сохранять локально данные о заявках до успешной отправки
- Предоставлять альтернативные способы связи при сбоях системы
Блок «Навигация и геолокация» - Модуль Техника
Описание блока
Блок «Навигация и геолокация» обеспечивает автоматическое определение местоположения техника, построение маршрутов к клиентам и пошаговую навигацию с использованием Яндекс.Карт. Блок интегрируется с блоками «Выполнение заказов» и «Управление маршрутами» для автоматического переключения статусов на основе геособытий.
Ключевые возможности блока:
- Автоматическая передача GPS-координат для отслеживания перемещений техника
- Построение оптимальных маршрутов к адресам заказов через Яндекс.Карты API
- Пошаговая навигация с голосовыми подсказками и визуальными указателями
- Автоматическое определение прибытия в геозону заказа (радиус 100м)
- Интеграция с Яндекс.Навигатором для расширенных навигационных возможностей
- Визуализация местоположения на карте в реальном времени
UC030: Автоматическая передача GPS-координат в систему
Актор: Система (автоматический процесс)
Описание: Система автоматически получает GPS-координаты от мобильного устройства техника и передает их на сервер для отслеживания местоположения и определения геособытий.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало: Запуск приложения]) --> S1[Система: Запрашивает разрешение на геолокацию]
S1 --> D1{Разрешение получено?}
D1 -->|Нет| S2[Система: Отображает предупреждение о необходимости геолокации]
D1 -->|Да| S3[Система: Инициализирует GPS-модуль]
S3 --> S4[Система: Настраивает параметры отслеживания]
S4 --> L1[Цикл: Непрерывное отслеживание]
L1 --> S5[Система: Получает текущие GPS-координаты]
S5 --> D2{GPS-сигнал доступен?}
D2 -->|Нет| S6[Система: Использует последние известные координаты]
D2 -->|Да| S7[Система: Валидирует точность координат]
S6 --> S8[Система: Отмечает данные как неточные]
S7 --> D3{Точность приемлема?}
D3 -->|Нет| S8
D3 -->|Да| S9[Система: Сохраняет координаты локально]
S8 --> S10[Система: Передает данные на сервер с отметкой о точности]
S9 --> S10
S10 --> S11[Система: Проверяет активные геозоны]
S11 --> D4{Техник в активной геозоне?}
D4 -->|Да| S12[Система: Отмечает время нахождения в геозоне]
D4 -->|Нет| S13[Система: Сбрасывает счетчики геозон]
S12 --> D5{В геозоне > 30 сек?}
D5 -->|Да| S14[Система: Инициирует автоматическое изменение статуса]
D5 -->|Нет| S15[Система: Ожидает следующее измерение]
S13 --> S15
S14 --> S15
S15 --> D6{Приложение активно?}
D6 -->|Да| L1
D6 -->|Нет| End([Конец])
S2 --> End
Функциональные требования
RQ300. Требование к частоте отслеживания. Система должна получать GPS-координаты с интервалом:
- 5 секунд при активном маршруте (статус IN_PROGRESS)
- 30 секунд при ожидании заказов
- 60 секунд в режиме ожидания без активных задач
RQ301. Требование к точности геолокации. Система должна:
- Принимать координаты с точностью не менее 50 метров
- Игнорировать координаты с точностью хуже 200 метров
- Использовать последние достоверные координаты при плохом сигнале
- Уведомлять о проблемах с GPS при отсутствии сигнала более 2 минут
RQ302. Требование к передаче данных. Система должна:
- Передавать координаты на сервер в реальном времени при наличии интернета
- Сохранять координаты локально при отсутствии связи
- Синхронизировать накопленные данные при восстановлении связи
- Включать в передачу временную метку, точность и скорость движения
RQ303. Требование к энергопотреблению. Система должна:
- Использовать оптимальные настройки GPS для экономии батареи
- Автоматически снижать частоту опроса при низком заряде батареи
- Отключать GPS при завершении рабочей смены
- Предупреждать техника о высоком расходе батареи
RQ304. Требование к фоновой работе. Система должна:
- Продолжать отслеживание при свернутом приложении
- Отправлять push-уведомления о критических геособытиях
- Поддерживать работу GPS в фоновом режиме до 8 часов
- Автоматически возобновлять отслеживание при открытии приложения
UC031: Построение маршрута к адресу заказа
Актор: Техник
Описание: Техник запрашивает построение маршрута от текущего местоположения до адреса клиента с использованием Яндекс.Карт API.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Нажимает 'Построить маршрут' в карточке заказа]
A1 --> S1[Система: Проверяет доступность заказа]
S1 --> D1{Заказ доступен для навигации?}
D1 -->|Нет| S2[Система: Отображает сообщение о недоступности]
D1 -->|Да| S3[Система: Получает текущие GPS-координаты техника]
S3 --> D2{GPS-координаты доступны?}
D2 -->|Нет| S4[Система: Предлагает ввести начальную точку вручную]
D2 -->|Да| S5[Система: Отображает экран построения маршрута<br/>ссылка: ЭкранПостроенияМаршрута]
S4 --> S5
S5 --> S6[Система: Вызывает Яндекс.Карты API для построения маршрута]
S6 --> D3{Маршрут построен успешно?}
D3 -->|Нет| S7[Система: Отображает ошибку и предлагает альтернативы]
D3 -->|Да| S8[Система: Анализирует варианты маршрутов]
S8 --> S9[Система: Выбирает оптимальный маршрут по времени]
S9 --> S10[Система: Отображает маршрут на карте<br/>ссылка: КартаМаршрута]
S10 --> A2[Техник: Просматривает детали маршрута]
A2 --> D4{Выбор действия}
D4 -->|Начать навигацию| A3[Техник: Нажимает 'Начать навигацию']
D4 -->|Яндекс.Навигатор| A4[Техник: Нажимает 'Открыть в Яндекс.Навигаторе']
D4 -->|Отмена| A5[Техник: Нажимает 'Отмена']
A3 --> S11[Система: Переход к UC032 Пошаговая навигация]
A4 --> S12[Система: Открывает Яндекс.Навигатор с координатами]
A5 --> End([Конец])
S11 --> End
S12 --> End
S2 --> End
S7 --> End
Модель интерфейсов
classDiagram
class ЭкранПостроенияМаршрута {
<<Screen>>
+ЗаголовокЗаказа : Заголовок
+АдресНазначения : ТекстовоеПоле
+ТекущееМестоположение : КоординатыТекст
+ИндикаторЗагрузки : ПрогрессИндикатор
+КнопкаПостроить : Кнопка
+КнопкаОтмена : Кнопка
}
class КартаМаршрута {
<<Screen>>
+КартаЯндекс : КомпонентКарты
+ИнформацияМаршрута : ОбластьИнформации
+КнопкиДействий : ГруппаКнопок
+ИндикаторТекущегоПоложения : МаркерGPS
}
class ОбластьИнформации {
<<Area>>
+РасстояниеКм : ЧисловоеПоле
+ВремяВПути : ВременноеПоле
+ОжидаемоеВремяПрибытия : ВременноеПоле
+ТипДороги : ТекстовоеПоле
+ПробкиИнформация : СтатусИндикатор
}
КартаМаршрута *-- ОбластьИнформации
Функциональные требования
RQ305. Требование к интеграции с Яндекс.Карты API. Система должна:
- Использовать Яндекс.Карты API для построения маршрутов
- Передавать текущие координаты техника как начальную точку
- Использовать координаты заказа (Orders.latitude, Orders.longitude) как конечную точку
- Учитывать текущую дорожную ситуацию и пробки
RQ306. Требование к выбору оптимального маршрута. Система должна:
- Запрашивать несколько вариантов маршрута (до 3)
- Выбирать маршрут с минимальным временем в пути
- Отдавать предпочтение автомобильным дорогам
- Избегать платных дорог при настройке в профиле техника
RQ307. Требование к отображению информации о маршруте. Система должна показывать:
- Общее расстояние в километрах
- Примерное время в пути с учетом пробок
- Ожидаемое время прибытия
- Актуальную информацию о дорожной ситуации
- Альтернативные маршруты при их наличии
RQ308. Требование к интеграции с Яндекс.Навигатором. Система должна:
- Проверять наличие Яндекс.Навигатора на устройстве
- Открывать Яндекс.Навигатор с предустановленными координатами
- Передавать адрес назначения в понятном формате
- При отсутствии приложения предлагать его скачивание
RQ309. Требование к обработке ошибок. При невозможности построения маршрута система должна:
- Отображать понятное сообщение об ошибке
- Предлагать проверить интернет-соединение
- Позволить повторную попытку построения
- Предоставить возможность ввода адреса вручную
UC032: Пошаговая навигация к клиенту
Актор: Техник
Описание: Система обеспечивает пошаговую навигацию к клиенту с голосовыми подсказками и визуальными указателями на основе построенного маршрута.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало: Запуск навигации]) --> S1[Система: Инициализирует навигационный режим]
S1 --> S2[Система: Включает экран постоянного отображения]
S2 --> S3[Система: Активирует голосовые подсказки]
S3 --> S4[Система: Отображает навигационный интерфейс<br/>ссылка: ЭкранНавигации]
S4 --> L1[Цикл: Активная навигация]
L1 --> S5[Система: Получает текущие GPS-координаты]
S5 --> S6[Система: Рассчитывает отклонение от маршрута]
S6 --> D1{Техник на маршруте?}
D1 -->|Нет| S7[Система: Предлагает перестроение маршрута]
D1 -->|Да| S8[Система: Определяет следующий маневр]
S8 --> S9[Система: Рассчитывает расстояние до поворота]
S9 --> D2{До маневра < 200м?}
D2 -->|Да| S10[Система: Воспроизводит голосовую подсказку]
D2 -->|Нет| S11[Система: Обновляет информацию на экране]
S10 --> S11
S11 --> S12[Система: Проверяет близость к цели]
S12 --> D3{До цели < 100м?}
D3 -->|Да| S13[Система: Объявляет приближение к цели]
D3 -->|Нет| D4{В геозоне заказа?}
D4 -->|Да| S14[Система: Автоматически завершает навигацию]
D4 -->|Нет| D5{Навигация активна?}
D5 -->|Да| L1
D5 -->|Нет| End([Конец])
S13 --> S14
S14 --> S15[Система: Переход к UC033 Автоматическое определение прибытия]
S15 --> End
S7 --> A1[Техник: Выбирает перестроить или продолжить]
A1 --> D6{Решение техника}
D6 -->|Перестроить| S16[Система: Переход к UC031 Построение маршрута]
D6 -->|Продолжить| L1
S16 --> End
Модель интерфейсов
classDiagram
class ЭкранНавигации {
<<Screen>>
+КартаНавигации : КомпонентКарты
+ПанельИнструкций : ОбластьИнструкций
+ИнформационнаяПанель : ОбластьИнформации
+КнопкиУправления : ГруппаКнопок
+ИндикаторGPS : СтатусИндикатор
}
class ОбластьИнструкций {
<<Area>>
+ИконкаМаневра : Изображение
+ТекстИнструкции : Текст
+РасстояниеДоМаневра : Расстояние
+НазваниеУлицы : Текст
}
class ОбластьИнформации {
<<Area>>
+ОставшеесяВремя : ВременноеПоле
+ОставшеесяРасстояние : РасстояниеПоле
+ВремяПрибытия : ВременноеПоле
+ТекущаяСкорость : СкоростьПоле
}
class ГруппаКнопок {
<<Area>>
+КнопкаЗавершить : Кнопка
+КнопкаПерестроить : Кнопка
+КнопкаЗвук : КнопкаВклОткл
+КнопкаЦентрировать : Кнопка
}
ЭкранНавигации *-- ОбластьИнструкций
ЭкранНавигации *-- ОбластьИнформации
ЭкранНавигации *-- ГруппаКнопок
Функциональные требования
RQ310. Требование к голосовым подсказкам. Система должна:
- Воспроизводить голосовые инструкции за 200 метров до поворота
- Повторять инструкцию за 50 метров до маневра
- Использовать четкие и понятные формулировки
- Позволять отключение/включение голоса техником
RQ311. Требование к визуальным указателям. Система должна отображать:
- Стрелки направления движения
- Иконки типов маневров (поворот, разворот, прямо)
- Названия улиц и номера домов
- Полосы движения при их наличии в данных карты
RQ312. Требование к отслеживанию маршрута. Система должна:
- Проверять соответствие текущего положения маршруту каждые 5 секунд
- Считать техника сбившимся с маршрута при отклонении более 100 метров
- Автоматически предлагать перестроение маршрута при отклонении
- Учитывать направление движения при определении отклонения
RQ313. Требование к обновлению информации. В реальном времени система должна показывать:
- Оставшееся время до прибытия
- Оставшееся расстояние в км
- Текущую скорость движения
- Ожидаемое время прибытия
RQ314. Требование к завершению навигации. Система должна:
- Автоматически завершать навигацию при входе в геозону заказа
- Позволять ручное завершение навигации техником
- Сохранять маршрут движения для аналитики
- Передавать данные о фактическом времени в пути
UC033: Автоматическое определение прибытия в геозону заказа
Актор: Система (автоматический процесс)
Описание: Система автоматически определяет момент прибытия техника в геозону заказа (радиус 100 метров от адреса) и переводит заказ в статус ARRIVED.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало: GPS-данные от техника]) --> S1[Система: Получает GPS-координаты техника]
S1 --> S2[Система: Получает список активных заказов техника]
S2 --> D1{Есть заказы со статусом EN_ROUTE?}
D1 -->|Нет| End([Конец])
D1 -->|Да| L1[Цикл: По каждому заказу EN_ROUTE]
L1 --> S3[Система: Рассчитывает расстояние до адреса заказа]
S3 --> D2{Расстояние ≤ 100 метров?}
D2 -->|Нет| S4[Система: Обновляет ETA для клиента]
D2 -->|Да| S5[Система: Проверяет время нахождения в геозоне]
S5 --> D3{В геозоне непрерывно > 30 секунд?}
D3 -->|Нет| S6[Система: Увеличивает счетчик времени в геозоне]
D3 -->|Да| S7[Система: Проверяет точность GPS]
S7 --> D4{Точность GPS приемлема?}
D4 -->|Нет| S8[Система: Ожидает более точные данные]
D4 -->|Да| S9[Система: Изменяет Orders.status на ARRIVED]
S9 --> S10[Система: Создает запись в OrderStatusHistories]
S10 --> S11[Система: Сохраняет GPS-координаты прибытия]
S11 --> S12[Система: Останавливает отслеживание маршрута]
S12 --> S13[Система: Отправляет push-уведомление технику]
S13 --> S14[Система: Отправляет уведомление клиенту]
S14 --> S15[Система: Уведомляет диспетчера об автоматическом изменении]
S15 --> S16[Система: Активирует возможность начала зарядки]
S16 --> End
S4 --> D5{Есть еще заказы?}
S6 --> D5
S8 --> D5
D5 -->|Да| L1
D5 -->|Нет| End
Функциональные требования
RQ315. Требование к определению геозоны. Система должна считать техника прибывшим, если:
- Расстояние от GPS-координат техника до координат заказа (Orders.latitude, Orders.longitude) ≤ 100 метров
- Техник находится в данной геозоне непрерывно более 30 секунд
- Заказ имеет статус EN_ROUTE
- Точность GPS составляет не более 50 метров
RQ316. Требование к расчету расстояния. Система должна:
- Использовать формулу гаверсинуса для расчета расстояния по координатам
- Учитывать погрешность GPS (буферная зона 100±20 метров)
- Игнорировать кратковременные "скачки" GPS-сигнала
- Требовать минимум 3 последовательных измерения в геозоне
RQ317. Требование к автоматическому изменению статуса. При определении прибытия система должна выполнить атомарную транзакцию:
- Изменить Orders.status на ARRIVED
- Создать запись в OrderStatusHistories с указанием previousStatus = EN_ROUTE, newStatus = ARRIVED
- Установить OrderStatusHistories.idUser = ID техника заказа
- Указать OrderStatusHistories.reason = "Автоматическое определение прибытия по GPS"
- Сохранить точные GPS-координаты момента прибытия
RQ318. Требование к уведомлениям при автоматическом прибытии. Система должна:
- Отправить push-уведомление технику: "Вы прибыли к клиенту. Можете начинать зарядку."
- Отправить уведомление клиенту: "Техник прибыл. Ожидайте начала зарядки."
- Уведомить диспетчера об автоматическом изменении статуса с указанием времени и координат
- Записать событие в системный журнал для аудита
RQ319. Требование к обработке ошибок GPS. При проблемах с GPS система должна:
- Логировать ошибки определения местоположения
- Не изменять статус при неточных или отсутствующих GPS-данных
- Предоставить технику возможность ручного подтверждения прибытия
- Уведомить техника о проблемах с GPS и необходимости ручного подтверждения
RQ320. Требование к контролю дублирования. Система должна:
- Предотвращать повторное срабатывание для одного заказа
- Игнорировать заказы, уже имеющие статус ARRIVED или выше
- Обрабатывать только один заказ за раз при нахождении в нескольких геозонах
- Приоритизировать заказ с ближайшим плановым временем
UC034: Отображение текущего местоположения на карте
Актор: Техник
Описание: Техник просматривает свое текущее местоположение на карте с отображением ближайших заказов, пройденного пути и геозон активных заказов.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Открывает раздел 'Карта']
A1 --> S1[Система: Инициализирует компонент Яндекс.Карты]
S1 --> S2[Система: Получает текущие GPS-координаты]
S2 --> D1{GPS-координаты доступны?}
D1 -->|Нет| S3[Система: Показывает последнее известное местоположение]
D1 -->|Да| S4[Система: Центрирует карту на текущем местоположении]
S3 --> S5[Система: Отображает предупреждение о недоступности GPS]
S4 --> S6[Система: Отображает экран карты<br/>ссылка: ЭкранКарты]
S5 --> S6
S6 --> S7[Система: Загружает активные заказы техника]
S7 --> S8[Система: Отмечает адреса заказов маркерами]
S8 --> S9[Система: Отображает геозоны активных заказов]
S9 --> S10[Система: Показывает пройденный путь за смену]
S10 --> L1[Цикл: Обновление в реальном времени]
L1 --> S11[Система: Обновляет текущее местоположение]
S11 --> S12[Система: Обновляет маркеры и геозоны]
S12 --> A2[Техник: Взаимодействует с картой]
A2 --> D2{Тип взаимодействия}
D2 -->|Нажатие на заказ| A3[Техник: Выбирает маркер заказа]
D2 -->|Управление картой| A4[Техник: Масштабирует/перемещает карту]
D2 -->|Центрирование| A5[Техник: Нажимает кнопку центрирования]
A3 --> S13[Система: Отображает детали заказа]
A4 --> S14[Система: Обновляет отображение карты]
A5 --> S15[Система: Центрирует карту на текущем местоположении]
S13 --> D3{Доступна навигация?}
D3 -->|Да| S16[Система: Предлагает построить маршрут]
D3 -->|Нет| L1
S14 --> L1
S15 --> L1
S16 --> D4{Техник выбирает действие}
D4 -->|Навигация| S17[Система: Переход к UC031 Построение маршрута]
D4 -->|Закрыть| L1
S17 --> End([Конец])
Модель интерфейсов
classDiagram
class ЭкранКарты {
<<Screen>>
+ЯндексКарта : КомпонентКарты
+ПанельИнформации : ОбластьИнформации
+КнопкиУправления : ГруппаКнопок
+ЛегендаКарты : ОбластьЛегенды
+ИндикаторGPS : СтатусИндикатор
}
class КомпонентКарты {
<<Area>>
+МаркерТекущегоПоложения : МаркерGPS
+МаркерыЗаказов : СписокМаркеров
+ГеозоныЗаказов : СписокКругов
+ТрекПути : ЛинияПути
+УправлениеМасштабом : КнопкиЗума
}
class ОбластьИнформации {
<<Area>>
+ТекущийАдрес : ТекстовоеПоле
+КоличествоЗаказов : ЧисловоеПоле
+СтатусGPS : СтатусИндикатор
+ВремяОбновления : ВременноеПоле
}
class ГруппаКнопок {
<<Area>>
+КнопкаЦентрировать : Кнопка
+КнопкаСлои : Кнопка
+КнопкаОбновить : Кнопка
+КнопкаНастройки : Кнопка
}
class ОбластьЛегенды {
<<Area>>
+ОписаниеМаркеров : СписокЭлементов
+ОписаниеГеозон : ТекстЛегенды
+ЦветоваяСхема : ВизуальнаяСхема
}
ЭкранКарты *-- КомпонентКарты
ЭкранКарты *-- ОбластьИнформации
ЭкранКарты *-- ГруппаКнопок
ЭкранКарты *-- ОбластьЛегенды
Функциональные требования
RQ321. Требование к инициализации карты. Система должна:
- Использовать Яндекс.Карты API для отображения карты
- Центрировать карту на текущем местоположении техника
- Устанавливать масштаб карты для охвата рабочей области (зум 13-15)
- Отображать спутниковый или гибридный слой по выбору техника
RQ322. Требование к отображению маркеров. Система должна показывать:
- Текущее местоположение техника синим маркером с индикацией направления
- Заказы со статусом ASSIGNED - зеленые маркеры
- Заказы со статусом EN_ROUTE - желтые маркеры
- Заказы со статусом ARRIVED - красные маркеры
- Базу начала/окончания смены - специальный маркер дома
RQ323. Требование к отображению геозон. Система должна:
- Отображать круглые геозоны радиусом 100 метров для активных заказов
- Использовать полупрозрачную заливку для геозон
- Выделять цветом геозону при нахождении техника внутри
- Скрывать геозоны завершенных заказов
RQ324. Требование к треку движения. Система должна:
- Отображать пройденный путь техника линией на карте
- Использовать разные цвета для разных временных периодов
- Ограничивать отображение пути последними 4 часами
- Позволять включение/отключение отображения трека
RQ325. Требование к обновлению данных. Система должна:
- Обновлять положение техника каждые 5 секунд
- Обновлять информацию о заказах каждые 30 секунд
- Плавно анимировать перемещение маркера техника
- Кэшировать данные карты для экономии трафика
RQ326. Требование к взаимодействию с заказами. При нажатии на маркер заказа система должна:
- Отображать краткую информацию о заказе (адрес, время, клиент)
- Показывать расстояние от текущего местоположения
- Предлагать построение маршрута для активных заказов
- Позволять переход к детальной информации заказа
Общие требования к блоку «Навигация и геолокация»
Требования к интеграции с другими блоками
RQ327. Требование к связи с блоком выполнения заказов. Система должна интегрироваться с блоком "Выполнение заказов" для:
- Автоматического изменения статусов заказов на основе геособытий
- Получения списка активных заказов для отображения на карте
- Передачи данных о фактическом времени в пути
- Уведомления о прибытии техника к клиенту
RQ328. Требование к связи с блоком управления маршрутами. Система должна интегрироваться с блоком "Управление маршрутами" для:
- Получения последовательности заказов в маршруте
- Построения оптимального пути между точками маршрута
- Отслеживания прогресса выполнения маршрута
- Расчета отклонений от планового времени
RQ329. Требование к связи с блоком рабочих смен. Система должна интегрироваться с блоком "Управление рабочими сменами" для:
- Определения рабочего времени для отслеживания GPS
- Получения координат базы начала и окончания смены
- Контроля соблюдения географических границ работы
- Автоматического завершения отслеживания при окончании смены
Требования к производительности
RQ330. Требование к времени отклика. Система должна обеспечивать:
- Инициализацию карты не более чем за 3 секунды
- Построение маршрута не более чем за 5 секунд
- Обновление GPS-координат не более чем за 2 секунды
- Отклик на взаимодействие с картой не более чем за 1 секунду
RQ331. Требование к использованию ресурсов. Система должна:
- Оптимизировать частоту GPS-запросов для экономии батареи
- Кэшировать тайлы карты для снижения трафика
- Использовать не более 50 МБ оперативной памяти для карты
- Автоматически снижать качество при слабом интернет-соединении
RQ332. Требование к надежности GPS. Система должна:
- Продолжать работу при временной потере GPS-сигнала
- Использовать данные сотовых вышек при недоступности GPS
- Предупреждать о проблемах с геолокацией
- Сохранять последние известные координаты локально
Требования к безопасности и доступу
RQ333. Требование к разрешениям. Система должна:
- Запрашивать разрешение на точную геолокацию
- Запрашивать разрешение на фоновое использование GPS
- Объяснять техникам необходимость предоставления разрешений
- Корректно обрабатывать отказ в предоставлении разрешений
RQ334. Требование к конфиденциальности. Система должна:
- Передавать GPS-данные только на авторизованные серверы
- Шифровать координаты при передаче по сети
- Удалять старые GPS-данные согласно политике хранения
- Предоставлять техникам контроль над своими геоданными
RQ335. Требование к аудиту геолокации. Система должна логировать:
- Все изменения статусов на основе геособытий
- Временные метки входа/выхода из геозон
- Ошибки определения местоположения
- Действия техников в навигационном интерфейсе
Требования к интеграции с внешними сервисами
RQ336. Требование к работе с Яндекс.Карты API. Система должна:
- Использовать актуальную версию Яндекс.Карты API
- Корректно обрабатывать ограничения API (лимиты запросов)
- Кэшировать результаты запросов для оптимизации
- Иметь план резервного картографического сервиса
RQ337. Требование к интеграции с Яндекс.Навигатором. Система должна:
- Проверять наличие приложения Яндекс.Навигатор
- Формировать корректные deep links для запуска навигации
- Обрабатывать случаи отсутствия или устаревшей версии приложения
- Предлагать альтернативную навигацию при недоступности
Требования к работе в неблагоприятных условиях
RQ338. Требование к работе при слабом сигнале. При проблемах с GPS система должна:
- Переключаться на менее точные, но доступные методы позиционирования
- Увеличивать интервал между запросами координат
- Информировать техника о снижении точности
- Сохранять функциональность навигации при возможности
RQ339. Требование к работе при слабом интернете. При проблемах с сетью система должна:
- Использовать кэшированные данные карт
- Снижать качество и детализацию карты
- Сохранять GPS-данные локально для последующей синхронизации
- Предоставлять базовую навигацию без подключения к интернету
RQ340. Требование к энергоэффективности. Система должна:
- Адаптивно изменять частоту GPS-запросов в зависимости от движения
- Использовать энергосберегающие режимы при низком заряде батареи
- Автоматически отключать ненужные функции при критическом заряде
- Предупреждать техника о высоком расходе энергии
Диаграмма состояний навигационной системы
stateDiagram-v2
[*] --> Инициализация
Инициализация --> ОжиданиеРазрешений : Запрос разрешений GPS
ОжиданиеРазрешений --> НеактивнаяГеолокация : Разрешения отклонены
ОжиданиеРазрешений --> АктивнаяГеолокация : Разрешения получены
АктивнаяГеолокация --> Отслеживание : GPS сигнал доступен
АктивнаяГеолокация --> РежимЭкономии : Низкий заряд батареи
Отслеживание --> Навигация : Запуск навигации к заказу
Отслеживание --> Мониторинг : Обычное отслеживание
Навигация --> ВГеозоне : Вход в геозону заказа
ВГеозоне --> АвтоПрибытие : > 30 секунд в геозоне
АвтоПрибытие --> Отслеживание : Статус изменен на ARRIVED
Мониторинг --> Отслеживание : Получение GPS данных
РежимЭкономии --> Отслеживание : Восстановление заряда
НеактивнаяГеолокация --> [*] : Завершение работы
Отслеживание --> [*] : Завершение смены
note right of ВГеозоне : Радиус 100м от адреса заказа
note right of АвтоПрибытие : Автоматическое изменение статуса
note left of РежимЭкономии : Снижение частоты GPS до 60 сек
Блок «Отчетность и история» - Модуль Техника
Блок включает 4 функции (UC035-UC038) для обеспечения техников инструментами анализа работы и планирования деятельности.
UC035: Просмотр статистики выполненных заказов
Актор: Техник
Описание: Техник просматривает статистические данные о выполненных заказах с возможностью фильтрации по периодам и детализации по различным метрикам.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Открывает раздел 'Статистика заказов']
A1 --> S1[Система: Загружает заказы техника из Orders]
S1 --> S2[Система: Применяет фильтр по умолчанию (текущий месяц)]
S2 --> S3[Система: Рассчитывает основные метрики]
S3 --> S4[Система: Отображает статистику заказов<br/>ссылка: СтатистикаЗаказовТехника]
S4 --> D1{Техник выбирает действие}
D1 -->|Изменить период| A2[Техник: Выбирает период фильтрации]
D1 -->|Детализация| A3[Техник: Нажимает на метрику для детализации]
D1 -->|Обновить данные| A4[Техник: Нажимает 'Обновить']
A2 --> S5[Система: Применяет новый фильтр]
A3 --> S6[Система: Отображает детальную статистику по метрике]
A4 --> S1
S5 --> S3
S6 --> D2{Вернуться к общей статистике?}
D2 -->|Да| S4
D2 -->|Нет| End([Конец])
S4 --> End
Модель интерфейсов
classDiagram
class СтатистикаЗаказовТехника {
<<Screen>>
+ОбластьФильтровПериода : ФильтрПериода
+ОбластьОсновныхМетрик : ОсновныеМетрики
+ОбластьГрафиков : ОбластьГрафиков
+ОбластьДетализации : ДетализацияМетрик
+КнопкаОбновить : Button
}
class ФильтрПериода {
<<Area>>
+БыстрыеФильтры : SegmentedControl
+ПроизвольныйПериод : DateRange
+ФильтрПоСтатусу : CheckBoxGroup
+ФильтрПоТипуЗаказа : CheckBoxGroup
}
class ОсновныеМетрики {
<<Area>>
+ВсегоЗаказов : КарточкаМетрики
+УспешныхЗаказов : КарточкаМетрики
+НеуспешныхЗаказов : КарточкаМетрики
+СреднееВремяВыполнения : КарточкаМетрики
+ОбщаяСтоимость : КарточкаМетрики
+ОбщаяЭнергия : КарточкаМетрики
}
class ОбластьГрафиков {
<<Area>>
+ГрафикЗаказовПоДням : LineChart
+ГрафикЭнергииПоДням : BarChart
+РаспределениеПоТипам : PieChart
}
СтатистикаЗаказовТехника *-- ФильтрПериода
СтатистикаЗаказовТехника *-- ОсновныеМетрики
СтатистикаЗаказовТехника *-- ОбластьГрафиков
Функциональные требования
RQ347. Требование к загрузке данных статистики. Система должна загружать заказы техника из Orders со статусами COMPLETED и FAILED, связанные с техником через RoutePoints и Routes.
RQ348. Требование к периодам фильтрации. Система должна предоставлять следующие быстрые фильтры:
- Последние 7 дней
- Текущий месяц
- Последние 3 месяца
- Текущий год
- Произвольный период (с ограничением не более 3 лет истории)
RQ349. Требование к расчету основных метрик. Система должна рассчитывать и отображать:
- Всего заказов: общее количество назначенных заказов
- Успешных заказов: количество заказов со статусом COMPLETED
- Неуспешных заказов: количество заказов со статусом FAILED
- Процент успешности: (успешные/всего) * 100%
- Среднее время выполнения: среднее время от ARRIVED до COMPLETED
- Общая стоимость услуг: сумма totalPrice для COMPLETED заказов
- Общее потребление энергии: сумма totalKwh для всех заказов
RQ350. Требование к детализации метрик. При нажатии на метрику система должна отображать:
- Детальную разбивку по дням/неделям
- Сравнение с предыдущим периодом
- Тренд изменения (рост/снижение в %)
- Дополнительные подметрики (мин/макс значения, медиана)
RQ351. Требование к графической визуализации. Система должна отображать графики:
- График заказов по дням: количество выполненных заказов по дням периода
- График энергии по дням: объем переданной энергии по дням
- Распределение по типам заказов: плановые vs экстренные (в %)
- Распределение по времени выполнения: группировка заказов по длительности
RQ352. Требование к обновлению данных. Статистика должна обновляться:
- Автоматически при открытии экрана
- По нажатию кнопки "Обновить"
- При изменении периода фильтрации
- Данные должны кэшироваться на 5 минут для оптимизации
UC036: Просмотр статистики рабочего времени
Актор: Техник
Описание: Техник просматривает статистику своего рабочего времени, включая анализ смен, отработанных часов и эффективности использования времени.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Открывает раздел 'Статистика рабочего времени']
A1 --> S1[Система: Загружает смены техника из WorkShifts]
S1 --> S2[Система: Загружает операции техника из TechnicianOperations]
S2 --> S3[Система: Применяет фильтр по умолчанию (текущий месяц)]
S3 --> S4[Система: Рассчитывает временные метрики]
S4 --> S5[Система: Отображает статистику времени<br/>ссылка: СтатистикаВремениТехника]
S5 --> D1{Техник выбирает действие}
D1 -->|Изменить период| A2[Техник: Выбирает период анализа]
D1 -->|Просмотр смены| A3[Техник: Нажимает на конкретную смену]
A2 --> S6[Система: Пересчитывает статистику для нового периода]
A3 --> S7[Система: Отображает детали выбранной смены]
S6 --> S5
S7 --> End([Конец])
Модель интерфейсов
classDiagram
class СтатистикаВремениТехника {
<<Screen>>
+ОбластьВременныхМетрик : ВременныеМетрики
+КалендарьСмен : КалендарнаяСетка
+ОбластьАнализаЭффективности : АнализЭффективности
+ГрафикРабочегоВремени : TemporalChart
+СписокСменПериода : ТаблицаСмен
}
class ВременныеМетрики {
<<Area>>
+ОбщееВремяСмен : КарточкаВремени
+ФактическоеВремяРаботы : КарточкаВремени
+ВремяВыполненияЗаказов : КарточкаВремени
+ВремяПеремещений : КарточкаВремени
+ВремяПростоя : КарточкаВремени
+СреднееВремяСмены : КарточкаВремени
}
class АнализЭффективности {
<<Area>>
+ПроцентВыполненияПлана : ProgressBar
+КоэффициентЗагрузки : Gauge
+СреднееКоличествоЗаказовВСмену : NumberDisplay
+ОтклонениеОтПлановогоВремени : DeltaDisplay
}
СтатистикаВремениТехника *-- ВременныеМетрики
СтатистикаВремениТехника *-- АнализЭффективности
Функциональные требования
RQ353. Требование к загрузке данных смен. Система должна загружать все смены техника из WorkShifts со статусами COMPLETED и CANCELLED за выбранный период.
RQ354. Требование к расчету временных метрик. Система должна рассчитывать:
- Общее время смен: сумма планового времени всех смен (plannedEndTime - plannedStartTime)
- Фактическое время работы: сумма фактического времени (actualEndTime - actualStartTime)
- Время выполнения заказов: время от первого ARRIVED до последнего COMPLETED по всем заказам
- Время перемещений: время между завершением одного заказа и прибытием к следующему
- Время простоя: разность между фактическим временем и временем выполнения заказов
- Среднее время смены: общее время / количество смен
RQ355. Требование к анализу эффективности. Система должна рассчитывать:
- Процент выполнения плана: (фактическое время / плановое время) * 100%
- Коэффициент загрузки: (время выполнения заказов / фактическое время) * 100%
- Среднее количество заказов в смену: общее количество заказов / количество смен
- Отклонение от планового времени: среднее отклонение начала/окончания смен
RQ356. Требование к календарной визуализации. Календарь смен должен отображать:
- Все смены за выбранный период с цветовой индикацией статуса
- Плановое и фактическое время для каждой смены
- Количество выполненных заказов в смене
- Индикатор эффективности смены (высокая/средняя/низкая)
RQ357. Требование к детализации смены. При просмотре конкретной смены система должна показать:
- Полную временную шкалу смены с событиями
- Список всех выполненных заказов с временными метками
- Маршруты и время перемещений между заказами
- Время простоев и их причины (если указаны)
UC037: Формирование отчета о рабочей смене
Актор: Техник
Описание: Техник формирует детальный отчет о проведенной рабочей смене для анализа эффективности и планирования дальнейшей работы.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Выбирает смену для отчета]
A1 --> S1[Система: Проверяет наличие завершенной смены]
S1 --> D1{Смена найдена?}
D1 -->|Нет| S2[Система: Отображает сообщение об отсутствии данных]
D1 -->|Да| S3[Система: Загружает данные смены из WorkShifts]
S3 --> S4[Система: Загружает выполненные заказы смены]
S4 --> S5[Система: Загружает операции техника за смену]
S5 --> S6[Система: Рассчитывает метрики смены]
S6 --> S7[Система: Формирует структуру отчета]
S7 --> S8[Система: Отображает отчет о рабочей смене<br/>ссылка: ОтчетРабочейСмены]
S8 --> D2{Техник выбирает действие}
D2 -->|Сохранить отчет| A2[Техник: Нажимает 'Сохранить в PDF']
D2 -->|Отправить отчет| A3[Техник: Нажимает 'Отправить диспетчеру']
D2 -->|Другая смена| A4[Техник: Выбирает другую смену]
A2 --> S9[Система: Генерирует PDF-отчет]
A3 --> S10[Система: Отправляет отчет диспетчеру через внутреннюю систему]
A4 --> A1
S9 --> End([Конец])
S10 --> End
S2 --> End
Модель интерфейсов
classDiagram
class ОтчетРабочейСмены {
<<Screen>>
+ВыборСмены : ShiftPicker
+ЗаголовокОтчета : ОбластьЗаголовка
+РезюмеСмены : РезюмеСмены
+ДетализацияЗаказов : СписокЗаказовСмены
+ВременнаяШкала : ВременнаяЛиния
+СтатистикаСмены : СтатистическиеПоказатели
+КнопкиДействий : ОбластьДействий
}
class ОбластьЗаголовка {
<<Area>>
+ДатаСмены : Label
+ФИОТехника : Label
+СтатусСмены : StatusBadge
+ОбщаяДлительностьСмены : Label
}
class РезюмеСмены {
<<Area>>
+ВремяНачалаСмены : TimeField[readonly]
+ВремяОкончанияСмены : TimeField[readonly]
+БазаНачала : TextField[readonly]
+БазаОкончания : TextField[readonly]
+ПлановаяДлительность : TextField[readonly]
+ФактическаяДлительность : TextField[readonly]
}
class СтатистическиеПоказатели {
<<Area>>
+КоличествоЗаказов : NumberDisplay
+УспешноВыполненных : NumberDisplay
+ОбщаяСтоимостьУслуг : MoneyDisplay
+ПереданнаяЭнергия : EnergyDisplay
+СреднееВремяЗаказа : TimeDisplay
+КилометражПробега : DistanceDisplay
}
ОтчетРабочейСмены *-- ОбластьЗаголовка
ОтчетРабочейСмены *-- РезюмеСмены
ОтчетРабочейСмены *-- СтатистическиеПоказатели
Функциональные требования
RQ358. Требование к выбору смены для отчета. Система должна:
- Предоставлять список завершенных смен с ограничением на последние 3 года
- Выделять смены с выполненными заказами
- По умолчанию выбирать последнюю завершенную смену
RQ359. Требование к структуре отчета. Отчет должен содержать следующие разделы:
- Заголовок: дата смены, ФИО техника, общая информация о смене
- Резюме смены: плановые и фактические времена, базы начала/окончания
- Статистика смены: ключевые числовые показатели
- Детализация заказов: хронологический список всех заказов смены
- Временная шкала: визуальное представление событий смены
- Проблемы и замечания: зафиксированные проблемы с оборудованием или заказами
RQ360. Требование к расчету метрик смены. Система должна рассчитать:
- Общее количество назначенных заказов в смене
- Количество успешно выполненных заказов (COMPLETED)
- Общую стоимость оказанных услуг за смену
- Общее количество переданной энергии (кВт⋅ч) за смену
- Среднее время выполнения одного заказа
- Общий километраж (по GPS-трекам между заказами)
- Время простоев и их причины
RQ361. Требование к детализации заказов в отчете. Для каждого заказа должно указываться:
- Номер заказа и тип (плановый/экстренный)
- Время прибытия и завершения
- Адрес выполнения и данные клиента
- Параметры зарядки (начальный/конечный уровень, потребленная энергия)
- Стоимость услуги
- Статус выполнения и возможные проблемы
RQ362. Требование к временной шкале. Временная шкала должна отображать:
- Начало и окончание рабочей смены
- Время выезда к каждому клиенту (EN_ROUTE)
- Время прибытия к клиенту (ARRIVED)
- Время начала и завершения зарядки (CHARGING → COMPLETED)
- Время перемещений между заказами
- Время простоев
RQ363. Требование к экспорту отчета. Система должна предоставлять возможность:
- Сохранения отчета в формате PDF для локального хранения
- Отправки отчета диспетчеру через внутреннюю систему
- Формирования отчета за произвольную смену (в пределах 3 лет истории)
- Включения фотографий выполненных заказов в PDF-отчет
UC038: Просмотр рейтинга и оценок от клиентов
Актор: Техник
Описание: Техник просматривает свой рейтинг и статистику оценок клиентов, а также получает обезличенную сводку отзывов для анализа качества работы и выявления областей для улучшения.
Activity-диаграмма (Диаграмма деятельности)
graph TD
Start([Начало]) --> A1[Техник: Открывает раздел 'Рейтинг и оценки']
A1 --> S1[Система: Загружает отзывы о технике из Reviews]
S1 --> S2[Система: Рассчитывает общий рейтинг техника]
S2 --> S3[Система: Группирует оценки по периодам]
S3 --> S4[Система: Генерирует обезличенную сводку комментариев]
S4 --> S5[Система: Отображает рейтинг и статистику<br/>ссылка: РейтингИОценкиТехника]
S5 --> D1{Техник выбирает действие}
D1 -->|Фильтр по периоду| A2[Техник: Выбирает период для анализа]
D1 -->|Просмотр детальной оценки| A3[Техник: Нажимает на конкретную оценку]
D1 -->|Анализ динамики| A4[Техник: Переходит к графику изменения рейтинга]
D1 -->|Просмотр сводки отзывов| A5[Техник: Нажимает 'Что говорят клиенты']
A2 --> S6[Система: Фильтрует данные по выбранному периоду]
A3 --> S7[Система: Отображает детали оценки без текста отзыва]
A4 --> S8[Система: Строит график динамики рейтинга]
A5 --> S9[Система: Отображает обезличенную сводку отзывов]
S6 --> S5
S7 --> End([Конец])
S8 --> End
S9 --> End
Модель интерфейсов
classDiagram
class РейтингИОценкиТехника {
<<Screen>>
+ОбластьОбщегоРейтинга : ОбщийРейтинг
+ОбластьСтатистикиОценок : СтатистикаОценок
+ФильтрПериода : PeriodFilter
+СписокОценок : СписокОценокБезТекста
+ГрафикДинамики : RatingTrendChart
+КнопкаСводкиОтзывов : Button
}
class ОбщийРейтинг {
<<Area>>
+СреднийРейтинг : StarRating[5.0]
+КоличествоОценок : Counter
+ПозицияВРейтинге : RankDisplay
+ИзменениеЗаПериод : TrendIndicator
}
class СтатистикаОценок {
<<Area>>
+Распределение5Звезд : ProgressBar
+Распределение4Звезды : ProgressBar
+Распределение3Звезды : ProgressBar
+Распределение2Звезды : ProgressBar
+Распределение1Звезда : ProgressBar
}
class КарточкаОценки {
<<Area>>
+РейтингКлиента : StarRating
+ДатаОценки : DateLabel
+НомерЗаказа : OrderLink
+ТипЗаказа : OrderTypeLabel
+ИнициалыКлиента : ClientInitials
}
class СводкаОтзывов {
<<Screen>>
+ОбщиеТемы : ОбластьОбщихТем
+ПозитивныеМоменты : ОбластьПозитива
+ВозможностиУлучшения : ОбластьУлучшений
+РекомендацииСистемы : ОбластьРекомендаций
}
РейтингИОценкиТехника *-- ОбщийРейтинг
РейтингИОценкиТехника *-- СтатистикаОценок
РейтингИОценкиТехника *-- КарточкаОценки
Функциональные требования
RQ364. Требование к загрузке данных рейтинга. Система должна:
- Загружать все отзывы о технике из Reviews где idUserAuthor = ID техника
- Фильтровать только отзывы с типом TECHNICIAN_REVIEW
- Связывать отзывы с заказами через Reviews.idOrder
- Ограничивать период загрузки последними 3 годами
RQ365. Требование к расчету общего рейтинга. Система должна рассчитывать:
- Средний рейтинг: среднее арифметическое всех оценок (rating) с точностью до 0.1
- Общее количество оценок: подсчет всех отзывов с рейтингом
- Распределение по звездам: процентное соотношение оценок 1-5 звезд
- Динамика изменения: сравнение с предыдущим периодом в %
RQ366. Требование к отображению оценок. Каждая оценка должна содержать:
- Рейтинг клиента (1-5 звезд)
- Дату создания оценки
- Номер связанного заказа (кликабельная ссылка)
- Инициалы клиента (без полного имени для конфиденциальности)
- Тип заказа (плановый/экстренный)
- Исключение: текст отзыва НЕ отображается
RQ367. Требование к фильтрации оценок. Система должна предоставлять фильтры:
- По периоду: последние 30 дней, 3 месяца, 6 месяцев, год, произвольный период (максимум 3 года)
- По рейтингу: только высокие (4-5 звезд), средние (3 звезды), низкие (1-2 звезды)
- По типу заказа: плановые, экстренные, все типы
- Только с комментариями: фильтр для оценок, которые сопровождались текстовыми отзывами
RQ368. Требование к обезличенной сводке отзывов. Система должна генерировать сводку:
- Общие темы: автоматический анализ частоты упоминания ключевых слов в отзывах
- Позитивные моменты: наиболее часто упоминаемые достоинства работы техника
- Области для улучшения: выявленные из негативных отзывов проблемные зоны
- Статистика тональности: процентное соотношение позитивных/нейтральных/негативных отзывов
RQ369. Требование к анализу динамики рейтинга. График динамики должен показывать:
- Изменение среднего рейтинга по месяцам за последний год
- Количество полученных оценок по периодам
- Тренд изменения (улучшение/ухудшение)
- Сравнение с общим рейтингом техников компании (если доступно)
RQ370. Требование к конфиденциальности. Система должна обеспечивать:
- Полное скрытие текстов индивидуальных отзывов от техника
- Обезличивание данных в сводке (без привязки к конкретным клиентам или заказам)
- Отображение только инициалов клиентов без контактной информации
- Невозможность определить автора конкретного комментария по сводке
RQ371. Требование к рекомендациям системы. На основе анализа сводки система должна предоставлять:
- Автоматические рекомендации по улучшению качества обслуживания
- Сравнение с лучшими практиками других техников (без раскрытия имен)
- Предложения по развитию профессиональных навыков
- Выявление паттернов в негативных отзывах для их предотвращения
Общие требования к блоку «Отчетность и история»
Требования к производительности
RQ372. Требование к времени загрузки данных. Система должна:
- Загружать статистику за текущий месяц не более чем за 3 секунды
- Формировать отчеты за период до 1 года не более чем за 10 секунд
- Использовать кэширование для часто запрашиваемых данных
- Отображать индикатор загрузки при длительных операциях
RQ373. Требование к объему данных. Система должна эффективно обрабатывать:
- До 1000 заказов техника за месяц
- До 50 рабочих смен в месяц
- До 500 отзывов клиентов за год
- Данные за период до 3 лет (период хранения в системе)
Требования к интеграции
RQ374. Требование к интеграции с другими блоками. Блок должен интегрироваться с:
- UC019 (просмотр истории заказов) для обеспечения единообразия данных
- Блоком геолокации для получения данных о перемещениях
- Системой уведомлений для информирования о готовности отчетов
- Модулем диспетчера для передачи отчетов
RQ375. Требование к синхронизации данных. Статистические данные должны:
- Обновляться в реальном времени при изменении статусов заказов
- Учитывать корректировки данных, внесенные диспетчером
- Сохранять историю изменений для обеспечения целостности отчетов
Требования к безопасности
RQ376. Требование к разграничению доступа. Техник должен иметь доступ только к:
- Собственным данным и статистике
- Рейтингам оценок, оставленных о нем клиентами (без текстов отзывов)
- Отчетам по своим рабочим сменам и заказам
RQ377. Требование к аудиту операций. Система должна логировать:
- Все операции просмотра статистики
- Генерацию отчетов о рабочих сменах
- Время и параметры каждого запроса
- Попытки доступа к данным других техников