[backend][B] API этапа 1: реальная реализация вместо фикстур #12
Notifications
Due Date
No due date set.
Blocks
Depends on
#6 [backend] Модель данных: identity / clinical / audit, репозитории, create_all
MedITron/PTSRaiAgent
#14 [backend][B] Адаптеры: mis_mock, esia_mock, ГРЛС-выдержки, notify, outbox
MedITron/PTSRaiAgent
Reference: MedITron/PTSRaiAgent#12
Reference in New Issue
Block a user
Описание
Контракт-PR создал
app/api/schemas.pyи ручки с фикстурами; здесь — реальная логика при тех же схемах (схемы не менять без contract-PR). Каждое чтение карточки →audit_log(view_patient).Желаемый результат
/api/v1: список пациентов врача (цвет, PHQ-9/PCL-5, тренд, приверженность 7 дн., индекс риска прерывания терапии, день терапии, последнее событие), карточка (ряды шкал, настроение/сон/алкоголь, дозы, алерты, план безопасности, саммари изapp/llm/summary.py), ack алерта (+аудит), поллинг новых алертов, подключение пациента (назначение → mis_mock, код/QR), сообщения/кнопки в диалог →get_engine(), история + outbox, демо-часы (advance/reset). Тестыtests/test_api_*.py.Зона и владение файлами
Lane B (backend) — владеет:
app/api/**(кромеschemas.py),app/services/**,app/scheduler/**,app/integrations/**(кромеbase.py),app/db/**,scripts/**,data/**,tests/test_api*.py,tests/test_services*.py,tests/test_scheduler*.py,tests/test_seed*.py,tests/test_integrations*.py.Замороженные контракты (менять только отдельным мелким PR с пингом всех):
app/core/types.py,app/dialog/contracts.py,app/api/schemas.py,app/integrations/base.py,app/services/contracts.py,app/main.py,app/config.py,config/modules.yaml,config/rules.yaml,config/scales/*,pyproject.toml/uv.lock,docker-compose.yml,Makefile.Лог выполнения
2026-10-04
2026-10-04
Что сделано
app/api/routes.py: все ручки/api/v1читают identity/clinical БД вместо фикстур; пути и схемы (schemas.py) не менялись.app/api/doctor_views.py: строка списка (цвет по открытым алертам ADR-006, PHQ-9/PCL-5, тренд, приверженность 7 дн., день терапии, последнее событие), карточка (ряды настроение/сон по серединам бакетов/алкоголь 0/1/2, шкалы с флагом unscheduled, дозы, алерты, план безопасности изsafety_plans), детерминированный индекс риска прерывания терапии (веса задокументированы в коде).app/api/demo.py: персоны по файламdata/synthetic/<slug>.jsonl, reset (часы + outbox +scripts.seed_demo.reset()если есть), deep link (t.me/<bot>?start=если бот запущен, иначе/console?code=), поиск MemoryOutbox за TelegramOutbox.Event(system="doctor_ack")в движок (если острых открытых больше нет), ответ уходит в outbox, статус пересчитывается.connect_patient.view_patient_list,view_patient,view_patient_denied,view_alerts(только если отданы новые алерты),ack_alert,connect_patient.tests/test_api_doctor.py(8),tests/test_api_dialog.py(9);tests/test_contracts.py::test_api_fixture_routesзаменён (роуты больше не отдают фикстуры).Результат
make lint testзелёные (796 passed). Веткаfeat/12-api.Заметки/решения
app/config.pyне трогал: username бота берётся у запущенного aiogram-бота (bot.me())./demo/personas(там фикстура → берите реализацию из dev); строки include роутеров мержатся чисто.[backend] API: пациенты, карточка, алерты/ack, подключение пациента, сообщения, демо-часыto [backend][B] API этапа 1: реальная реализация вместо фикстур