医院数据标准都乱了几十年,为什么 FHIR 能突然火起来?

接触过医疗信息化的人,大概都有过这种噩梦:

HIS 系统的厂商说:“我的数据是这种格式。”
LIS 系统的厂商说:“不好意思,我只认那种格式。”
院长说:“我要看全院统一的报表!”

于是,信息科和程序员们夹在中间,日复一日地写接口、洗数据、修修补补。医疗数据标准混战了几十年,像是一个大型的**“巴别塔”现场**——大家各说各话,谁也听不懂谁。

assets/FHIR_2026-01-15_15-06-10.jpg

直到 FHIR (Fast Healthcare Interoperability Resources) 的出现。

这个读音同 Fire (火) 🔥 的标准,正在以燎原之势席卷全球。Apple Health 用它,Google Cloud 用它,国内的三甲医院和互联网医疗巨头也在悄悄转向它。

它到底神在哪?如何用它来给复杂的数据建模?又如何用它设计一个现代化的随访或质控系统?

今天,我们用一篇长文,把这些彻底讲透。

01 历史的包袱:为什么以前那么乱?

要理解 FHIR 的好,得先知道以前有多痛。

在 FHIR 之前,统治江湖的是 HL7 v2 和 HL7 v3

👴 HL7 v2:老当益壮,但太难读

这是 80 年代的产物,为了节省当年的网络带宽,它长这样:

MSH|^~&|HIS|RIH|EKG|EkG|199905051|…
PID||123456||Smith^John||19700101|M||…

这一串被竖线 | 分隔的字符,叫做“管道符”。它就像摩斯密码,只有机器和资深工程师能看懂。而且,各家医院对竖线的定义还不一样,对接起来极其痛苦。

🤯 HL7 v3:学霸的失败

为了解决 v2 的问题,专家们搞出了 v3。它试图用极其严谨的逻辑描述医疗世界,结果用力过猛,变得极其复杂、臃肿。开发一个简单的功能可能需要阅读上千页的文档。结果就是:没人爱用。

直到互联网时代来了。

程序员们习惯了淘宝、微信、亚马逊那种轻量级的 Web 开发模式。他们想要一种**“像浏览网页一样简单”**的数据标准。于是,FHIR 诞生了。

02 读懂 FHIR:医疗数据的“乐高积木”

FHIR 的核心思想非常简单:不要试图造一块巨大的石头,而是造一堆通用的积木。

这些积木,在 FHIR 里被称为 Resources(资源)

FHIR 的积木世界观:

  • 👨‍🦰 Patient: 描述患者基本信息(姓名、性别、生日)。

  • 🩺 Observation: 描述一切观察结果(血压、体温、检验报告)。

  • 🏥 Encounter: 描述一次就诊行为(门诊、住院、急诊)。

  • 💊 MedicationRequest: 描述医生开的药。

1. 说人话的 JSON 格式

FHIR 抛弃了那些古怪的竖线,使用了现代程序员最喜欢的 JSON 格式。即便是非技术人员,也能猜出个大概。请看下面这个“患者积木”:

{
  “resourceType”: “Patient”,
  “id”: “example”,
  “active”: true,
  “name”: [
    {
      “family”: “张”,
      “given”: [“三”]
    }
  ],
  “gender”: “male”,
  “birthDate”: “1974-12-25”
}

是不是清晰多了?key: value 的形式,只要认识英文单词就能读懂。

2. 关键的“80/20 原则”

这是 FHIR 成功的秘诀。

FHIR 的设计者发现:医疗数据中 80% 的场景,只用到了 20% 的数据字段。

以前的标准想把 100% 的情况都塞进标准里,结果臃肿不堪。FHIR 决定:标准里只放那通用的 20%(比如姓名、ID、科室),剩下的 80% 特殊需求(比如某医院特有的“VIP等级”),通过“扩展(Extensions)”机制来解决。

这让 FHIR 既轻量,又灵活。

03 实战:如何用 FHIR 建模?

光知道积木不行,我们得学会搭积木。在医疗系统中,数据不是孤立的,它们是网状关联的。

假设我们要描述:“张三昨天因为发烧去看了呼吸内科的李医生,测得体温 39度。”

在传统的数据库里,这可能是一张巨大的宽表。但在 FHIR 里,我们这样建模:

Patient (张三)
ID: P-001

⬇️

Encounter (就诊记录)
ID: E-20230505 | 医生: 李医生 | 科室: 呼吸科

⬇️

Observation (体温观察)
数值: 39 | 单位: C | 关联: E-20230505

建模的核心技巧:引用 (Reference)

在 FHIR 的 Observation 资源里,不会重复写张三的名字,而是写一行代码:

"subject": { "reference": "Patient/P-001" }

这种像“超链接”一样的设计,让数据结构非常清晰。无论你在做什么系统,只要抓住主体(Patient)事件(Encounter) 和 结果(Observation/Report) 这三根支柱,就能还原 90% 的医疗场景。

04 场景落地:怎么用它设计系统?

理解了原理,我们来看看如何把 FHIR 应用到大家关心的实际业务中。

场景 A:慢病随访系统

痛点: 随访表单千变万化,高血压和糖尿病的表单完全不同,每次加字段都要改数据库。

FHIR 解决方案:

  • 利用 Questionnaire (问卷) 资源定义题目(例如:您今天吃药了吗?)。

  • 利用 QuestionnaireResponse (问卷回复) 资源存储患者的答案。

优势: 你的数据库不需要改结构,只需要存储 JSON。前端 App 可以直接根据 FHIR 的定义动态生成界面。今天想加一个“心情如何”的问题?后台改一下配置下发即可,无需发版。

场景 B:医疗质控与病案抽取

痛点: 想要查询“所有糖化血红蛋白 > 9% 的患者”,以前需要写复杂的 SQL,而且很难跨院查询。

FHIR 解决方案: RESTful API。

FHIR 自带了一套标准的查询语言。你只需要向服务器发送一个 URL 请求:

GET /Observation?code=4548-4&value-quantity=gt9.0

优势: 这里的 4548-4 是糖化血红蛋白的国际标准代码(LOINC)。只要各家医院都映射到了 FHIR,这一句查询代码,可以在全院、甚至全省的平台上通用。

场景 C:医院数据中台 (CDR)

痛点: 数据清洗难,数据湖变成了“数据沼泽”。

FHIR 解决方案: 无论源头是 HL7 v2, CDA 还是私有格式,进入中台前全部清洗转换为 FHIR 格式存储。

优势: FHIR 就是最好的元数据管理。它强制要求数据有明确的定义。当数据以 FHIR 格式沉淀下来,后续做 AI 训练、科研提取,就是开箱即用的干净数据。

🚀 总结:拥抱未来

FHIR 不仅仅是一个技术标准,它是医疗信息化的基础设施革命

对于医生,它意味着更完整的患者视图;
对于管理者,它意味着更低的数据互联成本;
对于开发者,它意味着不用再把生命浪费在解析乱码上。

虽然老旧系统如泰山般沉重,但 FHIR 的星星之火,终将燎原。现在开始学习和布局 FHIR,就是拿到了通往未来智慧医院的“船票”。

— 觉得有用,请点个“在看” —