[bot][A] Ветеран: подключение по коду, стартовый скрининг PC-PTSD-5 → PCL-5, PHQ-9, AUDIT-C, вопрос об оружии #36

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

Описание

CLINICAL_MODULES §1, CJM Андрея (этапы 3–4), точка входа — QR/код от врача (диспансеризация, фонд «Защитники Отечества»). Барьер: страх «учёта», лишения прав на оружие и вождение — отвечаем прямо и честно (тексты в config/texts/, утверждает психиатр).

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

  • app/dialog/flows/veteran.py: /start <код> → IdentityProvider (esia_mock) → согласие (ядро) → короткое «что нормально после возвращения» → PC-PTSD-5 (если был травматический опыт) → PCL-5 → PHQ-9 (п.9 только кнопками) → AUDIT-C → вопрос о доступе к оружию (блок безопасности при риске).
  • Все пункты — кнопками (быстро), свободный текст принимается и идёт через extract_item с уточнением при confidence < 0.5.
  • Итог простым языком без слова «диагноз»; включение модулей veteran (+ depression при PHQ-9 ≥ 10) в профиль.
  • FAQ «А меня поставят на учёт? / заберут права на оружие?» — фиксированные тексты.
  • Тест tests/test_dialog_veteran_onboarding.py: прохождение онбординга Андрея на mock-LLM.

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

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_onboarding.py — состояния veteran.onboarding.{start,exposure,pcl5,phq9,auditc,weapon,result}; тексты config/texts/veteran_onboarding.yaml (черновик, утверждает психиатр #8); тесты tests/test_dialog_veteran_onboarding.py (10 шт.).
  • Результат: онбординг Андрея end-to-end через Engine.handle на mock-LLM + SQLite: код → согласие → возраст → вступление → травм. опыт «да» → PC-PTSD-5 (4) → PCL-5 (46) → PHQ-9 (14, п.9=0) → AUDIT-C (3) → оружие «нет» → итог → idle; модули [veteran, depression]. make lint test зелёные.
  • Заметки/решения:
    • PCL-5 — всем ветеранам независимо от ответа о травме; PC-PTSD-5 только после «да» (результат при «нет» не пишется, факт trauma_exposure=false).
    • Факты для lane B в dialog_state.data["facts"]: trauma_exposure (bool|None), weapon_access (bool|None; others_or_safe = True), weapon_access_choice (none|self|others_or_safe|declined), weapon_access_at, weapon_safety_block. PatientSnapshot.weapon_access строить из facts["weapon_access"].
    • Блок безопасного хранения: доступ (или отказ отвечать) + сигнал риска в этом онбординге (флаги из settings.weapon_risk_flags: п.9 PHQ-9, C-SSRS, AUDIT-C+; safety-событие; кризис).
    • Кризис посреди онбординга: прогресс в data["veteran_onboarding"], после doctor_ack (вход в idle) онбординг продолжается; уже сохранённые шкалы пропускаются. Для этого зарегистрирован @on_enter("idle") (движок не менялся).
    • Пол для AUDIT-C: из профиля, иначе вопрос; «не хочу отвечать» → чувствительный порог ≥ 3.
    • FAQ (кто видит / учёт-часть / права) — кнопки во вступлении, итоге и в idle; формулировки помечены «формулировку проверяет юрист».
## Описание CLINICAL_MODULES §1, CJM Андрея (этапы 3–4), точка входа — QR/код от врача (диспансеризация, фонд «Защитники Отечества»). Барьер: страх «учёта», лишения прав на оружие и вождение — отвечаем прямо и честно (тексты в `config/texts/`, утверждает психиатр). ## Желаемый результат - `app/dialog/flows/veteran.py`: `/start <код>` → `IdentityProvider` (esia_mock) → согласие (ядро) → короткое «что нормально после возвращения» → PC-PTSD-5 (если был травматический опыт) → PCL-5 → PHQ-9 (п.9 только кнопками) → AUDIT-C → вопрос о доступе к оружию (блок безопасности при риске). - Все пункты — кнопками (быстро), свободный текст принимается и идёт через `extract_item` с уточнением при confidence < 0.5. - Итог простым языком без слова «диагноз»; включение модулей `veteran` (+ `depression` при PHQ-9 ≥ 10) в профиль. - FAQ «А меня поставят на учёт? / заберут права на оружие?» — фиксированные тексты. - Тест `tests/test_dialog_veteran_onboarding.py`: прохождение онбординга Андрея на mock-LLM. ## Зона и владение файлами **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_onboarding.py` — состояния `veteran.onboarding.{start,exposure,pcl5,phq9,auditc,weapon,result}`; тексты `config/texts/veteran_onboarding.yaml` (черновик, утверждает психиатр #8); тесты `tests/test_dialog_veteran_onboarding.py` (10 шт.). - **Результат:** онбординг Андрея end-to-end через `Engine.handle` на mock-LLM + SQLite: код → согласие → возраст → вступление → травм. опыт «да» → PC-PTSD-5 (4) → PCL-5 (46) → PHQ-9 (14, п.9=0) → AUDIT-C (3) → оружие «нет» → итог → idle; модули `[veteran, depression]`. `make lint test` зелёные. - **Заметки/решения:** - PCL-5 — всем ветеранам независимо от ответа о травме; PC-PTSD-5 только после «да» (результат при «нет» не пишется, факт `trauma_exposure=false`). - Факты для lane B в `dialog_state.data["facts"]`: `trauma_exposure` (bool|None), `weapon_access` (bool|None; `others_or_safe` = True), `weapon_access_choice` (`none|self|others_or_safe|declined`), `weapon_access_at`, `weapon_safety_block`. `PatientSnapshot.weapon_access` строить из `facts["weapon_access"]`. - Блок безопасного хранения: доступ (или отказ отвечать) + сигнал риска в этом онбординге (флаги из `settings.weapon_risk_flags`: п.9 PHQ-9, C-SSRS, AUDIT-C+; safety-событие; кризис). - Кризис посреди онбординга: прогресс в `data["veteran_onboarding"]`, после `doctor_ack` (вход в `idle`) онбординг продолжается; уже сохранённые шкалы пропускаются. Для этого зарегистрирован `@on_enter("idle")` (движок не менялся). - Пол для AUDIT-C: из профиля, иначе вопрос; «не хочу отвечать» → чувствительный порог ≥ 3. - FAQ (кто видит / учёт-часть / права) — кнопки во вступлении, итоге и в idle; формулировки помечены «формулировку проверяет юрист».
Eleboba added this to the Этап 1 · Ветераны СВО milestone 2026-10-03 15:17:01 +03:00
Eleboba added the featuresafetylane/Asize/1stage/veteransP0bot labels 2026-10-03 15:17:01 +03:00
Eleboba self-assigned this 2026-10-03 15:17:01 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Reference: MedITron/PTSRaiAgent#36