Files
PTSRaiAgent/CLAUDE.md
T
ElebobaandClaude Opus 5.5 b4731fb1d6
CI / ruff · pytest (pull_request) Successful in 22s
chore(core): stage 1 contracts — dialog, API schemas + fixtures, integrations, monitoring, modules
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>
2026-10-03 15:22:25 +03:00

81 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`. **Фокус хакатона — ветераны СВО** (эпик #35, демо — ветеран Андрей); семьи и общая популяция — опциональные направления на будущее (ADR-010).
ИИ не ставит диагнозы и не лечит: 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. **Зоны — слои, а не направления:** lane A бот · lane B backend · lane C дашборд (владение файлами — `docs/dev/WORKFLOW.md`). Контракты между ними заморожены (#34) — правка только PR `[contract]`.
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 / Госуслуги.