Стандарт HL7 FHIR для управления медицинскими словарями. Определяет три core ресурса (метаданные словарей), стандартный набор operations (как с ними работать через REST API) и протокол version negotiation. Делает терминологию interoperable: любой FHIR-клиент может работать с любым server’ом, реализующим этот стандарт.

Три core ресурса

  • CodeSystem — определение конкретного словаря: набор concepts + relationships между ними. Примеры: LOINC (http://loinc.org), SNOMED CT (http://snomed.info/sct), RxNorm, ICD-10. Несёт metadata (publisher, version, copyright) + concept hierarchy.
  • ValueSet — подмножество кодов из одного или нескольких CodeSystem’ов под конкретный use case. Например, «AllergyIntolerance category enum» = {food, medication, environment, biologic} из FHIR-administrative CodeSystem; «Lab tests for diabetes monitoring» = subset LOINC-кодов; «Risk levels» = {low, moderate, high}.
  • ConceptMap — трансляция кодов между двумя CodeSystem’ами (или local-system → стандарт). Например: lab-internal “Glucose” → LOINC 2345-7; ICD-9 → ICD-10. Наш растущий dictionary маппингов raw lab name → LOINC по сути ConceptMap (см. terminology-service).

Стандартные operations

Все operations — REST endpoints под [base]/<Resource>/$<op>:

OperationЧто делаетПример
$lookupcode → metadata (display, designations, properties)GET CodeSystem/$lookup?system=http://loinc.org&code=2345-7
$validate-codeпроверка что код существует и valid в CodeSystem / ValueSetGET ValueSet/$validate-code?url=...&system=...&code=...
$expandValueSet definition → конкретный список codes (с filter / count / offset)GET ValueSet/$expand?url=http://snomed.info/sct?fhir_vs&filter=Migraine&count=3
$translateConceptMap source → target code (e.g. local lab name → LOINC)GET ConceptMap/$translate?url=...&system=...&code=...
$subsumesпроверка subsumption иерархии в одном CodeSystem (concept A is-a concept B?)GET CodeSystem/$subsumes?system=...&codeA=...&codeB=...
$find-matchesgrep-like поиск concepts по properties (FHIR R5+)
$closureincremental ValueSet build (для clients, который growing ValueSet постепенно)

TerminologyCapabilities ресурс описывает что конкретный server поддерживает — какие CodeSystem’ы, какие operations, какие версии. Стандартный discovery.

Industry implementations

Commercial / supported:

  • CSIRO Ontoserver — full FHIR terminology server, индустриальный стандарт (Apelon-like positioning). Упомянут у нас в clinical-code-resolution как audit-tool для SNOMED-coder’а. Реальный production-вариант если нужен external partner.
  • Apelon DTS — long-standing terminology management platform. Pre-FHIR origins, FHIR-completed позже.
  • IMO (Intelligent Medical Objects) — enterprise terminology mappings as a service.

Open source:

  • Snowstorm — SNOMED-focused server, открытый, by SNOMED International. Если основной use case = SNOMED hierarchy navigation.
  • Termhub — open-source FHIR terminology server (FHIR R4/R5 ops). Active development.
  • Vonk / Firely Server — community editions могут включать terminology subset.

Free public:

  • tx.fhir.org — HL7 maintained public test server, free для R4/R5. Не для production, но для разработки и тестирования.
  • NLM Value Set Authority Center (VSAC) — US National Library of Medicine — published ValueSet’ы для federal initiatives (HEDIS, Meaningful Use). Бесплатный после регистрации UMLS.

Adjacent standards

  • CTS2 (Common Terminology Services 2) — pre-FHIR HL7 stack для terminology services. FHIR Terminology Service фактически его spiritual successor. Сейчас CTS2 deprecated в пользу FHIR в большинстве проектов.
  • IHE SVS (Sharing Value Sets) — старый IHE profile для ValueSet sharing, тоже superseded FHIR’ом.

Использование в BloodGPT

  • narrative-to-fhir (deployed) — hardcoded SNOMED_QUICK_LOOKUP table + LLM fallback. Не использует terminology server. Audit май 2026 Артур делал через CSIRO Ontoserver — нашёл wrong-concept bugs.
  • V0.5 Mastra write tools (decided, не deployed) — design предусматривает $expand через external terminology server (Ontoserver / tx.fhir.org / другой) для term→SNOMED resolution. См. clinical-code-resolution + llm-numeric-codes-policy.
  • LOINC harmonization service — наш внутренний artifact, по сути функционально является partial terminology service (хранит ConceptMap raw-name → LOINC, lookup LOINC metadata). Не FHIR-compliant API, но логически делает то же что $translate + $lookup. См. terminology-service про path-к-full-сервису.
  • biomarker_graph.json — clinical knowledge overlay поверх LOINC ConceptMap. Не входит в standard scope FHIR Terminology Service (тот про codes / mappings, не про clinical relationships) — но adjacent capability «Clinical Knowledge Base».
  • Custom reference ranges (BG-925, planned) — потенциально rolling ValueSet’ы (lab-specific подмножества LOINC + ranges). Не deployed.

Текущее positioning: мы НЕ запускаем полноценный FHIR terminology server. Используем external (Ontoserver) для audit, hardcode для production hot-path, и строим bottom-up свой internal terminology layer без FHIR-compliant API. Решение запустить proper server (или интегрироваться с external’ным) — open.

Открытые вопросы

  • $expand для V0.5 — что использовать. Опции: tx.fhir.org (free, не для production data), Ontoserver (требует subscription), self-hosted Snowstorm (SNOMED только), build own на нашей loinc_harmonization_service базе. Не зафиксировано.
  • FHIR-compliant API для нашего LOINC dictionary. Сделать $translate / $lookup endpoints поверх нашего Redis dictionary — тривиально технически. Когда — зависит от внешних потребителей (b2b partners интегрируются через FHIR — нет пока такого запроса).
  • SNOMED licensing. Для production использования SNOMED CT нужна лицензия (affiliate license, free для участников SNOMED International member countries). У нас на момент 2026-05 — заблочено для production, использовали только для audit. Tx.fhir.org не для production data.
  • ValueSet maintenance. Наши parameter-triage-codes ({urgent_doctor, routine_doctor, monitor_patient, ok_in_context}) — по сути custom ValueSet. Сейчас hard-coded enum в коде. Стоит ли публиковать как CodeSystem + ValueSet ресурсы — open.

Связано

  • terminology-service — наш bottom-up terminology service: как наш artifact relates to this standard — research
  • clinical-code-resolution — где у нас используется $expand (V0.5 tools, не deployed)
  • loinc — основной CodeSystem поверх которого работаем
  • snomed — adjacent CodeSystem (licensing blocked)
  • fhir-basics — FHIR-конвенции (Identifier, CodeableConcept, Coding)
  • fhir-profiling — где ValueSet используются как constraint’ы в profile’ах (US Core, RuCore)
  • loinc-harmonization-service — наш partial terminology service (raw-name → LOINC ConceptMap-like layer)
  • loinc-harmonization-pipeline — pipeline-механизм пополнения ConceptMap
  • llm-numeric-codes-policy — почему LLM не доверяем числовые коды; $expand как правильный path
  • us-core — обязательно использует FHIR Terminology Service для VS validation
  • rucore — российский аналог; FHIR Terminology Service используется для НСИ Минздрав ValueSet’ов
  • nsi-rosminzdrav — российский CodeSystem (OID 1.2.643.5.1.13.13.11.*)

Источники