Skip to content

Клиническая суть консоли: врач видит результаты, одно рабочее место пациента, понятные графики, каталог со ступенчатым скринингом, формулировки, демо-отделение - #231

Merged
4booser merged 132 commits into
mainfrom
deep
Oct 28, 2026

Conversation

@4booser

@4booser 4booser commented Oct 28, 2026

Copy link
Copy Markdown
Owner

Проход по клинической сути консоли. Владелец посмотрел прод после 2.2 и написал: «тесты по 1–2 вопроса», «неточные и непонятные формулировки», «в кабинете у врача вообще непонятно ничего про пациента, будто функционал не связан», «графики непонятные». Прошлый проход правил слова и раскладку, этот — что врач видит, как разделы связаны между собой, что говорят графики и что лежит в каталоге методик.

Почему врач «ничего не понимал»

Консоль открыли под врачом на стенде, устроенном как прод: каталог из 64 методик и 120 демо-пациентов. Нашлось семь причин:

  • Врач не видел результатов вообще. Результаты методик каталога были видны только администраторам группы «Каталог методик». Без ручного добавления у всех 120 пациентов стояло «замеров нет», графики и очередь риска были пусты.
  • Две страницы об одном пациенте. «Картка пацієнта» и «Клінічна карта» дублировали друг друга под разными названиями: «Графіки» и «Динаміка», «Події» и «Хронологія», «Нотатки» и «Записи прийому».
  • Обзор пациента открывался восемью одинаковыми строками «Сигнал…» с одной и той же минутой. Клинической картины словами не было.
  • Графики:
    • подписи полос обрезаны («Депрессия умеренной тяжес…»);
    • поверх графика «пределы погрешности от старта: 11 ± 2,8» и «надёжное улучшение: ниже 8,2»;
    • непонятная строка «Сессии ① ②».
  • Каталог. 14 из 64 методик — экспресс-скрининги до пяти пунктов, в общем алфавитном списке наравне с полными. Методик, которыми работает военный психолог, на проде не было.
  • Формулировки. У PHQ-9 «помірної тяжкості» (10–14) и «середньої тяжкості» (15–19) — синонимы. Рабочие переводы пунктов не вычитаны.
  • Демо-данные:
    • три одинаковых «Мельник Марія Степанівна»;
    • открытый случай риска у 84 из 120;
    • ни у кого нет лечащего, записей приёма и заключений;
    • «подразделения» — «Лабораторія» и «Адміністрація».

Что меняется

Доступ: каталог — общая библиотека (миграция 0134)

  • Любой сотрудник находит, читает, назначает и проводит методики каталога без строк group_admins.
  • Результаты врач видит только по людям своей зоны: отделение, свои приёмы, разбитое стекло, собственные группы.
  • Каталог зону не расширяет: прохождение методики каталога никого не делает видимым всем.
  • Править выверенные методики могут суперадмин и явные администраторы каталога, правка остальным отвечает 403.
  • То же правило работает в политиках строк, тесты идут под ролью приложения.

Одно рабочее место пациента

  • /patients/:id с вкладками «Огляд», «Динаміка», «Заміри», «Записи», «Направлення», «Листування», «Хронологія». Старые адреса /case, /summary, ?tab=… ведут туда, где сведения живут теперь.
  • Шапка:
    • случай риска с ответственным и таймером;
    • лечащий фахівець или «Закріпити за собою»;
    • звернення с причиной;
    • ближайший прийом;
    • план безпеки.
  • «Огляд»:
    • клиническая картина по направлениям: балл «з N», полоса словом, значимость сдвига («значуще погіршення · +5 з 13.05» или «у межах похибки»), малый курс; тяжёлое и рисковое первым;
    • риск и безопасность: сигналы сгруппированы по пункту;
    • план: приёмы, назначенное с просрочкой, направления, учёт;
    • последние записи и курс.
  • «Записи» — записи прийому и заключения одной лентой. План безпеки, звернення, направление и запись прийому открываются в ящике.
  • В реестре вместо «Останній замір» — «Клінічний стан»: самая тяжёлая текущая полоса среди ключевых направлений с ходом. «Закріпити за собою» есть в строке и для выбранных.

Графики

  • Шапка: «Депресія · PHQ-9», «19 з 27», полоса и вывод о сдвиге словом. Похибка вимірювання ушла с графика в шапку и подсказку.
  • Полосы: подписи целиком, с границами, без многоточия.
  • Ось: один клинический порог, у оси «менше — краще».
  • Сигналы и события: сигнал риска — кольцо на том замере, который его поднял. Под графиком дорожка приёмов, неявок и заключений с легендой.
  • Сетки: до трёх графиков в ряд, без сирот.
  • «Методики разом» на общей оси «% від максимуму» убраны: WHO-5 и PHQ-9 там шли в противоположные стороны.

Каталог

  • 64 → 73 методики.
  • Шкалы, которые заполняет врач: HAM-D-17, HAM-A, CGI-S, CGI-I, BPRS-18 — общественное достояние по NINDS CDE. Набор «Первинний огляд лікаря-психіатра».
  • Методики учреждения по решению владельца от 28.10: БОО «Адаптивність-200», Міні-мульт, СР-45 и SAD PERSONS. Набор «Поглиблене психологічне обстеження».
    • СР-45, БОО и Міні-мульт выдаются только по назначению.
    • Пациент видит название СР-45 нейтральным: «Опитувальник (СР-45)».
  • Клинический паспорт у каждой из 73 методик:
    • роль: «повна методика», «скринінгова (скорочена) форма» или «оцінка фахівцем»;
    • что измеряет, пункты и минуты, кто заполняет;
    • пороги словами.
  • Список каталога сгруппирован по направлениям. Полные методики идут первыми, короткие формы вложены под свою полную, колонка «Поріг». API: GET /api/surveys?sort=catalog.
  • Ступенчатый скрининг. Установщик один раз заводит 10 правил с источниками порогов: PHQ-2 ≥ 3 → PHQ-9, GAD-2 ≥ 3 → GAD-7, AUDIT-C ≥ 4 → AUDIT, PC-PTSD-5 ≥ 4 → PCL-5, ASQ ≥ 1 → C-SSRS и др.
    • Положительная короткая форма предлагает полную в протоколе, в «Плані» пациента и в ящике назначения. «Призначити PHQ-9» выдаёт её одним нажатием.
    • На «Сьогодні» предложения стоят компактно, под риском и приёмом дня, с основанием баллом («PHQ-2 = 4»).

Формулировки всех методик

  • Одна шкала тяжести: «мінімальна / легка / помірна / помірно тяжка / тяжка».
  • Пороги: «Нижче порога / Вище порога — ймовірний …». Происхождение порога — в описании полосы.
  • Официальные тексты сверены с источниками и не тронуты. Рабочие переводы вычитаны, мужской род о пациенте убран.
  • Подсчёт баллов не менялся.

Демо-отделение (генератор demo-fill, миграция 0135)

  • 120 уникальных людей, военные подразделения без номеров.
  • 14 клинических портретов с подходящими методиками и траекториями.
  • 727 записей прийому, 38 подписанных заключений, планы безопасности, направления.
  • Открытый случай риска у 5–8 % людей, сигналы датированы прохождениями.
  • У каждого лечащий и звернення с причиной.

Мелочи по ходу

  • Быстрый ввод бланка. У шкал, которые считают с нуля (HAM-D, PHQ-9, PCL-5), клавиша — это балл, как на бумаге. Раньше «1» ставило 0 баллов.
  • «Обстеження збережено» говорит врачу о поднятом сигнале риска.
  • Утечки к пациенту: служебный снимок настроек методики с копией «Джерела» больше не уходит обследуемому.
  • Числа: «0,486» с запятой в причинах качества, «2» вместо «2–2» в ключе.
  • Переписка: нестабильная проверка доступности её экрана исправлена.
  • Прокрутка консоли. Скрытые подписи строк каталога растили документ до 3195 px при окне 962: внизу списка уезжала вся консоль вместе с рельсой. Область содержимого и оболочка теперь relative, добавлена сквозная проверка.
  • Строка случая риска называет методику самого сигнала, подпись шкалы больше не повторяется.

При выкатке

  • Миграции 0134 (политики строк библиотеки каталога) и 0135 (уборка демо-записей прийому).
  • Установщик каталога:
    • поставит 9 новых методик и 2 набора;
    • выпустит новую редакцию у методик, чей текст изменился. Ключи, пункты и границы полос прежние, динамика сравнима.
  • Демо-данные на проде нужно пересоздать: после выкатки demo-purge, затем demo-fill 120. Без 0135 уборка падает на подписанных записях.
  • Врачей-администраторов «Каталог методик» на проде стоит снять: им больше не нужно быть администраторами, чтобы видеть результаты, а администратор может править выверенные методики.

Проверки

Всё прогнано на объединённой ветке deep.

Проверка Результат
bun run typecheck, bun run lint чисто
web bun test 2142 прошли
shared bun test 255 прошли
mobile bun test 381 прошли
API bun test --timeout 30000 3591 прошли
API test:app-role 1331 прошли
e2e, все спеки, кроме визуальной 153 прошли, 1 пропущен самим тестом
visual.e2e.ts ответы API записаны заново, эталоны darwin и linux пересняты; повторный прогон на darwin — 28 из 28

Участки сводились по одному. Стыковки, найденные при этом, исправлены отдельными коммитами:

  • сквозной сценарий нового пациента после правила «по назначению»;
  • дробь person-fit в эталоне аналитики;
  • таблица коротких имён под проверкой сырых строк;
  • компоновка предложений правил на «Сьогодні».

Вопросы владельцу

  1. Что открывает случай риска. Сейчас любая «помірна» или более тяжёлая полоса клинической шкалы поднимает сигнал и открывает случай: WHO-5 «знижене благополуччя», PHQ-9 «помірно тяжка», положительный PHQ-2. У депрессивного пациента так красный сигнал стоит почти на каждом замере, и очередь риска засоряется. Предлагаю: случай открывают критические пункты (суицид, самоповреждение) и только «тяжкі» полосы, а положительный скрининг ведёт к предложению полной методики. Это клиническая политика, без вашего решения не менял.
  2. Тяжесть шкал врача. Полосы HAM-D, HAM-A и CGI стоят «лёгкими», чтобы собственная оценка врача не открывала случай риска у каждого стационарного пациента. Поэтому «Тяжка депресія» по HAM-D окрашена мягко. Правильнее отдельный признак полосы «открывает случай», но это изменение схемы.
  3. МЛО. В системе «Адаптивність-200» (200 пунктов) по пособию учреждения. Ключи ВПН/ДАП и стены ОАП нужно сверить с печатным пособием.
  4. Права методик учреждения в паспорте — «не з'ясовано». Отметить их суперадмином после письменного подтверждения учреждения?
  5. PHQ-9. Подписи полос теперь однозначные, по оригиналу. Подписи наказа МОЗ №1003 остались в «Джерелі». Старые результаты хранят прежние подписи; переподписывать ли их миграцией?
  6. Отнесение к направлениям: PHQ-15 — дистрес, FAS — сон, CGI/BPRS — «Загальний стан». Нужно подтверждение клинического психолога.
  7. Сомнительные места рабочих переводов для носителя-клинициста перечислены в отчётах участков D и H.
  8. MADRS, YMRS, полная C-SSRS — только с разрешения правообладателей: RCPsych, Columbia.
  9. Пороги скрининга. AUDIT-C ≥ 4 стоит для всех, хотя для женщин источники дают ≥ 3. ASQ ≥ 1 ведёт к C-SSRS, а в оригинале — к краткой оценке безопасности NIMH (BSSA), которой в каталоге нет.
  10. Администраторы «Каталог методик» на проде. Врачей, добавленных туда раньше, стоит снять: результаты им теперь видны и так, а администратор может править выверенные методики.

…ни одной лестницы тяжести, инструкции — шапка бланка

У PHQ-9 и PHQ-8 полосы 10–14 и 15–19 звались «Помірної тяжкості» и
«Середньої тяжкості» (ru «умеренной» и «средней тяжести») — синонимы,
специалист не мог сказать, какая тяжелее. Подписи теперь по оригиналу
(Kroenke, Spitzer, 2002; Table 4 руководства: none-minimal / mild /
moderate / moderately severe / severe) словами общей лестницы каталога;
подписи МОЗ (наказ №1003) — в примечании для персонала, границы не менялись.

Полосы, было → стало (uk / ru):
- PHQ-9, PHQ-8 0–4: «Депресія відсутня» → «Депресія відсутня або мінімальна»
  / «Депрессия отсутствует» → «Депрессия отсутствует или минимальна»
- 5–9: «Легка («субклінічна») депресія» → «Легка депресія» / «Лёгкая депрессия»
- 10–14: «Помірної тяжкості депресія» → «Помірна депресія»
  / «Депрессия умеренной тяжести» → «Умеренная депрессия»
- 15–19: «Середньої тяжкості депресія» → «Помірно тяжка депресія»
  / «Депрессия средней тяжести» → «Умеренно тяжёлая депрессия»
- GAD-7 15–21: «Виражена тривога» → «Тяжка тривога» / «Выраженная тревога» →
  «Тяжёлая тревога» (Severe anxiety)
- PHQ-4 9–12: «Виражений дистрес» → «Тяжкий дистрес» / «Тяжёлый дистресс»
- PHQ-2 3–6: «Скринінг позитивний» → «Вище порога — ймовірна депресія»
  («If the score is 3 or greater, major depressive disorder is likely»)
- GAD-2 и подшкалы PHQ-4: «Нижче порога скринінгу» / «Скринінг позитивний» →
  «Нижче порога» / «Вище порога» — результат видит сам человек, название
  расстройства на его экране читалось бы как диагноз; что делать, говорит
  рекомендация, у подшкал PHQ-4 она теперь своя (GAD-7 / PHQ-9) вместо общей
  «GAD-7 або PHQ-9».

Инструкции PHQ-8, PHQ-4, PHQ-2, GAD-7, GAD-2 — только шапка официального
бланка: сняты свои добавки «Запитань лише два — відповідайте про те, як було
насправді», «Відповідайте, не роздумуючи довго…». У PHQ-9 своя фраза о
девятом пункте переписана без кальки: «саме за ним фахівець зв’яжеться з
Вами першим» → «якщо такі думки були, фахівець зв’яжеться з Вами в першу
чергу».

Пункты и варианты ответа не менялись и сверены с источниками:
додаток 1 наказу МОЗ №1003 (dec.gov.ua), PHQ9_Russian for Ukraine,
GAD7_Ukrainian for Ukraine, GAD7_Russian for Ukraine (phqscreeners.com) —
расхождений нет. В журнале установки GAD-2 стояло «переклад робочий» — с
рецензии 2.1 там официальные переводы правообладателя, исправлено.
…ал, открытое обращение, ближайшие приёмы (без чтения карточки приёма и ложного clinic.visit_open), учёт и незакрытые направления; строка реестра — самая тяжёлая полоса ключевых доменов со ступенью от прошлого замера; направления одного человека — GET /api/referrals?patient=
…сы на общей лестнице тяжести, рабочие переводы без калек

Полосы, было → стало (uk / ru):
- CORE-10: «Легкий / Помірний / Помірно-тяжкий / Тяжкий рівень дистресу» →
  «Легкий / Помірний / Помірно тяжкий / Тяжкий дистрес» (ru «Лёгкий / Умеренный /
  Умеренно тяжёлый / Тяжёлый дистресс»); «Неклінічний діапазон» — как было.
- PHQ-15: «Мінімальна / Низька / Середня / Висока вираженість соматичних
  симптомів» → «Мінімальні / Легкі / Помірні / Тяжкі соматичні симптоми»
  (ru «Минимальные / Лёгкие / Умеренные / Тяжёлые соматические симптомы»):
  руководство издателя на с. 2 называет те же границы 5/10/15 «mild,
  moderate, and severe levels of … somatic symptoms», как у PHQ-9 и GAD-7;
  «середня» рядом с «помірною» PHQ-9 была той же ступенью другим словом.
- K6: «Нижче порога K6» / «Поріг K6 досягнуто: ймовірний серйозний психічний
  розлад» → «Нижче порога» / «Вище порога — ймовірний серйозний психічний
  розлад» («серйозний», не «тяжкий»: «тяжкий психічний розлад» — термин
  закона о психиатрической помощи, а SMI Кесслера шире).
- SRQ-20: «Нижче відсічного балу» / «Вище відсічного балу (ймовірний випадок)»
  → «Нижче порога» / «Вище порога — ймовірний психічний розлад».

Пункты рабочих переводов, смысл которых уточнён:
- K10 п. 9 (и K6 п. 5) «that everything was an effort»: «відчували, що все
  вимагає зусиль» → «…що все дається Вам через силу» (ru «…всё даётся Вам
  через силу»).
- SRQ-20 п. 13 «Is your daily work suffering?»: «Чи страждає ваша щоденна
  робота?» (калька) → «Чи стало вам важче впоруватися з щоденною роботою?»;
  п. 6, 9, 18 — без мужского рода там, где оригинал безродовой
  («знервованим, напруженим або стривоженим» → «знервованість, напруження або
  тривогу», «втомленим увесь час» → «постійну втому», «нещасним» →
  «нещасливим (нещасливою)»); п. 19 «Чи маєте ви…» → «Чи бувають у вас…»;
  «покінчити із життям» → «з життям».
- DASS-42 п. 3: «відчути жодного позитивного почуття» → «…жодної позитивної
  емоції»; п. 22 «wind down»: «вгамуватися й збавити оберти» → «зняти
  напругу» — как тот же пункт в переводе DASS-21 Галецкой и соавт.

Инструкция SRQ-20: «саме за ним фахівець зв’яжеться з вами першим» → «якщо
такі думки були, фахівець зв’яжеться з вами в першу чергу». Тексты тревог
DASS-21/DASS-42 короче: «— непряма ознака, суїцидальний ризик оцінити
окремо»; чьё это правило (отделения, не разработчиков) — в примечании для
персонала. Описания K10, K6, CORE-10 — без «ваше/вы».

Официальные тексты не тронуты и сверены с источниками: CORE-10 — бланки CST
CORE-10_Ukrainian_FM.pdf и CORE-10_Russian_FM.pdf (опечатки русского бланка
«чувстовал(а)», «Иногда редко», «10 утверждения», «выберете» там есть, лицензия
CC BY-NC-ND править их не даёт); DASS-21 — DASS-21_ua.pdf и
Fattakhov_DASS-21_rus.pdf; PHQ-15 ru — PHQ15_Russian for Russia.pdf.
… / вище порога»

CESD-R (рабочий перевод на оба языка). Пункты бланка — от первого лица в
прошедшем времени, и прежний перевод держал их в мужском роде: женщина
читала о себе «Я не міг», «Я почувався пригніченим» двенадцать раз. Английский
текст рода не имеет; пункты переведены безлично или через «мені», где нельзя
без сдвига смысла — с обеими формами, как в утверждённых бланках CORE-10:
- 2 «I could not shake off the blues»: «Я не міг позбутися смутку» → «Мені не
  вдавалося позбутися смутку»
- 4 «I felt depressed»: «Я почувався пригніченим» → «У мене був пригнічений
  настрій»
- 7 «I could not get going»: «Я ніяк не міг узятися до справи» → «Мені ніяк не
  вдавалося взятися до справ»
- 9 «I felt like a bad person»: → «Мені здавалося, що я погана людина»
- 10 «I lost interest in my usual activities»: → «Звичні заняття перестали
  мене цікавити»
- 11 → «Я спав(-ла) значно більше, ніж зазвичай»
- 13 «I felt fidgety»: «Я не міг усидіти на місці» → «Мені не сиділося на місці»
- 14 «I wished I were dead»: «Мені хотілося бути мертвим» → «Мені хотілося
  померти» (ru «Мне хотелось умереть»); тревога по пункту — как была
- 16 «I was tired all the time»: «Я весь час був втомлений» → «Мене не
  полишала втома»
- 17 → «Я не подобався(-лася) собі»
- 18 «I lost a lot of weight without trying to»: «Я сильно схуд, хоча не
  намагався» → «Вага сильно знизилася без навмисного схуднення»
- 20 «I could not focus on the important things»: → «Мені не вдавалося
  зосередитися на важливому»
Русский — так же. Инструкция: «Два запитання стосуються думок про смерть…
саме за ними фахівець зв’яжеться з вами першим» → «Два твердження — про
бажання померти або заподіяти собі шкоду. Відповідайте на них чесно: якщо
таке було, фахівець зв’яжеться з вами в першу чергу». Описание шкалы — без
«CESD style score». Полосы: «Без клінічної значущості» / «Депресивна
симптоматика вище межі» → «Нижче порога» / «Вище порога — клінічно значущі
симптоми депресії» (ru «Ниже порога» / «Выше порога — клинически значимые
симптомы депрессии»): дополнение подписи авторов «No clinical significance»,
категорию эпизода по сумме не установить.

GDS-15 (рабочий перевод). П. 5 «Are you in good spirits most of the time?»:
«Чи більшу частину часу ви у доброму гуморі?» → «Чи у вас більшу частину часу
добрий настрій?»; п. 7, 8, 12 без мужского рода: «Чи почуваєтеся ви щасливим…»
→ «Чи щасливі ви більшу частину часу?», «…безпорадним?» → «…відчуваєте
безпорадність?», «…доволі нікчемним?» → «Чи здається вам, що зараз ви доволі
нікчемна людина?». Полосы: «Ознак депресії не виявлено» / «Ознаки депресії»
/ «Майже напевно депресія» → «Нижче порога» / «Вище порога — ймовірна
депресія» («> 5 points is suggestive of depression») / «Майже напевно
депресія».
… оцінка фахівцем), время, что измеряет для специалиста, пороги границами полос, короткие формы под полной и шаг скрининга с источником; порядок ?sort=catalog — направление, полные первыми, короткие под своей; паспорт в строке списка и на странице методики только сотруднику
…ика, пункты без мужского рода

PSS-10 (и PSS-4, который берёт его пункты и инструкцию), рабочий перевод:
- инструкция: «Тут немає правильних відповідей: важливо не те, скільки
  насправді було подій, а те, якими вони вам здавалися» — неверный пересказ
  совета бланка Cohen («don't try to count up the number of times you felt a
  particular way, but rather indicate the alternative that seems like a
  reasonable estimate») → «Не намагайтеся точно порахувати, скільки разів так
  було, — оберіть варіант, який здається найближчим» (ru так же);
- п. 3 «felt nervous and "stressed"»: «почувалися знервованим і напруженим» →
  «нервували й відчували стрес» (ru «нервничали и испытывали стресс»);
- п. 7 «been able to control irritations in your life»: «вдавалося опанувати
  роздратування» (о сдержанности) → «вдавалося впоратися з тим, що дратувало
  вас у житті»;
- п. 9 «been angered»: «гнівалися» → «сердилися» (ru «гневались» → «злились»).

WHO-5, украинский — рабочий перевод (русский — бланк правообладателя 1999 г.,
не тронут): пункты были в мужском роде; п. 1 «I have felt cheerful and in good
spirits» → «У мене був гарний і піднесений настрій», пп. 2–4 — с обеими
формами, как на русском бланке («Я почувався(-лася) спокійно й розслаблено»,
«…бадьоро й енергійно», «Я прокидався(-лася) свіжим(-ою) й відпочилим(-ою)»);
п. 5 «My daily life has been filled…»: «Мій день був наповнений…» → «Моє
повсякденне життя було наповнене тим, що мене цікавить». Оговорка ВОЗ к
переводу — все три фразы лицензии CC BY-NC-SA 3.0 IGO вместо пересказа
«Переклад створений не ВООЗ…»: «Цей переклад створено не Всесвітньою
організацією охорони здоров’я (ВООЗ). ВООЗ не відповідає за зміст і точність
цього перекладу. Обов’язковим і автентичним є оригінальне видання англійською
мовою». Полосы WHO-5 не менялись.
… каждый шаг короткой формы (PHQ-2, GAD-2, PHQ-4 — два, AUDIT-C, PC-PTSD-5, K6, SCI-02, BAT-12, ASQ) — предложить полную методику; дальше порог и включение — решение отделения, удалённое не возвращается; срабатывание отдаёт методику названием, балл шкалы и предложенное с тем, назначено ли и пройдено ли; ?userId= у предложений
… TGI-SR+, CTSR — короткие подписи полос, пояснения отдельно

Общий помощник bands() (common.ts) принимает необязательное описание
полосы: короткая подпись идёт в карточку, график и очередь, а какой порог и
чей — в «Значення» результата. Остальные методики каталога не затронуты.

Полосы, было → стало (uk; ru так же):
- PCL-5: «Поріг ймовірного ПТСР не досягнуто / досягнуто» → «Нижче порога» /
  «Вище порога — ймовірний ПТСР»; PC-PTSD-5: «Поріг не досягнуто» / «Поріг
  ймовірного ПТСР досягнуто (4 і більше)» → то же.
- TGI-SR+: «Нижче опублікованих порогів» / «Поріг DSM-5-TR за голландськими
  вибірками (71) досягнуто; поріг МКХ-11 і український (75) — ні» / «Поріг
  ймовірного пролонгованого розладу горя досягнуто (75 і більше)» → «Нижче
  порогів» / «Між порогами — можливий розлад горя» / «Вище порога — ймовірний
  розлад горя»; чей порог — в описании полосы.
- CTSR (сумма и три подшкалы): «Нижче попереднього орієнтира авторів» /
  «Верхні 25 % вибірки валідації (від 10) — попередній орієнтир авторів, не
  клінічний поріг» → «Нижче орієнтира» / «Вище орієнтира — верхня чверть
  вибірки»; что это распределительная граница — в описании полосы.
- CES: шкала «Ступінь бойової експозиції» → «Інтенсивність бойового досвіду»
  (ru «Интенсивность боевого опыта», как в русскоязычной традиции «шкала
  оценки интенсивности боевого опыта»); полосы «Легка / Легка або помірна /
  Помірна / Помірна або важка / Важка бойова експозиція» → «Низька
  інтенсивність / Від низької до помірної / Помірна інтенсивність / Від
  помірної до високої / Висока інтенсивність»: «важка експозиція» рядом с
  «тяжкою депресією» читалась бы как тяжесть болезни.
- ITQ: названия шкал без латинских кодов ITC («ПТСР: загальний бал (Re + Av +
  Th)» → «ПТСР: загальний бал», «Уникання (Av)» → «Уникання» и т. д.); в
  описании шкал рядом с P1–P9 / C1–C9 бланка — номера пунктов в системе;
  «DSO» в тексте → «порушення самоорганізації».

Пункты рабочих переводов:
- PCL-5 п. 20 «Trouble falling or staying asleep»: «…або з тим, щоб не
  прокидатися» (читалось как «не прокинутися») → «…або часті пробудження
  вночі»; исключение сторожа суицидальных слов для него больше не нужно.
- CES п. 2 «Were you ever under enemy fire?» с вариантами длительности →
  «Чи бували ви під вогнем противника — і скільки часу загалом?»; п. 7 без
  мужского рода: «Як часто ви були в небезпеці бути пораненим або вбитим —
  притиснуті вогнем…» → «Як часто вам загрожувало поранення чи загибель —
  коли вас притискали вогнем…».
- MIOS: варианты «Цілком не погоджуюсь … Цілком погоджуюсь» → «Зовсім не
  погоджуюся … Цілком погоджуюся»; русские были в мужском роде («Не
  согласен») вопреки правилу файла — теперь глаголом («Не соглашаюсь»),
  середина «Ни да, ни нет»; п. 4 «бачити добре в інших» → «бачити добро».
- CTSR, русский рабочий перевод с украинского: «немотивированным» (по-русски
  «беспричинный») → «Мне не хватает мотивации»; «умственно истощённым» →
  «морально истощённым»; «чувствую себя преданным» (двусмысленно: и «верным»)
  → «У меня такое чувство, что меня предали».
- LEC-5 п. 5 «Exposure to toxic substance»: «Дія…» → «Вплив токсичної
  речовини».

Тексты тревог DASS-подобных пунктов (CTSR п. 7, TGI-SR+ п. 17) — без «правило
відділення, а не розробника»: это сказано в примечании для персонала.
Описания PC-PTSD-5, MIOS, TGI-SR+, CTSR — без хвоста «— за останній місяць».

Официальные тексты не тронуты и сверены: ITQ — ITQ_CPTSD_Ukrainian.docx и
ITQ_plus Scoring Instructions_Rus.docx с сайта ITC (расхождений нет, кроме
описанной экранной замены «обведіть одне з чисел»); TGI-SR+ и украинский CTSR
— как были.
…ревог без рода

Полосы, было → стало (uk; ru так же):
- SBQ-R: «Нижче обох порогів скринінгу» / «Поріг загальної популяції
  досягнуто (7); для психіатричного стаціонару поріг 8 не досягнуто» /
  «Поріг досягнуто для обох контингентів (8 і більше)» → «Нижче порогів» /
  «Між порогами — можливий суїцидальний ризик» / «Вище порогів — суїцидальний
  ризик»; какой порог для какого контингента — в описании полосы.
- SIDAS: «Думок про самогубство за останній місяць не зазначено» → «Думок про
  самогубство не зазначено»; «Високий ризик суїцидальної поведінки (21 і
  більше)» → «Високий ризик суїцидальної поведінки» (граница видна в
  диапазоне).
- ASQ: название шкалы «Позитивний скринінг (запитання 1–4)» — один из её
  исходов — → «Скринінг суїцидального ризику (запитання 1–4)»; полосы
  «Негативний / Позитивний скринінг» — термины NIMH, как были.

Тексты тревог — фиксированный текст о человеке, без глаголов в прошедшем
времени с родом: SBQ-R «повідомляв(-ла) комусь про намір самогубства» →
«повідомлення комусь про намір самогубства»; CORE-10 «планував(-ла)
покінчити з життям» → «плани покінчити з життям»; ASQ п. 2 «відчуття, що
йому/їй чи родині було б краще, якби його/її не було в живих» → «„мені чи
родині було б краще, якби мене не було“».

Инструкция SBQ-R: снята присказка «Тут немає правильних відповідей — є тільки
ваші», вместо неё правило бланка «check one only» — «У кожному запитанні
оберіть один варіант»; фраза о безопасности осталась. SIDAS ru: «опасно
оставаться одному» → «в одиночестве», как у SBQ-R.

Официальные тексты C-SSRS (Columbia, uk и ru) и русские пункты ASQ (NIMH) не
тронуты.
Полосы, было → стало (uk; ru так же):
- SCI и SCI-02: «Поріг ймовірного безсоння досягнуто» / «Поріг безсоння не
  досягнуто» → «Поріг досягнуто — ймовірне безсоння» / «Поріг не досягнуто».
  Не «нижче / вище порога», как у остальных фильтров: здесь меньший балл —
  хуже сон, и «вище порога» у здорового сна читалось бы как положительный
  скрининг.
- FAS: «Втоми немає (норма)» → «Втоми немає» («Усталости нет»); «Втома» и
  «Крайня втома» — как были (No fatigue / Fatigue / Extreme fatigue).
- RIS: «У межах норми» / «Ознаки психофізіологічної інсомнії» — как у авторов,
  без изменений.

RIS п. 8 (рабочий перевод с немецкого оригинала «Ich habe Angst ins Bett zu
gehen, da ich befürchte nicht schlafen zu können»): «Я боюся лягати в ліжко,
бо побоююся, що не зможу заснути» → «Я боюся лягати в ліжко: раптом не зможу
заснути» (ru «Я боюсь ложиться в постель: вдруг не смогу заснуть»). Немецкий
и английский текст пунктов сверены по Table 1 статьи (Crönlein et al.,
Health Qual Life Outcomes 2013;11:65, PMC3645970).

Официальные тексты FAS (ild care foundation, uk и ru) не тронуты.
…м бланка; источник инструкции PSS — в досье

ASQ: инструкция, описание шкалы, рекомендация и примечание называли вопрос
остроты «запитання 5» — номером бланка NIMH. В системе пятый пункт — «Коли
була остання спроба?», а вопрос остроты — шестой, и специалист по номеру
смотрел бы не туда. Теперь «запитання гостроти — про думки просто зараз
(п’яте на бланку NIMH, тут шосте)», дальше — «запитання гостроти».

MIOS п. 2 (рабочий перевод): «Якого типу досвід, що найбільше турбує вас
зараз?» — обрубок вопроса → «До якого типу належить досвід, що найбільше
турбує вас зараз?» (ru «К какому типу относится опыт…»).

PSS-10: в досье (mood.json) и в комментарии названо, откуда совет новой
инструкции «не рахувати, скільки разів так було» — инструкция оригинальной
PSS-14 (Cohen, Kamarck, Mermelstein, J Health Soc Behav 1983;24:385–396),
её повторяют бланки PSS-10: «don't try to count up the number of times you
felt a particular way, but rather indicate the alternative that seems like a
reasonable estimate».
… SBQ-R с двумя порогами

Было «Вище порога — ймовірний розлад горя» рядом с «Нижче порогів» и «Між
порогами»: 75 и выше — выше обоих опубликованных порогов (71 и 75), и подпись
говорит о них во множественном числе, как у SBQ-R.
…по NINDS CDE, редакция ECDEU 1976), рабочий перевод якорей 17 пунктов, полосы Zimmerman и соавт. 2013, тревога по пункту 3 (1–2 — умеренная, 3–4 — тяжёлая), полосы случая не открывают; золотой протокол и листы сверки
…NINDS CDE, редакция ECDEU 1976), рабочий перевод 14 групп симптомов, полосы Matza и соавт. 2010; пунктов риска нет, полосы случая не открывают; золотой протокол и листы сверки
…ни-мульта без калек («такий же», «твориться», «розбираюся», «оточуючі», «по службі», «залишитися на службу», «прийняти алкоголю», «менше Вашого», «вони праві»), «ВДВ» пособия 2016 г. — нынешние «десантно-штурмові війська»; русский оригинал не тронут
… «Джерела» для персонала, и пациент получал её в ответе на методику и в списке, хотя само поле уже срезалось
…льт, СР-45 и SAD PERSONS ставит установщик (ключи mlo, minimult, sr45, sad-persons) по решению владельца продукта от 28.10.2026 — в досье (поле decision), «Джереле» и журнале установки без выдуманных лицензий; СР-45 для обследуемого — «Опитувальник (СР-45)», описания — что спрашивают и сколько займёт; у СР и ДАП подписи полос — риск и склонность, а не «високий рівень»; SAD PERSONS заполняет специалист; эскалация через час у СР-45 и SAD PERSONS, план безопасности у БОО; заготовка «Поглиблене психологічне обстеження»; золотые протоколы, листы сверки
…лога, и стенд «посев, потом installCatalog.ts» больше не показывает врачу по две одноимённые методики с разной историей; установщик узнаёт копию посева по ключу и меняет у неё лишь направление и «Джерело»
… общественное достояние по NINDS CDE), рабочий перевод семи ступеней без рода пациента, полоса — каждая ступень; индекс эффективности и «не оценивалось» не заведены; золотой протокол и листы сверки
…45)» в таблице групп пациентов и в мобильном кабинете читается кодом «СР-45», а не названием целиком
…а отсчёта — начало лечения, на первом осмотре не заполняется), рабочий перевод семи ступеней изменения, полоса — каждая ступень; золотой протокол и листы сверки
… WHO-5, CESD-R, CTSR

Проверка на стенде (карточка пациента, «Графіки», 1280, uk и ru): подпись
полосы справа от графика вмещает около 26 знаков, длиннее — с многоточием,
ровно то, на что жаловался заказчик («Депрессия умеренной тяжес…»).

Было → стало (uk / ru):
- PHQ-9, PHQ-8 0–4: «Депресія відсутня або мінімальна» / «Депрессия
  отсутствует или минимальна» → «Мінімальна депресія» / «Минимальная
  депрессия» — первая ступень той же лестницы, что «Мінімальна тривога» GAD-7
  («None-minimal» оригинала и «Депресія відсутня» МОЗ — в примечании).
- WHO-5 13–25: «Без ознак зниженого благополуччя» → «Благополуччя не
  знижене» / «Благополучие не снижено».
- CESD-R 16–60: «…клінічно значущі симптоми депресії» → «Вище порога —
  клінічно значущі симптоми» (о чём шкала — в её названии).
- CTSR (сумма и подшкалы): «Вище орієнтира — верхня чверть вибірки» → «Вище
  орієнтира»; что ориентир — верхний квартиль выборки валидизации, а не
  клинический порог, — в описании полосы.
… полоса, «значуще погіршення: +8 з 13 трав.»), подписи полос целиком переносом, один клинический порог вместо межі похибки, сигнал кольцом на своём замере, дорожка приёмов и заключений без номеров, подсказка с тем, кто заполнял, и переходом к протоколу; сетка графиков без пустых полурядов, малые графики вместо переключателя методик, «Методики разом» убраны; слово сдвига «значуща зміна» — одно на консоль
…о NINDS CDE, редакция ECDEU 1976), рабочий перевод 18 пунктов с указанием, на чём основывать оценку, шкала 1–7; без полос — порогов у шкалы нет, соответствие CGI-S по Leucht и соавт. 2005 ориентиром в описании; золотой протокол и листы сверки
…sychiatrists) и полная C-SSRS (официальные украинский и русский тексты полной версии — только по запросу, свой перевод вопросов недопустим); MADRS перепроверена — вывод прежний; строка clinician.json в сводке досье
… HAM-D-17, HAM-A, CGI-S — все шаги заполняет врач, порядок беседы, суицидальный риск первым (стандарт МОЗ «Суїцидальна поведінка», наказ № 546); CGI-I не входит — на первом осмотре не заполняется
«Останнє запитання — про думки про смерть» → «Останнє запитання стосується
думок про смерть»; ru «Последний вопрос — о мыслях о смерти» → «Последний
вопрос касается мыслей о смерти». Шапка бланка МОЗ и «Russian for Ukraine»
не тронута.
…, почему полосы не открывают случай, что не заведено; полный список наборов-заготовок; в карте направлений — куда отнесены HAM-D, HAM-A, CGI и BPRS
…е «/summary»: направление очереди работы — вкладка «Направлення», заключение хронологии — «Записи» видом «Заключення», назначение и повтор замера — сама страница
После dc7eff0 «нетиповий патерн відповідей (0,42)» печатается с запятой. В эталоне аналитики заменены только 38 строк причин с дробью; остальные числа эталона, снятого с main, не тронуты.
Своя разборка графика («скобка до 16 знаков и прописными») не выделяла код у CIWA-Ar, Brief COPE, ASRS — шапка расходилась с клинической картиной той же карточки. Теперь methodNames берёт instrumentCode и instrumentMeasure из @quizzy/shared.
…есты причин качества с дробью языка читателя; список ролевых тестов — оба набора; рекомендации правил — в ящике назначения рабочего места, как были в карточке
…дразделения и звания, четырнадцать клинических портретов с методиками и траекториями курса, приёмы в слотах лечащих специалистов, записи приёма и заключения, сигналы на время сдачи и разобранные случаи (открыты у 6 %), планы безопасности, направления, учёт; уборка подписанного (миграция 0135)
…омера по состоявшимся приёмам, согласование числа и рода; занятость слотов (drizzle писал «id» без таблицы — слот уходил двоим), рабочий сегодняшний день, фоновые неявки и поздние отмены; кризис без повтора PHQ-9 назавтра, свежий скрининг в очереди риска
…ов, ответы в цели историй, риск 5–8 % с ответственным и исходом, сигналы на время сдачи без дублей, записи к состоявшимся приёмам, слот без двойной записи, повторный прогон без прироста, уборка без хвостов; даты в заключениях — по настоящему замеру; уборка слотов — только тех, на которых стояли вымышленные
…озже CGI-I, BPRS) там, где история уже ведёт к психиатру — депрессия, ПТСР, кризис, отмена алкоголя, психоз; консультацию подписывает вымышленный психиатр отделения без расписания; решение по случаю — после осмотра того же дня
…м в день; план безопасности — только при записанном критическом ответе
…ыты только свежие домашние сдачи — новые направления, ухудшение дома, снова девятый пункт; комментарии кода — по-русски
…ские портреты, записи, заключения, риск 5–8 % (миграция 0135)
…ением проверки сырых строк

Таблица «БОО / МЛО», «Міні-мульт / Мини-мульт» стояла в format.ts, и noRawStrings падал на кириллице. Это имена собственные методик, а не подписи интерфейса: вынесены в instrumentShortNames.ts, исключение — только для него, остальной format.ts под надзором.
… баллом и «Призначити» одним нажатием; рекомендации — и в «Плане» пациента

С десятью шагами скрининга каталога экран «Сьогодні» открывался стеной «Що далі за правилами»: крупные карточки с «версія 1» и основанием условием движка («SCI02: сирий бал 2 <= 2»), а случаи риска уезжали за край. Теперь предложение — строкой: пациент, шаг («SCI-02 ≤ 2 → SCI»), дата, основание баллом методики («SCI-02 = 2»), «Призначити SCI» (выдача и согласие разом) или «Погодитись», «Відхилити»; видно пять, остальные — «Показати всі пропозиції (N)»; блок — под случаями риска и приёмом. На рабочем месте пациента рекомендация стоит строкой «Плану» с основанием и открывает ящик назначения.
…калы не повторяется

В случай человека складываются сигналы разных методик одного приёма, и строка называла методику, открывшую случай: «Посттравматичний стрес (PCL-5) від 28 жовт.: Вираженість депресії — «Вираженість депресії: Помірно тяжка депресія»». Сигнал случая теперь несёт свою методику (surveyTitle), а у сигнала по шкале подпись идёт без повтора названия шкалы.
…тываются от области содержимого

Подписи sr-only у строк каталога абсолютные, а позиционированного предка у них не было: они отсчитывались от окна, и их «место» уходило в прокрутку документа. На каталоге из 73 методик документ вырастал до 3195 px при окне 962, и колесо, дойдя до конца списка, уводило вверх всю консоль вместе с рельсой, открывая под ней пустоту. Область содержимого страницы и оболочка консоли теперь relative. Сквозная проверка кладёт в область высокий блок с такой подписью внизу и требует документ высотой в окно; без правки она падает.
…; код в основании — общим правилом

Краткое «PHQ-2 = 4» вместо фраз движка теперь только там, где правило предлагает методику (шаг скрининга каталога). У прочих правил отделения — их фразы со шкалой и порогом: у многошкальной методики балл без шкалы ничего не объяснял («МЛО «Адаптивность-200» = 0» вместо условия по шкале D, e2e decisions). basisText берёт код через instrumentCode.
Рабочее место пациента, графики, каталог, формулировки методик, предложения правил на «Сьогодні» и демо-оформление поменяли почти все экраны. Ответы API для visual.e2e.ts записаны с нуля, снимки darwin и linux пересняты; повторный прогон darwin — 28 из 28. Помощник растяжения окна под содержимое получил пиксель запаса и допуск в пиксель: дробные высоты округляются у scrollHeight и clientHeight порознь.
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-28T14:43:10.615638Z c33952a PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

for (const d of sorted) {
const got = picked(d.answers.find((a) => a.questionId === q.questionId));

P2 Badge Handle version-local question IDs in item history

When the displayed measurements span survey versions, looking up every answer with the latest question ID loses all answers from older versions: both createVersion and copyVersion in apps/api/src/lib/surveys.ts generate fresh question IDs, even for unchanged questions. Consequently, the new item-history table displays older completed measurements as empty columns and loses their sums and changes. Match questions only through a verified cross-version correspondence, or explicitly separate incompatible versions rather than presenting recorded answers as missing.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +435 to +436
const cell = (r: ItemRowT | null, j: number, val: number | null) => {
const flagged = r ? (cat ? !!r.flags[j] : r.critical && val !== null && val > 0) : false;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Honor the selected option's risk flag in numeric item cells

For numeric items, this treats every positive score on a question with any critical option as a risk signal, instead of using the selected option's flag already available in r.flags[j]. SIDAS item 2 demonstrates the inversion: sidasItem marks 0 (no control over suicidal thoughts) as risky and leaves 10 (full control) unflagged, but this table renders 10 red and does not highlight 0 as risky. Use the selected-option flags for numeric cells and the corresponding hot predicate too, so the item table agrees with the actual alerts.

Useful? React with 👍 / 👎.

Comment on lines +102 to +104
const incomparable = scale.incomparable ?? null;
const rc = reliableThreshold(scale);
const raw = last.rawScore - first.rawScore;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Use the equated change when summarizing different versions

When the first and last measurements use different versions with available equating coefficients, changeOverSeries deliberately returns incomparable: null and computes scale.delta after converting the baseline. This subtraction ignores that conversion, so clinicalPicture can announce significant deterioration caused solely by a version change. For example, baseline 10 converted by slope 1/intercept 10 and latest 20 have a server delta of 0, but this produces +10 and can label it significant worsening. Use the server's comparable delta or apply the same conversion before computing the verdict.

Useful? React with 👍 / 👎.

…нту, сдвиг с приведением версий, пункты разных версий

Таблица пунктов: балльный пункт с критическим вариантом краснел на любом балле выше нуля — у SIDAS п. 2 рискован 0, а не 10; теперь по флагу выбранного варианта, как у словесных ответов. Клиническая картина: сдвиг — серверный (changeOverSeries приводит первую версию к последней), а не простая разность, которая объявляла бы ухудшение от одной смены версии. Таблица пунктов: у каждой версии свои id вопросов, и старые замеры выходили пустыми столбцами — тот же пункт другой версии находится по позиции и дословному тексту. Тесты на оба последних — падают без правки.
@4booser
4booser merged commit 93511e6 into main Oct 28, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant