feat(core): scale engine with YAML schema and deterministic scoring
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:
2026-10-03 14:56:40 +03:00
co-authored by Claude Opus 5.5
parent de27ff1b72
commit 0c8cedc0c6
10 changed files with 1017 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
# Стартовые пороги из литературы, финальные утверждает психиатр (issue #8).
# PHQ-9 (Kroenke, Spitzer, Williams, 2001). Градации: 0–4, 5–9, 10–14, 15–19, 20–27.
id: phq9
title: "Опросник здоровья пациента (PHQ-9)"
recall_period: "последние 2 недели"
instruction: "Как часто за последние 2 недели Вас беспокоили следующие проблемы?"
license_note: "PHQ-9 (Pfizer) — свободное использование, разрешения не требуется."
translation_note: "Стандартная русская версия PHQ-9 (MAPI). Финальную формулировку утверждает психиатр."
options:
- {value: 0, label: "Ни разу"}
- {value: 1, label: "Несколько дней"}
- {value: 2, label: "Более половины дней"}
- {value: 3, label: "Почти каждый день"}
items:
- id: phq9_1
text: "Вам не хотелось ничего делать"
- id: phq9_2
text: "У Вас было плохое настроение, Вы были подавлены или испытывали чувство безысходности"
- id: phq9_3
text: "Вам было трудно заснуть, у Вас был прерывистый сон, или Вы слишком много спали"
- id: phq9_4
text: "Вы были утомлены, или у Вас было мало сил"
- id: phq9_5
text: "У Вас был плохой аппетит, или Вы переедали"
- id: phq9_6
text: >-
Вы плохо о себе думали: считали себя неудачником (неудачницей), или были в себе разочарованы,
или считали, что подвели свою семью
- id: phq9_7
text: "Вам было трудно сосредоточиться (например, на чтении газеты или просмотре телепередач)"
- id: phq9_8
text: >-
Вы двигались или говорили настолько медленно, что окружающие это замечали? Или, наоборот,
Вы были настолько суетливы или взбудоражены, что двигались гораздо больше обычного
- id: phq9_9
text: "Вас посещали мысли о том, что Вам лучше было бы умереть, или о том, чтобы причинить себе какой-нибудь вред"
# Пункт о суицидальных мыслях — только кнопками, без интерпретации LLM (SPEC, ADR-002).
buttons_only: true
range: {min: 0, max: 27}
severity:
- {min: 0, max: 4, code: minimal, label: "Минимальная"}
- {min: 5, max: 9, code: mild, label: "Лёгкая"}
- {min: 10, max: 14, code: moderate, label: "Умеренная"}
- {min: 15, max: 19, code: moderately_severe, label: "Умеренно-тяжёлая"}
- {min: 20, max: 27, code: severe, label: "Тяжёлая"}
flags:
# П.9 ≥ 1 → C-SSRS + кризисная ветка (обрабатывают правила, config/rules.yaml).
- code: phq9_item9_positive
when: {item: phq9_9, op: ">=", value: 1}