0. References
Care Connect API: Observation |
IHE Reference: IHE Laboratory (LAB) - Laboratory Testing Workflow |
Architecture Patterns: Message Broker |
1. Overview
Many DiagnosticReport will be generated from HL7v2 ORU messages and similarly DiagnosticOrder will be HLv2 ORM messages. Details on how they can be converted to FHIR Messaging can be found on this blog by HL7 Message examples: version 2 and FHIR. A java example which converts a sample HL7v2 ORU^R01 message to FHIR resources calls can be found on GitHub
The diagram below is a simplified representation of the FHIR Diagnostic resources and how they link together. Note that although Observation is linked to DiagnosticReport, the link is held in the DiagnosticReport, not the Observation.
2. Sending Diagnostic Orders and Diagnostic Reports
This guide does not cover how reports and orders are sent from system to system. In FHIR this is FHIR Messaging and part of NHS Digital Digital Diagnostics Services (Pathology). This guide covers how a mobile(/other) system would access the orders and reports via RESTful API.
Messaging may use an RESTful API call by sending the Bundle
to a server. E.g.
POST [baseUrl]/Bundle
3. Retrieving Diagnostic Orders
To find DiagnosticReports for a Patient we first need to find the patient, this is discussed in the Patient Search section.
After finding the Patient we can use the patient id to search for DiagnosticOrders for the Patient.
GET [baseUrl]/DiagnosticOrder?patient=32898
Which results in
4. Retrieving Diagnostic Reports
We can also use patient id to search for DiagnosticReports for the Patient
GET [baseUrl]/DiagnosticReport?patient=32898
Which returns the following response
The first report is from a radiology system and contains a textual description of the report and the other is a pathology report.
5. Retrieving Observations
The DiagnosticReport in the previous section contains a result list of Observations, these can be used to retrieve the individual entries (See also Observation). E.g.
GET [baseUrl]/Observation?39917
Which returns the following response
This call would need to be repeated for each entry in the DiagnosticReport which may not be ideal. Observation doesn’t have a link to the DiagnosticReport and so it doesn’t have a search parameter to do this. Alternative approaches could use combination’s of other CareConnectAPI search parameters e.g.
- category
- Observations linked to DiagnosticReports will have a category code of ‘laboratory’
- date range
- Observations will have a similar effectiveDateTime/effectivePeriod to the effectiveDateTime/effectivePeriod values in the DiagnosticReport.
E.g.
GET [baseUrl]/Observation?patient=32898&category=laboratory
GET [baseUrl]/Observation?patient=32898&category=laboratorydate=ge2017-04-24&date=le2017-04-26
These are not ideal and may return other laboratory Observation’s not related to the DiagnosticReport we are interested in but the result list in the DiagnosticReport can be used to filter out extraneous observations.
6. HL7 FHIR STU3
On the STU3 version of FHIR the DiagnosticOrder has become ProcedureRequest and Observation now has a ‘basedOn’ property which allows the Observations to be linked to the ProcedureRequest.
This link allows us to search Observations based on the order that generated them.
GET [baseUrl]/STU3/Observation?patient=32898&basedOn=ProcedureRequest/39928
This may still return more Observations than we need as we may have several DiagnosticReports. (DiagnosticReports may be generated at various stages e.g. preliminary, partial, final, etc). [TODO Get feedback, this may be ok]
basedOn
functionality could be added to DSTU2 CareConnect Observation by using an extension.7. Observation Results (OBR Segments)
HL7v2 DiagnosticReport messages have the ability to split the reports into sections. In the screen shot below, the Observations from the DiagnosticReport has been split into tests from the original DiagnosticOrder.
[TODO OBR relates to DiagnosticOrder.items, items do not exist in STU3 and they become separate ProcedureRequests]