【问题标题】:Conditional References in HAPI FHIRHAPI FHIR 中的条件引用
【发布时间】:2017-03-28 11:07:22
【问题描述】:

HL7 FHIR Release 3 (STU) 在事务包中引入了条件引用的概念:

在构建bundle时,客户端可能不知道逻辑id 资源,但它可能知道识别信息 - 例如一个 标识符。这种情况在构建事务时经常出现 来自 v2 消息。客户端可以将该标识符解析为 使用搜索的逻辑 id,但这意味着解决 逻辑 id 不会出现在与提交相同的事务中 (以及使客户显着复杂化)。因为这, 在事务中(并且仅在事务中),对资源的引用 可以由描述如何找到正确的搜索 URI 替换 参考:

<Bundle xmlns="http://hl7.org/fhir">
    <id value="20160113160203" />
    <type value="transaction" />
    <entry>
        <fullUrl value="urn:uuid:c72aa430-2ddc-456e-7a09-dea8264671d8" />
        <resource>
            <Observation>
                <subject>
                    <reference value="Patient?identifier=12345" />
                </subject>
                <!-- rest of resource omitted -->
            </Observation>
        </resource>
        <request>
            <method value="POST" />
        </request>
    </entry>
</Bundle>

搜索 URI 是相对于服务器的 [base] 路径的,并且始终 以资源类型开头:[type]:?parameters.... 仅过滤 允许参数;没有控制返回的参数 的资源是相关的。

在处理事务时,服务器应:

  • 检查搜索 URI 的所有引用
  • 对于搜索 URI,使用搜索来定位匹配资源
  • 如果没有匹配,或者有多个匹配,则事务失败,并向用户返回错误
  • 如果只有一个匹配项,服务器将搜索 URI 替换为对匹配资源的引用

...引用自2.21.0.17.2 Transaction Processing Rules

我发现条件引用的这个概念非常有用,我想在我的 HAPI FHIR 客户端/服务器应用程序中使用它。好像不支持。此类事务包 si 被服务器拒绝并显示以下错误消息:

客户:

HTTP 400 错误请求:在 path[Observation.subject] 找到无效的资源引用 - 不包含资源类型 - Patient?identifier=12345

Exception in thread "main" ca.uhn.fhir.rest.server.exceptions.InvalidRequestException: HTTP 400 Bad Request: Invalid resource reference found at path[Observation.subject] - Does not contain resource type - Patient?identifier=12345
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at ca.uhn.fhir.rest.server.exceptions.BaseServerResponseException.newInstance(BaseServerResponseException.java:307)
    at ca.uhn.fhir.rest.client.BaseClient.invokeClient(BaseClient.java:290)
    at ca.uhn.fhir.rest.client.GenericClient$BaseClientExecutable.invoke(GenericClient.java:637)
    at ca.uhn.fhir.rest.client.GenericClient$TransactionExecutable.execute(GenericClient.java:2209)

服务器日志:

WARN cufrsiExceptionHandlingInterceptor [ExceptionHandlingInterceptor.java:135] REST 处理期间失败:ca.uhn.fhir.rest.server.exceptions.InvalidRequestException:在path[Observation.subject] 找到无效的资源引用 - 不包含资源类型 - Patient?identifier=12345

所以我的问题是:

是否可以对 HAPI FHIR JPA 服务器使用条件引用?

或者如果不可能,是否有解决方法?如果引用目标不存在,我可以使用相同的条件操作来解析引用或失败吗?

【问题讨论】:

    标签: hapi hl7-fhir hapi-fhir


    【解决方案1】:

    最后我发现,即使使用 HAPI FHIR vesion 2.2,只需向服务器 DaoConfig 添加以下选项即可:

    ca.uhn.fhir.jpa.dao.DaoConfig.setAllowInlineMatchUrlReferences(true)
    

    是否应该解析并替换包含匹配 URL 的引用 创建和更新操作。例如,如果此属性设置为 true 并创建一个包含对 Patient?identifier=12345,这是参考匹配 URL 根据通常的匹配 URL 规则解析和替换。

    目前默认为false,因为这是一项实验性功能。

    在此处查看源代码:github.com/jamesagnew/hapi-fhir

    【讨论】:

      猜你喜欢
      • 2020-12-07
      • 2020-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多