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
+50
View File
@@ -0,0 +1,50 @@
# Стартовые пороги из литературы, финальные утверждает психиатр (issue #8).
# AUDIT-C (Bush et al., 1998; Bradley et al., 2007). Положительный скрининг: ≥ 4 у мужчин, ≥ 3 у женщин.
# Если пол неизвестен — используется более чувствительный порог (≥ 3), чтобы не пропустить риск.
id: auditc
title: "Тест на употребление алкоголя (AUDIT-C)"
recall_period: "последний год"
instruction: "Ответьте, пожалуйста, на вопросы об употреблении алкоголя. Одна стандартная порция — 10 г чистого спирта."
license_note: "AUDIT/AUDIT-C (ВОЗ) — свободное использование."
translation_note: >-
Рабочий перевод команды на основе русской версии AUDIT (ВОЗ). Финальный перевод выбирает психиатр.
items:
- id: auditc_1
text: "Как часто Вы употребляете алкогольные напитки?"
options:
- {value: 0, label: "Никогда"}
- {value: 1, label: "Раз в месяц или реже"}
- {value: 2, label: "2–4 раза в месяц"}
- {value: 3, label: "2–3 раза в неделю"}
- {value: 4, label: "4 раза в неделю или чаще"}
- id: auditc_2
text: "Сколько стандартных порций алкоголя Вы обычно выпиваете в день, когда пьёте?"
options:
- {value: 0, label: "1–2"}
- {value: 1, label: "3–4"}
- {value: 2, label: "5–6"}
- {value: 3, label: "7–9"}
- {value: 4, label: "10 и более"}
- id: auditc_3
text: "Как часто Вы выпиваете 6 и более стандартных порций за один раз?"
options:
- {value: 0, label: "Никогда"}
- {value: 1, label: "Реже раза в месяц"}
- {value: 2, label: "Ежемесячно"}
- {value: 3, label: "Еженедельно"}
- {value: 4, label: "Ежедневно или почти ежедневно"}
range: {min: 0, max: 12}
# Пол неизвестен — чувствительный порог (≥ 3).
severity:
- {min: 0, max: 2, code: negative, label: "Скрининг отрицательный"}
- {min: 3, max: 12, code: positive, label: "Скрининг положительный"}
by_sex:
m:
- {min: 0, max: 3, code: negative, label: "Скрининг отрицательный"}
- {min: 4, max: 12, code: positive, label: "Скрининг положительный"}
f:
- {min: 0, max: 2, code: negative, label: "Скрининг отрицательный"}
- {min: 3, max: 12, code: positive, label: "Скрининг положительный"}
flags:
- code: auditc_positive
when: {severity_in: [positive]}