docs: bootstrap repo — CLAUDE.md, spec, ADR, TenVex-style workflow

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-03 14:36:33 +03:00
co-authored by Claude Opus 5.5
commit cf2cc8b5f4
15 changed files with 1671 additions and 0 deletions
+15
View File
@@ -0,0 +1,15 @@
.env
.env.*
!.env.example
.venv/
__pycache__/
*.pyc
.pytest_cache/
.ruff_cache/
.mypy_cache/
.claude/worktrees/
.claude/settings.local.json
*.log
.DS_Store
# исходники от организаторов лежат в docs/source; тяжёлые оригиналы в корне не коммитим
/*.pdf
+80
View File
@@ -0,0 +1,80 @@
# CLAUDE.md — Руководство для Claude Code
## ⚡ ПЕРВОЕ ДЕЙСТВИЕ В КАЖДОЙ СЕССИИ
```bash
set -a; . ./.env 2>/dev/null; set +a
```
Переменные: `GITEA_USER` (кто я), `GITEA_TOKEN` (секрет — **в чат не печатать**), `GITEA_URL`, `GITEA_REPO`.
---
## Что мы строим
Хакатон MedITron, кейс SberMed AI «ИИ-помощник пациента». **Сопровождение восстановления между визитами к врачу** при ПТСР и депрессии (фокус — ветераны СВО и их семьи): мониторинг после обращения + управление приёмом лекарств. Общее ядро + модули `veteran` / `depression` / `family`, включаемые скринингом.
ИИ не ставит диагнозы и не лечит: LLM извлекает данные и формулирует реплики, **риск и алерты решают детерминированные правила**, клинические решения — врач.
**Дедлайн: пн 05.10.2026, 13:00 МСК.** Критерии жюри: работоспособность, функциональность, дизайн, клинико-экономика, клиентский путь.
Язык общения — русский. Код, идентификаторы, коммиты — английский. Тексты для пациента — в `config/texts/`, не в коде.
---
## Карта документации
> Задачи — в [Gitea Issues](https://gitea.24studbank.ru/MedITron/PTSRaiAgent/issues), не в файлах.
| Файл | О чём |
|---|---|
| [`docs/info/SPEC.md`](docs/info/SPEC.md) | **Исходная спецификация:** право (152-ФЗ, 323-ФЗ), архитектура, модель данных, шкалы, LLM-контракт, FSM |
| [`docs/info/CLINICAL_MODULES.md`](docs/info/CLINICAL_MODULES.md) | Ядро + модули: шкалы, расписания, триггеры, обоснования |
| [`docs/DECISIONS.md`](docs/DECISIONS.md) | ADR — отступления от SPEC. **При конфликте важнее SPEC** |
| [`docs/product/`](docs/product/) | Идеи команды, демо-персона и сценарий, требования хакатона |
| [`docs/source/`](docs/source/) | Кейс SberMed AI, концепция и CJM (pdf + txt) |
| [`docs/dev/WORKFLOW.md`](docs/dev/WORKFLOW.md) | **Регламент:** зоны, жизненный цикл, worktree, ветки, PR |
| [`docs/dev/GITEA_API.md`](docs/dev/GITEA_API.md) | Gitea API: issue, PR, зависимости |
| [`docs/dev/ISSUE_TEMPLATE.md`](docs/dev/ISSUE_TEMPLATE.md) | Шаблон тела issue |
---
## Guardrails
Мнемоника: **обезличь, проверь безопасность, реши правилом, спроси часы, запиши в аудит.**
| # | Правило | Где |
|---|---|---|
| 1 | В LLM — только текст после `scrub()`, только через `app/llm/gateway.py` | `app/core/privacy.py` |
| 2 | Safety-проверка до LLM на каждом входящем; `acute` → фиксированный скрипт, LLM не вызывается | `app/core/safety.py` |
| 3 | Скоринг и алерты детерминированы, «действия агента» — выход правил (ADR-007) | `app/core/rules.py`, `config/rules.yaml` |
| 4 | Время — только `app.core.clock` (демо-часы, ADR-005) | `app/core/clock.py` |
| 5 | identity и clinical — разные БД, связь через HMAC-токен; clinical-код не импортирует identity | `app/db/` |
| 6 | Каждое обращение врача к данным → `audit_log` | `app/db/audit.py` |
| 7 | Пороги, шкалы, тексты, лексикон — в `config/` (ADR-008) | `config/` |
| 8 | Только синтетика; логи без ПДн и без сырого текста; секреты только в `.env` | — |
| 9 | Никаких зарубежных API: LLM = GigaChat или `mock`; офлайн по умолчанию (ADR-004) | `app/llm/` |
| 10 | Одна задача = одна зона; `make lint && make test` перед PR | `docs/dev/WORKFLOW.md` |
---
## TL;DR — командная работа
1. **`.env` — первым делом.**
2. **Задача = Issue в Gitea.** Нет issue — нет кода.
3. **Зоны:** core / bot / backend / dashboard / devops / clinical / pitch / docs. В занятую чужую не лезь.
4. **Задача = свой worktree** (`.claude/worktrees/<issue#>-<slug>`), ветка от `origin/dev` — до первого изменения. PR в `dev`; `main` — только человек.
5. **Завершил → сразу push + PR**, после зелёного CI можно мержить самому (хакатон).
6. **Лог** — в тело issue (`### YYYY-MM-DD`); архитектурные решения — в `docs/DECISIONS.md`.
---
## Запуск
```bash
cp .env.example .env
make up # docker compose: postgres + app (API, бот) + dashboard; LLM_PROVIDER=mock по умолчанию
make seed # синтетические пациенты и демо-сюжет
make lint test
```
Дашборд и демо-консоль: http://localhost:8501 · API: http://localhost:8000/docs
> Telegram используется только для прототипа на синтетических данных; прод-канал — MAX / Госуслуги.
+14
View File
@@ -0,0 +1,14 @@
# PTSRaiAgent — ИИ-помощник сопровождения при ПТСР и депрессии
> Хакатон MedITron · кейс SberMed AI «ИИ-помощник пациента». Прототип на **синтетических данных**.
> Telegram используется только для прототипа на синтетических данных; прод-канал — MAX / Госуслуги.
🚧 README заполняется к сдаче (issue «README по требованиям оформления»). Разделы по требованиям жюри:
1. Цели и задачи решения
2. Что реализовано
3. Развёртывание, запуск, использование
4. Входные и выходные данные, API
5. Ограничения и особенности медицинской тематики
Пока смотрите [`CLAUDE.md`](CLAUDE.md) и [`docs/`](docs/).
+48
View File
@@ -0,0 +1,48 @@
# Архитектурные решения (ADR)
> Живой журнал: **что** решили и **почему**. Новые записи — сверху. Одна запись = одно решение.
> При конфликте с [`docs/info/SPEC.md`](info/SPEC.md) действует ADR.
## 2026-10-03 — ADR-009: Процесс — регламент TenVex в облегчённом режиме хакатона
**Контекст:** 3 дня, сдача в пн 05.10 в 13:00 МСК. Два разработчика и Claude Code-агенты работают параллельно. Опыт TenVex/vobot: без issue и изоляции агенты конфликтуют.
**Решение:** берём ядро регламента vobot: задача = issue, одна зона на issue, worktree + ветка от `origin/dev`, PR в `dev`, Conventional Commits, лог в теле issue, ADR сюда. Облегчения: PR в `dev` можно мержить самому после зелёного `make lint test`, без обязательного ревью; contract-first/orval нет; `main` = сдаваемая версия, промоушн `dev → main` делает человек.
**Последствия:** регламент — [`docs/dev/WORKFLOW.md`](dev/WORKFLOW.md).
## 2026-10-03 — ADR-008: Конфиги в `config/`, данные в `data/`
**Контекст:** требования к оформлению: «конфигурационные файлы — в отдельной папке». В SPEC пороги лежали в `data/scales`.
**Решение:** `config/` — шкалы (пункты, диапазоны, градации), расписания модулей, правила алертов, лексикон риска, тексты для пациента (YAML, вычитывает психиатр). `data/` — синтетика, выдержки ГРЛС, eval-разметка.
**Причина:** соответствие чек-листу жюри; психиатр правит только `config/`, не трогая код.
## 2026-10-03 — ADR-007: «Действия агента» — это выход движка правил, а не tool-calling LLM
**Контекст:** в демо-сценарии действия записаны как вызовы инструментов (`raise_alert`, `notify_doctor`, `crisis_protocol`, `book_visit`). Это выглядит так, будто их решает LLM, а это противоречит правилу «алерты детерминированы».
**Решение:** правила (`config/rules.yaml`) по структурированным данным возвращают список действий; оркестратор их исполняет. LLM только формулирует реплику вокруг уже принятого действия.
**Причина:** юридическая атрибуция ответственности: пороги задаёт врач, ИИ решений не принимает. Это ключевой аргумент для жюри и для специалистов.
## 2026-10-03 — ADR-006: Цвета в UI ↔ уровни алертов
**Решение:** 🔴 = `acute` (кризис, п.9 ≥ 1, C-SSRS с намерением/планом, доступ к оружию при риске); 🟡 = `high` + `moderate` (врачу ≤ 24 ч / флаг к визиту); 🟢 = нет открытых алертов; `info` (молчание, нет ответа) — серый флаг. В БД хранится уровень, цвет вычисляется.
## 2026-10-03 — ADR-005: Демо-часы (виртуальное время)
**Контекст:** демо — 13 дней терапии за 3 минуты. Шедулер на реальном времени это показать не даст.
**Решение:** всё время в системе берётся из `app.core.clock` (реальное или виртуальное, `DEMO_CLOCK=true`). В демо-консоли есть кнопка «следующий день». Шедулер срабатывает по сдвигу часов. Правила считают окна (3 дня подряд, 7 дней) от виртуального «сейчас».
**Последствия:** нигде не вызывать `datetime.now()` напрямую. Проверяется в ревью.
## 2026-10-03 — ADR-004: Канал-независимый диалоговый движок + веб-демо-консоль + офлайн-режим
**Контекст:** решение должно запускаться на технике организатора без нестандартного ПО. Telegram и GigaChat на площадке могут быть недоступны.
**Решение:** диалог — чистая функция `engine.handle(token, event) -> list[Reply]` поверх FSM. Адаптеры: Telegram (aiogram) и веб-чат в демо-консоли (Streamlit). LLM за протоколом с двумя провайдерами: `gigachat` и `mock` (детерминированные ответы для демо-реплик). `LLM_PROVIDER=mock` по умолчанию в `docker compose up`.
**Причина:** главный критерий жюри — работоспособность. Демо не должно зависеть от сети.
## 2026-10-03 — ADR-003: Один Postgres, две базы; без Redis и Alembic в MVP
**Контекст:** в SPEC два контейнера Postgres и Redis.
**Решение:** один сервис `postgres` с двумя базами (`identity`, `clinical`; `audit_log` лежит в `clinical`) и двумя ролями: роль клинического модуля не имеет прав на `identity`. Связь — HMAC-токен. Схема создаётся через `create_all` при старте. FSM-состояние хранится в таблице `dialog_state`.
**Причина:** изоляция сохраняется (разные БД и разные роли), а операционной сложности меньше. Alembic для трёхдневного прототипа — лишнее трение. В проде — отдельные кластеры и миграции.
## 2026-10-03 — ADR-002: Ежедневный чек-ин = настроение + приём + модульный вопрос; шкалы — по расписанию
**Контекст:** в SPEC ежедневно собираются 2–3 пункта PHQ-9 в 14-дневном окне. В демо-персоне и в модулях — ежедневно настроение 0–10, приём, сон, алкоголь, а шкалы целиком по расписанию (PHQ-9 еженедельно/раз в 2 недели) и внепланово по триггеру.
**Решение:** берём модель из модулей. Ежедневно: настроение 0–10, приём препарата, один модульный вопрос (сон/кошмары у ветерана, алкоголь при флаге AUDIT-C) и свободный текст (`extract` → побочки, намерение бросить, алкоголь). Полные шкалы — по расписанию модуля и внепланово (например, настроение ≤ 3 три дня → внеплановый PHQ-9). П.9 PHQ-9 — только кнопками.
**Последствия:** новая таблица `daily_checkins` (mood, med_taken, sleep_bucket, alcohol_bucket, flags).
## 2026-10-03 — ADR-001: Общее ядро + три модуля, включаемые скринингом
**Контекст:** три источника требований (SPEC, демо-персона, концепция/CJM) по-разному ставят фокус: ветераны, депрессия, семьи.
**Решение:** общее ядро (PHQ-9 → C-SSRS, ежедневный чек-ин, молчание как сигнал) и модули `veteran`, `depression`, `family` ([`CLINICAL_MODULES.md`](info/CLINICAL_MODULES.md)). Модули включает стартовый скрининг и/или врач при подключении пациента. Шкалы, расписания и триггеры модулей описаны декларативно в `config/modules.yaml`.
**Приоритет на хакатон:** ядро, `veteran` и `depression` — P0; `family` — P1 (вход «Я близкий», чек-лист, кнопка «сообщить врачу»).
**Кейс:** закрываем сценарии «мониторинг после обращения» и «управление приёмом лекарств». Скрининг/триаж — входная точка, а не отдельный третий сценарий.
+58
View File
@@ -0,0 +1,58 @@
# Gitea API — шпаргалка
> **⛔ Кириллица в JSON:** `curl -d '{...}'` ломает кодировку. Тело собирать в файл (python/node `json.dumps(..., ensure_ascii=False)`) и слать через `--data-binary @file` с `Content-Type: application/json; charset=utf-8`.
> **⛔ Обратные кавычки:** markdown-тексты не передавать внутри `"..."` в shell — бэктики выполнятся как команды. Только через файл / heredoc `<<'EOF'`.
```bash
set -a; . ./.env 2>/dev/null; set +a # GITEA_URL, GITEA_REPO, GITEA_USER, GITEA_TOKEN
API="$GITEA_URL/api/v1/repos/$GITEA_REPO"
H=(-H "Authorization: token $GITEA_TOKEN" -H "Content-Type: application/json; charset=utf-8")
```
## Issues
```bash
# Мои открытые
curl -s "${H[@]}" "$API/issues?state=open&type=issues&assigned_by=$GITEA_USER"
# Открытые по зоне
curl -s "${H[@]}" "$API/issues?state=open&type=issues&labels=core"
# Создать (тело из файла)
python3 - <<'EOF' > /tmp/issue.json
import json; print(json.dumps({"title":"...","body":open("body.md").read(),"labels":[1,2],"milestone":1}, ensure_ascii=False))
EOF
curl -s -X POST "${H[@]}" "$API/issues" --data-binary @/tmp/issue.json
# Дописать лог выполнения в тело
curl -s "${H[@]}" "$API/issues/NN" | python3 -c '
import json,sys,datetime; b=json.load(sys.stdin)["body"]
b+=f"\n### {datetime.date.today()}\n- **Что сделано:** ...\n- **Результат:** ...\n"
print(json.dumps({"body":b},ensure_ascii=False))' > /tmp/patch.json
curl -s -X PATCH "${H[@]}" "$API/issues/NN" --data-binary @/tmp/patch.json >/dev/null
# Комментарий
curl -s -X POST "${H[@]}" "$API/issues/NN/comments" --data-binary @/tmp/comment.json
```
## Зависимости (только через API)
```bash
# #NN зависит от #MM
curl -s -X POST "${H[@]}" "$API/issues/NN/dependencies" \
-d "{\"owner\":\"${GITEA_REPO%%/*}\",\"repo\":\"${GITEA_REPO##*/}\",\"index\":MM}"
curl -s "${H[@]}" "$API/issues/NN/dependencies"
```
## Pull Requests
```bash
# base = dev, не main
curl -s -X POST "${H[@]}" "$API/pulls" --data-binary @/tmp/pr.json # {"head":"feat/NN-slug","base":"dev","title":"...","body":"Closes #NN ..."}
# Смержить (после зелёного CI)
curl -s -X POST "${H[@]}" "$API/pulls/PP/merge" -d '{"Do":"merge","delete_branch_after_merge":true}'
# Статусы CI коммита
curl -s "${H[@]}" "$API/commits/<sha>/statuses"
```
## Ветки
```bash
git ls-remote --heads origin <ветка> # пусто = PR уже смержен, не пушить
B="feat/NN-slug"; curl -s -X DELETE "${H[@]}" "$API/branches/${B//\//%2F}"
```
+34
View File
@@ -0,0 +1,34 @@
# Шаблон тела issue
Задача самодостаточна: агент, открывший её без контекста, понимает, что делать. Не хватает информации — дополни issue до начала работы.
```markdown
## Описание
Почему задача возникла, какую проблему решает, к какой части продукта относится. Ссылки на ADR / SPEC / CLINICAL_MODULES.
## Желаемый результат
Конкретно и проверяемо.
## Подзадачи
- [ ] шаг — файл/модуль
## Анализ
### Затрагиваемые файлы
| Файл | Что меняется |
|---|---|
### Ограничения и риски
152-ФЗ, safety, детерминизм, демо-часы, офлайн-режим.
### Архитектурный выбор
Если есть развилка — варианты и выбор.
## Как проверить
Команды / сценарий в демо-консоли / ожидаемый результат.
---
## Лог выполнения
```
> Зависимости — только через API. Лог — секция `### YYYY-MM-DD` за каждую сессию. Issue закрывается мержем PR с `Closes #N`.
+116
View File
@@ -0,0 +1,116 @@
# Регламент работы: зоны, задачи, git, коммиты
> Основан на регламенте TenVex/vobot, облегчён под хакатон (ADR-009). Дедлайн: **пн 05.10.2026, 13:00 МСК**.
## Зоны и файлы
| Зона (`label`) | Пути | Отвечает за | Владелец |
|---|---|---|---|
| `core` | `app/core/` | privacy, шкалы и скоринг, safety, движок правил, демо-часы | dev |
| `bot` | `app/dialog/`, `app/channels/`, `app/llm/` | FSM диалога, Telegram-адаптер, LLM-шлюз (GigaChat/mock) | Егор |
| `backend` | `app/db/`, `app/api/`, `app/scheduler/`, `app/integrations/` | БД, API, шедулер, моки МИС/ЕСИА/ГРЛС, уведомления | dev |
| `dashboard` | `dashboard/` | дашборд врача, демо-консоль (Streamlit) | dev |
| `devops` | `docker-compose.yml`, `Dockerfile`, `Makefile`, `.gitea/`, `pyproject.toml` | окружение, CI, запуск на чистой машине | dev |
| `clinical` | `config/` (содержимое), `data/eval/` | шкалы, пороги, тексты, лексикон, кризисный скрипт | психиатр |
| `pitch` | `docs/pitch/` | презентация, клинико-экономика, CJM, правовые слайды | медик |
| `docs` | `docs/`, `README.md`, `CLAUDE.md` | регламенты, ADR, README | все |
**Замок зоны:** пока на зону есть открытый issue с активной веткой, файлы зоны принадлежат ему до мержа. Перед правкой: `git fetch origin && git branch -r`.
**Схемы `config/*.yaml`** задаёт `core` (pydantic-модели), а **значения** в них — `clinical`.
---
## Откуда задачи
- Только из Gitea `$GITEA_REPO`. Нет issue — нет кода. Нет подходящего issue — заведи его на себя.
- Атрибуты: **метка зоны**, **тип** (`feature`/`fix`/`refactor`/`docs`/`chore`), **размер** (`size/0.5` ≈ 2 ч, `size/1` ≈ 4 ч, `size/2` ≈ день), **milestone** (M1/M2/M3), приоритет `P0`/`P1`/`P2`.
- **Одна задача = одна зона.** Нужно несколько зон → несколько issue, связанных зависимостью через API ([`GITEA_API.md`](GITEA_API.md)).
- Тело issue — по шаблону [`ISSUE_TEMPLATE.md`](ISSUE_TEMPLATE.md).
### Milestones
| Milestone | Срок | Смысл |
|---|---|---|
| M1 Каркас | сб 03.10, 23:59 | ядро, БД, LLM-шлюз, конфиги; тесты зелёные |
| M2 Демо-сценарий | вс 04.10, 23:59 | весь сценарий проходит end-to-end в демо-консоли |
| M3 Сдача | пн 05.10, 13:00 | README, презентация PDF, репетиция, `dev → main` |
---
## Жизненный цикл задачи
```
1. Взял issue (assignee = $GITEA_USER), зона свободна
2. git fetch origin
3. git worktree add .claude/worktrees/<issue#>-<slug> -b <type>/<issue#>-<slug> origin/dev ← ДО первого изменения
4. cp .env в worktree; uv sync
5. Код по модулям; коммиты с Refs #N
6. git ls-remote --heads origin <ветка> ← пусто после первого пуша = PR смержен, стоп
7. git fetch && git rebase origin/dev
8. make lint && make test
9. Лог в тело issue: ### YYYY-MM-DD
10. PR в dev с Closes #N → после зелёного CI мержит автор (облегчение хакатона)
11. git worktree remove .claude/worktrees/<issue#>-<slug>
```
**Задача завершена → сам: коммит → push → PR.** Не запушено — не сделано.
## Git
```
main ← сдаваемая версия, мержит только человек (пн утром)
dev ← интеграция, сюда все PR
<type>/<issue#>-<slug> ← от dev
```
## Коммиты — Conventional Commits
```
feat(core): add PHQ-9 scoring with item-9 escalation
Refs #3
```
scope = зона. `Closes #N` — только в описании PR.
## Шаблон PR
```markdown
## Что меняется
1–3 предложения.
Closes #<N>
## Зона
core | bot | backend | dashboard | devops | clinical | pitch | docs
## Как проверить
шаги/команды
## Чек-лист
- [ ] rebase на origin/dev
- [ ] make lint + make test зелёные
- [ ] лог в issue (### YYYY-MM-DD)
- [ ] нет ПДн в логах, нет реальных данных, нет секретов
- [ ] общие файлы (CLAUDE.md, docker-compose, pyproject) — отдельный мелкий PR с пингом
```
---
## Guardrails (проверяются в каждом PR)
1. **В LLM — только `scrub()`-текст.** Прямой вызов клиента GigaChat в обход `app/llm/gateway.py` запрещён.
2. **Safety до LLM.** При `acute` LLM не вызывается вообще.
3. **Алерты и скоринг детерминированы** — LLM не решает (ADR-007).
4. **Время — только из `app.core.clock`** (ADR-005).
5. **identity ↔ clinical — только через токен.** Модули clinical не импортируют `app.db.identity`.
6. **Доступ врача → `audit_log`.**
7. **Пороги, тексты и лексикон — в `config/`**, не в коде.
8. **Только синтетика.** Логи без ПДн и без сырого текста.
9. **Никаких зарубежных API в контуре.**
## Факапы
| Ситуация | Действие |
|---|---|
| Начал в основной копии | `git stash` → worktree → `git stash pop` |
| `git push` дал `[new branch]` после мержа | удалить ветку через API, новый issue + cherry-pick |
| Конфликт при rebase в чужой зоне | спросить владельца |
| Утёк секрет | отозвать ключ, вычистить историю |
| Битая кириллица в issue/PR | см. [`GITEA_API.md`](GITEA_API.md): только `--data-binary @файл` |
+35
View File
@@ -0,0 +1,35 @@
# Клинические модули: общее ядро + три модуля
> Источник — предложение команды (2026-10-03). Пороги и шкалы — стартовые, **финальные утверждает психиатр**.
> В коде всё ниже живёт в `config/` (шкалы, расписания, правила), не хардкодится. Решение — ADR-001 в [`DECISIONS.md`](../DECISIONS.md).
Строим не три продукта, а **общее ядро + три модуля**. У ветерана часто одновременно есть ПТСР, депрессия и суицидальность, поэтому модули включаются по результатам стартового скрининга (и/или врачом при подключении).
## Общее ядро (во всех сценариях)
- PHQ-9. Если 9-й пункт ≥ 1 → C-SSRS → эскалация врачу.
- Ежедневно: настроение 0–10 и отметка приёма препарата.
- Пропуск чек-инов несколько дней подряд → связь с пациентом. **Молчание само по себе — сигнал риска.**
## 1. Ветераны СВО
- **Старт:** PCL-5, PHQ-9, AUDIT-C. Опционально — шкала интенсивности боевого опыта (рус. версия Тарабриной).
- **Мониторинг:** PCL-5 (версия за неделю) и PHQ-9 раз в 2 недели; AUDIT-C раз в месяц; DAR-5 (гнев) раз в 2 недели; ежедневно один вопрос про сон и кошмары.
- **Триггеры:** рост PCL-5 на ≥ 10 → врач; AUDIT-C ≥ 4 (м) / ≥ 3 (ж) → флаг; доступ к оружию → блок безопасности.
- **Обоснование:** ПТСР у комбатантов часто коморбиден с депрессией и алкоголем; алкоголь — фактор риска суицида и взаимодействует с антидепрессантами и бензодиазепинами; гнев — отдельная мишень терапии; ограничение доступа к средствам — одна из самых доказательных мер профилактики.
## 2. Депрессия и суицидальность
- **Старт:** PHQ-9, C-SSRS (полный скрининг), GAD-7. План безопасности Стэнли–Брауна: составляется с врачом на визите, хранится в приложении.
- **Мониторинг:** PHQ-9 еженедельно первые 4–6 недель, затем раз в 2 недели; C-SSRS «с последнего контакта» еженедельно; FIBSER раз в 2 недели.
- **Триггеры:** C-SSRS — мысли с намерением/планом или суицидальное поведение → срочная эскалация, на экран — план безопасности и кризисные контакты; пропуск препарата ≥ 3 дней → связь с пациентом.
- **Обоснование:** риск суицида максимален в первые месяцы после выписки (Chung et al., JAMA Psychiatry 2017); у пациентов < 25 лет в начале приёма антидепрессантов возможно усиление суицидальных мыслей (FDA) → частый мониторинг первых недель; план безопасности + звонки снизили суицидальное поведение ≈ на 45% (Stanley et al., JAMA Psychiatry 2018); «caring contacts» снижали смертность от суицида (Motto & Bostrom 2001) — ежедневный чек-ин как цифровой аналог.
## 3. Семьи ветеранов
Член семьи в двух ролях: пациент и наблюдатель.
- **Старт:** PHQ-4 (PHQ-2 + GAD-2); нагрузка ухаживающего — Caregiver Strain Index (Zarit платная); безопасность дома — HITS (4 вопроса).
- **Мониторинг:** PHQ-4 раз в месяц; положительный → полный PHQ-9 и GAD-7.
- **Наблюдатель:** обучающий чек-лист тревожных признаков у ветерана (не валидированная шкала) + кнопка «сообщить врачу».
- **Триггеры:** признаки насилия → кризисные ресурсы; п.9 PHQ-9 у члена семьи → C-SSRS.
- **Ограничение (152-ФЗ):** передавать врачу данные о ветеране со слов семьи — только с согласия самого ветерана.
- **Обоснование:** вторичная травматизация у партнёров; ПТСР ассоциирован с риском агрессии в семье; близкие первыми замечают ухудшение.
## Лицензии
Перед использованием проверить лицензии CSI, HITS, DAR-5 (и FIBSER, PCL-5 рус.). Пока не подтверждено — в прототипе помечаем «демо-текст, лицензия на проверке».
+466
View File
@@ -0,0 +1,466 @@
# SPEC — исходная спецификация продукта
> Исходный CLAUDE.md команды (v0, 2026-10-03). Источник правды по правовым ограничениям, модели данных и клинической логике.
> **Отступления от него фиксируются в [`docs/DECISIONS.md`](../DECISIONS.md)** — при конфликте ADR важнее этого файла.
> Модули по сегментам — [`CLINICAL_MODULES.md`](CLINICAL_MODULES.md). Концепция и CJM — [`../source/concept_cjm.txt`](../source/concept_cjm.txt).
---
## 1. Контекст проекта
- **Событие:** хакатон MedITron, кейс SberMed AI «ИИ-помощник пациента».
- **Задача кейса:** ИИ-помощник, через который пациент в диалоговом формате взаимодействует с государственной системой здравоохранения. Нужно реализовать 1–2 сценария из списка. Мы закрываем два: **мониторинг после обращения** и **управление приёмом лекарств**.
- **Наш фокус:** психическое здоровье, депрессия и ПТСР, в первую очередь у ветеранов СВО.
- **Результат:** работающий прототип и презентация.
- **Критерии оценки:** работоспособность прототипа, функциональность, дизайн презентации и прототипа, оценка клинико-экономических эффектов, описание клиентского пути.
### Команда
| Кто | Зона |
|---|---|
| Егор (dev) | Бот, FSM диалога, интеграция GigaChat, извлечение баллов, safety |
| Программист (dev) | Backend, БД, скоринг, алерты, шедулер, API, дашборд врача |
| Психиатр | Шкалы, пороги, лексикон риска, кризисный скрипт, разметка eval-набора |
| Медик с опытом в госсистеме | Клиентский путь, клинико-экономика, правовые слайды |
### Позиционирование (важно для текстов в UI и коде)
- Продукт — **сопровождение восстановления между визитами к врачу**, а не «психиатрический контроль».
- Участие **добровольное**. Точка входа — существующая диспансеризация ветеранов СВО (консультация психолога), кабинеты медико-психологического консультирования, фонд «Защитники Отечества». Врач **предлагает** подключиться.
- **ИИ не ставит диагнозы и не проводит терапию.** LLM только извлекает данные и формулирует реплики. Решения о риске и алертах принимают **детерминированные правила** по валидированным шкалам. Клинические решения принимает врач.
- В текстах для пациента не используем слова «учёт», «контроль», «психиатрический надзор».
---
## 2. Жёсткие ограничения
### Правовые
- **152-ФЗ:** данные о здоровье относятся к специальной категории (ст. 10). Нужно явное согласие на обработку, отдельный шаг онбординга.
- **152-ФЗ, ч. 5 ст. 18 (с 01.07.2025):** запрещено записывать, хранить и извлекать ПДн граждан РФ в зарубежных базах данных. **Никаких зарубежных сервисов в контуре обработки ПДн.**
- **323-ФЗ ст. 13, Закон 3185-1 ст. 9:** врачебная тайна. Доступ к данным только у лечащего врача пациента.
- **323-ФЗ ст. 36.2:** дистанционное наблюдение допустимо после очного приёма. Диагноз дистанционно не ставится.
- Роли: оператор ПДн — медорганизация, СберМедИИ — обработчик по поручению.
### Технические правила (обязательны в коде)
1. **В LLM уходит только обезличенный текст.** Каждое сообщение проходит через `scrub()` до любого вызова LLM.
2. **Identity и клинические данные хранятся в двух разных БД**, связь через HMAC-токен.
3. **Safety-проверка идёт до LLM на каждом входящем сообщении.** При кризисе отвечает фиксированный скрипт, LLM не генерирует ответ.
4. **Скоринг и алерты детерминированы.** LLM никогда не решает, отправлять ли алерт.
5. **Каждое обращение врача к данным пишется в аудит-лог.**
6. **Только синтетические данные.** Никаких реальных пациентов, даже «от знакомых».
7. Секреты — только из `.env`. `.env` в `.gitignore`.
### Стек: можно и нельзя
| Слой | Используем | Не используем |
|---|---|---|
| LLM | **GigaChat** (пакет `gigachat`) | OpenAI, Anthropic, Gemini и любые зарубежные API |
| Канал пациента | Telegram (**только демо на синтетике**), целевой — MAX | WhatsApp |
| Хостинг (прод) | Cloud.ru, Yandex Cloud | AWS, GCP, Vercel, Supabase, Firebase |
| БД | PostgreSQL | MongoDB Atlas, Firebase |
| Пуши и аналитика | Свои / RuStore Push, без трекеров | FCM, Google Analytics |
| Авторизация (прод) | ЕСИА | Google / Apple Sign-In |
В коде и README отмечаем: «Telegram используется только для прототипа на синтетических данных; прод-канал — MAX / Госуслуги».
---
## 3. Архитектура
```
Каналы: [Бот пациента: aiogram] [Дашборд врача: Streamlit]
│ │
Ядро: [Оркестратор FSM] → [Safety] → [Клин. движок] → [LLM-шлюз GigaChat]
│ │
Данные: [identity_db] [clinical_db] [audit_log]
│
Интеграции: [ЕСИА] [МИС/ЕГИСЗ] [ГРЛС] [Уведомления] ← в демо моки через адаптеры
```
### Поток обработки входящего сообщения
1. Бот получает сообщение → находит токен пациента.
2. `scrub(text)` удаляет ПДн.
3. `safety.check()`: лексикон + LLM-классификатор, берём максимум.
- `ACUTE` → `CRISIS_SCRIPT` + немедленный алерт дежурному + аудит. **Конец обработки.**
- `POSSIBLE` → алерт врачу в течение 24 ч + переход в состояние `cssrs_screen`.
4. Иначе FSM обрабатывает сообщение по текущему состоянию.
5. Для пункта шкалы: `extract()` → `ItemScore`. Если `None` или `confidence < 0.5`, бот задаёт уточняющий вопрос.
6. Сохранение в `clinical_db` → пересчёт трендов → проверка правил алертов.
---
## 4. Структура репозитория
```
psy-assistant/
├── CLAUDE.md
├── README.md
├── .env.example
├── docker-compose.yml # postgres-identity, postgres-clinical, redis, app, dashboard
├── pyproject.toml
├── app/
│ ├── main.py # запуск бота + FastAPI + шедулер
│ ├── config.py # pydantic-settings
│ ├── bot/
│ │ ├── handlers.py # aiogram routers
│ │ └── keyboards.py
│ ├── core/
│ │ ├── fsm.py # состояния и переходы
│ │ ├── safety.py # кризис-детектор
│ │ ├── scoring.py # PHQ-9, GAD-7, PCL-5, тренды
│ │ ├── adherence.py # приверженность
│ │ ├── alerts.py # правила и отправка алертов
│ │ └── privacy.py # scrub(), pseudo_id()
│ ├── llm/
│ │ ├── giga.py # клиент, ретраи, валидация JSON
│ │ ├── prompts.py
│ │ └── rag.py # инструкции ЛС из ГРЛС (опционально)
│ ├── integrations/
│ │ ├── base.py # Protocol-интерфейсы
│ │ ├── esia_mock.py
│ │ ├── mis_mock.py # назначения из JSON
│ │ ├── grls.py
│ │ └── notify.py # Telegram-чат врача / email
│ ├── db/
│ │ ├── identity.py
│ │ ├── clinical.py
│ │ ├── audit.py
│ │ └── migrations/
│ ├── scheduler/
│ │ └── jobs.py # APScheduler: лекарства, чек-ины
│ └── api/
│ └── routes.py # для дашборда
├── dashboard/
│ └── app.py # Streamlit
├── data/
│ ├── scales/ # phq9.yaml, gad7.yaml, pcl5.yaml, cssrs.yaml
│ ├── lexicon/risk_ru.yaml # от психиатра
│ ├── meds/ # инструкции ЛС (ГРЛС), mis_prescriptions.json
│ ├── synthetic/ # сгенерированные пациенты
│ └── eval/ # разметка психиатра
├── scripts/
│ ├── gen_synthetic.py
│ ├── seed_demo.py
│ └── eval_extraction.py
└── tests/
├── test_scoring.py
├── test_safety.py
└── test_privacy.py
```
---
## 5. Модель данных
### identity_db (доступ только у модулей регистрации и алертов)
```sql
CREATE TABLE patients (
token CHAR(32) PRIMARY KEY, -- HMAC(SNILS)
full_name TEXT NOT NULL,
snils TEXT NOT NULL UNIQUE,
phone TEXT,
tg_chat_id BIGINT UNIQUE,
clinic_id TEXT NOT NULL,
doctor_id TEXT NOT NULL,
consent_at TIMESTAMPTZ, -- NULL = согласия нет, обработка запрещена
consent_ver TEXT,
revoked_at TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT now()
);
CREATE TABLE doctors (
doctor_id TEXT PRIMARY KEY,
full_name TEXT NOT NULL,
clinic_id TEXT NOT NULL,
notify_chat BIGINT,
on_call BOOLEAN DEFAULT FALSE
);
```
### clinical_db (без прямых идентификаторов)
```sql
CREATE TABLE item_responses (
id BIGSERIAL PRIMARY KEY,
token CHAR(32) NOT NULL,
ts TIMESTAMPTZ DEFAULT now(),
scale TEXT NOT NULL, -- phq9 | gad7 | pcl5 | cssrs
item_id TEXT NOT NULL,
score SMALLINT,
confidence REAL,
evidence TEXT, -- обезличенная фраза
source TEXT NOT NULL -- llm | button | clinician
);
CREATE TABLE scale_results (
id BIGSERIAL PRIMARY KEY,
token CHAR(32) NOT NULL,
scale TEXT NOT NULL,
period_start DATE, period_end DATE,
total SMALLINT NOT NULL,
severity TEXT NOT NULL,
complete BOOLEAN NOT NULL
);
CREATE TABLE prescriptions (
id BIGSERIAL PRIMARY KEY,
token CHAR(32) NOT NULL,
drug TEXT NOT NULL, -- МНН
dose TEXT NOT NULL,
schedule JSONB NOT NULL, -- {"times": ["08:00","20:00"]}
start_date DATE, end_date DATE
);
CREATE TABLE doses (
id BIGSERIAL PRIMARY KEY,
token CHAR(32) NOT NULL,
prescription_id BIGINT REFERENCES prescriptions(id),
planned_at TIMESTAMPTZ NOT NULL,
status TEXT NOT NULL, -- taken | missed | skipped | pending
side_effects TEXT
);
CREATE TABLE alerts (
id BIGSERIAL PRIMARY KEY,
token CHAR(32) NOT NULL,
ts TIMESTAMPTZ DEFAULT now(),
level TEXT NOT NULL, -- acute | high | moderate | info
reason TEXT NOT NULL,
acked_by TEXT, acked_at TIMESTAMPTZ
);
CREATE TABLE messages (
id BIGSERIAL PRIMARY KEY,
token CHAR(32) NOT NULL,
ts TIMESTAMPTZ DEFAULT now(),
direction TEXT NOT NULL, -- in | out
text_scrubbed TEXT NOT NULL,
fsm_state TEXT
);
```
### audit_log
```sql
CREATE TABLE audit_log (
id BIGSERIAL PRIMARY KEY,
ts TIMESTAMPTZ DEFAULT now(),
actor TEXT NOT NULL, -- doctor_id | system
action TEXT NOT NULL, -- view_patient | ack_alert | crisis_acute | export
token CHAR(32),
details JSONB
);
```
---
## 6. Клиническая логика
> Пороги — стартовые значения из литературы. **Финальные утверждает психиатр команды.** Храним их в `data/scales/*.yaml`, а не хардкодим.
| Шкала | Пункты | Диапазон | Градации |
|---|---|---|---|
| PHQ-9 (депрессия) | 9 × 0..3 | 0–27 | 0–4 минимальная, 5–9 лёгкая, 10–14 умеренная, 15–19 умеренно-тяжёлая, 20–27 тяжёлая |
| GAD-7 (тревога) | 7 × 0..3 | 0–21 | 5 лёгкая, 10 умеренная, 15 тяжёлая |
| PCL-5 (ПТСР) | 20 × 0..4 | 0–80 | ≥31–33 вероятный ПТСР |
| C-SSRS (скрининг) | да/нет | — | Запускается только при сигнале риска |
### Правила алертов (`core/alerts.py`)
| Условие | Уровень | Действие |
|---|---|---|
| Safety = ACUTE | `acute` | Скрипт + немедленно дежурному |
| PHQ-9 пункт 9 > 0 | `acute` | То же + C-SSRS |
| Safety = POSSIBLE | `high` | Врачу в течение 24 ч, C-SSRS |
| PHQ-9 ≥ 20 или PCL-5 ≥ 50 | `high` | Врачу в течение 24 ч |
| Рост PHQ-9 на ≥ 5 баллов между замерами | `high` | Врачу в течение 24 ч |
| ≥ 3 пропуска приёма за 7 дней | `moderate` | Чек-ин о причинах + флаг к визиту |
| Жалоба на побочный эффект | `moderate` | Флаг к визиту, при серьёзном — врачу |
| Нет ответа пациента > 3 дней | `info` | Флаг на дашборде |
### Сбор шкалы в диалоге
- Каждый день 2–3 пункта, перефразированных разговорным языком. Тексты перефразировок утверждает психиатр.
- Окно шкалы — 14 дней. Если пункт уже собран в текущем окне, повторно его не спрашиваем.
- Свободный ответ → `extract()` → `ItemScore`. Кнопки с вариантами 0–3 остаются как запасной вариант.
- Пункт 9 PHQ-9 (мысли о смерти) задаётся **только кнопками**, без LLM-интерпретации.
---
## 7. LLM-слой
### Контракт извлечения
```python
class ItemScore(BaseModel):
item: str
score: int = Field(ge=0, le=3) # для PCL-5: le=4
confidence: float = Field(ge=0, le=1)
evidence: str
```
- `temperature=0.1`, ответ строго JSON, валидация pydantic, до 2 ретраев. При неудаче возвращать `None`, FSM задаёт уточнение.
### Задачи LLM
1. **extract** — свободный ответ → балл пункта.
2. **risk_classify** — классификация риска: `none | possible | acute`. Используется только как **дополнительный** сигнал к лексикону, берём максимум.
3. **phrase** — эмпатичная формулировка следующего вопроса. Короткая, без советов, без диагнозов, без обещаний.
4. **summarize_for_doctor** — саммари динамики за период по структурированным данным (не по сырому тексту).
5. **med_qa** (опционально) — ответы на вопросы о препарате **только по RAG из инструкции ГРЛС**. Если ответа в инструкции нет: «уточните у вашего врача».
### Запреты для системных промптов
- Не ставить диагнозы, не называть расстройства.
- Не менять и не отменять дозировки, не советовать препараты.
- Не проводить психотерапию.
- Не обещать конфиденциальность сверх реальной.
- При любом сомнении в безопасности — нейтральный ответ и передача врачу.
---
## 8. FSM: состояния
```
new → consent → onboarding_baseline → idle
idle → daily_checkin → idle
idle → med_reminder → med_confirm → (side_effects?) → idle
any → cssrs_screen → idle | crisis
any → crisis (выход только после подтверждения врача)
consent_revoked → (данные помечаются к удалению, бот замолкает)
```
- `consent`: текст согласия, кнопки «Согласен» / «Не согласен». Без согласия никакой обработки.
- `onboarding_baseline`: базовые PHQ-9 и PCL-5 (кнопками, быстро), подтягивание назначений из `mis_mock`.
- `daily_checkin`: шедулер раз в день, 2–3 пункта.
- `med_reminder`: по расписанию из `prescriptions`. Если нет ответа 2 часа, доза помечается `missed`.
---
## 9. Интеграции (адаптеры)
Все внешние системы закрыты `Protocol`-интерфейсами в `integrations/base.py`. В демо работают моки, в проде подменяется реализация.
```python
class PrescriptionSource(Protocol):
async def get_prescriptions(self, token: str) -> list[Prescription]: ...
class IdentityProvider(Protocol): # ЕСИА
async def verify(self, auth_code: str) -> VerifiedPerson: ...
class Notifier(Protocol):
async def send(self, doctor_id: str, level: str, text: str) -> None: ...
class DrugInfo(Protocol): # ГРЛС
async def instruction(self, inn: str) -> str: ...
```
| Адаптер | Демо | Прод |
|---|---|---|
| ЕСИА | `esia_mock`: регистрация по коду от врача | ЕСИА OAuth, нужна регистрация ИС |
| МИС / ЕГИСЗ | `mis_mock`: `data/meds/mis_prescriptions.json` | Региональная МИС, СЭМД в РЭМД |
| ГРЛС | Локальные инструкции 20–30 психотропных ЛС | Синхронизация с grls.rosminzdrav.ru |
| Уведомления | Telegram-чат врача | MAX / интерфейс МИС врача |
---
## 10. Данные
### Клинический контент
- PHQ-9, GAD-7: русские версии, свободное использование.
- PCL-5: русский перевод выбирает психиатр.
- C-SSRS: скрининговая версия на русском.
- Клинические рекомендации Минздрава (cr.minzdrav.gov.ru) — депрессия, ПТСР, для контекста RAG.
- Инструкции ЛС — ГРЛС.
### NLP (оценка и вспомогательные сигналы)
- `sagteam/cedr_v1`, `seara/ru_go_emotions` — русские эмоции.
- `cointegrated/rubert-tiny2-cedr-emotion-detection` — лёгкий классификатор эмоций на CPU (опционально).
- Открытого русского датасета по суицидальному риску с клинической разметкой нет → лексикон психиатра + LLM + C-SSRS.
### Синтетика (`scripts/gen_synthetic.py`)
Персоны (утверждает психиатр):
1. Ветеран с ПТСР: кошмары, гипербдительность, раздражительность; улучшение на терапии.
2. Депрессия с плохой приверженностью: пропуски → ухудшение PHQ-9.
3. Стабильный пациент: ровные баллы.
4. Эпизод с суицидальными мыслями на 9-й день (для демо кризиса).
5. Побочный эффект СИОЗС: тошнота, бессонница, желание бросить.
6. Алкоголь как самолечение.
Для каждой персоны — 14 дней диалогов с заданной траекторией. Формат: `data/synthetic/<persona>.jsonl`, поля `day, role, text, expected_items`.
### Eval (`scripts/eval_extraction.py`)
- 50–100 реплик, размеченных психиатром эталонными баллами → `data/eval/labels.jsonl`.
- Метрики: точное совпадение, совпадение ±1, MAE по пунктам, доля `confidence < 0.5`.
- Safety: recall по кризисным репликам должен быть 100% на eval-наборе. Precision вторичен.
---
## 11. Дашборд врача (Streamlit)
1. Список пациентов врача: последний PHQ-9 / PCL-5, тренд-стрелка, приверженность за 7 дней, неподтверждённые алерты (сортировка по уровню).
2. Карточка пациента: графики баллов во времени, календарь приёма доз, лента алертов, LLM-саммари периода.
3. Подтверждение алерта (`ack`) пишется в аудит.
4. Каждое открытие карточки — запись в `audit_log`.
---
## 12. Демо-сценарий (обязателен к работе)
1. Врач показывает QR → пациент запускает бота → согласие → базовые шкалы.
2. Подтягиваются назначения (мок МИС) → приходит напоминание → «принял».
3. Ежедневный чек-ин: свободный ответ «сплю плохо, кошмары почти каждую ночь» → извлечён балл → на дашборде обновился график.
4. **Кризис:** пациент пишет тревожную фразу → бот отвечает кризисным скриптом → **у врача на экране сразу алерт.** Этот момент проверить многократно.
5. Дашборд: динамика за 14 дней у синтетического пациента, саммари, флаги приверженности.
---
## 13. План работ (приоритеты)
### P0 — без этого демо нет
- [ ] `docker-compose` с двумя Postgres, миграции
- [ ] `privacy.py`: `scrub()`, `pseudo_id()` + тесты
- [ ] Бот: согласие, онбординг, базовые шкалы кнопками
- [ ] `safety.py` + кризисный скрипт + алерт врачу + тесты
- [ ] `scoring.py` (PHQ-9, PCL-5) + тесты
- [ ] `giga.py` + `extract()` с валидацией
- [ ] Ежедневный чек-ин с извлечением
- [ ] Напоминания о лекарствах + подтверждение
- [ ] Дашборд: список, карточка, алерты
- [ ] `seed_demo.py` с синтетикой
### P1
- [ ] Генерация синтетики + eval извлечения (цифра для слайда)
- [ ] LLM-саммари для врача
- [ ] Тренды и правила приверженности
- [ ] GAD-7
### P2
- [ ] RAG по инструкциям ГРЛС
- [ ] Классификатор эмоций как дополнительный сигнал
- [ ] Голосовые сообщения (SaluteSpeech)
- [ ] Мок-экспорт заключения в формате СЭМД
---
## 14. Соглашения по коду
- Python 3.11+, асинхронный код (aiogram 3, FastAPI, asyncpg / SQLAlchemy 2 async).
- Типизация везде, pydantic для всех внешних данных и ответов LLM.
- `ruff` + `pytest`. Тесты обязательны для `privacy`, `safety`, `scoring`, `alerts`.
- Логи **без ПДн и без сырого текста сообщений**: только токен, состояние, коды событий.
- Тексты для пациента — в `app/bot/texts.py` или YAML, не в коде хендлеров (их будет вычитывать психиатр).
- Конфигурация порогов и лексикона — в `data/`, не в коде.
- Маленькие коммиты, осмысленные сообщения на английском.
## 15. Переменные окружения (`.env.example`)
```
TG_BOT_TOKEN=
GIGACHAT_CREDENTIALS=
GIGACHAT_SCOPE=GIGACHAT_API_PERS
PSEUDO_KEY= # 32+ случайных байт, hex
IDENTITY_DB_URL=postgresql+asyncpg://...
CLINICAL_DB_URL=postgresql+asyncpg://...
REDIS_URL=redis://redis:6379/0
DOCTOR_NOTIFY_CHAT_ID=
TZ=Europe/Moscow
```
---
## 16. Открытые вопросы (уточнить у команды)
- Длительность хакатона → скорректировать P0/P1.
- Финальные пороги шкал и лексикон риска — психиатр.
- Русская версия PCL-5 — психиатр.
- Доступ к GigaChat API на хакатоне (ключи от организаторов?).
- Номер и детали приказа о диспансеризации ветеранов СВО — медик из госсистемы.
+7
View File
@@ -0,0 +1,7 @@
# Идеи команды
## 1. Фокус на психиатрии и ментальных расстройствах
Обычные трекеры требуют высокой мотивации, которой у пациентов с депрессией просто нет. Если сфокусироваться на психиатрическом профиле, можно создать систему, которая не просто «звенит», а использует поведенческие паттерны. Например, ИИ-ассистент, который по характеру ответов или активности в приложении понимает, что пациент близок к отказу от терапии (например, при подборе антидепрессантов в первые недели, когда побочки уже есть, а эффекта ещё нет), и сигнализирует об этом лечащему врачу.
## 2. Предиктивная аналитика для врача (дашборд)
Главная проблема текущих систем — врач изолирован от данных пациента. Акцент на интерфейсе лечащего врача. Система агрегирует данные о комплаенсе и подсвечивает специалисту «красные зоны»: какие пациенты находятся в группе риска по прерыванию терапии. Алгоритм анализирует риски, но окончательное решение об изменении терапии принимает врач (что снимает часть этических и юридических проблем атрибуции ответственности ИИ).
+69
View File
@@ -0,0 +1,69 @@
# 01. Демо-персона и сценарии
Источник для seed-данных и сценария демо. Все данные вымышленные.
## Основная персона
| Поле | Значение |
|---|---|
| Имя | Алексей, 28 лет, Москва |
| Работа | разработчик |
| Жалобы (2 мес.) | сниженное настроение, нет интереса к делам, плохой сон, трудно работать |
| Барьер | к врачу не шёл: «боюсь, что поставят на учёт» |
| Скрининг (день −3) | PHQ-9 = 14 (умеренная), п.9 = 0; травмы не было → PC-PTSD-5 пропущен; GAD-7 = 9 |
| Визит к психиатру (день 0) | депрессивный эпизод средней степени; сертралин 50 мг 1 р/сут утром после еды; следующий визит через 4 недели |
| Врач | д-р Смирнова Е. А., психиатр |
## Сценарий А — скрининг (демо 30–40 сек)
1. Пользователь открывает бота без регистрации → дисклеймер («это не диагноз») + согласие на обработку данных.
2. Вопрос о возрасте. Если < 18 → детский телефон доверия 8-800-2000-122, совет обратиться к взрослым / школьному психологу.
3. PHQ-9 → 14 баллов, п.9 = 0.
4. Вопрос о травматическом событии (вход в PC-PTSD-5) → «нет» → пропуск.
5. GAD-7 → 9 баллов.
6. Агент объясняет результат без слова «диагноз», рекомендует консультацию психиатра.
7. Пользователь: «А меня поставят на учёт?» → агент объясняет (добровольное обращение = консультативно-лечебная помощь).
8. Агент предлагает варианты (ПНД/поликлиника, платно, онлайн) → `book_visit` (мок) → с согласия `send_screening_summary` врачу.
## Сценарий Б — сопровождение после визита (основное демо)
Врач на дашборде нажимает «Подключить пациента», вводит препарат и дату следующего визита.
| День | Приём | Настр. 0–10 | Сон | Алкоголь | Жалобы / свободный текст | Шкалы | Уровень | Действие агента |
|---|---|---|---|---|---|---|---|---|
| 1 | да | 4 | 6–8 | нет | — | — | 🟢 | приветствие, напоминание |
| 2 | да | 4 | 4–6 | нет | тошнота | — | 🟢 | объясняет: частая, обычно проходит за 1–2 нед.; принимать после еды |
| 3 | да | 4 | 4–6 | нет | тошнота | — | 🟢 | поддержка |
| 4 | да | 3 | 4–6 | нет | тошнота | — | 🟡 | побочка 3 дня подряд → `raise_alert(yellow)` |
| 5 | решил не принимать | 3 | 4–6 | нет | «от таблеток только хуже, брошу» | — | 🟡 | объясняет отсроченный эффект; не бросать без врача; `notify_doctor` |
| 6 | да | 4 | 6–8 | нет | — | — | 🟢 | врач позвонил, пациент продолжает |
| 7 | да | 4 | 6–8 | нет | — | PHQ-9 = 13, п.9 = 0 | 🟢 | плановый PHQ-9 |
| 8 | да | 4 | < 4 | 1–2 | — | — | 🟢 | — |
| 9 | да | 4 | < 4 | больше | — | — | 🟢 | — |
| 10 | да | 4 | < 4 | больше | «не могу уснуть без пива» | — | 🟡 | сон < 4 ч 3 ночи (F_Y6) + алкоголь 3 дня (F_Y5) → инфо о взаимодействии; `notify_doctor`; `book_visit` раньше |
| 11 | да | 3 | 4–6 | 1–2 | — | — | 🟡 | (алкоголь продолжается) |
| 12 | да | 3 | 4–6 | нет | — | — | 🟡 | — |
| 13 | да | 2 | < 4 | нет | «всё бессмысленно, устал от всего» | внеплановый PHQ-9 = 18, п.9 = 2 | 🔴 | настроение ≤ 3 три дня → внеплановый PHQ-9 → п.9 ≥ 1 → `crisis_protocol` + `raise_alert(red)` |
## Дашборд врача: ещё 7 фейковых пациентов
| Пациент | Возраст | Диагноз | Препарат | День терапии | Статус | Последнее событие |
|---|---|---|---|---|---|---|
| Ирина К. | 34 | депрессия | эсциталопрам 10 мг | 21 | 🟢 | PHQ-9 16 → 9 |
| Дмитрий В. | 41 | ПТСР | сертралин 100 мг | 45 | 🟡 | кошмары, сон < 4 ч 3 ночи |
| Ольга Н. | 29 | депрессия + тревога | сертралин 50 мг | 10 | 🟢 | тошнота прошла |
| Сергей П. | 37 | ПТСР | пароксетин 20 мг | 30 | 🟡 | пропуски 3 из 7 дней |
| Анна Л. | 23 | депрессия | флуоксетин 20 мг | 8 | 🟡 | возраст < 25: усиленный мониторинг; беспокойство |
| Павел Р. | 45 | депрессия | эсциталопрам 10 мг | 60 | 🟢 | ремиссия, PHQ-9 = 4 |
| Наталья Ф. | 52 | ПТСР | сертралин 50 мг | 14 | 🟡 | алкоголь 4 из 7 дней |
| Алексей | 28 | депрессия | сертралин 50 мг | 13 | 🔴 | п.9 PHQ-9 = 2 |
История для графиков у остальных пациентов можно сгенерировать случайно в пределах указанного статуса.
## Порядок демо (≈ 3 мин)
1. Скрининг Алексея → запись к врачу — 40 с
2. Врач подключает пациента на дашборде — 10 с
3. День 5: «хочу бросить» → объяснение + алерт — 40 с
4. День 10: алкоголь + бессонница → запись раньше — 30 с
5. День 13: внеплановый PHQ-9 → 🔴 → кризисный протокол + карточка алерта на дашборде — 40 с
+21
View File
@@ -0,0 +1,21 @@
# 02. Кейс SberMed AI и требования к оформлению
Конспект `Кейс_SBERMED AI.pdf` и `Требования к оформлению.pdf` (оригиналы в корне).
## Кейс
- **Задача:** ИИ-помощник, через который пациент в диалоговом формате взаимодействует с государственной системой здравоохранения в цифровом канале.
- **Сценарии (выбрать 1–2):** запись к врачу, получение справок, предварительный сбор жалоб и анамнеза, **мониторинг после обращения**, **управление приёмом лекарств**.
- **ЦА:** граждане РФ старше 18 лет в периметре госсистемы здравоохранения.
- **Бизнес-эффекты:** снижение операционных издержек, удержание клиентов, удовлетворённость пациентов, рост доли MedTech в B2G.
- **Ограничения и риски:** 152-ФЗ и обработка медданных; комплаенс и ИБ.
- **Конкуренты:** ИИ-помощник Genotek, ChatGPT Health (OpenAI).
- **Критерии оценки:** 1) работоспособность прототипа; 2) функциональность; 3) дизайн презентации и прототипа; 4) оценка клинико-экономических эффектов; 5) описание клиентского пути.
## Требования к оформлению (чек-лист сдачи)
- [ ] `README.md`: цели и задачи; что реализовано; развёртывание, запуск, использование (окружение, зависимости); входные/выходные данные, API; ограничения и особенности медтематики.
- [ ] Структура каталогов: код (`/app`), скрипты развёртывания (`Dockerfile`, `docker-compose.yml`), `/tests`, `/docs`, демо-набор данных без ПДн.
- [ ] Код с комментариями, особенно в алгоритмах обработки медданных; документация интерфейсов.
- [ ] **Конфигурационные файлы — в отдельной папке.**
- [ ] Docker для воспроизводимости; команды установки зависимостей.
- [ ] Презентация (PDF или слайды в репозитории): принцип работы, логика, архитектура.
- [ ] Решение должно запускаться **и на технике организатора, и на ноутбуках команды** без установки нелицензионного/непредусмотренного ПО.
Binary file not shown.
Binary file not shown.
+708
View File
@@ -0,0 +1,708 @@
Сервис поддержки при ПТСР и депрессии — концепция и CJM
Сервис поддержки при ПТСР и
депрессии — концепция и CJM
​Oct 3, 2026 · ​@Arx
Суть сервиса
Сервис — цифровой первый шаг в государственную помощь при ПТСР и
депрессии. Он находит людей, которым нужна помощь, проводит
валидированный скрининг в диалоге, направляет на нужный уровень помощи и
сопровождает между визитами. Диагноз ставит и лечение назначает только
врач.
Позиционирование: навигатор и монитор, а не «ИИ-психотерапевт». Сервис не
конкурирует с врачом, а убирает разрыв между «мне плохо» и «я дошёл до
специалиста».
Сторона Боль сейчас Что даёт сервис
Человек с симптомами Стыдно, непонятно, куда Анонимный старт,
идти, страх «учёта» понятный маршрут,
поддержка между
визитами
Семья Видит проблему, не Признаки, сценарий
знает, что делать, сама разговора, помощь для
истощена себя и детей
Врач, медицинский Мало времени, анамнез Готовая карточка:
психолог собирается с нуля жалобы, баллы шкал,
динамика, красные флаги
Региональный минздрав, Дефицит кадров, нет Сортировка нагрузки по
фонд «Защитники данных о реальной уровням, обезличенная
Отечества» потребности аналитика спроса
Сбер Нужен B2G-продукт в Продукт на GigaChat и
MedTech СберЗдоровье для
госсектора
Page 1 of 14
Сервис поддержки при ПТСР и депрессии — концепция и CJM
Проблема и контекст в РФ
Помощь в России уже есть, но люди до неё не доходят. Инфраструктура
выросла за три года, а главные узкие места — стигма, отсутствие маршрута и
дефицит специалистов.
Масштаб. Открытой статистики по ПТСР нет, оценки расходятся. Минздрав
называл от 3% до 11% военнослужащих, среди раненых до 30%. По словам А.
Цивилевой, помощь медицинских психологов и психиатров нужна 20%
вернувшихся (Коммерсантъ, RTVI). Каждому четвёртому, кто обратился за
психологической помощью через фонд, рекомендовали врача (отчёт
Минздрава за 2023 год).
Что уже работает. С июля 2023 года открыто более 2 тысяч кабинетов
психологической помощи. В филиалах фонда «Защитники Отечества» работают
300 клинических психологов (фонд). Углублённую диспансеризацию в 2025
году прошли более 105 тыс. ветеранов (фонд). Есть платформа СВОИРОДНЫЕ.РФ
и чат-бот фонда в Госуслугах.
Где разрыв.
Стигма: ветераны не идут к психологу, доверяют только сослуживцам и
хотят говорить с равным (ЕАН, ПНП).
Нет маршрутизатора: специалисты прямо говорят о нехватке единого
маршрута и мануала (RTVI).
Кадры: психиатров и психотерапевтов почти вдвое меньше норматива (RTVI).
Первыми приходят семьи, а не сами ветераны (Вечерняя Казань).
ПТСР часто проявляется через месяцы после возвращения, поэтому разового
скрининга мало.
Депрессия в общей популяции часто остаётся нераспознанной: люди
списывают её на усталость, а терапевт на приёме не успевает её выявить.
Точные данные о распространённости депрессии в РФ в анализ не входили —
это открытый вопрос для презентации.
Сегменты целевой аудитории
Сервис работает с четырьмя группами пациентов и двумя группами на стороне
системы. Ветераны и люди с депрессией — ядро; семьи — главный канал входа
для ветеранов.
Page 2 of 14
Сервис поддержки при ПТСР и депрессии — концепция и CJM
Сегмент Кто Ключевая боль Барьер к обращению Приоритет
Ветераны Участники СВО, ПТСР, нарушения сна, «Я не псих», доверие 1
боевых действий ветераны прошлых раздражительность, только своим, страх учёта
конфликтов, особенно алкоголь и потери прав на оружие и
раненые вождение
Люди с Взрослые из общей Нет сил, ничего не радует, Не распознают симптомы, 1
депрессией и популяции, включая бессонница считают это ленью или
тревогой хронически больных, выгоранием, боятся
переживших утрату, психиатрии
женщин после родов
Семьи ветеранов Жёны, родители, Вторичная травма, горе, Думают о близком, а не о 1, как канал
и погибших взрослые дети страх за безопасность себе; не знают, норма ли входа
дома происходящее
Пережившие Пострадавшие в ЧС и ПТСР вне армии Нет специализированной 2
другие травмы терактах, жители точки входа
приграничных
регионов, переселенцы
Специалисты Терапевты, Мало времени, нет данных Недоверие к ИИ, лишняя 1,
медицинские между визитами нагрузка пользователь
психологи,
психотерапевты,
психиатры
Заказчик Региональный Дефицит кадров, нет Регуляторика, закупка Покупатель
минздрав, фонд данных о потребности
«Защитники Отечества»
Персоны для CJM:
Андрей, 34 года. Контрактник, вернулся после ранения 8 месяцев назад.
Живёт в райцентре, ближайший психиатр — в областном центре. Плохо спит,
стал чаще пить, срывается на домашних.
Ольга, 41 год. Бухгалтер. Полгода нет сил, плохо спит, ничего не радует.
Считает, что это выгорание.
Наталья, 38 лет. Жена Андрея, двое детей. Видит, что муж изменился,
боится за детей и устала сама.
Ирина, 45 лет. Медицинский психолог в кабинете при районной
поликлинике и консультант филиала фонда.
Точки входа
Ветераны сами почти не приходят, поэтому для них важнее проактивные
входы: при выписке, через фонд, через семью и сослуживцев. Людей с
депрессией сервис ловит там, где они уже бывают: в приложениях Сбера и на
диспансеризации.
Page 3 of 14
Сервис поддержки при ПТСР и депрессии — концепция и CJM
Точка входа Сегменты Как человек попадает в Тип
сервис
Выписка из госпиталя Ветераны QR-код в выписке, Проактивный
после ранения короткий модуль «что
нормально после
возвращения»
Социальный Ветераны, Ссылка на первичной Проактивный
координатор фонда семьи беседе, первая анкета
«Защитники вместе с
Отечества» координатором
Углублённая Ветераны, Короткий скрин перед Проактивный
диспансеризация и депрессия визитом к терапевту,
диспансеризация результат уходит в
карточку
Приём у терапевта Депрессия, Врач даёт ссылку на Проактивный
поликлиники ветераны скрининг или на
мониторинг между
визитами
Ветеранские Ветераны Ссылка «от своего», Проактивный
организации, peer- совместный первый
консультанты вход
Приглашение от Ветераны Персональная ссылка Проактивный
близкого из семейной ветки
сервиса
СберЗдоровье, Депрессия, Самотест «Как вы на Реактивный
СберБанк Онлайн семьи самом деле?» в разделе
здоровья
Госуслуги, чат-бот Ветераны, Сценарий Реактивный
фонда семьи «Психологическая
поддержка» ведёт в
сервис
Бот в мессенджере Все Анонимный вход без Реактивный
MAX или Telegram регистрации, в любое
время
Горячие линии Все После звонка — Реактивный
предложение
мониторинга в сервисе
Page 4 of 14
Сервис поддержки при ПТСР и депрессии — концепция и CJM
Интеграции с Госуслугами, СберЗдоровьем и региональными системами
записи — гипотезы. Их нужно подтвердить с владельцами каналов до питча.
Модель ступенчатой помощи
Все входы ведут в один скрининг, а триаж распределяет людей по четырём
уровням помощи. Кризисный сигнал на любом шаге идёт мимо триажа сразу к
человеку.
ступенчатая помощь · 4 уровня и кризисная ветка
Шкалы: PC-PTSD-5 и PCL-5 — ПТСР, PHQ-9 — депрессия, GAD-7 — тревога, AUDIT-C
— алкоголь, плюс отдельный скрин суицидального риска. Русскоязычные
валидированные версии и пороги между уровнями утверждает медицинский
эксперт.
CJM: ветеран боевых действий (Андрей)
Ключевой момент пути — первые 3–12 месяцев после возвращения, когда
симптомы нарастают, а за помощью Андрей не идёт. Сервис должен появиться
в его жизни раньше кризиса и говорить с ним на равных.
Page 5 of 14
Сервис поддержки при ПТСР и депрессии — концепция и CJM
Этап Что делает и Барьер Что делает сервис Метрика
чувствует
1. Возвращение (0–3 Рад быть дома, занят Проблему не видит QR-код при выписке и в Доля
мес.) выплатами и фонде. Модуль «что подключившихся из
документами. «Всё нормально после контактов фонда и
нормально» возвращения» без слов госпиталя
«расстройство» и
«психолог»
2. Нарастание (3–12 Плохо спит, пьёт, Стигма: «я не псих» Check-in раз в 2–4 недели Доля ответивших на
мес.) срывается. про сон, повторный check-in
«Гражданские не раздражительность,
понимают» алкоголь. Сигнал от
семьи
3. Первый контакт Пишет ночью в Страх, что данные Анонимный режим. Конверсия «вход →
мессенджер. уйдут в часть, Прямо объясняет, кто начало скрининга»
«Посмотрю, что это» работодателю, видит данные и что
лишат прав на консультация — не учёт
оружие и вождение
4. Скрининг Отвечает на Длинные анкеты, Короткие блоки: PC-PTSD- Доля завершивших
вопросы в диалоге недоверие к 5, PCL-5, AUDIT-C, скрин скрининг
«тестам» суицидального риска.
Объясняет результат
простым языком
5. Маршрутизация и Выбирает, к кому Далеко, очереди, Предлагает уровень Конверсия «скрининг
запись идти неудобное время помощи. Вариант → запись → визит»
«сначала поговорить с
ветераном-
консультантом». Запись
к психологу фонда или в
кабинет, онлайн-
консультация. Карточка
уходит специалисту
только с согласия
6. Помощь Ходит на Бросает после 1–2 Напоминания, дневник Удержание в терапии
консультации, визитов, побочные сна, отметки о приёме через 3 месяца
возможно, эффекты лекарств, вопросы для
принимает врача
лекарства
7. Мониторинг и Работает, Рецидивы на Check-in раз в месяц. При Динамика баллов PCL-
возвращение к переобучается, годовщинах и при ухудшении — повторный 5, доля рецидивов
жизни живёт с семьёй стрессе триаж. Связка с мерами
фонда: переобучение,
трудоустройство
Кризисная ветка работает на любом этапе. Суицидальные мысли или угроза
насилия запускают жёсткое правило, а не генерацию модели: немедленная
передача человеку — дежурному специалисту или на горячую линию, при
угрозе жизни — 112.
Page 6 of 14
Сервис поддержки при ПТСР и депрессии — концепция и CJM
CJM: человек с депрессией или тревогой (Ольга)
Ольга теряется на двух этапах: она не узнаёт в своём состоянии депрессию, а
начав лечение, бросает его до того, как оно подействует. Сервис нужен на
входе как «зеркало» и в лечении как опора.
Этап Что делает и чувствует Барьер Что делает сервис Метрика
1. Симптомы Нет сил, плохо спит, Не распознаёт Просветительский Охват контентом
ничего не радует. депрессию контент в
«Просто устала, надо СберЗдоровье:
взять себя в руки» признаки депрессии
простым языком
2. Триггер Видит баннер, Нет повода Самотест из 2 вопросов Охват скринингом
проходит остановиться (PHQ-2) в приложении
диспансеризацию, или перед визитом к
слышит от подруги терапевту
3. Скрининг Отвечает на PHQ-9 и Стыд, страх Объясняет разницу Доля завершивших
GAD-7 в диалоге «поставят на учёт» между консультацией и скрининг
диспансерным
наблюдением, кто
увидит результат
4. Узнаёт, что с ней, и что «В психдиспансер не Лёгкая степень — Конверсия «скрининг
Маршрутизация можно сделать пойду» самопомощь и онлайн- → запись → визит»
психолог. Умеренная —
кабинет медико-
психологической
помощи или
психотерапевт.
Тяжёлая — психиатр.
Запись и напоминание
5. Лечение Психотерапия, Эффект не сразу, Объясняет ожидаемые Приверженность
возможно, побочные эффекты, сроки, напоминает о лечению через 3
антидепрессанты бросает приёме, фиксирует месяца
побочные эффекты для
врача
6. Поддержание Возвращается к Ранние признаки PHQ-9 раз в месяц. При Динамика PHQ-9,
ремиссии обычной жизни рецидива не росте баллов — сигнал доля рецидивов
замечает врачу и повторный
триаж
Кризисная ветка та же, что у ветерана: ответ на суицидальные мысли — сразу
живой человек.
CJM: член семьи ветерана (Наталья)
Наталья — самый короткий путь к Андрею и одновременно отдельный пациент.
Сервис помогает ей самой, учит говорить с мужем и ставит её безопасность
выше задачи «привести его к врачу».
Page 7 of 14
Сервис поддержки при ПТСР и депрессии — концепция и CJM
Этап Что делает и Барьер Что делает Метрика
чувствует сервис
1. Замечает Муж Не знает, норма ли Вход «Я близкий Доля входов
изменения срывается, это. Боится ветерана». Чек- через семейную
пьёт, не спит. спровоцировать лист признаков: ветку
«Пройдёт», конфликт что ожидаемо,
«боюсь за что требует
детей» помощи
2. Ищет Спрашивает Противоречивые Объясняет, как Доля
информацию подруг, фонд, советы проявляется дочитавших
интернет ПТСР, когда модуль
нужен врач,
когда звонить
112
3. Помощь себе Понимает, что «Сейчас не до Свой короткий Доля членов
истощена сама меня» скрининг: PHQ-9, семей,
GAD-7. Запись к получивших
психологу для помощь сами
неё, для детей
— к педагогам-
психологам
фонда
4. Разговор с Хочет Муж отказывается, Сценарии Конверсия
мужем предложить разговор разговора без приглашений
помощь кончается ссорой ярлыков. во вход
Персональная ветерана
ссылка-
приглашение
для мужа.
Вариант через
ветерана-
консультанта
5. Муж начал Срывы, усталость, Поддержка Удержание
Сопровождение ходить к откаты семьи, семьи в сервисе
специалисту информация о через 3 месяца
мерах фонда,
группы для
близких
Безопасность важнее мотивации. При признаках домашнего насилия сервис
не уговаривает «потерпеть» и не делает приоритетом лечение мужа. Он даёт
контакты кризисных служб и 112.
Page 8 of 14
Сервис поддержки при ПТСР и депрессии — концепция и CJM
CJM: врач и медицинский психолог (Ирина)
Для Ирины сервис ценен, если экономит время на приёме и не добавляет
работы. Поэтому он живёт внутри её привычной системы, а не в отдельном
кабинете, и шлёт сигналы только при ухудшении.
Этап Что делает Боль Что делает Метрика
сервис
До приёма Готовится к Анамнез Карточка Доля приёмов
первичной собирается с пациента: с готовой
консультации нуля жалобы его карточкой
словами, баллы
шкал,
алкоголь,
красные флаги,
ожидания от
помощи
На приёме Консультирует, Нет График баллов Время
назначает план динамики, и сна за период первичного
только мониторинга приёма
«сейчас»
После Задаёт, как Нет Врач выбирает Доля
приёма наблюдать инструмента шкалы и пациентов с
пациента наблюдения частоту check- планом
in для мониторинга
пациента
Между Работает с Поток Сигнал только Доля ложных
визитами другими данных, на при ухудшении сигналов
пациентами который нет или кризисе, по
времени порогам,
согласованным
с
медэкспертом
Отчётность Вносит данные Двойной Выгрузка Время на
в медицинскую ввод карточки и документацию
систему динамики в
региональную
МИС
Page 9 of 14
Сервис поддержки при ПТСР и депрессии — концепция и CJM
Главные возражения специалистов: «ИИ ставит диагнозы», «кто отвечает за
пропущенный сигнал», «ещё один кабинет». Ответ: сервис только собирает
данные и маршрутизирует, пороги задаёт врач, интеграция — в существующую
систему.
Путь заказчика B2G
Покупают регион и фонд, а решение принимают главный внештатный психиатр
и региональный ИТ-оператор. Поэтому продажа идёт через пилот с измеримым
эффектом, а не через демо.
1. Выявление потребности. Региональный минздрав или филиал фонда
видит очереди и нехватку специалистов. Участники: министр или
замминистра, главный внештатный психиатр, руководитель филиала фонда.
2. Пилот. Один-два района или один филиал фонда, 3–6 месяцев. Нужны:
согласованный маршрут, протокол кризисной эскалации, договор с
оператором данных.
3. Оценка. Конверсия в визит, удержание, нагрузка на специалистов,
динамика шкал, отзывы врачей.
4. Включение в программу. Региональная программа поддержки ветеранов
или программа психического здоровья, госзакупка.
5. Масштабирование. Другие районы, затем другие регионы через фонд как
федеральный канал.
До пилота нужны ответы на три вопроса: соответствие 152-ФЗ и аттестация
информационной системы; не попадает ли сервис под регистрацию как
программное медицинское изделие; кто оператор данных — Сбер, регион или
медицинская организация.
Архитектура, данные и 152-ФЗ
Языковая модель только ведёт разговор. Баллы считаются по формулам шкал,
кризис ловят правила, а данные делятся на анонимный и персональный контур.
Page 10 of 14
Сервис поддержки при ПТСР и депрессии — концепция и CJM
архитектура · 4 слоя от каналов до получателей
Данные о здоровье — специальная категория персональных данных по 152-ФЗ.
Из этого следует:
Отдельное явное согласие на обработку данных о здоровье, которое можно
отозвать в один шаг.
Хранение и обработка в РФ, модель в российском контуре.
Анонимный режим по умолчанию: без ФИО до момента записи.
Минимизация: специалист видит карточку своего пациента, заказчик —
только обезличенную статистику.
Честное объяснение врачебной тайны: данные не передаются без согласия,
кроме случаев, прямо предусмотренных законом. Перечень таких случаев
проверяет юрист: от этого зависит доверие ветеранов.
Метрики
Главная метрика — доля людей с положительным скринингом, дошедших до
специалиста. Остальные показывают, где воронка теряет людей и не страдает
ли безопасность.
Page 11 of 14
Сервис поддержки при ПТСР и депрессии — концепция и CJM
Группа Метрика Зачем
Охват Входы по каждой точке и Какие каналы работают
сегменту
Воронка Вход → скрининг → Где теряем людей
завершение → запись → визит
Удержание Доля в терапии и Сервис нужен дольше
мониторинге через 3 и 6 одного раза
месяцев
Клинический Доля с клинически значимым Помощь работает, а не
эффект снижением баллов PCL-5 и просто записывает
PHQ-9
Безопасность Время от кризисного сигнала Сервис не создаёт ложного
до контакта с человеком, ощущения защиты
доля пропущенных кризисов
Нагрузка на Доля случаев, закрытых на Специалисты заняты теми,
систему уровнях самопомощи и кому нужны
психолога
Специалисты Доля приёмов с карточкой, Врачи пользуются, а не
доля ложных сигналов, терпят
оценка врачей
Семьи Конверсия приглашений во Семейный канал работает
вход ветерана
Целевые значения нужно задать вместе с заказчиком и медицинским
экспертом до пилота.
Риски и ограничения
Самый опасный риск — пропущенный кризис. Самый вероятный — сервис
нарастит спрос, а специалистов в регионе не хватит.
Page 12 of 14
Сервис поддержки при ПТСР и депрессии — концепция и CJM
Риск Почему важно Как снижаем
Пропуск кризиса Цена ошибки — жизнь Правила поверх модели,
дежурный человек,
тестирование на
сценариях вместе с
медэкспертом
Модель «ставит диагноз» Юридическая и Жёсткие рамки ролей,
или даёт медицинские клиническая шаблонные ответы на
советы ответственность клинические вопросы,
проверка медэкспертом
Страх учёта и утечки Ветераны не войдут или Анонимный контур,
данных не будут честны явное согласие,
прозрачно объяснено,
кто что видит
Статус медицинского Может потребоваться Консультация юриста. В
изделия регистрация до запуска MVP — скрининг и
навигация без
клинических решений
Нехватка мест у Человек дошёл, а Согласовать мощности с
специалистов записаться некуда регионом, развивать
самопомощь, группы и
онлайн-формат
Недоверие к «госботу» Ветеран закроет чат Язык равного, peer-
после первого сообщения консультанты, вход
через ветеранские
организации
Домашнее насилие Мотивация «помочь мужу» Протокол безопасности
может навредить семье в семейной ветке
Скоуп MVP
MVP начинается с ветеранов и их семей в одном канале, а депрессия в общей
популяции идёт второй волной. Так проще получить пилот через фонд и
показать эффект.
Входит в MVP:
Бот в одном мессенджере, анонимный вход и вход «Я близкий».
Page 13 of 14
Сервис поддержки при ПТСР и депрессии — концепция и CJM
Диалоговый скрининг: PC-PTSD-5, PCL-5, PHQ-9, AUDIT-C, скрин суицидального
риска.
Триаж по уровням и кризисная ветка на правилах.
Запись к специалисту — в прототипе имитация, в пилоте интеграция с одной
системой.
Карточка пациента для специалиста, передаётся с согласия.
Check-in раз в 2 недели и сигнал специалисту при ухудшении.
Семейная ветка: признаки, сценарии разговора, приглашение.
Не входит в MVP: интеграция с Госуслугами и СберЗдоровьем, сегмент
депрессии в общей популяции, выгрузка в региональную МИС, аналитика для
заказчика.
Открытые вопросы к знакомым:
Есть ли выход на фонд «Защитники Отечества» или региональный минздрав
для пилота?
Кто медицинский эксперт, который утвердит шкалы, пороги и протокол
кризиса?
Какие русскоязычные валидированные версии шкал будут использоваться?
Нужна ли регистрация как медицинского изделия — вопрос юристу.
Page 14 of 14