Radiology Service

As describes in Default Service section, the FHIR resources which contain "RAD" as "serviceCategory" will be handle by the Radiology Service.

Users can create own handlers and register them with using Spring framework for the module in order to use them. But they have the flexibility of designing how to store/map a FHIR DiagnosticReport into OpenMRS data structures. In Radiology Service Handler, it's using Encounter as the main type to store the metadata of a DiagnosticReport. Then other FHIR resource fields are stored as OpenMRS Encounter properties and OpenMRS Obs. In order to store multiple Obs, it's using OpenMRS Obs Groups which use tree structure to store multiple Obs.

Workflow

Radiology Service handler is handling incoming request in a different manner. When the RadiologyHandler gets a GET request, first it searches for matching resource in the OpenMRS storage. If it's not able to find the given resource, then OpenMRS FHIR module makes client request to a specified external FHIR server and retrieve matching FHIR DiagnosticReports in  OpenMRS storage and response back to the user with received FHIR DiagnosticReports.

FHIR DiagnosticReport Mapping

ServiceCatogory > EncounterType

Encounter Type is used to differentiate "RAD" serviceCatogory from other serviceCatogories. Thus it's required to create an EncounterType in OpenMRS and configure FHIR module to use it.

Issued > Encounter's DateTime

Issued filed has one to one mapping with FHIR DiagnosticReport and it's stored as Encounter's DateTime value.

Subject > Encounter's Patient

Subject filed can be represent in Patient, Device, Group and Location. But in current implementation, it's only accepting FHIR Patient resource. It creates a OpenMRS Patient using FHIR Patient and store under Encounter's Patient.

Performer > Encounter's Provider

Performer filed can be represent in Practitioner and Organization. But in current implementation, it's only accepting FHIR Practitioner resource. It creates a OpenMRS Provider using FHIR Practitioner and store under Encounter's Provider.

Result > Obs Group

Result field can contain zero to many Observations. These FHIR Observations can map into OpenMRS Obs. In order to store multiple Obs, it uses Obs Groups.

ImagingStudy > Obs Group

ImagingStudy field can contain zero to many Observations. These FHIR ImagingStudy can map into OpenMRS Obs. In order to store multiple Obs, it uses Obs Groups.

ImagingStudy Mapping
ImagingStudy (Obs) 0..*
  - Patient : Person
  - uid : uuid
  - accession : AccessionNumber
  - numberOfSeries : Get Size of Series of Obs
  - numberOfInstance : ? Answer to the concept
  - clinicalInformation : comment
  |
  |--> Series (Obs) 0..*
         - modality : ?
         - uid : uuid
         - numberOfInstances: ? Answer ot the concept
         - url : comment
          |
          |--> Instance (Obs) 0..*
                 - number : ?
                 - uid: uuid
                 - sopclass : ?
                 - type : ?
                 - title : ?
                 - content : Complex Obs

PresentedForm > Complex Obs

PresentedForm represent zero to many FHIR attachments. These FHIR Attachments can store using OpenMRS Complex Obs. Also it uses Obs Group to store multiple Complex Obs.