【问题标题】:HAPI FHIR Retrieve PatientsHAPI FHIR 检索患者
【发布时间】:2020-05-03 11:39:26
【问题描述】:

我对 HAPI FHIR 客户端非常陌生,并且一直在无休止地浏览教程和文档以尝试帮助我开发我正在尝试开发的程序,但现在在查询服务器以进行搜索时遇到了困难获取所有由同一医生治疗的患者列表。换句话说,我希望用户输入从业者 ID 号,并让系统返回患者列表及其详细信息。当输入从业者的 ID 号时,我能够查询服务器以获取所有遭遇,这些都被放入一个捆绑包中,但我不知道从那里去哪里。我已经放置了用于获取 Bundle 的代码行,并且可以验证它是否有效,因为在计算 bundle 中的资源数量时,我得到了正确的数字。 pracID 是用户输入的整数。

Bundle response = client.search().forResource(Encounter.class).where(Encounter.PRACTITIONER.hasId(Integer.toString(pracID))).returnBundle(Bundle.class).execute();

我还在 IntelliJ 上使用 R4 版本的 Context 客户端在 Java 中对此进行编码。我将非常感谢任何帮助。提前致谢

【问题讨论】:

    标签: java hapi-fhir


    【解决方案1】:

    我认为通往罗马的道路很多,但我的第一个天真的方法如下:您可以尝试使用搜索参数_include 递归查找患者数据。此搜索参数搜索所有遇到的对象以查找相应的主题:

    Bundle response = 
       client.search()
       .forResource(Encounter.class)
       .where(Encounter.PRACTITIONER.hasId(Integer.toString(pracID)))
       .include(Patient.INCLUDE_ALL.asRecursive())
       .returnBundle(Bundle.class).execute(); 
    

    如果链接可用,则该包现在应该不仅包含 Encounter 对象,还包含 Patient 对象,可以按如下方式检索这些对象以进行进一步处理:

    List<Patient> listPatients = new ArrayList<Patient>();
    response.getEntry().forEach(entry -> { 
          if (entry.getResource() instanceof Patient) {
            listPatients.add((Patient) entry.getResource());
          }
    });
    

    【讨论】:

    • 这对您很有帮助,谢谢。我知道这是一个迟到的答复,只是最近很忙。我正在使用您提供的查询,它运行良好,但我注意到通过使用 ID,它不会返回该从业者的所有实例,因为我看到它们可以有多个 ID,但只有一个标识符。我可以在语句的 where 子句中使用 TokenClientParam,但它只返回一个特定的资源,有没有办法像你编码的那样做一些事情,而是使用标识符?
    • 您是否提前知道所有的 Id,您可以将它们包含在查询中吗?然后将它们全部放在一个列表中并使用 hasAnyOfIds 方法而不是 hasId。如果不是,您如何识别从业者?
    • 我找到了一种使用标识符值获取所有 ID 的方法,然后我可以使用 hasAnyOfIds 方法获取所有需要的资源。感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    相关资源
    最近更新 更多