Files
TestingWebApp/docs/PROJECT_STATUS.md
T
Константин Лебединский 4b0d56ff0e feat(flask): E1.0–E1.3, E1.8 — миграция на Python/Flask + AI v2
Этап 1 миграции TestingWebApp на целевой стек (Python/Flask/Jinja),
БД остаётся clinic_tests.

E1.0 — База Flask-приложения: SQLAlchemy/psycopg2 пул, Flask sessions,
фабрика create_app, blueprint main с / и /health, base.html в стиле
кабинета HR (Tailwind CDN + Manrope + Material Symbols), 404/500.

E1.1 — Auth + /api/me: Flask sessions (signed cookie) вместо JWT,
bcrypt + Werkzeug, опц. HR_AUTH=1 с UPSERT в clinic_tests.users по
staff_id. UI /login, JSON /api/auth/{login,logout,me}, декораторы
@login_required / @require_role.

E1.2 — Тесты: список + редактор. 10 эндпоинтов, сервисы test_draft,
test_access, test_chain, ai_editor, llm_client, draft_validator,
editor_content. UI /tests (каталог + создание) и /tests/<id>/edit
(редактор с AI). Полный мобильный UX (аккордеоны/drag-n-drop) — в E1.7.

E1.3 — Импорт документов: pypdf + python-docx, эндпоинт
POST /api/tests/import/document, кнопка «Импорт документа» в
AI-панели редактора, лимит 16 МБ.

E1.8 — AI v2: страница /settings (статус ENV-ключа + ping),
ai/generate-by-title (без сетки), ai/check (рецензия), ai/improve
(массовое было→стало с чекбоксами). Унифицированный ответ AI-ошибок:
{ error, code, settingsUrl }.

Docker:
- docker-compose.dev.yml: добавлены DATABASE_URL, HR_AUTH/HR_DATABASE_URL,
  DEEPSEEK_API_KEY/OPENAI_API_KEY/LLM_BASE_URL/LLM_MODEL и сеть postgres
  для testing-flask.

Документация:
- docs/migration-final.md — двух-этапный план (Этап 1: унификация
  стека внутри TestingWebApp; Этап 2: слияние с tgFlaskForm).
- docs/migration-final-inventory.md — карта 22 эндпоинтов Express.

Made-with: Cursor
2026-04-27 23:29:26 +05:00

10 KiB
Raw Blame History

Состояние проекта (человеческий обзор)

Репозиторий: TestingWebApp · ветка разработки: dev
Дата среза: 2026-04-24

Этот документ — не дублирование ТЗ, а короткое объяснение, что уже работает в коде и что логично делать дальше. Подробные задачи: revision_task/card1.md, revision_task/BACKLOG.md.


Что уже сделано (как это устроено)

Вход и роли

  • Сотрудник входит по логину и паролю (сессия через cookie + JWT).
  • В шапке показываются роль и Фамилия с инициалами (например, Иванов И. О.), полное ФИО — во всплывающей подсказке.
  • В режиме разработки (NODE_ENV=development) у удобного тестирования могут быть дополнительные кнопки (например, создание теста сотрудником — devUi в ответе /api/auth/me).

«Цепочка» теста и черновики

  • У каждого теста есть одна логическая цепочка в базе: все правки вопросов относятся к ней, но версия контента (v1, v2, …) может расти.
  • Пока никто не проходил этот тест — автор правит на месте: сохраняет черновик, и меняется текущая активная версия без лишнего дублирования строк в истории.
  • Как только по цепочке появилась хотя бы одна завершённая попытка — каждое содержательное сохранение с изменениями создаёт новую версию (новый номер, старая остаётся в истории). Старые результаты остаются привязаны к той версии, с которой человек реально отвечал.
  • Активная версия — та, с которой сейчас стартуют новые попытки. Автор может вручную переключить активную версию в таблице истории (с подтверждением), если бизнесу так нужно.
  • Публикация / видимость: в кабинете (аккордеон «Показ в каталоге», подсекция «Видимость») тест можно скрыть из общего списка (цепочка остаётся в базе) или снова показать; назначения (подсекция «Кому выдать») — при включённой фиче, см. раздел «Назначения» ниже.
  • Мобильный UI кабинета (колонка списка на узком экране, фикс-футер, группировка разделов, копи): СПРИНТЫ_МОБИЛЬНЫЙ_ДИЗАЙН.md · РУКОВОДСТВО_КАБИНЕТ_ТЕСТОВ.md (тезисы для врачей/кураторов).
  • Унификация стека (Этап 1, текущий): Express → Flask + React → Jinja внутри TestingWebApp (flask_app/). БД остаётся clinic_tests, схема не меняется. План и журнал — migration-final.md.
  • Слияние с HR-кабинетом (Этап 2, на будущее, без сроков): перенос в HR_TG_Bot/tgFlaskForm как blueprint cabinet/testing, ETL clinic_tests → hr_bot_test. План — migration-to-tgflaskform.md. Карта Express-функционала и справочный gap-analysis с уже существующим модулем HR-кабинета — migration-final-inventory.md.

Список тестов и доступ

  • В каталоге «Тесты» видны цепочки, где вы автор, и тесты, назначенные вам (через назначение на пользователя; в dev назначения обычно включены).
  • Под названием показывается «Автор: Вы» для своих тестов и «Автор: Фамилия И. О.» для чужих (назначенных).
  • Пройти тест — кнопка справа в строке; карточка теста — клик по названию слева (попытка с карточки не стартует сама).

Прохождение и результат

  • Открывается экран вопросов (один или несколько верных вариантов); после «Завершить тест» — итог: сколько верно, процент, зачёт по порогу.
  • Разбор: после сдачи показывается, по каждому вопросу, что выбрал пользователь и какие варианты верны. Отдельная страница разбора доступна по ссылке; автор в аккордеоне «История» (подсекция «Прохождения») видит завершённые попытки и кнопку «Разбор» (раньше секция называлась «Прогоны и разбор»).

Импорт и ИИ (MVP)

  • Можно загрузить файл (PDF, DOCX, текст): сервер извлекает текст и при настроенном ключе LLM (например, DEEPSEEK_API_KEY / OPENAI_API_KEY в окружении) предлагает черновик вопросов. В UI: подсекция «Документ в вопросы» внутри «Вопросы» (раньше — отдельный блок «Импорт из файла»). Дальше тот же поток, что и при ручном редактировании: правки → сохранить черновик (с учётом правил версий выше).
  • Полный набор сценариев из ТЗ (отдельная страница настроек ключа, «проверить тест целиком», модалки с чекбоксами и т.д.) — в sprint-02; часть уже заложена в сервисах, UI доводится.

Назначения (MVP)

  • Автор в «Показ в каталоге»«Кому выдать» может назначить сотрудников из справочника (поиск, фильтры, «Выбрать всех» в текущем списке; в dev — при включённой фиче в docker-compose / .env). Назначение не перепривязывается автоматически к каждой новой версии контента: старт попытки всегда берёт текущую активную версию на момент нажатия «Пройти».

Интеграция с HR (в зачатке)

  • Поддержан сценарий входа через учётки HR (HR_AUTH + HR_DATABASE_URL) для проверок на одном кластере Postgres с экосистемой Postgres_TG_Bots (см. README — установка).
  • Целевой RBAC из HR-таблиц — card1, часть A; сейчас — упрощённое сопоставление ролей.

Что в планах (логичный следующий слой)

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

Журнал приёмок и чек-листы: TESTING_JOURNAL.md.


Связанные файлы