Short answer: DiagnosticReport is the FHIR resource for a report: the set of findings a laboratory, an imaging department or a pathology service issues together, with a status, a category, who issued it and when, a conclusion, the result Observations it groups, the imagingStudy it describes and a presentedForm (the signed PDF). One blood count is a DiagnosticReport with a dozen Observations; one CT scan is a DiagnosticReport with a narrative conclusion and a link to the images. An Observation is a single value; a DiagnosticReport is the document that delivers many of them.
A valid FHIR R4 example
A valid FHIR R4 DiagnosticReport requires status and code, and in practice also carries subject, category, effective time, issued time, performer and the result Observations it groups. The example below is a final haematology report for a complete blood count, coded with a LOINC panel, linking three Observations, a conclusion with a SNOMED CT code and the signed PDF.
{
"resourceType": "DiagnosticReport",
"id": "cbc-2026-03-14",
"identifier": [{"system": "https://lab.example.org/reports", "value": "RPT-2026-77812"}],
"basedOn": [{"reference": "ServiceRequest/order-778812"}],
"status": "final",
"category": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/v2-0074", "code": "HM", "display": "Hematology"}]}],
"code": {"coding": [{"system": "http://loinc.org", "code": "58410-2", "display": "CBC panel - Blood by Automated count"}]},
"subject": {"reference": "Patient/example"},
"encounter": {"reference": "Encounter/visit-2026-03-14"},
"effectiveDateTime": "2026-03-14T08:40:00+01:00",
"issued": "2026-03-14T13:05:00+01:00",
"performer": [{"reference": "Organization/central-lab"}],
"resultsInterpreter": [{"reference": "Practitioner/haematologist-7"}],
"specimen": [{"reference": "Specimen/edta-1"}],
"result": [
{"reference": "Observation/hgb-2026-03-14"},
{"reference": "Observation/wbc-2026-03-14"},
{"reference": "Observation/plt-2026-03-14"}
],
"conclusion": "Mild normocytic anaemia; other parameters within reference ranges.",
"conclusionCode": [{"coding": [{"system": "http://snomed.info/sct", "code": "271737000", "display": "Anemia"}]}],
"presentedForm": [{"contentType": "application/pdf", "url": "https://lab.example.org/reports/RPT-2026-77812.pdf", "title": "CBC report"}]
}
Each Observation referenced in result has its own LOINC code, value, unit and reference range, as described in FHIR Observation explained.
Status: the report lifecycle
A FHIR DiagnosticReport's status follows the life of a report: registered when ordered, partial as results arrive, preliminary when complete but unverified, final when signed, then amended, corrected or appended if it changes afterwards; cancelled and entered-in-error close it otherwise. Consumers must watch for amended and corrected reports, because a value final last week may have changed.
registered (ordered, nothing yet) → partial (some results in) → preliminary (all in, not verified) → final (signed) → amended or corrected (changed after signing, with the reason in a note) or appended (more added). cancelled and entered-in-error close it otherwise. Consumers must watch for amended and corrected: a value that was final last week may have changed, and the report's issued time moves.
Category and code
DiagnosticReport.category says which diagnostic service issued the report, using HL7 v2 table 0074 codes such as LAB, HM haematology, CH chemistry, MB microbiology, RAD radiology and PAT pathology. DiagnosticReport.code says what the report is, normally a LOINC panel code for laboratory reports and a LOINC radiology or pathology study code, or a local procedure code, for imaging and pathology.
category uses the HL7 v2 table 0074 diagnostic service section: LAB, HM haematology, CH chemistry, MB microbiology, RAD radiology, PAT pathology, CG cytogenetics and others; US Core requires LAB for laboratory reports. code says what the report is: for labs, a LOINC panel code (CBC 58410-2, comprehensive metabolic panel 24323-8, lipid panel 57698-3); for imaging, a LOINC radiology code or a local procedure code; for pathology, a LOINC pathology study code. See What is a LOINC code?.
Lab, imaging and pathology reports
Laboratory, imaging and pathology reports use the same FHIR DiagnosticReport resource with different elements. A laboratory report groups one Observation per analyte with Specimen resources; an imaging report carries the radiologist's conclusion, a reference to the ImagingStudy and key images; a pathology report holds the diagnosis text, grading Observations and tissue specimens. All three attach a signed PDF in presentedForm.
| Laboratory | Imaging | Pathology | |
|---|---|---|---|
| result | One Observation per analyte | Usually none; sometimes measurements | Observations for grading, markers, margins |
| conclusion | Optional comment | The radiologist's impression | The diagnosis text |
| imagingStudy | — | Reference to the ImagingStudy | Whole-slide images where digital |
| media | — | Key images | Representative slide images |
| presentedForm | Signed PDF | Signed PDF | Signed PDF |
| specimen | Blood, urine… Specimen resources | — | Tissue Specimen resources |
For imaging, the images themselves stay in DICOM; see FHIR ImagingStudy vs DICOMweb. For the patient-facing meaning of these reports, see How to read your lab results and CT scan report explained.
DiagnosticReport vs DocumentReference
A FHIR DiagnosticReport is a structured report whose findings are, or can be, coded Observations, while a DocumentReference is a pointer to a document of any kind with metadata and the file. Structured laboratory results become a DiagnosticReport; a scanned PDF with no structured data becomes a DocumentReference, and many systems create both for the same report.
A DiagnosticReport is a structured report whose findings are (or can be) coded Observations; a DocumentReference is a pointer to a document of any kind, with metadata and the file. A lab report that arrives as HL7 v2 ORU becomes a DiagnosticReport with Observations. A scanned PDF of a report from another country, with no structured data, is a DocumentReference. Many systems create both: the DiagnosticReport for the data, with presentedForm or a DocumentReference for the signed file. See DocumentReference vs DiagnosticReport vs Binary.
Mistakes that break reports
The mistakes that most often break FHIR DiagnosticReports are sending Observations with no report to group them, marking a report final while its Observations are still preliminary, duplicating the conclusion into an Observation with an invented code, omitting the issued timestamp so corrections cannot be detected, and inventing local panel codes where a LOINC panel already exists.
- Results written as Observations with no DiagnosticReport, so a consumer cannot tell which values were issued together or which report was amended.
status: finalon a report whose Observations are stillpreliminary.- The conclusion duplicated into an Observation with a made-up code.
issuedmissing, so the consumer cannot order reports or detect corrections.- Panel codes invented locally when a LOINC panel exists.
In Anpheros
Anpheros Platform turns laboratory results that arrive through its lab connector, as HL7 v2 ORU, CSV or JSON, into FHIR Observations grouped under a DiagnosticReport, with the laboratory as performer and the original file as presentedForm where available. A report a person scans in the app is kept as one report with its individual results and the original image.
The lab connector documents the accepted formats. Because the scanned original is kept with the report, a clinician can check any value against the source. Amended reports keep their history through resource versions.
Related pages
- FHIR Observation explained
- DocumentReference vs DiagnosticReport vs Binary
- FHIR ImagingStudy vs DICOMweb
- Lab connector: HL7 v2, CSV or JSON to FHIR
- What is a LOINC code?
- DiagnosticReport example on the developer site
Sources
- HL7 FHIR R4: DiagnosticReport
- HL7 Terminology: v2-0074 diagnostic service section
- HL7 US Core: DiagnosticReport for laboratory results
- HL7 IPS: DiagnosticReport profile
- LOINC: panels and forms
Frequently asked questions
Do I need a DiagnosticReport for a single test?
Strictly, a single Observation can stand alone, and home measurements usually do. Anything issued by a laboratory is better wrapped in a DiagnosticReport, even with one result, so status, issuer and the signed form travel with it.
How do I represent an amended result?
Update the Observation (its version changes), set the DiagnosticReport status to amended or corrected, update issued, and record the reason in a note. Never create a second report with the same identifier.
Where does the reference range go?
On each Observation, in referenceRange, because ranges differ per analyte and per laboratory. The report has no range of its own.
Can a DiagnosticReport contain other reports?
Not directly in R4; related reports reference each other through basedOn or extensions, and a panel's sub-panels are usually modelled as Observations with hasMember. R5 keeps the same approach.
Try it free in the sandbox
Your first FHIR call in 5 minutes. An HL7 FHIR R4 API with the patient's consent built in: try it in the sandbox, then connect your own app or clinic system.
Free · 30 synthetic patients · no card

The more you log, the clearer your record
Your health history in one place, under your control.
Free · Works in your browser · No card
