原文链接:Updating the Medication List
Updating the Medication List 如何更新用药列表信息
**译者注:用药信息是每个医疗信息标准都迈步过去的坎儿,作者围绕着这个topic的第二篇。在知道了如何用List资源来表示患者的用药列表之后,这里主要探讨如何对列表中的信息进行更新操作.比方说,医师调整了患者正在服用的药物,想要记录这些变更.
如何使用List来表达患者的用药列表信息
如何使用transaction来对患者用药列表信息进行更新操作
区域范围内该共享哪些用药信息
FHIR Medication lists revisited
List资源用来表示其他资源的集合,其中可能会包含大量的存储于其他地方的资源数据.
以患者正在服用2种药物的简单场景为例:
- 一个Practitioner资源 ,下达医嘱的药师和用药列表的作者/来源
- 一个Patient资源
- 2个MedicationPrescription资源,分别描述药物信息
- 一个List资源引用了上述资源
资源间的线表示资源引用.
如果Atenolol停用之后,用Labetolol替换,又会如下
注意:
- 这样List资源就产生了一个新版本 ID相同
- 新版本的List的医生是Dr Jone
- 一般而言,下医嘱的和List作者是同一个人,但不异地给你是
- 新版本的List保留了对Atenolol的引用,事实上是不必要的,但这样做能够表示在开始服用Labetolol的时候停用了Atenolol(及其原因)
假设我们拿到了患者ID,可以通过如下流程来实现
- 获取已有的用药列表GET /Patient/100/List?code=http://loinc.org|10160-0 which is a FHIR query that will return a bundle containing the List
- 获取我们要停用的medicationPrescription GET操作,将其status字段值设为'nullified',执行PUT更新操作.
- 新增一个MedicationPrescription资源,Post新增
- 在List资源中对应的要停用药物的entry中 flag字段设为‘cancelled’,deleted字段设为true,可以添加一个extension来表示停药的原因
- 在List为新增的药物添加一个entry
- 对新的List数据进行PUT操作 获得新版本的List
这个流程整体来看并不复杂,但是后面的步骤是以前面的步骤为前提的,要么都成功,要么都失败,这实际上就是数据库操作中的transaction的概念
一种方式是
- 客户端按照上述流程依次操作,和对每一步是否成功,是否需要在过程中进行回滚操作,是否同时有其他客户端对同样的数据进行更新操作
- 在客户端生成或更新所有资源数据,将所有资源打包成一个bundle,通过transaction请求发送到服务器上,服务器负责保证整个操作是否成功失败
目前FHIR DSTU1中bundle是Atom feed格式的,可以是XML或JSON.每个entry表示一个FHIR资源.
Entry.id表示的是资源的逻辑ID,非特定版本相关的ID,每个资源都只有一个逻辑ID
Entry.link表示的特定版本相关的ID,可选字段,但在针对版本的更新中能够避免不不要的冲突
使用Bundle之后的流程如下:
- 生成新的Bundle,
- 获取已经存在的用药列表 拿到List的ID值
- 获取我们要停用的medicationPrescription GET操作,将其status字段值设为'nullified',将变更后的资源添加至bundle当中,将entry.id值设为
medicationPrescription的ID.
- 新增一个MedicationPrescription资源,添加到bundle当中,使用CID scheme的方式分配一个临时值到entry.id字段中
- 在List资源中对应的要停用药物的entry中 flag字段设为‘cancelled’,deleted字段设为true,可以添加一个extension来表示停药的原因
- 在List资源中新增一条List.entry来保存对新增药物的引用,ID使用3中的临时值
- 将更新后的List资源添加至bundle当中,entry.id设为List的ID
- 通过Post操作提交bundle到服务器上
最后提交的bundle中包含
- 2 MedicationPrescription resources (1 new & 1 updated) and
- 1 List resource
服务器拿到bundle之后,处理过程和单独提交时的操作一致,返回成功或失败的结果.服务器也可以自行实现其他的一些业务处理逻辑或校验逻辑
比如,核对bundle中List资源的版本和服务器上最新的版本一致.
对于客户端而言,这种方式简化了工作量,将复杂度抛给了服务端.