Merge pull request 'feat(bot): LLM-саммари динамики для врача' (#49) from feat/19-doctor-summary into dev
CI / ruff · pytest (push) Successful in 24s

This commit was merged in pull request #49.
This commit is contained in:
2026-10-03 15:34:46 +03:00
3 changed files with 650 additions and 0 deletions
+89
View File
@@ -0,0 +1,89 @@
# Детерминированное саммари динамики для врача (#19, SPEC §7 п.4).
# Строится ТОЛЬКО по структурированным данным карточки (баллы, флаги, приём доз) — без текста пациента.
# Используется: (1) как ответ mock-провайдера, (2) как запасной текст, если GigaChat недоступен или его ответ
# не прошёл фильтр запретов. Правила текстов: без диагнозов, без советов по дозам — решения принимает врач.
# Зона clinical вычитывает формулировки и пороги.
empty: "Нет данных за период."
# Пороги для блока «Что обсудить на визите». Совпадают с config/rules.yaml, где это применимо.
thresholds:
phq9_rise: 5 # рост PHQ-9 ≥ 5 баллов (rules.yaml: phq9_rise)
pcl5_rise: 10 # рост PCL-5 ≥ 10 баллов (rules.yaml: pcl5_rise)
gad7_rise: 5
sleep_nights: 3 # ночей со сном < 4 ч за период
alcohol_days: 3 # дней с алкоголем за период
mood_low: 3 # среднее настроение за последние 3 дня ≤ порога (0–10)
adherence_min: 0.8 # доля принятых доз ниже порога
max_topics: 5
metrics:
phq9: "PHQ-9"
pcl5: "PCL-5"
gad7: "GAD-7"
auditc: "AUDIT-C"
dar5: "DAR-5"
levels:
acute: "острый"
high: "высокий"
moderate: "умеренный"
info: "инфо"
risk_levels:
low: "низкий"
medium: "средний"
high: "высокий"
# Короткие подписи кодов алертов (id правил из config/rules.yaml).
codes:
phq9_item9: "PHQ-9 п.9"
cssrs_high: "C-SSRS высокий"
cssrs_moderate: "C-SSRS умеренный"
weapon_access_risk: "доступ к оружию"
phq9_severe: "PHQ-9 тяжёлая степень"
pcl5_severe: "PCL-5 выше порога"
phq9_rise: "рост PHQ-9"
pcl5_rise: "рост PCL-5"
auditc_positive: "AUDIT-C положительный"
quit_intent: "намерение прекратить приём"
missed_doses_7d: "пропуски приёма"
side_effect_3d: "побочные эффекты"
sleep_lt4_3n: "сон < 4 ч"
alcohol_3d: "алкоголь"
mood_low_3d: "сниженное настроение"
no_contact_3d: "нет связи"
young_adult_start: "возраст < 25"
lines:
safety: "Безопасность: открыт острый сигнал ({codes}, день {day}) — требует внимания врача в первую очередь."
alerts: "Открытые алерты: {alerts}."
no_alerts: "Открытых алертов нет."
scales: "Шкалы: {scales}."
scale: "{name} {values} ({delta} к исходному{unscheduled})"
scale_latest: "{name} = {value} (последнее измерение)"
unscheduled: ", последний — внеплановый"
wellbeing: "Самочувствие: {parts}."
mood: "настроение в среднем {avg}/10, последние 3 дня {last3} (мин. {min})"
sleep: "сон < 4 ч — {nights} ноч. (подряд до {streak})"
alcohol: "алкоголь — {days} дн. (подряд до {streak})"
therapy: "Терапия: {parts}."
therapy_drug: "{drug}, день {day}"
adherence: "принято {taken}/{planned} ({pct}%)"
adherence_7d: "приверженность за 7 дней {pct}%"
missed: "пропуски — день {days}"
side_effects: "побочные эффекты — день {days}"
no_side_effects: "побочные эффекты не отмечены"
quit: "намерение прекратить — день {days}"
risk: "риск отказа от терапии {level} ({score}){factors}"
discuss: "Что обсудить на визите: {topics}."
topics:
safety: "безопасность и план безопасности"
scale_rise: "рост {name}"
quit: "намерение прекратить приём"
side_effects: "переносимость (побочные эффекты)"
adherence: "пропуски приёма"
sleep: "сон"
alcohol: "алкоголь на фоне терапии"
mood: "сниженное настроение"