first commit

This commit is contained in:
2026-10-03 23:43:38 +04:00
commit 3a8045a141
40 changed files with 6262 additions and 0 deletions

126
content/03-design.md Normal file
View File

@@ -0,0 +1,126 @@
# ПРОЕКТИРОВАНИЕ ИНФОРМАЦИОННОЙ СИСТЕМЫ
В разделе описаны архитектура, модель данных и пользовательские сценарии разрабатываемой
информационной системы.
## Архитектура системы
Система построена по трёхуровневой архитектуре. Взаимодействие компонентов показано на
рисунке @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
Оценка выполнена для среднего месяца пилотной эксплуатации.
Отклонение фактических значений не превышает десяти процентов.
:::