Дашборд врача: список «красных зон» с индексом риска прерывания терапии, карточка пациента (шкалы, самочувствие, календарь доз, алерты с ack, план безопасности, саммари), живые алерты (опрос 2,5 с, тост и красный баннер на всех страницах), форма «Подключить пациента» с кодом и QR. Страницы подключаются автоматически из dashboard/pages/ — #17 добавляет свои файлы, app.py не трогает.
## Что меняется
Дашборд врача: список «красных зон» с индексом риска прерывания терапии, карточка пациента (шкалы, самочувствие, календарь доз, алерты с ack, план безопасности, саммари), живые алерты (опрос 2,5 с, тост и красный баннер на всех страницах), форма «Подключить пациента» с кодом и QR. Страницы подключаются автоматически из `dashboard/pages/` — #17 добавляет свои файлы, `app.py` не трогает.
Closes #16
## Зона
C
## Как проверить
```bash
uv run uvicorn app.main:app --port 8000 &
uv run streamlit run dashboard/app.py
uv run pytest -q tests/test_dashboard_*.py
```
Открыть http://localhost:8501 → «Пациенты» → «Открыть» у Андрея → «Подтвердить» алерт; «Подключить пациента» → «Заполнить демо-данными» → согласие → код + QR.
## Чек-лист
- [x] rebase на origin/dev
- [x] make lint + make test зелёные
- [x] лог в issue (### 2026-10-04)
- [x] нет ПДн в логах, нет реальных данных, нет секретов
- [x] общие файлы не тронуты (добавлен только `.streamlit/config.toml` для дашборда)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
- Patient list sorted red -> yellow -> grey -> green with KPI row, trend arrows,
7-day adherence bars, discontinuation-risk badge with factor tooltip.
- Patient card: scales with severity bands from config/scales (unscheduled marked),
mood/sleep/alcohol small multiples, dose heat-strip, alerts feed with ack,
safety plan, AI summary with disclaimer.
- Live alerts: st.fragment(run_every=2.5s) polling, toast + pinned acute banner on
every page; full rerun on new alert only on doctor pages.
- Connect form -> POST /patients/connect -> code, QR, deep link.
- Thin httpx ApiClient over the frozen schemas with graceful "API недоступен".
- app.py discovers dashboard/pages/*.py automatically (st.navigation); demo pages
of #17 plug in by adding a file.
Refs #16
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.
Что меняется
Дашборд врача: список «красных зон» с индексом риска прерывания терапии, карточка пациента (шкалы, самочувствие, календарь доз, алерты с ack, план безопасности, саммари), живые алерты (опрос 2,5 с, тост и красный баннер на всех страницах), форма «Подключить пациента» с кодом и QR. Страницы подключаются автоматически из
dashboard/pages/— #17 добавляет свои файлы,app.pyне трогает.Closes #16
Зона
C
Как проверить
Открыть http://localhost:8501 → «Пациенты» → «Открыть» у Андрея → «Подтвердить» алерт; «Подключить пациента» → «Заполнить демо-данными» → согласие → код + QR.
Чек-лист
.streamlit/config.tomlдля дашборда)🤖 Generated with Claude Code