[contract] Контракты этапа 1: диалог, API-схемы + фикстуры, адаптеры, сервис мониторинга, модули #34
Notifications
Due Date
No due date set.
Blocks
#10 [bot][A] Движок диалога: конвейер scrub → safety → FSM → мониторинг, согласие, возраст, кризис
MedITron/PTSRaiAgent
#15 [bot][A] med_qa: ответы о препарате только по выдержкам ГРЛС
MedITron/PTSRaiAgent
#14 [backend][B] Адаптеры: mis_mock, esia_mock, ГРЛС-выдержки, notify, outbox
MedITron/PTSRaiAgent
#19 [bot][A] LLM-саммари динамики для врача по структурированным данным
MedITron/PTSRaiAgent
#18 [backend][B] seed: ветеран Андрей (13 дней) + 7 пациентов кабинета
MedITron/PTSRaiAgent
#16 [dashboard][C] Дашборд врача: список «красных зон», карточка, алерты в реальном времени, «Подключить пациента»
MedITron/PTSRaiAgent
Reference: MedITron/PTSRaiAgent#34
Reference in New Issue
Block a user
Описание
Contract-first (регламент TenVex, «вертикальный срез»): до параллельной работы трёх разработчиков замораживаем интерфейсы между зонами, чтобы lane A/B/C шли одновременно без правок чужих файлов. Делает координатор (Claude), мержится первым.
Желаемый результат
app/dialog/contracts.py:Event(text | button | system: med_reminder, daily_checkin, scale_due, reach_out),Reply(text, buttons, kind),DialogEngineProtocolhandle(token, event) -> list[Reply],get_engine()(заглушка-эхо до #10).app/integrations/base.py:PrescriptionSource,IdentityProvider,Notifier,DrugInfo,Outbox(доставка реплик в канал) + простые in-memory реализации по умолчанию.app/services/contracts.py:MonitoringServiceProtocol —after_data_change(token) -> list[Action](персистит алерты/кризис и уведомляет врача сам; возвращает диалоговые действия для движка), заглушка.app/api/schemas.py(pydantic) +app/api/routes.pyсо всеми ручками этапа 1, отдающими детерминированные фикстуры (app/api/fixtures.py) — дашборд пишется против них с первой минуты.app/main.pyуже подключает router,scheduler.start/stop,channels.telegram.start/stop(заглушки) — никому не нужно править main.config/modules.yaml+app/core/modules.py: модули veteran / depression / family (стартовые шкалы, расписание, ежедневный вопрос);config/scales/dar5.yaml.tzdataв зависимостях. Траектория Андрея по дням — вdocs/product/01_demo_persona.md. Зоны A/B/C — вdocs/dev/WORKFLOW.md, ADR-010.Лог выполнения
2026-10-03
app/dialog/contracts.py:Event,Reply,Button,DialogEngine,register_engine/get_engine(по умолчанию заглушкаEchoEngine);app/integrations/base.py: протоколыPrescriptionSource,IdentityProvider,Notifier,DrugInfo,Outbox+ in-memory реализации и реестрintegrations;app/services/contracts.py:MonitoringService(after_data_change,is_in_crisis), заглушкаNoopMonitoring;app/api/schemas.py+routes.py: все ручки/api/v1этапа 1, отдают фикстуры (app/api/fixtures.py: Андрей на 13-м дне + 7 пациентов);app/main.py: подключены router,scheduler.start/stop,telegram.start/stop;config/modules.yaml,app/core/modules.pyсdue_scales(), шкалаconfig/scales/dar5.yaml, зависимостьtzdata.docs/product/01_demo_persona.md, зоны A/B/C в WORKFLOW, ADR-010.make lint test— 471 passed.find_spec, а неtry/except ImportError, чтобы ошибки импорта внутри них не проглатывались.