简而言之: 术语服务器是一种专门处理代码的 FHIR 服务器。它存储代码系统(SNOMED CT、LOINC、ICD-10、UCUM、HL7 自有表格)、值集(为特定目的命名的子集:生命体征代码、过敏原物质)和概念映射(系统之间的翻译),并通过标准操作进行响应:$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 临床发现的后代)以及计算后的expansion(实际列表)。配置文件中的绑定指向值集;请参阅 FHIR 配置文件和扩展。 - 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(“血红蛋白 A1c/血红蛋白总量”)、其他语言的名称以及属性(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 的诊断搜索在不本地存储 360,000 个概念的情况下针对 SNOMED CT 进行搜索的方式。
$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 的公共参考服务器,被其验证器使用;CSIRO 的 Ontoserver,一个商业服务器,支持多个国家级项目;SNOMED International 的 Snowstorm,开源且原生支持 SNOMED CT;通用的 FHIR 服务器,如 HAPI FHIR 和 Firely Server,支持术语操作;以及由卫生机构运行的国家级服务器。
| 服务器 | 谁 | 说明 |
|---|---|---|
| tx.fhir.org | HL7(参考) | 公共服务器,由 HL7 验证器和 IG Publisher 使用;包含 LOINC、SNOMED CT(需授权)、HL7 表格、UCUM。不适用于生产流量 |
| Ontoserver | CSIRO(澳大利亚) | 商业产品;被国家项目使用(澳大利亚、英国 NHS Ontology Server、荷兰、比利时);支持完整的 SNOMED CT 和 ECL 查询 |
| Snowstorm | SNOMED International | 开源产品;原生支持 SNOMED CT,提供 FHIR API;支持官方浏览器 |
| HAPI FHIR、Firely Server、Microsoft/Google/AWS FHIR 服务 | 供应商 | 通用 FHIR 服务器,支持术语操作;需要您自己加载代码系统 |
| 国家服务器 | 各国卫生部和机构 | 通常是 Ontoserver 或 Snowstorm,包含国家版本和本地值集 |
内容是难点:SNOMED CT 在成员国以外需要授权,LOINC 需要接受其条款,ICD-10 的国家变体有自己的分发方式。服务器提供操作功能;您仍需合法获取并加载内容。
应用程序如何使用它
应用程序使用术语服务器在写入时验证代码和单位,通过带文本过滤器和值集的 $expand 功能为搜索框提供支持,通过 $lookup 显示官方名称,通过 $translate 将本地代码映射到 LOINC 或 SNOMED CT 到 ICD-10,并通过 $subsumes 和 SNOMED CT 的表达式约束语言进行层级推理。
- 写入时验证:拒绝包含不存在的 LOINC 代码或非 UCUM 单位的 Observation,并显示指出问题的消息。
- 搜索框:使用带
filter的$expand功能,用于诊断、手术和药物选择器,并按值集范围限定,以便临床医生只看到相关的概念。 - 显示:使用
$lookup显示官方名称和翻译,而不是存储会过时的显示字符串。 - 映射:使用
$translate在导入时将本地实验室代码转换为 LOINC(如何将本地实验室代码映射到 LOINC)或将 SNOMED CT 转换为 ICD-10 用于报告(SNOMED CT 与 ICD-10)。 - 推理:使用
$subsumes和 SNOMED 的表达式约束语言(ECL,Ontoserver 和 Snowstorm 通过$expand过滤器支持)通过层级结构定义队列和规则。
请积极缓存(术语每年更改两次,而不是每天两次),在生产环境中固定版本,并将服务器中断视为验证能力下降,而不是拒绝所有写入的理由。
在 Anpheros 中
Anpheros Platform 会针对其提供的术语(LOINC 子集和 WHO ATC 索引)验证其接受的 Observation 的 LOINC 代码和 UCUM 单位,以及药物的 ATC 代码,并在开发者网站上记录其 术语 API。对于完整的 SNOMED CT 或 ICD-10 浏览,它会指向官方浏览器,而不是重新分发需要授权的内容。
相关页面
- FHIR 配置文件和扩展详解
- 如何将本地实验室代码映射到 LOINC
- SNOMED CT 与 ICD-10
- FHIR 中的 CodeableConcept 和 Coding
- UCUM 单位在实验室结果中的应用
- 医疗术语 API(开发者网站)
来源
- HL7 FHIR R4:术语服务
- HL7 FHIR R4:ValueSet $expand
- HL7 FHIR R4:ConceptMap $translate
- HL7 FHIR R4:CodeSystem $lookup
- HL7 术语服务器 tx.fhir.org
- Snowstorm (SNOMED International, GitHub)
- Ontoserver (CSIRO)
常见问题
使用 FHIR 是否需要术语服务器?
对于包含固定代码列表的小型系统来说,则不需要。一旦您需要验证大型系统中的代码、提供临床搜索或在系统之间进行翻译,术语服务器就能让您无需自己分发和更新术语。
我可以在生产环境中使用 tx.fhir.org 吗?
不可以。它是 HL7 的参考服务器,用于验证工具和测试,不提供服务保证,并且某些内容存在许可限制。请运行您自己的服务器,或使用国家级或商业服务器。
什么是 ECL?
SNOMED CT 的表达式约束语言,是一种用于概念集的查询语法(例如 << 73211009 表示糖尿病及其所有子类型)。支持它的服务器可以在值集过滤器和 $expand 中接受 ECL。
我如何知道服务器使用的是哪个版本的 SNOMED CT?
查询 CodeSystem (GET /CodeSystem?url=http://snomed.info/sct) 并读取其版本,版本号会包含版本和发布日期(例如 http://snomed.info/sct/900000000000207008/version/20260301)。在请求中固定版本号,以确保结果的可重现性。
在沙盒中免费试用
5 分钟完成第一次 FHIR 调用. 一个内置患者授权的 HL7 FHIR R4 API:先在沙盒中试用,然后连接您自己的应用或诊所系统。
免费 · 30 位合成患者 · 无需信用卡

