32 KiB
Функциональные требования функционала отправки сообщений между пользователями внутри уже созданной информационной системы
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 диаграммы:
- Создать пул для системы.
- Добавить дорожки для "Пользователь" и "Система".
- Добавить задачи и события:
- Начальное событие: "Загрузка страницы"
- Задача: "Запрос статуса из СОС 'НИЧАТКА'"
- Задача: "Отобразить колокольчик со статусом"
- Промежуточное событие: "Клик на колокольчик"
- Исключающее условие: "Панель видима?"
- Если нет:
- Задача: "Загрузить контент из СОС 'НИЧАТКА'" (по web-api)
- Задача: "Показать панель"
- Если да:
- Задача: "Скрыть панель"
- Если нет:
- Конечное событие: "Конец"
- Добавить задачи и события:
Диаграмма:
<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>
Пул: Система
+------------------------------------------------------+
| Дорожка: Пользователь |
| +-----------------------------+ |
| | Начальное событие: | |
| | "Загрузка страницы" | |
| +-------------+---------------+ |
| | |
| v |
| +-------------+---------------+ |
| | Задача: | |
| | "Запрос статуса из СОС |-----------------+ |
| | 'НИЧАТКА'" | | |
| +-------------+---------------+ | |
| | | |
| v | |
| +-------------+---------------+ | |
| | Задача: |<----------------+ |
| | "Отобразить колокольчик | |
| | со статусом" | |
| +-------------+---------------+ |
| | |
| v |
| +-------------+---------------+ |
| | Промежуточное событие: | |
| | "Клик на колокольчик" | |
| +-------------+---------------+ |
| | |
| v |
| +-------------+---------------+ |
| | Исключающее условие: | |
| | "Панель видима?" | |
| +------+------------+----------+ |
| | | |
| | Нет | Да |
| | | |
| v v |
| +------+------------+----------+ |
| | Задача: | |
| | "Загрузить контент из СОС |-----------------+ |
| | 'НИЧАТКА'" | | |
| +------+------------+----------+ | |
| | +------+ |
| | | |
| v v |
| +------+------------+---------+ +------+----------+|
| | Задача: | | Задача: ||
| | "Показать панель" | | "Скрыть панель" ||
| +-------------+---------------+ +------+----------+|
| | |
| v |
| +-------------+---------------+ |
| | Конечное событие: | |
| | "Конец" | |
| +-----------------------------+ |
+------------------------------------------------------+
| Дорожка: Система |
| +-----------------------------+ |
| | Начальное событие: | |
| | "Запрос статуса из СОС |<-----------------+ |
| | 'НИЧАТКА'" | |
| +-------------+---------------+ |
| | |
| v |
| +-------------+---------------+ |
| | Задача: | |
| | "Отправить запрос к СОС | |
| | 'НИЧАТКА'" | |
| +-------------+---------------+ |
| | |
| v |
| +-------------+---------------+ |
| | Задача: | |
| | "Получить статус" | |
| +-------------+---------------+ |
| | |
| v |
| +-------------+---------------+ |
| | Задача: | |
| | "Передать статус в дорожку |------------------+ |
| | 'Пользователь'" | | |
| +-------------+---------------+ | |
| | | |
| v | |
| +-------------+---------------+ | |
| | Задача: | | |
| | "Загрузить контент из СОС |<----=------------+ |
| | 'НИЧАТКА'" | | |
| +-------------+---------------+ | |
| | | |
| v | |
| +-------------+---------------+ | |
| | Задача: | | |
| | "Передать контент в дорожку |-----------------+ |
| | 'Пользователь'" | |
| +-------------+---------------+ |
+------------------------------------------------------+
СОС "НИЧАТКА" должна быть реализована как отдельное приложение (django app), работающее в рамках СЗЗ "ВЕХНО". Никакие таблицы БД СЗЗ "ВЕХНО" не должны быть измены. Все таблицы СОС "НИЧАТКА" должны быть созданы в отдельной схеме БД.
Псевдокод BPMN диаграммы:
- Создать пул для системы.
- Добавить дорожки для "Статус" и "Панель".
- Добавить задачи и события:
- Начальное событие: "Запрос статуса {user}"
- Задача: "Отправить ответ на запрос статуса: число сообщений и наивысший приоритет"
- Промежуточное событие: "Получение списка приоритетов непрочитанных сообщений"
- Задача: "Посчитать общее количество непрочитанных сообщений (через список статусов)"
- Задача: "Найти наивысший приоритет среди списка статусов"
- Задача: "Отправить ответ на запрос статуса: число сообщений и наивысший приоритет"
- Начальное событие: "Запрос статуса {user}"
- Добавить задачу и событие:
- Начальное событие: "Оправить рендер (web-api) для Панели Сообщений"
- Задача: "Отобразить элемент управления: фильтры"
- Задача: "Получить и отобразить список сообщений"
- Промежуточное событие: "Получение списка сообщений в соответствии с фильтрами и пейджинацией"
- Задача: "Отобразить список -- сообщение-отправитель-дата-время-получатели"
- Промежуточное событие: "Отобразить дополнительные элементы управления сообщением"
- Задача: "Отобразить элементы управления: прочитано (скрыть)"
- Задача: "Отобразить элементы управления: цветовые метки"
- Задача: "Отобразить элементы управления: ответить"
- Задача: "Отобразить пейджинатор"
- Задача: "Отобразить элемент управления: создать и отправить сообщение"
- Промежуточное событие: "Получение списка адресатов (пользователей)"
- Задача: "Отобразить элемент управления: список и выбора адресатов"
- Задача: "Отобразить элемент управления: список и выбора приоритета"
- Задача: "Отобразить элемент управления: ввести сообщение (текст)"
- Задача: "Отобразить элемент управления: Отменить"
- Задача: "Отобразить элемент управления: Отправить"
- Начальное событие: "Оправить рендер (web-api) для Панели Сообщений"
- Добавить задачи и события:
И так далее... не уверен, что все правильно с точки зрения BPMN (никогда не использовал), но думаю, что идея понятна.
4.2.3 Участники взаимодействия и их роли
Учаcтники: все пользователи СЗЗ "ВЕХНО".
Роли: СОС "НИЧАТКА" -- одноранговая. Каждый может отправить сообщение любому, и ответить на любое полученное сообщение или скрыть его.
4.2.4. Схема взаимодействия
Система обмена сообщениями и взаимодействия между пользователями асинхронная, одноранговая. Пользователь может отправить сообщение, а также прочитать, ответить на него или скрыть. Пользователь может отправить сообщение любому пользователю, а также нескольким пользователям (группе). Пользователь может отправить широковещательное сообщение. Для отправки широковещательных сообщений пользователь должен выбрать группу (адресата) "Все".
Схема взаимодействия пользователей представлена на блок-схеме:
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. Критерии проверки результатов работ
- Результаты работ должны быть проверены на соответствие бизнес-требованиям и функциональным требованиям.
- Результаты работ должны быть проверены на соответствие нефункциональным требованиям.
- Результаты работ должны быть проверены на соответствие дизайну СЗЗ "ВЕХНО".
- Результаты работ должны быть проверены на соответствие стандартам безопасности и качества кода.
- Результаты работ должны быть проверены на соответствие стандартам производительности и оптимизации кода.
- Результаты работ должны быть проверены на соответствие стандартам адаптивности и кросс-браузерности.
- Результаты работ должны быть проверены на соответствие стандартам доступности и удобства использования.
- Результаты работ должны быть проверены на соответствие стандартам тестирования и отладки.
- Результаты работ должны быть проверены на соответствие стандартам документирования и комментирования кода.