fix(clinical): red flags, one crisis rule, callback after a crisis, one table of numbers
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>
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
# Red flags — asked first in stage 1, before any scale (clinical review 2026-10-04: «обязательно»).
|
||||
# Any «Да» stops the questionnaire: an acute alert to the doctor, a callback task for the doctor on duty and the
|
||||
# help screen (crisis script variant by `category`, config/texts/crisis.yaml). Wording — team draft, the doctor
|
||||
# approves it (#8). These are not a scale: there is no score, only a stop rule.
|
||||
version: red-flags-v1-2026-10-04
|
||||
intro: "Сначала несколько коротких вопросов о безопасности. Отвечайте так, как есть сейчас."
|
||||
options:
|
||||
- {value: 1, label: Да}
|
||||
- {value: 0, label: Нет}
|
||||
items:
|
||||
- id: rf_psychosis
|
||||
text: Слышите ли Вы сейчас голоса или видите то, чего не видят и не слышат другие люди?
|
||||
category: null
|
||||
- id: rf_harm_others
|
||||
text: Есть ли у Вас сейчас мысли причинить вред другому человеку?
|
||||
category: harm_others
|
||||
- id: rf_weapons
|
||||
text: Есть ли у Вас дома или рядом доступ к оружию?
|
||||
category: null
|
||||
- id: rf_violence
|
||||
text: Угрожает ли Вам сейчас кто-то дома или применяет к Вам насилие?
|
||||
category: domestic_violence
|
||||
- id: rf_intoxication
|
||||
text: Находитесь ли Вы сейчас в состоянии сильного опьянения или тяжёлой отмены алкоголя либо других веществ?
|
||||
category: null
|
||||
@@ -1,7 +1,8 @@
|
||||
# Review candidate from the supplied MVP PDF, not a signed clinical protocol.
|
||||
version: mvp-v2-review-2026-10-03
|
||||
approval: null
|
||||
cssrs_positive_policy: pending
|
||||
# C01 decided by the team after the clinical review (2026-10-04, ADR-013): crisis screen at HIGH risk only.
|
||||
cssrs_positive_policy: graded
|
||||
rus_audit_s_expand_from_zone: null
|
||||
phq2_expand_at: 2
|
||||
tsq_expand_at: 6
|
||||
@@ -9,5 +10,4 @@ phq9_psychologist_at: 5
|
||||
phq9_specialist_at: 10
|
||||
phq9_priority_at: 20
|
||||
pcl5_specialist_at: 31
|
||||
pcl5_priority_at: 50
|
||||
pcl5_behavior_flag_at: 3
|
||||
|
||||
@@ -17,5 +17,4 @@ phq9_psychologist_at: 5
|
||||
phq9_specialist_at: 10
|
||||
phq9_priority_at: 20
|
||||
pcl5_specialist_at: 31
|
||||
pcl5_priority_at: 50
|
||||
pcl5_behavior_flag_at: 3
|
||||
|
||||
+5
-3
@@ -62,7 +62,7 @@ rules:
|
||||
params: {}
|
||||
actions:
|
||||
- {type: alert, level: high}
|
||||
reason_ru: "C-SSRS: умеренный риск, врачу в течение 24 ч"
|
||||
reason_ru: "C-SSRS: умеренный риск, психиатр — ориентир 24 ч"
|
||||
|
||||
# ---------------------------------------------------------------- scale thresholds (yellow)
|
||||
- id: phq9_severe
|
||||
@@ -73,10 +73,12 @@ rules:
|
||||
reason_ru: "PHQ-9 = {total} (тяжёлая депрессия, порог {threshold})"
|
||||
|
||||
- id: pcl5_severe
|
||||
description: Latest PCL-5 total >= 50 → doctor within 24 h.
|
||||
description: >
|
||||
Latest PCL-5 total >= 50 → planned specialist review. Not a priority appointment by itself: risk and flags
|
||||
come first, scales second (clinical review 2026-10-04).
|
||||
params: {threshold: 50}
|
||||
actions:
|
||||
- {type: alert, level: high}
|
||||
- {type: alert, level: moderate}
|
||||
reason_ru: "PCL-5 = {total} (порог {threshold})"
|
||||
|
||||
- id: phq9_rise
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
# Кризисный скрипт (guardrail №2, issue #4). Отправляется ДОСЛОВНО при safety = acute; LLM не вызывается.
|
||||
# `resources` — ЕДИНСТВЕННАЯ таблица телефонов приложения: остальные тексты и промпты ссылаются на неё через
|
||||
# `{phone:<ключ>}` (app/core/safety.py::fill_phones). Источники и проверка — docs/clinical/crisis-contacts.md.
|
||||
# СТАТУС: черновик, утверждает психиатр (#8).
|
||||
#
|
||||
# Выбор варианта (app/core/safety.py::crisis_reply): `<audience>.<категория>` по порядку category_priority,
|
||||
@@ -17,6 +19,11 @@ resources:
|
||||
name: "Психологическая помощь МЧС России"
|
||||
phone: "+7 (495) 989-50-50"
|
||||
note: "круглосуточно; стоимость звонка по тарифу оператора"
|
||||
# For minors only (age gate stop text); not a general adult crisis line (docs/clinical/crisis-contacts.md).
|
||||
child_helpline:
|
||||
name: "Детский телефон доверия"
|
||||
phone: "8-800-2000-122"
|
||||
note: "для детей, подростков и родителей; бесплатно, анонимно"
|
||||
police:
|
||||
name: "Полиция"
|
||||
phone: "102"
|
||||
|
||||
@@ -53,7 +53,7 @@ age_gate:
|
||||
unclear: "Не удалось понять ответ. Нажмите кнопку или напишите год рождения четырьмя цифрами, например 1990."
|
||||
minor_stop: |-
|
||||
Спасибо, что ответили. Этот помощник рассчитан на взрослых, поэтому дальше я не смогу с вами работать и не сохраняю ваши ответы.
|
||||
Если вам тяжело или нужна поддержка — позвоните на Детский телефон доверия 8-800-2000-122 (бесплатно, анонимно, круглосуточно) или расскажите взрослому, которому доверяете: родителям, учителю, школьному психологу.
|
||||
Если вам тяжело или нужна поддержка — позвоните на Детский телефон доверия {phone:child_helpline} (бесплатно, анонимно) или расскажите взрослому, которому доверяете: родителям, учителю, школьному психологу.
|
||||
Если есть угроза жизни прямо сейчас — звоните 112.
|
||||
|
||||
idle:
|
||||
@@ -79,9 +79,9 @@ revoked:
|
||||
|
||||
crisis:
|
||||
# Повторный острый сигнал в уже открытом кризисе: скрипт второй раз не шлём, только это + ресурсы.
|
||||
repeat: "Я рядом. Ваш при угрозе жизни звоните 112. Если вам угрожает опасность прямо сейчас — позвоните:"
|
||||
repeat: "Я рядом. Если вам угрожает опасность прямо сейчас — позвоните:"
|
||||
# Любое другое сообщение, пока кризис открыт (до подтверждения врача).
|
||||
hold: "Я на связи и читаю вас. Не ждите ответа врача, если помощь нужна сейчас. Если станет хуже — звоните 112 или на телефон доверия +7 (495) 989-50-50."
|
||||
hold: "Я на связи и читаю вас. Не ждите ответа врача, если помощь нужна сейчас. Если станет хуже — звоните 112 или на телефон доверия {phone:helpline}."
|
||||
# Врач подтвердил кризисный алерт (doctor_ack): выходим из кризиса.
|
||||
closed: "Ваш врач получил сообщение и в курсе вашей ситуации. Спасибо, что остаётесь на связи. Если снова станет тяжело — напишите мне в любой момент."
|
||||
|
||||
@@ -101,7 +101,7 @@ safety_plan:
|
||||
- "Что помогает мне самому: прогулка, душ, дыхание, любимое дело."
|
||||
- "Люди и места, которые отвлекают: к кому можно пойти."
|
||||
- "Кому позвонить, если тяжело: близкий человек, сослуживец."
|
||||
- "Специалисты: ваш врач, телефон доверия +7 (495) 989-50-50, экстренные службы 112."
|
||||
- "Специалисты: ваш врач, телефон доверия {phone:helpline}, экстренные службы 112."
|
||||
- "Безопасная среда: оружие и лишние лекарства — на хранение близкому человеку."
|
||||
means_restriction: "Если дома есть оружие или запас лекарств — попросите близкого человека временно хранить их у себя."
|
||||
|
||||
@@ -109,10 +109,12 @@ reach_out:
|
||||
silence: "Давно не было вестей от вас. Как вы? Можно ответить одним словом — мне важно знать, что с вами всё в порядке."
|
||||
missed_doses: "Заметил, что несколько приёмов препарата пропущено. Всё ли в порядке? Если что-то мешает — расскажите, я передам врачу."
|
||||
default: "Хотел узнать, как вы. Напишите пару слов, когда будет удобно."
|
||||
# The day after a crisis (app/services/followup.py); the doctor on duty also calls back.
|
||||
after_crisis: "Как вы сегодня? Вчера было очень тяжело — мне важно знать, что вы в порядке. Ваш план безопасности под кнопкой ниже. С вами также свяжется дежурный специалист. Если станет хуже — звоните 112 или на телефон доверия {phone:helpline}."
|
||||
|
||||
visit:
|
||||
button: "Записаться к врачу раньше"
|
||||
|
||||
unavailable: |-
|
||||
Сейчас у меня технические неполадки, и я не могу сохранить ваше сообщение. Пожалуйста, напишите чуть позже.
|
||||
Если вам плохо прямо сейчас — звоните 112 или на телефон доверия +7 (495) 989-50-50.
|
||||
Если вам плохо прямо сейчас — звоните 112 или на телефон доверия {phone:helpline}.
|
||||
|
||||
@@ -32,13 +32,13 @@ findings:
|
||||
text: "Рекомендуем консультацию нарколога — параллельно с основным маршрутом."
|
||||
suicide_low:
|
||||
title: "Тяжёлые мысли"
|
||||
text: "Вы отметили мысли о смерти. Мы добавили план безопасности и будем каждый день коротко спрашивать о самочувствии. Если станет тяжело — звоните 112 или на телефон доверия."
|
||||
text: "Вы отметили мысли о смерти. Мы добавили план безопасности и будем каждый день коротко спрашивать о самочувствии. Если станет тяжело — звоните 112 или на телефон доверия {phone:helpline}."
|
||||
tbi:
|
||||
title: "Контузия или ЧМТ"
|
||||
text: "Рекомендуем консультацию невролога."
|
||||
|
||||
routes:
|
||||
urgent_psychiatrist: "Срочно свяжитесь с психиатром — сегодня или завтра."
|
||||
urgent_psychiatrist: "Срочно свяжитесь с психиатром — ориентир: в течение 24 часов."
|
||||
priority_psychiatrist: "Рекомендуем приоритетную запись к психиатру в ближайшие дни."
|
||||
psychiatrist_or_psychotherapist: "Рекомендуем плановую запись к психиатру или психотерапевту."
|
||||
psychologist: "Рекомендуем консультацию психолога."
|
||||
|
||||
Reference in New Issue
Block a user