| Literature DB >> 23656624 |
Erik Sundvall1, Mikael Nyström, Daniel Karlsson, Martin Eneling, Rong Chen, Håkan Örman.
Abstract
BACKGROUND: The openEHR project and the closely related ISO 13606 standard have defined structures supporting the content of Electronic Health Records (EHRs). However, there is not yet any finalized openEHR specification of a service interface to aid application developers in creating, accessing, and storing the EHR content.The aim of this paper is to explore how the Representational State Transfer (REST) architectural style can be used as a basis for a platform-independent, HTTP-based openEHR service interface. Associated benefits and tradeoffs of such a design are also explored.Entities:
Mesh:
Year: 2013 PMID: 23656624 PMCID: PMC3694512 DOI: 10.1186/1472-6947-13-57
Source DB: PubMed Journal: BMC Med Inform Decis Mak ISSN: 1472-6947 Impact factor: 2.796
Figure 1Prototype platform examples. The described architecture aims to reduce the time needed to implement prototypes based on openEHR and other archetype-based systems. It has not been obvious for newcomers how to go from comprehensive specifications (the binder) and archetypes to working prototypes (as on the devices above).
Figure 2URI Components. The components of a URI using the http identifier scheme.
Figure 3REST-based componentization of openEHR. The main components of the suggested REST-based approach and the LiU EEE implementation. The design is flexible regarding component deployment. In a small or experimental setting, all server components can run in the same Java virtual machine on a single computer, and in a full deployment components (and several instances of the same component) could run on separate servers and be provided by different vendors using different technologies.
URI patterns for central resources
| Description | |
|---|---|
| / | |
| | Fetches a VERSION, identified by creating_system_id combined with version_tree_id, from the VERSIONED_OBJECT identified by object_id. URIs containing fragments (after a # sign) will have the same effect. Thus / |
| / | |
| | Fetches only the part of a VERSION specified by the path after the id. This can be used by applications that for example due to privacy reasons only want to retrieve part of a version. |
| | Fetches object lists or metadata of different kinds depending on command, see openEHR specifications [8] for details. |
| / | |
| / | |
| | Fetches version based on lookup command, for example the version that was current at a specific time. |
| | Ad-hoc queries in the ‘multi’ use case can also produce lists or reports, sometimes containing detail hyperlinks pointing to versioned objects. By prepending multi to the path such objects can optionally be fetched from, and thus logged by, the multi database instead of the single database, if desired. |
| | HTTP GET returns all contributions for the EHR identified by ehr_id, paged by variables start (default 1) and end (default 20) the default ordering is descending (most recent contribution listed first). |
| | HTTP POST is used to commit a contribution; all new and changed VERSIONs should be included in the body of the POST. The current LiU EEE implementation accepts either XML or serialized Java objects. Some web-based applications will instead of POSTing to this URI prefer to use the /cb/{committer_id}/{ehr_id}/{cb- id}/commit/ command (described in Table 2) that calls the same verification and storage mechanisms internally. |
| Fetches the contribution identified by contribution_id | |
Table 1 shows a subset of URI template patterns identifying central openEHR objects. A background to versioning and commands can be found in the openEHR Common Information Model specification [8]. The prefix ‘ehr:’ uses the colon sign so that interface designers more easily can make calls to EHR URIs as described in Section 11.3 of the openEHR Architecture Overview [5]. By prepending a slash (/) to an EHR URI found within data, it will become a fully functional HTTP link to the desired EHR object.
URI patterns for the Contribution builder
| Description | |
|---|---|
| | Shows a page describing Contribution builder usage and links to further pages |
| | Lists EHR IDs for which the user has active uncommitted contribution builds |
| | Lists active builds for ehr_id by committer_id |
| | A POST request creates a new empty Contribuition Build and redirects to it. A query parameter 'description' can be used to set a customized name of the contribution build. |
| | Lists the VERSION objects contained in the selected build and commands to view, modify, or delete those objects or the data contained in the versions. A form that can be used to create new VERSION objects is also provided. (Often the contribution_id will have the value ‘default’) |
| | GET shows a page that allows viewing and editing of metadata for the VERSION object identified by temp_id |
| | DELETE deletes the VERSION object |
| | POST can be used to modify contents |
| | GET views the data field of the version identified by temp_id. If the application/xml media type is requested by the client an XML serialization of the data is returned, but if a text/html media type is requested, a html view of the data including a data editing interface is returned. |
| | PUT replaces the contents of the data field |
| | POST can be used to modify data contents |
| | Converters can be implemented and attached to this resource to accept data entry in more formats. |
| | POST is used to create new VERSION objects with the data field based on different sources determined by the command. Valid commands are: |
| | • |
| | • |
| | • |
| | • |
| | • |
| | • |
| | Note that the last three commands create outgoing GET requests and thus can be |
| | GET returns a validation report indicating validity or errors of all VERSIONs in the contribution build |
| POST commits the entire contribution build as a CONTRIBUTION and then deletes the build. If the commit is successful, a ‘201 Created’ response will be returned containing the contribution ID of the newly created CONTRIBUTION. | |
Table 2 shows a subset of URI template patterns identifying the Contribution builder parts.
Figure 4Bookmark sharing. Using QR barcodes is one way of sharing EHR bookmark links to camera-equipped devices.
Bookmark resolution options
| More info | Irrelevant | Good | Potentially confusing |
| No change | Irrelevant | Irrelevant | Good |
| Less info | If required by law or policy | Good | Dangerous |
Table 3 illustrates bookmark resolution options. The bottom right box says it can be dangerous to, without warning, show EHR content accessible by the user at bookmark resolve time if there is less information available to this user than when the bookmark was created (possibly by another user and at another time).
Figure 5Developer interface. The top half of the image shows the interface for developers, here viewing a VERSION of a COMPOSITION and a footer with debug information that aids in understanding the implementation. The bottom half shows the network view in the debugging tool built into most WebKit-based browsers (here activated by right-clicking the page and selecting ‘Inspect Element’). Readers wanting to explore LiU EEE are encouraged to use these feature combinations.
Figure 6openEHR reference model. Reference model objects are building blocks that can be configured, constrained, and named by openEHR archetypes and templates forming document tree structures. Image source: openEHR Architecture Overview ([5]page 28) used with permission.
Figure 7EHR versioning. Example EHR changes to VERSIONED_OBJECTs over time, committed and logged as contributions at four separate time points (the time axis goes downwards). COMPOSITIONs, FOLDER, EHR_ACCESS, and EHR_STATUS are all versioned using the same mechanism. Compositions can be flagged as being of type ‘event’ (blue above) intended for one-time recordings, or flagged as ‘persistent’ (green above) intended for long time continuously updated use. Abbreviated example identifiers are illustrated under the shapes. The figure was inspired by Figure8in the openEHR architecture overview document[5].
Figure 8Document tree and paths. A simplified document tree rendered from an XML representation of a VERSIONED_COMPOSITION. An example path is illustrated using the same color encoding as the RM building blocks in Figure 6. Paths and values can be used in queries to extract and display data in the EHR system.
Figure 9AQL query example. Example of a query in ‘archetype query language’ (AQL).