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:
@@ -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 (вход «Я близкий», чек-лист, кнопка «сообщить врачу»).
|
||||
**Кейс:** закрываем сценарии «мониторинг после обращения» и «управление приёмом лекарств». Скрининг/триаж — входная точка, а не отдельный третий сценарий.
|
||||
@@ -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}"
|
||||
```
|
||||
@@ -0,0 +1,34 @@
|
||||
# Шаблон тела issue
|
||||
|
||||
Задача самодостаточна: агент, открывший её без контекста, понимает, что делать. Не хватает информации — дополни issue до начала работы.
|
||||
|
||||
```markdown
|
||||
## Описание
|
||||
Почему задача возникла, какую проблему решает, к какой части продукта относится. Ссылки на ADR / SPEC / CLINICAL_MODULES.
|
||||
|
||||
## Желаемый результат
|
||||
Конкретно и проверяемо.
|
||||
|
||||
## Подзадачи
|
||||
- [ ] шаг — файл/модуль
|
||||
|
||||
## Анализ
|
||||
### Затрагиваемые файлы
|
||||
| Файл | Что меняется |
|
||||
|---|---|
|
||||
|
||||
### Ограничения и риски
|
||||
152-ФЗ, safety, детерминизм, демо-часы, офлайн-режим.
|
||||
|
||||
### Архитектурный выбор
|
||||
Если есть развилка — варианты и выбор.
|
||||
|
||||
## Как проверить
|
||||
Команды / сценарий в демо-консоли / ожидаемый результат.
|
||||
|
||||
---
|
||||
|
||||
## Лог выполнения
|
||||
```
|
||||
|
||||
> Зависимости — только через API. Лог — секция `### YYYY-MM-DD` за каждую сессию. Issue закрывается мержем PR с `Closes #N`.
|
||||
@@ -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 @файл` |
|
||||
@@ -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 рус.). Пока не подтверждено — в прототипе помечаем «демо-текст, лицензия на проверке».
|
||||
@@ -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 на хакатоне (ключи от организаторов?).
|
||||
- Номер и детали приказа о диспансеризации ветеранов СВО — медик из госсистемы.
|
||||
@@ -0,0 +1,7 @@
|
||||
# Идеи команды
|
||||
|
||||
## 1. Фокус на психиатрии и ментальных расстройствах
|
||||
Обычные трекеры требуют высокой мотивации, которой у пациентов с депрессией просто нет. Если сфокусироваться на психиатрическом профиле, можно создать систему, которая не просто «звенит», а использует поведенческие паттерны. Например, ИИ-ассистент, который по характеру ответов или активности в приложении понимает, что пациент близок к отказу от терапии (например, при подборе антидепрессантов в первые недели, когда побочки уже есть, а эффекта ещё нет), и сигнализирует об этом лечащему врачу.
|
||||
|
||||
## 2. Предиктивная аналитика для врача (дашборд)
|
||||
Главная проблема текущих систем — врач изолирован от данных пациента. Акцент на интерфейсе лечащего врача. Система агрегирует данные о комплаенсе и подсвечивает специалисту «красные зоны»: какие пациенты находятся в группе риска по прерыванию терапии. Алгоритм анализирует риски, но окончательное решение об изменении терапии принимает врач (что снимает часть этических и юридических проблем атрибуции ответственности ИИ).
|
||||
@@ -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 с
|
||||
@@ -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.
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user