# ПРОЕКТИРОВАНИЕ ИНФОРМАЦИОННОЙ СИСТЕМЫ В разделе описаны архитектура, модель данных и пользовательские сценарии разрабатываемой информационной системы. ## Архитектура системы Система построена по трёхуровневой архитектуре. Взаимодействие компонентов показано на рисунке @fig:data-flow. ::: figure "Схема информационных потоков" id=data-flow file=images/data-flow.png а) направление передачи данных; б) компоненты системы. ::: Состав программных модулей приведён в таблице @tbl:modules. ::: table "Состав программных модулей" id=modules | Модуль | Назначение | Технология | |---|---|---| | Веб-интерфейс | Отображение рабочих экранов оператора | React | | API-шлюз | Обработка HTTP-запросов клиентов | Node.js | | Модуль заявок | Жизненный цикл обращения | Node.js | | Модуль уведомлений | Рассылка оповещений исполнителям | Node.js | | Модуль отчётности | Формирование отчётов за период | Node.js | | Служба аутентификации | Проверка учётных данных | JWT | | Хранилище данных | Хранение заявок и справочников | PostgreSQL | | Кэш | Ускорение чтения справочников | Redis | | Очередь сообщений | Асинхронная обработка событий | RabbitMQ | | Сборщик журналов | Централизованное логирование | ELK | | Планировщик | Периодические задачи и отчёты | Cron | | Модуль интеграции | Обмен данными с внешними системами | REST | ::: ## Модель данных Основные сущности предметной области и их атрибуты приведены в таблице @tbl:entities. ::: table "Основные сущности и атрибуты" id=entities | Сущность | Атрибут | Тип | Обяз. | Описание | |---|---|---|---|---| | Заявка | id | Целое | Да | Уникальный идентификатор | | Заявка | subject | Строка | Да | Тема обращения | | Заявка | description | Текст | Да | Описание проблемы | | Заявка | category_id | Целое | Да | Ссылка на категорию | | Заявка | priority_id | Целое | Да | Ссылка на приоритет | | Заявка | assignee_id | Целое | Нет | Ссылка на исполнителя | | Заявка | created_at | Дата/время | Да | Момент регистрации | | Заявка | closed_at | Дата/время | Нет | Момент закрытия | | Категория | id | Целое | Да | Уникальный идентификатор | | Категория | name | Строка | Да | Наименование категории | | Приоритет | id | Целое | Да | Уникальный идентификатор | | Приоритет | name | Строка | Да | Наименование приоритета | | Приоритет | reaction_min | Целое | Да | Норматив реакции, мин | | Пользователь | id | Целое | Да | Уникальный идентификатор | | Пользователь | full_name | Строка | Да | Фамилия, имя, отчество | ::: Связи между сущностями описаны в таблице @tbl:relations. ::: table "Связи между сущностями" id=relations | Связь | Тип | Описание | |---|---|---| | Заявка — Категория | Многие к одному | Заявка относится к одной категории | | Заявка — Приоритет | Многие к одному | Заявка имеет один приоритет | | Заявка — Пользователь | Многие к одному | Заявка назначена одному исполнителю | | Заявка — Комментарий | Один ко многим | Заявка содержит комментарии | | Пользователь — Роль | Многие ко многим | Пользователь может иметь роли | | Категория — Подкатегория | Один ко многим | Категория содержит подкатегории | ::: ## Пользовательские сценарии Интерфейс списка заявок приведён на рисунке @fig:interface. ::: figure "Интерфейс списка заявок" id=interface file=images/interface.png а) область навигации; б) табличное представление данных. ::: Зависимость трудозатрат от выбранной стратегии обработки показана на рисунке @fig:chart. ::: figure "Зависимость трудозатрат от стратегии обработки" id=chart file=images/chart.png Оценка получена по результатам пилотной эксплуатации. ::: Экономия времени за месяц вычисляется по формуле @eq:gain. ::: formula id=gain G = (T_base - T_new)*N ::: ::: where G — экономия времени за месяц, мин; N — число обращений в месяц. ::: К системе предъявляются следующие требования: - функциональные: 1. регистрация и классификация заявок; 2. назначение исполнителя и контроль сроков; 3. формирование отчётов за период. - нефункциональные: 1. время отклика не более двух секунд; 2. одновременная работа не менее ста пользователей. ## Особенности реализации При проектировании учтены ограничения, перечисленные в таблице @tbl:constraints. ::: table "Ограничения и меры" id=constraints | Ограничение | Влияние | Мера | |---|---|---| | Ограниченный бюджет | Сужение выбора технологий | Применение открытых библиотек | | Сжатые сроки | Риск неполной реализации | Итеративная разработка | | Нагрузка до 100 пользователей | Требования к производительности | Кэширование и индексы | | Устаревшее оборудование | Ограничение ресурсов | Облегчённый веб-интерфейс | | Разрозненные данные | Сложность интеграции | Единая модель данных | | Требования безопасности | Дополнительные проверки | Аутентификация и журналирование | ::: ::: notes Оценка выполнена для среднего месяца пилотной эксплуатации. Отклонение фактических значений не превышает десяти процентов. :::