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:
@@ -482,4 +482,6 @@ def test_dialog_texts_avoid_forbidden_words() -> None:
|
||||
body = "\n".join(line for line in raw.splitlines() if not line.lstrip().startswith("#"))
|
||||
for word in ("учёт", "учет", "контрол", "надзор", "диагноз:"):
|
||||
assert word not in body
|
||||
assert "152-фз" in body and "8-800-2000-122" in body
|
||||
assert "152-фз" in body
|
||||
# Numbers live in one table (config/texts/crisis.yaml); the minors' stop text gets the children's line from it.
|
||||
assert "8-800-2000-122" not in body and "8-800-2000-122" in load_dialog_texts().age_gate.minor_stop
|
||||
|
||||
Reference in New Issue
Block a user