Files
Pavel Eliseev 0bd07045cd
CI / ruff · pytest (pull_request) Successful in 56s
docs(clinical): attach visual PR implementation report
Refs #52
2026-10-03 18:33:57 +03:00

204 lines
20 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Опросник: пакет проверки от 3 октября 2026
Статус: **подготовлено для проверки, не утверждено для пациентов**. Задача #52;
клиническое согласование остаётся в #8. Независимая проверка обратного перевода, согласование
врачом и проверка линий звонками не выполнены. В `review-status.json` все эти
статусы оставлены незавершёнными.
## Визуальный отчёт по PR #53
[Скачать PDF: проделанная работа и архитектура](PR53-implementation-report.pdf).
Восемь страниц: состав изменений, архитектура, опросы, расписания, хранение данных,
проверки и открытые вопросы. Срез коммита `c42ef62`; в отчёте отдельно отмечено
расхождение расписания для маршрута «психолог» (14/30 вместо 28/28 дней).
## Обновление: PDF на 19 страницах
Получена дополненная версия от 3 октября. [Разбор изменений](revision-2026-10-03-v2/REVIEW.md)
и [рабочий обратный перевод](revision-2026-10-03-v2/backtranslation-draft.md) сохранены
отдельно. TSQ заменил симптомные вопросы PC-PTSD-5; добавлены дневник и расписания.
**Новая спецификация подключена к диалогу за закрытым переключателем.**
[Состав реализации, ограничения и порядок проверки](IMPLEMENTATION.md).
Текст TSQ получен отдельно из приложения Г1 клинических рекомендаций 2023 года;
актуальность этой редакции ещё нужно подтвердить.
Независимая проверка перевода остаётся pending.
Описания реализованных правил и ссылки на страницы ниже относятся к исходному
14-страничному PDF, если явно не указана новая версия.
## Что реализовано
`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: русский бланк Recent
Официальная [страница переводов 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).
3 октября пользователь предоставил локальный `C-SSRS Screener - Russian.pdf`.
Неизменённая копия — `cssrs-screener-russian.pdf`, одна страница, заголовок
**Screen Version - Recent**. Вопросы, пояснения, периоды, варианты и цветовые
категории сверены с отрисованной страницей. Хеши оригинала и извлечённого текста
сохранены в `review-status.json`. Файл получен от пользователя после блокировки
загрузки; совпадение байтов с удалённой копией Dropbox независимо не проверено.
`config/instruments/cssrs_recent_ru.yaml` содержит отдельную транскрипцию,
`app/core/cssrs_content.py` — типизированный загрузчик `load_cssrs_russian`.
Версия `source-2026-10-03` — локальная версия содержания, **не номер редакции
Columbia**. Даты в метаданных PDF не используются как дата клинической редакции.
Сохранены все формулировки и опечатки, включая «Последние 1 месяца»,
«ЕСЛИ ДА 2», «пытался повеситься» и повтор «запаслись таблетками».
Нормализованы только межсловные пробелы и переносы. Пояснения интервьюеру
хранятся отдельно от вопросов. Любое редактирование требует отдельного решения.
Переходы по бланку: q1/q2 всем; при q2=0 перейти к q6; при q2=1 спросить q3–q5;
q6 за всю жизнь всем; при положительном q6 уточнить последние три месяца.
Для q1–q5 период — последний месяц. Ответы «Да»/«Нет» кодируются 1/0;
это коды ответов, **не суммируемые баллы**.
| Положительный ответ | Цвет бланка | Категория |
|---|---|---|
| q1, q2 | жёлтый | low |
| q3, q6_lifetime | оранжевый | moderate |
| q4, q5, q6_recent | красный | high |
При нескольких положительных ответах используется максимальная категория.
Поведение ранее трёх месяцев не превращается в «риска нет».
Правила совпадают с [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/).
Неполные или противоречивые данные не получают итоговую категорию;
известный сигнал сохраняется как нижняя граница риска.
`config/scales/cssrs_screen.yaml` остаётся историческим демо-переводом. Его q6
спрашивает только о последних трёх месяцах; автоматически конвертировать такой
ответ в пожизненный нельзя. Новый бланк расположен вне `config/scales`, поскольку
действующий последовательный диалог не поддерживает его условные переходы.
Он ещё не включён в пациентский сценарий. Загрузчик текста сам по себе не
разрешает продолжение опроса: адаптер должен учитывать `evaluate_intake`,
а порядок обязательных вопросов получать из `score_cssrs_recent`.
Бланк не разрешает противоречие об остановке при любом «Да»: C01 остаётся
решением врача. Также нужны C06 (возраст/популяция, формат применения, обучение
и повторные замеры) и согласование пациентского сценария. Версию «с последнего
контакта» нельзя получить простой заменой заголовка Recent. Статус лицензии и
применимость к коммерческому продукту подтверждаются отдельно.
## Обратный перевод и независимая проверка
Для новой версии подготовлено 32 единицы: 28 PCL-5 и 4 из сохранённого блока
травмы. Русский текст сверён с PDF с.3 и 5–7. Перевод подготовлен как рабочий
вариант и требует независимой проверки. Результат и последующая сверка
с оригиналом разделены в `revision-2026-10-03-v2/`.
Независимому человеку передать **только**
`revision-2026-10-03-v2/backtranslation-blind.tsv`:
1. Переводчик со свободным английским не должен быть автором исходного русского
текста. Перевести все 32 единицы, не читая английский оригинал и подготовленный рабочий перевод.
2. Сохранить ID и порядок. Заполнить перевод, сомнения, имя и дату; русский текст
не исправлять. Если оригинал уже знаком, явно указать это ограничение.
3. Координатор и врач затем заполняют согласованный русский текст, решение,
подпись и дату в `revision-2026-10-03-v2/translation-reconciliation.tsv`.
Предварительные замечания в нём являются предложениями для проверки.
Исходные файлы `backtranslation-blind.tsv` и `translation-reconciliation.tsv`
в этой папке сохраняются как пакет прежней версии на 38 единиц. Пять симптомных
пунктов PC-PTSD-5 и его инструкция больше не входят в актуальный пакет.
Обратный перевод сам по себе не доказывает
психометрическую валидность. Клинические данные переводчикам не передаются.
## Решения врача — поля намеренно не заполнены
| ID | Решение, которое нужно зафиксировать | Статус |
|---|---|---|
| C01 | Любой «Да» останавливает обычный опрос или разрешено продолжение после низкого риска? Различить обычный опрос, уточнение риска и кризисную помощь. Новый PDF с.1 против с.12; в старом с.1 против с.11. Скриншот поддерживает остановку. | pending |
| C02 | Использовать сумму ≥1 или согласованную границу зоны для расширения RUS-AUDIT-S? Не переносить порог AUDIT-C ≥3/≥4. | pending |
| C03 | Самозаполнение полного RUS-AUDIT, таблица стандартных порций, порядок дополнения и повторные замеры. | pending |
| C04 | Новая спецификация: TSQ ≥6 вместо PC-PTSD-5 ≥3; получить приложение Г1, согласовать применение и PCL-5 ≥31 для популяции. TSQ из приложения Г1 редакции 2023 года уже добавлен; актуальность редакции и применение требуют подтверждения. | pending |
| C05 | Привязка PHQ-9/PCL-5 к специалистам, сроки срочной помощи, параллельные маршруты и состав флагов. | pending |
| C06 | Официальный русский C-SSRS: версия, возраст/популяция, применение Recent и Since Last Contact. | pending |
| C07 | Как отвечает живой дежурный, что делать при недоступности, когда подтверждать уведомление врачу. | pending |
| C08 | Повторы, ухудшение, разные периоды оценки и выход из кризисного режима; расписание после смены лекарств 7/14/28 дней и далее 4 недели. | pending |
| C09 | Дневник: якоря ответов, направление показателей, пропуски, окно среднего, ночные флаги, приверженность и сроки реакции. См. разбор новой версии. | 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, пороги маршрутов, независимые направления и отсутствие
разрешения на автоматический переход без реального решения врача.
Тесты C-SSRS дополнительно восстанавливают полный текст страницы из структуры,
проверяют хеши и сверяют все комбинации ветвей с цветовыми категориями бланка.