Демо-seed кабинета д-ра Смирновой: ветеран Андрей (день 0 для живого демо или день N с историей; 12 → 🟡, 13 → 🔴) и 7 пациентов с историей под статус из персоны. Алерты и цвета считают реальные правила, день за днём. Плюс сценарий консоли data/synthetic/andrey.jsonl на дни 0–13.
Для консоли (#17): press — полная метка кнопки. Тест проверяет, что первое вхождение подстроки и точное совпадение в последней пачке ответов дают одну и ту же кнопку. advance_to — ближайшие HH:MM впереди. На день 6 ведущий подтверждает алерты на дашборде (заметка; на днях 6–9 нет expect_color). День 7 в 10:00: C-SSRS, затем PHQ-9.
Заметки:
У 7 фоновых пациентов нет dialog_state, поэтому шедулер их не трогает и их цвета стабильны при прокрутке часов.
PCL-5 на день 7 нет: по config/modules.yaml он раз в 14 дней.
seed без --reset подхватывает сохранённый сдвиг демо-часов (clock_state), даты совпадают с «сегодня» приложения.
Чек-лист
rebase на origin/dev
make lint + make test зелёные (840 passed)
лог в issue (### 2026-10-04)
нет ПДн в логах, нет реальных данных, нет секретов
## Что меняется
Демо-seed кабинета д-ра Смирновой: ветеран Андрей (день 0 для живого демо или день N с историей; 12 → 🟡, 13 → 🔴) и 7 пациентов с историей под статус из персоны. Алерты и цвета считают реальные правила, день за днём. Плюс сценарий консоли `data/synthetic/andrey.jsonl` на дни 0–13.
Closes #18
## Зона
B
## Как проверить
```bash
python -m scripts.seed_demo # Андрей день 0, печатает код подключения
python -m scripts.seed_demo --andrey-day 12 # жёлтый; 13 → красный (кризис)
python -m scripts.seed_demo --reset # пересоздать БД, обнулить демо-часы, засидить (= POST /api/v1/demo/reset)
python -m scripts.seed_demo --write-scenario # пересобрать andrey.jsonl из меток config/
uv run pytest -q tests/test_seed_demo.py
```
Публичное API: `await seed(andrey_day=0) -> SeedResult` (`andrey_token`, `connect_code`, `colors`, `tokens`), `await reset(andrey_day=0)` (None = только сброс), `scenario_lines()`, `load_scenario()`, константы `DOCTOR_ID`, `ANDREY_SNILS`, `ALLOWED_ACTIONS`.
Для консоли (#17): `press` — полная метка кнопки. Тест проверяет, что первое вхождение подстроки и точное совпадение в последней пачке ответов дают одну и ту же кнопку. `advance_to` — ближайшие HH:MM впереди. На день 6 ведущий подтверждает алерты на дашборде (заметка; на днях 6–9 нет `expect_color`). День 7 в 10:00: C-SSRS, затем PHQ-9.
Заметки:
- У 7 фоновых пациентов нет `dialog_state`, поэтому шедулер их не трогает и их цвета стабильны при прокрутке часов.
- PCL-5 на день 7 нет: по `config/modules.yaml` он раз в 14 дней.
- `seed` без `--reset` подхватывает сохранённый сдвиг демо-часов (`clock_state`), даты совпадают с «сегодня» приложения.
## Чек-лист
- [x] rebase на origin/dev
- [x] make lint + make test зелёные (840 passed)
- [x] лог в issue (### 2026-10-04)
- [x] нет ПДн в логах, нет реальных данных, нет секретов
- [x] общие файлы не трогались
🤖 Generated with [Claude Code](https://claude.com/claude-code)
- scripts/seed_demo.py: doctor doc-smirnova (on call), Andrey day 0 (connect code,
no consent) or day N with history; 7 patients with seeded-random histories.
Alerts and colours come from the real rules evaluated day by day.
- --reset drops/recreates both DBs and zeroes the demo clock; seed keeps the
persisted clock offset so dates match the running app.
- data/synthetic/andrey.jsonl: console scenario for days 0..13 generated from
config button labels (--write-scenario).
- tests: idempotency, modes, colours, scenario format/sync and a full replay of
the scenario through the real engine, scheduler and monitoring.
Refs #18
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Что меняется
Демо-seed кабинета д-ра Смирновой: ветеран Андрей (день 0 для живого демо или день N с историей; 12 → 🟡, 13 → 🔴) и 7 пациентов с историей под статус из персоны. Алерты и цвета считают реальные правила, день за днём. Плюс сценарий консоли
data/synthetic/andrey.jsonlна дни 0–13.Closes #18
Зона
B
Как проверить
Публичное API:
await seed(andrey_day=0) -> SeedResult(andrey_token,connect_code,colors,tokens),await reset(andrey_day=0)(None = только сброс),scenario_lines(),load_scenario(), константыDOCTOR_ID,ANDREY_SNILS,ALLOWED_ACTIONS.Для консоли (#17):
press— полная метка кнопки. Тест проверяет, что первое вхождение подстроки и точное совпадение в последней пачке ответов дают одну и ту же кнопку.advance_to— ближайшие HH:MM впереди. На день 6 ведущий подтверждает алерты на дашборде (заметка; на днях 6–9 нетexpect_color). День 7 в 10:00: C-SSRS, затем PHQ-9.Заметки:
dialog_state, поэтому шедулер их не трогает и их цвета стабильны при прокрутке часов.config/modules.yamlон раз в 14 дней.seedбез--resetподхватывает сохранённый сдвиг демо-часов (clock_state), даты совпадают с «сегодня» приложения.Чек-лист
🤖 Generated with Claude Code