## Функциональные требования функционала отправки сообщений между пользователями внутри уже созданной информационной системы ## 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 click_bell_event request_status_task display_bell_task load_content_task show_panel_task hide_panel_task No Yes ``` ```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 -->|Отправить статус| А А -->|Клик на колокольчик (Запросить контент/список сообщений)| B B -->|Отобразить список сообщений (в соответсвии с фильтрами и паджинацией)| А A -->|Создать сообщение| --> B А -->|Указать адресата или адресатов| --> B А -->|Указать приоритет| --> B A -->|Отправить сообщение| --> B ``` #### 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. Критерии проверки результатов работ * Результаты работ должны быть проверены на соответствие бизнес-требованиям и функциональным требованиям. * Результаты работ должны быть проверены на соответствие нефункциональным требованиям. * Результаты работ должны быть проверены на соответствие дизайну СЗЗ "ВЕХНО". * Результаты работ должны быть проверены на соответствие стандартам безопасности и качества кода. * Результаты работ должны быть проверены на соответствие стандартам производительности и оптимизации кода. * Результаты работ должны быть проверены на соответствие стандартам адаптивности и кросс-браузерности. * Результаты работ должны быть проверены на соответствие стандартам доступности и удобства использования. * Результаты работ должны быть проверены на соответствие стандартам тестирования и отладки. * Результаты работ должны быть проверены на соответствие стандартам документирования и комментирования кода.