442 lines
32 KiB
Markdown
442 lines
32 KiB
Markdown
## Функциональные требования функционала отправки сообщений между пользователями внутри уже созданной информационной системы
|
||
|
||
## 1. Общие сведения о Заявке
|
||
|
||
### 1.1. Наименование информационной системы
|
||
|
||
...
|
||
|
||
### 1.2. Наименование подсистемы информационной системы:
|
||
|
||
Система Отправки Сообщений "Ничатка" (СОС "НИЧАТКА")
|
||
|
||
### 1.3. Функциональный заказчик
|
||
|
||
...
|
||
|
||
### 1.4. Автор
|
||
|
||
Еремин Сергей
|
||
|
||
### 1.5. Компонент(ы) подсистемы, подлежащий развитию, обработке
|
||
|
||
Система Запросов и Заданий "Вехно" (СЗЗ "ВЕХНО")
|
||
|
||
### 1.6. Приоритет заявки
|
||
|
||
...
|
||
|
||
### 1.7. Предлагаемый срок исполнения работ по заявке
|
||
|
||
...
|
||
|
||
## 2. Цели и обоснование необходимости реализации
|
||
|
||
### 2.1. Цель создания подсистемы:
|
||
|
||
Модернизация СЗЗ "ВЕХНО" с целью реализация функционала отправки сообщений между пользователями.
|
||
|
||
### 2.2. Описание проблемы, решение которой требуется разработать
|
||
|
||
Необходимо обеспечить возможность обмениваться сообщениями между пользователями в рамках информационной СЗЗ "ВЕХНО".
|
||
|
||
### 2.3. Описание ожидаемых результатов от реализации подсистемы
|
||
|
||
Пользователи смогут обмениваться сообщениями в рамках СЗЗ "ВЕХНО", что позволит улучшить коммуникацию между пользователями и повысить эффективность работы в рамках проектов.
|
||
|
||
### 3. Нормативные и методические документы влияющие на выполнение заявки
|
||
|
||
#### 3.1. Нормативные правовые акты: ____
|
||
|
||
#### 3.2. Методические и иные документы определяющие требования и ограничения процессам, подлежащим автоматизации: ____
|
||
|
||
### 4. Требования к результату
|
||
|
||
### 4.1. Бизнес- или функциональные требования
|
||
|
||
Модернизация СЗЗ "ВЕХНО", с целью привнесения функционала обмена сообщениями между пользователями (СОС "НИЧАТКА").
|
||
|
||
СОС "НИЧАТКА" должна быть реализована как надстройка над СЗЗ "ВЕХНО" и обеспечивать возможность обмена сообщениями между пользователями.
|
||
|
||
* Сообщения имеют могут быть как адресованные конкретному пользователю (адресные), так и групповые (групповые), а так же безадресные (широковещательные).
|
||
* Сообщения могут иметь метки:
|
||
* цветовые: не менее шести;
|
||
* приоритетные: критично, важно, обычно;
|
||
* статусные: новые, прочитано, скрыто.
|
||
* Система должна обеспечивать возможность скрытия обработанных сообщений (удаление сообщений запрещено).
|
||
* Система должна обеспечивать возможность просмотра истории сообщений (включая скрытые).
|
||
* Система должна обеспечивать возможность управления сообщениями (изменения цветовых меток и приоритета, скрытие).
|
||
* Система должна обеспечивать возможность управления списком пользователей (адресатов адресных и групповых сообщений)
|
||
* Система должна обеспечивать возможность просмотра истории сообщений. Просмотр должен быть снабжен системой фильтров и поиска.
|
||
|
||
СОС "НИЧАТКА" должна быть реализована как надстройка над СЗЗ "ВЕХНО". Основной код и БД не должны быть изменены. Рефакторинг кода СЗЗ "ВЕХНО" допускается. Изменения дизайн (фронтэнд) допускается в минимальных объемах.
|
||
|
||
### 4.2. Общее описание автоматизируемых бизнес-процессов и их участников, модели взаимодействия и порядка обработки данных
|
||
|
||
#### 4.2.1. Наименование бизнес-процесса
|
||
|
||
СОС "НИЧАТКА" -- Система обмен сообщениями между пользователями СЗЗ "ВЕХНО"
|
||
|
||
#### 4.2.2. Описание (логика бизнес-процесса)
|
||
|
||
СОС "НИЧАТКА" должна быт разработана как отдельное приложение (django app), работающее в рамках СЗЗ "ВЕХНО". Никакие таблицы БД СЗЗ "ВЕХНО" не должны быть измены. Все таблицы СОС "НИЧАТКА" должны быть созданы в отдельной схеме БД.
|
||
|
||
Доработка дизайна (фронтэнд) СЗЗ "ВЕХНО" ограничивается добавлением двух элементов: иконка <колокольчик> в верхнем меню и скрытый блок для AJAX-подгрузки (виджета).
|
||
```
|
||
+--------------------------------------------------------------------------+
|
||
| ВЕРХНЕЕ МЕНЮ СЗЗ "ВЕХНО" <колокольчик> {user}|
|
||
+--------------------------------------------------------------------------+
|
||
| ОСНОВНОЙ ИНТЕРФЕЙС СЗЗ "ВЕХНО" | ПАНЕЛЬ СОС "НИЧАТКА" |
|
||
| | (блок открыт) |
|
||
| | |
|
||
| | |
|
||
| | |
|
||
| | |
|
||
| | |
|
||
| +----------------------|
|
||
| |
|
||
| |
|
||
| |
|
||
+--------------------------------------------------------------------------+
|
||
```
|
||
|
||
Псевдокод BPMN диаграммы:
|
||
|
||
1. Создать пул для системы.
|
||
2. Добавить дорожки для "Пользователь" и "Система".
|
||
* Добавить задачи и события:
|
||
* Начальное событие: "Загрузка страницы"
|
||
* Задача: "Запрос статуса из СОС 'НИЧАТКА'"
|
||
* Задача: "Отобразить колокольчик со статусом"
|
||
* Промежуточное событие: "Клик на колокольчик"
|
||
* Исключающее условие: "Панель видима?"
|
||
* Если нет:
|
||
* Задача: "Загрузить контент из СОС 'НИЧАТКА'" (по web-api)
|
||
* Задача: "Показать панель"
|
||
* Если да:
|
||
* Задача: "Скрыть панель"
|
||
* Конечное событие: "Конец"
|
||
|
||
Диаграмма:
|
||
```bpmn
|
||
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL">
|
||
<bpmn:process id="message_system_status" name="Статус системы сообщений">
|
||
<bpmn:laneSet>
|
||
<bpmn:lane id="user_lane" name="Пользователь">
|
||
<bpmn:flowNodeRef>click_bell_event</bpmn:flowNodeRef>
|
||
</bpmn:lane>
|
||
<bpmn:lane id="system_lane" name="Система">
|
||
<bpmn:flowNodeRef>request_status_task</bpmn:flowNodeRef>
|
||
<bpmn:flowNodeRef>display_bell_task</bpmn:flowNodeRef>
|
||
<bpmn:flowNodeRef>load_content_task</bpmn:flowNodeRef>
|
||
<bpmn:flowNodeRef>show_panel_task</bpmn:flowNodeRef>
|
||
<bpmn:flowNodeRef>hide_panel_task</bpmn:flowNodeRef>
|
||
</bpmn:lane>
|
||
</bpmn:laneSet>
|
||
<bpmn:startEvent id="start_event" name="Загрузка страницы"/>
|
||
<bpmn:task id="request_status_task" name="Отправить запрос на получение статуса из СОС 'НИЧАТКА"/>
|
||
<bpmn:task id="display_bell_task" name="Отобразить колокольчик и число сообщений"/>
|
||
<bpmn:intermediateCatchEvent id="click_bell_event" name="Нажатие на колокольчик">
|
||
<bpmn:timerEventDefinition/>
|
||
</bpmn:intermediateCatchEvent>
|
||
<bpmn:exclusiveGateway id="is_panel_visible" name="Панель видима?"/>
|
||
<bpmn:task id="load_content_task" name="Загрузить контент из СОС 'НИЧАТКА'"/>
|
||
<bpmn:task id="show_panel_task" name="Показать панель"/>
|
||
<bpmn:task id="hide_panel_task" name="Скрыть панель"/>
|
||
<bpmn:endEvent id="end_event" name="Конец"/>
|
||
<bpmn:sequenceFlow id="flow1" sourceRef="start_event" targetRef="request_status_task"/>
|
||
<bpmn:sequenceFlow id="flow2" sourceRef="request_status_task" targetRef="display_bell_task"/>
|
||
<bpmn:sequenceFlow id="flow3" sourceRef="display_bell_task" targetRef="click_bell_event"/>
|
||
<bpmn:sequenceFlow id="flow4" sourceRef="click_bell_event" targetRef="is_panel_visible"/>
|
||
<bpmn:sequenceFlow id="flow5" sourceRef="is_panel_visible" targetRef="load_content_task">
|
||
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">No</bpmn:conditionExpression>
|
||
</bpmn:sequenceFlow>
|
||
<bpmn:sequenceFlow id="flow6" sourceRef="load_content_task" targetRef="show_panel_task"/>
|
||
<bpmn:sequenceFlow id="flow7" sourceRef="show_panel_task" targetRef="end_event"/>
|
||
<bpmn:sequenceFlow id="flow8" sourceRef="is_panel_visible" targetRef="hide_panel_task">
|
||
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">Yes</bpmn:conditionExpression>
|
||
</bpmn:sequenceFlow>
|
||
<bpmn:sequenceFlow id="flow9" sourceRef="hide_panel_task" targetRef="end_event"/>
|
||
</bpmn:process>
|
||
</bpmn:definitions>
|
||
```
|
||
|
||
```text
|
||
Пул: Система
|
||
+------------------------------------------------------+
|
||
| Дорожка: Пользователь |
|
||
| +-----------------------------+ |
|
||
| | Начальное событие: | |
|
||
| | "Загрузка страницы" | |
|
||
| +-------------+---------------+ |
|
||
| | |
|
||
| v |
|
||
| +-------------+---------------+ |
|
||
| | Задача: | |
|
||
| | "Запрос статуса из СОС |-----------------+ |
|
||
| | 'НИЧАТКА'" | | |
|
||
| +-------------+---------------+ | |
|
||
| | | |
|
||
| v | |
|
||
| +-------------+---------------+ | |
|
||
| | Задача: |<----------------+ |
|
||
| | "Отобразить колокольчик | |
|
||
| | со статусом" | |
|
||
| +-------------+---------------+ |
|
||
| | |
|
||
| v |
|
||
| +-------------+---------------+ |
|
||
| | Промежуточное событие: | |
|
||
| | "Клик на колокольчик" | |
|
||
| +-------------+---------------+ |
|
||
| | |
|
||
| v |
|
||
| +-------------+---------------+ |
|
||
| | Исключающее условие: | |
|
||
| | "Панель видима?" | |
|
||
| +------+------------+----------+ |
|
||
| | | |
|
||
| | Нет | Да |
|
||
| | | |
|
||
| v v |
|
||
| +------+------------+----------+ |
|
||
| | Задача: | |
|
||
| | "Загрузить контент из СОС |-----------------+ |
|
||
| | 'НИЧАТКА'" | | |
|
||
| +------+------------+----------+ | |
|
||
| | +------+ |
|
||
| | | |
|
||
| v v |
|
||
| +------+------------+---------+ +------+----------+|
|
||
| | Задача: | | Задача: ||
|
||
| | "Показать панель" | | "Скрыть панель" ||
|
||
| +-------------+---------------+ +------+----------+|
|
||
| | |
|
||
| v |
|
||
| +-------------+---------------+ |
|
||
| | Конечное событие: | |
|
||
| | "Конец" | |
|
||
| +-----------------------------+ |
|
||
+------------------------------------------------------+
|
||
| Дорожка: Система |
|
||
| +-----------------------------+ |
|
||
| | Начальное событие: | |
|
||
| | "Запрос статуса из СОС |<-----------------+ |
|
||
| | 'НИЧАТКА'" | |
|
||
| +-------------+---------------+ |
|
||
| | |
|
||
| v |
|
||
| +-------------+---------------+ |
|
||
| | Задача: | |
|
||
| | "Отправить запрос к СОС | |
|
||
| | 'НИЧАТКА'" | |
|
||
| +-------------+---------------+ |
|
||
| | |
|
||
| v |
|
||
| +-------------+---------------+ |
|
||
| | Задача: | |
|
||
| | "Получить статус" | |
|
||
| +-------------+---------------+ |
|
||
| | |
|
||
| v |
|
||
| +-------------+---------------+ |
|
||
| | Задача: | |
|
||
| | "Передать статус в дорожку |------------------+ |
|
||
| | 'Пользователь'" | | |
|
||
| +-------------+---------------+ | |
|
||
| | | |
|
||
| v | |
|
||
| +-------------+---------------+ | |
|
||
| | Задача: | | |
|
||
| | "Загрузить контент из СОС |<----=------------+ |
|
||
| | 'НИЧАТКА'" | | |
|
||
| +-------------+---------------+ | |
|
||
| | | |
|
||
| v | |
|
||
| +-------------+---------------+ | |
|
||
| | Задача: | | |
|
||
| | "Передать контент в дорожку |-----------------+ |
|
||
| | 'Пользователь'" | |
|
||
| +-------------+---------------+ |
|
||
+------------------------------------------------------+
|
||
|
||
```
|
||
|
||
СОС "НИЧАТКА" должна быть реализована как отдельное приложение (django app), работающее в рамках СЗЗ "ВЕХНО". Никакие таблицы БД СЗЗ "ВЕХНО" не должны быть измены. Все таблицы СОС "НИЧАТКА" должны быть созданы в отдельной схеме БД.
|
||
|
||
Псевдокод BPMN диаграммы:
|
||
1. Создать пул для системы.
|
||
2. Добавить дорожки для "Статус" и "Панель".
|
||
* Добавить задачи и события:
|
||
* Начальное событие: "Запрос статуса {user}"
|
||
* Задача: "Отправить ответ на запрос статуса: число сообщений и наивысший приоритет"
|
||
* Промежуточное событие: "Получение списка приоритетов непрочитанных сообщений"
|
||
* Задача: "Посчитать общее количество непрочитанных сообщений (через список статусов)"
|
||
* Задача: "Найти наивысший приоритет среди списка статусов"
|
||
* Добавить задачу и событие:
|
||
* Начальное событие: "Оправить рендер (web-api) для Панели Сообщений"
|
||
* Задача: "Отобразить элемент управления: фильтры"
|
||
* Задача: "Получить и отобразить список сообщений"
|
||
* Промежуточное событие: "Получение списка сообщений в соответствии с фильтрами и пейджинацией"
|
||
* Задача: "Отобразить список -- сообщение-отправитель-дата-время-получатели"
|
||
* Промежуточное событие: "Отобразить дополнительные элементы управления сообщением"
|
||
* Задача: "Отобразить элементы управления: прочитано (скрыть)"
|
||
* Задача: "Отобразить элементы управления: цветовые метки"
|
||
* Задача: "Отобразить элементы управления: ответить"
|
||
* Задача: "Отобразить пейджинатор"
|
||
* Задача: "Отобразить элемент управления: создать и отправить сообщение"
|
||
* Промежуточное событие: "Получение списка адресатов (пользователей)"
|
||
* Задача: "Отобразить элемент управления: список и выбора адресатов"
|
||
* Задача: "Отобразить элемент управления: список и выбора приоритета"
|
||
* Задача: "Отобразить элемент управления: ввести сообщение (текст)"
|
||
* Задача: "Отобразить элемент управления: Отменить"
|
||
* Задача: "Отобразить элемент управления: Отправить"
|
||
|
||
И так далее... не уверен, что все правильно с точки зрения BPMN (никогда не использовал), но думаю, что идея понятна.
|
||
|
||
|
||
#### 4.2.3 Участники взаимодействия и их роли
|
||
|
||
Учаcтники: все пользователи СЗЗ "ВЕХНО".
|
||
|
||
Роли: СОС "НИЧАТКА" -- одноранговая. Каждый может отправить сообщение любому, и ответить на любое полученное сообщение или скрыть его.
|
||
|
||
|
||
#### 4.2.4. Схема взаимодействия
|
||
|
||
Система обмена сообщениями и взаимодействия между пользователями асинхронная, одноранговая. Пользователь может отправить сообщение, а также прочитать, ответить на него или скрыть. Пользователь может отправить сообщение любому пользователю, а также нескольким пользователям (группе). Пользователь может отправить широковещательное сообщение. Для отправки широковещательных сообщений пользователь должен выбрать группу (адресата) "Все".
|
||
|
||
Схема взаимодействия пользователей представлена на блок-схеме:
|
||
|
||
```mermaid
|
||
graph TD
|
||
А[Пользователь] -->|Запрос статуса| B(Статус)
|
||
B -->|Отправить статус| А
|
||
А -->|Клик на колокольчик / Запросить контент/список сообщений| C(Панель сообщений)
|
||
C -->|Отобразить список сообщений в соответсвии с фильтрами и паджинацией| А
|
||
A -->|Создать сообщение| D(Отправить сообщение)
|
||
А -->|Указать адресата или адресатов| D
|
||
А -->|Указать приоритет| D
|
||
D -->|Отправить сообщение| C
|
||
А -->|Отправить состояние| E(Состояние)
|
||
E -->|Изменить панель сообщений| C
|
||
```
|
||
|
||
|
||
#### 4.2.5. Описание смежных видов деятельности
|
||
|
||
Каждый пользователь при создании сообщения может установить его приоритет. Приоритеты: критично, важно, обычно. Адресат не может изменить приоритет сообщения. Ответив на сообщение, приоритет сохраняется.
|
||
|
||
Каждый пользователь может установить свои цветовые метки для сообщений. Установленные метки видны только установившему их пользователю.
|
||
|
||
|
||
#### 4.2.6. Описание основных сущностей
|
||
|
||
Сущности:
|
||
* сообщение
|
||
* адресат/адресаты (пользователь)
|
||
* отправитель (пользователь)
|
||
* приоритет сообщения
|
||
* цветовая метка сообщения в привязке к пользователю
|
||
* статус сообщения (новое, прочитанное, скрытое)
|
||
* родительское сообщение (в случае, если сообщение является ответом)
|
||
* штамп времени
|
||
|
||
|
||
### 4.3. Входные данные
|
||
|
||
Весь обмен данными между СОС "НИЧАТКА" и СЗЗ "ВЕХНО" должен осуществляться через web-api. Состав данных определяется через URL-запроса.
|
||
|
||
|
||
### 4.3.1. Состав входной информации
|
||
|
||
Запрос статуса:
|
||
* Параметры:
|
||
* Уникальный ник-нейм пользователя СЗЗ "ВЕХНО"
|
||
* Токен верификации
|
||
* Метод: GET
|
||
* Исключения: В случае отсутствия данных, система должна вернуть ошибку 401.
|
||
|
||
Запрос панели сообщений:
|
||
* Поля:
|
||
* Уникальный ник-нейм пользователя СЗЗ "ВЕХНО"
|
||
* Токен верификации
|
||
* Параметры фильтрации
|
||
* Параметры пейджинации.
|
||
* Метод: GET
|
||
* Исключения: В случае отсутствия данных, система должна вернуть ошибку 401.
|
||
|
||
Передача сообщения:
|
||
* Поля:
|
||
* Уникальный ник-нейм пользователя СЗЗ "ВЕХНО"
|
||
* Токен верификации
|
||
* Адресат/адресаты (если есть, для первичного сообщения)
|
||
* Приоритет
|
||
* Текст сообщения
|
||
* ID родительского сообщения (если есть, для ответа)
|
||
* Метод: POST
|
||
* Исключения: В случае ошибки данных, система должна вернуть статус 401.
|
||
|
||
Передача изменения состояния:
|
||
* Поля:
|
||
* Уникальный ник-нейм пользователя СЗЗ "ВЕХНО"
|
||
* Токен верификации
|
||
* ID сообщения
|
||
* Параметры изменения: цветовая метка, приоритет, статус
|
||
* Параметры статуса сообщения: прочитано, скрыть
|
||
* Статус "происходит ввод текста" (для предотвращения перезагрузки виджета в момент ввода нового сообщения)
|
||
* Метод: PATCH (GET)
|
||
* Исключения: В случае ошибки данных, система должна вернуть статус 401.
|
||
|
||
|
||
##### 4.3.2. Наименование набора данных
|
||
|
||
Никакие данные, кроме уникального ник-нейма пользователя СЗЗ "ВЕХНО" и токена верификации, не должны быть переданы в запросе к СОС "НИЧАТКА". Все прочие запросы и ответы являются частью СОС "НИЧАТКА", и осуществляются внутри блока (виджета) СОС "НИЧАТКА".
|
||
|
||
|
||
###### 4.3.2.1. Описание входной информации
|
||
|
||
Все данные из СОС "НИЧАТКА" должны быть переданы в формате составе URL и методом GET или POST.
|
||
|
||
|
||
###### 4.3.2.2. Формат
|
||
|
||
Переменные GET или POST.
|
||
|
||
|
||
###### 4.3.2.3. Способ загрузки
|
||
|
||
Загрузка данных должна осуществляться через web-api. Витжет СОС "НИЧАТКА" отправляет периодически запрос статуса и запрос на обновление панели сообщений (виджета) в случае если панель открыта.
|
||
|
||
|
||
###### 4.3.2.4. Владелец
|
||
|
||
СОС "НИЧАТКА" одноранговая. Сообщения не имеют владельца. И отправитель, и адресата -- равноправные участники, никто не имеет права изменять или удалять сообщения )ни свои. ни других участников).
|
||
|
||
|
||
#### 4.4. Выходные данные
|
||
|
||
Все данные из СОС "НИЧАТКА" должны быть переданы в формате web-api (готовые фрагменты HTML для обработки внутри виджета). Протокол передачи данных: HTTPS, сжатые gzip, кодировка utf-16.
|
||
|
||
|
||
### 4.5. Нефункциональные требования
|
||
|
||
Цветовые и стилевые решения внутри виджета СОС "НИЧАТКА" должны быть согласованы с дизайном СЗЗ "ВЕХНО". Виджет должен быть адаптивным и поддерживать все современные браузеры. Виджет должен быть легковесным и не замедлять работу СЗЗ "ВЕХНО". Виджет должен быть удобным в использовании и интуитивно понятным.
|
||
|
||
|
||
## 5. Роли и права доступа пользователей
|
||
|
||
Роли и права доступа пользователей в СОС "НИЧАТКА" не регламентируются. Все пользователи равноправны и могут обмениваться сообщениями между собой. Права доступа к сообщениям и их изменениям не регламентируются. Пользователь может изменить цветовую метку, приоритет и статус сообщения, а также скрыть его. Эти изменения касаются только отображения сообщений для конкретного пользователя.
|
||
|
||
## 6. Критерии проверки результатов работ
|
||
|
||
* Результаты работ должны быть проверены на соответствие бизнес-требованиям и функциональным требованиям.
|
||
* Результаты работ должны быть проверены на соответствие нефункциональным требованиям.
|
||
* Результаты работ должны быть проверены на соответствие дизайну СЗЗ "ВЕХНО".
|
||
* Результаты работ должны быть проверены на соответствие стандартам безопасности и качества кода.
|
||
* Результаты работ должны быть проверены на соответствие стандартам производительности и оптимизации кода.
|
||
* Результаты работ должны быть проверены на соответствие стандартам адаптивности и кросс-браузерности.
|
||
* Результаты работ должны быть проверены на соответствие стандартам доступности и удобства использования.
|
||
* Результаты работ должны быть проверены на соответствие стандартам тестирования и отладки.
|
||
* Результаты работ должны быть проверены на соответствие стандартам документирования и комментирования кода.
|