[backend][B] seed: ветеран Андрей (13 дней) + 7 пациентов кабинета #18

Closed
opened 2026-10-03 14:38:56 +03:00 by Eleboba · 0 comments
Owner

Описание

docs/product/01_demo_persona.md (траектория Андрея, таблица пациентов). Только синтетика.

Желаемый результат

  • scripts/seed_demo.py (make seed, --reset < 10 с): врач (д-р Смирнова Е. А., кабинет медико-психологического консультирования), Андрей на день 0 (готов к живому демо) + 7 пациентов с историей под статус.
  • data/synthetic/andrey.jsonl — реплики/кнопки Андрея по дням (day, role, text, buttons, expected) для «прокрутить до дня N» в консоли и для тестов lane A.
  • Режим «Андрей уже на дне 12» для быстрого показа кризиса.

Зона и владение файлами

Lane B (backend) — владеет: app/api/** (кроме schemas.py), app/services/**, app/scheduler/**, app/integrations/** (кроме base.py), app/db/**, scripts/**, data/**, tests/test_api*.py, tests/test_services*.py, tests/test_scheduler*.py, tests/test_seed*.py, tests/test_integrations*.py.

Замороженные контракты (менять только отдельным мелким PR с пингом всех): app/core/types.py, app/dialog/contracts.py, app/api/schemas.py, app/integrations/base.py, app/services/contracts.py, app/main.py, app/config.py, config/modules.yaml, config/rules.yaml, config/scales/*, pyproject.toml/uv.lock, docker-compose.yml, Makefile.


Лог выполнения

2026-10-04

2026-10-04

Что сделано

  • scripts/seed_demo.py (make seed / make demo-reset): врач doc-smirnova «Смирнова Е. А.» (кабинет kmpk-demo, дежурный), Андрей + 7 пациентов кабинета из docs/product/01_demo_persona.md.
  • Режимы Андрея: --andrey-day 0 (по умолчанию) — подключён сегодня, напечатан одноразовый код, согласия/истории нет, живое демо идёт с согласия; --andrey-day N (1..13) — согласие, онбординг (PC-PTSD-5 4, PCL-5 46, PHQ-9 14, п.9 0, AUDIT-C 3), дни 1..N по таблице, звонок врача и ack на день 6, состояние диалога и журнал шедулера; 12 → жёлтый (открыты sleep_lt4_3n, alcohol_3d), 13 → красный (phq9_item9 + phq9_rise, состояние crisis, аудит crisis_acute).
  • 7 пациентов: история с seeded random в пределах статуса; цвета 🟡🟡🟡🟡🟢🟢🟢 получаются из реальных правил (Дмитрий — сон < 4 ч 3 ночи, Сергей — пропуски 3/7, Николай — алкоголь, Анна — «беспокойство» 3 дня + усиленный мониторинг, Ирина PHQ-9 16→13→9, Ольга — тошнота, алерт подтверждён, Павел PHQ-9 = 4).
  • data/synthetic/andrey.jsonl — сценарий дней 0–13 для консоли (advance_to / press / text / expect_color), собирается из меток кнопок в config/ (--write-scenario), заметки для ведущего по-русски.
  • tests/test_seed_demo.py (17 тестов), в т.ч. полный прогон сценария 0–13 через реальный движок, шедулер и мониторинг на sqlite.

Результат

  • seed ≈ 1 с на sqlite, ≈ 3 с вместе с импортами на Postgres (проверено на отдельном postgres:16); --reset пересоздаёт таблицы, обнуляет демо-часы и сидит заново.
  • make lint test зелёные (840 passed).

Заметки/решения

  • История пишется прямо в БД; алерты считаются по дням: снапшот → rules.evaluate → алерты с временем того вечера → refresh_status. Финальный проход на «сейчас» — через настоящий build_snapshot.
  • У 7 фоновых пациентов есть согласие в identity, но нет dialog_state, поэтому шедулер их не трогает и цвета не меняются при прокрутке часов.
  • День 7 в живом пути: по расписанию модулей приходят C-SSRS (первым) и PHQ-9, PCL-5 — раз в 14 дней, поэтому PCL-5 = 44 из персоны на день 7 нет ни в сценарии, ни в seed.
  • Ack врача на день 6 в формате сценария не выразить: это заметка для ведущего; на днях 6–9 нет expect_color.
  • reset() тоже сидит заново (так его ждёт POST /demo/reset из #12); seed без --reset подхватывает сохранённый сдвиг демо-часов.
## Описание `docs/product/01_demo_persona.md` (траектория Андрея, таблица пациентов). Только синтетика. ## Желаемый результат - `scripts/seed_demo.py` (`make seed`, `--reset` < 10 с): врач (д-р Смирнова Е. А., кабинет медико-психологического консультирования), Андрей на день 0 (готов к живому демо) + 7 пациентов с историей под статус. - `data/synthetic/andrey.jsonl` — реплики/кнопки Андрея по дням (`day, role, text, buttons, expected`) для «прокрутить до дня N» в консоли и для тестов lane A. - Режим «Андрей уже на дне 12» для быстрого показа кризиса. ## Зона и владение файлами **Lane B (backend)** — владеет: `app/api/**` (кроме `schemas.py`), `app/services/**`, `app/scheduler/**`, `app/integrations/**` (кроме `base.py`), `app/db/**`, `scripts/**`, `data/**`, `tests/test_api*.py`, `tests/test_services*.py`, `tests/test_scheduler*.py`, `tests/test_seed*.py`, `tests/test_integrations*.py`. **Замороженные контракты** (менять только отдельным мелким PR с пингом всех): `app/core/types.py`, `app/dialog/contracts.py`, `app/api/schemas.py`, `app/integrations/base.py`, `app/services/contracts.py`, `app/main.py`, `app/config.py`, `config/modules.yaml`, `config/rules.yaml`, `config/scales/*`, `pyproject.toml`/`uv.lock`, `docker-compose.yml`, `Makefile`. --- ## Лог выполнения ### 2026-10-04 ### 2026-10-04 **Что сделано** - `scripts/seed_demo.py` (`make seed` / `make demo-reset`): врач `doc-smirnova` «Смирнова Е. А.» (кабинет `kmpk-demo`, дежурный), Андрей + 7 пациентов кабинета из `docs/product/01_demo_persona.md`. - Режимы Андрея: `--andrey-day 0` (по умолчанию) — подключён сегодня, напечатан одноразовый код, согласия/истории нет, живое демо идёт с согласия; `--andrey-day N` (1..13) — согласие, онбординг (PC-PTSD-5 4, PCL-5 46, PHQ-9 14, п.9 0, AUDIT-C 3), дни 1..N по таблице, звонок врача и ack на день 6, состояние диалога и журнал шедулера; 12 → жёлтый (открыты `sleep_lt4_3n`, `alcohol_3d`), 13 → красный (`phq9_item9` + `phq9_rise`, состояние `crisis`, аудит `crisis_acute`). - 7 пациентов: история с seeded random в пределах статуса; цвета 🟡🟡🟡🟡🟢🟢🟢 получаются из реальных правил (Дмитрий — сон < 4 ч 3 ночи, Сергей — пропуски 3/7, Николай — алкоголь, Анна — «беспокойство» 3 дня + усиленный мониторинг, Ирина PHQ-9 16→13→9, Ольга — тошнота, алерт подтверждён, Павел PHQ-9 = 4). - `data/synthetic/andrey.jsonl` — сценарий дней 0–13 для консоли (`advance_to` / `press` / `text` / `expect_color`), собирается из меток кнопок в `config/` (`--write-scenario`), заметки для ведущего по-русски. - `tests/test_seed_demo.py` (17 тестов), в т.ч. полный прогон сценария 0–13 через реальный движок, шедулер и мониторинг на sqlite. **Результат** - seed ≈ 1 с на sqlite, ≈ 3 с вместе с импортами на Postgres (проверено на отдельном postgres:16); `--reset` пересоздаёт таблицы, обнуляет демо-часы и сидит заново. - `make lint test` зелёные (840 passed). **Заметки/решения** - История пишется прямо в БД; алерты считаются по дням: снапшот → `rules.evaluate` → алерты с временем того вечера → `refresh_status`. Финальный проход на «сейчас» — через настоящий `build_snapshot`. - У 7 фоновых пациентов есть согласие в identity, но нет `dialog_state`, поэтому шедулер их не трогает и цвета не меняются при прокрутке часов. - День 7 в живом пути: по расписанию модулей приходят C-SSRS (первым) и PHQ-9, PCL-5 — раз в 14 дней, поэтому PCL-5 = 44 из персоны на день 7 нет ни в сценарии, ни в seed. - Ack врача на день 6 в формате сценария не выразить: это заметка для ведущего; на днях 6–9 нет `expect_color`. - `reset()` тоже сидит заново (так его ждёт `POST /demo/reset` из #12); seed без `--reset` подхватывает сохранённый сдвиг демо-часов.
Eleboba added this to the Этап 1 · Ветераны СВО milestone 2026-10-03 14:38:56 +03:00
Eleboba added the size/1P0featurebackend labels 2026-10-03 14:38:56 +03:00
Eleboba changed title from [backend] seed_demo: 8 синтетических пациентов + траектория главного героя to [backend][B] seed: ветеран Андрей (13 дней) + 7 пациентов кабинета 2026-10-03 15:16:38 +03:00
Eleboba added the lane/Bstage/veterans labels 2026-10-03 15:16:39 +03:00
Eleboba self-assigned this 2026-10-04 12:23:07 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Reference: MedITron/PTSRaiAgent#18