如何通过一次查询从FHIR服务器获取患者的所有组合检测与独立检测?
实现单次查询获取FHIR实验室组合/分组与独立检测结果的方案
核心逻辑
FHIR里实验室检测结果统一用Observation资源承载:
- 组合/分组检测:一般是一个"父"Observation,通过
hasMember字段引用同组的多个"子"Observation;部分系统也会用partOf关联到DiagnosticReport来实现分组。 - 独立检测:就是没有
hasMember引用的单个Observation。
要单次查询覆盖两类数据,有以下两种可行方案:
方案1:基于Observation的组合查询
直接查询目标患者的实验室Observation,同时用FHIR的_include参数拉取分组检测关联的子资源,一次请求搞定所有数据。
查询示例
GET [FHIR服务器地址]/Observation?patient=[患者ID]&category=laboratory&_include=Observation:hasMember
参数说明
patient=[患者ID]:锁定目标患者,过滤该患者的所有实验室数据category=laboratory:只筛选实验室类别的Observation,排除生命体征等其他类型_include=Observation:hasMember:要求服务器返回所有被父Observation通过hasMember引用的子Observation
效果
- 直接拿到所有独立检测的Observation(无
hasMember字段的条目) - 同时拿到所有分组检测的父Observation,以及其关联的子检测Observation
- 服务器会把关联资源一并返回,不用二次查询
方案2:关联DiagnosticReport的查询
如果你的目标FHIR服务器是用DiagnosticReport来组织实验室分组检测的,可通过查询DiagnosticReport并附带关联的Observation来实现:
查询示例
GET [FHIR服务器地址]/DiagnosticReport?patient=[患者ID]&category=laboratory&_include=DiagnosticReport:result
参数说明
patient=[患者ID]:指定目标患者category=laboratory:筛选实验室类别的诊断报告_include=DiagnosticReport:result:要求返回该报告关联的所有检测结果Observation
补充说明
如果存在未关联DiagnosticReport的独立Observation,可通过_or参数合并两个查询,一次性覆盖所有情况:
GET [FHIR服务器地址]/Observation?patient=[患者ID]&category=laboratory&_or:0=_has:DiagnosticReport:result:patient=[患者ID]&_or:1=_missing:partOf
注意点
- 要确认目标FHIR服务器支持
_include、_has这些参数(FHIR STU3及以上版本都支持) - 部分服务器会限制单次返回的资源数量,可配合
_count参数调整分页大小 - 如果分组检测有多层嵌套(组内还有子组),用
_include:recurse就能递归拉取所有层级的子Observation:
GET [FHIR服务器地址]/Observation?patient=[患者ID]&category=laboratory&_include:recurse=Observation:hasMember
内容的提问来源于stack exchange,提问作者Aftab Baig
相关产品推荐
相关产品推荐

