You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

8.8 KiB

Состояние проекта

Репозиторий: TestingWebApp · ветка разработки dev Прод: https://edullm.pirogov.ai/ Дата среза: 2026-04-28

Не дубль ТЗ, а карта «что реально работает в коде, на каком контуре, и что логично сделать дальше».


TL;DR

  • Прод и dev работают только на Flask-контуре (flask_app/, Python 3.11 + Flask 3 + Jinja2 + Tailwind CDN + SQLAlchemy).
  • Каталоги backend/ (Express) и frontend/ (React) — архив, не разворачиваются и не используются; удаление запланировано в спринте E1.6.
  • БД — clinic_tests (PostgreSQL). Схема в Этапе 1 не меняется.
  • Этап 2 (слияние с HR_TG_Bot/tgFlaskForm) пока не делаем — migration-to-tgflaskform.md.

Главный трекер по спринтам — migration-final.md.


Что уже работает на новом контуре (E1.0–E1.3, E1.8)

Вход

  • /login (форма) и /api/auth/login (JSON), /api/auth/logout, /api/auth/me.
  • По умолчанию — bcrypt-хеши из clinic_tests.users.
  • HR_AUTH=1 + HR_DATABASE_URL — вход через hr_bot_test.users (Werkzeug); запись синхронизируется в clinic_tests.users UPSERT-ом по staff_id. Сценарий «пользователь без staff_id» — пропускается с предупреждением в логах.

Каталог тестов (/tests)

  • Видны цепочки, где вы автор, и активные публичные.
  • Создание теста через модалку («Название» + «Описание»).
  • Кнопка «Скрыть» / «Вернуть» работает на цепочку целиком.

Редактор теста (/tests/<id>/edit)

  • Поля шапки: название, описание, проходной балл, переключатель «Цепочка активна».
  • Вопросы и варианты: добавить / удалить / переместить, отметить верные.
  • Версионирование. Пока по цепочке нет завершённых попыток — правки идут «на месте». После первой попытки любое содержательное сохранение делает форк (version + 1, parent_id = прежняя), старая версия остаётся в БД и не видна в каталоге.
  • Подробная модель поведения и проверочные сценарии — QA-versioning-and-ai.md.

AI-помощник в редакторе

Кнопка Что делает
По названию Генерирует весь набор вопросов по теме. Параметры — кол-во вопросов и вариантов.
По текущей сетке Дописывает варианты для уже расставленных карточек.
Проверить Рецензирует тест: вердикт + блоки рекомендаций.
Улучшить «Было → стало» по каждому вопросу/варианту с чекбоксами.
AI: вопрос На карточке вопроса — переформулировка / генерация дистракторов.

При отсутствии ключа — единая ошибка с ссылкой на /settings.

Импорт документа

  • PDF / DOCX / TXT / MD до 16 МБ.
  • pypdf для PDF, python-docx для DOCX, плоский текст — как есть.
  • Извлечённый текст идёт в LLM, на выходе — черновик теста, который открывается в редакторе.

Настройки (/settings)

  • Статус общего LLM-ключа (берётся из ENV: DEEPSEEK_API_KEYOPENAI_API_KEY).
  • Провайдер, модель, base URL.
  • Кнопка «Проверить подключение» — пинг /v1/chat/completions через ping_llm().
  • Ключ на клиента не уходит и в БД не пишется.

Чего на Flask пока нет

Эти сценарии будут реализованы в E1.4–E1.5. До этого в приложении они просто отсутствуют (старый Express-контур не используется и не поднимается):

  • Назначение теста сотруднику — поиск по справочнику, «Выбрать всех», фильтры по подразделениям.
  • Прохождение — экран вопросов, таймер, сохранение попытки.
  • Результат и разбор ошибок — отдельная страница с ответами пользователя и правильными вариантами.
  • Трекер попыток — единый список завершённых попыток с фильтрами (подразделение / сотрудник / тест / статус / результат).

Что в работе и в планах

Этап 1 — паритет внутри TestingWebApp

Спринт Содержание Статус
E1.0 База Flask-приложения (БД-пул, сессии, base.html).
E1.1 Auth + /api/me (bcrypt + Werkzeug, опц. HR_AUTH).
E1.2 Каталог тестов и редактор (функциональный минимум).
E1.3 Импорт документов (PDF / DOCX / TXT / MD).
E1.4 Назначения и прохождение тестов. Следующий.
E1.5 Трекер попыток + страница настроек цепочки.
E1.6 Cutover внутри репозитория (удаление backend/ + frontend/).
E1.7 UX-полировка редактора: 4 аккордеона + drag-n-drop.
E1.8 AI-функции v2 (/settings, generate-by-title, check, improve).

Подробности — migration-final.md.

Этап 2 — слияние с HR-кабинетом (на будущее)

Долгий бэклог

Направление Суть
Дашборды (ТЗ этап 2) Единая картина по отделу / клинике, фильтры, история.
MAX / мини-приложение Встраивание в общий HR-контур клиники.
Таймер, подсказки, медиа в вопросах Режимы прохождения и вложения — отдельные этапы ТЗ.
E2E и интеграционные тесты Расширение V.9, стабильный CI.
Назначения по отделу Сроки, лимит попыток, групповые назначения.

Связанные документы