- apps/api/Dockerfile: build NestJS, run prisma migrate deploy on start - apps/web/Dockerfile + nginx.conf: build Vite, serve static, proxy /api -> api - docker-compose.coolify.yml: full prod stack (postgres, redis, minio, keycloak, api, web) - .dockerignore / .gitignore / .gitattributes Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
19 KiB
Control Medical — Сценарии UI-тестирования
Проверяем только то, что видит и делает пользователь в браузере. Открыть:
http://localhost:5173Логин: страница входа → выбрать пользователя и роль → «Autentifică-te»
Роли для тестирования
| Роль | Что можно делать |
|---|---|
| HR Admin | Всё |
| HR Specialist | Создавать профили и checkup, удалять документы |
| Medic Familie | Видеть inbox, записывать вердикт |
| Manager | Только просматривать |
| Employee | Только просматривать своё |
1. Carduri de risc
TC-01 — Создание карты риска
Роль: HR Admin
Шаги:
- Меню слева → «Carduri de risc»
- Нажать «+ Adaugă card de risc»
- Ввести название, добавить хотя бы 1 фактор риска
- Нажать «Salvează»
Ожидаем: Карта появляется в таблице, виден бейдж с количеством факторов
TC-02 — Редактирование карты
Роль: HR Admin
Шаги:
- В таблице карт нажать иконку карандаша
- Изменить название или добавить новый фактор
- Сохранить
Ожидаем: В таблице отображается обновлённое название/количество факторов
TC-03 — Удаление карты
Роль: HR Admin
Шаги:
- Создать тестовую карту (не привязанную к сотрудникам)
- Нажать иконку корзины
- Подтвердить удаление
Ожидаем: Карта исчезает из таблицы
TC-04 — HR Specialist не видит кнопки удаления и создания
Роль: HR Specialist
Шаги:
- Открыть «Carduri de risc»
Ожидаем: Кнопка «+ Adaugă» и иконки удаления отсутствуют
TC-05 — Карта со всеми категориями факторов
Роль: HR Admin
Шаги:
- Создать карту, добавив факторы в каждую из 5 категорий: chimici, fizici, biologici, ergonomici, psihosociali
- Сохранить и открыть карту
Ожидаем: Все 5 категорий с факторами отображаются в деталях карты
2. Profil medical сотрудника
TC-06 — Назначение медицинского профиля
Роль: HR Admin
Шаги:
- Меню → «Angajați» → открыть любого сотрудника
- Вкладка «Medical» → кнопка «Editează»
- Выбрать карту риска, ввести CORM-код и специальность
- Сохранить
Ожидаем: В профиле отображается карта риска как кликабельная ссылка, CORM-специальность заполнена, «ULTIMUL CONTROL» пуст
TC-07 — Включение флага «Expus radiații»
Роль: HR Admin
Шаги:
- Открыть медицинский профиль сотрудника → «Editează»
- Включить тогл «Expus radiații ionizante»
- Ввести дозу externă и internă
- Сохранить
Ожидаем: Поле «EXPUS RADIAȚII: Da» отображается в профиле; значение dozaTotal = externă + internă
TC-08 — Смена карты риска
Роль: HR Admin
Шаги:
- У сотрудника уже есть профиль с картой риска
- «Editează» → выбрать другую карту → сохранить
Ожидаем: Новая карта отображается в профиле; история checkup не потерялась
TC-09 — Просмотр профиля как Employee
Роль: Employee
Шаги:
- Войти как employee → открыть свой профиль → вкладка «Medical»
Ожидаем: Данные видны, но кнопок «Editează» и удаления нет
3. Страница Control medical
TC-10 — Статистические карточки отображаются корректно
Роль: HR Admin
Шаги:
- Убедиться, что есть хотя бы 1 сотрудник с медицинским профилем
- Открыть «Control medical»
Ожидаем: Карточки «TOTAL ANGAJAȚI», «CONTROL EXPIRAT», «EXPIRĂ ÎN 30 ZILE», «EXPUȘI RADIAȚII» показывают числа (не пустые и не нулевые если данные есть)
TC-11 — Сотрудник без профиля не виден
Роль: HR Admin
Шаги:
- Создать нового сотрудника, не добавляя ему медицинский профиль
- Открыть «Control medical»
Ожидаем: Новый сотрудник в таблице отсутствует
TC-12 — Статус NICIODATĂ у нового сотрудника с профилем
Роль: HR Admin
Шаги:
- Назначить медицинский профиль новому сотруднику
- Открыть «Control medical»
Ожидаем: Сотрудник виден в таблице, красный бейдж «NICIODATĂ», колонка «ULTIMUL CONTROL» показывает «—»
TC-13 — Выбор строки кликом
Роль: HR Admin
Шаги:
- На странице «Control medical» кликнуть на строку сотрудника
Ожидаем: Строка подсвечивается зелёным, чекбокс заполнен, счётчик кнопки «Generează documente» стал (1)
TC-14 — Снятие выбора повторным кликом
Роль: HR Admin
Шаги:
- Кликнуть строку (выбрать) → кликнуть снова (снять выбор)
Ожидаем: Подсветка пропала, счётчик вернулся к (0), кнопка стала неактивной
TC-15 — Выбор всех через хедер-чекбокс
Роль: HR Admin
Шаги:
- Кликнуть чекбокс в шапке таблицы
Ожидаем: Все строки выделены, счётчик = количество строк в таблице
TC-16 — Фильтр по карте риска
Роль: HR Admin
Шаги:
- В дропдауне «Toate» выбрать конкретную карту риска
Ожидаем: В таблице остаются только сотрудники с этой картой; счётчик кнопки сбрасывается в (0)
TC-17 — Кнопка заблокирована при 0 выбранных
Роль: HR Admin
Шаги:
- Открыть «Control medical», ничего не выбирать
Ожидаем: Кнопка «Generează documente (0)» серая и некликабельная
4. Генерация документов (Bulk)
TC-18 — Открытие модала генерации
Роль: HR Admin
Шаги:
- Выбрать сотрудника → нажать «Generează documente (1)»
Ожидаем: Открывается модал «Inițiere control medical» с:
- Текстом «1 angajați selectați»
- Дропдауном «Tipul controlului medical» (по умолчанию «Periodic»)
- Полем «Data planificată» (заполнено сегодняшней датой)
- Блоком с описанием документов, которые будут созданы
- Кнопками «Anulează» и «Generează documente»
TC-19 — Генерация без флага радиации
Роль: HR Admin (сотрудник без expusRadiatiiIonizante)
Шаги:
- Выбрать сотрудника → «Generează documente» → тип «Periodic» → дата сегодня → «Generează documente»
- Подождать ~2 секунды
Ожидаем: Модал результата с:
- Заголовком «✓ Documente generate cu succes»
- 3 документа: ANEXA_3_FISA_SOLICITARE.DOCX, ANEXA_4_FISA_EVALUARE.DOCX, ANEXA_6_[ИМЯ].DOCX
- Anexa_4B отсутствует
- Toast «Documente generate» в углу экрана
TC-20 — Генерация с флагом радиации
Роль: HR Admin (сотрудник с включённым expusRadiatiiIonizante)
Шаги:
- Выбрать сотрудника с флагом радиации → «Generează documente» → подтвердить
Ожидаем: В результате 4 документа: Anexa_3, Anexa_4, Anexa_4B, Anexa_6
TC-21 — Тип checkup меняется в модале
Роль: HR Admin
Шаги:
- Открыть модал генерации → сменить тип с «Periodic» на «La angajare»
Ожидаем: Выбор сохраняется, генерация проходит с типом «La angajare»
TC-22 — Отмена генерации
Роль: HR Admin
Шаги:
- Выбрать сотрудника → открыть модал → нажать «Anulează»
Ожидаем: Модал закрывается, ничего не создаётся, сотрудник остаётся выбранным
TC-23 — Checkup появляется в истории сотрудника
Роль: HR Admin
Шаги:
- Сгенерировать документы → закрыть результат
- Меню «Angajați» → открыть сотрудника → вкладка «Medical»
Ожидаем: В «Istoricul controlului medical» новая строка: тип «PERIODIC», дата планирования, вердикт «IN AȘTEPTARE», 3 кликабельных документа
TC-24 — Счётчик радиации на странице
Роль: HR Admin
Шаги:
- Включить
expusRadiatiiIonizanteу одного сотрудника → открыть «Control medical»
Ожидаем: Карточка «EXPUȘI RADIAȚII» показывает 1 (или увеличивается на 1)
5. Inbox medic de familie
TC-25 — Pending checkup виден в inbox
Роль: Medic Familie
Шаги:
- Войти как Medic Familie
- Меню → «Inbox medic»
Ожидаем: Таблица с pending checkup (verdict = null): колонки IDNP, ANGAJAT, TIP CONTROL, DATA PLANIFICATĂ, CARD DE RISC, кнопка «Completează»
TC-26 — Метка «Întârziat» на просроченных
Роль: Medic Familie
Шаги:
- Создать checkup с датой планирования в прошлом (или просто проверить текущие)
- Открыть «Inbox medic»
Ожидаем: Рядом с датой оранжевая метка «Întârziat»
TC-27 — Запись вердикта «Apt»
Роль: Medic Familie
Шаги:
- Нажать «Completează» у checkup
- Выбрать вердикт «Apt», дата заполнена автоматически
- Нажать «Înregistrează verdict»
Ожидаем:
- Toast «Verdictul a fost înregistrat»
- Строка исчезает из inbox
- Список сокращается на 1
TC-28 — Все варианты вердикта доступны
Роль: Medic Familie
Шаги:
- Нажать «Completează» → открыть дропдаун «Verdict»
Ожидаем: 5 вариантов: Apt, Apt (perioadă adaptare), Apt condiționat, Inapt temporar, Inapt
TC-29 — Нельзя отправить без вердикта
Роль: Medic Familie
Шаги:
- Открыть «Completează» → НЕ выбирать вердикт → нажать «Înregistrează verdict»
Ожидаем: Кнопка не отправляет форму или отображается ошибка валидации (поле обязательное)
TC-30 — Рекомендации (необязательное поле)
Роль: Medic Familie
Шаги:
- «Completează» → вердикт «Apt conditionat» → заполнить «Recomandări» текстом → отправить
- Открыть вкладку «Medical» сотрудника
Ожидаем: В колонке «RECOMANDĂRI» отображается введённый текст
TC-31 — HR Admin не может записать вердикт
Роль: HR Admin
Шаги:
- Войти как HR Admin → открыть «Inbox medic»
- Нажать «Completează» → выбрать вердикт → отправить
Ожидаем: Toast с ошибкой «Forbidden resource», checkup остаётся в inbox
TC-32 — После вердикта ULTIMUL CONTROL обновился
Роль: Medic Familie → затем HR Admin
Шаги:
- Записать вердикт для periodic checkup
- Войти как HR Admin → «Angajați» → сотрудник → вкладка «Medical»
Ожидаем: Поле «ULTIMUL CONTROL» = дата вердикта
TC-33 — После вердикта добавился Anexa 6 Final
Роль: После записи вердикта
Шаги:
- Записать вердикт → открыть вкладку «Medical» сотрудника → найти завершённый checkup
Ожидаем: В документах checkup появился новый файл «Anexa_6_Final_...» (4-й документ вместо 3-х)
6. Документы — скачивание и удаление
TC-34 — Скачивание документа
Роль: HR Admin / HR Specialist
Шаги:
- Вкладка «Medical» сотрудника → нажать «↓ Anexa_3_...» у любого checkup
Ожидаем: Открывается новая вкладка браузера, файл загружается (DOCX, не пустой)
TC-35 — Удаление одного документа
Роль: HR Admin
Шаги:
- В строке checkup нажать маленькую иконку корзины рядом с конкретным документом
- Подтвердить (если есть подтверждение)
Ожидаем: Этот документ исчезает из списка, остальные документы строки остаются
TC-36 — Удаление всех документов checkup («Toate»)
Роль: HR Admin
Шаги:
- В строке checkup нажать кнопку «Toate» (удалить все)
- Подтвердить
Ожидаем: Все документы строки исчезают, колонка «DOCUMENTE» пустая
TC-37 — HR Specialist может удалять документы
Роль: HR Specialist
Шаги:
- Открыть вкладку «Medical» сотрудника → удалить один документ
Ожидаем: Удаление проходит успешно, документ исчезает
TC-38 — Medic Familie не видит кнопки удаления документов
Роль: Medic Familie
Шаги:
- Войти как Medic Familie → открыть «Angajați» → вкладка «Medical»
Ожидаем: Иконки удаления документов недоступны / не отображаются
7. Удаление checkup
TC-39 — Удаление checkup целиком
Роль: HR Admin
Шаги:
- Вкладка «Medical» сотрудника → в строке checkup нажать большую красную корзину (удалить checkup)
- Подтвердить
Ожидаем: Строка полностью исчезает из «Istoricul controlului medical»
TC-40 — HR Specialist не видит кнопку удаления checkup
Роль: HR Specialist
Шаги:
- Открыть вкладку «Medical» любого сотрудника
Ожидаем: Иконка удаления checkup (крайняя справа) недоступна или скрыта
8. Полный happy path (сквозной тест)
TC-41 — Полный цикл от создания карты до вердикта
Шаги:
| # | Роль | Действие | Ожидаем |
|---|---|---|---|
| 1 | HR Admin | Carduri de risc → создать карту «Тест» с 2 факторами | Карта в таблице |
| 2 | HR Admin | Angajați → сотрудник → Medical → Editează → выбрать «Тест» → сохранить | Карта в профиле, ULTIMUL CONTROL пуст |
| 3 | HR Admin | Control medical → строка сотрудника → выбрать | Бейдж «NICIODATĂ», кнопка (1) |
| 4 | HR Admin | Generează documente → Periodic → сегодня → подтвердить | 3 документа в результате |
| 5 | HR Admin | Angajați → Medical → история | 1 строка IN AȘTEPTARE с 3 документами |
| 6 | Medic Familie | Inbox medic → Completează → Apt → Înregistrează | Toast успех, строка ушла из inbox |
| 7 | HR Admin | Angajați → Medical | ULTIMUL CONTROL = сегодня, вердикт APT, 4 документа |
| 8 | HR Admin | Control medical | Сотрудник получил статус «OK» (или пропал из таблицы) |
9. Статусы checkup в истории — визуальная проверка
| Состояние | Что видит пользователь в колонке VERDICT |
|---|---|
| Только создан, нет вердикта | Серый бейдж «IN AȘTEPTARE» |
| Вердикт «Apt» | Зелёный бейдж «APT» |
| Вердикт «Apt (perioadă adaptare)» | Бейдж «APT ADAPTARE» |
| Вердикт «Apt condiționat» | Бейдж «APT COND.» |
| Вердикт «Inapt temporar» | Оранжевый бейдж «INAPT TEMP.» |
| Вердикт «Inapt» | Красный бейдж «INAPT» |