Навигатор клинических протоколов Минздрава РБ и ориентировочная проверка консультативных заключений (КЗ).
Документ для методслужбы, разработки и интеграции с МИС: три функциональных блока, конвейер чанков, уровни проверки L0-L2, поиск S0-S2. Развёртывание - локальные серверы в контуре клиники или оператора; языковые модели - доработанные on-prem, без передачи ПДн во внешние API.
Protocol - не «один скрипт», а три связанных блока. Каждый блок можно развивать и масштабировать отдельно; на стыках - JSON/API и общий идентификатор PDF протокола (source_path).
принцип Итоговый gate_score и send_gate определяются детерминированным слоем. Нейросетевой слой (embedder, reranker, narrative) ускоряет поиск и поясняет отчёт, но не подменяет правила и не меняет gate без явной политики.
Официальный каталог PDF на minzdrav.gov.by (~478 документов, 24 рубрики). Синхронизация: download_minzdrav_protocols.py → каталог minzdrav_protocols/.
index.csv, protocols.json, protocol_meta.json - реестр и метаданные файлов.data/catalog/ - 85 нозологий, 482+ автоизвлечённых правил для rule_checker.data/protocol_summaries/ - YAML/JSON карточки протоколов для навигации и расширения правил.config/ - веса 8 блоков scoring, red flags, требования к структуре КЗ.| Конвейер | Скрипт | Назначение | Выход |
|---|---|---|---|
| Legacy (скользящее окно) | extract_corpus.py → build_chunks.py | Быстрый полнотекстовый поиск по клинической части PDF | corpus_chunks_parts/*.jsonl, ~55k записей |
| Rich (смысловой) | scripts/build_rich_chunks.py | Разделы, типы, МКБ, сущности, tags - для L1/L2 и rule_checker | output/rich_chunks/rich_chunks.jsonl + паспорт output/rich_meta/{doc_id}.json |
| Pipeline v2 | corpus_pipeline/run_pipeline | Таблицы, entities, нормализация секций | output/chunks/ |
Path-scoped lex shards, BM25 (retrieval_bm25.py), опционально vector prefilter (vector_index.py) на предвычисленных эмбеддингах чанков (локальная embedder-модель). Маршрутизация по симптомам: symptom_routing.json. На production: lazy chunk store - manifest corpus_path_manifest.jsonl, чанки с диска по source_path, без загрузки всего корпуса в RAM (RAG_LAZY_CHUNK_STORE=1).
Каталог clinical_knowledge/ (~118 модулей). Публичный статус: /api/clinical-knowledge/status.
| Подблок | Модули | Роль в анализе КЗ |
|---|---|---|
| Схемы | consult_schema.py | ConsultationDocument, ComplianceReport, 8 блоков |
| Парсинг | consult_parser.py, text_extract.py, fhir_bundle_adapter.py | PDF / TXT / FHIR Bundle → структура КЗ |
| Подбор КП | protocol_match.py, diagnosis_icd.py | МКБ-10 → список протоколов-кандидатов |
| Правила | rule_checker.py, rules_from_path.py | 482+ правил из catalog + PDF |
| Scoring | compliance_engine.py, scoring.py, compliance_gate.py | 8 блоков, issues, gate_score, send_gate |
| Alignment | consult_alignment.py, consult_criteria_enrichment.py | Карточки «КЗ ↔ КП ↔ СОП клиники» |
| Evidence | consult_evidence_pack.py, consult_l2_review.py | Выдержки rich chunks только по matched paths |
| ЦИСЗ | cisz_readiness.py | Готовность FHIR Bundle до импорта |
| Поиск КП | search_tiering.py, search_funnel.py | Уровни S0 / S1 / S2 |
Оркестратор анализа: consult_analysis.analyze_consultation_text(). Уровни проверки КЗ: consult_tiering.py. Production pipeline с SSE: consult_review_pipeline.py.
| Блок | Что проверяется |
|---|---|
| Оформление | Структура, реквизиты, подписи, даты |
| Диагноз | МКБ-10, формулировки, соответствие жалобам |
| Обследования | Назначенные исследования vs протокол |
| Лечение | Терапия, дозы, длительность |
| Безопасность | Противопоказания, red flags, взаимодействия |
| Наблюдение | Диспансеризация, контрольные визиты |
| Маршрутизация | Направления, уровень помощи |
| Документы | Полнота секций для ЦИСЗ / МИС |
Python 3.11+, FastAPI, uvicorn. Размещение: on-prem в контуре клиники или частного оператора (Docker). Учётные данные и веса моделей - только в защищённой конфигурации сервера, не в браузере.
Фоновый поток load_data(): manifest чанков, protocols, meta, summary chunks, lex shards по путям. GET /health/live - liveness; GET /health - готовность индексов и tier-флаги.
retrieve(): лексика + BM25 + routing boost + фильтр аудитории + опциональный rerank локальной embedder-моделью. Результат - топ фрагментов с цитатами (source_path, страница, chunk_id).
index.html - проверка КЗ, поиск протоколов, кабинет методиста (?mode=methodist).patient.html - загрузка PDF КЗ, отчёт для пациента, tier-цены.Логотипы: wordmark в шапке документов, mini-emblem в UI вкладок (см. protocol-logo-mini.svg).
Чанк - атомарный фрагмент текста клинического протокола с метаданными. Именно чанки попадают в evidence_map отчёта («цитата из PDF, стр. N») и в retrieval при L1/L2.
build_rich_chunks.py)is_preamble_block, filter_preamble_pages).split_into_sections): заголовки ГЛАВА, ДИАГНОСТИКА, ЛЕЧЕНИЕ, нумерация «1.», «1.1.».split_section_into_chunks): сначала по нумерованным пунктам (POINT_RE), иначе по абзацам; лимит ~1200 символов, минимум ~80.guess_chunk_type) по заголовку секции и тексту.chunk_type=table с caption.protocol_overview) - один на документ: оглавление, counts по типам.build_chunk_tags в chunk_tags.py) - см. таблицу 4.3.rich_chunks.jsonl + паспорт протокола в rich_meta/{doc_id}.json.chunk_type)| Тип | Когда ставится | Использование |
|---|---|---|
protocol_overview | Авто, 1 на PDF | Карточка протокола, навигация |
diagnostics | Раздел диагностики, обследования | Блок «Обследования», evidence pack |
treatment | Лечение, терапия | Блок «Лечение», правила required_exam |
criteria_block | Показания / противопоказания | rule_checker, alignment |
drug_list | Списки препаратов | Фармакотерапия, safety |
pharmacotherapy | Фармакотерапия | Дозы, схемы |
algorithm | Алгоритмы, схемы | Маршрутизация, L1 cards |
table | Таблицы PDF | Структурированные критерии |
prevention, rehabilitation, dispensary | Профилактика, реаб., диспансеризация | Блоки наблюдения / followup |
routing | Маршрутизация, госпитализация | Уровень помощи |
classification | Классификация, МКБ | Диагноз, ICD profile |
terms, body | Определения, прочий текст | Низкий signal, fallback RAG |
tags в chunk_tags.py)| Поле | Значения | Смысл |
|---|---|---|
signal | high / medium / low | Приоритет для retrieval и evidence pack |
obligation | required, recommended, optional, contraindicated | Сила формулировки в протоколе |
clinical_intent | diagnose, treat, monitor, refer, other | Зачем фрагмент в клиническом потоке |
care_setting | ambulatory, inpatient, any | Где применимо |
is_preamble | true / false | Исключить из scoring |
icd10_weights | 0-1 на код | Усиление релевантности по МКБ |
entities | exam, drug | Нормализованные сущности для правил |
extractability | rule_ready / narrative | Готовность к автоматическим правилам |
build_chunks.py)Скользящее окно: 880 символов, перекрытие 120, только клиническая часть PDF (после clinical_start). Поле kind: diagnostic, treatment, general - по эвристике ключевых слов. Подходит для быстрого BM25; rich-чанки - для L1 alignment и цитат с типом секции.
важно На tier L0 полный обход ~55k чанков не выполняется. Это ключ к масштабу 25 000+ КЗ/мес в якорной клинике.
| Уровень | Охват | Содержание | Время | LM / RAG |
|---|---|---|---|---|
| L0 | 100% КЗ в МИС | Парсинг + 8 блоков + send_gate + cisz_readiness | < 2 с | Нет |
| L1 | UI по умолчанию; 10-20% в batch | L0 + alignment + СОП + rich chunks по matched PDF | 5-15 с | Нет полного corpus RAG |
| L2-lite | 2-5% / по кнопке | L1 + evidence pack + narrative (локальная LM) | 15-30 с | Только matched paths |
| L2 full | Лаб / методслужба | Гибридный retrieve по корпусу + synthesize | 30-90 с | On-prem LM, opt-in |
| L3 | 0.5-1% | Ручной аудит методиста по «красному» списку | - | Human-in-the-loop |
gate_score = min(клинический scoring, cisz_score). Режимы МИС: inform, soft_gate, hard_gate, critical_only - политика учреждения, не жёсткое требование Protocol.
| Уровень | Когда | Механизм |
|---|---|---|
| S0 | Известен МКБ | Каталог + фильтры, без retrieve |
| S1 | Default в UI | retrieve (lex + BM25) на lazy index, без narrative LM |
| S2 | Сложный запрос | S1 + уточнение запроса и пояснение локальной LM |
on-prem ML Аддитивный контур поверх lex+BM25+rules. Scoring и send_gate не заменяются.
| Фаза | Артефакт | Эффект |
|---|---|---|
| 1 | Офлайн-эмбеддинги чанков (build_chunk_embeddings.py) | Один forward pass на запрос вместо пула сотен |
| 2 | Vector index (build_vector_index.py) | Top-K векторов → lex/BM25 → rerank |
| 3 | Semantic rule fallback | Синонимы для required_exam после substring-match |
| 4 | consult_tiering L0/L1/L2 | 100% КЗ без LM; LM только на L2-lite/full |
| 5 | Batch enrichment правил | LM-assisted извлечение structured rules → rule_checker |
Дообучение: каталог ml/, feedback data/ml/feedback/, экспорт export_training_feedback.py. Embedder fine-tune on-prem; в production - manifest моделей ml/registry/.
| Система | Роль |
|---|---|
| ЦИСЗ | FHIR BY, структура Bundle, НСИ, импорт пакета |
| Protocol | Клиническое соответствие содержания КЗ протоколам (ориентир, не МЭЭ) |
| МИС | Формирование КЗ, вызов Protocol до ЭЦП, UI врача |
Подробнее: architecture-kravira-fhir-mis-print.html (PDF: architecture-kravira-fhir-mis.pdf).
Отдельный контур для физлиц: загрузка PDF, tier L1, sanitize ответа, ERIP. Тот же scoring и evidence_map, упрощённый язык. См. docs/architecture-b2c-patient.md.
chunk_id, chunk_type, метками и привязкой к странице PDF.build_rich_chunks.py с сущностями, tags и embedding_ready_text.kind: diagnostic / treatment / general.minzdrav_protocols/ - ключ связи правил, чанков и UI.Protocol объединяет три блока: подготовленный корпус с размеченными чанками, детерминированное ядро clinical_knowledge и runtime с tier L0-L2. Масштаб на поток 25 000+ КЗ/мес достижим за счёт L0 на каждом сохранении, выборочного L1/L2 и lazy-загрузки чанков только по релевантным протоколам.
Развёртывание проектируется локально: сервер в контуре клиники, доработанные модели on-prem, без обязательной зависимости от внешних облачных API. Интеграция с МИС - до подписи ЭЦП; ЦИСЗ остаётся контролёром структуры данных, Protocol - ориентиром клинического качества по официальным протоколам.
Protocol · Документ для внутреннего использования, методслужбы и интеграторов МИС. Связанные файлы: architecture-kravira-fhir-mis.pdf, mvp-presentation.html, docs/project-docs-maintenance.md.