Guidance on using FHIR with Laboratory and Radiology

0. References

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.

Entity Relationship Diagram showing abstract profiles.



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.

Entity Relationship Diagram showing abstract profiles.



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]

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]

View Results Screen