feat(questionnaire): integrate revised intake and follow-up monitoring
CI / ruff · pytest (pull_request) Successful in 55s

Add gated TSQ, Russian C-SSRS Recent, durable responses and notifications, diaries, schedules and audited clinical review. Preserve manual assessment when the Russian follow-up source is unavailable.

Refs #52
This commit is contained in:
Pavel Eliseev
2026-10-03 18:19:34 +03:00
parent 8b61eecf1b
commit c42ef621e5
34 changed files with 2556 additions and 85 deletions
+189
View File
@@ -0,0 +1,189 @@
version: diary-v2-2026-10-03
core:
- id: mood
text: 'Какое у Вас сегодня настроение?
0 — самое плохое, 10 — самое хорошее.'
options:
- value: 0
label: '0'
- value: 1
label: '1'
- value: 2
label: '2'
- value: 3
label: '3'
- value: 4
label: '4'
- value: 5
label: '5'
- value: 6
label: '6'
- value: 7
label: '7'
- value: 8
label: '8'
- value: 9
label: '9'
- value: 10
label: '10'
- id: sleep_hours
text: Сколько часов Вы спали прошлой ночью?
numeric: true
- id: rested
text: 'Насколько Вы выспались?
0 — совсем не выспались, 4 — полностью выспались.'
options:
- value: 0
label: '0'
- value: 1
label: '1'
- value: 2
label: '2'
- value: 3
label: '3'
- value: 4
label: '4'
- id: medication
text: Приняли ли Вы сегодня лекарства по схеме?
options:
- value: full
label: По схеме
- value: partial
label: Частично
- value: none
label: Нет
- value: not_prescribed
label: Не назначены
- id: medication_reason
text: Почему не приняли лекарства по схеме?
options:
- value: forgot
label: Забыл(а)
- value: side_effects
label: Побочные эффекты
- value: declined
label: Не хочу
- value: ran_out
label: Закончились
- value: other
label: Другая причина
- id: side_effects
text: Беспокоили ли Вас сегодня побочные эффекты лекарств?
options: &id001
- value: 1
label: Да
- value: 0
label: Нет
- id: substances
text: Употребляли ли Вы сегодня алкоголь или другие вещества?
options: *id001
- id: comment
text: Что хотите передать врачу?
optional: true
ptsd:
- id: intrusions
text: 'Насколько за последние сутки Вас беспокоили: нежелательные воспоминания о событии?'
options: &id002
- value: 0
label: Совсем нет
- value: 1
label: Немного
- value: 2
label: Умеренно
- value: 3
label: Сильно
- value: 4
label: Крайне сильно
- id: nightmares
text: 'Насколько за последние сутки Вас беспокоили: кошмары прошлой ночью?'
options: *id002
- id: avoidance
text: 'Насколько за последние сутки Вас беспокоили: желание избегать мест, людей и мыслей, напоминающих о событии?'
options: *id002
- id: hypervigilance
text: 'Насколько за последние сутки Вас беспокоили: настороженность, вздрагивание, ощущение опасности?'
options: *id002
- id: irritability
text: 'Насколько за последние сутки Вас беспокоили: раздражительность или вспышки гнева?'
options: *id002
depression:
- id: interest
text: 'Насколько Вам сегодня было интересно и приятно что-то делать?
0 — совсем нет, 4 — крайне сильно.'
options: *id002
- id: depressed
text: Насколько Вы сегодня чувствовали подавленность или безнадёжность?
options: *id002
- id: energy
text: 'Насколько у Вас сегодня были силы и энергия?
0 — совсем нет, 4 — крайне сильно.'
options: *id002
- id: planned_activity
text: Сделали ли Вы сегодня хотя бы одно запланированное дело?
options: *id001
suicide:
- id: death_thoughts
text: Были ли у Вас сегодня мысли о смерти или о том, что не хочется жить?
options: *id001
- id: thoughts_intensity
text: 'Если да — насколько сильными они были?
0 — совсем слабые, 10 — максимально сильные.'
options:
- value: 0
label: '0'
- value: 1
label: '1'
- value: 2
label: '2'
- value: 3
label: '3'
- value: 4
label: '4'
- value: 5
label: '5'
- value: 6
label: '6'
- value: 7
label: '7'
- value: 8
label: '8'
- value: 9
label: '9'
- value: 10
label: '10'
- id: hope
text: 'Насколько Вы верите, что станет лучше?
0 — совсем не верю, 10 — полностью верю.'
options:
- value: 0
label: '0'
- value: 1
label: '1'
- value: 2
label: '2'
- value: 3
label: '3'
- value: 4
label: '4'
- value: 5
label: '5'
- value: 6
label: '6'
- value: 7
label: '7'
- value: 8
label: '8'
- value: 9
label: '9'
- value: 10
label: '10'
- id: burden
text: Чувствовали ли Вы себя обузой для близких?
options: *id001
weekly: true
+167
View File
@@ -0,0 +1,167 @@
version: mvp-v2-2026-10-03
forms:
phq9:
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: Вас посещали мысли о том, что Вам лучше было бы умереть, или о том, чтобы причинить себе какой-нибудь
вред
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:
- code: phq9_item9_positive
when:
item: phq9_9
op: '>='
value: 1
pcl5:
id: pcl5
title: Контрольный список симптомов ПТСР (PCL-5)
recall_period: последний месяц
instruction: 'Ниже перечислены проблемы, которые иногда возникают у людей после очень тяжёлого, стрессового
события. Держа в уме самое тяжёлое для Вас событие, внимательно прочитайте каждый пункт и выберите вариант,
который показывает, насколько сильно эта проблема беспокоила Вас за последний месяц.
Насколько сильно за последний месяц Вас беспокоили:'
license_note: PCL-5 — общественное достояние (VA National Center for PTSD); русская версия — лицензия на проверке.
translation_note: Рабочий перевод команды (демо-текст). Финальный русский перевод выбирает психиатр (SPEC §9).
Для еженедельного мониторинга используется та же шкала с периодом «последняя неделя».
options:
- value: 0
label: Совсем нет
- value: 1
label: Немного
- value: 2
label: Умеренно
- value: 3
label: Сильно
- value: 4
label: Крайне сильно
items:
- id: pcl5_1
text: Повторяющиеся тяжёлые и нежелательные воспоминания о стрессовом событии?
- id: pcl5_2
text: Повторяющиеся тяжёлые сны о стрессовом событии?
- id: pcl5_3
text: Внезапное ощущение или поведение, как будто стрессовое событие происходит снова (как будто Вы действительно
вернулись туда и переживаете его заново)?
- id: pcl5_4
text: Сильное расстройство, когда что-то напоминало Вам о стрессовом событии?
- id: pcl5_5
text: Сильные телесные реакции, когда что-то напоминало Вам о стрессовом событии (например, сердцебиение,
затруднённое дыхание, потливость)?
- id: pcl5_6
text: Избегание воспоминаний, мыслей или чувств, связанных со стрессовым событием?
- id: pcl5_7
text: Избегание внешних напоминаний о стрессовом событии (например, людей, мест, разговоров, занятий, предметов
или ситуаций)?
- id: pcl5_8
text: Трудности с тем, чтобы вспомнить важные части стрессового события?
- id: pcl5_9
text: Сильные негативные убеждения о себе, других людях или мире (например, мысли «я плохой», «со мной что-то
серьёзно не так», «никому нельзя доверять», «мир абсолютно опасен»)?
- id: pcl5_10
text: Обвинение себя или кого-то другого в стрессовом событии или в том, что произошло после него?
- id: pcl5_11
text: Сильные негативные чувства, такие как страх, ужас, гнев, вина или стыд?
- id: pcl5_12
text: Потеря интереса к занятиям, которые раньше приносили Вам удовольствие?
- id: pcl5_13
text: Ощущение отдалённости или оторванности от других людей?
- id: pcl5_14
text: Трудности с тем, чтобы испытывать положительные чувства (например, неспособность чувствовать радость
или любовь к близким людям)?
- id: pcl5_15
text: Раздражительность, вспышки гнева или агрессивное поведение?
- id: pcl5_16
text: Чрезмерный риск или поступки, которые могут причинить Вам вред?
- id: pcl5_17
text: Повышенная бдительность, настороженность или ощущение, что нужно всё время быть начеку?
- id: pcl5_18
text: Взвинченность или склонность легко вздрагивать?
- id: pcl5_19
text: Трудности с концентрацией внимания?
- id: pcl5_20
text: Трудности с засыпанием или прерывистый сон?
range:
min: 0
max: 80
severity:
- min: 0
max: 32
code: below_threshold
label: Ниже порога ПТСР
- min: 33
max: 49
code: probable
label: Вероятное ПТСР
- min: 50
max: 80
code: high
label: Выраженная симптоматика ПТСР
flags:
- code: pcl5_probable_ptsd
when:
total: true
op: '>='
value: 33
trauma_introduction: 'Иногда с людьми происходят события, которые оказываются необычайно пугающими, ужасными или
травмирующими. Например: серьёзная авария или пожар; физическое или сексуальное нападение или насилие; землетрясение
или наводнение; война; Вы видели, как кого-то убили или тяжело ранили; близкий человек погиб в результате убийства
или самоубийства.'
trauma_filter: Случалось ли с Вами подобное событие?
+26
View File
@@ -0,0 +1,26 @@
version: intake-v2-2026-10-03
enabled: false
approval: null
# Release decisions cover texts, diary anchors/thresholds, schedules and contact readiness.
content_review: null
contact_review: null
timezone: Europe/Moscow
daily_hour: 19
mood_baseline_days: 7
mood_bad_days: 3
mood_drop: 3
sleep_bad_days: 3
sleep_hours_below: 4
nightmares_at: 3
missed_medication_days: 3
high_risk_silence_days: 2
medication_days: [7, 14, 28]
medication_repeat_days: 28
route_intervals:
after_crisis: {phq9: 7, pcl5: 14}
specialist: {phq9: 14, pcl5: 30}
self_help: {phq9: 28, pcl5: 28}
alcohol_repeat_days: 30
phq9_retriage_delta: 5
pcl5_retriage_delta: 10
+2 -2
View File
@@ -1,10 +1,10 @@
# Review candidate from the supplied MVP PDF, not a signed clinical protocol.
version: mvp-review-2026-10-03
version: mvp-v2-review-2026-10-03
approval: null
cssrs_positive_policy: pending
rus_audit_s_expand_from_zone: null
phq2_expand_at: 2
pcptsd5_expand_at: 3
tsq_expand_at: 6
phq9_psychologist_at: 5
phq9_specialist_at: 10
phq9_priority_at: 20
+59
View File
@@ -0,0 +1,59 @@
id: tsq
title: Опросник на скрининг ПТСР (TSQ)
recall_period: прошлая неделя
instruction: Эта анкета связана с вашими личными реакциями на травматическое событие, которое случилось с вами.
Ниже указаны некоторые реакции, которые иногда возникают у людей после травматического события. Пожалуйста, ответьте
«Да», если вы испытывали следующие симптомы по крайней мере дважды на прошлой неделе.
translation_note: КР ПТСР 2023, ID 753, приложение Г1, с.129–130 PDF; копия emdr.ru. Опечатки сохранены. Актуальность
редакции не подтверждена.
options:
- value: 1
label: ДА
- value: 0
label: НЕТ
items:
- id: tsq_1
text: Тяжелые мысли или воспоминания о событии приходили мне в голову против моей воли
buttons_only: true
- id: tsq_2
text: Мне снились тяжелые сны о том, что со мной случилось
buttons_only: true
- id: tsq_3
text: Я вдруг замечал(а), что действую и чувствую себя так, как будто бы ситуация повторяется снова
buttons_only: true
- id: tsq_4
text: Когда что-то напоминает мне об этом событии, я чувствую себя подавленным
buttons_only: true
- id: tsq_5
text: Когда что-то напоминало мне о случившемся, я испытывал(а) неприятные физические ощущения (потливость, сбой
дыхания, тошноту, учащение пульса и др.)
buttons_only: true
- id: tsq_6
text: У меня нарушен сон (трудности засыпания или частые пробуждения)
buttons_only: true
- id: tsq_7
text: Я чувствовал(а) постоянное раздражение и гнев
buttons_only: true
- id: tsq_8
text: Мне было сложно сосредоточится
buttons_only: true
- id: tsq_9
text: Я стал более осведомлён о потенциальных опасностях для себя и других
buttons_only: true
- id: tsq_10
text: Я все время был(а) напряжен(а) и вздрагивал(а), если что-то внезапно пугало меня
buttons_only: true
range:
min: 0
max: 10
severity:
- min: 0
max: 5
code: negative
label: Ниже порога
- min: 6
max: 10
code: positive
label: Требуется уточнение
license_note: "Текст приложения Г1 клинических рекомендаций 2023 года; условия использования и актуальную редакцию подтвердить до включения."
+8 -8
View File
@@ -14,9 +14,9 @@ resources:
phone: "112"
note: "если есть угроза жизни прямо сейчас"
helpline:
name: "Телефон доверия"
phone: "8-800-2000-122"
note: "бесплатно, круглосуточно"
name: "Психологическая помощь МЧС России"
phone: "+7 (495) 989-50-50"
note: "круглосуточно; стоимость звонка по тарифу оператора"
police:
name: "Полиция"
phone: "102"
@@ -30,7 +30,7 @@ variants:
себе вред (оружие, таблетки), по возможности уберите это подальше или отдайте близкому человеку
и побудьте рядом с кем-то, кому доверяете.
resources: [emergency, helpline]
doctor_notified: "Ваш врач уже уведомлён и свяжется с вами."
doctor_notified: "Не ждите ответа врача, если помощь нужна сейчас: звоните 112."
grounding: "Сейчас попробуйте сделать медленный вдох на 4 счёта и выдох на 6 — несколько раз. Я рядом."
patient.harm_others:
@@ -39,7 +39,7 @@ variants:
Пожалуйста, отойдите от человека и от всего, чем можно причинить вред, и побудьте там, где спокойнее.
Если кому-то угрожает опасность прямо сейчас — позвоните 112.
resources: [emergency, helpline]
doctor_notified: "Ваш врач уже уведомлён и свяжется с вами."
doctor_notified: "Не ждите ответа врача, если помощь нужна сейчас: звоните 112."
grounding: "Поставьте ступни на пол, сделайте медленный вдох на 4 счёта и выдох на 6 — несколько раз."
patient.domestic_violence:
@@ -48,7 +48,7 @@ variants:
Если вам или детям угрожает опасность — уйдите в безопасное место (к соседям, родным) и позвоните 112.
Кризисные службы и телефон доверия помогут найти безопасное место и поддержку.
resources: [emergency, police, helpline]
doctor_notified: "Ваш врач уже уведомлён."
doctor_notified: "Не ждите ответа врача, если помощь нужна сейчас: звоните 112."
grounding: "Если вы сейчас в безопасности — сделайте медленный вдох на 4 счёта и выдох на 6. Я рядом."
family.default:
@@ -58,7 +58,7 @@ variants:
спокойно уберите из доступа оружие, таблетки и острые предметы. Не спорьте и не стыдите —
просто будьте рядом и слушайте.
resources: [emergency, helpline]
doctor_notified: "Лечащий врач уже уведомлён."
doctor_notified: "Не ждите ответа врача, если помощь нужна сейчас: звоните 112."
grounding: "Позаботьтесь и о себе: сделайте медленный вдох на 4 счёта и выдох на 6."
family.domestic_violence:
@@ -68,5 +68,5 @@ variants:
Если угрожает опасность — уйдите в безопасное место (к соседям, родным) и позвоните 112.
Кризисные службы помогут с временным убежищем и поддержкой.
resources: [emergency, police, helpline]
doctor_notified: "Лечащий врач уже уведомлён."
doctor_notified: "Не ждите ответа врача, если помощь нужна сейчас: звоните 112."
grounding: "Когда будете в безопасности — сделайте медленный вдох на 4 счёта и выдох на 6."
+4 -4
View File
@@ -75,9 +75,9 @@ revoked:
crisis:
# Повторный острый сигнал в уже открытом кризисе: скрипт второй раз не шлём, только это + ресурсы.
repeat: "Я рядом. Ваш врач уже уведомлён. Если вам угрожает опасность прямо сейчас — позвоните:"
repeat: "Я рядом. Ваш при угрозе жизни звоните 112. Если вам угрожает опасность прямо сейчас — позвоните:"
# Любое другое сообщение, пока кризис открыт (до подтверждения врача).
hold: "Я на связи и читаю вас. Ваш врач в курсе и свяжется с вами. Если станет хуже — звоните 112 или на телефон доверия 8-800-2000-122."
hold: "Я на связи и читаю вас. Не ждите ответа врача, если помощь нужна сейчас. Если станет хуже — звоните 112 или на телефон доверия +7 (495) 989-50-50."
# Врач подтвердил кризисный алерт (doctor_ack): выходим из кризиса.
closed: "Ваш врач получил сообщение и в курсе вашей ситуации. Спасибо, что остаётесь на связи. Если снова станет тяжело — напишите мне в любой момент."
@@ -97,7 +97,7 @@ safety_plan:
- "Что помогает мне самому: прогулка, душ, дыхание, любимое дело."
- "Люди и места, которые отвлекают: к кому можно пойти."
- "Кому позвонить, если тяжело: близкий человек, сослуживец."
- "Специалисты: ваш врач, телефон доверия 8-800-2000-122, экстренные службы 112."
- "Специалисты: ваш врач, телефон доверия +7 (495) 989-50-50, экстренные службы 112."
- "Безопасная среда: оружие и лишние лекарства — на хранение близкому человеку."
means_restriction: "Если дома есть оружие или запас лекарств — попросите близкого человека временно хранить их у себя."
@@ -111,4 +111,4 @@ visit:
unavailable: |-
Сейчас у меня технические неполадки, и я не могу сохранить ваше сообщение. Пожалуйста, напишите чуть позже.
Если вам плохо прямо сейчас — звоните 112 или на телефон доверия 8-800-2000-122.
Если вам плохо прямо сейчас — звоните 112 или на телефон доверия +7 (495) 989-50-50.
+33
View File
@@ -0,0 +1,33 @@
unavailable: "Этот опрос пока недоступен. Если нужна помощь, свяжитесь с врачом."
done: "Ответы сохранены. Дальнейшие действия можно обсудить с врачом."
review: "Опрос приостановлен. Для продолжения нужна оценка специалиста. Если есть непосредственная угроза жизни — позвоните 112."
paused: "Опрос приостановлен, ответы сохранены."
invalid: "Выберите один из предложенных вариантов ответа."
numeric: "Введите число часов от 0 до 24, например 6,5."
help: "Мне нужна помощь сейчас"
pause: "Продолжить позже"
resume: "Продолжить опрос"
start: "Пройти первичный опрос"
comment_skip: "Не добавлять комментарий"
recent_trauma: "Событие произошло менее месяца назад?"
sex: "Укажите пол для интерпретации алкогольной шкалы."
tbi: "Были ли у Вас контузия или черепно-мозговая травма?"
psychotropics: "Принимаете ли Вы сейчас психотропные препараты?"
missing_followup: "Для оценки изменений со времени прошлого контакта нужна консультация специалиста. Если Вам нужна помощь сейчас, нажмите кнопку ниже."
periods:
past_month: "За последний месяц."
lifetime: "За всю жизнь."
past_3_months: "За последние три месяца."
standard_drinks: |-
Стандартная порция (СП) = 10 г этанола. Таблица бланка RUS-AUDIT:
Вино/шампанское · пиво · креплёное вино · крепкий алкоголь
1–2 СП: до 250 мл · до 650 мл · до 170 мл · до 80 мл
3–4 СП: 251–450 мл · 651–1200 мл · 171–300 мл · 81–140 мл
5–6 СП: 451–660 мл · 1201–1750 мл · 301–430 мл · 141–210 мл
7–9 СП: 661–970 мл · 1751–2500 мл · 431–640 мл · 211–300 мл
10+ СП: более 970 мл · более 2500 мл · более 640 мл · более 300 мл
Если напитков несколько, учитывайте суммарное число стандартных порций.
as_of: "Период отсчитывается от даты начала этого опроса: {day}."
alcohol_advice: "Обсудите с врачом, как сократить употребление алкоголя и составить безопасный план."