原文链接:Regional Shared Medications with FHIR
**译者注:用药信息是每个医疗信息标准都迈步过去的坎儿,作者围绕着这个topic的第一篇。这里面主要是介绍一个区域性的居民的用药信息库 ,其他的医疗信息系统在对自己系统中患者的用药信息进行操作时,都事先与用药库进行比对同步. 当然围绕着用药库可以做一些面向患者,医生的门户,适合与移动医疗的场景.
如何使用List来表达患者的用药列表信息
如何使用transaction来对患者用药列表信息进行更新操作
区域范围内该共享哪些用药信息
FHIR Medication lists revisited
整体架构图如下
用药信息库旨在让所有的医务人员,患者都能够使用.其中包含大量不同类型的用药信息.比如:
这里面之涉及到用药信息的记录,并没有下医嘱(会用到MedicationPrescription资源)的功能.
系统间的通讯间只能走SSL连接.使用oAUTH来认证和标识用户.简单起见,任何注册用户均可以访问每个患者的记录.后续会考虑一些隐私安全策略-尤其是在更新用药信息的情况.
Patient相关接口 仅提供一个已有的注册服务的接口,比如说区域平台或者社交平台的帐号 tx sina之类的 Find Patient (eg GET /Patient?name=eve) Get Patient by identifier (eg GET /Patient?identifier=PRP1660)
Practitioner相关接口 与patient类似. Find Practitioner (eg GET /Practitioner?name=smith) Get Practitioner by identifier (eg GET /Practitioner?identifier=PRP1660)
MedicationDispense相关接口 从药房获取到数据,然后客户端可以和对这个列表是否正确,也就是reconciling列表的过程,列表中是否包含了患者已经拿到的药 假设药房在提交数据前先查询患者ID,然后将该MedicationDispense数据发送到用药库.因此,需要以下两个接口 Submit a dispense resource (POST /MedicationDispense) Get dispense records in the past (say) month (GET / MedicationDispense?patient={patientID}&whenHandedOver < {1 month ago} 另外,MedicationDispense 和 MedicationPrescription 资源都会调用Medication 资源,其中包含了具体的药品信息, medication资源有一个字段为code,可以使用某种药典来表示具体的药物. For example in New Zealand we have the ULM (Universal List of Medications) – a terminology based on SNOMED – thus the code 44362701000116107 refers to a 100mg tablet of aspirin
假设客户端根据这个字典来进行查询检索,我们需要code和code system.出于这样的考虑,我们在MedicationDispense 和 MedicationPrescription 资源直接包含Medication资源,而不是间接的引用它.
MedicationPrescription相关接口 MedicationPrescription主要用来记录患者服用的每种药物的详细情况,比方说药物名称,剂量,原因等.在另一篇文章里我们讨论了使用 "transaction"来批量更新药品信息,也就是说我们只需要一个根据资源标识来检索资源数据的接口 Get a single MedicationPrescription (GET /MedicationPrescription/{ID})
List相关接口
Get a patients list of medications (GET /Patient/{patientID}/List?code=10160-0)
Update a patients list of medications. This will be a transaction update as described earlier.
GET /List/{listID}/_history
GET /List/{listID}/_history/{versionID}
SecurityEvent相关接口 以下情况自动生成审计事件资源
当要更新患者的用药列表
Get a bundle of SecurityEvent resources for a patient over a given time period (GET /SecurityEvent?patientId={patientID}&date > {startDate} & date < {endDate}
上面描述了一些接口功能,相较于文档存储的方式,这种方式更有利于信息的查,诸如那些人服用了某种药物,多少人有糖尿病但在过去半年内没有进行HBA1C检查
附件是一个conformance的例子
<?xml version="1.0" encoding="utf-8"?>
<Conformance xmlns="http://hl7.org/fhir">
<text>
<status value="generated"/>
<div xmlns="http://www.w3.org/1999/xhtml">
<p>This conformance statement supports the Shared Medication repository, and specifies the following endpoints</p>
<p>Person: Read and Search on name and identifier</p>
<p>Practitioner: Read and Search on name and identifier</p>
<p>MedicationDispense. Create, and search on patient,whenHandedOver</p>
<p>MedicationPrescription. Read. </p>
<p>List. Create and search on code,patient. Version read.</p>
<p>SecurityEvent. Search on patient,date</p>
<p>Transaction interfaces to update the Medication List</p>
</div>
</text>
<identifier value="68D043B5-9ECF-4559-A57A-396E0D452311"/>
<version value=".1"/>
<name value="My List Of Medicines (MLOM) Conformance Statement"/>
<publisher value="Elbonian MOH"/>
<telecom>
<system value="email"/>
<value value="[email protected]"/>
</telecom>
<description value="The FHIR endpoints required to support a regional Medication repository - My List Of Medicines"/>
<date value="2012-10-14"/>
<software>
<name value="MLOM"/>
<version value="0.34.76"/>
</software>
<fhirVersion value="0.12"/>
<acceptUnknown value="false"/> <!-- this system does not accepts unknown content in the resources -->
<!-- this system can do either xml or json. (Listing both implies full support for either, with interconversion) -->
<format value="xml"/>
<format value="json"/>
<!-- We only support REST interfaces at this time. This includes transaction to the server root to update the List-->
<rest>
<mode value="server"/>
<!-- SecurityEvent record -->
<resource>
<type value="SecurityEvent"/>
<operation>
<code value="read"/>
</operation>
<searchParam>
<name value="patient"/>
<type value="reference"/>
<documentation value="Lookup by patient."/>
</searchParam>
<searchParam>
<name value="date"/>
<type value="date"/>
<documentation value="Lookup by date the event occurred."/>
</searchParam>
</resource>
<!-- MedicationDispense record -->
<resource>
<type value="MedicationDispense"/>
<operation>
<code value="create"/>
</operation>
<operation>
<code value="read"/>
</operation>
<searchParam>
<name value="patient"/>
<type value="reference"/>
<documentation value="Lookup by patient."/>
</searchParam>
<searchParam>
<name value="whenHandedOver"/>
<type value="date"/>
<documentation value="Lookup by date the medication was given to the patient."/>
</searchParam>
</resource>
<!-- MedicationPrescription resource. The prescription records are all created through the 'transaction' process so read-only -->
<resource>
<type value="MedicationPrescription"/>
<operation>
<code value="read"/>
</operation>
</resource>
<!-- List resource. Used to support the List of Medications. -->
<resource>
<type value="List"/>
<operation>
<code value="create"/>
</operation>
<operation>
<code value="read"/>
</operation>
<operation>
<code value="vread"/>
</operation>
<searchParam>
<name value="patient"/>
<type value="reference"/>
<documentation value="Lookup by patient."/>
</searchParam>
<searchParam>
<name value="code"/>
<type value="token"/>
<documentation value="Lookup by code - this will be for the MLOM"/>
</searchParam>
</resource>
<!-- The Practitioner resource endpoint -->
<resource>
<type value="Practitioner"/>
<operation>
<code value="read"/>
</operation>
<searchParam>
<name value="name"/>
<type value="string"/>
<documentation value="Lookup by practitioner name. All parts of the name are searched."/>
</searchParam>
<searchParam>
<name value="identifier"/>
<type value="token"/>
<documentation value="Lookup by identifier. Both active and inactive practitioners will be returned."/>
</searchParam>
</resource>
<!-- The Patient resource endpoint -->
<resource>
<type value="Patient"/>
<operation>
<code value="read"/>
</operation>
<searchParam>
<name value="name"/>
<type value="string"/>
<documentation value="Lookup by patient name. Only active patients will be returned. All parts of the name are searched."/>
</searchParam>
<searchParam>
<name value="identifier"/>
<type value="token"/>
<documentation value="Lookup by identifier. Both active and inactive patients will be returned."/>
</searchParam>
<searchParam>
<name value="birthDate"/>
<type value="date"/>
<documentation value="Lookup by patient birts date. Supports the :before and :after modifiers to allow for age ranges"/>
</searchParam>
</resource>
</rest>
</Conformance>