Тема диплома: Разработка приложения для выездных специалистов компании ООО «Водоучет» Введение Абзац про актуальность темы вообще. Абзац про актуальность темы для выбранной предметной области. Логический переход к выбранному предприятию. Два слова о том, чем оно занимается и почему для него актуальна данная тема дипломного проекта Цель дипломного проекта – пишем какую пользу получит заказчик от выполненной вами работы. Цель не дублирует тему! Пример цели: Организация электронного учета и контроля выполненных работ, а также диспетчеризация текущих заявок по мастерам Автосервиса Еще пример цели: Повышение качества обслуживания посетителей центра красоты Повышение конкурентоспособности и клиентоориентированности нового бизнеса за счет быстрого предоставления информационных услуг Для достижения поставленной цели необходимо решить следующие задачи: 1. Проанализировать бизнес-процессы ООО «Колобок», подлежащие автоматизации в информационной подсистеме; 2. Сформулировать требования к программному продукту; 3. Спроектировать информационную систему; 4. Разработать макеты интерфейсов 5. Выполнить работы по созданию информационной системы с учетом требований заказчика; 5. Протестировать полученный результат. При необходимости внести коррективы в программный продукт. Ребята! Задачи условные. У вас могут отличаться от моего примера. Что важно – те задачи, которые вы обозначите во введении обязательно должны быть потом решены в вашем дипломном проекте. Это обязательное условие для достижения вами цели диплома. Если цель не достигнута, задачи не решены, то защита диплома признается неуспешной. 1 Анализ предметной области 1.1 Общие сведения об организации-заказчике 1.2 Анализ бизнес-процессов, подлежащих автоматизации в информационной системе 1.3 Требования к разработке 2 Проектирование информационной системы (сайта, приложения и т.д.) 2.1 Проектирование структуры приложения 2.2 Проектирование базы данных 2.3 Проектирование макетов интерфейса 3 Реализация информационной системы (веб-приложения, сайта и т.д.) 3.1 Обоснование выбора программного обеспечения для выполнения работы 3.2 Реализация базы данных 3.3 Создание интерфейса 3.4 Программная реализация 4 Тестирование 4.1. Теоретические аспекты тестирования программного обеспечения 4.2. Разработка тест-кейсов и сценариев тестирования 4.3 Отчет о результатах тестирования Заключение Абзац про актуальность Абзац про результаты решения первой задачи из введения Абзац про результаты решения второй задачи из введения Абзац про результаты решения третьей задачи из введения Абзац про результаты решения четвертой задачи из введения … Абзац про результаты решения последней задачи из введения Абзац про достижение поставленной цели дипломного проекта Список использованных источников Книги не старше 2021 года Приложение

25.05.2026
Просмотры: 15
Краткое описание

Краткое описание работы

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

Цель работы — повышение операционной эффективности и качества обслуживания клиентов ООО «Водоучет» за счет автоматизации процессов управления выездными специалистами, что выражается в сокращении времени обработки заявок и исключении потери данных.

Задачи:
1. Проанализировать текущие бизнес-процессы работы выездных мастеров ООО «Водоучет».
2. Сформулировать функциональные и нефункциональные требования к приложению.
3. Спроектировать архитектуру и интерфейс мобильного приложения.
4. Разработать базу данных и программный код приложения.
5. Провести тестирование и отладку программного продукта.

Предмет исследования — процессы диспетчеризации, учета и контроля выполнения заявок выездными специалистами.

Объект исследования — деятельность ООО «Водоучет» (компания, специализирующаяся на установке и обслуживании приборов учета воды) и ее выездного персонала.

Выводы. Разработанное приложение позволило централизовать поток заявок, автоматизировать назначение заданий мастерам и обеспечить прозрачный учет выполненных работ. Внедрение продукта решает проблему «бумажного» документооборота и задержек в передаче информации, что напрямую увеличивает скорость обслуживания клиентов и конкурентоспособность компании.

Предпросмотр документа

Название университета

ДИПЛОМНАЯ РАБОТА НА ТЕМУ:

ТЕМА ДИПЛОМА: РАЗРАБОТКА ПРИЛОЖЕНИЯ ДЛЯ ВЫЕЗДНЫХ СПЕЦИАЛИСТОВ КОМПАНИИ ООО «ВОДОУЧЕТ» ВВЕДЕНИЕ АБЗАЦ ПРО АКТУАЛЬНОСТЬ ТЕМЫ ВООБЩЕ. АБЗАЦ ПРО АКТУАЛЬНОСТЬ ТЕМЫ ДЛЯ ВЫБРАННОЙ ПРЕДМЕТНОЙ ОБЛАСТИ. ЛОГИЧЕСКИЙ ПЕРЕХОД К ВЫБРАННОМУ ПРЕДПРИЯТИЮ. ДВА СЛОВА О ТОМ, ЧЕМ ОНО ЗАНИМАЕТСЯ И ПОЧЕМУ ДЛЯ НЕГО АКТУАЛЬНА ДАННАЯ ТЕМА ДИПЛОМНОГО ПРОЕКТА ЦЕЛЬ ДИПЛОМНОГО ПРОЕКТА – ПИШЕМ КАКУЮ ПОЛЬЗУ ПОЛУЧИТ ЗАКАЗЧИК ОТ ВЫПОЛНЕННОЙ ВАМИ РАБОТЫ. ЦЕЛЬ НЕ ДУБЛИРУЕТ ТЕМУ! ПРИМЕР ЦЕЛИ: ОРГАНИЗАЦИЯ ЭЛЕКТРОННОГО УЧЕТА И КОНТРОЛЯ ВЫПОЛНЕННЫХ РАБОТ, А ТАКЖЕ ДИСПЕТЧЕРИЗАЦИЯ ТЕКУЩИХ ЗАЯВОК ПО МАСТЕРАМ АВТОСЕРВИСА ЕЩЕ ПРИМЕР ЦЕЛИ: ПОВЫШЕНИЕ КАЧЕСТВА ОБСЛУЖИВАНИЯ ПОСЕТИТЕЛЕЙ ЦЕНТРА КРАСОТЫ ПОВЫШЕНИЕ КОНКУРЕНТОСПОСОБНОСТИ И КЛИЕНТООРИЕНТИРОВАННОСТИ НОВОГО БИЗНЕСА ЗА СЧЕТ БЫСТРОГО ПРЕДОСТАВЛЕНИЯ ИНФОРМАЦИОННЫХ УСЛУГ ДЛЯ ДОСТИЖЕНИЯ ПОСТАВЛЕННОЙ ЦЕЛИ НЕОБХОДИМО РЕШИТЬ СЛЕДУЮЩИЕ ЗАДАЧИ: 1. ПРОАНАЛИЗИРОВАТЬ БИЗНЕС-ПРОЦЕССЫ ООО «КОЛОБОК», ПОДЛЕЖАЩИЕ АВТОМАТИЗАЦИИ В ИНФОРМАЦИОННОЙ ПОДСИСТЕМЕ; 2. СФОРМУЛИРОВАТЬ ТРЕБОВАНИЯ К ПРОГРАММНОМУ ПРОДУКТУ; 3. СПРОЕКТИРОВАТЬ ИНФОРМАЦИОННУЮ СИСТЕМУ; 4. РАЗРАБОТАТЬ МАКЕТЫ ИНТЕРФЕЙСОВ 5. ВЫПОЛНИТЬ РАБОТЫ ПО СОЗДАНИЮ ИНФОРМАЦИОННОЙ СИСТЕМЫ С УЧЕТОМ ТРЕБОВАНИЙ ЗАКАЗЧИКА; 5. ПРОТЕСТИРОВАТЬ ПОЛУЧЕННЫЙ РЕЗУЛЬТАТ. ПРИ НЕОБХОДИМОСТИ ВНЕСТИ КОРРЕКТИВЫ В ПРОГРАММНЫЙ ПРОДУКТ. РЕБЯТА! ЗАДАЧИ УСЛОВНЫЕ. У ВАС МОГУТ ОТЛИЧАТЬСЯ ОТ МОЕГО ПРИМЕРА. ЧТО ВАЖНО – ТЕ ЗАДАЧИ, КОТОРЫЕ ВЫ ОБОЗНАЧИТЕ ВО ВВЕДЕНИИ ОБЯЗАТЕЛЬНО ДОЛЖНЫ БЫТЬ ПОТОМ РЕШЕНЫ В ВАШЕМ ДИПЛОМНОМ ПРОЕКТЕ. ЭТО ОБЯЗАТЕЛЬНОЕ УСЛОВИЕ ДЛЯ ДОСТИЖЕНИЯ ВАМИ ЦЕЛИ ДИПЛОМА. ЕСЛИ ЦЕЛЬ НЕ ДОСТИГНУТА, ЗАДАЧИ НЕ РЕШЕНЫ, ТО ЗАЩИТА ДИПЛОМА ПРИЗНАЕТСЯ НЕУСПЕШНОЙ. 1 АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ 1.1 ОБЩИЕ СВЕДЕНИЯ ОБ ОРГАНИЗАЦИИ-ЗАКАЗЧИКЕ 1.2 АНАЛИЗ БИЗНЕС-ПРОЦЕССОВ, ПОДЛЕЖАЩИХ АВТОМАТИЗАЦИИ В ИНФОРМАЦИОННОЙ СИСТЕМЕ 1.3 ТРЕБОВАНИЯ К РАЗРАБОТКЕ 2 ПРОЕКТИРОВАНИЕ ИНФОРМАЦИОННОЙ СИСТЕМЫ (САЙТА, ПРИЛОЖЕНИЯ И Т.Д.) 2.1 ПРОЕКТИРОВАНИЕ СТРУКТУРЫ ПРИЛОЖЕНИЯ 2.2 ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ 2.3 ПРОЕКТИРОВАНИЕ МАКЕТОВ ИНТЕРФЕЙСА 3 РЕАЛИЗАЦИЯ ИНФОРМАЦИОННОЙ СИСТЕМЫ (ВЕБ-ПРИЛОЖЕНИЯ, САЙТА И Т.Д.) 3.1 ОБОСНОВАНИЕ ВЫБОРА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ДЛЯ ВЫПОЛНЕНИЯ РАБОТЫ 3.2 РЕАЛИЗАЦИЯ БАЗЫ ДАННЫХ 3.3 СОЗДАНИЕ ИНТЕРФЕЙСА 3.4 ПРОГРАММНАЯ РЕАЛИЗАЦИЯ 4 ТЕСТИРОВАНИЕ 4.1. ТЕОРЕТИЧЕСКИЕ АСПЕКТЫ ТЕСТИРОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ 4.2. РАЗРАБОТКА ТЕСТ-КЕЙСОВ И СЦЕНАРИЕВ ТЕСТИРОВАНИЯ 4.3 ОТЧЕТ О РЕЗУЛЬТАТАХ ТЕСТИРОВАНИЯ ЗАКЛЮЧЕНИЕ АБЗАЦ ПРО АКТУАЛЬНОСТЬ АБЗАЦ ПРО РЕЗУЛЬТАТЫ РЕШЕНИЯ ПЕРВОЙ ЗАДАЧИ ИЗ ВВЕДЕНИЯ АБЗАЦ ПРО РЕЗУЛЬТАТЫ РЕШЕНИЯ ВТОРОЙ ЗАДАЧИ ИЗ ВВЕДЕНИЯ АБЗАЦ ПРО РЕЗУЛЬТАТЫ РЕШЕНИЯ ТРЕТЬЕЙ ЗАДАЧИ ИЗ ВВЕДЕНИЯ АБЗАЦ ПРО РЕЗУЛЬТАТЫ РЕШЕНИЯ ЧЕТВЕРТОЙ ЗАДАЧИ ИЗ ВВЕДЕНИЯ … АБЗАЦ ПРО РЕЗУЛЬТАТЫ РЕШЕНИЯ ПОСЛЕДНЕЙ ЗАДАЧИ ИЗ ВВЕДЕНИЯ АБЗАЦ ПРО ДОСТИЖЕНИЕ ПОСТАВЛЕННОЙ ЦЕЛИ ДИПЛОМНОГО ПРОЕКТА СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ КНИГИ НЕ СТАРШЕ 2021 ГОДА ПРИЛОЖЕНИЕ

Выполнил:

ФИО: Студент

Специальность: Специальность

Проверил:

ФИО: Преподаватель

г. Москва, 2025 год.

Содержание

Введение

  1. Теоретические основы разработки приложений для автоматизации работы выездных специалистов
    1.1. Понятие и виды информационных систем для управления мобильными сотрудниками
    1.2. Обзор современных технологий и инструментов для создания мобильных и веб-приложений
    1.3. Анализ рынка программных продуктов для автоматизации полевых работ и учета ресурсов

  2. Анализ деятельности и требований к разработке приложения для ООО «Водоучет»
    2.1. Общая характеристика деятельности ООО «Водоучет» и $$$$$$ $$$$$$$$$$$$ $$$$$$-$$$$$$$$$
    2.2. $$$$$$$$$ $$$$$$$ и $$$$$ $$$$ $ $$$$$$ $$$$$$$$ $$$$$$$$$$$$ $$$$$$$$
    2.$. $$$$$$$$$$$$$$ $$$$$$$$$$$$$$ и $$$$$$$$$$$$$$$$ требований к $$$$$$$$$$$$$$$$ $$$$$$$$$$

$. $$$$$$$$$$$$$$ $ $$$$$$$$$$ $$$$$$$$$$ $$$ $$$$$$$$ $$$$$$$$$$$$ $$$ «$$$$$$$$»
$.$. $$$$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$ $ $$$$ $$$$$$
$.$. $$$$$$$$$$ $$$$$$$$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$ $$$$$$$
$.$. $$$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$ $$$ $$$$$$$$$$$$$

$$$$$$$$$$

$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$

Введение

В условиях стремительной цифровой трансформации экономики и перехода к модели «Индустрия 4.0», автоматизация бизнес-процессов становится критически важным фактором конкурентоспособности современных предприятий. Особую актуальность приобретает разработка специализированных программных решений для компаний, чья деятельность связана с работой мобильных сотрудников на удаленных объектах. Отсутствие оперативного обмена данными между полевыми специалистами и офисом, бумажный документооборот и сложность контроля за выполнением заявок приводят к снижению эффективности труда, росту временных и финансовых издержек. Внедрение информационных систем, обеспечивающих диспетчеризацию и электронный учет работ, является насущной потребностью для повышения качества сервиса и прозрачности деятельности организации.

Проблематика данной работы заключается в несовершенстве существующих механизмов управления выездным персоналом в компании ООО «Водоучет», специализирующейся на обслуживании систем водоснабжения и водоотведения. Отсутствие единого цифрового пространства для постановки задач, фиксации выполненных операций и учета расходных материалов приводит к задержкам в обработке заявок, ошибкам в отчетности и снижению клиентоориентированности бизнеса. Таким образом, разработка приложения для автоматизации работы выездных специалистов является своевременным и практически значимым решением.

Объектом исследования выступает деятельность выездных специалистов компании ООО «Водоучет». Предметом исследования являются бизнес-процессы приема, распределения и исполнения заявок, а также методы $$ $$$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$.

$$$$$ $$$$$$$$$$ $$$$$$$ $$$$$$$$ $$$$$$$$$ $$$$$$$$$$$$$ $ $$$$$$$$ $$$$$$$$$$$$ $$$$$$$$ $$$ «$$$$$$$$» $$ $$$$ $$$$$$$$$$$$$ $$$$$$$$$ $$$$$, $$$$$$$$ $ $$$$$$$$$$$$$$$ $$$$$, $$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$$$.

$$$ $$$$$$$$$$ $$$$$$$$$$$$ $$$$ $$$$$$$$$$ $$$$$$ $$$$$$$$$ $$$$$$:
$. $$$$$$$$$$$$$$$$ $$$$$$$ $$$$$$-$$$$$$$$ $$$ «$$$$$$$$», $$$$$$$$$ $ $$$$$$$ $$$$$$$$ $$$$$$$$$$$$, $ $$$$$$$ $$$$$ $$$$$, $$$$$$$$$$ $$$$$$$$$$$$$.
$. $$$$$$$$$$$$$$ $$$$$$$$$$$$$$ $ $$$$$$$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$$$$$$$$ $$$$$$$$$$.
$. $$$$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$, $$$$$$$ $$$$$$$$$ $$$$ $$$$$$ $ $$$$$$$$$$$$$$$$ $$$$$$$$$$.
$. $$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$ $$ $$$$$$ $$$$$$$$$$$$$$$$ $$$$$$$$$$.
$. $$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$ $$$ $$$$$$$$$$$$$.

$$$$$$$$$$$$$$$$ $$$$$$ $$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$ $$$$$$: $$$$$$ $ $$$$$$, $$$$$$$$$, $$$$$$$$$, $ $$$$$ $$$$$$$$$$$ $$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$, $$$$$$$ $$$$$$$$$$$ $$$$$$ ($$$$$, $$$) $ $$$$$$$$$$$ $$$$$$$$-$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$ ($$$). $$$ $$$$$$$$$ $$$$$$ $ $$$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$$$$$ $$$$$$$$, $$$$$$$$$ $ $$$$$ $$$$$$$$$$.

$$$$$$$$$$$$$ $$$$$ $$$$$$ $$$$$$$$$ $$$$$$$$$$$ $$$$$$$ $ $$$$$$$ $$$$$$$ $ $$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$, $$$$$$$$$$ $$$$$$$$$, $ $$$$$ $$$$$$$$$$ $ $$$$$$$$$$$$$ $$$$$$$$, $$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$. $$$$$$$$$$$$$$ $$$$$$$$$ $$ $$$$$$ $$$$ $$$$, $$$ $$$$$$$$$$$$ $$$$$$$$$$$$ $ $$$$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$.

Общие сведения об организации-заказчике

Общество с ограниченной ответственностью «Водоучет» (далее – ООО «Водоучет») является коммерческой организацией, осуществляющей деятельность в сфере жилищно-коммунального хозяйства на территории города N и прилегающих районов. Основным направлением деятельности предприятия выступает техническое обслуживание, ремонт и монтаж систем водоснабжения и водоотведения, а также установка и поверка приборов учета воды. Компания работает как с юридическими лицами (управляющие компании, ТСЖ, промышленные предприятия), так и с физическими лицами – собственниками жилых помещений.

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

Штатная численность выездных специалистов составляет порядка 25 человек. Каждый специалист оснащен необходимым инструментом и комплектующими, однако до настоящего времени процесс управления их работой осуществлялся преимущественно в ручном режиме. Диспетчер принимал заявки от клиентов по телефону, фиксировал их в бумажном журнале или в простой электронной таблице, после чего устно или посредством SMS-сообщений распределял задачи между мастерами. Контроль за выполнением заявок осуществлялся путем периодических телефонных звонков специалистам и обратной связи от клиентов. Учет использованных материалов и выполненных работ велся в бумажных актах, которые в конце рабочего дня сдавались в офис.

Подобная организация труда сопряжена с рядом существенных недостатков. Во-первых, отсутствие единой информационной базы приводит к дублированию информации и ошибкам при передаче данных. Во-вторых, диспетчер не имеет возможности оперативно отслеживать текущее местоположение специалистов и их загруженность, что снижает эффективность распределения заявок. В-третьих, формирование отчетности для руководства и бухгалтерии требует значительных временных затрат и сопряжено с риском искажения данных. Как отмечается в современных исследованиях, подобные проблемы характерны для многих предприятий сферы услуг, где мобильные сотрудники являются основным производственным ресурсом [12].

Анализ финансово-хозяйственной деятельности ООО «Водоучет» за последние три года показывает стабильный рост количества заявок, что связано с увеличением жилого фонда и повышением требований к качеству коммунальных услуг. Однако темпы роста выручки отстают от темпов роста количества заказов, что косвенно $$$$$$$$$$$$$$$ $ $$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$$$ деятельности. $$$$$$$ $$$$$ $$$$$$$$$$ $$$$$ $$$$$$ $$$$$$$$$$ $,$ $$$$, $$$ $$$$ $$ $$% $$$$$$$$ $$$$$$$ $$$$$$$$$$$$ $$$$$$$$ $$ $$$$$$$$$$$$ $$$$$ $$$$$$$$$ и $$$$$$$$$$$$ $$$$$$$ $$$$$ с $$$$$$$$$$$. $$$$ $$$$$$$$$ $$$$$$$ $$ $$$$$$$ $$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$$$$$ $$$ $$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$ $$% от $$$$$$ $$$$$ заказов.

$$$$$$$$$$$$ $$$$$$$ $$$$$$$$$ $$$$$$$$ $$$$$$$$$$$$ $$$$$$$$ $$ $$$$$$$$$$$$$ $$$$$$ $ $$$$$$ $$ $$$$$$ $$$$$$, $$$$$$$ $$$$$$$$$$$ $$ $$$$$$$$$ $$$$$$$$$$$$ $$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$$$-$$$$$$$$$$$$ $$$$$$. $$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$ $$$$$$$ $$$$$$$ ($$$$$$$$$$ $$$$$$$$$$$ $$$$$$, $$$$$ $$$$$$$$$$, $$$$$$ $$$$$$$$) $$$$$$$ $$$$$$$$$$$$$$$$$$ $$$$$$$$$ $ $$$$$$$$$ $$$$$$$$$$$$$$$$$$ $$$$$. $$$$$$$$$ $$$$$$$$$$$$$$$$$$ $$$$$$$ $$$$$ $$$$$$$$$ $$ $$$$$$$$ $$$$$$$$$$ $$$$$$$ $$$ $$$ $$$$$$$ $$$$$$$$$$$, $$$ $$$$$$$$ $$$$$ $$ $$$$$$$$$$$ $$$$$$$$ $ $$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$ $$$$$$$$$$$$ [$$].

$$$$$ $$$$$$$$, $$$ $$$ «$$$$$$$$» $$$ $$$$$$$$$$$$$ $$$$$$$ $$$$$$$$$ $$$$$$$$$$$$$ $$$$$ $$$$$$$$$$$$. $ $$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$ $$:$$$$$$$$$$$ $$$ $$$$$$$ $$$$$$$$$$$ $$$$$, $ $$$$$ $$$$$$$$$$$$$ $$$$$$$$$$$ $$$$$ $$$ $$$$$$$$$$$ $$$$$$$$$$$$$$$$. $$$$$$ $$$ $$$$$$$$$$$ $$ $$$$$$ $$$$$$ $$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$ $$$$$$$$$$. $$$$$$$$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$ $$$ $$$-$$$$$$ $$$ $$$$$$$$$$$$$$$ $$$$$$ $ $$$$$$$$ $$$$$$$$$$$. $$$$$ $$$$$$$, $$$$$$$$$$$ $$$$$ $$$$$$$$$ $ $$$$$$$$$$ $ $$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$, $$$$$$$ $$$$$$$$$ $$ $$$$$$$$$$ $ $$$$$$ $$$$$$$$ $$$$$$$$$$$$ $$$$$$$$ $$$$$$ $$$$$$, $$$$$$$$$$$$$ $$$$$, $$$$$$$$ $$$$$$$$$$ $ $$$$$ $$$$$$$$$$$ $$$$$$.

$ $$$$$ $$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$$$$$, $$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$ $$ $$$$ $$ $$$$$$$ $$$$$$, $$$$$$$$$ $$$$$$$$$$$$$$ $$$$$, $$$$$$$$$$$$ $$ $$$$$$$$$$$$$$$$$$ $$$$$$$ $$$$ $$$$$$$ $$$$$$$$$$$, $ $$$$$$$$$$ $$$$$$$ $$$$$$$ $ $$$$$$$$. $$$$$$$$$$$ $$$$$$$$ $$$$$$$$$$$$ $$$$$ $$$$$$$$$ $$ $$$$ $$$$$$$, $$$ $$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$ $$$ $$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$. $$$$$$ $$ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$ $$$ $$$$$$$$$$ $ $$$$$$$$$$$$, $$$ $$$$$$$$$$$$ $$$$$$$ $$$$$$$$$$$$$$$$$$ $$$$$$$$$ $ $$$$$$$$$$ $$$$$$$ $$$$$$$.

$ $$$$$$$$$$ $$$$$$$ $$$$$ $$$$$$$$ $$ $$$$$$$$$$$-$$$$$$$$$ $$$$$ $$$$$$$$$$$$$$, $$$ $$$ «$$$$$$$$» $$$$$$$$$$$$ $$$$$ $$$$$$$$ $$$$$$$$$$$ $$$$$ $$$$$, $$$$$$$$$$$$$ $ $$$$$$$$$$ $$$$$ $ $$$$$$$$$$$$$ $$$$$$$$ $$$$$$$$$$$$$. $$$$$$$$$$$$ $$$$$$ $$$$$$$ $$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$ $$$$$$$$$$$$ $$$$$$$$ $$$ $$$$$$$$$$$ $$$$$$$$ $$$$$$$, $$$$$$$$$ $$$$$$$$ $$$$$$$$$$$$ $$$$$$$$ $ $$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$. $$$$$$$$$$ $$$$$$$$$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$ $$ $$$$$$ $$$$$$$$$$$$$$$$ $$$$$$$ $$$$$$-$$$$$$$$, $$ $ $$$$$$$$ $$$$$$ $$$ $$$$$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$ $ $$$$$$$ [$$].

Помимо анализа организационной структуры и текущего состояния информационной инфраструктуры, важное значение для понимания специфики деятельности ООО «Водоучет» имеет изучение документооборота, сопровождающего работу выездных специалистов. В настоящее время в компании применяется следующий набор первичных документов: заявка клиента (принимается по телефону или через форму обратной связи на сайте), наряд-задание на выполнение работ, акт выполненных работ, акт приема-передачи материалов и отчет мастера за смену. Каждый из этих документов существует в бумажной форме и заполняется вручную. При этом процесс передачи информации между диспетчером, мастером и бухгалтерией носит последовательный и часто прерывистый характер.

Например, после выполнения заявки мастер заполняет акт выполненных работ, который должен быть подписан клиентом. Затем этот акт доставляется в офис, где данные из него вносятся бухгалтером в учетную систему. Если в акте допущена ошибка или отсутствует подпись, документ возвращается мастеру для доработки, что приводит к задержкам в закрытии заказа и начислении заработной платы. Подобная практика является источником не только временных потерь, но и конфликтных ситуаций с клиентами, которые не получают вовремя закрывающие документы для своих управляющих компаний.

С точки зрения теории управления, рассмотренную ситуацию можно охарактеризовать как отсутствие сквозной автоматизации бизнес-процессов. Исследователи отмечают, что для предприятий сферы услуг, особенно тех, где значительная часть персонала работает вне офиса, критически важным является внедрение систем класса Field Service Management (FSM), которые позволяют автоматизировать весь цикл от поступления заявки до формирования отчетности [7]. В случае ООО «Водоучет» внедрение такого решения позволило бы не только ускорить документооборот, но и минимизировать количество ошибок, связанных с человеческим фактором.

Еще одним важным аспектом, выявленным в ходе анализа деятельности организации, является отсутствие единой системы учета складских запасов у выездных специалистов. Каждый мастер имеет при себе определенный набор расходных материалов (фитинги, краны, прокладки, счетчики и т.д.), однако точный учет их остатков не ведется. Пополнение запасов происходит по факту их исчерпания, что нередко приводит к ситуациям, когда специалист прибывает на объект без необходимых комплектующих. Это влечет за собой повторный выезд, дополнительные транспортные расходы и неудовлетворенность клиента.

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

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

$$$$$$$$$$$ $$$$$$ $$$$$ $$$$$$$, $$$ $$$$$$$$$$$ $$$ «$$$$$$$$» $$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$ $$$$$$$$$$$$$ $ $$$$$$ $$$$$$$$$$$$$ $$$$$$$$ $ $$$$$$$$$$ $ $$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$. $$$$$ $$$$, $$$$$$$$ $$$ $$$$$$$ $$$$$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$ $$$$$$$ $$$$$$$ $$$ $$$$$$$$$$ $$$$$$$$ $$$$$$$$$$$$, $$$$$$ $$$$$$ $ $$$$$$, $$$ $$$$$$$$$$$ $$ $$$ $$$$ $$$$$$$$$ $$ $$$$$$$$$$$ $ $$$$$$ $$$ $$$$$$$$$$$ $$$$$$ $$$$$$$$, $$$$ $$ $$$$$$$$$ $$$$$$$$$ $$$$$$ $$$$$$ $ $$$$$ $$$$$$$$$$$$$ $ $$$$$$$$$$$$$. $$$ $$$$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$, $$$$$$$$$$$$$$$ $$$ $$$$$$$$$$ $$$$$$-$$$$$$$$ $$$$$$$$$$$.

$ $$$$ $$$$$$$$$$$$$$$$ $$$$$$$$ $$$$$$$$$$$ $$$$$$$$ $$$$ $$$$$$$$ $$ $$$$$$$$ $$ $$$$$$$ $$$$$$$. $$$$$$$$$$ $$$$$$$$ $$$$$$$$$$$ $ $$$$$$$ $$$$$$$$$$ $$$ $$$$$$ $ $$$$$$$$$$$$$ $$$$$$ $ $$$$$$$$$$$$ $$$$$$ $$$$$$$ $$$$$$$$ $$$$$$$ $$$$$$$$$$$ $$ $$$$$. $$$$$$$$ $$$$$$$$$$$ $$$$$$$$ $$$$$$$$$$$$$$$$$$ $ $$$$$$$$$ $$$$$$$$$$, $$$$$$$ $$$$$$$$$ $$ $$$$$$$$ $$$$$$$, $$$$$$$$$$$ $$$$$$$$$$ $$$$$, $$$$$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$ $ $$$$$$$$$$$ $$$$ $$$$$$$. $$$$$$$$$$$ $$$$$$$$, $ $$$$ $$$$$$$, $$$$$$$$$$$$$$ $ $$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$: $$$$$$$$$$ $$$$$$ $ $$$$$$$ $$$$$$$$, $$$$$$$ $$$$$ $$$$$$$$$$, $$$$$$$ $$$$$$$$$ $$$$$$$, $$$$$$$$$$$$$$$$$ $$$$$$$$ $ $$$$$$ $$$$$$$$$$ $$$$$$$$$$$$$.

$$$$$ $$$$$$$, $$$$$$$$$$$$ $$$$$$ $$$$$ $$$$$$$$ $$ $$$$$$$$$$$-$$$$$$$$$ $$$$$$$$$ $$$$$$$ $$$$$ $ $$$, $$$ $$$ «$$$$$$$$» $$$$$$$$ $$$$$$$$ $$$$$$$$$$$$$$ $$$$$$ $ $$$$$$$$ $$$$$$$ $ $$$$$ $$$, $$$$$$$$$$$$$ $ $$$$$$$$ $$$$$$$$ $$$$$. $$$$$$$$ $$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$ $ $$$$$$$$$$ $$$ $$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$, $$$$$$ $$$$$$$$$$$$ $$$$$$-$$$$$$$$ $$$$$$$ $$$$$$$$$$$ $$$$$$$ $ $$$$$$$$$$$ $$$$$ $$$$$$$ $$$$$$$$$$$$$$. $$$$$$$$$$ $$$$$$$$ – $$$$$$ $$$$$$$$$$$$$$$, $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$ $$ $$$$$$$$$$$$$$$ $ $$$$$$$$$ $$$$$$$$$$$$, $$$$$$$$$$$$$ $$$$ $$$$$$$$$$ $ $$$$$$ $$$$$$$ $$$$$$$$ $$$$$ – $$$$$$$$$ $$$$$$ $$$$$$$$$$$ $$$$$$$ $$$ $$$$$$$$$$, $$$$$$$ $$$$$ $$$$$$$$$$$$$$ $ $$$$$$$$$ $$$$$$$ $$$$$$ $$$$$$.

Анализ бизнес-процессов, подлежащих автоматизации в информационной системе

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

Моделирование бизнес-процессов целесообразно осуществлять с использованием методологии структурного анализа и проектирования SADT, в частности, нотации IDEF0, которая позволяет наглядно представить функциональную структуру системы, а также входные и выходные потоки данных, механизмы управления и ресурсы. Применение данной методологии в рамках дипломного проектирования обеспечивает строгость и однозначность описания, что особенно важно при последующей постановке задачи на разработку программного обеспечения.

В результате анализа текущего состояния процесса «Как есть» (AS-IS) были выделены следующие ключевые подпроцессы: прием заявки от клиента, регистрация заявки в журнале, определение приоритета и срочности, подбор свободного специалиста, передача задания мастеру (по телефону или SMS), выполнение работ на объекте, оформление акта выполненных работ, доставка акта в офис, ввод данных в учетную систему, выставление счета клиенту и закрытие заявки. Каждый из этих подпроцессов выполняется с использованием различных инструментов (телефон, бумажный журнал, электронная таблица, бухгалтерская программа), что создает разрывы в информационных потоках и увеличивает время цикла обслуживания.

Особого внимания заслуживает подпроцесс назначения исполнителя. В настоящее время диспетчер принимает решение о том, какому мастеру направить заявку, основываясь исключительно на собственном опыте и субъективной оценке текущей загруженности специалистов. При этом диспетчер не имеет доступа к информации о точном местоположении мастеров в реальном времени, что приводит к неоптимальному распределению задач. Например, мастер, находящийся в одном районе города, может получить заявку в противоположном районе, тогда как другой специалист, работающий поблизости, остается незагруженным. Как отмечается в современных исследованиях, подобная проблема характерна для многих сервисных организаций, где отсутствуют инструменты геоинформационного анализа [6].

Еще одним критическим подпроцессом является учет выполненных работ и расходных материалов. В настоящее время мастер заполняет бумажный акт, в котором указывает перечень выполненных операций и использованные материалы. Однако в условиях ограниченного времени на объекте и отсутствия шаблонов, записи часто делаются неразборчиво или неполно. Бухгалтер, вводя данные в систему, вынужден тратить время на расшифровку записей и уточнение информации у мастера, что приводит к задержкам в формировании закрывающих документов $$$ $$$$$$$. $$$$$$$$$$$$$ $$$$$$$ $$$$$$$$$$$ $$$$$ $$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$$$$ $$$$$$ $$$$$$$ операций $$ $$$$$$$$$$$ и $$$$$$$$ материалов $$ $$$$$-$$$$ $$$$$$$$$ $$ $$$$$$$$$$$ $$$$$$$$$ время на $$$$$$$$$$ $$$$$$$$$$$$ и $$$$$$$$$$$$$$ $$$$$$$$$$ $$$$$$.

$$$$$$$$$$ $$$$$$$$ $$$$$$$$ $$$$$$$$$$$ $$$$$ $$$$$ $$$$$$$ $$$$$$$$$$$. $ $$$$$$$$$ $$$$$ $$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$$$$$$ $$ $$$$$$$ $$$$$$$$, $$$$$$$ $$$$$$$$$ $ $$$$$$$$$$$$$ $$$$$$. $$$$$$$$$$$$ $$$$$$$$, $$$$$$$$, $$$$$$$$$$ $$$$$$$$ $$$$$$$$ $$$$$$$$$$ $$$$$ $$$$$ $$$$$$ $$$$$$$$ $$$$$ $$$$$$$$$ $$$$$ $$$$$ $$$$$$$$$$ $$$$$$, $$ $$$$$$$$$$ $$ $$$$$$$$$$$$$$$ $$$$$$. $$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$$$$ $$$$$ $$$$$$$$ $$$$$ $$$$$ $$$$$$$$$ $$$$$$$$$$ $$$ $$$-$$$$$$ $$$$$$$$$ $$ $$$$$$$$$$$ $$$$$$$$ $$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$ $$ $$$$$$$$$$$$$$$$$ $$$$$$$$ $ $$$$$$$$$$$$ $$$$$$$$$ $$$$ $$ $$$$$$$$$ $$$$$$$$ $$$$$.

$$$$$$ $$$$$$$$ $$$$$$$ $$$$$$-$$$$$$$$$ $$$$$$$$ $$$$$ $$$$$$ $$$$$$$$$$$$$$ $$$$$$$ $$$$$ $$$$$$$$$$$. $ $$$$$$$$$ $$$$$ $$$$$$$$$ $$$$$$$$ $$$$$$$$$$$$ $$$$$$$$ $$$$$$$$$$ $$$$$ $ $$$-$$$$$$$$$. $$$ $$$$ $$$$$$$$$$$$ $$$$$ $$$$$$$$$$ $$$$$$$$ $$$ $$$$$$$$$$ $ $$$$$$$$ $$$$$$$$. $$$$$$$$, $$$$$$$$$ $$$$$ $$$$$$ $$$$$$$$ $$$$$$$ $$ $$$$$$$$$ $$$$$$ $$$ $$$$$$$ $$$$$$, $ $$$$$$ $$$$$ $$$$$$$ $$$$$$$$ $$$$$ $$$$$$$$ $$$ $$$$$$$$$$ $$$$$$$ $$$$$$$. $$$$$$$$$ $$$$$$ $$$$$$$$$$$$$$ $$$$$$$, $ $$$$$$$ $$$ $$$$$$$$$ $$$$$$$$ $$$$$$$$ $ $$$$$$$$$$$ $$$$$$$ $ $$$$$$ $$$$$$$$$ $$$$$$$, $$$$$$$$ $$$$$$$$$ $$$$$$ $$$$$$$$ $ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$ $$$$$$ $$$$$$.

$$$ $$$$$$$$$$$$$$ $$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$-$$$$$$$$$ $$$ $$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$ $$$$$$$ $$$$$$$$. $$$$$$$$$$ $$$$$$$$, $$$ $$$$$$$ $$$$$ $$ $$$$$$$ $$$$$$$$$$$ $$$$$$ $$ $$ $$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$ $$ $$$$$, $$$$$$$ $$$$$ $$$$$$$$$$ $$$$$ $$ $$$$$$$ – $ $$$$, $$$$$$$ $$$$$ $$ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$ $$$$$$ – $$ $$$$$, $$$$$$$ $$$$$ $$ $$$$$$$$ $$$$$$ $ $$$$$$$$$$$ – $ $$$ ($ $$$$$$ $$$$$$$$ $$$$$$$$ $$$$$$$$$$). $$$$$ $$$$$$$, $$$$$$$$$$$$ $$$$$ $$$$$$$$$$ $$$$$$ $$$$$$$$$$ $$$$$ $ $$$$$ $$ $$$$$, $$$$$$ $ $$$$$$ $$$$$$$ $$ $$$$$$$$$$$$, $$$$$$$$ $ $$$$$$$$$$ $$$$$$ $$$$$$$$$$$ $$$$ $$$$$ $$$$$$$$$$$$$ $$ $-$ $$$$$. $$$$$$ $$$$$$$$$$ $$$$$$$$ $$$$$$$$ $$$$$$$$$$$ $$$ $$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$ [$$].

$$$$$$$$$$$ $$$$$$ $$$$$$$$$ $$$$$$$ $$$$$ $ $$$, $$$ $$$$$$$$ $$$$$$$$$$ $$$ $$$$$$$$$$$$$ $$$$$$$$ $$$$$$$$$ $$$$$$-$$$$$$$$: $$$$$ $ $$$$$$$$$$$ $$$$$$, $$$$$$$$$$$$$$$ $ $$$$$$$$$$ $$$$$$$$$$$$, $$$$ $$$$$$$$$$$ $$$$$ $ $$$$$$$$$$, $$$$$$$$ $$$$$$$$ $ $$$$$$$$$$$$ $$$$$$$$$$. $$$$$$$$$$$$$ $$$$$$ $$$$$$$$$ $$$$$$$$ $$ $$$$$$ $$$$$$$$$ $$$$$$$$$ $$$$$$$ $$ $$$$$$$$$$ $$$$$$ $$$$$$, $$ $ $$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$ $$$ $$$$$$$$$$$, $$$$$$$$ $$$$$$$$ $$$$$$$$$$$$ $$$$$$$$ $ $$$$$$$ $$$$$$ $$$ $$$$$$$$$ $$$$$$$ $$$$$$$$$ $$$$$$$$$, $$$$$$$$$$ $$ $$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$$.

Помимо анализа временных затрат и информационных потоков, важное значение имеет оценка экономической эффективности существующих бизнес-процессов. В ходе исследования были проанализированы данные о количестве заявок, выполняемых компанией ООО «Водоучет» за месяц, и сопоставлены с трудозатратами сотрудников. В среднем за месяц диспетчерская служба принимает около 450 заявок. Из них примерно 60 заявок (13%) требуют повторного выезда специалиста по причине неполной информации о неисправности, отсутствия необходимых материалов или ошибок в адресе. Каждый повторный выезд обходится компании в среднем в 1200 рублей, что включает транспортные расходы и заработную плату мастера за потраченное время. Таким образом, ежемесячные потери от повторных выездов составляют порядка 72 000 рублей, а в годовом исчислении – более 860 000 рублей. Внедрение информационной системы, обеспечивающей передачу полной и достоверной информации о заявке мастеру до выезда, позволило бы существенно сократить данный показатель.

Другим важным аспектом является анализ эффективности использования рабочего времени выездных специалистов. Хронометраж рабочего дня пяти мастеров в течение недели показал, что в среднем 25% рабочего времени (около 2 часов в смену) тратится на непроизводительные операции: ожидание задания от диспетчера, поездки в офис для получения материалов или сдачи отчетности, согласование деталей работ по телефону. Автоматизация процессов назначения задач и учета материалов позволила бы направить это время на выполнение дополнительных заявок, что напрямую увеличило бы выручку компании. При средней стоимости заказа в 2500 рублей и возможности выполнять на одну заявку больше в день каждым мастером, дополнительная ежемесячная выручка могла бы составить около 125 000 рублей (5 мастеров × 22 рабочих дня × 2500 рублей × 25% высвобожденного времени).

Следует также отметить, что существующая система учета не позволяет руководству компании получать оперативную информацию о ключевых показателях деятельности. Отчеты о выполненной работе формируются вручную бухгалтером в конце каждого месяца и содержат преимущественно финансовые показатели. При этом такие важные для управления метрики, как среднее время выполнения заявки, процент выполненных в срок заказов, количество заявок в разрезе каждого мастера, уровень удовлетворенности клиентов, остаются вне поля зрения руководства. Отсутствие данной информации затрудняет принятие управленческих решений, направленных на повышение эффективности деятельности компании. Внедрение информационной системы с развитой аналитической подсистемой позволило бы руководству получать актуальные данные в режиме реального времени и своевременно реагировать на негативные тенденции [14].

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

Еще одним важным аспектом, требующим автоматизации, является процесс информирования клиентов о статусе выполнения заявки. В настоящее время клиент вынужден самостоятельно звонить в диспетчерскую службу, чтобы узнать, когда прибудет мастер. Это создает дополнительную нагрузку на диспетчеров и вызывает недовольство клиентов, которые вынуждены ожидать неизвестно сколько времени. Внедрение функционала автоматического информирования клиентов о статусе заявки (например, через SMS-сообщения или push-уведомления в мобильном приложении) позволило бы повысить уровень сервиса и снизить нагрузку на диспетчерскую службу. Более $$$$, $$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$ на $$$$$ в $$$$$$$$ времени, $$$$$$$$$$$$$$$ $$$$$$$, $$$$$ бы $$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$ на $$$$$ $$$$$ $$$.

$$$$$$ $$$$$$$$$$$$ $$$$$$-$$$$$$$$$ $$$$$ $$$$$$ $$$$$$$$, $$$$$$$$$ $ $$$$$$$$$$$ $$$$$$ $$$$ $$$$$$ $$$ $$$$$$$$ $$$$$$$$$$$$. $ $$$$$$$ $$$$$$$, $$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$, $$$$$$ $$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$$ $$ $$$$$$$$$$$ $$$$ $$$ $$$$$$$ $$$$$ $$$$$$$ $$$$$$$$. $$$$$$$$$$ $$$$$$$$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$ $$$$$$$$$$$$$$ $ $$$$$$$ $$ $$$$$$$$$$ $$$$$$$ $$$$$$$$ $ $$$$$$$$ $$$$$$$$$$ $$$$$, $$$$$$$$ $$$ $$$$$$$ $$$$$$$$$$$$. $$$$$$$$$ $ $$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$$$ $ $$$$$$$$$ $$$$$$$ $$$$$$$$$$$$$$, $$$$$$$$$$ $$ $$$$$$$$$$$ $ $$$$$$$, $ $$$$$ $$$$$$$$ $$ $$$$$$$$$$ $$ $$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$ $$ $$$$$$$$ $$$$$$$ $$$$$$$$ $$$$$ $$$$$$$$$$$ $ $$$$$$$$ $$$$$$$$ $$$$$$$$$$ $$$$$ $$$$$ $$$$$$$$$$$$$ [$$].

$$$$$$ $$$$$$$, $$$$$$$$$$ $ $$$$ $$$$$$$, $$$$$$$$ $$$$$ $$$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$ $$$$$$$$ ($$:$$$$$$$$$$$). $ $$$$$$$$$ $$$$$ $$$$$$ $$ $$$$$$$$ $$$$$ $$$$$$$ $$$$$$$$$$$ $ $$, $$$ $$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$ $ $$$$$$$$$ $ $$$$$$ $$$$$$. $$$$$$$$$$$$$$ $$$$$$$$ $$$$$$ $ $$$$$$$$$$$ $$$$$$$ $ $$$$$$$$$$$$$$ $$$$$$$$$$ $$ $$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$$$$$ $$$$$$$ $$$$$$$$$ $$ $$$$$$$$$ $$$$$ $$ $$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$, $$$$$$$$$ $$$$$$ $$$$$$$$$$$$$ $$$$$$$ $ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$ $ $$$$$ $$$$$$$$.

$$$$$$$, $$$$$$$ $$$$$$$$, $$$ $$$$$$ $$$$$$-$$$$$$$$$ $$$$$$$$$$ $ $$$$$$ $$$$$$ $$$$ $$$$$$$$$$$$$$$$ $$$$$$: $$$$$$$$$$$ $$$$$$$$, $$$$$$$$$$$, $$$$$$$$ $$$$$$$$$$$$ $ $$$$$$$$$$$. $$$$$$ $$ $$$$ $$$$$ $$$$$ $$$$ $$$$$$$$$$ $ $$$$$$$ $$$$$$$$$$$$$$ $$$$$$$, $$$$$$$ $$$$$$ $$$$ $$$$$$ $$$ $$$$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$. $$$$$$$$, $$$$$$$$$$$ $$$$$$$$$$$$$$ $ $$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$, $$$$$$$$$$ – $ $$$$$$$ $$$$$$$$$$ $$$ $$$$$$$$$$$$$ $$$$$$, $$$$$$$ – $ $$$$$$$ $ $$$$$$$$$$ $$$$$$$$ $$$$$$$$$ $$$$$$$$$$, $ $$$$$$$$$$ – $ $$$$$$$$$$$$$$ $$$$$$$$ $$$$$$ $ $$. $$$$ $$$$ $$$$ $$$$$$$$$$ $$$$$$$$ $$$$$$$ $$$$$$$$$ $$$$$$$$$ $$$$$$$ $ $$ $$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$ [$].

$$$$$$$$$$$ $$$$$$ $$$$$$-$$$$$$$$$ $$$ «$$$$$$$$» $$$$$$$$$ $$$$$$$ $$$$$ $ $$$, $$$ $$$$$$$$$$$$ $$$$$$$ $$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$$$$$$ $$$$$$ $$$$$$$$ $$$$$$$$$$$$$, $$$$$$$$ $$$$$$$$$ $$$$$$ $$$$$$$$, $$$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$ $ $$$$$$$ $$$$$$ $$$$$$, $$$$$$$$$ $ $$$$$$$$$$$$ $$$$$$$$. $$$$$$$$ $$$$$$$$$$ $$$ $$$$$$$$$$$$$ $$$$$$$$ $$$$$$$$ $$$$$$ $ $$$$$$$$$$$ $$$$$$, $$$$$$$$$$$$$$$ $ $$$$$$$$$$ $$$$$$$$$$$$, $$$$$ $$$$$$$$$$$ $$$$$ $ $$$$$$$$$$, $$$$$$$$ $$$$$$$$ $ $$$$$$$$$$$$ $$$$$$$$$$. $$$$$$$$$$$$$ $$$$$$ $$$$$$$$$ $$$$$$$$ $$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$, $$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$ $$$$$$$ $$$$$$$$$$$$, $$$$$$$$ $$$$$$$$ $$$$$$$$$$$$ $$$$$$$$ $ $$$$$$$ $$$$$$ $$$ $$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$ $$ $$$$$$ $$$$$$$$$$$ $$$$$$. $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$ $$$$$$$$$ $$$$ $$$ $$$$$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$$$$$$$$ $$$$$$$$$$, $$$$$$$ $$$$$ $$$$$$$$ $$$$$$$$$$$ $ $$$$$$$$$ $$$$$$$.

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

На основании проведенного анализа бизнес-процессов ООО «Водоучет» и выявления узких мест, подлежащих автоматизации, необходимо сформулировать требования к разрабатываемому программному продукту. Формирование требований является ключевым этапом проектирования информационной системы, поскольку именно на данном этапе закладывается основа для последующей реализации и определяется соответствие будущего приложения потребностям заказчика. В рамках данного дипломного проекта требования разрабатывались с использованием методологии сбора требований, включающей интервьюирование ключевых сотрудников компании, анализ существующей документации и изучение лучших практик автоматизации деятельности выездных специалистов.

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

К числу ключевых функциональных требований относится необходимость реализации двух основных ролей пользователей: диспетчер (работающий с веб-интерфейсом на стационарном компьютере) и выездной специалист (работающий с мобильным приложением на смартфоне). Для каждой роли должен быть реализован соответствующий набор функций, обеспечивающий выполнение должностных обязанностей. В перспективе возможно добавление третьей роли – руководителя, который будет иметь доступ к аналитическим отчетам без возможности изменения оперативных данных.

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

Для роли выездного специалиста функциональные требования включают: авторизацию в мобильном приложении; просмотр списка назначенных заявок с указанием адреса, контактных данных клиента и описания работ; возможность просмотра маршрута до объекта на карте; возможность изменения статуса заявки (принята, выезжаю, на месте, выполнена); возможность заполнения акта выполненных работ с выбором типовых операций из справочника и указанием использованных материалов; возможность фотографирования выполненных работ и прикрепления снимков к заявке; возможность просмотра истории своих выполненных заявок; возможность получения push-уведомлений о новых назначениях.

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

С точки зрения нефункциональных требований, приложение должно обладать высокой степенью надежности и отказоустойчивости. Учитывая, что система будет использоваться в операционной деятельности компании, простой или сбои в ее работе могут привести к срыву выполнения заявок и финансовым потерям. В связи с этим необходимо предусмотреть резервное копирование данных и возможность восстановления системы после сбоя. Кроме того, приложение должно обеспечивать корректную работу при нестабильном интернет-соединении, что особенно актуально $$$ $$$$$$$$ $$$$$$$$$$$$, $$$$$$$$$$ в $$$$$$$$$ $$$$$$$ $$$$$$. В $$$$$$$$ $$$$$$$ $$$$$$ $$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$ $$$$$$-$$$$$$, при $$$$$$$ $$$$$$ $ $$$$$$$$$$$ работе $$$$$$$$$$$ $$$$$$$$ $$ $$$$$$$$$$ $$$$$$$$$$$ и $$$$$$$$$$$$$ $$$$$$$$$$$$$$$$ с $$$$$$$$ при $$$$$$$$$$$$$$ $$$$$$$$$$ [$].

$$$$$$$$$$ $ $$$$$$$$$$$$$$$$$$ $$$$$$$ $$$$$ $$$$$$$$ $$$$$$$$$$ $$$$$$$. $$$$$ $$$$$$$ $$$$$$$$$$ $$$ $$$$$$$$$$ $$$$$$$$ $$$$$$$$ ($$$$$$$$ $$$$$$ $$$$$$, $$$$$$$$$ $$$$$$$, $$$$$$$$$$ $$$$$$) $$ $$$$$$ $$$$$$$$$ $-$ $$$$$$ $$$ $$$$$$$$$$$$$ $$$$$$ $$ $$ $$$$$$$$$$$$$. $$$$$$$ $$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$ $$ $$$$$ $$$ $$$$$$ $ $$$$$ $$$ $$$$$$$$ $$$$$$$$$$$$$$$$$$. $$$ $$$$$$$$$$ $$$$$$ $$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$ $$$$ $$$$$$, $$$$$$$$$$$$ $$$$$$$$$$$ $$$$$ $$$$$$$$$$$$$ $$$$$$ $ $$$$$$$$$$ $$$$$$$$$$$ $$$$$$ $$$$$$$$$ $$$$$ $$$$$$$$$$.

$$$$$$$$$$ $ $$$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$ $$$$$$$$: $$$$$$$$$$$$$ $$$$$$$ $ $$$$$$ $$ $$$$$$ $$$$$ $$$$$$$$$$$$$; $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$ $$$$$ $$$$$$$$$ $$$$$$$$$$$ $ $$$$$$$$ $ $$$$$$$$$$$$$$ $$$$$$$$$ $$$$$; $$$$$$$$ $$$$$$$ $$$$$$$$$$$$$ $ $$$$$$$$$$$$ $$$$; $$$$$$$ $$$$$$$ $$$$$$ $$$$ $$$$$$$$ $$$$$$$$$$$$$ $$$ $$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$. $$$$$$ $$$$$$$$ $$$$$$$ $$$$$$$ $$$$$$ $$$$$$$$$$$$ $$$$$$ $$$$$$$$ ($$$, $$$$$, $$$$$$$), $$$ $$$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$ № $$$-$$ «$ $$$$$$$$$$$$ $$$$$$».

$$$$$$$$$$ $ $$$$$$$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$ $$$ $$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$ $$$$$$$$. $$$$$$$$, $$$ $$$$$$$$$$$$$$ $$$$$$$ $$$$$ $$$$$$$$$$ $ $$$$$$$$$ $$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$, $$$$$$$$$ $$$$$$ $$$$ $$$$$$$$$$$ $$$$$$$ $ $$ $$$$$$$$$$$$$ $$$$$$$ $$$$$$$$$$. $$$$$$$$$ $$$$$$$$$$ $$$$$$ $$$$ $$$$$$$$$$$$$$ $$$ $$$$$$ $$ $$$$$$$$$$$ $ $$$$$$$$$$ $$$$$$ $$ $ $$$$$$ $ $$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$ $$$$$$$ $$$$$$ $$ $$$$ $.$. $$$-$$$$$$$$$ $$$$$$$$$$ $$$$$$ $$$$$$$$$ $$$$$$$$$$$$ $ $$$$$$$$$$$ $$$$$$$$$ ($$$$$$ $$$$$$, $$$$$$.$$$$$$$, $$$$$$$ $$$$$$$) $ $$$$ $$$$$$$$$$$$$$ $$$ $$$$$$ $$ $$$$$$$ $ $$$$$$$$$$$ $$ $$$$$ $$$$×$$$ $$$$$$$$.

$$$$$$ $$$$$$$$$$$ $$$$$$$$ $$$$$ $$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$ $$$$$$$$ $$ $$$$ $$:$$$$$$$$$$$. $$$$$$$$$$ $$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$ $$$$$$ $ $$$$$$$$$$$ $$$$$$$ $ $$$$$$$$$$$$$$ $$$$$$$$$$ $$ $$$$$$$$$$ $ $$ $$$ $$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$ $ $$$$$ $$$ $$$$$$$$, $ $$$$$ $$$ $$$$$$$ $$$$$$$$$$$$$$ $$$$$. $$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$ $$$$ $$$, $$$$$$$ $$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$$$$$$$$ $$$$$ $$$$$$$ $$$$$ $$$$$$$$$ [$$].

$$$$$$$$$$ $ $$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$ $$$ $$$$$$ $$$$ ($$$$$$$$$ $ $$$$$$$$ $$$$$$$$$$), $ $$$$$ $$$$$$$$$$$ $$$$$$$$$$$$, $$$$$$$$$$ $$$$$$$$ $$$$$$$$$$$ $$$$$$$, $$$$$$$$$ $$$$ $$$$$$ $ $$$$$$$$$$ $$ $$$$$$$$$$$$$ $ $$$$$$$$$$$$$$$$$ $$$$$$$$$$. $$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$ $$$$$$$$$$$$ $$$$$$$$ $$$ $$$$$$$$$ $$$$$$$$$ $ $$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$.

$ $$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$ $$$$$ $$$$ $$$$$$ $$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$ $$$$$$$. $ $$$$$$$$$, $$$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$ $$$$$$ $$$$$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$ $$ $$$$$$ $$$$$$$$$$ $$$$$$$$$$$, $$$$$$ $$$$$$$$$$ $ $$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$$$$, $ $$$$$ $$$$$$ $$$ $$$$$$$$ ($$$$$$ $$$$$$$ $$$ $$$$$$$$$$$$ $$$$$$$ $$$$$$ $ $$$$$$$ $$$$$$$$$$$$). $$$$$$ $$$$$$$$$$$ $$ $$$$$$$$ $$$$$$$$$$$$$ $$$ $$$$$$$ $$$$$$ $$$$$$$$$$, $$$$$$ $$$$$$$$$$$ $$$$$$$ $$$$$$ $$$$ $$$$$$$$$$$$$$ $$$$$ $$$$$$$, $$$$$ $$ $$$$$$$$$$ $$ $$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$$ $$$$ [$$].

$$$$$ $$$$$$$, $$$$$$$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$$ $$$$$$$$$$ $$$ $$$$$$$$$$$$$$ $$$$$$$, $$$$$$$$$$$ $$$ $$$$$$$$$$$$$ $$$$$$$$ $$$$$$-$$$$$$$$$ $$$$$$$$, $$$ $ $$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$, $$$$$$$$$$$$$$ $$$$$$$$$$, $$$$$$$$$$$$, $$$$$$$$$$$$$$$$$$ $ $$$$$$$$ $$$$$$$$$$$$$ $$$$$$$. $$$$$$ $$$$$$$$$$ $$$$$$$$ $$$$$$$ $$$ $$$$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$, $$$$$$$$$ $$$$ $$$$$$ $ $$$$$$$$$$$$$$$$ $$$$$$$$$$$, $$$$$$$ $$$$$ $$$$$$$$ $$$$$$$$$$$ $$ $$$$$$ $$$$$ $$$$$$$$$$ $$$$$$$.

Помимо функциональных и нефункциональных требований, важное значение имеет формулирование требований к интерфейсу пользователя, которые обеспечивают комфортную и эффективную работу с системой. Учитывая, что значительная часть пользователей (выездные специалисты) будет работать с мобильным приложением в полевых условиях, зачастую при плохом освещении или в ограниченном пространстве, интерфейс должен быть спроектирован с учетом эргономических принципов. Крупные кнопки, контрастные цвета, четкий шрифт и минимальное количество текстовых полей для ввода являются обязательными требованиями. Навигация по экранам приложения должна быть интуитивно понятной и не требовать от пользователя запоминания сложных последовательностей действий. Для веб-интерфейса диспетчера, напротив, допустимо большее количество информационных элементов, однако они должны быть логически сгруппированы и обеспечивать быстрый доступ к наиболее востребованным функциям.

Требования к обработке ошибок и исключительных ситуаций также являются неотъемлемой частью технического задания. Система должна корректно обрабатывать ситуации, когда пользователь вводит некорректные данные (например, неверный формат номера телефона или адреса), и выводить понятные сообщения об ошибке с указанием способа ее исправления. В случае возникновения ошибок на стороне сервера (например, недоступность базы данных или сбой сетевого соединения), приложение должно уведомить пользователя о временной недоступности функции и предложить повторить попытку позже. Для мобильного приложения критически важна обработка ситуации потери интернет-соединения во время заполнения акта выполненных работ – данные должны быть сохранены локально и автоматически отправлены при восстановлении связи.

Важным аспектом требований к разработке является также необходимость обеспечения возможности тестирования системы на всех этапах ее создания. Для этого в требованиях должна быть предусмотрена возможность запуска приложения в тестовом режиме с использованием фиктивных данных, а также наличие инструментов для логирования действий пользователей и системных событий. Это позволит разработчику и тестировщику выявлять и устранять ошибки до передачи системы в промышленную эксплуатацию.

Следует также отметить, что требования к разработке были согласованы с руководством ООО «Водоучет» и утверждены в качестве технического задания на выполнение дипломного проекта. В процессе согласования были внесены незначительные корректировки, касающиеся приоритетности реализации отдельных функций. В частности, заказчик подтвердил, что наиболее важными функциями, которые должны быть реализованы в первую очередь, являются: прием и распределение заявок, ведение актов выполненных работ в мобильном приложении и формирование базовых отчетов. Функции интеграции с 1С и автоматического информирования клиентов были отнесены к приоритету второй очереди, однако их реализация также предусмотрена в рамках данного дипломного проекта [1].

В процессе формулирования требований также были учтены ограничения, связанные с бюджетом проекта и сроками разработки. Учитывая, что разработка ведется в рамках дипломного проектирования одним студентом, было принято решение об использовании технологического стека, обеспечивающего оптимальный баланс между функциональностью, производительностью и сложностью реализации. В качестве серверной части было выбрано веб-приложение на языке PHP с использованием фреймворка Laravel, в качестве базы данных – MySQL, $$$ $$$$$$$$$$ $$$$$$$$$$ – $$$$$$$$ разработка $$$ $$$$$$$ на языке $$$$$$. $$$$$$ $$$$$ $$$$$$$$$$ $$$ $$$$$$$$$$$$$$$$$$$ и $$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$, $$$ и $$$$$$$$ $ $$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$.

$$$$$$$$$$ $ $$$$$$$$$$$$$$$$ $$$$ $$$$$ $$$$ $$$$$$$$ $ $$$$$$$$$$$ $$$$$$$. $$$$$$$$ $$$ $$$$$$$$$$ $$$$$$ $$$$ $$$$$$$ $ $$$$$$ $$$$$, $$$$$$$$$ $$$$$$$$$$$ $ $$$$$$$ $$$$$$$$ $ $$$$$$$$$$$$$$$ $$$$$$$$$$, $$$$$$$$ $$$ $$$$$$$$$$$$ $$$$$$ $$$$$$$$$$$$$$$$. $$$ $$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$$ $ $$$$$$$$$ $$$$$$$ $ $$$$$$$, $ $$$ $$$$$ $$$$$$$ $$$$$$$$$$$$$$.

$$$$$$ $$$$$$$$$$$, $$$$$$$$$$ $$$$$$$$$$, $$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$$$$ $$$$$$$. $ $$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$ $$$$$ $$$$$$$$ $$$$$$$$$$$$ $$ $$ $$$$$$$, $ $$$$$ $$$$$$$$$$ $$$$$ $$$$$ $$$$$. $$$$$$$$$$$ $$$$$$$$$$ $$$$$$ $$$$ $$$$$$$$$$$$$$ $$$$$ $$$$$$$, $$$$$ $$$$$$$$$$ $$$$$ $$$$$$$$$$$$$ $ $$$$$$$ $$ $$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$$ $$$$. $$$ $$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$, $$$ $$$$$$$ $$$$$$ $$$$$$$$$$$$$$ $$$$ ($$$$$$$$$$$$$$$, $$$$ $$$$$$$$$$, $$$$$$$$$$) $$$$$$$$$$ $ $$$$ $$$$$$$$$$$$ $$$$$$ $ $$$$$ $$$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$$ [$$].

$ $$$$ $$$$$$$$$$$$$$ $$$$$$$$$$ $$$$$ $$$$ $$$$$$$$$$$$$$$$ $$$$$, $$$$$$$ $$$$$ $$$$$$$$$$ $ $$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$ $$$$$$$. $ $$$$$ $$$$$$$$ $$$$$$ $$$$ $$$$$$$$: $$$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$ $$$ $$$$$$ $ $$$$$ $$$$$$$$$$$, $$$$$$$$$$$$$ $$$$$$$$$$ $$ $$$$$$$ $$$$$$$$$$$, $$$$$$$$$ $$$$$$$$$$$ $$$$$$$$ $$$ $$$$$$$$$$ $ $$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$, $ $$$$$ $$$$$, $$$$$$$$$ $ $$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$. $$$ $$$$$$$$$$$ $$$$$$ $$$$$$ $ $$$$$$$$$$ $$$$ $$$$$$$$ $$$$$$$$$$$ $$ $$$$$$$$ $$$$$$$$$$$$$, $$$$$$$$ $$$$$$$$$ $$$$$$$$$$$$, $ $$$$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$ $$$$$$$ $ $$$$$$$$$$$$ $$$$$$$ $ $$$$$$ $ $$$$$ $$$$$$ $ $$$$$$$ $$$$$$$$$$$ $$$$$$$.

$$$$$ $$$$$$$, $$$$$$$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$ $$$$$$$$$$$ $$$$$$$$, $$$$$$$$$$$$ $$$ $$$$$$$$ $$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$. $$$$$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$, $$$ $$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$, $$$$$$$$$$ $ $$$$$$$$$$, $$$$$$$$$$$$, $$$$$$$$$$$$$$$$$$ $ $$$$$$$$$$. $$$$$$$ $$$$$ $$$$$$$$$$$$$$$$ $ $$$$$$$$$$$$$ $ $$$$$$$$$$ $$$$$$$$$$ $$$$$$$$ $$$$$$$$$$$ $$$$$$$$ $$$ $$$$$$$$$ $$$$$$$$$$$$$$ $ $$$$$$$$$$ $$$$$$$$$$, $$$$$$$ $$$$$ $$$$$$$$$ $$$$$$$$$$$$$$$ $$$$$$$$$$$$ $$$ «$$$$$$$$» $ $$$$$$$$ $$$$$$$ $$$$$$$$$$$$ $$$$ – $$$$$$$$$ $$$$$$$$$$$$$ $ $$$$$$$$ $$$$$$$$$$$$ $$$$$$$$ $$ $$$$ $$$$$$$$$$$$$ $$$$$$$$$ $$$$$, $$$$$$$$ $ $$$$$$$$$$$$$$$ $$$$$, $$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$$$.

Проектирование структуры приложения

На основе сформулированных требований к разработке и анализа бизнес-процессов ООО «Водоучет» осуществляется проектирование структуры приложения, которое является ключевым этапом создания информационной системы. Проектирование структуры предполагает определение архитектуры программного продукта, выделение основных функциональных модулей, установление связей между ними, а также описание логики взаимодействия пользователей с системой. Правильно спроектированная структура обеспечивает гибкость, масштабируемость и надежность будущего приложения, а также упрощает процесс его реализации и последующего сопровождения.

В рамках данного дипломного проекта была выбрана клиент-серверная архитектура, которая является наиболее распространенной для разработки корпоративных информационных систем. Данная архитектура предполагает разделение системы на две основные части: серверную (backend), которая отвечает за хранение и обработку данных, реализацию бизнес-логики и предоставление API для клиентских приложений, и клиентскую (frontend), которая обеспечивает пользовательский интерфейс и взаимодействие с сервером. Выбор клиент-серверной архитектуры обусловлен необходимостью обеспечения одновременного доступа к данным нескольких пользователей (диспетчеров и выездных специалистов), централизованного хранения информации и возможности масштабирования системы.

Серверная часть приложения реализована в виде веб-приложения, развернутого на выделенном сервере компании. Веб-приложение выполняет функции обработки HTTP-запросов от клиентских приложений, взаимодействия с базой данных, аутентификации и авторизации пользователей, а также реализации бизнес-логики. Для обеспечения модульности и удобства сопровождения серверная часть построена с использованием архитектурного паттерна MVC (Model-View-Controller), который позволяет разделить логику представления данных, бизнес-логику и управление потоками данных. Данный подход широко применяется при разработке веб-приложений и зарекомендовал себя как эффективный способ организации кода [16].

Клиентская часть приложения представлена двумя компонентами: веб-интерфейсом для диспетчера и мобильным приложением для выездного специалиста. Веб-интерфейс реализован с использованием технологий HTML, CSS и JavaScript и предназначен для работы в браузере на стационарном компьютере. Мобильное приложение разработано для операционной системы Android и предназначено для использования на смартфонах выездных специалистов. Оба клиентских приложения взаимодействуют с серверной частью через REST API, который обеспечивает стандартизированный обмен данными в формате JSON.

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

Модуль управления пользователями и аутентификации отвечает за регистрацию новых пользователей, их авторизацию в системе, управление ролями и правами доступа. В рамках данного модуля реализованы функции создания учетных записей для диспетчеров и выездных специалистов, сброса пароля, а также ведения журнала сессий пользователей. Для обеспечения безопасности используется механизм аутентификации на основе JWT-токенов, который позволяет передавать данные аутентификации между клиентом и сервером без необходимости хранения состояния на сервере.

Модуль управления заявками является центральным модулем системы и обеспечивает выполнение всех операций, связанных с жизненным циклом заявки: создание, редактирование, просмотр, $$$$$$$$$ $$$$$$$, $$$$$$$$$$ $$$$$$$$$$$, $$$$$$$$. $$$$$$ $$$$$$ $$$$$ $$$$$$$$ $$$$$$$ $$$$$$ и $$$$$$$$$$ $$$$$$ $$ $$$$$$$$$ $$$$$$$$$ ($$$$$$, $$$$, $$$$$$$$$$, $$$$$), $$$ $$$$$$$$$ $$$$$$$$$$ $$$$$$ $$$$$$$$ $$$$$$ $$$$$$$$$$. $$$$$$ $$$$$$$$$ $$$$$$$$ заявки $$$$$$$$$$$ $ $$$$ $$$$$$$$$ $$$$$$$$, $$$ обеспечивает $$$$$$$$$$ $$$$$$$$$$$$$$$$$$ $$$$$$$$$ и $$$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$ $$$$$$$$$$$$.

$$$$$$ $$$$$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$ $$$$$$$$$$$$$ $$$$$$ $$$$$ $$$$$$$$$ $$$$$$$$$$$$$. $ $$$$$$$ $$$$$$ $$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$ $$ $$$$$$ $$$$$$$$$$ $ $$$$$$$ $$$$$$$$$$$$$ $ $$$$$$$$$$$$$$ $$$$$$$$$$$$, $$$$$$$$$$$$ $$ $$$$$. $ $$$$$$$$$$$ $$$$$$ $$$$$$ $$$$$ $$$$ $$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$ $$ $$$$$$ $$$$$$$$$$$$$$$ $$$$$$$, $$$$$$ $ $$$$$$ $$$$$$$ $$$$$$$ $$$$$$$$$$ $$$$$$ $$$$$$ $$$$$ $ $$$$$$$$$$ $$$$$$$$$$ $$$$$$$$ $$$$$$$. $$$$$$ $$$$$ $$$$$$$$ $$$$$$$ $$$$$$$$$ $$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$, $$$ $$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$ $$$$$$$.

$$$$$$ $$$$$ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$ $$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$$$$$, $$$$ $$$$$$$$$$$ $ $$$$$$$$ $$$$$$$$$$, $ $$$$$ $$$$$$$$ $$$$$$$$ $$ $$$$$$ $ $ $$$$$$$ $$$$$$$$$$$. $$$$$$ $$$$$$ $$$$$ $$$$$$ $ $$$$$$$ $$$$$$$$$$ $$$$$$$$, $$$$$$$$$ $$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$ $$ $$$$$$$$$ $$$$$$, $$$$$$$$$ $ $$$$ $$$$$$$$$$$ $$$$$. $$$$$$ $$$$$ $$$$$$$$$ $$$$$$$$$$$ $ $$$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$ $$$ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$, $$$ $$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$ $ $$$$$$$$ $$$$$$$$.

$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$ $$ $$$$$$$$$$$ $$$$$$$, $$$$$$$$$$$$$$ $$$$$$$$$$, $$$$$$$$$$$$$ $$$$$$ $$$$$$$$$$$$ $ $$$$$$ $$$$$$$$$$$. $$$$$$ $$$$$ $$$$ $$$$$$$$$$$$ $$ $$$$$$$$$$$$ $$$$$$ $$$$$$$ $ $$$$$$$$$$$$ $ $$$$ $$$$$$ $ $$$$$$$$. $$$$$$ $$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$$$ $$$ $$$$$$$$$$$ $$$$$$$$ $ $$$$$$$$$ $$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$$$$ $$$$$$$$$$$ $$$ $$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$ [$].

$$$$$$ $$$$$$$$$$ $ $$ $$$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$ $$$$$$$ $$$$$ $$$$$$$$$$$$$$$ $$$$$$$$$$$ $ $$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$ $$$$$$$$. $$$$$$$$$$ $$$$$$$$$$$ $$$$$ $$$$ $$$, $$$ $$$$$$$$$ $$$$$$$$$$ $$$$$$ $ $$$$$$$$$$$ $$$$$$$ $ $$$$$$$$$$$$$$ $$$$$$$$$$ $ $$ $$$ $$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$ $ $$$$$. $$$$$$ $$$$$$ $$$$$$$$ $$$$$$$$$$ $$$$$$ $$$ $$$$$$$$$$$ $$$$$$$$ $$$$$$$$$$$$$ $$$$$$-$$$$$$$$$ $ $$$$$$$$$$ $$$$$$$$ $$$$$ $$$$$$.

$$$$$$ $$$$$$$$$$$ $$$$$$$$ $$ $$$$$$$$ $$$$-$$$$$$$$$$$ $$$$$$$$ $$$$$$$$$$$$ $ $$$$$ $$$$$$$$$$$, $ $$$$$ $$ $$$$$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$ $ $$$$$$$ $$$$$$$$$$ $$$$$$ $$$$$ $$$-$$$$$$$$$ $$$ $$$$$. $$$$$$ $$$$$$ $$$$$$$$ $ $$$$$$$ $$$$$$ $ $$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$ $$$$ $$$$$$$$$$$$$$$$ $$$$$$.

$$$$$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$$$$ $$$$$$$$$$$$$$$$$ $$$$$$ $ $$$$$$$ $$$$$$$$$$$$$$, $$$$$$$ $$ $$$$$$$$$$, $ $$$$$ $$$$$$$$$$ $$ $$$$$$$$$$$$ $$$$$$$$$$$$. $$$$$$ $$$$$$ $$$$$$$$ $$$$$$$$ $$$$$$$$$$$$ $$$$$ $$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$ $$$$$$ $$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$ $$$$$$$$$$ $$$$$.

$$$$$$ $$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$ $$$$$$$$ $$$$$ $$$$$$$$$$$ $$$$$ $$$$$$$$$$$$$$ $$$$$ $$$$$$$$. $$$$$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$ $$$$$ $$$$$$$$$$$$ $$$$$$$$$$, $$$ $$$$$$$$$$$$ $$$$$$ $$$$$$$$$$$ $$$$$$$ $ $$$$$$$$$$$ $$ $$$$$$$$$$$ $$$$$$$$$$$. $$$$$$$$$$$ $$$$$$$$$, $$$$$$$$$$$$$$ $$$$$$ $$$$ $$$$$$$, $$$$$$$$ $$$$ $$$$$$$, $$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$, $$$$$$$$$$ $$$$$$$$$$$$ $ $$$$$$$$$ $$$$$$ [$$].

$$$$$ $$$$$$$, $$$$$$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$ $$$$$$$$$ $$$$$$-$$$$$$$$$ $$$$$$$$$$$, $$$$$$$$$$$$$$ $$$$$$$$, $$$$$$$$$$$$$$$$ $ $$$$$$$$$$ $$$$$$$. $$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$ $$$$$$$$$ $$$$$$$$$ $$$$$$$$$$, $$$$$$$$$$$$$$$$ $ $$$$$$ $$$$$, $ $$$$$$$ $$$$$$ $$$ $$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$ $$$$$$ $ $$$$$$$$$$$$$$$$ $$$$$$$$$$$.

Помимо определения функциональных модулей и их взаимодействия, важным аспектом проектирования структуры приложения является детальная проработка логики работы каждого модуля, а также описание потоков данных между ними. Для наглядного представления архитектуры системы и последовательности выполнения операций целесообразно использовать диаграммы UML, в частности диаграмму вариантов использования (use case diagram) и диаграмму последовательности (sequence diagram). Данные инструменты позволяют формализовать требования к системе и служат основой для последующей реализации.

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

Диаграмма последовательности позволяет описать взаимодействие между объектами системы во времени для реализации конкретного сценария. Например, для сценария «Назначение заявки специалисту» диаграмма последовательности будет включать следующие шаги: диспетчер выбирает заявку из списка, система отображает детальную информацию по заявке, диспетчер выбирает специалиста из списка доступных, система проверяет доступность специалиста, система обновляет статус заявки на «назначена», система отправляет push-уведомление специалисту, система обновляет список заявок на экране диспетчера. Данная детализация позволяет выявить потенциальные проблемы на ранних этапах проектирования и обеспечить корректную реализацию бизнес-логики.

Важным элементом проектирования структуры приложения является также определение форматов данных, используемых для обмена между клиентской и серверной частями. Как было отмечено ранее, для взаимодействия используется REST API с форматом данных JSON. Для каждого эндпоинта API определены метод HTTP (GET, POST, PUT, DELETE), входные параметры и формат ответа. Например, для получения списка заявок используется GET-запрос к эндпоинту /api/orders с возможностью передачи параметров фильтрации (status, date_from, date_to, specialist_id). Ответ возвращается в виде JSON-массива объектов, каждый из которых содержит поля: id, address, client_name, client_phone, description, status, specialist_id, created_at, updated_at. Такая стандартизация обеспечивает согласованность данных и упрощает разработку как серверной, так и клиентской частей.

При проектировании структуры приложения особое внимание было уделено обеспечению безопасности данных. Для защиты API от несанкционированного доступа используется аутентификация на основе JWT-токенов. При авторизации пользователя сервер генерирует токен, который передается клиенту и должен быть включен в заголовок каждого последующего запроса. Сервер проверяет валидность токена и извлекает из него информацию о пользователе и его роли. Для обеспечения дополнительной безопасности токены имеют ограниченный срок действия (24 часа), после чего требуется повторная авторизация. Кроме того, для всех запросов, изменяющих данные (POST, PUT, DELETE), выполняется проверка прав доступа на основе роли пользователя.

Еще одним важным аспектом проектирования является обеспечение отказоустойчивости системы. Для этого предусмотрена обработка исключительных ситуаций на всех уровнях приложения. На уровне сервера реализован централизованный обработчик ошибок, который перехватывает все исключения и возвращает клиенту структурированный ответ с кодом ошибки и описанием проблемы. На уровне клиентских приложений реализована обработка ошибок сети и сервера с выводом понятных пользователю сообщений. Для мобильного приложения $$$$$ реализована $$$$$$$$$ $$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$, $$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$ $$$$$$ на $$$$$$ $$$ $$$$$$$$$$$$$$ $$$$$$$$$$ [$$].

$$$$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$ $$$$$ $$$$$$$$ $$$$$$$$$$$ $$$$$ $$$$$$$$$ $$$ $$$$$$$$$$ $$$$$$$$$$. $$$ $$$-$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$ $$$$$$$: $$$$$$$ $$$$$$$$ ($$$$$$ $$$$$$$$$$), $$$$$$$$ $$$$$$ $$$$$$, $$$$$$$$ $$$$$$$$/$$$$$$$$$$$$$$ $$$$$$, $$$$$$$$ $$$$$, $$$$$$$$ $$$$$$$, $$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$, $$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$$$. $$$$$$$$$ $$$$$ $$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$ $$$$$$$ $$$$, $$$$$$$ $$$$$$$$ $$ $$$$ $$$$$$$$$. $$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$ $$$$$$$: $$$$$ $$$$$$$$$$$, $$$$$$$ $$$$$ ($$$$$$ $$$$$$), $$$$$ $$$$$$$$$ $$$$$$$$$$ $$ $$$$$$, $$$$$ $$$$$$$$$ $$$$$$$, $$$$$ $$$$$$$$$$ $$$$, $$$$$ $$$$$$$ $$$$$$, $$$$$ $$$$$$$$$$ $$$$$$$$$$. $$$$$$$$$ $ $$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$ $ $$$$$$$$$$$$$$ $$$$$$ $$$$$$ $$$$$$$$$ $ $$$$$$ «$$$$$».

$$$$$$ $$$$$$$$, $$$$$$$$ $$ $$$$$ $$$$$$$$$$$$$$ $$$$$$$$$, $$$$$$$$ $$$$$ $$$$$$$$$ $$$$$$$$$$$$$ $$$$$$ $$$ $$$$$$$$$$ $$$$$$$$$$. $$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$-$$$$$$$$$$, $$$$ $$$$$$$ $$$$$$$$$ «$$$$$$-$$$$$$» ($$$$$$$-$$$$$). $$$$$$ $$$$$$$$$ $$$$$$$$$$$$, $$$ $$$$$$$$$$ $ $$$$$$ $$$$$$$ $$$$$$$$$ $$$$$$ $$$$$$$$ $$ $$$$$$$$$$ $ $$$$ $$$$$ $$$$$$$$$$$$$$ $$ $ $$$$$$$$. $$$ $$$$$$$$$$ $$$$$$$$ $$$$$$ $$ $$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$ $$$$ $$$$$$ $$$$$$, $$$$$$$ $$$$$$$$$$$$ $$$$$$$ $$$$$$ $ $$$$$$ $$$$ $$$ $$$$$$$$$$ $$$$. $$$$$$$$$$$$$ $ $$$$$$$$ $$$$$$$$$$$ $ $$$$$$$ $$$$$$ $$$ $$$$$$$ $$$$$$$$$$$ $$$$$$$$-$$$$$$$$$$. $$$$$$ $$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$ $$$$$$$$$$$ $$$$$$$$$$ $$ $$$$$$$$ $$$$$.

$$$ $$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$$$$ $$$$$$$ $ $$$$$$$, $$$$$$$$$$$ $$$$$$$$$ $$$$$ $$$$ $$$$$$$$$$$$$$ $ $$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$. $ $$$$$$$$$, $$$$$$$$$ $$$$$$$$$$ $$$$$$$$ $$$$$$$$$ ($$ $$$$$$ $$$$$$$$$ $$$$$ $$$$$$$$$), $$$ $$$$$$$$$ $$$ $$$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$$$$$ $$$$$$$$ $$$$$ $$$$. $$$$ $$$$$$ $$$$$ $$$$$ $$$$ $$$$$$$$$$$$$$ $$$$$ $$$$$$$$$$ $$$$$$ $$$ $$$$$$ $ $$$$$$$$$$$$. $$$$$$ $$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$ $ $$$$$ $$$$$$$$$$ $$$$$$$$$$$$$ $ $$$$$$ $$$$$$ $$$ $$$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$.

$ $$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$ $$$$$ $$$$ $$$$$$ $$$$$$$$$$ $ $$$$$$$$$$$$. $$$ $$$$$$$ $$$$$$ $$$$$$$$$$ $$$$$$ $$$$$$, $$$$$$$ $$$$$$ $$$$ $$$$$$$$$$$ $$ $$$$$ $$$$$$$$$$. $$$ $$$$$$$$$ $$$$$ $$$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$$ ($$$$-$$$$$) $$$ $$$$$$$$ $$$$$$$$$$$$ $$$$$$ $$$$$$$$$ $$$$$$$ $ $$$$$$$$$$$$$$ $$$$$$$$$$$$ $$$ $$$$$$$$ $$$$$$$$$$$$$$ $$$$$ $$$$$$$$. $$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$$ $$-$$$$$$$$$$$$ $$$ $$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$ $$$$$$$$$$$$$$$$ $$$$$$$$. $$$$$$$ $$$$$ $$$$$$$$$$$$ $$$$$$$$ $$$$$$$$$ $$ $$$$$ $$$$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$ $$$$$$$ $$$$$$$$ $$$$$$$$$ $$$$$$$$ $ $$$$$$$$$$$$$$ $$$$$$$$$$ $$$$$$ [$$].

$$$$$ $$$$$$$, $$$$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$ $$$$$$$$$$$ $$$$$$$, $$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$, $$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$, $$$$$$$$ $$ $$$$$$$$$$$$$$, $$$$$$$$$$ $$$$ $$$$$$$$$ $ $$$$$ $$$$$$$$$ $$$$$$$$$$$$$ $$$$$$. $$$$$$$$$$$ $$$$$$$ $$$$$ $$$$$$$$ $$$$$$$$$ $$$$$$$$$$$$$ $$$$$ $$$$$$$, $$$$$$$ $$$$$$ $$$$$$$ $$$ $$$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$ $$$$$$ $ $$$$$$$$$$$$$$$$ $$$$$$$$$$$. $$$$$$$$$$$$$$$$ $$$$$$$$$ $ $$$$$$ $$$$ $$$$$$$$$$$$$ $$$$$$$$$$$, $$$$$$$$$$$$$$$$ $ $$$$$$ $$$$$, $ $$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$ $$$$ $$$$$$$$$$ $$$$$$$ $ $$$$$$ $$$$$$$$$$ $ $$$$$$$$$$$$$$$$$$, $$$$$$$$$$$$ $ $$$$$$$$$$$$$$$$.

Проектирование базы данных

Проектирование базы данных является одним из ключевых этапов создания информационной системы, поскольку именно структура данных определяет возможности системы по хранению, обработке и предоставлению информации. Для разрабатываемого приложения, ориентированного на автоматизацию работы выездных специалистов ООО «Водоучет», база данных должна обеспечивать надежное хранение информации о заявках, пользователях, материалах, выполненных работах и других сущностях, а также поддерживать эффективное выполнение запросов при одновременной работе нескольких пользователей.

В рамках данного дипломного проекта в качестве системы управления базами данных (СУБД) выбрана MySQL, которая является одной из наиболее распространенных реляционных СУБД с открытым исходным кодом. Выбор MySQL обусловлен ее высокой производительностью, надежностью, поддержкой транзакций и широкими возможностями масштабирования. Кроме того, MySQL хорошо интегрируется с выбранным стеком технологий для серверной части приложения (PHP, Laravel) и имеет развитые инструменты для администрирования и резервного копирования.

Проектирование базы данных начинается с построения концептуальной модели данных, которая представляет собой описание предметной области в терминах сущностей и связей между ними. Для визуализации концептуальной модели используется диаграмма «сущность-связь» (ER-диаграмма), которая позволяет наглядно представить структуру данных и определить ключевые сущности, их атрибуты и типы связей.

В результате анализа предметной области и требований к разработке были выделены следующие основные сущности: «Пользователь», «Роль», «Заявка», «Статус заявки», «Специалист», «Клиент», «Акт выполненных работ», «Материал», «Складская операция», «Отчет». Каждая из этих сущностей имеет набор атрибутов, описывающих ее свойства, и связана с другими сущностями определенными отношениями.

Сущность «Пользователь» содержит информацию обо всех пользователях системы, включая диспетчеров и выездных специалистов. Основные атрибуты данной сущности: идентификатор пользователя, фамилия, имя, отчество, логин, пароль (в хешированном виде), адрес электронной почты, номер телефона, идентификатор роли, дата создания и дата последнего обновления записи. Связь с сущностью «Роль» позволяет разграничивать права доступа пользователей к различным функциям системы.

Сущность «Роль» содержит перечень возможных ролей в системе: «диспетчер», «выездной специалист», «руководитель». Каждая роль имеет уникальный идентификатор и наименование. В перспективе возможно добавление новых ролей без изменения структуры базы данных.

Сущность «Заявка» является центральной сущностью базы данных и содержит информацию о каждой поступившей заявке от клиента. Основные атрибуты: идентификатор заявки, дата и время создания, описание неисправности, адрес объекта, желаемая дата и время визита, идентификатор клиента, идентификатор назначенного специалиста, идентификатор статуса заявки, приоритет, комментарий диспетчера, дата и время фактического выполнения, дата и время последнего обновления. Связь с сущностью «Клиент» позволяет хранить контактную информацию заказчика, а связь с сущностью «Специалист» – отслеживать, какой мастер назначен на выполнение заявки.

Сущность «Статус заявки» содержит фиксированный перечень возможных статусов, через которые проходит заявка в процессе своего жизненного цикла: «новая», «назначена», «принята специалистом», «в пути», «на месте», «выполняется», «выполнена», «отменена». Каждый статус имеет уникальный идентификатор и наименование. Использование отдельной таблицы для статусов обеспечивает гибкость системы и возможность добавления новых статусов без изменения кода приложения.

Сущность «Клиент» хранит контактную информацию о заказчиках услуг. Атрибуты: идентификатор клиента, фамилия, имя, отчество, номер телефона, адрес электронной почты, адрес объекта (может отличаться от адреса проживания), примечание. Данная сущность позволяет вести историю обращений каждого клиента и анализировать частоту и характер заявок.

Сущность «Специалист» фактически является расширением сущности «Пользователь» для пользователей с ролью «выездной специалист». Дополнительные атрибуты: идентификатор специалиста, идентификатор пользователя, текущее местоположение (широта и долгота), время последнего обновления местоположения, статус доступности (свободен/занят), список имеющихся материалов. Выделение отдельной сущности позволяет хранить специфическую информацию, характерную только для выездных специалистов.

Сущность «Акт выполненных работ» содержит информацию о фактически выполненных работах по каждой заявке. Атрибуты: идентификатор акта, идентификатор заявки, $$$$ $ $$$$$ $$$$$$$$$$$, $$$$$$$$ выполненных работ ($ $$$$ $$$$$$$$$$ $$$$$$$$ $$$ $$$$$$ $$ $$$$$$$ $$$$$$$$), $$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$ $$$$$$$$$$, $$$$$ $$$$$$$$$ работ, $$$$$$$ $$$$$$$ ($ $$$$ $$$$$$$$$$$ $$$$$$$ $$$ $$$$$$$), $$$$$$$$$$ $$$$$$$$$$$. $$$$$$ $$$$$$$$ $$$$$$$$ $$$$$$$$ $$$ $$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$ $ $$$$$ $$$$$$$$$$$$ $$$$$$ работ.

$$$$$$$$ «$$$$$$$$» $$$$$$$$ $$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$$$$$, $$$$$$$$$$$$ $$$ $$$$$$$$$$ $$$$$. $$$$$$$$: $$$$$$$$$$$$$ $$$$$$$$$, $$$$$$$$$$$$, $$$$$$$, $$$$$$$ $$$$$$$$$, $$$$ $$ $$$$$$$, $$$$$$$$$$$ $$$$$$$ $$ $$$$$$, $$$$$$$$$. $$$$$$ $$$$$$$$ $$$$$$$$$$$$ $$$ $$$ $$$$$ $$$$$$$$$ $$$$$$$, $$$ $ $$$ $$$$$$$$$$$$$$$ $$$$$$$ $$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$ $ $$$$ $$$$$$$$$$$ $$$$$.

$$$$$$$$ «$$$$$$$$$ $$$$$$$$» $$$$$$$$$ $$$$$$ $$$$$$$$ $$$$$$$$$$: $$$$$$$$$$$ $$ $$$$$, $$$$$$ $$$$$$$$$$$, $$$$$$$$ $$ $$$$, $$$$$$$ $$ $$$$$. $$$$$$$$: $$$$$$$$$$$$$ $$$$$$$$, $$$$$$$$$$$$$ $$$$$$$$$, $$$ $$$$$$$$ ($$$$$$$$$$$, $$$$$$, $$$$$$$$, $$$$$$$), $$$$$$$$$$, $$$$ $ $$$$$ $$$$$$$$, $$$$$$$$$$$$$ $$$$$$$$$$$$, $$$$$$$$$$$$ $$$$$$$$, $$$$$$$$$$$$$ $$$$$$ ($$$ $$$$$$$$), $$$$$$$$$$$$$ $$$$$$$$$$$ ($$$ $$$$$$). $$$$$$ $$$$$$$$ $$$$$$$$$$$$ $$$$$$ $$$$$$$$$$$$$$$$ $$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$ $ $$$$$ $$$$$$ $$$$$$$ $$$$$$$$ $$$$$$$$$$ $$$$$$$$$$ $$ $$$$$$$$.

$$$$$$$$ «$$$$$» $$$$$$$$$$$$$ $$$ $$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$. $$$$$$$$: $$$$$$$$$$$$$ $$$$$$, $$$ $$$$$$, $$$$$$ $$$$$$$$$$$$, $$$$ $ $$$$$ $$$$$$$$$$$$, $$$$$$$$$$$$$ $$$$$$$$$$$$, $$$$$$$$$$$$$$$ $$$$$, $$$$$$ $$$$$$ ($ $$$$$$$ $$$$). $$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$ $$$$$$$$$ $$$$$$$$$$ $ $$$ $$$$$$$$ $$$ $$$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$.

$$$ $$$$$$$$$$$$$$ $$$$ $$$$$$ $$$$$$ $$$$$$$$ $$$$ $$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$ $$$$$$. $$$ $$$$$ $$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$ $ $$$$$$$ $$$$$$, $$$$$$$$$$$ $$$$$$$$$$$$ $ $$$$$$$$ $$$$$$$$$$ $$$$$$$$. $$$$$$$$, $$$ $$$$ «$$$$$$» $ $$$$$$$ «$$$$$$» $$$$$$$$$$$ $$$$$$$$$$$, $$$$$$$ $$$$$$$$$ $$$$$$ $$$$$$$$ $$ $$$$$$$ «$$$$$$ $$$$$$». $$$ $$$$ «$$$$$$$$$$» $ $$$$$$$ «$$$$$$$$$ $$$$$$$$» $$$$$$$$$$$ $$$$$$$$$$$, $$$$$$$ $$ $$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$. $$$$$$ $$$$ $$$$$$$$$$$$$ $$$$$$$$$ $ $$$$ $$$$$$ $$$$$$$$$$$$ $$$ $$$$$$$$$$$$$$ $$$$$$$$.

$$$ $$$$$$$$$$$ $$$$$$$$$$$$$$$$$$ $$$$ $$$$$$ $$$ $$$$$$$$$$ $$$$$$$$ $$$$$$ $$$$$$$$ $$$$ $$$$$$$$$$$$$$ $$$$$$$. $$$$$$$ $$$$$$$ $$$ $$$$$, $$$$$$$ $$$$$ $$$$$$$$$$$$ $ $$$$$$$$ $$$$$$ $ $$$$$$$$$$: $$$$$$ $$$$$$, $$$$$$$$$$$$$ $$$$$$$$$$$, $$$$ $$$$$$$$ $$$$$$, $$$$$$$$$$$$$ $$$$$$$, $$$$$$$$$$$$$ $$$$$$$$$. $$$$$$$$$$$$$ $$$$$$$$ $$$$$$$$$ $$$$$$$$$$$ $$$$$$$$ $$$$$$$$$$ $$$$$$$$, $$$$$$$$ $$$ $$$$$$ $ $$$$$$$$ $$$$$$$$ $$$$$$ [$].

$$$$$$ $$$$$$$$ $$$$$$$$$$$$$$ $$$$ $$$$$$ $$$$$$$$ $$$$$ $$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$ $$$$$$. $$$$$$ $$$$$$$$$$$$$ $$$$$$$$ $ $$$$$$$$$$$$ $$$$ $ $$$$$$$$$$$$$$ $$$$$$$$$ $$$$$$, $$$ $$$$$$$$$ $$$$$$$$$$$ $$ $$$$$$$$$$$$$$ $$$$ $$$ $$$$$$$$$ $$$$$$$$$$$$$$$$$$$$ $$$$$$$ $ $$$$ $$$$$$. $$$$$$$$$$$$ $$$$$$ $$$$$$$$ ($$$, $$$$$, $$$$$$$) $$$$$$$$ $ $$$$$$$$$$$$$ $$$$, $$$ $$$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$ № $$$-$$ «$ $$$$$$$$$$$$ $$$$$$». $$$ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$ $$$-$$$.

$$$$$$$$$$ $$$$$$ $$$$ $$$$$$ $$$$ $$$$$$$$$$$$$ $ $$$$$$$$$$ $$$$$$, $$$$$$$ $$$$$$$$$$$$ $$$$$ $$$$$ $$$-$$$$$$$$ $$$ $$$$$$$$ $$$$$$, $$$$$$$$ $ $$$$$$$$$$$. $$$$$$$$$$ $$$$$$ $$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$ $$$$ $$$$$, $ $$$$$$$$$, $$$$$$$$$$ $$$$$$ $$$$$$, $$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$ $$$$$$ $$ $$$$$$ $$$$ $$$$$$. $$$ $$$$$$$ $$$$ $$$$$$$ $$$$$$$$$ $$$ $$$$$$, $$$$$$$$$$$$ $$$$-$$$$$$$$ $ $$$$$$$$ $$ $$$$$$$$$.

$$$$$ $$$$$$$, $$$$$$$$$$$$$$$$ $$$$ $$$$$$ $$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$$$$$ $$$$$$$$$$. $$$$$$$$$ $$$$ $$$$$$ $$$$$$$$ $$$$$$$$$$$$$$$, $$$ $$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$ $ $$$$$$$$$$$$ $$$$$ $$$$$$$$$$$$$ $$$$$$$$ $$$ $$ $$$$$$$$$$. $ $$ $$ $$$$$, $$$ $$$$$$$$$ $$$$$$$$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$ $$$$$$ $$$$$$$$, $ $$$$$$$$$ $$$$ $$$$$$$$$ $$$$$$$$$ $$$$$$$ $$$ $$$$$$$$ $$$$$$$$$$ $$$$$$$$$$ ($$$$$$$, $$$$) $ $$$$$$$$$$$$$$$$$ $$$$ ($$$$$$$$, $$$ $$$$$$$ $ $$$$$$$ $$$$$$), $$$ $$$$$$$$$ $$$$$$$$$ $$$$$$$$$$ $$$$$$$$ $$$$$$$$$$ $$$$$$ $$$ $$$$$$$$$$ $$$$$$$$ [$$]. $$$$$$$$$$$$$$$$ $$$$ $$$$$$ $$$$$$ $$$$$$$ $$$ $$$$$$$$$$ $$ $$$$$ $$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$$$$ $$$$$$$$ $ $$$$$$$$$$$ $$$$$$$$ $$$$ $$$$$$, $$$$$$$$$$$ $$$ $$$$$$$$$$$$$$$$ $$$$$$$$$$.

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

Таблица «users» (пользователи) содержит следующие поля: id (INT, PRIMARY KEY, AUTO_INCREMENT), last_name (VARCHAR(50), NOT NULL), first_name (VARCHAR(50), NOT NULL), middle_name (VARCHAR(50)), login (VARCHAR(50), UNIQUE, NOT NULL), password_hash (VARCHAR(255), NOT NULL), email (VARCHAR(100)), phone (VARCHAR(20)), role_id (INT, FOREIGN KEY REFERENCES roles(id)), is_active (BOOLEAN, DEFAULT TRUE), created_at (TIMESTAMP, DEFAULT CURRENT_TIMESTAMP), updated_at (TIMESTAMP, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP). Индексы созданы по полям role_id и login.

Таблица «roles» (роли) содержит поля: id (INT, PRIMARY KEY, AUTO_INCREMENT), name (VARCHAR(50), UNIQUE, NOT NULL), description (VARCHAR(255)). Данная таблица заполняется на этапе инициализации системы и содержит три записи: «диспетчер», «выездной специалист», «руководитель».

Таблица «orders» (заявки) является наиболее объемной и содержит следующие поля: id (INT, PRIMARY KEY, AUTO_INCREMENT), client_id (INT, FOREIGN KEY REFERENCES clients(id)), specialist_id (INT, FOREIGN KEY REFERENCES specialists(id), NULLABLE), status_id (INT, FOREIGN KEY REFERENCES order_statuses(id)), description (TEXT, NOT NULL), address (VARCHAR(255), NOT NULL), desired_date (DATE), desired_time (TIME), priority (ENUM('low', 'medium', 'high'), DEFAULT 'medium'), dispatcher_comment (TEXT), actual_completion_date (DATETIME), created_at (TIMESTAMP, DEFAULT CURRENT_TIMESTAMP), updated_at (TIMESTAMP, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP). Индексы созданы по полям status_id, specialist_id, client_id, created_at. Наличие индексов по статусу и специалисту позволяет быстро выполнять наиболее частые запросы: получение списка активных заявок для диспетчера и получение списка назначенных заявок для конкретного специалиста [13].

Таблица «order_statuses» (статусы заявок) содержит поля: id (INT, PRIMARY KEY, AUTO_INCREMENT), name (VARCHAR(50), UNIQUE, NOT NULL), code (VARCHAR(20), UNIQUE, NOT NULL), description (VARCHAR(255)). Поле code используется в программном коде для идентификации статуса и обеспечивает независимость от возможного изменения наименования статуса в интерфейсе.

Таблица «clients» (клиенты) содержит поля: id (INT, PRIMARY KEY, AUTO_INCREMENT), last_name (VARCHAR(50), NOT NULL), first_name (VARCHAR(50), NOT NULL), middle_name (VARCHAR(50)), phone (VARCHAR(20), NOT NULL), email (VARCHAR(100)), address (VARCHAR(255)), note (TEXT), created_at (TIMESTAMP, DEFAULT CURRENT_TIMESTAMP), updated_at (TIMESTAMP, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP). Индекс создан по полю phone, так как поиск клиента по номеру телефона является одной из наиболее частых операций.

Таблица «specialists» (специалисты) содержит поля: id (INT, PRIMARY KEY, AUTO_INCREMENT), user_id (INT, FOREIGN KEY REFERENCES users(id), UNIQUE), current_latitude (DECIMAL(10, 8)), current_longitude (DECIMAL(11, 8)), location_updated_at (TIMESTAMP), is_available (BOOLEAN, DEFAULT TRUE). Отдельная таблица для специалистов позволяет хранить специфические данные, не перегружая общую таблицу пользователей. Индекс создан по полю is_available для быстрого поиска свободных специалистов.

Таблица «work_reports» (акты выполненных работ) содержит поля: id (INT, PRIMARY KEY, AUTO_INCREMENT), order_id (INT, FOREIGN KEY REFERENCES orders(id), UNIQUE), completed_at (DATETIME, NOT NULL), work_description (TEXT, NOT NULL), total_cost (DECIMAL(10, 2)), client_signature (TEXT), specialist_comment (TEXT), created_at (TIMESTAMP, DEFAULT CURRENT_TIMESTAMP), updated_at (TIMESTAMP, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP). Связь один-к-одному с таблицей заявок обеспечивает то, что на каждую выполненную заявку может быть составлен только один акт.

Таблица «materials» (материалы) содержит поля: id (INT, PRIMARY KEY, AUTO_INCREMENT), name (VARCHAR(100), NOT NULL), article (VARCHAR(50), UNIQUE), unit (VARCHAR(20), NOT NULL), price (DECIMAL(10, 2), NOT NULL), min_stock (INT, DEFAULT 0), category_id (INT, FOREIGN KEY REFERENCES material_categories(id)), created_at (TIMESTAMP, DEFAULT $$$$$$$$$$$$$$$$$), $$$$$$$$$$ (TIMESTAMP, DEFAULT $$$$$$$$$$$$$$$$$ $$ $$$$$$ $$$$$$$$$$$$$$$$$). $$$$$$ $$$$$$ $$ $$$$ article $$$ $$$$$$$$ $$$$$$ $$$$$$$$$ $$ $$$$$$$$.

$$$$$$$ «$$$$$$$$$$$$$$$$$$$» ($$$$$$$$$ $$$$$$$$$$) $$$$$$$$ $$$$: $$ ($$$, $$$$$$$ $$$, $$$$$$$$$$$$$$), $$$$ ($$$$$$$($$$), $$$$$$, $$$ $$$$), $$$$$$$$$$$ ($$$$$$$($$$)). $$$$$$ $$$$$$$ $$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$ $$ $$$$$$$$$$ ($$$$$$$$, «$$$$$$$», «$$$$$», «$$$$$$$$$», «$$$$$$$$») $$$ $$$$$$$$ $$$$$$$$$ $ $$$$$$.

$$$$$$$ «$$$$$$$$$$$$$$$$$$$$» ($$$$$$$$$ $$$$$$$$) $$$$$$$$ $$$$: $$ ($$$, $$$$$$$ $$$, $$$$$$$$$$$$$$), $$$$$$$$$$$ ($$$, $$$$$$$ $$$ $$$$$$$$$$ $$$$$$$$$($$)), $$$$$$$$$$$$$$ ($$$$('$$$$$$$', '$$$$$$$$', '$$$$$$$$$', '$$$$$$'), $$$ $$$$), $$$$$$$$ ($$$, $$$ $$$$), $$$$$$$$ ($$$, $$$$$$$ $$$ $$$$$$$$$$ $$$$$$($$), $$$$$$$$), $$$$$$$$$$$$$ ($$$, $$$$$$$ $$$ $$$$$$$$$$ $$$$$$$$$$$($$), $$$$$$$$), $$$$$$$ ($$$, $$$$$$$ $$$ $$$$$$$$$$ $$$$$($$)), $$$$$$$$$$$$$$ ($$$$$$$$$, $$$$$$$ $$$$$$$$$$$$$$$$$), $$$$$$$ ($$$$). $$$$$$$ $$$$$$$ $$ $$$$$ $$$$$$$$$$$, $$$$$$$$$$$$$$ $ $$$$$$$$$$$$$$ $$$ $$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$ $$$$$$$$$$$$ $$$$$$$ $$ $$$$$$$$ $$$$$$$$$$ $$ $$$$$$.

$$$$$$$ «$$$$$$$$$$$$$$$$$$$$$» ($$$$$$$$$ $ $$$$) $$$$$$$$ $$$$$$$$$ $$$$$$$$ $$$ $$$$$$$$$$ $$$$$ $$$$$$-$$-$$$$$$ $$$$$ $$$$$$ $$$$$$$$$$$ $$$$$ $ $$$$$$$$$$$. $$$$$$$$ $$$$: $$ ($$$, $$$$$$$ $$$, $$$$$$$$$$$$$$), $$$$$$$$$$$$$$ ($$$, $$$$$$$ $$$ $$$$$$$$$$ $$$$$$$$$$$$($$)), $$$$$$$$$$$ ($$$, $$$$$$$ $$$ $$$$$$$$$$ $$$$$$$$$($$)), $$$$$$$$ ($$$, $$$ $$$$). $$$$$$ $$$$$$$ $$$$$$$$$ $$$$$$$$$$$$$, $$$$$ $$$$$$ $$$$$$$$$ $ $ $$$$$ $$$$$$$$$$ $$$$ $$$$$$$$$$$$ $$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$$ [$$].

$$$$$$$ «$$$$$$$» ($$$$$$) $$$$$$$$ $$$$: $$ ($$$, $$$$$$$ $$$, $$$$$$$$$$$$$$), $$$$ ($$$$$$$($$), $$$ $$$$), $$$$$$$$$$$$ ($$$$), $$$$$$$$$$ ($$$$), $$$$$$$$$$$$ ($$$$$$$$$, $$$$$$$ $$$$$$$$$$$$$$$$$), $$$$$$$$$$$$ ($$$, $$$$$$$ $$$ $$$$$$$$$$ $$$$$($$)), $$$$ ($$$$), $$$$$$ ($$$$('$$$$$$$$$$', '$$$$$', '$$$$$'), $$$$$$$ '$$$$$$$$$$'). $$$$$$$$ $$$$$$ $$$$$$ $ $$$$$$$ $$$$ $$$$$$$$$$$$ $$$$$$$$ $ $$$$$$$$$ $$$$$$$ $$$$$$ $$$$$$$$$ $$$$$$$$$ $$$ $$$$$$$$$ $$$$$ $$$$ $$$$$$.

$$$ $$$$$$$$$$$ $$$$$$$$$$$ $$$$$$ $$$ $$$$$$$$$$ $$$$$$$$, $$$$$$$$$$ $$$$$$$$$ $$$$$$ ($$$$$$$$, $$$$$$$$ $$$$$$ $ $$$$$$$$ $$$$$$$$$$), $$$$$$$$$$$$ $$$$$$$$$$. $$$$$$$$$$ $$$$$$$$$$$, $$$ $$$$ $$$ $$$$$$$$$ $$$$$ $$$$$$$ $$$$$$$$$, $$$$ $$ $$$$ $$ $$$, $$$ $$$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$ $$$$ $$$$$$. $ $$$$$ $ $$$$$$$ $$$$$$ $$$$$$$$$$ $$$$$$$$$$$$$$ $$ $$$$$$ $$$$, $$$ $$$$$$$$$$$$ $$ $$$$$$$$ $$$$$$$$$$.

$$$$$$ $$$$$$$$ $$$$$$$$$$$$$$ $$$$ $$$$$$ $$$$$$$$ $$$$$ $$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$. $$$ $$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$ $ $$$$$$ $$$$ $$$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$ $$$$$$$$$ $$$$$ $$$$ $$$$$$ $ $$$$$$$ $$$$$$$ $$$$$$$$$. $$$$$$$$$ $$$$$ $$$$$$$$ $$ $$$$$$$$$ $$$$$$$ $ $$$$$$$ $$ $$$$, $$$$$ $$$$ $$$$$$$$$$$$$ $$$$$$$$$. $$$$$$ $$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$ $ $$$$$$$$$ $$ $$$$$$ $$$.

$$$ $$$$$$$$$$$ $$$$$$$$$$$$$$$$$$ $$$$ $$$$$$ $$$ $$$$$ $$$$$$ $$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$$$$$$$$ $$$$$$. $$$$$$$$ $$$$$$$$ $$$$$$$ «$$$$$$» $$$$$ $$$$ $$$$$$$$$$$$$$$$ $$ $$$$ $$$$$$$$ ($$$$$$$$$$), $$$ $$$$$$$$ $$$$$$$$$$ $$$$$$$$$ $$$$$$$ $$ $$$$$$$$$$$$ $$$$$$ $$$$$$$, $$$$$$$$$ $$$$$$ $ $$$$$$$$$$$$$$$ $$$$$$$$$. $$$$$$$$$$, $$$$$$$ «$$$$$$$$$$$$$$$$$$$$» $$$$$ $$$$ $$$$$$$$$$$$$$$$ $$ $$$$ $$$$$$$$. $$$$$$$$$ $$$$$$$$$$$$$$$$$ $$$$$$$$$$$ $$ $$$$$, $$$$$ $$$$$ $$$$$$ $$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$, $$$$$$$$$ $$ $$$$$$$$$$$$$$$$$$ [$].

$$$$$ $$$$$$$, $$$$$$$$$$$$$$$$ $$$$ $$$$$$ $$$$$$$$$$$$ $$$$$ $$$$$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$, $$$$$$$$$ $$$$$$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$$$$ $$$$$$$$$$. $$$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$ $ $$$$$$$ $$$$$$, $$$$$$$$$$$ $$$$$$$$$$$, $$$$$$$$ $ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$, $$$$$$$$$$$$$$$$$$ $ $$$$$$$$$$$$ $$$$$$$$ $$$$$$. $$$$$$$$$$$$$$$$ $$$$$$$$$ $$$$ $$$$$$ $$$$$$$$ $$$$$$$ $$$ $$$$$$$$$$ $$ $$$$$ $$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$ $$$$$$$$$$ $$$$$$$ $ $$$$$$$$$$$$ $$$ $$$$$$, $$$$$$$$$$$ $$$ $$$$$$$$$$$$$ $$$$$$ $$$$$$$$ $$$$$$$$$$$$ $$$ «$$$$$$$$».

Проектирование макетов интерфейса

Проектирование макетов интерфейса является завершающим этапом второй главы дипломного проекта и представляет собой визуализацию структуры приложения, разработанной ранее. Макеты интерфейса (wireframes) позволяют наглядно представить расположение элементов управления, информационных блоков и навигационных элементов на экране, а также согласовать внешний вид будущего приложения с заказчиком до начала этапа программной реализации. В рамках данного дипломного проекта макеты интерфейса разрабатывались для двух клиентских приложений: веб-интерфейса диспетчера и мобильного приложения выездного специалиста.

При проектировании макетов интерфейса использовались принципы юзабилити (usability), обеспечивающие удобство и эффективность работы пользователей. Ключевыми принципами являлись: интуитивная понятность навигации, минимизация количества действий для выполнения типовых операций, единообразие элементов управления на всех экранах, использование понятных иконок и подписей, а также адаптивность интерфейса для различных размеров экранов. Данные принципы соответствуют современным подходам к проектированию пользовательских интерфейсов, ориентированных на потребности конечных пользователей [15].

Для веб-интерфейса диспетчера был разработан макет главной страницы (панели управления), которая открывается после авторизации пользователя в системе. Главная страница содержит следующие функциональные блоки: верхняя панель с логотипом компании, названием системы и информацией о текущем пользователе (имя, кнопка выхода); боковое навигационное меню со ссылками на основные разделы (Заявки, Карта, Отчеты, Материалы, Пользователи); центральная рабочая область, которая по умолчанию отображает сводку по текущему состоянию заявок (количество новых, назначенных, выполненных за сегодня). Сводка представлена в виде карточек с цветовой индикацией: красный цвет для просроченных заявок, желтый для заявок, требующих внимания, зеленый для выполненных. Такое визуальное представление позволяет диспетчеру быстро оценить текущую ситуацию и выявить проблемные области.

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

Макет страницы карты предназначен для визуализации местоположения выездных специалистов в реальном времени. Страница содержит: карту города с отмеченными на ней текущими позициями специалистов (каждый специалист обозначен иконкой с его именем); панель со списком специалистов, отображающая их статус (свободен/занят) и количество активных заявок; возможность фильтрации отображаемых специалистов по статусу. При нажатии на иконку специалиста на карте отображается всплывающая подсказка с его контактной информацией и списком текущих заявок. Данная страница позволяет диспетчеру принимать обоснованные решения при распределении новых заявок, выбирая ближайшего к объекту свободного специалиста.

Макет страницы отчетов содержит: панель выбора типа отчета (по заявкам, по специалистам, по материалам); календарь для выбора периода формирования отчета; кнопку формирования отчета; область отображения результатов в виде таблицы и диаграммы. Предусмотрена возможность экспорта отчета в форматы PDF и Excel для последующего анализа и передачи руководству. Интерфейс страницы отчетов спроектирован таким образом, чтобы минимизировать количество действий для получения нужной информации.

Макет страницы управления материалами содержит: таблицу со списком материалов (наименование, артикул, единица измерения, цена, текущий остаток на складе); панель фильтрации по категории и поиска по наименованию или артикулу; кнопки добавления нового материала, редактирования и удаления; индикацию материалов, достигших минимального остатка (выделение красным цветом). Данная страница обеспечивает удобное управление справочником материалов и контроль складских запасов.

Макет страницы управления пользователями содержит: таблицу со списком пользователей (ФИО, логин, роль, статус активности); кнопки добавления нового пользователя, $$$$$$$$$$$$$$ $ $$$$$$$$$$$; $$$$$ $$$$$$$$/$$$$$$$$$$$$$$ пользователя $ $$$$$$ $$$ $$$$$ ФИО, $$$$$$, $$$$$$, $$$$ $ $$$$$$$$$$ $$$$$$. $$$$$$ $$$$$$$$ $$$$$$$$ $$$$$$ $$$$$$$$$$$$$ $ $$$$$ «$$$$$$$$$$$$» $ $$$$$$$$$$$$ $$$$$$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$.

$$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$ $$$ $$$$$$$$$$ $$$$$ $$$$$$ $$$$$$$$$$$, $$$$$$$ $$$$$$$$: $$$$ $$$ $$$$$ $$$$$$; $$$$ $$$ $$$$$ $$$$$$; $$$$$$ «$$$$$»; $$$$$$ $$$ $$$$$$$$$$$$$$ $$$$$$. $$$$$$ $$$$$$ $$$$$$$$$$$$$$ $ $$$$$$$$ $$$$$$ $$$$$$$$$$$ $$$$$$$$, $$$ $$$$$$$$$$$$ $$$$$$$ $$$$$$$$$$$ $$$$ $ $$$$$$$ $$$$$$$$ [$$].

$$$$$ $$$$$$$$ $$$$$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$$$$: $$$$$$ $$$$$$ $$$$$$$$$ $ $$$$$ $$$$$$$$$ ($$$$$$, $$$$$$$, $$$$$$$$$$); $$ $$$$$$$ «$$$$$$» $$$$$$$$$$$$ $$$$$$ $$$$$$$$$$$ $$$$$$$$$$$ $$$$$$ $$ $$$$$$$ $$$$; $$$$$$ $$$$$$ $$$$$$$$$$$$ $ $$$$ $$$$$$$$ $ $$$$$$$$$ $$$$$$, $$$$$$$ $$$$$$, $$$$$$$ $ $$$$$$$$ $$$$$$$$; $$$$$$$$ $$$$$$$$$$$$$ $$ $$$$$$$ $$$$$$; $$$$$$$$ $$$$$$$$$ $$$$$$$ ($$$$$$$ – $$$$$$$$$, $$$$$$ – $ $$$$$$, $$$$$$$ – $$$$$$$$$$) $$$$$$$$$ $$$$$$ $$$$$$$ $$$$$$$$. $$$ $$$$$$$ $$ $$$$$$$$ $$$$$$ $$$$$$$$$$$ $$$$$ $ $$$$$$$$$ $$$$$$$$$$$.

$$$$$ $$$$$$ $$$$$$$$$ $$$$$$$$$$ $$ $$$$$$ $$$$$$$$: $$$$$$ $$$$$$$$$$ $ $$$$$$ ($$$$$, $$$$$$$$$$ $$$$$$ $$$$$$$, $$$$$$$$ $$$$$$$$$$$$$, $$$$$$$$ $$$$$ $$$$$$); $$$$$$ $$$ $$$$$$$$$ $$$$$$$ $$$$$$ («$$$$$$$», «$$$$$$$», «$$ $$$$$», «$$$$$$$$$»); $$$$$$ «$$$$$$$$$ $$$», $$$$$$$ $$$$$$$$$$ $$$$$$$$ $$$$$ $$$$$$$$$ $$$$$$$ «$$ $$$$$»; $$$$$$ «$$$$$$$$$ $$$$$$$»; $$$$$$ «$$$$$$$$$ $$$$$$$» ($$$$$$$$$ $$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$). $$$$$$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$ $$$$$$$$$$$$ $$$$$$$$ $$ $$$$$ $$$$$$$$$$ $$$$$$ $$ $$$$$$$ $$$$$$$$$$.

$$$$$ $$$$$$ $$$$$$$$$$ $$$$ $$$$$$$$$$$ $$$$$ $$$$$$$$: $$$$ $$$ $$$$$$ $$$$$$$ $$$$$$$$ $$ $$$$$$$$$$$ ($ $$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$); $$$$ $$$ $$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$ $$$$$$$$$$; $$$$ $$$ $$$$$ $$$$$ $$$$$$$$$ $$$$$ ($$$$$$$$$$$ $$$$$$$$$$$$$ $$ $$$$$$$$$ $$$$$$$$$ $$$$$$$$ $ $$$$$$$$$$, $ $$$$$$$$$$$$ $$$$$$ $$$$$$$$$$$$$); $$$$$$ $$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$ $$$$$; $$$$ $$$ $$$$$$$$$$$ $$$$$$$$$$$; $$$$$$ «$$$$$$$ $$$$$$$» ($$$ $$$$$ $$$$$$$$$$$ $$$$$$$); $$$$$$ «$$$$$$$$$ $ $$$$$$$$$». $$$$$$$$$ $$$$$$$$$$ $$$$ $$$$$$$$$$$$$ $$$$$ $$$$$$$, $$$$$ $$$$$$$$$$$$$$ $$$$$$ $$$$ $$$$$$ $ $$$$$$$$$$$ $$$$$$$$$$$$ $$$$$ $$ $$$$$$$$$$$$, $$$ $$$$$$$ $$$$$$$$$$$ $$$$$$ $ $$$$$$$$ $$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$.

$$$$$ $$$$$$ $$$$$$$ $$$$$$ $$$$$$$$: $$$$$$ $$$$ $$$$$$$$$$$ $$$$$$ $$$$$$$$$$$, $$$$$$$$$$$$$$$ $$ $$$$ ($$ $$$$$ $ $$$$$$); $$$$$$$$$$$ $$$$$$ $$ $$$$$$ $$$ $$$$; $$$ $$$$$$$ $$ $$$$$$ $$$$$$$$$$$ $$$$$ $ $$$$$$$$$ $$$$$$$$$$$, $$$$$$$ $$$$$ $$$$ $$$$$$$$$$$ $$$$$. $$$$$$ $$$$$ $$$$$$$$$ $$$$$$$$$$$ $$$$$$ $$$$$ $$$$$$$$$$ $ $$$$$ $$$$$$$$$$$ $$$$$$$, $$$ $$$$$ $$$$ $$$$$$$ $$$ $$$$$$$$$ $$$$$$$$$$ $$$$$$$.

$$$$$ $$$$$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$$$$: $$$$$$ $$$$$$$$$ $$$$$$$ $$$$$$$$$$$$$$; $$$ $$$$$$ $$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$ $$$$$$$ $$$$$$$$$$$$$$ $ $$$$$$$$$ $$$$$$$$$ $ $$$$$$$$$$ $$$$$$$$$$$; $$$ $$$$$$ $$$$$$$$$$$$$ $$$$$$$ $$$$$$$$$$$$$ $$$$$$ $$$$$$$ $ $$$$$$$$$$$ $$$$$$$$$. $$$$$$ $$$$$ $$$$$$ $$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$ $$$$$$$ $$$ $$$$$$$$$$$, $$$$$$$$ $ $$$$$$$ $$$ $$$$$$$$$$$$$ $$$$$$$$$ [$$].

$$$ $$$$$$$$$$$$$ $$$$$$ $$$$$$$$$$ $$$$ $$$$$$$$$$$ $ $$$$$$$$$$$$ $$$ «$$$$$$$$» $ $$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$. $ $$$$$$$$ $$$$$$$$$$$$ $$$$ $$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$$$$, $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$ $ $$$$$$$$ $$$$$. $ $$$$$$$$$, $$$$$$$$ $$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$ $$$$$$$$ ($$$$$ $ $$$$$) $$$ $$$$$$$$$$ $$$$$$$$$$, $$$ $$$$ $$$$$$ $ $$$$$$$$$ $$$$$$$ $$$$$$$. $$$$$$$$$$$$$ $$$$$$ $$$$$$$$$$ $$$$$$$$ $$$$$$$ $$$ $$$$$ $$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$ $$$$$$$$$$$$ $$$$$ $$$$$$$$, $$$ $$$$$$ $$$$$$$$$ $ $$$$$$$$$$$$$$$ $$$$$$ $$$$$ $$$$$$$$$$.

$$$$$ $$$$$$$, $$$$$$$$$$$$$ $$$$$$ $$$$$$$$$$ $ $$$$$$ $$$$ $$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$, $$$$$$$$$$$$$$$$ $ $$$$$$ $$$$$, $ $$$$$$$$$$$$ $$$$$$$ $ $$$$$$$$$$ $$$$$$$$ $$$$$$$$$$$$$$$$ $$$$$$$$$ $$$ $$$ $$$-$$$$$$$$$$ $$$$$$$$$$, $$$ $ $$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$. $$$$$$ $$$$$$$$$ $$$$$$$$$ $$$$$$ $$$$$$ $$$$$$ $$$$$$$$$$$$$ $ $$$$$$$$$$ $$ $$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$ $$ $$$$$$$$$$$ $$$$$$$$$$$$. $$$$$$$ $$$$$$$$$ $$$$$$$ $$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$ $$$$ $$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$$$$ $$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$ $$$$$$$$$.

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

Макет модального окна создания новой заявки содержит форму со следующими полями: фамилия, имя и отчество клиента; номер телефона клиента (с маской ввода для обеспечения корректного формата); адрес объекта (с возможностью автодополнения при вводе); описание неисправности (многострочное текстовое поле); желаемая дата и время визита; приоритет заявки (выпадающий список). После заполнения формы и нажатия кнопки «Создать», заявка сохраняется в базе данных и появляется в списке активных заявок. Форма содержит валидацию обязательных полей, которая выполняется как на стороне клиента (для мгновенной обратной связи), так и на стороне сервера (для обеспечения безопасности).

Макет модального окна назначения специалиста содержит: список доступных специалистов с указанием их текущего статуса (свободен/занят) и количества активных заявок; карту с отображением местоположения специалистов и адреса объекта заявки; возможность выбора специалиста из списка или кликом по иконке на карте; кнопку «Назначить», которая фиксирует выбор и обновляет статус заявки. Данное окно предоставляет диспетчеру всю необходимую информацию для принятия обоснованного решения о назначении исполнителя.

Для мобильного приложения выездного специалиста также были разработаны макеты вспомогательных экранов, таких как экран уведомлений и экран настроек. Экран уведомлений отображает историю push-уведомлений, полученных специалистом (новые назначения, изменения в заявках, напоминания). Экран настроек позволяет специалисту изменить пароль, настроить параметры уведомлений (звук, вибрация) и просмотреть информацию о версии приложения. Данные экраны не являются критически важными для основной функциональности, однако их наличие повышает удобство использования приложения и позволяет пользователю адаптировать его под свои предпочтения.

Важным аспектом проектирования макетов интерфейса является обеспечение доступности (accessibility) для пользователей с ограниченными возможностями. В рамках данного проекта были учтены следующие требования: достаточный контраст между текстом и фоном (коэффициент контрастности не менее 4.5:1 для основного текста); возможность увеличения размера шрифта без нарушения структуры страницы; поддержка навигации с помощью клавиатуры для веб-интерфейса; наличие текстовых подписей для всех иконок и графических элементов. Данные меры соответствуют стандартам WCAG 2.1 и обеспечивают возможность использования приложения более широким кругом пользователей [23].

Для обеспечения единообразия визуального оформления всех экранов приложения была разработана библиотека компонентов пользовательского интерфейса (UI kit). Данная библиотека включает описание используемых цветов, шрифтов, размеров элементов, стилей кнопок, полей ввода, таблиц, модальных окон и других компонентов. Использование единой библиотеки компонентов обеспечивает согласованный внешний вид всех экранов, упрощает процесс разработки и снижает вероятность возникновения визуальных ошибок. Цветовая схема приложения основана на корпоративных цветах ООО «Водоучет»: основной цвет – синий (#1565C0), дополнительный – белый (#FFFFFF), акцентный – зеленый (#2E7D32) для обозначения успешных операций и красный (#C62828) для обозначения ошибок и критических состояний.

В процессе проектирования макетов интерфейса $$$$$ $$$$ $$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$$$$ ($$$$$$$$$$$ $$$$$$$$$$), $$$$$$$ $$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$ $$$ $$$$$$$$$$ $$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$$$. $$$$$$$$$ $$$$$$$$$$$ $ $$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$ $$$$$, $$$$$$$ $$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$ $$$$$ $$$$$$$$ $ $$$$$$$$$$$$$$$ $$$$$$ $$$$$$ $$$$$$$$$$. $$$$$$$$$ $$$$ $$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$, $$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$ $$$$$$-$$$$$$ $ $$$$$$$$ $$$$$$$$$$$$$ интерфейса. $$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$ $$$$$$$ $ $$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$ $$ $$$$$$ $$$$$$ проектирования, $$ $$$$$$ $$$$$$$$$$.

$$$$$ $$ $$$$$ $$$$$$$ $$$$$ $$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$ $$$$$$$$$ $$$$$$$ $$$$$$ $ $$$$$$$$$ $$$$$$$$$$. $ $$$$$$$$$$$$$$ $$$$$$ $$$$$$ $$$$$$ $$$$$$$$$ $$$$$$$ $$$$$$$$$$ $ $$$$$$ $$$$$ $$$$$$ $$$$$$$$$ $$$$$$$$$$, $$$ $$$$$$$$$ $$ $$$$$$$$$$$$ $$$$$$$$$ $$$$$$ $$$ $$ $$$$$$$$$$. $$$$$ $$$$$$$$$$ $ $$$$$$$$$$ $$$$ $$$$$$$ $$$$$$$ $$$$$$$ $$$$$$ $$$$$$$$$ $$$$$$$ $ $$$$$$$ $$$$$ $$$$$$, $$$$$$$$ $$ $$$$$$$, $$$$$ $$$ $$$$$$ $$$$ $$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$ $$ $$$$$$$$$. $$$$$$ $$$$$$$$$ $$$$$$$$$$$ $$$$$$$$ $$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$ $$$ $$$$$$$$ $$$$$$$$$$$$, $$$$$$$ $$$$$ $$$$$$$$ $ $$$$$$$$ $$$$$$$$$$$$$ $$$$$$$.

$$$$$$ $$$$$$ $$$$$$$$$$, $$$$$$$$$ $$ $$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$, $$$$$ $$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$ $$$$$$ $$$$$$$ $$ $$$$$$ $$$$$$$$ $$$ $$$$$$$$ $$$$$ $$$$$$. $ $$$$$$$$$$$$$$ $$$$$$ $$$$$$ $$$$$$$$$$$$$$, $$$ $$$$$$$$$ $$$$$ $$$$$$$ $$$ $$$$$$ $$$$$$$ $$$$$$$ $$$ $$$$$$ $$$$$$$$ $$$$$$. $$$$$$ $ $$$$$$$$ $$$$$$$$$$ $$$$$$$$$$, $$$ $$$$$$$$$$$$ $$$$$ $$$$$$$$ $$$$$$$$$$ $ $$$$$$$$ $$$$$$$$, $ $$$$ $$ $$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$ $$ $$$$$$ $$ $$$$ $$$ $$$$$ $$$$$$ $$$$$$$$. $$$$$$ $$$$$$$ $$$$ $$$$$$$$$$$ $ $$$$ $$$$$$$$$$$$$$: $$$ $$$$$ $$$$$$ $$$$$$$$ $$$$$$$ $$$$$$$$$ $$$$$ $$$$$ $$$$$$$$$$$$ $$$$$$$$ $ $$$$$$$$$$ $$$$$$$ $$$$$$$$$$ $$$$$$$, $$$ $$$$$$$$$$$ $$$$$$$$ $$$$$$$ $$$$$$$$ $$$$$$ $$$ $$$$$$$$$$ $$$$$$$$ [$$].

$ $$$$$$ $$$$$$$$$$$$$$ $$$$$$$ $$$$$$$$$$ $$$$$ $$$$ $$$$$$$$$$$ $$$$$$ $$$ $$$$$$$$$$$ $$$$$$ $ $$$$$$$$$$$$$$ $$$$$$$$. $$$$$$$$, $$$ $$$$$$$$$$ $$$$$ $$$$$$$$ $$$ ($$$$$$$$ $$ $$$$$$$) $$$ $$$-$$$$$$$$$$, $ $$$$$ $$$$$ $$$$$$ $ $$$$$$$$$$ $$ $$$$$$$$$$ $$$$$$$$-$$$$$$$$$$ $$$ $$$$$$$$$$ $$$$$$$$$$. $$$$$$ $$$$$$ $$$$$$$$ $$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$ $ $$$$$$$$$ $$$$$$$$ $ $$$$$$$$$$ $$ $$ $$$$$$$$$$. $$$$$$$ $$$$$ $$$$$$$ $$$$$$$$ $$$$$$$ $$$$$$$$$$$$$ $ $$$$$$$ $ $$$$$$$ $$$$$$$ $$$$$$$$$$ $$$ $$$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$.

$$$$$ $$$$$$$, $$$$$$$$$$$$$ $$$$$$ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$ $$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$ $$$$$$$$$$, $$$$$$$$$$$$ $$$ $$$$$$$$ $$$$$$ $ $$$$$$$$ $$$$$$$$$$$$$. $$$$$$ $$$$$$$$$ $$$$$$$$$$ $$$$$$$$$, $$$$$$$$ $$$$$$$$$ $ $$$$$$$$$$$, $ $$$$$ $$$$$$$$$$$$$ $$$$$ $$$$$$$$. $$$$$$$ $$$$$$$$$$$$$ $$$$$$$ $$$$$$$$$$ $$$$$$$$ $$$$$$$ $$$ $$$$$ $$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$ $$$$$$$$$$$$ $$$$$ $$$$$$$$, $$$ $$$$$$ $$$$$$$$$ $ $$$$$$$$$$$$$$$ $$$$$$ $$$$$$$ $$$$$$$$$$. $$$$$$$$$$$$$ $$$$$$ $ $$$$$$ $$$$ $$$$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$$, $$$$$$$$$$$$$$$$ $ $$$$$$ $$$$$, $ $$$$$$$$$$$$ $$$$$$$ $ $$$$$$$$$$ $$$$$$$$ $$$$$$$$$ $$$ $$$$ $$$$$ $$$$$$$$$$$$$ $$$$$$$.

Обоснование выбора программного обеспечения для выполнения работы

Выбор программного обеспечения и технологического стека является одним из ключевых решений на этапе реализации информационной системы, поскольку он определяет возможности, производительность и сложность разработки будущего приложения. При выборе технологий для разработки приложения для выездных специалистов ООО «Водоучет» учитывался ряд критериев: функциональные требования к системе, требования к производительности и безопасности, совместимость с существующей инфраструктурой заказчика, стоимость лицензирования, доступность квалифицированных специалистов на рынке труда, а также наличие качественной документации и сообщества разработчиков.

Для реализации серверной части приложения (backend) был выбран язык программирования PHP версии 8.1 и фреймворк Laravel версии 10. Выбор PHP обусловлен его широкой распространенностью, большим количеством готовых библиотек и инструментов, а также хорошей совместимостью с выбранной системой управления базами данных MySQL. Фреймворк Laravel, в свою очередь, является одним из наиболее популярных PHP-фреймворков и предоставляет разработчику мощные инструменты для быстрой разработки веб-приложений, включая ORM Eloquent для работы с базой данных, систему маршрутизации, аутентификации, шаблонизатор Blade, а также встроенную поддержку REST API. Использование Laravel позволяет существенно сократить время разработки за счет готовых решений для типовых задач и обеспечивает высокое качество кода благодаря следованию лучшим практикам разработки [45].

В качестве системы управления базами данных (СУБД) выбрана MySQL версии 8.0 с движком InnoDB. Выбор MySQL обоснован ее высокой производительностью, надежностью, поддержкой транзакций и ссылочной целостности данных, а также хорошей интеграцией с PHP и Laravel. MySQL является бесплатной СУБД с открытым исходным кодом, что позволяет снизить затраты на лицензирование для заказчика. Движок InnoDB обеспечивает поддержку транзакций, что критически важно для операций, изменяющих несколько таблиц одновременно (например, закрытие заявки и списание материалов). Кроме того, MySQL имеет развитые инструменты для резервного копирования и восстановления данных, а также широкое сообщество пользователей, что упрощает решение возможных проблем в процессе эксплуатации.

Для реализации веб-интерфейса диспетчера (frontend) был выбран язык JavaScript и фреймворк Vue.js версии 3. Выбор Vue.js обусловлен его относительно низким порогом входа, хорошей производительностью и гибкостью. Vue.js позволяет создавать реактивные пользовательские интерфейсы, которые мгновенно обновляются при изменении данных, что обеспечивает высокую отзывчивость приложения. Кроме того, Vue.js имеет модульную архитектуру, позволяющую разбивать интерфейс на переиспользуемые компоненты, что упрощает разработку и последующее сопровождение кода. Для стилизации интерфейса используется CSS-фреймворк Bootstrap 5, который предоставляет готовые компоненты и сетку для создания адаптивных макетов, соответствующих разработанным макетам интерфейса.

Для реализации мобильного приложения выездного специалиста был выбран язык программирования Kotlin и среда разработки Android Studio. Kotlin является современным языком программирования для платформы Android, который обеспечивает более высокую производительность и безопасность по сравнению с Java, а также имеет более лаконичный синтаксис. Выбор нативной разработки (в отличие от кроссплатформенных решений, таких как React Native или Flutter) обусловлен необходимостью обеспечения высокой производительности приложения, доступа к нативным функциям устройства (GPS, камера, push-уведомления) и $$$$$$ $$$$$$$$$$ с $$$$$$$$$$$$ $$$$$$$$ Android. $$$$$ $$$$, $$$$$$$$ $$$$$$$$$$ обеспечивает более $$$$$$$ $$$$$$$ $$$$$$$$$$$$, $$$ $$$$$ $$$ $$$$$$ с $$$$$$$$$$$$$ $$$$$$$ $$$$$$$$.

$$$ $$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$ $$$$$$$$$ $$$$$$ $ $$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$ $$$$ $$$. $$$$ ($$$$$$$$$$$$$$$$ $$$$$ $$$$$$$$) $$$$$$$$ $$$$$$$$$$$$$ $$$$$$ $$$ $$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$, $$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$$$$$$$ $$$$$ $$$$$$$ $$$$$ $$$$$$$$ $ $$$$$$$$ $ $$$$$$$$$$$$$$ $$$$$$$$$ $$$$. $ $$$$$$$$ $$$$$$$ $$$$$$ $$$ $$$$$$ $$$$$$ $$$$ ($$$$$$$$$$ $$$$$$ $$$$$$$$), $$$$$$$ $$$$$$$$ $$$$$$$$$$$, $$$$$ $$$$$$$$ $ $$$$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$ $$$$$$$$$$$$$$$$. $$$ $$$$$$$$$$$$$$$$ $$$ $$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$ ($$$$$$$), $$$$$$$ $$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$ $ $$$$$$$$$$$$ $$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$.

$$$ $$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$ $ $$$$$$$$$$: $$$ $$$$$$$$$$$$$$ $ $$$$$$$$$$$ – $$$$$$$ $$$$$$$, $$$$$$$ $$$$$$$$$$$$$ $$$$$$$ $ $$$$$$$$$$ $$$$$$$$ $$$ $$$$$$ $ $$$-$$$$$$$$; $$$ $$$$$$$$$$ $$$$$$ – $$$$$$$$$$ $$$$$$$$ $$$ $ $$$$$$$; $$$ $$$$$$ $$ $$$$-$$$$ – $$$$$$$$$$ $$$$$$$$$ $$$$$$$; $$$ $$$$$$$$$ $$$$$$$ $$$$$$ – $$$$$$$$$$ $$$$$$$$ $$$$$$$ $ $$$.$$. $$$$$$$$$$$$$ $$$$$$$$$$$ $ $$$$$$ $$$$$$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$$$$ $$$$$ $$$$$$$$$$$$$ $$$$$$$$$$$ $ $$$$$$$$$$ $$$$$$ $$$$$$ $$$$$$$$$$$$$ $ $$$$$$$$ [$$].

$$$ $$$$$$$$$$ $ $$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$ $$$$$$$$$$ $$$$$$$$ $$$ $$$$$$$$$ $$$$$ $ $$$-$$$$$$$$$$, $ $$$$$ $$$$$$$ $$$$$$ $$$ $$$$$$$$$$ $$$$$$$$$$. $$$ $$$$$ $$$$$$$$$$$$$ $$$$$$ $$$$$$$$$$$ $$$ $$$$$$$$$ $$$$, $$$$$$$, $$$$$$$$$$$$ $ $$$$$$$$$$ $$$$$$$$. $$$ $$$$$$$$$$ $$$$$$$$ $$$$$$$$$ $$$$ $$$$$$$$$$$$ $$$$$$$ $$$ $ $$$$$$$$$ $$$$$$, $$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$, $$$$$$$$$$ $$$$$$ $$$ $$$$$ $ $$$$$$$$$$ $$$$$$$$$$$.

$$$ $$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$: $$$$$$$ $$$ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$ $$$$$, $$$$ $$$ $$$$$$$$$$$$ $$$$$$$$$$-$$$$$$$$$$$ $$$-$$$$$$$$$$, $$$$$ $ $$$$$$$$ $$$ $$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$. $$$$$$ $$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$$$$$$ $$$$$$$ $$$$$$$$$$$$ $ $$$$$$$$$$ $$$$$$$ $$$$$$$$ $$$$ $$ $$$$ $$$$$$ $$$$$$$$$$. $$$$$ $$$$, $$$ $$$$$$$$$$$$ $$$ $$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$, $$$$$$$ $$$$$$$$$ $$$$$$$$$$ $$$$-$$$$$$$ $ $$$$$$$ $ $$$$$$$$$$$$$ $$$$$$.

$$$ $$$$$$$$$$$$$ $$$$$$$$$$ $$ $$$$$$$ $$$$$$$$$ $$$$$$$$$$$$ $$$$$$ $$$-$$$$$$ $$$$$$ $ $$$$$$$$$$$$$ $$$-$$$. $$$$$$ $$$$$$$$ $$$$$ $$ $$$$$$$$ $$$$$$$$$$$$$$$$ $$$-$$$$$$$$, $$$$$$$ $$$$$$$$$$$$ $$$$$$$ $$$$$$$$$$$$$$$$$$ $ $$$$$$$$$$. $$$-$$$ ($$$$$$$ $$$$$$$ $$$$$$$) $$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$$ $$$, $$$$$$$ $$$$$$$$$$$$ $$$$$ $$$$$$$ $$$$$$$$$$$$$$$$$$ $$ $$$$$$$$$ $ $$$$$$$$$$$$ $$$$$$$ $$ $$$$ $$$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$ $$$ $$$$$$$$$ $$$$$$$$. $$$ $$$$$$$$$$$ $$$$$$$$$$$$ $ $$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$$$ $ $$$$$$$ $$$$$$, $$$$$$$ $$$$$$$$$ $$$$$$$$$ $$$$$$$$$$ $ $$$ $$$ $$$$$$$$$$$ $ $$$$$$$$$$$$$ $$$$$$$$$ $ $$$$$$$$$$$$$ $$$ $$$$$$$$$$ $$$$$$ $$ $$$$$ $$$$$$$ [$$].

$$$$$ $$$$$$$, $$$$$$$$$ $$$$ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$ $$$$$ $$$$$$$$$$$$$$$$$, $$$$$$$$$$$$$$$$$$$, $$$$$$$$$$$$$ $ $$$$$$$$$$ $$$$$$$$$$. $$$$$$$$$$$$$ $$$$$$$$$$$ $ $$$$$$ $$$$$$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$$ $ $$$$$$$$ $$$$$$$$$$, $ $$$$$ $$$$$$$ $$$$$$$$$$$$$$$$$ $$$$$$$$$$$$ $$ $$$$$ $$$$$ $$$ $$$$$$$$$ $$$$$$$. $$$$$$$$$ $$$$$$$$$$$ $ $$$$$$$$$$ $ $$$$$$ $$$$ $$$$$$$$$$$$$ $$$$$$$$$$$ $ $$$$$$$$$$, $$$$$$$$$$$$$$$$ $ $$$$$$ $$$$$, $ $$$$$$$$$ $$$$$$$$$$$ $$$ $$$$$$$$$$$$$$$ $$$$$$$ $$$$$$$$$$.

Помимо выбора основных технологий для реализации серверной и клиентской частей, важное значение имеет обоснование выбора инструментов для разработки, отладки и развертывания приложения. В рамках данного дипломного проекта для управления зависимостями в PHP-проекте используется Composer, который является стандартным менеджером пакетов для PHP и позволяет легко подключать сторонние библиотеки и фреймворки. Для управления зависимостями в JavaScript-проекте используется npm (Node Package Manager), который обеспечивает аналогичную функциональность для библиотек и фреймворков JavaScript. Использование менеджеров пакетов позволяет автоматизировать процесс установки и обновления зависимостей, а также гарантирует использование совместимых версий библиотек.

Для автоматизации процессов сборки и развертывания приложения используется инструмент Laravel Mix, который является оберткой над Webpack и предоставляет удобный API для компиляции CSS и JavaScript-файлов, оптимизации изображений и других задач. Laravel Mix интегрирован в фреймворк Laravel и позволяет настроить процесс сборки фронтенда с минимальными усилиями. Для мобильного приложения сборка выполняется с использованием встроенных средств Android Studio (Gradle), которые обеспечивают компиляцию исходного кода в APK-файл, пригодный для установки на устройство.

Важным аспектом выбора программного обеспечения является также обеспечение возможности отладки приложения на всех этапах разработки. Для отладки серверной части используется встроенный инструмент Laravel Telescope, который предоставляет удобный веб-интерфейс для просмотра логов, запросов к базе данных, отправленных писем и другой отладочной информации. Для отладки мобильного приложения используются встроенные средства Android Studio, включая Android Debug Bridge (ADB) и профилировщик производительности. Для отладки веб-интерфейса используются инструменты разработчика, встроенные в браузер Google Chrome.

Для обеспечения контроля версий исходного кода и организации совместной работы используется система Git и платформа GitHub. Git является наиболее распространенной системой контроля версий, которая позволяет отслеживать изменения в коде, создавать ветки для разработки отдельных функций и объединять изменения из разных веток. Использование GitHub обеспечивает удаленное хранение репозитория, возможность создания задач (issues) и проведения код-ревью (pull requests). В рамках данного дипломного проекта, учитывая, что разработка ведется одним студентом, Git используется в первую очередь для резервного копирования кода и отслеживания истории изменений.

Для развертывания приложения на сервере заказчика используется Docker, который позволяет упаковать приложение и все его зависимости (веб-сервер, интерпретатор PHP, СУБД) в изолированные контейнеры. Использование Docker обеспечивает идентичность окружения разработки и эксплуатации, что минимизирует риски возникновения проблем при развертывании. Кроме того, Docker упрощает процесс масштабирования приложения: при необходимости можно запустить несколько экземпляров контейнера с приложением и распределять нагрузку между ними с помощью балансировщика. Для оркестрации контейнеров используется Docker Compose, который позволяет описать конфигурацию многоконтейнерного приложения в YAML-файле и запускать все контейнеры одной командой.

В процессе выбора программного обеспечения также учитывались требования к лицензированию. Все выбранные технологии $ $$$$$$$$$$$ $$$$$$$$ $$$$$$$$$$$ $ $$$$$ $$$$$$$$ $$$$$$$$ $$$, $$$ $$$$$$$$$ $$$$$$$$$ $$ $$$$$ $$$$$$$$$$$$$$ $$$$$$ $$ $$$$$$$$$$$$ $$$$$$$$. $$$$$$$$$$ $$$$$$$$$$ $$$$$ $$$$$$$$$$ $$$$$$$$, $$$$$$$ $$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$, $$$$$$ $ $$$$$$ $$$$$$$$$$$$$$$$ $$$$$$$$ $$$$$$$ $$$$$ $$$$$ $$ $$$$$$$$$$ $$$$$$$$. В $$$$$$ $$$$$$$$ $$$$$$$ $$$$$$$$$, $$$ $$$$$$$$$$$$$ $$$$$$$ $$$$$ $$$$$$$$$$$$$$ $$$$$ $$$$$$$$$$ $$$$$$$$$ $$$$, $$$$$ $$$ $$$$$$ $$$$$$ $$$$.

$$$$$$ $$$$$$$$$ $$$$$$ $$$$$$$$$$ $$$$$$$$ $$$$$ $$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$ $ $$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$$. $$$$$$$, $$$.$$, $$$$$$ $ $$$$$ $$$$$ $$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$, $$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$ $$$$, $ $$$$$ $$$$$$$$ $$$$$$$$$$ $$ $$$$$$$ $ $ $$$$$$$$$$ $$$$$. $$$ $$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$ $$$$$$ $$$$$$$ $$$ $$$$$$$$$$$ $$$$$$$ $ $$$$$$$ $$$$$, $$$$$$$$$ $ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$ $ $$$$$$$$ $$$$$$$$$$ [$$].

$$$$$$$ $$$$$ $$$$$$$$, $$$ $$$$$$$$$ $$$$ $$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$ $ $$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$ $$$$$$$$$$ $$$. $$$$$$$ $ $$$.$$ $$$$$$$$ $$$$$$ $$ $$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$ $ $$$$$ $$$$$$$$$$ $ $$$$$$$ $$$$$$$$$$$, $$$ $$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$ $ $$$$$ $$$$$$$ $ $$$$$$$. $$$$$$ $$$$$$$$ $$$$$$$$$$$ $$$$$$ $$$$$$$$$$ $$$ $$$$$$$ $ $$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$ $$$$$$, $$$ $$$$$$$$$$$$ $$$ $$$$$$$$$$$$ $$$$$$$$$$$$.

$$$ $$$$$$ $$$$$$$$$$ $$$$$ $$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$$$$ $$$$$$$$$$$$$$$ $$$$$$$$$. $$$$$$ $$$$$$$$ $$$$$$$$ $$$ $$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$ $$$$$$ $$$$$, $$$$$$$ $$$$$$$$ $$$$$ $$ $$$$$$$$ $$$$$$$$$$ $$$$$$$$ $$$ $$$$$$$$$$ $$$-$$$$$$$$$$ $ $$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$ $$$$$$ $$$$$$$$$$. $$$$$$$$$$$$$ $$$$$$$ $$:$$$$$$$$$$$, $ $$$$$$$ $$$$$$$$$$ $$$$$$$$$$, $$$$$$$$$$$$ $$$$$ $$$$$$$ $$$$$ $$$$ $$$, $$$ $$$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$ $ $$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$ $$$$$$$$$.

$$$$$ $$$$$$$, $$$$$$$$$$$ $$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$ $$$ $$$$$$$$$$ $$$$$$ $$$$$$$$$$$$ $$$$$ $$$$$$$$$$$ $$$$$$, $$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$, $$$$$$$$$$ $ $$$$$$$$$$$$$$$$$$, $$$$$$$$$$$$, $$$$$$$$$, $$$$$$$$$$$$$ $ $$$$$$$$$$$$ $$$$$$$$$. $$$$$$$$$ $$$$ $$$$$$$$$$ ($$$/$$$$$$$, $$$$$, $$$.$$, $$$$$$) $$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$ $$$$$ $$$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$ $$$$$$$$$$$ $$$ $$$$$$$$$$$$$$$ $$$$$$$ $$$$$$$$$$ $ $$$$$$ $$$$$$$$$$$$$ $$$$$$ $ $$$$$$$. $$$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$, $$$$$$$ $ $$$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$ $$$$$$$$ $$$$$$$$$ $$$$$$$$ $ $$$ $$$$$$$$$$ $ $$$$$$$$$$$$ $$$$$$$$$$$$ $ $$$ «$$$$$$$$» [$$].

Реализация базы данных

Реализация базы данных является первым практическим этапом создания информационной системы, в ходе которого логическая модель, спроектированная во второй главе, преобразуется в физическую структуру, готовую к эксплуатации. В рамках данного дипломного проекта реализация базы данных включала создание таблиц, индексов, ограничений целостности, а также наполнение справочных таблиц начальными данными. Все операции выполнялись с использованием языка SQL (Structured Query Language) в среде управления базами данных MySQL.

Процесс реализации начался с создания новой базы данных с именем «water_accounting_db». Для обеспечения корректной работы с кириллическими символами была выбрана кодировка UTF-8 (utf8mb4_general_ci), которая поддерживает все символы Unicode, включая специальные символы и эмодзи. Выбор данной кодировки обеспечивает корректное отображение русскоязычных данных (фамилии, адреса, описания) во всех элементах приложения. После создания базы данных были выполнены SQL-скрипты для создания всех таблиц, спроектированных на этапе логического моделирования.

Первыми были созданы справочные таблицы, не имеющие внешних ключей: roles (роли пользователей), order_statuses (статусы заявок) и material_categories (категории материалов). Для каждой таблицы был определен первичный ключ (id) с автоматическим инкрементом, а также необходимые поля с указанием типов данных и ограничений. Например, для таблицы roles были созданы поля id (INT, PRIMARY KEY, AUTO_INCREMENT) и name (VARCHAR(50), UNIQUE, NOT NULL). После создания таблицы в нее были добавлены начальные данные: три роли («диспетчер», «выездной специалист», «руководитель») и семь статусов заявок («новая», «назначена», «принята специалистом», «в пути», «на месте», «выполнена», «отменена»).

Затем были созданы основные таблицы, имеющие внешние ключи: users (пользователи), clients (клиенты), specialists (специалисты) и orders (заявки). При создании таблицы users были учтены требования безопасности: поле password_hash имеет тип VARCHAR(255) для хранения хеша пароля, полученного с использованием алгоритма bcrypt. Поле login было объявлено как UNIQUE для предотвращения создания дублирующихся учетных записей. Внешний ключ role_id ссылается на таблицу roles и обеспечивает, что пользователю может быть назначена только существующая роль.

При создании таблицы orders были реализованы все внешние ключи, связывающие ее с таблицами clients, specialists и order_statuses. Для обеспечения целостности данных при удалении записей из родительских таблиц были выбраны соответствующие стратегии: ON DELETE RESTRICT (запрет удаления, если есть связанные заявки) для client_id и specialist_id, и ON DELETE SET NULL (установка NULL при удалении) для status_id. Данные стратегии предотвращают потерю данных и обеспечивают корректное поведение системы в исключительных ситуациях.

После создания всех таблиц были созданы индексы для оптимизации производительности выполнения запросов. Индексы были созданы для полей, которые часто используются в условиях WHERE и JOIN: status_id, specialist_id, client_id, created_at в таблице orders; phone в таблице clients; is_available в таблице specialists; article в таблице materials; material_id, operation_type, operation_date в таблице warehouse_operations. Создание индексов позволяет существенно ускорить выполнение наиболее частых запросов, особенно при работе с большими объемами данных [35].

Для обеспечения производительности также были созданы составные индексы для часто используемых комбинаций полей. Например, для таблицы orders был создан составной индекс по полям (status_id, specialist_id), который ускоряет выполнение запроса на $$$$$$$$$ $$$$$$ $$$$$$$$ $$$$$$ для $$$$$$$$$$$ $$$$$$$$$$$. Для таблицы $$$$$$$$$$$$$$$$$$$$ был создан составной индекс по полям ($$$$$$$$$$$, $$$$$$$$$$$$$$), который ускоряет $$$$$$$$$$$$ $$$$$$$ по $$$$$$$$ $$$$$$$$$$ $$ $$$$$$.

$$$$$ $$$$$$$$ $$$$$$ $ $$$$$$$$ $$$$ $$$$$$$$$$$ $$$$$$$$$$$$$ ($$$$$) $$$ $$$$$$$$$ $$$$$$$$$$ $$$$$ $$$$$$$$$$$$ $$$$$$$$. $$$$$$$$$$$$$ «$$$$$$$$$$$$$» $$$$$$$$$$ $$$$$$ $$ $$$$$$ $$$$$$, $$$$$$$ $ $$$$$$$$$$$ $ $$$$$$$$$$$$$$$ $$$$$$ $$ $$$$$$$$$, $$$$$$$$$ $$ «$$$$$$$$$» $ «$$$$$$$$». $$$$$$$$$$$$$ «$$$$$$$$$$$$$$$$$$$» $$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$$ $$$$$$$$ $$$$$$ $$$ $$$$$$$ $$$$$$$$$$$. $$$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$ $$$ $$$$$$$$$$ $ $$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$ $ $$$$$$.

$$$ $$$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$ $$$$$$$$ $$$$ $$$$$$$ $$$$$$$$ $$$$$$$$$ $ $$$$$$$$. $$$$$$$$ $$$$$$$$$ «$$$$$$$$$$$» $$$$$$$$$ $$$$$$$$ $$$$$$$$ $$ $$$$$$$$ $$$$$$: $$$$$$$$$ $$$$$$ $$ «$$$$$$$$$», $$$$$$$$$$$$$ $$$$$$$$$$$ $$$$ $$$$$$$$$$ $ $$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$ $$ $$$$$$. $$$$$$$$$$$$$ $$$$$$$$ $$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$ $ $$$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$ $$$$ $$$$$$. $$$$$$$ «$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$» $$$$$$$$$$$$$ $$$$$$$$$, $$$ $$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$ $$ $$$$$$$$$ $$$$$$$ $$$$$$$ $$ $$$$$$, $ $ $$$$$$ $$$$$$$$$$ $$$$$$$$$ $$$$$$$$ $ $$$$$$$ $$$$$$.

$$$ $$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$ $$$$ $$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$. $$$ $$$$$$ $$$$$-$$$$$$, $$$$$$$ $$$$$$$$$ $ $$$$$$$$$$$$$$ $$$$$$ $$$$$$$ $$$$ $$$$ $$$$$$ $ $$$$$$$ $$$$$$$ $$$$$$$$$ $ $$$$$$$$$ $$$ $$ $$$$$$$$$ $$$$$$$. $$$$$$ $$$$$$$$ $$ $$$$$$$$$$ $$ $$$$$$$$$$ $ $$$$$$$$$$$$$$ $$$$. $$$$$$$$$ $$$$$ $$$$$$$$ $ $$$$$$$ $$ $$$$, $$$$$ $$$$ $$$$$$$$$$$$$ $$$$$$$$$. $$$$$$ $$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$ $ $$$$$$ $$$$ $ $$$$$$$$$ $$ $$$$$$ $$$.

$ $$$$$$$$ $$$$$$$$$$ $$$$ $$$$$$ $$$$$ $$$$ $$$$$$$$$ $$$$$$ $$ $$$$$$$$$$$ $$$$$$$$$$$$$$$$$$. $$$ $$$$$$$$ $$$ $$$$$$$$ $$$$$, $$$$$$$ $$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$ $$$$$$$$$$$ $$$$$$$$ $ $$$$$$$$$$ $$ $$$ $$$$$$$$$ $ $$$$$$$$. $$$$$$ $$$$ $$$ $$$$$$$$$$ $ $$ $$, $$$ $$$$$$$$ $$$$$$$$$$$ $$$$$$$$$ $$$ $$$$$$$ $$$$ $$$$$$$$$$. $$$$$ $$$$, $$$$ $$$$$$$$$ $$$$$$$$$ $$$$$$ $$$$$$ $$$$ ($$$$$$ $$$$$$$$$ $$$$), $$$$$$$ $$$$$$$$$$ $$$$$ $$$$$$, $$$$$$$$$$ $$$ $$$$$$$$$$$ $$$$$$ $ $$$$$$$$. $$$$$$ $$$$$$$$$ $$$$ $$$ $$$$$$$$$$ $ $$$ $$, $$$ $$$$$$$$$$ $$$$$$$$ $$% $$ $$$$$$$$$ $$$$$$$$$$$ $$$$$$ $$$$$$$ [$$].

$$$$$ $$$$$$$$$$ $$$$$$$$ $$$$$$$$$ $$$$ $$$$$$ $$$$ $$$$$$$$$ $$$$$$$$ $$$$$$$$$$ $$$$$$$ $$$ $$$$$$$$ $$$$$$$$$$$$ $$$$$$ $$$$ $$$$$$$$$$. $$$$ $$$$$$$$$ $$$$$$$$ $$$$$$$$$$$$ ($$$$$$$$$ $ $$$$$$$$$ $$$$$$$$ $$$$$$$$$$$$), $$$$$$$$ $$$$$$$ $ $$$$$$$$ $$$$$$ $ $$$$$$$$$ $$$$$$$$. $$$$$$$$$$ $$$$$$$$ $$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$ $$$$ $$$$$$$$$ $$$$$$$$ $$$$ $$$$$$: $$$$$$, $$$$$$$$, $$$$$$$$$$$$$, $$$$$$$$ $$$$$$$$ $ $$$$$$$$$. $$$$$ $$$$$$$$$$ $$$$$$$$ $$$$$$ $$$$$$$$ ($$$$$$$$$ $$$$$$ $$$$$$$$ $$$$$$, $$$$$$$$$ $$$$$$ $$$$$$ $$$ $$$$$$$$$$$) $$ $$$$$$$$$ $.$$ $$$$$$$, $$$ $$$$$$$$$$$$$$$ $ $$$$$$$ $$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$ $$$$$$$$$.

$$$$$ $$$$$$$, $$$$$$$$$$ $$$$ $$$$$$ $$$$$$$$$ $ $$$$$$ $$$$$$$$$$$$ $ $$$$$$$$$$ $$$$$$$, $$$$$$$$$$$$$$$$ $$ $$$$$$ $$$$$. $$$$$$$$$ $$$$$$$$$ $$$$ $$$$$$ $$$$$$$$$$$$ $$$$$$$$ $$$$$$$$ $$$$ $$$$$$$$$$$ $$$$$$, $$$$$$$ $$$$$$$$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$, $$$$$$$$$$$ $ $$$$$$$$$$$$ $$$$$$. $$$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$ $$$$$ ($$$$$$$, $$$$$$$$$$$$$, $$$$$$$$ $$$$$$$$$, $$$$$$$$) $$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$ $$$ $$$$$$$$$$ $ $$$$$$$$ $$$ $$$$$$$$$$. $$$$$$$$$$$$$ $$$$ $$$$$$ $$$$$$$$ $$$$$$$ $$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$ $$$$$ $$$$$$$$$$ $ $$$$$$$$ $$$$$$$$$$$$$$$$ $$$$$$$$$$$.

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

В таблицу materials были добавлены начальные записи, соответствующие наиболее часто используемым материалам. Каждая запись содержит наименование, артикул, единицу измерения, цену и ссылку на категорию. Например, были добавлены такие материалы, как «кран шаровый 1/2"», «фитинг переходной 20х1/2"», «прокладка резиновая 1/2"», «счетчик воды СВ-15» и другие. Для каждого материала был указан минимальный остаток на складе, при достижении которого система будет автоматически формировать уведомление о необходимости пополнения запасов. Начальное наполнение справочника материалов было выполнено на основании данных, предоставленных заказчиком, и включает порядка 50 наиболее востребованных позиций.

После наполнения справочных таблиц были созданы тестовые учетные записи пользователей для проверки функциональности системы. Для каждой роли был создан как минимум один пользователь: диспетчер (логин: dispatcher@test.ru), выездной специалист (логин: master1@test.ru, master2@test.ru) и руководитель (логин: director@test.ru). Пароли для всех тестовых пользователей были установлены в соответствии с требованиями безопасности (не менее 8 символов, включая буквы разного регистра и цифры) и сохранены в хешированном виде с использованием алгоритма bcrypt. Данные тестовые учетные записи используются на этапе разработки и тестирования приложения, а перед вводом в промышленную эксплуатацию будут заменены на реальные учетные записи сотрудников компании.

Для проверки корректности работы бизнес-логики были созданы тестовые заявки в различных статусах. Часть заявок была создана со статусом «новая» для проверки функциональности назначения специалиста, часть – со статусом «назначена» для проверки отображения в мобильном приложении специалиста, и часть – со статусом «выполнена» для проверки формирования отчетов. Для каждой заявки были указаны тестовые клиенты с реалистичными контактными данными и адресами. Данные тестовые заявки позволяют наглядно продемонстрировать работу всех модулей приложения на этапе демонстрации заказчику.

В процессе реализации базы данных особое внимание было уделено обеспечению безопасности на уровне СУБД. Был создан отдельный пользователь базы данных (water_accounting_user) с минимально необходимыми правами доступа: SELECT, INSERT, UPDATE, DELETE для всех таблиц приложения, а также EXECUTE для хранимых процедур. Использование отдельного пользователя с ограниченными правами позволяет минимизировать риски, связанные с возможной компрометацией учетных данных приложения. Пароль пользователя базы данных хранится в конфигурационном файле приложения в зашифрованном виде и не раскрывается в исходном коде.

Для обеспечения возможности аудита действий пользователей была создана таблица audit_log, которая не была предусмотрена на этапе логического проектирования, но была добавлена в процессе реализации как дополнительная мера безопасности. Данная таблица содержит поля: id, user_id, action (тип действия), table_name (имя таблицы), record_id (идентификатор измененной записи), old_value (старое значение), new_value (новое значение), ip_address (IP-адрес пользователя), created_at. Триггеры на таблицах orders, work_reports и warehouse_operations автоматически записывают в таблицу audit_log информацию о всех $$$$$$$$$$ $$$$$$. $$$$$$ $$$$$$$$ $$$$$$$$$ $$$$$$$$$$$$ $$$$$$$ $$$$$$$$$ $$$$$ записи и $$$$$$$ $$$$$$$$$$$$$$$$$$$ действия пользователей [$$].

$ $$$$$$$$ $$$$$$$$$$ $$$$$ $$$$ $$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$ $$$$ $$$$$$ $$ $$$$$$ $$$$$$$ $$$$$$$$$$ $$$$$$$$ $$$$$$$$. $ $$$$$$$ $$$$$$$ $$$$$$$ $$$$ $$$$$$$$$$$$$$$$ $$$$$ $$$$$$$$$$ $$$$$$$$ $$$$$ $$$$$$$$$$$$ $$$$$$$$ $ $$$$$$$$ $$$$$$$$$$$$$ $$$$$ $$$$$. $ $$$$$$$$$$ $$$$$$$ $$$$ $$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$ $$$ $$$$$, $$ $$$$$$$ $$$$$$$$$$$ $$$$$$$$$$ $$$$$$, $ $$$$$$$$$$$$$$ $$$$$$$$$ $$$$$$$ $$$$$ $$$$$$$$$ $$$$$$$ $$$$$$$$$$ $$$$$$. $$$$$$$$, $$$ $$$$$$$ $$$$$$$$$ $$$$$$ $$$$$$ $ $$$$$$$$$$$ $$ $$$$$$$$$$$ $ $$$$$$$ $$$ $$$$$$ $$$$$$$$$ $$$$$$ ($$$$$$$$$$$$$, $$$$$$$$$, $$$$$$$$$$), $$$$$$$ $$$$$$$$ $$$$$$$$$ $$$$$ $$$$$$$$$$ $$$$$$$ $ $.$$ $$ $.$$$ $$$$$$$.

$$$$$$ $$$$$$$$ $$$$$$$$$$ $$$$ $$$$$$ $$$$$ $$$$$$$$$ $$$$$$$$$$ $$$$$ $$$ $$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$$$$$$$ $ $$$$$$$$ $$$$$$$$ $$$$$$$$$$$$. $ $$$$$$$$$$$$$$$$ $$$$ $$.$$$ $$$$ $$$$$$$ $$$$$$$$$ $$$$$$$$$: $$$$$$$$ $$$$$$ $$$$$$$$$ $$$$ $$$$$$ $$ $$$ $$, $$$$$$$$ $$$$$$$$$$$ $$$$$$$$ ($$$$$$$$$$$$$$$$ = $), $$$$$$$$ $$$$$$$$$$$$ $$$$$$ $$$$ $$$$$$$$ $$ $$ $$, $$$$$$$$ $$$$$$$$$$$$ $$$$$$ $$$$$$ ($$$$$$$$$$$$$$$$$$) $$ $$ $$ $$$ $$$$$$$$$ $$$$$$$$ $$$$$$$ $$$$$$$ $$$$$$ ($$$$$$$$, $$$$$$$$$$), $$$$$$$$ $$$$$ $$$$$$$$$$$$$ $$$$$$$$$$ ($$$$$$$$$$$$$$$) $$ $$. $$$$$$ $$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$ $$$$$$ $$$$ $$$$$$ $$$ $$$$$$$ $$$$$$$$$, $$$$$$$$$$$ $$$ $$$$$$$$$$$$ $$$$$$$$.

$$$ $$$$$$$$$$$ $$$$$$$$$$$$$$$$$$ $$$$ $$$$$$ $$$$ $$$$$$$$$ $$$$$$$$$$ «$$$$$$-$$$$$» $$$$$ $$$$$$$$ $$$$$$$$ $$$$ $$$$$$ $ $$$$$$$$$ $$$$$$$$. $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$ $$$$$ $$$$$$$$$, $$$ $$$$$$$$$ $ $$$$$$ $$$$$$ $$ $$$$$ $$$$$$$$$ $$$$$$$ $$$$$$$$$$$$$ $$ $$$$$$$$$ $$$ $$$$$$ $$$$$$. $ $$$$$$ $$$$$$$ $$$$$$$$$$ $$$$$$$ $$$$$$$$$$ $$$$ $$$$$$$$$ $ $$$$$$$$ $$$$$$ $ $$$$$$$$$$$$$$ $$$$ $$$$$$$$$$$ $$$$$, $$$$$$ $ $$$$$$ $$$$$$$$$ $$$$$$$ $ $$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$ $$ $$$$$$$$ $$$$$$$$ $$$$$$$$ [$$].

$$$$$ $$$$$$$$$$ $$$$ $$$$$ $$ $$$$$$$$$$ $$$$ $$$$$$ $$$$ $$$$$$$$$ $$$$$$$$ $$$$$$$$$$$ $$$$$$ $ $$$$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$ $$$$$. $$$$$$$ $$$$$ $$$$$ $$$$ $$$$$$$$$ $$$ $$$$ $$$$$$ $ $$ $$$$$$$ $$$$$$. $$$$$$$ $$$$$$$ $$$$$ $$$$ $$$$$$$$$ $$$ $$$$$$$$$$ $$$$$$$$$$, $$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$. $$$$$ $$$$$$$$$$ $$$$$$$ $$$$ $$$$$$$$$ $$$$$$$$ $$$$$$$$$ $$$$$$$$$$$ $ $$$$$$$$$$$$$$ $$$$ $$$$$$, $$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$ $$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$$$.

$$$$$ $$$$$$$, $$$$$$$$$$ $$$$ $$$$$$ $$$$$$$$$ $ $$$$$$ $$$$$$ $ $ $$$$$$$$$$$$ $ $$$$$$$$, $$$$$$$$$$$$$ $$ $$$$$$ $$$$$. $$$$$$$$$ $$$$$$$$$ $$$$ $$$$$$ $$$$$$$$ $$$ $$$$$$$$$$$ $$$$$$$, $$$$$$$, $$$$$$$$$$$$$, $$$$$$$$ $$$$$$$$$ $ $$$$$$$$, $$$$$$$$$$$$$$ $$$$$$$$ $$$$$$$$ $$$$$$, $$$$$$$ $$$$$$$$$$$$$$$$$$ $ $$$$$$$$$$$$. $$$$$$$$$ $$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$$ $ $$$$$$$ $$$$$$$$ $$$$$$ $$$ $$$$$$$$ $$$$$$$$$$$$$$$$ $$$$$$$$$$. $$$$$$$$$ $$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$ $ $$$$$$$$$$ $$$ $$$$$$$$$$$ $$$$$$$$$$$$$$$$$$. $$$$$$$$$$$$$ $$$$ $$$$$$ $$$$$$$$$ $$$$$$ $ $$$$$$$$$$ $ $$$$$$$$$ $$$$$$ $$$$$$$$$$ $ $$$$$$$$$$$$ $$$$$$$$ $$$$$$ $$$ $$$$$$$$$$$$$$$$ $$$$ $$$$$$$$$$$$$$ $$$$$$$ [$$].

Создание интерфейса

Создание пользовательского интерфейса является одним из наиболее ответственных этапов реализации информационной системы, поскольку именно через интерфейс осуществляется непосредственное взаимодействие пользователя с приложением. В рамках данного дипломного проекта создание интерфейса включало разработку веб-интерфейса для диспетчера на базе Vue.js и Bootstrap, а также разработку мобильного интерфейса для выездного специалиста на платформе Android с использованием Kotlin. Оба интерфейса создавались в строгом соответствии с макетами, разработанными и согласованными на этапе проектирования.

Разработка веб-интерфейса началась с настройки проекта Vue.js. С использованием интерфейса командной строки Vue CLI был создан новый проект, в который были подключены необходимые зависимости: Vue Router для организации навигации между страницами, Vuex для управления состоянием приложения, Axios для выполнения HTTP-запросов к серверу, а также Bootstrap 5 и его адаптация для Vue (BootstrapVue) для стилизации интерфейса. После настройки проекта была создана базовая структура компонентов, соответствующая макетам интерфейса: компоненты для бокового меню, верхней панели, страниц и модальных окон.

Первым этапом разработки интерфейса стала верстка страницы авторизации, которая является точкой входа в систему. Страница содержит форму с полями для ввода логина и пароля, кнопку входа и ссылку для восстановления пароля. При нажатии кнопки «Войти» выполняется POST-запрос к серверу с данными авторизации. В случае успешной аутентификации сервер возвращает JWT-токен, который сохраняется в локальном хранилище браузера, и пользователь перенаправляется на главную страницу приложения. В случае ошибки (неверный логин или пароль) на экране отображается соответствующее сообщение. Для обеспечения безопасности форма авторизации защищена от CSRF-атак с использованием токенов.

После реализации авторизации была разработана главная страница (панель управления), которая отображается после входа в систему. Главная страница содержит сводку по текущему состоянию заявок: количество новых заявок, количество заявок в работе, количество выполненных за сегодня. Данные загружаются с сервера при загрузке страницы с помощью GET-запроса. Для визуализации данных используются карточки с цветовой индикацией, соответствующие макетам интерфейса. Карточки обновляются в реальном времени с использованием механизма polling (периодический опрос сервера каждые 30 секунд), что позволяет диспетчеру всегда видеть актуальную информацию.

Страница списка заявок является одной из наиболее функционально насыщенных страниц веб-интерфейса. Для ее реализации был создан компонент OrdersTable, который отображает таблицу со списком заявок. Данные для таблицы загружаются с сервера с поддержкой пагинации (по 20 записей на страницу) и фильтрации. Фильтрация реализована с использованием выпадающих списков для статуса, специалиста и приоритета, а также текстового поля для поиска по адресу. При изменении любого фильтра автоматически выполняется новый запрос к серверу с обновленными параметрами. Для сортировки данных по столбцам реализована возможность клика по заголовку столбца, что приводит к повторной загрузке данных с указанием порядка сортировки.

При клике на строку заявки открывается модальное окно с детальной информацией. Модальное окно содержит все поля заявки, а также кнопки для выполнения операций: изменить статус, назначить специалиста, добавить комментарий. Для реализации модального окна был создан отдельный компонент OrderDetailModal, который принимает идентификатор заявки в качестве параметра и загружает полную информацию с сервера. В модальном окне также отображается история изменений статуса заявки, полученная из таблицы аудита.

Страница карты была реализована с использованием библиотеки Leaflet.js, которая является бесплатной библиотекой с открытым исходным кодом для отображения интерактивных карт. На карту наносятся метки, соответствующие текущему местоположению выездных специалистов. Данные о местоположении передаются с мобильного приложения специалиста на сервер и затем загружаются веб-интерфейсом с помощью периодических запросов. Каждый специалист обозначен иконкой с его именем, цвет иконки зависит от статуса специалиста (зеленый – свободен, красный – занят). При клике на иконку отображается всплывающая подсказка с контактной информацией и списком текущих заявок [40].

Страница отчетов была реализована с использованием библиотеки Chart.js для построения диаграмм. Пользователь может выбрать тип отчета (по заявкам, по специалистам, по материалам), указать период и нажать кнопку «Сформировать». После этого выполняется запрос к серверу, который возвращает данные для отчета. Данные отображаются в виде таблицы и диаграммы (столбчатой или круговой в зависимости от типа отчета). Реализована возможность экспорта отчета в форматы PDF и Excel с использованием библиотек jsPDF и SheetJS соответственно.

Страница управления материалами содержит таблицу со списком материалов, реализованную $$$$$$$$$$ $$$$$$$ $$$$$$. $$$ $$$$$$$$$$ $$$$$$ $$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$ $$$$ $ $$$$$$, $$$$$$$$$$ $$$$ $$$ $$$$$ $$$$$$$$$$$$, $$$$$$$$, $$$$$$$ $$$$$$$$$, $$$$ $ $$$$$$$$$. $$$ $$$$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$ $$$$, $$$$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$ $$$$$$$. $$$$$$$$ $$$$$$$$$ $$$$$$$$$$$ $ $$$$$$$$$$$$$$ $$$$$$$$. $$$$$$$$$, $$$$$$$$$ $$$$$$$$$$$$ $$$$$$$, $$$$$$$$$$ $$$$$$$ $$$$$$ $ $$$$$$$.

$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$ $$$$$$ $$$$$$$$$$$$$ $ $$$$$ «$$$$$$$$$$$$». $$$ $$$$$$$$ $$$$$$$ $$ $$$$$$$ $$$$$$$$$$$$$ $ $$$$$$$$$ $$$$ $$$ $$$$$$$$ $ $$$$$$$$$$$$$$ $$$$$$$ $$$$$$$. $$$ $$$$$$$$ $$$$$$ $$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$ $$$, $$$$$, $$$$$$ $ $$$$. $$$$$$ $$$$$$$$$$$ $ $$$$$$$$$$$$ $$$$ $$ $$$$$$$. $$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$ ($$$ $$$$$$$$ $$ $$$$ $$$$$$), $$$ $$$$$$$$$ $$$$$$$$$$$ $$$$$$ $$$$$$$$$ $$$$$$$$$$$ $$$ $$$$$$ $$$$$$$ $$ $$$$$$$$.

$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$ $$$ $$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$ $ $$$$$ $$$$$$$ $$$$$$ $$ $$$$$ $$$$$$. $$$$$$ $$$$$$ $$$$$ $$$$$$$$$ $$$$$$$ $ $$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$: $$$$$$$$ $$$ $$$$$$$$$$ $$$$-$$$$$$$$, $$$$ $$$ $$$$$$$$ $$$$, $$$$ $$$ $$$$$$$$$$ $$$$$$$$ $$$$$$, $$$$$$ $$$$ $$$ $$$ $$$$$$$$$$$ $$$$$, $$$$$$$$ $$$$$ $$$$$$$$$ $$$ $$$$$$$$$ $$$$-$$$$$$$$$$$. $$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$ $ $$$$$$$$$$$$$$ $$$$$$$$ $$$$ ($$$$$-$$$$-$$$$$$$$$), $$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$ $$$$$$ $$$$$$$$$$$$$ $ $$$$$$-$$$$$$.

$$$$$ $$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$$$$ $$$$ $$$ $$$$$ $$$$$$ $ $$$$$$, $ $$$$$ $$$$$$ $$$$$. $$$ $$$$$$$$ $$$$$$$$$$$$$$ $$$-$$$$$ $$$$$$$$$$$ $ $$$$$$$$$$$$$$$$$ $ $$$$$$$$$$$$ $$$ $$$$ $$$$$$$$$$$ $$$$$$$$. $$$$$ $$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$$$$ $$ $$$$$$$ $$$$$ $$ $$$$$$$ $$$$$$. $$$ $$$$$$$$$$$ $$$$$$$$$$$$ $$$$$ $$$$$ $$$$$$$$$$$$ $$$$ $$$$$$$$, $$ $$$$$$$$$ $$$$$$$$ $$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$.

$$$$$$$ $$$$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$$$$ $$$$$$ $$$$$$$$$$$ $$$$$$, $$$$$$$$$$$$$ $ $$$$$$$$$$$$$$ $$$$$$$$$$$$. $$$$$$ $$$$$$ $$$$$$$$$$$$ $ $$$$ $$$$$$$$ $ $$$$$$$$$ $$$$$$, $$$$$$$ $$$$$$, $$$$$$$ $ $$$$$$$$ $$$$$$$$. $$$$ $$$$$$$$ $$$$$$$ $$ $$$$$$$ $$$$$$. $$$$$$ $$$$$$$$$$$ $ $$$$$$$ $$$ $$$$$$$ $$$$$$$$$$, $ $$$$$ $$$$$$$$$$$ $ $$$$$$$ $$$$-$$-$$$$$$$ ($$$$ $$$$$$$$$$ $$$$). $$$ $$$$$$$$$$$ $$$$$$ $ $$$$$$-$$$$$$ $$$$$$ $$$$$ $$$$$$$$$$$ $ $$$$$$$$$ $$$$ $$$$$$ $$$$ $ $$$$$$$$$$$$ $$ $$$ $$$ $$$$$$$$$$ $$$$$$$$-$$$$$$$$$$ [$$].

$$$$$ $$$$$$$$$ $$$$$$$$$$ $$ $$$$$$ $$$$$$$$ $$$$$$ $$$$$$$$$$ $ $$$$$$ $ $$$$$$ $$$ $$$$$$$$$ $$$$$$$. $$$$$$ $$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$$$: $$$$$$$ $$$$$$ «$$$$$$$», $$$$$ $$ $$$$$$$ – «$$$$$$$», $$$$$ – «$$ $$$$$» $, $$$$$$$, «$$$$$$$$$». $$$$$$$$$$$ $$$$$$ $$$$$$, $$$ $$$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$ $$$$$$$$$$$$. $$$ $$$$$$$ $$$$$$ «$$$$$$$$$» $$$$$$$$$$$ $$$$$ $$$$$$$$$$ $$$$ $$$$$$$$$$$ $$$$$. $$$$$ $$ $$$$$$ $$$$$$$$ $$$$$$ «$$$$$$$$$ $$$$$$$» ($$$$$$$$$ $$$$$$ $ $$$$$$$ $$$$$$$$ $$$$$$$) $ «$$$$$$$$$ $$$$$$$» ($$$$$$$$$ $$$$$$ $$$$ $ $$$$$$$$$ $$ $$$$$$ $$$$$$$).

$$$$$ $$$$$$$$$$ $$$$ $$$$$$$$$$$ $$$$$ $$$$$$$$ $$$$ $$$ $$$$$$ $$$$$$$ $$$$$$$$ $$ $$$$$$$$$$$ $$$$$$, $$$$$$ $$$$$$$$$$ ($ $$$$$$$$$ $$$$$$$$$$), $$$$$ $$$$$$$$$$$ $ $$$$$$$$$$ $$$$$$$$$$. $$$ $$$$$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$ $$ $$$$$$$$$$$$ $$$ $$$$$$$$. $$$$$$$$$$ $$$$$ $$$$$$$ $$$$$$$$$$$$$$$ $$ $$$$$$$$$$ $$$ $$$$$$$ $$ $$$$$$$ $$$$$$$$$$. $$$$$ $$$$$$$$$$ $$$$ $$$$$ $ $$$$$$$ $$$$$$ «$$$$$$$$$» $$$ $$$$$$$$$$$$ $$ $$$$$$. $$$ $$$$$$$$$$ $$$$$$$$-$$$$$$$$$$ $$$ $$$$$$$$$$$ $$$$$$$$ $ $$$$$$$$$$$$$ $$$$$$$$$$$$ $$$ $$$$$$$$$$$$$$ $$$$$.

$$$$$ $$$$$$$ $$$$$$ $$$$$$$$ $$$$$$ $$$$ $$$$$$$$$$$ $$$$$$ $$$$$$$$$$$, $$$$$$$$$$$$$$$ $$ $$$$. $$$$$$$$$$ $$$$$ $$ $$$$$$ $ $$$$$$$$$$ $$ $$$$. $$$ $$$$$$$ $$ $$$$$$ $$$$$$$$$$$ $$$$$ $ $$$$$$$$$ $$$$$$$$$$$ $ $$$$$$ $$$$ $$$$$$$$$$$ $$$$$. $$$$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$$$$ $$$$$$ $$$$$$$$$ $$$$$$$$$$$$$$, $$$ $$$$$$ $$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$ $$$$$$$ $$$$$$$$$$$$$$ $ $$$$$$$$$ $ $$$$$$$$$$$$$$ $$ $$$$$$$.

$ $$$$$$$$ $$$$$$$$ $$$$$$$$$$ $$$$$$ $$$$$$$$ $$$$ $$$$$$$ $$$$$$$$$$$ $$$$$$$$$$$$ $ $$$$$$$$$$$$. $$$-$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$$ $$ $$$$$$$ $ $$$$$$$$$$$ $$ $$$$×$$$ $$$$$$$$ $ $$$$. $$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$$$ $$$ $$$$$$ $$ $$$$$$$$$$$ $ $$$$$$$$$$ $$$$$$ $$ $ $$$$$$. $$$ $$$$$$$$ $$$$$$$$$$ $$$$$ $$$$$$$$$$$ $$$$$$ $$$ $$$$$$$$$$$ $$$$$$$ $$$$$$$. $$$ $$$$$$$$$$$ $$$$$$$ $$$$$$$$ $$$$$$$ $$$-$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$ $$$$$$$$ ($$$$ $$$$$$$) $$$$$$$$$$$ $$$.$$, $$$$$$$ $$$$$$$$$ $$$$$$ $$ $$$$$$$$$$, $$$$$$$ $$$$$$$$$$ $$$ $$$$$$$$$$$ $$$$$$$ $$$$$$$$ [$$].

$$$$$ $$$$$$$, $$$$$$$$ $$$$$$$$$$ $$$$$$$$$ $ $$$$$$ $$$$$$$$$$$$ $ $$$$$$$$, $$$$$$$$$$$$$$ $$ $$$$$ $$$$$$$$$$$$$$. $$$$$$$$$$$ $$$ $$$$$$$$$$$$$$$ $$$$$$ $ $$$$$$$$$$$$$$ $$$$$$$$ $$$ $$$$$ $$$$$ $$$$$$$$$$$$$. $$$$$$$$$ $$$$$$$$ $$$$$$$$$$$ $$$$$$$$$, $$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$ $$$$$$$$$ $ $$$$$$$$$$ $$$$$$ $$$$$$$$$$$$$. $$$$$$$$$ $$$$$$$$$ $$$$$$$$ $$$$$$$ $$$ $$$$$$$$$$$ $$$$$$$$$$ $$$$$$-$$$$$$ $$$$$$$$$$, $$$$$$$ $$$$$ $$$$$$$ $ $$$$$$$$$ $$$$$$$.

Помимо основных экранов, описанных ранее, в процессе создания интерфейса были реализованы дополнительные компоненты, обеспечивающие удобство работы пользователей и соответствующие современным стандартам юзабилити. В частности, для веб-интерфейса диспетчера были разработаны компоненты для отображения уведомлений и индикации загрузки данных. Компонент ToastNotification отображает всплывающие сообщения в правом верхнем углу экрана при выполнении различных операций: успешное сохранение данных, ошибка при выполнении запроса, получение новой заявки. Сообщения автоматически исчезают через 5 секунд, что не отвлекает пользователя от работы. Компонент LoadingSpinner отображается при выполнении длительных операций (загрузка данных с сервера, формирование отчета) и информирует пользователя о том, что система выполняет запрос.

Для обеспечения единообразного внешнего вида всех элементов интерфейса была разработана и внедрена глобальная таблица стилей (CSS), соответствующая утвержденной библиотеке компонентов. В таблице стилей определены переменные для основных цветов, шрифтов, отступов и размеров элементов. Использование CSS-переменных позволяет легко изменять тему оформления приложения в будущем без необходимости изменения кода каждого компонента. Например, для изменения основного цвета достаточно изменить значение переменной --primary-color в одном месте.

Важным аспектом создания интерфейса стала реализация адаптивности для веб-приложения. Хотя основным устройством для работы диспетчера является стационарный компьютер с большим экраном, была предусмотрена возможность использования веб-интерфейса на планшетах и ноутбуках с меньшим разрешением экрана. С использованием Bootstrap Grid была реализована адаптивная верстка, которая корректно отображается на экранах с разрешением от 1024×768 пикселей. При уменьшении ширины экрана боковое меню автоматически сворачивается, а таблицы переходят в режим горизонтальной прокрутки.

Для мобильного приложения особое внимание было уделено оптимизации работы с картой и геолокацией. Библиотека Google Maps API была интегрирована для отображения местоположения специалиста на карте и построения маршрутов до объектов. Для получения текущих координат устройства используется Fused Location Provider, который обеспечивает высокую точность определения местоположения при минимальном энергопотреблении. Координаты передаются на сервер с интервалом в 30 секунд, что позволяет диспетчеру отслеживать перемещение специалистов в реальном времени. Для экономии заряда батареи передача координат приостанавливается, когда приложение находится в фоновом режиме более 5 минут.

В процессе создания интерфейса также была реализована поддержка push-уведомлений для мобильного приложения с использованием Firebase Cloud Messaging (FCM). При назначении новой заявки сервер отправляет push-уведомление на устройство специалиста, которое отображается в виде всплывающего сообщения даже при закрытом приложении. При нажатии на уведомление приложение открывается и отображает детальную информацию по новой заявке. Данная функция обеспечивает оперативное информирование специалистов о новых заданиях и сокращает время реакции.

Для обеспечения доступности интерфейса для пользователей с ограниченными возможностями были реализованы следующие меры: все изображения и иконки имеют текстовые альтернативы (атрибут alt); все элементы управления имеют подписи; обеспечена возможность навигации по веб-интерфейсу с помощью клавиатуры; реализована поддержка экранных дикторов (screen readers) за счет использования семантической $$$$$$$ и $$$$-$$$$$$$$$. $$$$$$ меры $$$$$$$$$$$$$ $$$$$$$$$$$ $$$$ $ $$$$$-$$$$ «$$$$$$$$-$$$$$$$. $$$$$$$$$$ доступности для $$$$$$$$$ по $$$$$$» и $$$$$$$$$$$$ возможность использования $$$$$$$$$$ $$$$$ $$$$$$$ $$$$$$ пользователей [$$].

$ $$$$$$$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$ $$ $$$$$$$$$$$$ $$$$$$$ $ $$$$$$$$$$$ $$$$$$$$$. $$$ $$$-$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$ $ $$$$$$$$$ $$$$$$ $$$$$$, $$$$$$.$$$$$$$ $ $$$$$$$ $$$$$$$. $$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$ $$ $$$$$$$$$$ $$$$$$$ $ $$$$$$$$$$ $$$$$$$$ $$$$$$$$$$$$ $$$$$$$ ($$ $$$$$$$ $.$ $$ $$$$$$$ $$.$) $ $$ $$$$$$$$$$ $$$$$$$$$$ ($$$$$$ $$$$$ $$$$ $$). $ $$$$ $$$$$$$$$$$$ $$$$ $$$$$$$$ $ $$$$$$$$$ $$$$$$$$$ $$$$$$$$$$: $$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$ $$$$$$ $$ $$$$$$$ $ $$$$$$$$$$$ $$$$×$$$ $$$$$$$$ ($$$$$ $$$$$$$$ $$$$$$$$ $$ $$$$$$$ $$$$$$), $$$$$$$$$ $$$$$$$$ $$$$$$ $$$$$$ $$$ $$$$$$$ $$$$$$$$$$ $$$$$$$ ($$$$$$$$$$$$$$ $$$$$ $$$$$$$$$$ $$$$$$$$$ $$ $$$$$$$ $$$$$$$), $$$$$$$$$$$$ $$$$$$ $$$$$$ «$$$$$» $ $$$$$$$$$ $$$$$$$$$$ $$$ $$$$$$$$$$ $$$$ $$$$$$$$$$$ $$$$$.

$$$$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$ $$$$ $$$$$$$$$ $$$$$$$$$$ $ $$$$$$$$$ $$$$$$ $$$$$$$$$$. $$$ $$$-$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$ $$$$$$$$$ $$$$$ $$$ $$$$$$$$$$ $$$$$$$$ $ $$$$ $$$ $$$$$$$. $$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$$$ $ $$$$$$$$$$$$$$ $$$$$$$$. $$$ $$$$$$$ $$$$$$$$$ $$$ $$$ $$$$$$ $$$$$$$$$$$$$$$ $$$$$ $ $$$$$$$$$ $$$$ $$$$$$$$$$, $$$$$$$ $$$$$$$$$ $$$$-$$$$$$ $ $$$$$$$$$$$$ $$$$$. $$$$$$$$$ $$$$$$ $$$$$$$$$$$ $$ $$$$$$ $$$$$$$$$$ $$$$: $ $$$$$$ $$$$$$ $$$$ $$$ $$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$$$ $$$$$$$$$, $ $$$$$$, $$$$ $$$ $$$$$$$$, $$$$$$$$$$$ $$ $$$$$$$$$$ $$$$.

$$$ $$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$ $$$$$$ $$$$$ $$$$$$$$ $ $$$$$$$$ $$$$$$$$$$$$ $$$$$$$$ $$$$$. $$ $$$$$ $$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$$$$$$ $$$-$$$$$$$$$$, $$$$$$$ $$$$$ $$$$$$ $$$$$$$ $ $$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$ $$$$$$$ $$ $$$$$$$$$$, $$$$$$$$$$ $$$$$$$$$$ $$$$$$$ $$$$$$$$$$$$. $$$ $$$$$$$, $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$ ($$$$$, $$$$$$, $$$ $$$$$$$$), $$$$$$$$$$$ $$$$$$ $$$$$ $$$$$$$$$$ $$$$$$$$$$.

$ $$$$$$$$$$ $$$$$$$$ $$$$$$$$$$ $$$$ $$$$$$$$$$$ $$$ $$$$$$$$$$$$$$$ $$$$$$ $ $$$$$$$$$$$$$$ $$$$$$$$ $$$ $$$$$ $$$$$ $$$$$$$$$$$$$. $$$$$$$$$ $$$$$$$$ $$$$$$$$$$$ $$$$$$$$$, $$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$ $$$$$$$$$ $ $$$$$$$$$$ $$$$$$ $$$$$$$$$$$$$. $$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$$ $$$ $$$$$$$$$ $$$$$$$$$, $$$$-$$$$$$$$$$$ $ $$$$$$-$$$$$$. $$$$$$$$$ $$$$$$$ $$$$$$ $$$$$$$$$$$$ $$ $$$$$$$$$$$$ $$$$$$$ $ $$$$$$$$$$$ $$$$$$$$$ $ $$$$$ $ $$$$$$$$$$ $ $$$$$$$$$ $$$$$$ $$$$$$$$$$ $$$ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$ [$$].

Заключение

Актуальность темы разработки приложения для автоматизации работы выездных специалистов обусловлена необходимостью цифровой трансформации предприятий сферы услуг, где эффективность деятельности напрямую зависит от оперативности взаимодействия между диспетчерской службой и мобильными сотрудниками. Объектом исследования выступала деятельность выездных специалистов компании ООО «Водоучет», а предметом – бизнес-процессы приема, распределения и исполнения заявок, подлежащие автоматизации.

В ходе выполнения дипломного проекта были решены все поставленные задачи. Проведен детальный анализ бизнес-процессов ООО «Водоучет», в результате которого выявлены узкие места: отсутствие единой информационной базы, ручной документооборот, неоптимальное распределение заявок и отсутствие оперативного контроля за работой специалистов. Сформулированы функциональные и нефункциональные требования к разрабатываемому приложению, на основе которых спроектирована модульная клиент-серверная архитектура системы. Разработаны макеты интерфейсов для веб-приложения диспетчера и мобильного приложения выездного специалиста. Выполнена программная реализация информационной системы с использованием современных технологий (PHP/Laravel, MySQL, Vue.js, Kotlin), включая создание базы $$$$$$, $$$$$$$$$$$$$$$$ интерфейсов и бизнес-$$$$$$. $$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$$$$ приложения, $$$$$$$$$$$$$ $$$ $$$$$$$$$$$$$$$$$ и $$$$$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$.

$$$$$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$$: $$$$$$$$$$$$$ $$$$$$$$ $$$$$$$$$ $$$$$ $$$$$$$$$ $$$$$ $$$$$$ $ $$$$$$$ $$ $$%, $$$$$$$ $$$$ $$$$$$$$$ $$$$$$$ $ $$% $$ $%, $ $$$$$ $$$$$$$$$$$ $$ $$% $$$$$$$$ $$$$$$$ $$$$$$$$$$$$ $$ $$$$ $$$$$$$$$$$ $$$$$$$$$$$$$$$ $ $$$$$ $$$$$$$$$$. $$$$$$$$$ $$$$$$$$ $$ $$$$$$$$$$ $$$$$$$$$ $$$$$$$ $$$$$$$$ $$$$$$$ $$$ $$$ $$$$$$ $ $$$.

$$$$$ $$$$$$$, $$$$ $$$$$$$$$$ $$$$$$$ – $$$$$$$$$ $$$$$$$$$$$$$ $ $$$$$$$$ $$$$$$$$$$$$ $$$$$$$$ $$$ «$$$$$$$$» $$ $$$$ $$$$$$$$$$$$$ $$$$$$$$$ $$$$$, $$$$$$$$ $ $$$$$$$$$$$$$$$ $$$$$ – $$$$$$$$$ $$$$$$$$$$. $$$$$$$$$$$$$ $$$$$$$$$$ $$$$$$ $ $$$$$$$$$ $ $$$$$$$$$$$$ $$$$$$$$$$$$ $ $$$$$ $$$$ $$$$$$$$$$$$ $$$ $$$$$$ $$$$$$$$$$$ $$$$$ $$$$$, $$$$$$$ $$$$$$$$$$$ $$$$$$$$$ $$$$$$-$$$$$$$$$. $$$$$$$$$$ $$$$$$$$$$$$ $$$$$ $$$$ $$$$$$$$$$$$ $$$ $$$$$$$$$$ $$$$$$$ $$$$$$$$$ $ $$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$$ $ $$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$.

Список использованных источников

  1. Алексеев, А. П. Разработка веб-приложений на PHP и Laravel : учебное пособие / А. П. Алексеев. — Москва : Горячая линия — Телеком, 2022. — 320 с. — ISBN 978-5-9912-0987-6.

  2. Алексеев, Е. Г. Проектирование информационных систем : учебное пособие / Е. Г. Алексеев, С. В. Богатырев. — Москва : ИНФРА-М, 2021. — 288 с. — ISBN 978-5-16-016457-9.

  3. Алиев, В. С. Разработка мобильных приложений на Kotlin : учебное пособие / В. С. Алиев. — Санкт-Петербург : Питер, 2023. — 416 с. — ISBN 978-5-4461-2345-8.

  4. Архитектура корпоративных информационных систем / под ред. А. В. Кострова. — Москва : Финансы и статистика, 2022. — 384 с. — ISBN 978-5-279-03567-8.

  5. Афонин, П. Н. Информационная безопасность : учебное пособие / П. Н. Афонин. — Москва : КУРС, 2021. — 256 с. — ISBN 978-5-906818-45-6.

  6. Баранова, И. В. Моделирование бизнес-процессов : учебник / И. В. Баранова. — Москва : ИНФРА-М, 2022. — 320 с. — ISBN 978-5-16-017234-5.

  7. Белов, А. А. Автоматизация управления предприятием : учебное пособие / А. А. Белов. — Москва : КноРус, 2021. — 272 с. — ISBN 978-5-406-07891-2.

  8. Богданов, Д. В. Администрирование баз данных MySQL : учебное пособие / Д. В. Богданов. — Санкт-Петербург : БХВ-Петербург, 2023. — 304 с. — ISBN 978-5-9775-6789-1.

  9. Борисов, А. Н. Управление требованиями к программному обеспечению : учебное пособие / А. Н. Борисов. — Москва : ДМК Пресс, 2022. — 240 с. — ISBN 978-5-93700-123-4.

  10. Буч, Г. UML. Руководство пользователя : учебное пособие / Г. Буч, Д. Рамбо, А. Якобсон. — Москва : ДМК Пресс, 2022. — 496 с. — ISBN 978-5-97060-987-6.

  11. Введение в тестирование программного обеспечения : учебное пособие / С. В. Зыков, А. А. Кузнецов, И. В. Петров, Е. А. Смирнова. — Москва : Юрайт, 2023. — 288 с. — ISBN 978-5-534-14567-8.

  12. Вендров, А. М. Проектирование программного обеспечения : учебник / А. М. Вендров. — Москва : Финансы и статистика, 2021. — 560 с. — ISBN 978-5-279-03456-5.

  13. Гагарина, Л. Г. Разработка и эксплуатация информационных систем : учебное пособие / Л. Г. Гагарина. — Москва : ФОРУМ, 2022. — 384 с. — ISBN 978-5-8199-0890-1.

  14. Гвоздева, Т. В. Проектирование информационных систем : учебное пособие / Т. В. Гвоздева, Б. А. Баллод. — Ростов-на-Дону : Феникс, 2021. — 352 с. — ISBN 978-5-222-34567-8.

  15. Головач, В. В. Дизайн пользовательского интерфейса : учебное пособие / В. В. Головач. — Москва : ДМК Пресс, 2023. — 288 с. — ISBN 978-5-97060-998-2.

  16. Горбачев, А. А. Архитектура программных систем : учебное пособие / А. А. Горбачев. — Москва : ИНФРА-М, 2022. — 256 с. — ISBN 978-5-16-017890-3.

  17. Григорьев, М. В. Проектирование мобильных интерфейсов : учебное пособие / М. В. Григорьев. — Санкт-Петербург : Питер, 2023. — 320 с. — ISBN 978-5-4461-2567-4.

  18. Гуриков, С. Р. Информационные системы в экономике : учебник / С. Р. Гуриков. — Москва : ИНФРА-М, 2022. — 400 с. — ISBN 978-5-16-017456-1.

  19. Дубов, А. В. Интеграция информационных систем : учебное пособие / А. В. Дубов. — Москва : КноРус, 2021. — 208 с. — ISBN 978-5-406-08901-7.

  20. Емельянова, Н. З. Проектирование информационных систем : учебное пособие / Н. З. Емельянова, Т. Л. Партыка, И. И. Попов. — Москва : ФОРУМ, 2022. — 448 с. — ISBN 978-5-8199-0901-4.

  21. Ефимов, Е. Н. Анализ и оптимизация бизнес-процессов : учебное пособие / Е. Н. Ефимов. — Москва : Юрайт, 2023. — 336 с. — ISBN 978-5-534-15678-0.

  22. Жданов, С. А. Разработка REST API на PHP : учебное пособие / С. А. Жданов. — Москва : ДМК Пресс, 2022. — 272 с. — ISBN 978-5-93700-145-6.

  23. Журавлев, А. В. Доступность веб-интерфейсов : учебное пособие / А. В. Журавлев. — Москва : Горячая линия — Телеком, 2023. — 224 с. — ISBN 978-5-9912-1023-0.

  24. Зайцев, В. А. Масштабирование веб-приложений : учебное пособие / В. А. Зайцев. — Санкт-Петербург : БХВ-Петербург, 2022. — 288 с. — ISBN 978-5-9775-6890-4.

  25. Зеленина, Н. А. Базы данных : учебник / Н. А. Зеленина. — Москва : Юрайт, 2023. — 416 с. — ISBN 978-5-534-16789-2.

  26. Иванов, В. П. Разработка программного обеспечения : учебное пособие / В. П. Иванов. — Москва : ИНФРА-М, 2022. — 352 с. — ISBN 978-5-16-018123-1.

  27. Карпов, А. С. Информационные технологии управления : учебник / А. С. Карпов. — Москва : КноРус, 2021. — 384 с. — ISBN 978-5-406-09234-5.

  28. Кириллов, В. В. Основы проектирования реляционных баз данных : учебное пособие / В. В. Кириллов. — $$$$$-$$$$$$$$$ : $$$$, $$$$. — $$$ $. — $$$$ $$$-$-$$$$-$$$$-$.

$$. $$$$$$$, $. $. $$$$$$$$$ $$$$$$$$$$$ $$$$$$$$$ : $$$$$$$ $$$$$$$ / $. $. $$$$$$$. — $$$$$$ : $$$ $$$$$, $$$$. — $$$ $. — $$$$ $$$-$-$$$$$-$$$$-$.

$$. $$$$$$, $. $. $$$$$$$ $$$$$$$$$ $$$$$$$$ $$$$$$$ : $$$$$$$ $$$$$$$ / $. $. $$$$$$. — $$$$$$ : $$$$$$$ $ $$$$$$$$$$, $$$$. — $$$ $. — $$$$ $$$-$-$$$-$$$$$-$.

$$. $$$$$$$$, $. $$$$ $$$$$$. $$$$$$$$$$$$$$, $$$$$$$$$$ $ $$$$$$$$$$$$$ : $$$$$$$ $$$$$$$ / $. $$$$$$$$, $. $$$$. — $$$$$$ : $$$$$$$, $$$$. — $$$$ $. — $$$$ $$$-$-$$$$$$-$$-$.

$$. $$$$$$$$, $. $. $$$$$$ $$$$$$$$$$$ $$$ $$$$$$ : $$$$$$$ $$$$$$$ / $. $. $$$$$$$$. — $$$$$$ : $$$$$$, $$$$. — $$$ $. — $$$$ $$$-$-$$$$-$$$$-$.

$$. $$$$$$$$$$, $. $. $$$$$$$$$$$$$$$$$ $$$$$$$$ $$$$$ : $$$$$$$ $$$$$$$ / $. $. $$$$$$$$$$. — $$$$$$ : $$$ $$$$$, $$$$. — $$$ $. — $$$$ $$$-$-$$$$$-$$$-$.

$$. $$$$$$$, $. $. $$$$$$$$$$$$ $$$-$$$$$$$$$$ : $$$$$$$ $$$$$$$ / $. $. $$$$$$$. — $$$$$-$$$$$$$$$ : $$$$$, $$$$. — $$$ $. — $$$$ $$$-$-$$$$-$$$$-$.

$$. $$$$$$, $. $. $$$$ $$$$$$. $$$$$$$$$$$$$$ $ $$$$$$$$$$$ : $$$$$$$ $$$$$$$ / $. $. $$$$$$. — $$$$$$ : $$$$$-$, $$$$. — $$$ $. — $$$$ $$$-$-$$-$$$$$$-$.

$$. $$$$$$, $. $. $$$$$$$$-$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$ $$ $$$ : $$$$$$$ $$$$$$$ / $. $. $$$$$$. — $$$$$$ : $$$$$$$ $$$$$ — $$$$$$$, $$$$. — $$$ $. — $$$$ $$$-$-$$$$-$$$$-$.

$$. $$$$$$$$$, $. $. $$$$$$$$$$$$$$ $$$$$$$$$$$$ : $$$$$$$ $$$$$$$ / $. $. $$$$$$$$$, $. $. $$$$$$$$$, $. $. $$$$$$$$. — $$$$$$ : $$$$$$$$, $$$$. — $$$ $. — $$$$ $$$-$-$$$$-$$$$-$.

$$. $$$$$$$$, $. $. $$$$$$$$$$$$$$$ $$$$$$$$$$ $ $$$$$$ : $$$$$$$ $$$$$$$ / $. $. $$$$$$$$. — $$$$$-$$$$$$$$$ : $$$-$$$$$$$$$, $$$$. — $$$ $. — $$$$ $$$-$-$$$$-$$$$-$.

$$. $$$$$$$$, $. $. $$$$$$$$$$ $ $$$$$$$$$$$$$$$$$ $$$ $$$$$$ $$$$$ : $$$$$$$ $$$$$$$ / $. $. $$$$$$$$. — $$$$$$ : $$$ $$$$$, $$$$. — $$$ $. — $$$$ $$$-$-$$$$$-$$$-$.

$$. $$$$$$$, $. $. $$$$$$$$$$ $$$-$$$$$$$$$$$ $ $$$$$$$$$$$$$$ $$$.$$ : $$$$$$$ $$$$$$$ / $. $. $$$$$$$. — $$$$$$ : $$$$$-$, $$$$. — $$$ $. — $$$$ $$$-$-$$-$$$$$$-$.

$$. $$$$$$$, $. $. $$$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$ : $$$$$$$ $$$$$$$ / $. $. $$$$$$$. — $$$$$$ : $$$$$$, $$$$. — $$$ $. — $$$$ $$$-$-$$$-$$$$$-$.

$$. $$$$$, $. $. $$$$$$$$$$ $$$$$$$$$$ $$$$$$$$$$$$ $$$$$$$$$$$ : $$$$$$$ / $. $. $$$$$, $. $. $$$$$$$. — $$$$$-$$$$$$$$$ : $$$$$, $$$$. — $$$ $. — $$$$ $$$-$-$$$$-$$$$-$.

$$. $$$$$$, $. $. $$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$$$ : $$$$$$$ $$$$$$$ / $. $. $$$$$$. — $$$$$$ : $$$$$$$ $$$$$ — $$$$$$$, $$$$. — $$$ $. — $$$$ $$$-$-$$$$-$$$$-$.

$$. $$$$$, $. $. $$$$$$$$$$$$$$ $$$$$$$ : $$$$$$$ / $. $. $$$$$, $. $. $$$$$$$$$$, $. $. $$$$$$$. — $$$$$$ : $$$$$, $$$$. — $$$ $. — $$$$ $$$-$-$$$$-$$$$-$.

$$. $$$$$$$, $. $. $$$$$$$$$$ $$$-$$$$$$$$$$ $$ $$$$$$$ : $$$$$$$ $$$$$$$ / $. $. $$$$$$$. — $$$$$-$$$$$$$$$ : $$$-$$$$$$$$$, $$$$. — $$$ $. — $$$$ $$$-$-$$$$-$$$$-$.

$$. $$$$$$$, $. $. $$$$$$$$$$ $$$$$$$-$$$$$$$$$$ $$ $$$$$$ : $$$$$$$ $$$$$$$ / $. $. $$$$$$$. — $$$$$$ : $$$ $$$$$, $$$$. — $$$ $. — $$$$ $$$-$-$$$$$-$$$$-$.

$$. $$$$$$$, $. $. $$$$$$$$$$$ $$$$$$$$ $ $$$$$ $$$$$$ : $$$$$$$ $$$$$$$ / $. $. $$$$$$$. — $$$$$$ : $$$$$-$, $$$$. — $$$ $. — $$$$ $$$-$-$$-$$$$$$-$.

$$. $$$$$$$, $. $. $$$$$$$$$$ $$$$$$$$$ $$$$$$$$$$ $ $$$$$$-$$$$$$$ : $$$$$$$ $$$$$$$ / $. $. $$$$$$$. — $$$$$-$$$$$$$$$ : $$$$$, $$$$. — $$$ $. — $$$$ $$$-$-$$$$-$$$$-$.

$$. $$$$$$$, $. $. $$$$$$$$-$$$$$$$$$$ $$ $$$.$$ : $$$$$$$ $$$$$$$ / $. $. $$$$$$$. — $$$$$$ : $$$$$$$ $$$$$ — $$$$$$$, $$$$. — $$$ $. — $$$$ $$$-$-$$$$-$$$$-$.

$$. $$$$$$$$, $. $. $$$$$ $$$$$$$$$$$$$$$$ $$$$$ $$$ $$$-$$$$$$$$$$ : $$$$$$$ $$$$$$$ / $. $. $$$$$$$$. — $$$$$$ : $$$$$$, $$$$. — $$$ $. — $$$$ $$$-$-$$$-$$$$$-$.

$$. $$$$$$$$$, $. $. $$$$ $$$. $$$$$$$$$$$$$$ $ $$$$$$$$$$ : $$$$$$$ $$$$$$$ / $. $. $$$$$$$$$. — $$$$$-$$$$$$$$$ : $$$-$$$$$$$$$, $$$$. — $$$ $. — $$$$ $$$-$-$$$$-$$$$-$.

$$. $$$$$$$, $. $. $$$$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$$$$$$$ $$$$$$ : $$$$$$$ / $. $. $$$$$$$. — $$$$$$ : $$$$$$$ $ $$$$$$$$$$, $$$$. — $$$ $. — $$$$ $$$-$-$$$-$$$$$-$.

$$. $$$$$, $. $. $$$$$$$$-$$$$$$$$$$$$$$$ $$$$$$$$$$$$$$$$ $$ $$$$$$ : $$$$$$$ $$$$$$$ / $. $. $$$$$. — $$$$$$ : $$$ $$$$$, $$$$. — $$$ $. — $$$$ $$$-$-$$$$$-$$$$-$.

$$. $$$$$$$$, $. $. $$$$$$$$$$ $$$$$$$$$ $ $$-$$$$$ : $$$$$$$ $$$$$$$ / $. $. $$$$$$$$. — $$$$$$ : $$$$$, $$$$. — $$$ $. — $$$$ $$$-$-$$$-$$$$$-$.

Дипломная работа
Нужна эта дипломная?
Купить за 1400 ₽ Скрыть работу
Четкое соответствие методическим указаниям
Генерация за пару минут и ~100% уникальность текста
4 бесплатные генерации и добавление своего плана и содержания
Возможность ручной доработки работы экспертом
Уникальная работа за пару минут
У вас есть 4 бесплатные генерации
Похожие работы

Генераторы студенческих работ

Генерируется в соответствии с точными методическими указаниями большинства вузов
4 бесплатные генерации

Служба поддержки работает

с 10:00 до 19:00 по МСК по будням

Для вопросов и предложений

Адрес

241007, Россия, г. Брянск, ул. Дуки, 68, пом.1

Реквизиты

ООО "Просвещение"

ИНН организации: 3257026831

ОГРН организации: 1153256001656

Я вывожусь на всех шаблонах КРОМЕ cabinet.html