FHIR Observation Resource (R5)

Observation records a measurement or assertion about a patient: vital signs, laboratory results, social history, survey answers. Element table, search parameters, example JSON and FHIRPath for FHIR R5.

  • FHIR Observation Resource (R5) — part of the free FHIR Toolbox library.
  • Runs entirely in your browser: your FHIR data is never uploaded to a server.

Overview

Observation records a measurement or assertion about a patient: vital signs, laboratory results, social history, survey answers. What was measured lives in code; the result lives in a value[x] choice element (Quantity, CodeableConcept, string and more). Panels such as blood pressure use component for the individual readings.

Elements

ElementTypeCardinalityDescription
Observation.identifierIdentifier0..*Business Identifier for observation
Observation.instantiates[x]canonical | Reference0..1Instantiates FHIR ObservationDefinition
Observation.basedOnReference0..*Fulfills plan, proposal or order
Observation.triggeredByBackboneElement0..*Triggering observation(s)
Observation.triggeredBy.idString0..1Unique id for inter-element referencing
Observation.triggeredBy.extensionExtension0..*Additional content defined by implementations
Observation.triggeredBy.modifierExtensionExtension0..*Extensions that cannot be ignored even if unrecognized
Observation.triggeredBy.observationReference1..1Triggering observation
Observation.triggeredBy.typecode1..1reflex | repeat | re-run
Observation.triggeredBy.reasonstring0..1Reason that the observation was triggered
Observation.partOfReference0..*Part of referenced event
Observation.statuscode1..1registered | preliminary | final | amended +
Observation.categoryCodeableConcept0..*Classification of type of observation
Observation.codeCodeableConcept1..1Type of observation (code / type)
Observation.subjectReference0..1Who and/or what the observation is about
Observation.focusReference0..*What the observation is about, when it is not about the subject of record
Observation.encounterReference0..1Healthcare event during which this observation is made
Observation.effective[x]dateTime | Period | Timing | instant0..1Clinically relevant time/time-period for observation
Observation.issuedinstant0..1Date/Time this version was made available
Observation.performerReference0..*Who is responsible for the observation
Observation.value[x]Quantity | CodeableConcept | string | boolean | integer | Range | Ratio | SampledData | time | dateTime | Period | Attachment | Reference0..1Actual result
Observation.dataAbsentReasonCodeableConcept0..1Why the result is missing
Observation.interpretationCodeableConcept0..*High, low, normal, etc
Observation.noteAnnotation0..*Comments about the observation
Observation.bodySiteCodeableConcept0..1Observed body part
Observation.bodyStructureReference0..1Observed body structure
Observation.methodCodeableConcept0..1How it was done
Observation.specimenReference0..1Specimen used for this observation
Observation.deviceReference0..1A reference to the device that generates the measurements or the device settings for the device
Observation.referenceRangeBackboneElement0..*Provides guide for interpretation
Observation.referenceRange.idString0..1Unique id for inter-element referencing
Observation.referenceRange.extensionExtension0..*Additional content defined by implementations
Observation.referenceRange.modifierExtensionExtension0..*Extensions that cannot be ignored even if unrecognized
Observation.referenceRange.lowQuantity0..1Low Range, if relevant
Observation.referenceRange.highQuantity0..1High Range, if relevant
Observation.referenceRange.normalValueCodeableConcept0..1Normal value, if relevant
Observation.referenceRange.typeCodeableConcept0..1Reference range qualifier
Observation.referenceRange.appliesToCodeableConcept0..*Reference range population
Observation.referenceRange.ageRange0..1Applicable age range, if relevant
Observation.referenceRange.textmarkdown0..1Text based reference range in an observation
Observation.hasMemberReference0..*Related resource that belongs to the Observation group
Observation.derivedFromReference0..*Related resource from which the observation is made
Observation.componentBackboneElement0..*Component results
Observation.component.idString0..1Unique id for inter-element referencing
Observation.component.extensionExtension0..*Additional content defined by implementations
Observation.component.modifierExtensionExtension0..*Extensions that cannot be ignored even if unrecognized
Observation.component.codeCodeableConcept1..1Type of component observation (code / type)
Observation.component.value[x]Quantity | CodeableConcept | string | boolean | integer | Range | Ratio | SampledData | time | dateTime | Period | Attachment | Reference0..1Actual component result
Observation.component.dataAbsentReasonCodeableConcept0..1Why the component result is missing
Observation.component.interpretationCodeableConcept0..*High, low, normal, etc
Observation.component.referenceRange0..*Provides guide for interpretation of component result

Example JSON (R5)

{
  "resourceType": "Observation",
  "id": "blood-pressure",
  "status": "final",
  "category": [
    {
      "coding": [
        {
          "system": "http://terminology.hl7.org/CodeSystem/observation-category",
          "code": "vital-signs"
        }
      ]
    }
  ],
  "code": {
    "coding": [
      {
        "system": "http://loinc.org",
        "code": "85354-9",
        "display": "Blood pressure panel"
      }
    ]
  },
  "subject": {
    "reference": "Patient/example"
  },
  "effectiveDateTime": "2024-05-01T09:30:00Z",
  "component": [
    {
      "code": {
        "coding": [
          {
            "system": "http://loinc.org",
            "code": "8480-6",
            "display": "Systolic blood pressure"
          }
        ]
      },
      "valueQuantity": {
        "value": 120,
        "unit": "mmHg",
        "system": "http://unitsofmeasure.org",
        "code": "mm[Hg]"
      }
    },
    {
      "code": {
        "coding": [
          {
            "system": "http://loinc.org",
            "code": "8462-4",
            "display": "Diastolic blood pressure"
          }
        ]
      },
      "valueQuantity": {
        "value": 80,
        "unit": "mmHg",
        "system": "http://unitsofmeasure.org",
        "code": "mm[Hg]"
      }
    }
  ]
}

FHIRPath

  • Observation.code.coding.where(system='http://loinc.org').code — LOINC code of the observation
  • Observation.component.where(code.coding.code='8480-6').value.ofType(Quantity).value — Systolic value from a blood-pressure panel
  • Observation.component.value.ofType(Quantity).unit — Units of every component reading
  • Observation.effective.ofType(dateTime) — Effective time, narrowed to dateTime with ofType()

Common validation errors

  • Using value instead of the concrete choice name. In JSON it is valueQuantity, valueString, valueCodeableConcept and so on, never a bare value.
  • Setting more than one value[x]. Only one may be present.
  • Omitting status, a required element. Use final, preliminary, amended and so on.
  • Quantity without a coded unit. Set system http://unitsofmeasure.org and a UCUM code alongside the human-readable unit.
  • Putting a panel's readings in separate top-level Observations without linking them, or forgetting that a panel result belongs in component (or hasMember).

FHIR Toolbox is a free, privacy-first collection of HL7 FHIR utilities by Omindra Labs. Every tool performs zero-server processing — your health data never leaves your device.