12 KiB
Техническое задание
Система тестирования сотрудников клиники
Версия: 1.3 Дата: 2026-04-23 Статус: Согласовано
1. Назначение системы
Веб-приложение для проведения внутреннего тестирования сотрудников клиники. Руководители подразделений и HR-менеджер создают тесты и назначают их сотрудникам. Сотрудники проходят тесты в браузере. Система фиксирует все попытки и результаты.
2. Роли и права доступа
| Роль | Кто | Создаёт тесты | Назначает тесты | Видит результаты |
|---|---|---|---|---|
| HR-менеджер | Руководитель службы HR, Директор клиники | ✅ | Всем сотрудникам клиники | Всех сотрудников |
| Руководитель подразделения | Главный врач, рук. службы администраторов и др. | ✅ | Только своему подразделению | Только своего подразделения |
| Сотрудник | Все остальные работники | ❌ | ❌ | Только свои |
3. Авторизация
- Вход по логину и паролю
- Учётные записи создаются администратором системы вручную
- Сессия хранится на сервере (cookie-based или JWT — определить при выборе стека)
- Пароль хранится в зашифрованном виде (bcrypt или аналог)
4. Функциональные требования
4.1. Управление пользователями и подразделениями
- Создание/редактирование/деактивация учётных записей сотрудников
- Каждый сотрудник принадлежит одному подразделению
- Создание/редактирование справочника подразделений
- Назначение роли сотруднику: HR-менеджер / Руководитель подразделения / Сотрудник
4.2. Создание и редактирование тестов
Тест содержит:
- Название теста
- Описание (опционально)
- Список вопросов (минимум 7)
- Порог зачёта — минимальный % правильных ответов (задаётся автором)
- Таймер прохождения — лимит в минутах (опционально)
Вопрос содержит:
- Текст вопроса
- Минимум 3 варианта ответа
- Один или несколько правильных ответов (чекбокс или радио-кнопка в зависимости от типа)
Настройки теста (задаются автором при создании):
- Разрешить возврат к предыдущему вопросу: да / нет
Правила работы с тестом (версионность):
- Пока по тесту не было ни одной попытки, автор редактирует тест на месте — номер версии не меняется.
- Как только появилась хотя бы одна попытка, любое сохранение изменений создаёт новую версию теста (
version + 1, связь со старой версией черезparent_id). Старая версия становится неактивной, но сохраняется в истории. - Все версии теста хранятся в виде связанной цепочки. Каждая попытка прохождения привязана к конкретной версии, по которой сотрудник проходил тест, — разбор ошибок по старым результатам остаётся корректным.
- В списке тестов сотрудникам и авторам показывается только одна активная версия каждой цепочки.
- Автор может открыть страницу истории версий теста и вручную переключить активную версию на любую из цепочки — остальные версии при этом автоматически становятся неактивными.
- Тест можно деактивировать целиком (скрыть цепочку из списка, данные не удаляются).
4.3. Назначение теста
При назначении задаются:
- Список получателей (отдел или конкретные сотрудники)
- Срок сдачи — дата дедлайна (задаётся в днях от даты назначения или конкретной датой)
- Допустимое количество попыток (1 или более — задаётся при назначении)
HR-менеджер может назначить тест сотрудникам любых подразделений. Руководитель подразделения — только сотрудникам своего подразделения.
4.4. Прохождение теста (интерфейс сотрудника)
- На главной странице сотрудник видит список назначенных ему тестов со статусами:
Не начат— ещё не открывалВ процессе— начал, не завершил (если таймер — отсчёт продолжается)Завершён— сдал/не сдалПросрочен— дедлайн прошёл, не сдан
- Если задан таймер — отображается обратный отсчёт, по истечении тест завершается автоматически
- Порядок вопросов случайный при каждом прохождении
- Возможность вернуться к предыдущему вопросу — определяется настройкой теста
4.5. Результаты после завершения теста
Сотрудник сразу после сдачи видит:
- Итоговый балл и процент правильных ответов
- Факт зачёта: сдал / не сдал (относительно порога)
- Разбор ошибок: по каждому вопросу — его ответ и правильный ответ
4.6. Трекер попыток
Система фиксирует каждую попытку прохождения теста:
| Поле | Описание |
|---|---|
| Сотрудник | ФИО, подразделение |
| Тест | Название |
| Попытка № | Порядковый номер попытки |
| Начало | Дата и время начала |
| Завершение | Дата и время окончания |
| Результат | Количество правильных ответов / всего, % |
| Зачёт | Да / Нет (преодолён ли порог) |
Руководитель видит трекер по своему подразделению. HR-менеджер видит трекер по всей клинике. Сотрудник видит только свои попытки.
4.7. AI-помощник при создании и редактировании тестов
Интеграция с LLM (DeepSeek) доступна авторам тестов в форме создания и редактирования. AI работает на двух уровнях: над всем тестом целиком и над отдельным вопросом с блоком его вариантов ответов.
Функции уровня всего теста:
| Функция | Описание |
|---|---|
| Сгенерировать тест | На основе названия теста AI генерирует готовый набор вопросов с вариантами ответов. Кнопка доступна только когда название теста заполнено; отдельный ввод темы не требуется. Результат показывается превью, автор применяет его целиком кнопкой «Применить все вопросы». |
| Проверить тест | AI анализирует весь тест и выдаёт структурированные рекомендации по улучшению (чёткость формулировок, качество дистракторов, охват темы). Показывается в модальном окне. |
| Предложить вариант (улучшить весь тест) | AI предлагает улучшенные формулировки всех вопросов и всех вариантов ответов. Результат отображается как постатейное сравнение (старая версия → новая) с чекбоксами — автор выбирает, какие изменения применить. |
Функции уровня одного вопроса:
| Функция | Описание |
|---|---|
| Улучшить вопрос | AI переформулирует выбранный вопрос и его варианты ответов более чётко и однозначно. Результат показывается в модале с постатейным сравнением и чекбоксами (вопрос + каждый вариант ответа отдельно), прямой замены без подтверждения не происходит. |
| Дистракторы | AI генерирует 3 новых правдоподобных неправильных варианта ответа к вопросу; они добавляются к существующим, а не заменяют их. |
Настройки:
- API-ключ DeepSeek вводится на странице
/settingsи хранится в базе данных. - Страница настроек содержит кнопку «Проверить подключение» — выполняет тестовый запрос к API.
- Ключ хранится только на бэкенде, на фронтенд не передаётся.
- Все AI-функции требуют настроенного ключа: при его отсутствии возвращается понятная ошибка с предложением перейти в «Настройки».
5. Нефункциональные требования
| Параметр | Требование |
|---|---|
| Количество пользователей | 50–200 человек |
| Платформа | Веб-приложение, браузер (desktop-first) |
| Доступность | Внутренняя сеть клиники |
| Язык интерфейса | Русский |
| Время отклика | < 2 секунды для основных операций |
6. Уведомления
Уведомления реализуются в одном из последних спринтов.
- Канал: мессенджер MAX
- События для уведомления:
- Сотруднику назначен новый тест
- Приближается дедлайн сдачи теста
- Интеграция с MAX API — отдельная задача спринта
7. Вне scope (не реализуем в данной версии)
- Интеграция с AD/LDAP
- Мобильное приложение
- Вопросы с вложениями (изображения, видео)
- Экспорт отчётов в Excel / PDF