Freeze interfaces between lanes A (bot), B (backend), C (dashboard) so three developers work in parallel without touching each other's files: dialog Event/Reply + engine registry with echo stub, integration protocols with in-memory defaults, MonitoringService with noop stub, /api/v1 schemas with fixture-backed routes, frozen main.py wiring, config/modules.yaml + due_scales(), DAR-5, tzdata, Andrey trajectory, lanes in WORKFLOW, ADR-010. Refs #34 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
6.0 KiB
CLAUDE.md — Руководство для Claude Code
⚡ ПЕРВОЕ ДЕЙСТВИЕ В КАЖДОЙ СЕССИИ
set -a; . ./.env 2>/dev/null; set +a
Переменные: GITEA_USER (кто я), GITEA_TOKEN (секрет — в чат не печатать), GITEA_URL, GITEA_REPO.
Что мы строим
Хакатон MedITron, кейс SberMed AI «ИИ-помощник пациента». Сопровождение восстановления между визитами к врачу при ПТСР и депрессии (фокус — ветераны СВО и их семьи): мониторинг после обращения + управление приёмом лекарств. Общее ядро + модули veteran / depression / family. Фокус хакатона — ветераны СВО (эпик #35, демо — ветеран Андрей); семьи и общая популяция — опциональные направления на будущее (ADR-010).
ИИ не ставит диагнозы и не лечит: LLM извлекает данные и формулирует реплики, риск и алерты решают детерминированные правила, клинические решения — врач.
Дедлайн: пн 05.10.2026, 13:00 МСК. Критерии жюри: работоспособность, функциональность, дизайн, клинико-экономика, клиентский путь.
Язык общения — русский. Код, идентификаторы, коммиты — английский. Тексты для пациента — в config/texts/, не в коде.
Карта документации
Задачи — в Gitea Issues, не в файлах.
| Файл | О чём |
|---|---|
docs/info/SPEC.md |
Исходная спецификация: право (152-ФЗ, 323-ФЗ), архитектура, модель данных, шкалы, LLM-контракт, FSM |
docs/info/CLINICAL_MODULES.md |
Ядро + модули: шкалы, расписания, триггеры, обоснования |
docs/DECISIONS.md |
ADR — отступления от SPEC. При конфликте важнее SPEC |
docs/product/ |
Идеи команды, демо-персона и сценарий, требования хакатона |
docs/source/ |
Кейс SberMed AI, концепция и CJM (pdf + txt) |
docs/dev/WORKFLOW.md |
Регламент: зоны, жизненный цикл, worktree, ветки, PR |
docs/dev/GITEA_API.md |
Gitea API: issue, PR, зависимости |
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 — командная работа
.env— первым делом.- Задача = Issue в Gitea. Нет issue — нет кода.
- Зоны — слои, а не направления: lane A бот · lane B backend · lane C дашборд (владение файлами —
docs/dev/WORKFLOW.md). Контракты между ними заморожены (#34) — правка только PR[contract]. - Задача = свой worktree (
.claude/worktrees/<issue#>-<slug>), ветка отorigin/dev— до первого изменения. PR вdev;main— только человек. - Завершил → сразу push + PR, после зелёного CI можно мержить самому (хакатон).
- Лог — в тело issue (
### YYYY-MM-DD); архитектурные решения — вdocs/DECISIONS.md.
Запуск
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 / Госуслуги.