如何通过EPIC/FHIR API在指定日期范围获取Encounters(无需患者ID)
解决方法
1. 直接调用Encounter搜索API(不需要患者ID)
Epic的FHIR Encounter接口支持不带患者ID的范围查询,核心用这两个参数就够:
_lastUpdated:按资源最后更新时间筛选,刚好适合每日增量获取。比如每晚跑任务时,指定_lastUpdated=gt{前一天的23:59:59},比如_lastUpdated=gt2024-05-20T23:59:59Z,就能拿到当天新增或更新的就诊记录date:按就诊实际发生日期过滤,支持范围写法(比如date=ge2024-05-20),但如果是要抓新增/更新的记录,_lastUpdated更准确- 还可以加
status=finished这类参数缩小范围,只拿已完成的就诊
Spring Boot里可以用RestTemplate或者WebClient实现请求,示例请求格式:
GET /Encounter?_lastUpdated=gt2024-05-20T23:59:59Z&_count=100
_count是用来分页的,避免单次返回数据太多,Epic支持这个参数。
2. 先确认Epic服务器的支持能力
如果发现参数不生效,先调用元数据接口查清楚Encounter支持哪些搜索参数:
GET /metadata
返回的CapabilityStatement里找Encounter资源的searchParam节点,确认_lastUpdated、date这些参数是被支持的。
3. 处理分页和增量同步
- 用Spring Boot的
@Scheduled做每日定时任务,每次请求后记下返回结果里最大的_lastUpdated时间,作为下一次请求的起始条件 - 如果返回结果里有
link节点(rel="next"),要遍历所有分页把数据拿全
补充:为啥会觉得必须要患者ID?
Epic的部分文档示例可能会带患者ID,但这不是强制要求——FHIR标准本身允许对Encounter做无患者约束的搜索,Epic的实现也支持这个功能。
内容的提问来源于stack exchange,提问作者David Brown
相关产品推荐
相关产品推荐

