feat(core): scale engine with YAML schema and deterministic scoring
CI / ruff · pytest (pull_request) Successful in 23s
CI / ruff · pytest (pull_request) Successful in 23s
Pydantic schema for config/scales/*.yaml, cached loader, score() with severity bands (sex-specific for AUDIT-C), rule-based C-SSRS triage, flags (PHQ-9 item 9, PCL-5 >= 33, PHQ-4 subscales) and delta(). Starting literature thresholds for phq9, gad7, pcl5, auditc, pcptsd5, cssrs_screen, phq4; final values are approved by the psychiatrist (#8). Refs #3 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
# Стартовые пороги из литературы, финальные утверждает психиатр (issue #8).
|
||||
# C-SSRS, скрининговая версия (Posner et al., 2011; Columbia Lighthouse Project), триаж:
|
||||
# q1–q2 (желание умереть, суицидальные мысли) → low
|
||||
# q3 (мысли о способе, без намерения) → moderate
|
||||
# q4 (намерение), q5 (план), q6 (поведение за 3 месяца) → high
|
||||
# Ответы «да/нет» хранятся как 1/0. Порядок правил важен: первое совпавшее — уровень риска.
|
||||
# В оригинале q6 задаётся «за всю жизнь» с уточнением «в последние 3 месяца»; для триажа нужен
|
||||
# только второй вариант, поэтому q6 сформулирован сразу про 3 месяца (утверждает психиатр).
|
||||
id: cssrs_screen
|
||||
title: "Колумбийская шкала оценки тяжести суицидального риска (C-SSRS), скрининг"
|
||||
recall_period: "последний месяц (вопрос 6 — последние 3 месяца)"
|
||||
instruction: "Ответьте, пожалуйста, на несколько вопросов о том, как Вы себя чувствовали за последний месяц."
|
||||
license_note: "C-SSRS — бесплатно для клинического и некоммерческого использования (Columbia Lighthouse Project)."
|
||||
translation_note: >-
|
||||
Рабочий перевод команды (демо-текст). Финальный текст — официальная русская скрининговая версия,
|
||||
выбирает психиатр.
|
||||
scoring: rules
|
||||
options:
|
||||
- {value: 0, label: "Нет"}
|
||||
- {value: 1, label: "Да"}
|
||||
items:
|
||||
- {id: cssrs_1, text: "Хотелось ли Вам умереть или заснуть и не проснуться?", buttons_only: true}
|
||||
- {id: cssrs_2, text: "Были ли у Вас мысли о том, чтобы покончить с собой?", buttons_only: true}
|
||||
- {id: cssrs_3, text: "Думали ли Вы о том, как могли бы это сделать?", buttons_only: true}
|
||||
- id: cssrs_4
|
||||
text: "Были ли у Вас такие мысли и хоть какое-то намерение действовать в соответствии с ними?"
|
||||
buttons_only: true
|
||||
- id: cssrs_5
|
||||
text: "Начинали ли Вы продумывать или уже продумали детали того, как покончить с собой? Собираетесь ли Вы осуществить этот план?"
|
||||
buttons_only: true
|
||||
- id: cssrs_6
|
||||
text: "За последние 3 месяца делали ли Вы что-нибудь, начинали делать или готовились сделать, чтобы покончить с собой?"
|
||||
buttons_only: true
|
||||
range: {min: 0, max: 6}
|
||||
severity_rules:
|
||||
- code: high
|
||||
label: "Высокий риск"
|
||||
when:
|
||||
any_of:
|
||||
- {item: cssrs_4, op: ">=", value: 1}
|
||||
- {item: cssrs_5, op: ">=", value: 1}
|
||||
- {item: cssrs_6, op: ">=", value: 1}
|
||||
- code: moderate
|
||||
label: "Умеренный риск"
|
||||
when: {item: cssrs_3, op: ">=", value: 1}
|
||||
- code: low
|
||||
label: "Низкий риск"
|
||||
when:
|
||||
any_of:
|
||||
- {item: cssrs_1, op: ">=", value: 1}
|
||||
- {item: cssrs_2, op: ">=", value: 1}
|
||||
default_severity: {code: none, label: "Риск не выявлен"}
|
||||
flags:
|
||||
# high → acute-алерт и кризисный протокол (ADR-006); moderate → врачу ≤ 24 ч (config/rules.yaml).
|
||||
- code: cssrs_high
|
||||
when: {severity_in: [high]}
|
||||
- code: cssrs_moderate
|
||||
when: {severity_in: [moderate]}
|
||||
Reference in New Issue
Block a user