2

我已经成功地将 HL7 V2 消息转换为 FHIR 资源并将它们发布到服务器。然而,让我头疼的是如何避免在更新或意外重新发布期间创建重复项的问题。

示例:我收到一条带有 PID.#3 = 12345 的 V2 ADT_A01 消息,因此我创建了一个带有标识符的患者资源

  <identifier>
    <use value="usual"/>
    <label value="MRN"/>
    <system value="urn:oid:0.1.2.3.4.5.6.7"/>
    <value value="12345"/>
  </identifier>

并将其发布到服务器。通过系统和价值来识别患者在任何环境中都应该是唯一的,即使有多个系统将患者提供给服务器。

接下来,我收到一条 ADT_A08 消息并想要更新我的患者,因此我创建了另一个具有与上述相同标识符的资源,但如果我将其发布到服务器,我将获得两名患者而不是一名更新的患者。使用 PUT 代替 POST 不是一种选择,因为 PUT 要求我提供患者的 url,而我在尝试处理的 V2 消息中不知道该网址。

Ewout 向我推荐了带有条件处理的 DSTU2 事务,它允许我将我的患者资源放在一个包中,并添加一个状态“匹配”与搜索属性。例如

<Bundle xmlns="http://hl7.org/fhir" xmlns:xhtml="http://www.w3.org/1999/xhtml">
    <id value="20141213205602" />
    <type value="transaction" />
    <base value="base" />
    <entry>
        <status value="match" />
        <search value="Patient?identifier=urn:oid:0.1.2.3.4.5.6.7|12345" />
        <resource>
            <Patient>
                <id value="myTempIDforInternalReferencingWithinTheBundle"/>
                <identifier>
                    <use value="usual" />
                    <label value="MRN" />
                    <system value="urn:oid:0.1.2.3.4.5.6.7" />
                    <value value="12345" />
                </identifier>...

服务器端行为规范规定:“如果搜索返回一个匹配,则服务器使用这个已经存在的匹配资源,并忽略提交的资源。” 因此,这应该可以防止意外创建同一个患者两次。但是由于正匹配导致服务器忽略提供的数据,我仍然无法更新我的患者。

当然,我总是可以先通过标识符运行查询,然后通过它的 ID 更新返回的资源。但由于服务器显然不将标识符视为唯一约束,因此我永远无法确定我的搜索会产生一个结果。因此,每次服务器返回多个结果时都需要人工交互。

长话短说:对于通过标识符而不是通过 url 来了解患者的系统向 fhir 服务器提交更新的推荐程序是什么?

此致,

西蒙娜

4

1 回答 1

2

这应该可以在不需要事务的情况下工作。服务器应该对您的标识符强制执行唯一性。如您所说,您可以查询 A08 中的 ID,并且您应该始终在响应中返回 0 或 1。如果你不这样做,那么你正在与一个实施不佳的服务器交谈。

而且您还需要考虑特定服务器的消费者在决定是创建 (POST) 还是更新 (PUT) 之前甚至可能不会检查这一点。他们可以将所有 A01 和 A08 视为创造。以我的经验,我已经看到来自注册系统的流可能不按顺序到达。如果客户端在 ID 上找不到匹配项,它可以合理地发送 A08 的创建,但是表现良好的客户端也应该在获得 A01 时检查现有资源。

在任何情况下,REST 事务都是无状态的,服务器应该能够处理客户端发送的任何内容。

在您描述的场景中,如果您尝试创建具有相同 ID 的新 Patient 资源,服务器应该检测到该资源已经存在。并且它应该以冲突响应(HTTP 状态 409)使此类请求失败,并且在 OperationOutcome 中包含说明具有该 ID 的患者资源已存在的原因,以及该资源的 URL。这将向您表明应该重试,使用 A08 中的数据更新引用的患者资源。

于 2014-12-14T15:25:09.263 回答