feat(core): add review-gated intake questionnaire rules
Correct RUS-AUDIT-S composition, preserve C-SSRS lifetime behavior, and prepare clinical review materials. Refs #52
This commit is contained in:
@@ -0,0 +1,155 @@
|
||||
# Опросник: пакет проверки от 3 октября 2026
|
||||
|
||||
Статус: **подготовлено для проверки, не утверждено для пациентов**. Задача #52;
|
||||
клиническое согласование остаётся в #8. Независимый обратный перевод, согласование
|
||||
врачом и проверка линий звонками не выполнены. В `review-status.json` все эти
|
||||
статусы оставлены незавершёнными.
|
||||
|
||||
## Что реализовано
|
||||
|
||||
`app/core/questionnaire.py` содержит детерминированные правила первичного опроса:
|
||||
короткий PHQ-2 из первых двух ответов PHQ-9, фильтр травмы PC-PTSD-5,
|
||||
условное дополнение до полных шкал, RUS-AUDIT-S, структуру C-SSRS Recent,
|
||||
приоритет основного маршрута и параллельные направления. Это новый модуль для
|
||||
интеграции после проверки, а не уже подключённый сценарий бота. Существующие
|
||||
контракты, `config/modules.yaml`, мониторинг и исторические результаты не менялись.
|
||||
|
||||
`config/questionnaire.yaml` фиксирует **кандидатные** пороги из PDF. Политика без
|
||||
записи врача не выдаёт обычный маршрут. Положительный PHQ-9/9, известный высокий
|
||||
сигнал C-SSRS и ручной запрос помощи дают `crisis` независимо от этого ограничения.
|
||||
`clinical_review_required` при других положительных C-SSRS означает остановку
|
||||
обычного потока и необходимость человеческой проверки, а не присвоение высокого
|
||||
риска. Для неполного C-SSRS возвращается нижняя граница риска, итоговый риск пуст.
|
||||
|
||||
Использовать в адаптере `score_alcohol`, а не низкоуровневый `scales.score` для
|
||||
маршрутизации: первый не выдаёт итоговую сумму/зону неполной анкеты. Известный пол
|
||||
нужен только для интерпретации алкогольной шкалы; неизвестный не заменяется мужским
|
||||
или женским. Нет ответа, отказ и технически пропущенный вопрос не равны нулю.
|
||||
|
||||
## RUS-AUDIT-S: исправление спецификации
|
||||
|
||||
В PDF на с.7–9 первые три пункта ошибочно названы RUS-AUDIT-S. Валидированная
|
||||
краткая форма состоит из **пунктов 3, 9, 10** полного RUS-AUDIT, в этом порядке.
|
||||
Пункт 3 имеет значения 0/1/2/3/4, пункты 9 и 10 — только 0/2/4; сумма 0–12.
|
||||
|
||||
| Зона | Женщины | Мужчины |
|
||||
|---|---|---|
|
||||
| I | 0–1 | 0–3 |
|
||||
| II | 2–4 | 4–6 |
|
||||
| III | 5 | 7 |
|
||||
| IV | 6–12 | 8–12 |
|
||||
|
||||
Источник состава: [Neufeld et al., Bulletin of WHO, 2021](https://pmc.ncbi.nlm.nih.gov/articles/PMC8243036/).
|
||||
Зоны и текст для самозаполнения: [Бунова и соавт., 2022, рис.3](https://www.mediasphera.ru/issues/profilakticheskaya-meditsina/2022/8/1230549482022081021),
|
||||
DOI 10.17116/profmed20222508121. Рисунок визуально проверен, включая пояснение
|
||||
слова «травма» во втором вопросе. В интерфейсе это пояснение нельзя опускать.
|
||||
|
||||
При дополнении до полной шкалы остаются пункты 1,2,4,5,6,7,8. Ответы на 3,9,10
|
||||
переиспользуются по исходным ID и не суммируются дважды. Записывать версию и факт
|
||||
получения ответа в краткой форме: её пояснение травмы отличается от полного текста.
|
||||
Правило PDF `п.1 = 0` может вывести нули только для 2/3, **не для 9/10**;
|
||||
выведенные ответы возвращаются отдельно в `derived`, исходный словарь не меняется.
|
||||
|
||||
Полная форма и её зоны взяты из пользовательского PDF с.7–9, транскрипция является
|
||||
материалом для согласования, не независимо подтверждённым русским бланком.
|
||||
Для пункта 2 адаптеру нужна исходная таблица стандартных порций (с.8), а не
|
||||
произвольное округление смешанных напитков. Применение полной интервью-формы
|
||||
как самоопроса требует отдельного решения врача.
|
||||
|
||||
RUS-AUDIT: © ВОЗ, 2021; [отчёт ВОЗ](https://www.who.int/europe/publications/i/item/9789289055765),
|
||||
CC BY-NC-SA 3.0 IGO. Использование в этом пакете — некоммерческий прототип.
|
||||
Наличие шкалы здесь не означает одобрения продукта ВОЗ или авторами.
|
||||
|
||||
## C-SSRS: источник и незавершённая часть
|
||||
|
||||
Официальная [страница переводов Columbia](https://cssrs.columbia.edu/the-columbia-scale-c-ssrs/translations/)
|
||||
ссылается на [Dropbox Screeners](https://www.dropbox.com/scl/fo/pkg1gwxxn1266rke8oite/AC2UFfOKCtefU-o9EEXP-yk?dl=0&rlkey=4grouuqbchfa8obxlcb3msnpz).
|
||||
Ожидаемый файл: `C-SSRS Screener - Russian.pdf`. **Файл не получен, официальный
|
||||
русский текст не добавлен**: проверка административной политики браузера не
|
||||
доступна; обход блокировки не выполнялся.
|
||||
|
||||
`config/scales/cssrs_screen.yaml` остаётся историческим демо-переводом. Его q6
|
||||
спрашивает только о последних трёх месяцах; автоматически конвертировать такой
|
||||
ответ в пожизненный нельзя. Не выдавать этот файл за официальный перевод.
|
||||
|
||||
Новая структура данных использует q1…q5, q6_lifetime и q6_recent. Проверена по
|
||||
[официальному Recent Screener для первичной помощи](https://cssrs.columbia.edu/wp-content/uploads/C-SSRS-Screener-with-Triage-Points-for-Primary-Care-2026.pdf)
|
||||
и [описанию триажа Columbia](https://cssrs.columbia.edu/the-columbia-scale-c-ssrs/risk-identification/):
|
||||
q1/q2 всем; при q2=0 перейти к q6; при q2=1 спросить q3–q5;
|
||||
q6 за всю жизнь всем; при положительном q6 уточнить последние три месяца.
|
||||
Поведение ранее трёх месяцев учитывается отдельно и не становится «риска нет».
|
||||
|
||||
Для завершения: получить русский PDF из официальной папки, сохранить хеш/дату/
|
||||
версию, посимвольно сверить вопросы, пояснения, периоды и варианты, проверить
|
||||
переходы на отрисованном бланке, затем добавить отдельную версию русской шкалы.
|
||||
Версию «с последнего контакта» нельзя получить простой заменой заголовка Recent.
|
||||
Статус лицензии и применимость к коммерческому продукту подтверждаются отдельно.
|
||||
|
||||
## Независимый обратный перевод
|
||||
|
||||
Передать переводчику **только** `backtranslation-blind.tsv` и следующие указания:
|
||||
|
||||
1. Нужен независимый переводчик со свободным английским, не автор исходного
|
||||
русского текста. Перевести каждую из 38 единиц буквально по смыслу, включая
|
||||
инструкции, фильтр, вопросы и варианты ответа. Не искать и не подглядывать
|
||||
в английский оригинал. Сохранить ID и порядок строк.
|
||||
2. Заполнить `english_backtranslation`, сомнения в `translator_comment`, имя и
|
||||
дату. Не «улучшать» русские формулировки. Неясный смысл отмечать явно.
|
||||
3. Вернуть файл координатору. Если оригинал уже знаком переводчику, это указать:
|
||||
такую работу нельзя считать слепой независимой проверкой.
|
||||
|
||||
Координатор и врач используют `translation-reconciliation.tsv` после получения
|
||||
обратного перевода. Сопоставить смысл, отрицания, интенсивность, временной период,
|
||||
привязку к событию и примеры с [PC-PTSD-5 VA](https://www.ptsd.va.gov/professional/assessment/screens/pc-ptsd.asp)
|
||||
и [PCL-5 VA](https://www.ptsd.va.gov/professional/assessment/adult-sr/ptsd-checklist.asp).
|
||||
По каждой строке записать расхождение, тяжесть, согласованный русский текст,
|
||||
врача и дату решения. Не заполнять английские поля машинным переводом под видом
|
||||
независимой работы. Одна обратная проверка не доказывает психометрическую валидацию.
|
||||
|
||||
Транскрипция взята из приложенного `questionnaires-mvp-source.pdf`, с.3–7;
|
||||
нормализованы только переносы и межсловные пробелы. SHA-256 оригинала записан в
|
||||
`review-status.json`. В репозитории текущие PC-PTSD-5/PCL-5 отличаются от PDF;
|
||||
после согласования переносить именно утверждённую версию и зафиксировать diff.
|
||||
Английские оригиналы не включены в слепой файл.
|
||||
|
||||
## Решения врача — поля намеренно не заполнены
|
||||
|
||||
| ID | Решение, которое нужно зафиксировать | Статус |
|
||||
|---|---|---|
|
||||
| C01 | Любой «Да» останавливает обычный опрос или разрешено продолжение после низкого риска? Различить обычный опрос, уточнение риска и кризисную помощь. PDF с.1 против с.11, скриншот поддерживает остановку. | pending |
|
||||
| C02 | С какой зоны RUS-AUDIT-S дополнять полную форму? Не переносить порог AUDIT-C ≥3/≥4. | pending |
|
||||
| C03 | Самозаполнение полного RUS-AUDIT, таблица стандартных порций, порядок дополнения и повторные замеры. | pending |
|
||||
| C04 | PC-PTSD-5 ≥3 и PCL-5 ≥31 для этой популяции; в текущем репозитории PCL-5 ≥33. | pending |
|
||||
| C05 | Привязка PHQ-9/PCL-5 к специалистам, сроки срочной помощи, параллельные маршруты и состав флагов. | pending |
|
||||
| C06 | Официальный русский C-SSRS: версия, возраст/популяция, применение Recent и Since Last Contact. | pending |
|
||||
| C07 | Как отвечает живой дежурный, что делать при недоступности, когда подтверждать уведомление врачу. | pending |
|
||||
| C08 | Повторы, ухудшение, разные периоды оценки и выход из кризисного режима. | pending |
|
||||
|
||||
Форма решения: ID; выбранный вариант; обоснование; ФИО/роль врача; дата с часовым
|
||||
поясом; версия политики; ссылка на подписанный протокол; проверенные сценарии.
|
||||
После решений C01/C02 и утверждения остальных применяемых порогов заполнить
|
||||
`approval` в конфиге и изменить версию. Это запись о реальном согласовании, а не
|
||||
переключатель для снятия блокировки. Синтетические записи в тестах не являются
|
||||
подписью врача.
|
||||
|
||||
## Подключение к диалогу
|
||||
|
||||
Адаптер вызывает `evaluate_intake` после каждого ответа и на ручной кнопке помощи.
|
||||
`crisis` открывает фиксированную кризисную ветку до LLM; `clinical_review_required`
|
||||
не разрешает автоматическое продолжение; `incomplete` запрашивает обязательные
|
||||
пропуски; `ready` содержит основной маршрут и отдельные параллельные направления.
|
||||
Кнопка помощи доступна на каждом экране. Не утверждать, что врач уведомлён,
|
||||
пока интеграция не подтвердила доставку. Обычный опрос после кризиса сам не возобновляется.
|
||||
|
||||
Хранить ответы, версию шкалы/политики, период, время из `app.core.clock`, исходные
|
||||
и выведенные значения раздельно, флаги и состояние полноты. Новые ключи C-SSRS
|
||||
не подменяют старый cssrs_6. Нельзя сравнивать динамику разных версий и периодов
|
||||
как одну и ту же шкалу. Клинические данные не отправляются переводчикам.
|
||||
|
||||
## Проверка
|
||||
|
||||
`make lint && make test`. Новые тесты проверяют все 45 допустимых наборов
|
||||
RUS-AUDIT-S для каждого пола, границы полной формы, отрицательную и положительную
|
||||
ветви C-SSRS, давнее поведение, пропуски/противоречия, кризис на неполном опросе,
|
||||
конфликт PHQ-9/9 и C-SSRS, пороги маршрутов, независимые направления и отсутствие
|
||||
разрешения на автоматический переход без реального решения врача.
|
||||
Reference in New Issue
Block a user