Written and maintained by CASRAI Editorial Board
Last updated
The HL7 FHIR Observation resource (normative since FHIR Release 4) is the foundational clinical data structure in Fast Healthcare Interoperability Resources (FHIR) used to represent discrete measurements, point-in-time clinical assertions, laboratory test results, vital signs, social determinants of health (SDOH), and wearable device metrics. Nearly every diagnostic workflow, clinical registry, and electronic clinical quality measure (eCQM) queries or writes Observation instances to exchange quantitative and qualitative patient data across Electronic Health Record (EHR) systems.
What Is the FHIR Observation Resource Used For?
In the HL7 FHIR data model, an Observation captures a single name-value pair (or a tightly coupled multi-component measurement such as systolic and diastolic blood pressure) asserted about a subject (typically a Patient, Group, or Device) at a specific point or interval in time. Under the HL7 US Core Implementation Guide (which maps to ONC USCDI requirements), Observation instances are partitioned by Observation.category into distinct clinical domains:
- Laboratory Results (
category = laboratory): Individual serum, plasma, urine, microbiology, and pathology analyte measurements (e.g., serum creatinine, hemoglobin A1c, SARS-CoV-2 RNA PCR). - Vital Signs (
category = vital-signs): Standardized physiological measurements governed by strict US Core Vital Signs profiles, including body temperature, heart rate, respiratory rate, oxygen saturation (SpO2), body height, body weight, BMI, and composite blood pressure panels. - Clinical Assessments, Surveys, and SDOH (
category = survey | social-history): Scored patient-reported outcomes (such as PHQ-9 depression scores or PROMIS T-scores), tobacco smoking status, alcohol use screening, and food/housing insecurity assertions. - Physical Exam and Imaging Findings (
category = exam | imaging): Discrete clinical examination assertions (such as heart murmur auscultation or echocardiographic left ventricular ejection fraction [LVEF]).
Core FHIR Observation Data Elements and Composite Components
A conformant FHIR R4 Observation resource requires a lifecycle status (such as registered, preliminary, final, amended, corrected, or entered-in-error), a code identifying what was observed, a subject reference, an effectiveDateTime (or effectivePeriod) indicating the physiologically relevant collection time, and a polymorphic value[x] element:
- Polymorphic
value[x]Choices: Depending on the measurement type, the result is stored invalueQuantity(numeric value plus a Unified Code for Units of Measure [UCUM] unit),valueCodeableConcept(coded qualitative finding),valueString,valueBoolean,valueInteger, orvalueRange. If a test was ordered or attempted but produced no value (for example, a hemolyzed blood specimen),value[x]is omitted anddataAbsentReasonis populated. - Multi-Value
Observation.component[]vs.Observation.hasMember[]: Measurements that cannot be interpreted independently—most notably arterial blood pressure (LOINC85354-9)—omit the rootvalue[x]and instead store Systolic Blood Pressure (LOINC8480-6) and Diastolic Blood Pressure (LOINC8462-4) as nested entries insideObservation.component[]. Conversely, multi-analyte panels where each analyte is clinically valid on its own (such as a Basic Metabolic Panel or Vital Signs Panel) use a parent groupingObservationwhosehasMember[]array points to separate childObservationresources.
How Are LOINC and SNOMED CT Codes Used in FHIR Observations?
To prevent semantic ambiguity between health systems, HL7 FHIR and US Core enforce a strict division of labor between LOINC (Logical Observation Identifiers Names and Codes), SNOMED CT, and UCUM—often summarized in biomedical informatics as ”LOINC codes the question; SNOMED CT or UCUM codes the answer”:
| Observation Element | Required Terminology Standard | Clinical Role & Example |
|---|---|---|
Observation.code |
LOINC (primary standard for labs, vitals, and survey scores) | Identifies the question or observable property measured—e.g., LOINC 4548-4 (Hemoglobin A1c/Hemoglobin.total in Blood) or LOINC 8867-4 (Heart rate). |
Observation.valueQuantity |
UCUM (http://unitsofmeasure.org) |
Encodes the numeric answer and unit—e.g., value: 7.2, code: "%" for HbA1c, or value: 74, code: "/min" for heart rate. |
Observation.valueCodeableConcept |
SNOMED CT (http://snomed.info/sct) or LOINC Answer Lists (LA...) |
Encodes a qualitative or categorical answer—e.g., SNOMED CT 260373001 (Detected) for a viral PCR test, or SNOMED CT 112283007 (Staphylococcus aureus) for a culture isolate. |
Observation.bodySite & Observation.method |
SNOMED CT | Identifies anatomical collection site (e.g., SNOMED CT 368209003 Right upper arm structure) and measurement technique. |
Observation.interpretation |
HL7 v3 ObservationInterpretation | Flags abnormal clinical thresholds—e.g., H (High), HH (Critical high), L (Low), N (Normal), or A (Abnormal). |
While ICD-10-CM is used in Condition and Claim resources for billing diagnoses (see SNOMED vs. ICD-10), Observation relies on LOINC and SNOMED CT for granular clinical measurement fidelity. Likewise, medication or food hypersensitivities must never be modeled as generic observations; they belong in the dedicated FHIR AllergyIntolerance resource, with access tracked via FHIR AuditEvent logs.
How Do FHIR Observations Link to DiagnosticReport, QuestionnaireResponse, and CarePlan?
In production EHR architectures, an Observation rarely exists in isolation. It connects to upstream data collection instruments and downstream clinical reports through explicit resource references:
- Linking
ObservationtoDiagnosticReport: While anObservationrepresents a single atomic measurement (e.g., Serum Sodium = 140 mmol/L), aDiagnosticReportprovides the clinical context, ordering request (basedOn -> ServiceRequest), pathologist or radiologist narrative conclusion, and legal sign-off for a complete diagnostic study or lab panel. TheDiagnosticReport.result[]array containsReference(Observation)pointers to all constituent atomic or panelObservationinstances that make up that report. - Linking
fhir questionnaireandfhir questionnaireresponsetoObservation: In HL7 FHIR, aQuestionnairedefines the blank structure, item linkIds, and validation rules of a clinical intake form or PRO instrument, and aQuestionnaireResponsestores a specific patient’s completed answers. Because EHR analytics engines and clinical decision support rules queryObservationrather than nested form trees, the HL7 Structured Data Capture (SDC) Observation Extraction workflow maps LOINC-coded items inside aQuestionnaireResponseinto discreteObservationresources that reference the source form viaObservation.derivedFrom -> Reference(QuestionnaireResponse). - Linking
Observationtofhir careplan: A longitudinalCarePlancoordinates multidisciplinary goals and interventions for chronic disease management. Within aCarePlan,Goal.target.measureuses LOINC codes matching targetObservationmetrics (for example, targeting an HbA1cObservationbelow 7.0%), whileCarePlan.activity.outcomeReference[]points directly to the follow-upObservationresources that prove whether the intervention achieved its clinical target.
Frequently Asked Questions
What is the FHIR Observation resource used for?
The HL7 FHIR Observation resource is used to capture and exchange discrete measurements and clinical assertions about a patient—including laboratory test results, vital signs, physical exam findings, social determinants of health (SDOH), wearable device readings, and scored clinical survey assessments.
How are LOINC and SNOMED CT codes used in FHIR Observations?
In FHIR Observations, LOINC codes are placed in Observation.code to define the specific clinical question or test being measured (such as LOINC 4548-4 for Hemoglobin A1c), UCUM codes define numeric units in Observation.valueQuantity, and SNOMED CT codes are placed in Observation.valueCodeableConcept (as well as bodySite and method) to represent qualitative or categorical findings (such as ”Detected” or a specific bacterial species).
How do FHIR Observations link to DiagnosticReport?
Individual atomic test measurements are stored as separate Observation resources, and the parent DiagnosticReport groups them together by referencing each constituent Observation inside its DiagnosticReport.result[] reference array, adding the overall diagnostic interpretation, performing laboratory metadata, and signed PDF/narrative report.







