4b0d56ff0e
Этап 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
10 KiB
10 KiB
Состояние проекта (человеческий обзор)
Репозиторий: 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как blueprintcabinet/testing, ETLclinic_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.