HAPI FHIR中的条件参考

时间:2017-03-28 11:07:23

标签: hapi hl7-fhir hapi-fhir

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

  

构建捆绑包时,客户端可能不知道逻辑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客户端/服务器应用程序中使用它。它似乎不受支持。服务器拒绝此类事务包,并显示以下错误消息:

客户端:

  

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]找到无效的资源引用 - 不包含资源类型 - { {1}}

所以我的问题是:

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

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

1 个答案:

答案 0 :(得分:1)

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

DaoConfig
  

是否应解析并替换包含匹配网址的引用   创建和更新操作。例如,如果将此属性设置为   为true,创建包含引用的资源   ca.uhn.fhir.jpa.dao.DaoConfig.setAllowInlineMatchUrlReferences(true) ,这是引用匹配网址   根据通常的匹配网址规则解决和替换。

     

目前默认为Patient?identifier=12345,因为这是一项实验性功能。

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