7.8 KiB
ПРОЕКТИРОВАНИЕ ИНФОРМАЦИОННОЙ СИСТЕМЫ
В разделе описаны архитектура, модель данных и пользовательские сценарии разрабатываемой информационной системы.
Архитектура системы
Система построена по трёхуровневой архитектуре. Взаимодействие компонентов показано на рисунке @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 — число обращений в месяц. :::
К системе предъявляются следующие требования:
- функциональные:
- регистрация и классификация заявок;
- назначение исполнителя и контроль сроков;
- формирование отчётов за период.
- нефункциональные:
- время отклика не более двух секунд;
- одновременная работа не менее ста пользователей.
Особенности реализации
При проектировании учтены ограничения, перечисленные в таблице @tbl:constraints.
::: table "Ограничения и меры" id=constraints
| Ограничение | Влияние | Мера |
|---|---|---|
| Ограниченный бюджет | Сужение выбора технологий | Применение открытых библиотек |
| Сжатые сроки | Риск неполной реализации | Итеративная разработка |
| Нагрузка до 100 пользователей | Требования к производительности | Кэширование и индексы |
| Устаревшее оборудование | Ограничение ресурсов | Облегчённый веб-интерфейс |
| Разрозненные данные | Сложность интеграции | Единая модель данных |
| Требования безопасности | Дополнительные проверки | Аутентификация и журналирование |
| ::: |
::: notes Оценка выполнена для среднего месяца пилотной эксплуатации. Отклонение фактических значений не превышает десяти процентов. :::