[bot][A] Ветеран: ежедневный чек-ин, шкалы по расписанию, лекарства и побочные эффекты #37

Closed
opened 2026-10-03 15:17:03 +03:00 by Eleboba · 0 comments
Owner

Описание

ADR-002 + CLINICAL_MODULES §1–2. Это «мониторинг после обращения» и «управление приёмом лекарств» из кейса.

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

  • Ежедневный чек-ин (событие daily_checkin от шедулера): настроение 0–10 кнопками → сон и кошмары (вопрос модуля veteran) → свободный текст «как вы?» → extract_checkin (побочки, намерение бросить, алкоголь) → сохранение в daily_checkins → after_data_change.
  • Сессии шкал по событию scale_due (PCL-5 и PHQ-9 раз в 2 недели, AUDIT-C раз в месяц, DAR-5 раз в 2 недели, внеплановый PHQ-9 по правилу), п.9 — кнопками, при п.9 ≥ 1 → C-SSRS.
  • med_reminder → «принял / пропущу / есть побочки» → доза в doses; побочки → уточнение.
  • Реакции на действия правил: «брошу» → отсроченный эффект + «не отменяйте без врача» + «врач уведомлён»; алкоголь → инфо о взаимодействии + предложение записаться раньше; низкое настроение → внеплановый PHQ-9; кризис → план безопасности.
  • Тест tests/test_dialog_veteran_days.py: 13 дней Андрея → ожидаемые реплики и алерты.

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

Lane A (бот, Егор) — владеет: app/dialog/**, app/channels/**, app/llm/**, config/texts/**, tests/test_dialog_*.py, tests/test_telegram*.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-03

2026-10-03

Что сделано

  • app/dialog/flows/veteran_daily.py: ежедневный чек-ин daily.* (настроение 0–10 → приём, если сегодня не отмечен → сон + кошмары (veteran) → алкоголь (veteran или AUDIT-C+) → свободный текст «Как вы?» со «Пропустить» → extract_checkin по обезличенному тексту → уточнение количества алкоголя, если упомянут без кнопки). Каждый ответ сразу пишется в daily_checkins; кнопки важнее LLM. Триггеры system:daily_checkin, menu:checkin, menu:visit (просьба «записаться раньше» → data.visit_requests), text:idle. Вступления к плановым шкалам pcl5/phq9/dar5/auditc (exact enter-hook scale.<id> поверх общего).
  • app/dialog/flows/meds.py: напоминание system:med_reminder → «Принял» / «Пропущу» (причина: забыл / побочки / решил бросить → quit_intent / другое) / «Есть побочные эффекты» (коды или свободный текст) → doses + daily_checkins; меню «Вопрос о лекарстве» → med_qa или fallback_text(); обработчик med_info для правил (выдержка инструкции по разделу + фиксированные тексты).
  • app/dialog/actions.py: аддитивный хук register_med_info_handler.
  • Тексты: config/texts/meds.yaml, config/texts/veteran_daily.yaml (черновик, утверждает психиатр #8).
  • Тесты: tests/test_dialog_veteran_days.py (13 дней Андрея на реальных правилах через дублёр мониторинга), tests/test_dialog_meds.py (23 юнит-теста).

Результат

  • 13 дней Андрея проходят: д.2 тошнота → выдержка инструкции; д.3 поддержка; д.4 side_effect_3d; д.5 «решил бросить» → отсроченный эффект 2–4 нед. + «врач уведомлён»; д.10 сон+алкоголь → инфо о взаимодействии + «записаться раньше»; д.13 «всё бессмысленно» → C-SSRS → настроение ≤3 ×3 → внеплановый PHQ-9 → п.9=2 → кризисный скрипт + план безопасности + phq9_item9. Цвета по дням совпадают с персоной.
  • make lint test зелёные (661 passed).

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

  • Данные для lane B: daily_checkins (mood, med_taken, sleep_bucket, alcohol_bucket, side_effects, quit_intent, nightmares, free_text_scrubbed), doses (status taken/skipped/missed, answered_at, side_effects), dialog_state.data: visit_requests, med_pending, checkin_done.
  • Пробелы движка: scale_due стартует шкалы без intro (обошёл enter-hook'ом); C-SSRS после п.9 PHQ-9 повторяется в тот же день без кулдауна; кнопки с динамическими данными нельзя повесить на trigger (точное совпадение ключа) — поэтому dose_id хранится в data.med_pending.
  • При включённом флаге intake (#53) чек-ин отдаёт управление intake.checkin.
## Описание ADR-002 + CLINICAL_MODULES §1–2. Это «мониторинг после обращения» и «управление приёмом лекарств» из кейса. ## Желаемый результат - Ежедневный чек-ин (событие `daily_checkin` от шедулера): настроение 0–10 кнопками → сон и кошмары (вопрос модуля veteran) → свободный текст «как вы?» → `extract_checkin` (побочки, намерение бросить, алкоголь) → сохранение в `daily_checkins` → `after_data_change`. - Сессии шкал по событию `scale_due` (PCL-5 и PHQ-9 раз в 2 недели, AUDIT-C раз в месяц, DAR-5 раз в 2 недели, внеплановый PHQ-9 по правилу), п.9 — кнопками, при п.9 ≥ 1 → C-SSRS. - `med_reminder` → «принял / пропущу / есть побочки» → доза в `doses`; побочки → уточнение. - Реакции на действия правил: «брошу» → отсроченный эффект + «не отменяйте без врача» + «врач уведомлён»; алкоголь → инфо о взаимодействии + предложение записаться раньше; низкое настроение → внеплановый PHQ-9; кризис → план безопасности. - Тест `tests/test_dialog_veteran_days.py`: 13 дней Андрея → ожидаемые реплики и алерты. ## Зона и владение файлами **Lane A (бот, Егор)** — владеет: `app/dialog/**`, `app/channels/**`, `app/llm/**`, `config/texts/**`, `tests/test_dialog_*.py`, `tests/test_telegram*.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-03 ### 2026-10-03 **Что сделано** - `app/dialog/flows/veteran_daily.py`: ежедневный чек-ин `daily.*` (настроение 0–10 → приём, если сегодня не отмечен → сон + кошмары (veteran) → алкоголь (veteran или AUDIT-C+) → свободный текст «Как вы?» со «Пропустить» → `extract_checkin` по обезличенному тексту → уточнение количества алкоголя, если упомянут без кнопки). Каждый ответ сразу пишется в `daily_checkins`; кнопки важнее LLM. Триггеры `system:daily_checkin`, `menu:checkin`, `menu:visit` (просьба «записаться раньше» → `data.visit_requests`), `text:idle`. Вступления к плановым шкалам pcl5/phq9/dar5/auditc (exact enter-hook `scale.<id>` поверх общего). - `app/dialog/flows/meds.py`: напоминание `system:med_reminder` → «Принял» / «Пропущу» (причина: забыл / побочки / решил бросить → `quit_intent` / другое) / «Есть побочные эффекты» (коды или свободный текст) → `doses` + `daily_checkins`; меню «Вопрос о лекарстве» → `med_qa` или `fallback_text()`; обработчик `med_info` для правил (выдержка инструкции по разделу + фиксированные тексты). - `app/dialog/actions.py`: аддитивный хук `register_med_info_handler`. - Тексты: `config/texts/meds.yaml`, `config/texts/veteran_daily.yaml` (черновик, утверждает психиатр #8). - Тесты: `tests/test_dialog_veteran_days.py` (13 дней Андрея на реальных правилах через дублёр мониторинга), `tests/test_dialog_meds.py` (23 юнит-теста). **Результат** - 13 дней Андрея проходят: д.2 тошнота → выдержка инструкции; д.3 поддержка; д.4 `side_effect_3d`; д.5 «решил бросить» → отсроченный эффект 2–4 нед. + «врач уведомлён»; д.10 сон+алкоголь → инфо о взаимодействии + «записаться раньше»; д.13 «всё бессмысленно» → C-SSRS → настроение ≤3 ×3 → внеплановый PHQ-9 → п.9=2 → кризисный скрипт + план безопасности + `phq9_item9`. Цвета по дням совпадают с персоной. - `make lint test` зелёные (661 passed). **Заметки/решения** - Данные для lane B: `daily_checkins` (mood, med_taken, sleep_bucket, alcohol_bucket, side_effects, quit_intent, nightmares, free_text_scrubbed), `doses` (status taken/skipped/missed, answered_at, side_effects), `dialog_state.data`: `visit_requests`, `med_pending`, `checkin_done`. - Пробелы движка: `scale_due` стартует шкалы без intro (обошёл enter-hook'ом); C-SSRS после п.9 PHQ-9 повторяется в тот же день без кулдауна; кнопки с динамическими данными нельзя повесить на trigger (точное совпадение ключа) — поэтому dose_id хранится в `data.med_pending`. - При включённом флаге intake (#53) чек-ин отдаёт управление `intake.checkin`.
Eleboba added this to the Этап 1 · Ветераны СВО milestone 2026-10-03 15:17:03 +03:00
Eleboba added the featurelane/Astage/veteransP0botsize/2 labels 2026-10-03 15:17:03 +03:00
Eleboba self-assigned this 2026-10-03 15:17:03 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Reference: MedITron/PTSRaiAgent#37