我已经成功地将 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 服务器提交更新的推荐程序是什么?
此致,
西蒙娜