医院数据标准都乱了几十年,为什么 FHIR 能突然火起来?
接触过医疗信息化的人,大概都有过这种噩梦:
HIS 系统的厂商说:“我的数据是这种格式。”
LIS 系统的厂商说:“不好意思,我只认那种格式。”
院长说:“我要看全院统一的报表!”
于是,信息科和程序员们夹在中间,日复一日地写接口、洗数据、修修补补。医疗数据标准混战了几十年,像是一个大型的**“巴别塔”现场**——大家各说各话,谁也听不懂谁。
直到 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,就是拿到了通往未来智慧医院的“船票”。
— 觉得有用,请点个“在看” —