Краткий ответ: сервер терминологии — это специализированный FHIR-сервер для кодов. Он хранит CodeSystems (SNOMED CT, LOINC, ICD-10, UCUM, собственные таблицы HL7), ValueSets (именованные подмножества для конкретных целей: коды жизненно важных показателей, вещества аллергенов) и ConceptMaps (переводы между системами), а также отвечает с помощью стандартных операций: $lookup (что означает этот код?), $validate-code (разрешен ли этот код здесь?), $expand (перечислить коды в этом наборе значений, с возможностью фильтрации по тексту), $translate (каков этот код в другой системе?) и $subsumes (является ли A разновидностью B?). Приложения обращаются к нему вместо того, чтобы отправлять копии терминологий, которые велики, требуют лицензирования и обновляются несколько раз в год.
Ресурсы
Сервер терминологии FHIR работает с тремя ресурсами. CodeSystem объявляет систему кодов по каноническому URL и версии, с ее понятиями или с указанием, что содержимое хранится в другом месте; ValueSet определяет целенаправленное подмножество кодов с помощью правил составления и необязательного вычисленного расширения; ConceptMap записывает отношения источника и цели между системами с указанием эквивалентности для каждого сопоставления.
- CodeSystem объявляет систему по ее каноническому URL (
http://snomed.info/sct,http://loinc.org,http://hl7.org/fhir/sid/icd-10), ее версию и либо ее концепции, либо заявление о том, что контент хранится в другом месте (content: not-presentдля лицензируемых систем). - ValueSet имеет
compose(правила: включить все коды из системы, конкретные коды или фильтр, такой как потомки 404684003 Clinical finding) и, после вычисления,expansion(фактический список). Привязки в профилях указывают на наборы значений; см. FHIR profiles and extensions. - ConceptMap содержит отношения источник → цель с эквивалентностью (
equivalent,wider,narrower,inexact,unmatched) и необязательными зависимостями, для карт, таких как SNOMED CT в ICD-10 или локальные коды лаборатории в LOINC.
Операции с запросами
Сервер терминологии FHIR отвечает на пять стандартных операций: $lookup возвращает значение одного кода, $validate-code проверяет, принадлежит ли код системе или набору значений, $expand перечисляет коды в наборе значений, опционально фильтруя по тексту, $translate преобразует код в другую систему через ConceptMap, а $subsumes проверяет, является ли одно понятие видом другого.
$lookup: сведения об одном коде.
GET /CodeSystem/$lookup?system=http://loinc.org&code=4548-4
Возвращает ресурс Parameters с display ("Hemoglobin A1c/Hemoglobin.total in Blood"), обозначениями на других языках и свойствами (для LOINC — шесть осей; для SNOMED CT — родительские элементы и определяющие отношения).
$validate-code: находится ли код в системе или в наборе значений?
GET /ValueSet/$validate-code?url=http://hl7.org/fhir/ValueSet/observation-vitalsignresult&system=http://loinc.org&code=8480-6
Возвращает result: true с отображаемым названием или false с сообщением. Серверы, которые проверяют ресурсы, вызывают это для каждого связанного элемента.
$expand: коды в наборе значений с фильтрацией по тексту для полей поиска.
GET /ValueSet/$expand?url=http://hl7.org/fhir/ValueSet/condition-code&filter=diabetes&count=20
Возвращает ValueSet со списком expansion.contains: код, система, отображаемое название. Именно так работает поиск диагнозов в EHR против SNOMED CT без локального хранения 360 000 концепций.
$translate: пересечение границы системы.
GET /ConceptMap/$translate?url=https://lab.example.org/ConceptMap/local-to-loinc&system=https://lab.example.org/codes&code=GLU&targetsystem=http://loinc.org
Возвращает совпадения с их эквивалентностью. Та же операция используется для карт SNOMED CT → ICD-10, где их размещает сервер.
$subsumes: вопросы иерархии.
GET /CodeSystem/$subsumes?system=http://snomed.info/sct&codeA=73211009&codeB=44054006
Отвечает на вопросы subsumes (сахарный диабет является предком диабета 2 типа), subsumed-by, equivalent или not-subsumed. Система поддержки принятия решений использует ее, чтобы спросить является ли это состояние каким-либо видом диабета? без перечисления каждого подтипа.
Ответы представляют собой ресурсы Parameters: список именованных частей, а не простой объект, что удивляет тех, кто обращается впервые.
Серверы, с которыми вы столкнетесь
Серверы терминологии, с которыми чаще всего сталкиваются на практике: tx.fhir.org, общедоступный эталонный сервер HL7, используемый валидатором; Ontoserver от CSIRO, коммерческий сервер, лежащий в основе нескольких национальных программ; Snowstorm от SNOMED International, с открытым исходным кодом и нативный для SNOMED CT; общие серверы FHIR, такие как HAPI FHIR и Firely Server, с операциями терминологии; и национальные серверы, управляемые органами здравоохранения.
| Сервер | Кто | Примечания |
|---|---|---|
| tx.fhir.org | HL7 (справочный) | Общедоступный, используется валидатором HL7 и публикатором IG; LOINC, SNOMED CT (где лицензировано), таблицы HL7, UCUM. Не для производственного трафика |
| Ontoserver | CSIRO (Австралия) | Коммерческий; используется национальными программами (Австралия, UK NHS Ontology Server, Нидерланды, Бельгия); полный SNOMED CT с запросами ECL |
| Snowstorm | SNOMED International | Открытый исходный код; нативный для SNOMED CT с API FHIR; обеспечивает работу официального браузера |
| HAPI FHIR, Firely Server, Microsoft/Google/AWS FHIR services | Поставщики | Общие FHIR-серверы с операциями терминологии; загружайте системы кодов самостоятельно |
| Национальные серверы | Министерства здравоохранения и агентства | Часто Ontoserver или Snowstorm с национальной версией и локальными наборами значений |
Контент — это сложная часть: SNOMED CT требует лицензии за пределами стран-членов, LOINC требует принятия его условий, национальные варианты ICD-10 имеют собственное распространение. Сервер предоставляет вам операции; вы по-прежнему получаете и загружаете контент легально.
Как приложения используют один
Приложения используют сервер терминологии для проверки кодов и единиц измерения во время записи, для работы с полями поиска через $expand с текстовым фильтром и набором значений, для отображения официальных названий через $lookup, для сопоставления локальных кодов с LOINC или SNOMED CT в ICD-10 через $translate и для рассуждений над иерархиями через $subsumes и язык ограничений выражений SNOMED CT (Expression Constraint Language).
- Проверка при записи: отклонить Observation с несуществующим кодом LOINC или недопустимой единицей измерения UCUM, с сообщением, указывающим на проблему.
- Поля поиска:
$expandсfilterдля выбора диагнозов, процедур и лекарств, ограниченный набором значений, чтобы клиницисты видели только релевантные концепции. - Отображение:
$lookupдля показа официального названия и переводов вместо хранения отображаемых строк, которые устаревают. - Сопоставление:
$translateдля преобразования локальных лабораторных кодов в LOINC при импорте (how to map local lab codes to LOINC) или SNOMED CT в ICD-10 для отчетности (SNOMED CT vs ICD-10). - Логические выводы:
$subsumesи Expression Constraint Language (ECL) SNOMED (поддерживается Ontoserver и Snowstorm через фильтры$expand) для определения когорт и правил по иерархии.
Кэшируйте агрессивно (терминология меняется дважды в год, а не дважды в день), фиксируйте версии в производственной среде и рассматривайте сбой сервера как ухудшение качества проверки, а не как причину отклонять каждую запись.
В Anpheros
Платформа Anpheros проверяет коды LOINC и единицы измерения UCUM, которые она принимает для наблюдений, и коды ATC для лекарств против терминологии, которую она поставляет (подмножество LOINC и индекс ВОЗ ATC), и документирует свой terminology API на сайте для разработчиков. Для полного просмотра SNOMED CT или ICD-10 она ссылается на официальные браузеры, а не перераспределяет лицензионный контент.
Связанные страницы
- FHIR profiles and extensions explained
- How to map local lab codes to LOINC
- SNOMED CT vs ICD-10
- CodeableConcept and Coding in FHIR
- UCUM units in lab results
- Medical terminology API (developer site)
Источники
- HL7 FHIR R4: Terminology Service
- HL7 FHIR R4: ValueSet $expand
- HL7 FHIR R4: ConceptMap $translate
- HL7 FHIR R4: CodeSystem $lookup
- HL7 terminology server tx.fhir.org
- Snowstorm (SNOMED International, GitHub)
- Ontoserver (CSIRO)
Частые вопросы
Нужен ли мне сервер терминологии для использования FHIR?
Не для небольшой системы с фиксированным списком кодов. Как только вы начинаете проверять коды из больших систем, предлагать клинический поиск или выполнять переводы между системами, сервер терминологии избавляет вас от необходимости поставлять и обновлять терминологии самостоятельно.
Могу ли я использовать tx.fhir.org в производственной среде?
Нет. Это справочный сервер HL7 для инструментов проверки и тестирования, без гарантий обслуживания и с лицензионными ограничениями на часть контента. Запустите свой собственный или используйте национальный или коммерческий сервер.
Что такое ECL?
Expression Constraint Language SNOMED CT, синтаксис запросов для наборов концепций (например, << 73211009 для диабета и всех его подтипов). Серверы, поддерживающие его, принимают ECL в фильтрах ValueSet и $expand.
Как узнать, какую версию SNOMED CT имеет сервер?
Запросите CodeSystem (GET /CodeSystem?url=http://snomed.info/sct) и прочитайте его версию, которая кодирует выпуск и дату релиза (например, http://snomed.info/sct/900000000000207008/version/20260301). Фиксируйте ее в своих запросах, когда результаты должны быть воспроизводимы.
Попробуйте бесплатно в песочнице
Первый запрос FHIR за 5 минут. API HL7 FHIR R4 с встроенным согласием пациента: попробуйте в песочнице, затем подключите свое приложение или систему клиники.
Бесплатно · 30 синтетических пациентов · без карты

