[core] Движок правил алертов и действий (config/rules.yaml) + демо-часы #5
Notifications
Due Date
No due date set.
Blocks
Depends on
Reference: MedITron/PTSRaiAgent#5
Reference in New Issue
Block a user
Описание
Детерминированные правила по структурированным данным → алерты и «действия агента» (ADR-007). Время — только из
app.core.clock(ADR-005). Цвета — ADR-006.Желаемый результат
app/core/clock.py:now(); режим реальный / виртуальный (advance(days|hours),set(dt)); персистентность смещения (в БД через колбэк или файл).app/core/rules.py:evaluate(snapshot) -> list[Action], где snapshot — последние N дней чек-инов, доз, результатов шкал, модули пациента, возраст. Action ={type: alert|crisis|schedule_scale|ask_followup|med_info|suggest_visit|reach_out, level, reason_code, params}.config/rules.yaml— все правила из SPEC §6 + CLINICAL_MODULES + демо-персоны: п.9 ≥ 1 → crisis; PHQ-9 ≥ 20 / PCL-5 ≥ 50 → high; рост PHQ-9 ≥ 5 / PCL-5 ≥ 10 → high; побочка 3 дня подряд → moderate; намерение бросить → high + med_info; пропуск ≥ 3 из 7 → moderate + reach_out; сон < 4 ч 3 ночи → moderate; алкоголь 3 дня → moderate + med_info(alcohol) + suggest_visit; настроение ≤ 3 три дня → schedule_scale(phq9, unscheduled); молчание > 3 дней → info + reach_out; возраст < 25 и день терапии ≤ 28 → усиленный мониторинг; AUDIT-C ≥ 4/3 → флаг; оружие + риск → crisis-блок.tests/test_rules.py: прогон 13-дневной траектории изdocs/product/01_demo_persona.mdдаёт ровно ожидаемые уровни по дням (🟢🟢🟢🟡🟡🟢🟢🟢🟢🟡🟡🟡🔴).Лог выполнения
2026-10-03
2026-10-03
app/core/clock.py(демо-часы:now(),today(),advance(),set_now(),reset(),offset(), хук персистентностиregister_persistence(load, save));config/rules.yaml+app/core/rules.py(17 правил: п.9 PHQ-9, C-SSRS high/moderate, оружие + риск, PHQ-9 ≥ 20, PCL-5 ≥ 50, рост PHQ-9/PCL-5, AUDIT-C по полу, намерение бросить, пропуски 3/7, побочка 3 дня, сон < 4 ч 3 ночи, алкоголь 3 дня, настроение ≤ 3 → внеплановый PHQ-9, молчание > 3 дней, возраст < 25 → усиленный мониторинг);color()/patient_status()по ADR-006.make lint testзелёный; тесты на каждое правило, дедуп, часы и 13-дневную траекторию персоны — получается ровно 🟢🟢🟢🟡🟡🟢🟢🟢🟢🟡🟡🟡🔴.reason_ru), Python реализует предикат под тем же id; если для id нет evaluator-а, загрузка падает. Дедуп: если открыт alert с кодом правила, правило молчит целиком (без повторных med_info/reach_out); crisis не подавляется. Серии «N дней подряд» заканчиваются сегодня, а если сегодняшнего чек-ина ещё нет — вчера; пропущенный день серию прерывает. П.9 → crisis только для PHQ-9 за последние 24 ч. Добавлено правилоcssrs_moderate→ HIGH (SPEC: Safety POSSIBLE). Конфликтов с таблицей персоны нет: дни 11–12 жёлтые, потому что алерты по алкоголю и сну открыты до подтверждения врачом.