Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Imaging reports over FHIR

Medical imaging studies and related reports are a priority category of Regulation (EU) 2025/327 (Art 14(1)(d)). The document list names the imaging documents of a member that serves them itself, beside the patient summary, each at a Binary/{token} URL the gateway signs for you (Reading a member’s document).

The gateway also writes an imaging report from a member’s openEHR composition when you declare the template those compositions are of (Imaging reports the gateway writes). It also receives an imaging report another system sends and writes it to the member you declare (Imaging reports the gateway receives).

Imaging documents in the list

The HL7 Europe EU Health Data API 1.0.0-ballot types an imaging document by the LOINC codes of eehrxf-document-type-medical-imaging-vs: 85430-7 (diagnostic imaging report) and 18748-4 (diagnostic imaging study). A type of either code, alone or in the LOINC system, or http://loinc.org|, admits them, and a type that admits only them lists no summary. With no type, the list names every document type it serves.

Imaging reports the gateway writes

Declare the template of the members’ imaging compositions in a [[fhir.report]] entry, as for a discharge report:

[[fhir.report]]
category = "Medical-Imaging"
template = "/etc/ferrofed/templates/ferrobridge_imaging_report.adlt"
archetypes = [
  "/etc/ferrofed/archetypes/openEHR-EHR-COMPOSITION.report-result.v1.adl",
  "/etc/ferrofed/archetypes/openEHR-EHR-OBSERVATION.imaging_exam_result.v1.adl",
]

The shipped imaging mapping of eehrxf maps FerroBRIDGE’s imaging report template, openEHR-EHR-COMPOSITION.ferrobridge_imaging_report.v1.0.0, a report composition holding one openEHR-EHR-OBSERVATION.imaging_exam_result.v1. The configuration refuses a template the mapping does not compile against.

The list then runs the reserved stored query eu.ferrofed.eehrxf::imaging-report on every member the patient resolves at that does not serve its imaging documents itself. It selects every whole composition that contains openEHR-EHR-OBSERVATION.imaging_exam_result.v1, by the member’s own ehr_id alone. The list names one DocumentReference per composition, typed 85430-7, in the category Medical-Imaging, its format BundleReportEuImaging and its master identifier the composition’s versioned object as a urn:uuid:. A search whose type admits only 18748-4 asks no member this query.

Reading the URL asks that member alone for the composition and writes it as an HL7 Europe Imaging Report 1.0.0-ballot BundleReportEuImaging: a CompositionEuImaging authored by the gateway’s Device, whose owner is the operator, its custodian the member’s organisation, about a Patient named by the identifier the identity binding holds behind the member’s ehr_id and described by the demographics binding’s header as the laboratory report’s is, with the DiagnosticReportEuImaging and the ImagingStudyEuImaging the mapping writes. The imaging study section lists the study, and the order, history and procedure sections the profile requires are empty as unavailable. One Provenance names the member. Completeness, the access record under Medical-Imaging and the 424 answers follow the discharge report’s.

Imaging reports the gateway receives

Declare the member that stores received imaging reports in a [[fhir.receive]] entry, with the HL7 Europe Imaging Report 1.0.0-ballot package, its dependency closure, FerroBRIDGE’s ADL 2 imaging report template with its archetypes, and the imaging project eehrxf ships:

[[fhir.receive]]
category = "Medical-Imaging"
member = "node-a"
package = "/etc/ferrofed/packages/hl7.fhir.eu.imaging-1.0.0-ballot.tgz"
dependencies = [
  # the discharge report's closure, as in its example, and:
  "/etc/ferrofed/packages/hl7.fhir.eu.health-data-api-1.0.0-ballot.tgz",
  "/etc/ferrofed/packages/hl7.fhir.eu.base-2.0.0-ballot.tgz",
  "/etc/ferrofed/packages/hl7.fhir.eu.extensions.r4-1.2.0.tgz",
  "/etc/ferrofed/packages/hl7.terminology.r4-7.0.1.tgz",
  "/etc/ferrofed/packages/hl7.fhir.uv.xver-r5.r4-0.0.1-snapshot-2.tgz",
  "/etc/ferrofed/packages/fhir.dicom-2025.3.20250714.tgz",
  "/etc/ferrofed/packages/ihe.iti.mhd-4.2.3.tgz",
  "/etc/ferrofed/packages/ihe.iti.pdqm-3.2.0.tgz",
  "/etc/ferrofed/packages/ihe.iti.balp-1.1.4.tgz",
  "/etc/ferrofed/packages/ihe.formatcode.fhir-1.4.0.tgz",
]
template = "/etc/ferrofed/templates/ferrobridge_imaging_report.adlt"
archetypes = [
  "/etc/ferrofed/archetypes/openEHR-EHR-COMPOSITION.report-result.v1.adl",
  "/etc/ferrofed/archetypes/openEHR-EHR-OBSERVATION.imaging_exam_result.v1.adl",
]
files = [
  "/etc/ferrofed/mappings/imaging/ferrobridge_eu_imaging.context.yml",
  # and every other file of the imaging project, in its order
]
context = "ferrobridge_eu_imaging.context"
language = "en"
territory = "NL"
  • FerroBRIDGE’s validator refuses a package set that lacks a package a manifest names, so the list holds every package the imaging package and the HL7 Europe Health Data API package it names depend on, at the versions their manifests name.
  • A document whose Composition.category is Medical-Imaging is held to every constraint of BundleReportEuImaging and CompositionEuImaging, and of the profiles its entries claim, before anything reaches a member. A document that breaks one is refused 422 and no member is asked.
  • The document is mapped into one composition of the template, the report kept byte for byte in its FEEDER_AUDIT.original_content, and written to the declared member by its own ehr_id alone, as a received patient summary is. Each receipt is recorded once under Medical-Imaging in the access log.

A member’s own imaging documents

A member can serve its imaging documents itself, as an HL7 Europe EU Health Data API Document Access Provider. Declare an hl7-fhir-rest endpoint of the member with categories = ["Medical-Imaging"], the BundleReportEuImaging profile (http://hl7.eu/fhir/imaging/StructureDefinition/BundleReportEuImaging) and the identifier system of its ehr_id, as for a member that serves its own summary.

The gateway asks the member by its own ehr_id alone, with the interactions the Document Access Provider capability statement makes SHALL:

  1. GET {endpoint}/Patient?identifier={system}|{ehr_id} for the logical id of the member’s Patient. An empty searchset means the member holds no imaging document of the patient, and nothing more is asked.
  2. GET {endpoint}/DocumentReference?patient={id}&type=http://loinc.org|85430-7,http://loinc.org|18748-4 for its imaging documents, each next page followed under its own base. The type names the codes of the value set your search admits, ORed with a comma as FHIR R4 search allows of every parameter.

The list names each DocumentReference the member answers as the member holds it, with one change: each content.attachment.url becomes a Binary/{token} the gateway signs for you, naming the member, its ehr_id, the Medical-Imaging category and the logical id of the member’s Binary. Reading that URL asks the member alone for GET {endpoint}/Binary/{id} and answers its bytes and media type as the member sent them. The rules are those of a member’s own laboratory reports: an attachment URL that names no Binary under the member’s endpoint, or a Patient search that names more than one patient, makes the member one in node-error, and a member that does not answer fails the list under all-or-nothing, 424 or 504 naming it, and is named in an outcome entry under partial. Each list and read is recorded under Medical-Imaging in the access log, naming the member’s own endpoint and its ehr_id (fhir/list/own_imaging.rs).

The component behind the category

The component work for imaging is FerroBRIDGE’s, through the published eehrxf crate: the imaging crosswalks to the HL7 Europe Imaging Report profiles, and what the component accepts when it receives a document.