Разработка AI-системы автоматического кодирования диагнозов (МКБ-10/ICD)
Кодирование диагнозов по МКБ-10 — кропотливая рутинная работа медицинских кодировщиков. AI-система ускоряет и стандартизирует этот процесс, снижая вариабельность между специалистами.
Задача и сложность
МКБ-10 содержит ~14 000 кодов, организованных иерархически. Один диагноз в свободном тексте — «сахарный диабет 2 типа с осложнениями, диабетическая нефропатия» — может кодироваться как E11.2+ (первичный + манифестация), E11.65, или комбинацией кодов в зависимости от правил кодирования.
Источники сложности:
- Неоднозначность терминологии
- Комбинированные диагнозы (основное заболевание + осложнения + сопутствующие)
- Правила «звёздочка и кинжал» (†/*)
- Локальные стандарты кодирования клиники
Архитектура системы
Многометочная классификация (первый подход): каждый возможный код — отдельный класс. Не масштабируется для 14K классов — классы с редкими диагнозами плохо обучаются.
Иерархическая классификация: сначала глава МКБ (A-Z), затем блок, затем конкретный код. Сужает пространство поиска на каждом уровне.
Retrieve-then-rerank (лучший подход):
- Нечёткий поиск по базе МКБ-описаний (BM25 + semantic)
- Cross-encoder ранжирует топ-20 кандидатов по релевантности тексту диагноза
class DiagnosisCoding(BaseModel):
primary_code: str # основной код МКБ-10
primary_description: str
secondary_codes: list[str] # коды осложнений/сопутствующих
confidence: float
dagger_asterisk: bool # требует ли двойного кодирования
notes: str | None # почему именно этот код
def code_diagnosis(diagnosis_text: str) -> DiagnosisCoding:
# Шаг 1: Нормализация медицинских терминов
normalized = medical_normalizer.normalize(diagnosis_text)
# Шаг 2: Поиск кандидатов
candidates = icd_searcher.search(normalized, top_k=20)
# Шаг 3: LLM выбирает правильный код с объяснением
return llm.parse(
build_coding_prompt(diagnosis_text, candidates),
response_format=DiagnosisCoding
)
База МКБ-10 для поиска
Официальная база МКБ-10 (minzdrav.gov.ru) + синонимы медицинских терминов. Каждый код индексируется с: официальным описанием, синонимами, включёнными и исключёнными терминами из примечаний МКБ.
Контроль качества
Уровни проверки:
- Автоматическая: валидация кода в базе МКБ, проверка логики «звёздочка/кинжал»
- Выборочная ручная проверка (10% кодированных диагнозов) для оценки accuracy
- 100% проверка для редких кодов (confidence < 0.8)
Целевые показатели точности: 92–96% для распространённых диагнозов, 80–88% для редких и комбинированных.
Интеграция с МИС
Двусторонняя интеграция: из медицинской карты (текст диагноза) → предложение кода AI → одобрение врача одним кликом → запись в МИС. При несогласии — ручной выбор из выпадающего списка с поиском.
Сроки: обучение на корпусе 50K+ закодированных диагнозов — 4–6 недель; интеграция с МИС — 2–4 недели; пилот + валидация — 6–8 недель.







