fix(clinical): красные флаги, одно правило кризиса, звонок после кризиса, одна таблица номеров #94

Merged
Arxip222 merged 2 commits from fix/clinical-review-safety into dev 2026-10-04 16:28:29 +03:00
Owner

Что меняется

Обязательные правки по клиническому ревью опросников (ADR-013): блок красных флагов в начале этапа 1; одно правило кризисного экрана — только высокий риск C-SSRS; задача дежурному «перезвонить» после любого кризиса + вопрос «как вы» на следующий день; маршрут «сначала риск и флаги, потом шкалы», PCL-5 ≥50 больше не приоритетная запись; все кризисные номера — в одной таблице config/texts/crisis.yaml.

Closes #92

Зона

clinical + B (questionnaire flow, monitoring, scheduler). Контракты #34 не менялись.

Как проверить

  1. INTAKE_DEMO=true; анонимный вход → первые 5 вопросов — безопасность; «Да» на любой → экран помощи, в кабинете врача алерт и задача «Перезвонить пациенту после кризиса».
  2. Пройти опрос с п.9 PHQ-9 = «Несколько дней» и отрицательным C-SSRS → нет кризисного экрана, есть план безопасности и флаг расхождения.
  3. make lint && make test (1036 passed локально).

Чек-лист

  • слито с origin/dev
  • ruff + pytest зелёные
  • лог в issue (### 2026-10-04)
  • нет ПДн в логах, нет реальных данных, нет секретов
  • формулировки красных флагов — черновик, утверждает врач (#8)

Остаётся: старое правило дашборда phq9_item9 (ADR-006) поднимает кризис по п.9 в сценарии без опросника — свести при следующем ревью правил.

🤖 Generated with Claude Code

## Что меняется Обязательные правки по клиническому ревью опросников (ADR-013): блок красных флагов в начале этапа 1; одно правило кризисного экрана — только высокий риск C-SSRS; задача дежурному «перезвонить» после любого кризиса + вопрос «как вы» на следующий день; маршрут «сначала риск и флаги, потом шкалы», PCL-5 ≥50 больше не приоритетная запись; все кризисные номера — в одной таблице `config/texts/crisis.yaml`. Closes #92 ## Зона clinical + B (questionnaire flow, monitoring, scheduler). Контракты #34 не менялись. ## Как проверить 1. `INTAKE_DEMO=true`; анонимный вход → первые 5 вопросов — безопасность; «Да» на любой → экран помощи, в кабинете врача алерт и задача «Перезвонить пациенту после кризиса». 2. Пройти опрос с п.9 PHQ-9 = «Несколько дней» и отрицательным C-SSRS → нет кризисного экрана, есть план безопасности и флаг расхождения. 3. `make lint && make test` (1036 passed локально). ## Чек-лист - [x] слито с origin/dev - [x] ruff + pytest зелёные - [x] лог в issue (### 2026-10-04) - [x] нет ПДн в логах, нет реальных данных, нет секретов - [x] формулировки красных флагов — черновик, утверждает врач (#8) Остаётся: старое правило дашборда `phq9_item9` (ADR-006) поднимает кризис по п.9 в сценарии без опросника — свести при следующем ревью правил. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Arxip222 added 2 commits 2026-10-04 16:25:46 +03:00
Clinical review of the questionnaires (ADR-013):
- Red-flag block first in stage 1 (config/instruments/red_flags.yaml); any «Да» stops the
  questionnaire with an acute alert and the help screen of its category.
- One crisis rule: the crisis screen opens at a HIGH C-SSRS risk only; moderate stops and goes
  to a psychiatrist (24 h as a guide), low is a flag with the safety plan. PHQ-9 item 9 with a
  negative screener is a discrepancy flag; without a completed screener it asks the C-SSRS at once.
  config/questionnaire.yaml: cssrs_positive_policy graded (C01).
- Every crisis leaves a callback task for the doctor on duty (post_crisis_call, one per patient)
  and the app asks how the person is the next day, the safety plan one tap away.
- Routing: risk and flags first, scales second; PCL-5 >= 50 no longer means a priority
  appointment (pcl5_severe is moderate on the dashboard too).
- Crisis numbers live only in config/texts/crisis.yaml; texts and the agent prompt refer to them
  via {phone:<key>}. Fixes the children's helpline offered to adults by the chat agent.

Refs #92

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Arxip222 merged commit 079c3003aa into dev 2026-10-04 16:28:29 +03:00
Sign in to join this conversation.