FHIR 的使用

发布时间:2026/5/19 19:17:31

FHIR 的使用 前言这2年 俺写的很多接口都是基于FHIR的 所以就这个FHIR 介绍一下。FHIRFast Healthcare Interoperability Resources快速医疗保健互操作性资源是由HL7国际组织制定的现代医疗数据交换标准旨在实现不同医疗系统之间的高效、安全数据共享打破“信息孤岛” 。它将医疗信息拆分为模块化的“资源”Resources如患者Patient、就诊Encounter、诊断报告DiagnosticReport等每个资源都是一个结构清晰的数据单元便于系统间灵活调用与组合 。FHIR采用现代Web技术如RESTful API、JSON/XML格式让开发者能更快速地构建和集成医疗应用支持移动端、互联网医院、远程诊疗等新兴场景 。背景这几年经常和 EPIC 进行对接EPIC 的接口提供了FHIR的通讯。这个EPIC不是那个做游戏的 EPIC。如果是医疗行业的朋友或者女程序员 应该比较熟悉 。Epic 是美国最大的医疗信息化厂商之一专注于为大型医院和医疗机构提供电子健康档案EHR系统。截至2023年其市场占有率达 ‌39.1%‌服务近 ‌2400家医疗机构。2026年Epic正式上线自研AI病历工具深度集成微软DAX Copilot与GPT-4技术支持实时语音转结构化SOAP病历显著提升医生文书效率 。 推出四大AI智能体ART临床医生助手、Emmie患者导航、Cosmos AI大数据决策支持、Penny行政优化构建统一医疗AI生态 。为啥说 女程序员 应该比较熟悉因为Epic创始人兼CEO ‌Judy Faulkner朱迪·福克纳‌ 是一位从代码起步的女程序员坚持拒绝风投、拒绝IPO2025年11月的实时数据显示朱迪·福克纳净资产达 ‌81.9亿美元。开始俺以EPIC的接口为例进行说明。为啥用 EPIC 因为他的官网支持邮箱注册用QQ邮箱就可以注册它还提供了沙盒进行测试 沙盒里有一些病人和数据 可以用来调试另外帮助也很全。缺点是要 梯子。https://fhir.epic.com/Developer/Apps每个API的说明都有还可以 Try It 直接试试Request 和 Response 都有例子例如 下面是 Patient.Read 的例子{ resourceType: Patient, id: e63wRTbPfr1p8UW81d8Seiw3, extension: [ { valueCodeableConcept: { coding: [ { system: urn:oid:1.2.840.114350.1.13.0.1.7.10.698084.130.657370.19999000, code: male, display: male } ], text: Male }, url: http://open.epic.com/FHIR/StructureDefinition/extension/legal-sex }, { valueCodeableConcept: { coding: [ { system: urn:oid:1.2.840.114350.1.13.0.1.7.10.698084.130.657370.19999000, code: male, display: male } ] }, url: http://open.epic.com/FHIR/StructureDefinition/extension/sex-for-clinical-use }, { extension: [ { valueCoding: { system: urn:oid:2.16.840.1.113883.6.238, code: 2106-3, display: White }, url: ombCategory }, { valueString: White, url: text } ], url: http://hl7.org/fhir/us/core/StructureDefinition/us-core-race }, { extension: [ { valueString: Unknown, url: text } ], url: http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity }, { valueCode: 248153007, url: http://hl7.org/fhir/us/core/StructureDefinition/us-core-sex }, { valueCodeableConcept: { coding: [ { system: http://loinc.org, code: LA29518-0, display: he/him/his/his/himself } ] }, url: http://open.epic.com/FHIR/StructureDefinition/extension/calculated-pronouns-to-use-for-text } ], identifier: [ { use: usual, type: { text: CEID }, system: urn:oid:1.2.840.114350.1.13.0.1.7.3.688884.100, value: FHRBVLJ14NQZWWL }, { use: usual, type: { text: EPIC }, system: urn:oid:1.2.840.114350.1.13.0.1.7.5.737384.0, value: E2734 }, { use: usual, type: { coding: [ { system: http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBIdentifierType, code: um } ], text: EXTERNAL }, system: urn:oid:1.2.840.114350.1.13.0.1.7.2.698084, value: Z4575 }, { use: usual, type: { text: FHIR }, system: http://open.epic.com/FHIR/StructureDefinition/patient-dstu2-fhir-id, value: T81lum-5p6QvDR7l6hv7lfE52bAbA2ylWBnv9CZEzNb0B }, { use: usual, type: { text: FHIR STU3 }, system: http://open.epic.com/FHIR/StructureDefinition/patient-fhir-id, value: e63wRTbPfr1p8UW81d8Seiw3 }, { use: usual, type: { text: INTERNAL }, system: urn:oid:1.2.840.114350.1.13.0.1.7.2.698084, value: Z4575 }, { use: usual, type: { text: EPI }, system: urn:oid:1.2.840.114350.1.13.0.1.7.5.737384.14, value: 202500 }, { use: usual, type: { text: MYCHARTLOGIN }, system: urn:oid:1.2.840.114350.1.13.0.1.7.3.878082.110, value: MYCHARTTEDDY }, { use: usual, type: { text: WPRINTERNAL }, system: urn:oid:1.2.840.114350.1.13.0.1.7.2.878082, value: 19 }, { use: usual, type: { coding: [ { system: http://terminology.hl7.org/CodeSystem/v2-0203, code: MB } ] }, system: https://open.epic.com/FHIR/StructureDefinition/PayerMemberId, value: 530002010 }, { use: usual, type: { coding: [ { system: http://terminology.hl7.org/CodeSystem/v2-0203, code: MB } ] }, system: https://open.epic.com/FHIR/StructureDefinition/PayerMemberId, value: A0296438559 }, { use: usual, system: urn:oid:2.16.840.1.113883.4.1, value: 437-32-4199 } ], active: true, name: [ { use: official, text: Mr. Theodore Mychart, family: Mychart, given: [ Theodore ], prefix: [ MR. ] }, { use: usual, text: Mr. Theodore Mychart, family: Mychart, given: [ Theodore ], prefix: [ MR. ] } ], telecom: [ { system: phone, value: 1 608-213-5806, use: home }, { system: phone, value: 1 608-272-5000, use: work } ], gender: male, birthDate: 1948-07-07, deceasedBoolean: false, address: [ { use: home, text: 134 Elm St\r\nMadison WI 53706\r\nUnited States of America, line: [ 134 Elm Street ], city: Madison, state: WI, postalCode: 53706, country: US, period: { start: 2018-11-26 } }, { use: old, text: 134 Elm St\r\nMadison WI 53706, line: [ 134 Elm Street ], city: Madison, state: WI, postalCode: 53706, period: { start: 2006-07-07, end: 2018-11-26 } } ], maritalStatus: { text: Married }, contact: [ { relationship: [ { coding: [ { system: urn:oid:1.2.840.114350.1.13.0.1.7.4.827665.1000, code: 14, display: Sister } ], text: Sister } ], name: { use: usual, text: Sally Tonga }, telecom: [ { system: phone, value: 1 608-921-8342, use: home } ] }, { relationship: [ { coding: [ { system: http://terminology.hl7.org/CodeSystem/v2-0131, code: E, display: Employer } ] } ], organization: { display: Ehs Generic Employer } } ], communication: [ { extension: [ { extension: [ { valueCoding: { system: http://terminology.hl7.org/CodeSystem/v3-LanguageAbilityMode, code: ESP, display: Expressed spoken }, url: type } ], url: http://hl7.org/fhir/StructureDefinition/patient-proficiency } ], language: { coding: [ { system: urn:ietf:bcp:47, code: sgn, display: Sign Languages } ], text: Sign Languages }, preferred: true, _preferred: { extension: [ { valueCoding: { system: http://hl7.org/fhir/language-preference-type, code: verbal, display: verbal }, url: http://hl7.org/fhir/StructureDefinition/patient-preferenceType } ] } } ], generalPractitioner: [ { reference: Practitioner/eM5CWtq15N0WJeuCet5bJlQ3, type: Practitioner, display: Physician Family Medicine, MD } ], managingOrganization: { reference: Organization/enRyWnSP963FYDpoks4NHOA3, display: Epic Hospital System } }开发其实开发倒是比较简单 C# 可以直接nuget 一些包用。public static Resource get_Resource(string url){FhirClient client get_FhirClient();if (url.IndexOf(http) 0){url Authentication.instance.option.fhir_url url;}Resource r client.Get(url);return r;}public static FhirClient get_FhirClient(){FhirClient client;if (Authentication.instance.option.proxy_url ! ){WebProxy proxy new WebProxy(Authentication.instance.option.proxy_url : Authentication.instance.option.proxy_port);HttpClientHandler handler new HttpClientHandler() { Proxy proxy };HttpClient httpClient new HttpClient(handler);client new FhirClient(Authentication.instance.option.fhir_url, httpClient, get_FhirClientSettings());}else{client new FhirClient(Authentication.instance.option.fhir_url, get_FhirClientSettings());}client.RequestHeaders.Add(accept, application/fhirjson);client.RequestHeaders.Add(Authorization, Bearer Authentication.instance.get_access_token());return client;}

相关新闻