feat(bot): LLM-саммари динамики для врача #49

Merged
Eleboba merged 1 commits from feat/19-doctor-summary into dev 2026-10-03 15:34:46 +03:00
Owner

Что меняется

LLM-саммари динамики для врача только по структурированным данным карточки (SPEC §7 п.4). build_structured(card) детерминированно агрегирует PatientCard в числа и флаги без текста пациента и без имени. build_summary(card) отдаёт это в gateway.summarize_for_doctor и возвращает 3–5 строк. Есть запасной шаблон (config/texts/summary.yaml), правило «безопасность первой строкой» и кэш под поллинг дашборда.

Closes #19

Зона

A

Как проверить

uv run pytest -q tests/test_llm_summary.py
uv run python -c "import asyncio; from app.api import fixtures; from app.llm.summary import build_summary; print(asyncio.run(build_summary(fixtures.andrey_card())))"

Для lane B (#12): card.summary = await build_summary(card).

Чек-лист

  • rebase на origin/dev
  • make lint + make test зелёные
  • лог в issue (### YYYY-MM-DD)
  • нет ПДн в логах, нет реальных данных, нет секретов
  • общие файлы не тронуты
## Что меняется LLM-саммари динамики для врача только по структурированным данным карточки (SPEC §7 п.4). `build_structured(card)` детерминированно агрегирует `PatientCard` в числа и флаги без текста пациента и без имени. `build_summary(card)` отдаёт это в `gateway.summarize_for_doctor` и возвращает 3–5 строк. Есть запасной шаблон (`config/texts/summary.yaml`), правило «безопасность первой строкой» и кэш под поллинг дашборда. Closes #19 ## Зона A ## Как проверить ``` uv run pytest -q tests/test_llm_summary.py uv run python -c "import asyncio; from app.api import fixtures; from app.llm.summary import build_summary; print(asyncio.run(build_summary(fixtures.andrey_card())))" ``` Для lane B (#12): `card.summary = await build_summary(card)`. ## Чек-лист - [x] rebase на origin/dev - [x] make lint + make test зелёные - [x] лог в issue (### YYYY-MM-DD) - [x] нет ПДн в логах, нет реальных данных, нет секретов - [x] общие файлы не тронуты
Eleboba added 1 commit 2026-10-03 15:34:07 +03:00
feat(bot): add doctor summary built from structured card data
CI / ruff · pytest (pull_request) Successful in 24s
49d5f8a4e5
build_structured() aggregates a PatientCard into scores, flags and
adherence (no patient text, no names); build_summary() sends it through
the LLM gateway, falls back to a config-driven template, keeps an open
acute alert first and caches per (token, provider, data hash).

Refs #19

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Eleboba merged commit 67cfe29c58 into dev 2026-10-03 15:34:46 +03:00
Eleboba deleted branch feat/19-doctor-summary 2026-10-03 15:34:47 +03:00
Sign in to join this conversation.