Observation — Atomic clinical measurement
The elementary unit of clinical data in FHIR. Every vital sign, lab result, anthropometry, social-history item, and clinical score flows through Observation.
Purpose
Observation represents an atomic clinical measurement or assertion made about a patient, a specimen, a device or a group. Typical usages:
- vital signs (blood pressure, heart rate, temperature, SpO₂, weight…);
- lab results (CBC, biochemistry, serology);
- quantitative imaging (lesion measurement);
- scored clinical assessments (Glasgow, ECOG, NIHSS);
- social determinants of health (smoking status, education);
- patient-reported outcomes (PROMs).
An Observation can be atomic (one value) or composite via component
(blood pressure, cardiac cycles, differential counts).
Key fields
| Field | Type | Cardinality | Role |
|---|---|---|---|
identifier | Identifier[] | 0..* | External identifiers (lab accession number…). |
status | code | 1..1 | registered, preliminary, final, amended, corrected, cancelled, entered-in-error, unknown. |
category | CodeableConcept[] | 0..* | Observation category (vital-signs, laboratory, imaging, survey, social-history…). |
code | CodeableConcept | 1..1 | What is being observed. Typically a LOINC code. |
subject | Reference | 0..1 | Subject (Patient, Group, Device, Location). |
encounter | Reference(Encounter) | 0..1 | Care context. |
effective[x] | dateTime | Period | Timing | instant | 0..1 | Measurement date/time or interval. |
issued | instant | 0..1 | When the result was made available. |
performer | Reference[] | 0..* | Who performed the measurement (Practitioner, Organization, Patient, Device). |
value[x] | Quantity | CodeableConcept | string | boolean | integer | Range | Ratio | SampledData | time | dateTime | Period | Attachment | Reference | 0..1 | The observed value. Very broad choice type. |
dataAbsentReason | CodeableConcept | 0..1 | Why value[x] is absent (unknown, not-performed, error…). |
interpretation | CodeableConcept[] | 0..* | Abnormal flag (v2 OBX-8 equivalent). |
note | Annotation[] | 0..* | Free-text comments. |
bodySite | CodeableConcept | 0..1 | Anatomical site (SNOMED CT). |
method | CodeableConcept | 0..1 | Method (auscultation, palpation, instrument…). |
specimen | Reference(Specimen) | 0..1 | Analysed specimen. |
device | Reference(Device) | 0..1 | Device used. |
referenceRange | BackboneElement[] | 0..* | Reference range with low, high, appliesTo. |
hasMember | Reference[] | 0..* | Sub-observations (panel). |
derivedFrom | Reference[] | 0..* | Observations this one derives from (computation, aggregation). |
component | BackboneElement[] | 0..* | Sub-measurements of the same act (systolic/diastolic components of a BP). |
JSON example
A blood pressure measurement, 122/78 mmHg, taken on the right arm, status final:
{
"resourceType": "Observation",
"id": "blood-pressure",
"status": "final",
"category": [{
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/observation-category",
"code": "vital-signs",
"display": "Vital Signs"
}]
}],
"code": {
"coding": [{
"system": "http://loinc.org",
"code": "85354-9",
"display": "Blood pressure panel with all children optional"
}],
"text": "Blood pressure"
},
"subject": { "reference": "Patient/example" },
"encounter": { "reference": "Encounter/example" },
"effectiveDateTime": "2026-05-14T10:30:00+01:00",
"performer": [{ "reference": "Practitioner/example" }],
"bodySite": {
"coding": [{
"system": "http://snomed.info/sct",
"code": "368209003",
"display": "Right arm"
}]
},
"component": [{
"code": {
"coding": [{
"system": "http://loinc.org",
"code": "8480-6",
"display": "Systolic blood pressure"
}]
},
"valueQuantity": {
"value": 122,
"unit": "mmHg",
"system": "http://unitsofmeasure.org",
"code": "mm[Hg]"
},
"interpretation": [{
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation",
"code": "N",
"display": "Normal"
}]
}]
}, {
"code": {
"coding": [{
"system": "http://loinc.org",
"code": "8462-4",
"display": "Diastolic blood pressure"
}]
},
"valueQuantity": {
"value": 78,
"unit": "mmHg",
"system": "http://unitsofmeasure.org",
"code": "mm[Hg]"
}
}]
} code= LOINC85354-9(Blood pressure panel).- Two
componententries: systolic (LOINC8480-6) and diastolic (LOINC8462-4), each withvalueQuantityand UCUM unitmm[Hg]. bodySite= SNOMED CT368209003(Right arm).
REST API
GET /Observation/blood-pressure— fetch by id.GET /Observation?patient=example&code=loinc|85354-9— all BPs for a patient.GET /Observation?patient=example&category=vital-signs&date=ge2026-05-01— recent vital signs.GET /Observation?patient=example&code=loinc|2339-0&value-quantity=gt7.0|http://unitsofmeasure.org|mmol/L— glycaemias > 7 mmol/L.POST /Observation— creation.$lastn— SMART operation that returns the last N observations grouped by code.
Profiles
| Profile | Regulator | Restrictions |
|---|---|---|
| Vital Signs Profile | HL7 — Core spec | Mandatory base profile for any category=vital-signs. Minimum cardinality on code, valueQuantity, effectiveDateTime. |
| US Core Observation Lab | HL7 US Realm | laboratory category, mandatory LOINC code, status in final/amended/corrected/cancelled/entered-in-error. |
| IPS Results (UV) | HL7 + CEN/TC 251 | Cross-border European / global profile. Covers lab, radiology, pathology results. |
| FR Core Observation | ANS | French profiles — biology results (NABM/LOINC codes), vital signs. |
Common pitfalls
value[x]+dataAbsentReason: invariantobs-6forbids having both at once. Pick one.- Display unit vs UCUM:
valueQuantity.unitis free-text butvalueQuantity.codemust be a strict UCUM code.mmHgis the display unit,mm[Hg]is the official UCUM code. - component vs hasMember: use
componentfor intrinsically-linked measurements (BP syst/diast); usehasMemberfor a panel where each member is itself a stand-alone Observation (CBC). - Wrong
category: for US Core Lab, missingcategory=laboratorydrops the resource out of profile. Query layers stop finding it. - Status
finalfor unvalidated data: instrument-raw values should bepreliminaryuntil biologist validation, then promoted tofinal. Posting everything asfinalbypasses validation workflow. - Absolute vs relative reference:
"reference": "Patient/example"inside a relative Bundle vs"reference": "https://example.com/fhir/Patient/example"in direct REST. Mixing both breaks strict servers.
Related resources
- DiagnosticReport — wrapper for a complete report, references one or more Observations plus any images.
- Patient — observation subject.
- Encounter — care context.
- Practitioner — who performed the measurement.
- Specimen — analysed specimen for biology observations.
- Device — measurement device (analyser, monitor).
- HL7 v2 equivalent — ORU^R01 segment OBX.