STU 3 Candidate

This page is part of the FHIR Specification (v1.4.0: STU 3 Ballot 3). The current version which supercedes this version is 5.0.0. For a full list of available versions, see the Directory of published versions . Page versions: R5 R4B R4 R3 R2

4.31 Resource Observation - Content

Orders and Observations Work GroupMaturity Level: 3Compartments: Device, Encounter, Patient, Practitioner, RelatedPerson

Measurements and simple assertions made about a patient, device or other subject.

4.31.1 Scope and Usage

Observations are a central element in healthcare, used to support diagnosis, monitor progress, determine baselines and patterns and even capture demographic characteristics. Most observations are simple name/value pair assertions with some metadata, but some observations group other observations together logically, or even are multi-component observations. Note that the DiagnosticReport resource provides a clinical or workflow context for a set of observations.

Uses for the Observation resource include:

  • Vital signs: temperature, blood pressure, respiration rate
  • Laboratory Data
  • Imaging results like bone density or fetal measurements
  • Devices Measurements such as EKG data or Pulse Oximetry data
  • Clinical assessment tools such as APGAR
  • Personal characteristics: height, weight, eye-color
  • Social history: tobacco use, family supports, cognitive status
  • Core characteristics: pregnancy status, death assertion

The following core profiles for the Observation resource have been defined as well. To be conformant to FHIR, implementations SHALL conform to these profiles:

  • Vital signs: temperature, blood pressure, respiration rate

4.31.2 Boundaries and Relationships

In contrast to the Observation resource, the DiagnosticReport resource typically includes additional clinical context and some mix of atomic results, images, imaging reports, textual and coded interpretation, and formatted representations. Laboratory reports, pathology reports, and imaging reports should be represented using the DiagnosticReport resource. The Observation resource is referenced by the DiagnosticReport to provide the atomic results for a particular investigation.

The Observation resources should not be used to record diagnosis or clinical assessments about a patient or subject that are typically captured in the Condition resource or the ClinicalImpression resource. However, the Observation resource is often referenced by the Condition resource to provide specific subjective and objective data to support its assertions. There are other resources that can be considered "specializations" of the Observation resource and should be used for those specific contexts and use cases. They include AllergyIntolerance resource, FamilyMemberHistory resource, Procedure resource, and Questionnaire resource.

In some cases, such as when source data is coming from an HL7 v2 feed, a system may not have information that allows it to distinguish diagnosis, allergy and other "specialized" types of observations from lab, vital sign and other observation types intended to be conveyed with this resource. In those circumstances, such specialized observations may also appear using this resource.

This resource is referenced by ClinicalImpression, Condition, DiagnosticOrder, DiagnosticReport, Goal, Immunization, ImmunizationRecommendation and Sequence

4.31.3 Resource Content

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. Observation IDomainResourceMeasurements and simple assertions
dataAbsentReason SHALL only be present if Observation.value[x] is not present
Component code SHALL not be same as observation code
... identifier 0..*IdentifierUnique Id for this particular observation
... status ?! Σ1..1coderegistered | preliminary | final | amended +
ObservationStatus (Required)
... category 0..1CodeableConceptClassification of type of observation
Observation Category Codes (Example)
... code Σ1..1CodeableConceptType of observation (code / type)
LOINC Codes (Example)
... subject Σ0..1Reference(Patient | Group | Device | Location)Who and/or what this is about
... encounter 0..1Reference(Encounter)Healthcare event during which this observation is made
... effective[x] Σ0..1Clinically relevant time/time-period for observation
.... effectiveDateTimedateTime
.... effectivePeriodPeriod
... issued Σ0..1instantDate/Time this was made available
... performer Σ0..*Reference(Practitioner | Organization | Patient | RelatedPerson)Who is responsible for the observation
... value[x] Σ0..1Actual result
.... valueQuantityQuantity
.... valueCodeableConceptCodeableConcept
.... valueStringstring
.... valueRangeRange
.... valueRatioRatio
.... valueSampledDataSampledData
.... valueAttachmentAttachment
.... valueTimetime
.... valueDateTimedateTime
.... valuePeriodPeriod
... dataAbsentReason I0..1CodeableConceptWhy the result is missing
Observation Value Absent Reason (Extensible)
... interpretation 0..1CodeableConceptHigh, low, normal, etc.
Observation Interpretation Codes (Extensible)
... comment 0..1stringComments about result
... bodySite 0..1CodeableConceptObserved body part
SNOMED CT Body Structures (Example)
... method 0..1CodeableConceptHow it was done
Observation Methods (Example)
... specimen 0..1Reference(Specimen)Specimen used for this observation
... device 0..1Reference(Device | DeviceMetric)(Measurement) Device
... referenceRange I0..*BackboneElementProvides guide for interpretation
Must have at least a low or a high or text
.... low I0..1SimpleQuantityLow Range, if relevant
.... high I0..1SimpleQuantityHigh Range, if relevant
.... meaning 0..1CodeableConceptIndicates the meaning/use of this range of this range
Observation Reference Range Meaning Codes (Example)
.... age 0..1RangeApplicable age range, if relevant
.... text 0..1stringText based reference range in an observation
... related Σ0..*BackboneElementResource related to this observation
.... type 0..1codehas-member | derived-from | sequel-to | replaces | qualified-by | interfered-by
ObservationRelationshipType (Required)
.... target 1..1Reference(Observation | QuestionnaireResponse)Resource that is related to this one
... component Σ0..*BackboneElementComponent results
.... code Σ I1..1CodeableConceptType of component observation (code / type)
LOINC Codes (Example)
.... value[x] Σ0..1Actual component result
..... valueQuantityQuantity
..... valueCodeableConceptCodeableConcept
..... valueStringstring
..... valueRangeRange
..... valueRatioRatio
..... valueSampledDataSampledData
..... valueAttachmentAttachment
..... valueTimetime
..... valueDateTimedateTime
..... valuePeriodPeriod
.... dataAbsentReason I0..1CodeableConceptWhy the component result is missing
Observation Value Absent Reason (Extensible)
.... referenceRange 0..*see referenceRangeProvides guide for interpretation of component result

doco Documentation for this format

UML Diagram

Observation (DomainResource)A unique identifier for the simple observation instanceidentifier : Identifier [0..*]The status of the result value (this element modifies the meaning of other elements)status : code [1..1] « Codes providing the status of an observation. (Strength=Required)ObservationStatus! »A code that classifies the general type of observation being made. This is used for searching, sorting and display purposescategory : CodeableConcept [0..1] « Codes for high level observation categories . (Strength=Example)Observation Category ?? »Describes what was observed. Sometimes this is called the observation "name"code : CodeableConcept [1..1] « Codes identifying names of simple observations. (Strength=Example)LOINC ?? »The patient, or group of patients, location, or device whose characteristics (direct or indirect) are described by the observation and into whose record the observation is placed. Comments: Indirect characteristics may be those of a specimen, fetus, donor, other observer (for example a relative or EMT), or any observation made about the subjectsubject : Reference [0..1] « Patient|Group|Device|Location »The healthcare event (e.g. a patient and healthcare provider interaction) during which this observation is madeencounter : Reference [0..1] « Encounter »The time or time-period the observed value is asserted as being true. For biological subjects - e.g. human patients - this is usually called the "physiologically relevant time". This is usually either the time of the procedure or of specimen collection, but very often the source of the date/time is not known, only the date/time itselfeffective[x] : Type [0..1] « dateTime|Period »The date and time this observation was made available to providers, typically after the results have been reviewed and verifiedissued : instant [0..1]Who was responsible for asserting the observed value as "true"performer : Reference [0..*] « Practitioner|Organization|Patient| RelatedPerson »The information determined as a result of making the observation, if the information has a simple valuevalue[x] : Type [0..1] « Quantity|CodeableConcept|string|Range|Ratio| SampledData|Attachment|time|dateTime|Period »Provides a reason why the expected value in the element Observation.value[x] is missingdataAbsentReason : CodeableConcept [0..1] « Codes specifying why the result (Observation.value[x]) is missing. (Strength=Extensible)Observation Value Absent Reas...+ »The assessment made based on the result of the observation. Intended as a simple compact code often placed adjacent to the result value in reports and flow sheets to signal the meaning/normalcy status of the result. Otherwise known as abnormal flaginterpretation : CodeableConcept [0..1] « Codes identifying interpretations of observations. (Strength=Extensible)Observation Interpretation + »May include statements about significant, unexpected or unreliable values, or information about the source of the value where this may be relevant to the interpretation of the resultcomment : string [0..1]Indicates the site on the subject's body where the observation was made (i.e. the target site)bodySite : CodeableConcept [0..1] « Codes describing anatomical locations. May include laterality. (Strength=Example)SNOMED CT Body Structures?? »Indicates the mechanism used to perform the observationmethod : CodeableConcept [0..1] « Methods for simple observations. (Strength=Example)Observation Methods?? »The specimen that was used when this observation was madespecimen : Reference [0..1] « Specimen »The device used to generate the observation datadevice : Reference [0..1] « Device|DeviceMetric »ReferenceRangeThe value of the low bound of the reference range. The low bound of the reference range endpoint is inclusive of the value (e.g. reference range is >=5 - <=9). If the low bound is omitted, it is assumed to be meaningless (e.g. reference range is <=2.3)low : Quantity(SimpleQuantity) [0..1]The value of the high bound of the reference range. The high bound of the reference range endpoint is inclusive of the value (e.g. reference range is >=5 - <=9). If the high bound is omitted, it is assumed to be meaningless (e.g. reference range is >= 2.3)high : Quantity(SimpleQuantity) [0..1]Code for the meaning of the reference rangemeaning : CodeableConcept [0..1] « Code for the meaning of a reference range. (Strength=Example)Observation Reference Range M...?? »The age at which this reference range is applicable. This is a neonatal age (e.g. number of weeks at term) if the meaning says soage : Range [0..1]Text based reference range in an observation which may be used when a quantitative range is not appropriate for an observation. An example would be a reference value of "Negative" or a list or table of 'normals'text : string [0..1]RelatedA code specifying the kind of relationship that exists with the target resourcetype : code [0..1] « Codes specifying how two observations are related. (Strength=Required)ObservationRelationshipType! »A reference to the observation or [[[QuestionnaireResponse]]] resource that is related to this observationtarget : Reference [1..1] « Observation|QuestionnaireResponse »ComponentDescribes what was observed. Sometimes this is called the observation "code"code : CodeableConcept [1..1] « Codes identifying names of simple observations. (Strength=Example)LOINC ?? »The information determined as a result of making the observation, if the information has a simple valuevalue[x] : Type [0..1] « Quantity|CodeableConcept|string|Range|Ratio| SampledData|Attachment|time|dateTime|Period »Provides a reason why the expected value in the element Observation.value[x] is missingdataAbsentReason : CodeableConcept [0..1] « Codes specifying why the result (Observation.value[x]) is missing. (Strength=Extensible)Observation Value Absent Reas...+ »Guidance on how to interpret the value by comparison to a normal or recommended rangereferenceRange[0..*]A reference to another resource (usually another Observation but could also be a QuestionnaireAnswer) whose relationship is defined by the relationship type coderelated[0..*]Guidance on how to interpret the value by comparison to a normal or recommended rangereferenceRange[0..*]Some observations have multiple component observations. These component observations are expressed as separate code value pairs that share the same attributes. Examples include systolic and diastolic component observations for blood pressure measurement and multiple component observations for genetics observationscomponent[0..*]

XML Template

<Observation xmlns="http://hl7.org/fhir"> doco
 <!-- from Resource: id, meta, implicitRules, and language -->
 <!-- from DomainResource: text, contained, extension, and modifierExtension -->
 <identifier><!-- 0..* Identifier Unique Id for this particular observation --></identifier>
 <status value="[code]"/><!-- 1..1 registered | preliminary | final | amended + -->
 <category><!-- 0..1 CodeableConcept Classification of  type of observation --></category>
 <code><!-- 1..1 CodeableConcept Type of observation (code / type) --></code>
 <subject><!-- 0..1 Reference(Patient|Group|Device|Location) Who and/or what this is about --></subject>
 <encounter><!-- 0..1 Reference(Encounter) Healthcare event during which this observation is made --></encounter>
 <effective[x]><!-- 0..1 dateTime|Period Clinically relevant time/time-period for observation --></effective[x]>
 <issued value="[instant]"/><!-- 0..1 Date/Time this was made available -->
 <performer><!-- 0..* Reference(Practitioner|Organization|Patient|RelatedPerson) Who is responsible for the observation --></performer>
 <value[x]><!-- 0..1 Quantity|CodeableConcept|string|Range|Ratio|SampledData|
   Attachment|time|dateTime|Period Actual result --></value[x]>
 <dataAbsentReason><!-- ?? 0..1 CodeableConcept Why the result is missing --></dataAbsentReason>
 <interpretation><!-- 0..1 CodeableConcept High, low, normal, etc. --></interpretation>
 <comment value="[string]"/><!-- 0..1 Comments about result -->
 <bodySite><!-- 0..1 CodeableConcept Observed body part --></bodySite>
 <method><!-- 0..1 CodeableConcept How it was done --></method>
 <specimen><!-- 0..1 Reference(Specimen) Specimen used for this observation --></specimen>
 <device><!-- 0..1 Reference(Device|DeviceMetric) (Measurement) Device --></device>
 <referenceRange>  <!-- 0..* Provides guide for interpretation -->
  <low><!-- ?? 0..1 Quantity(SimpleQuantity) Low Range, if relevant --></low>
  <high><!-- ?? 0..1 Quantity(SimpleQuantity) High Range, if relevant --></high>
  <meaning><!-- 0..1 CodeableConcept Indicates the meaning/use of this range of this range --></meaning>
  <age><!-- 0..1 Range Applicable age range, if relevant --></age>
  <text value="[string]"/><!-- 0..1 Text based reference range in an observation -->
 </referenceRange>
 <related>  <!-- 0..* Resource related to this observation -->
  <type value="[code]"/><!-- 0..1 has-member | derived-from | sequel-to | replaces | qualified-by | interfered-by -->
  <target><!-- 1..1 Reference(Observation|QuestionnaireResponse) Resource that is related to this one --></target>
 </related>
 <component>  <!-- 0..* Component results -->
  <code><!-- ?? 1..1 CodeableConcept Type of component observation (code / type) --></code>
  <value[x]><!-- 0..1 Quantity|CodeableConcept|string|Range|Ratio|SampledData|
    Attachment|time|dateTime|Period Actual component result --></value[x]>
  <dataAbsentReason><!-- ?? 0..1 CodeableConcept Why the component result is missing --></dataAbsentReason>
  <referenceRange><!-- 0..* Content as for Observation.referenceRange Provides guide for interpretation of component result --></referenceRange>
 </component>
</Observation>

JSON Template

{doco
  "resourceType" : "Observation",
  // from Resource: id, meta, implicitRules, and language
  // from DomainResource: text, contained, extension, and modifierExtension
  "identifier" : [{ Identifier }], // Unique Id for this particular observation
  "status" : "<code>", // R!  registered | preliminary | final | amended +
  "category" : { CodeableConcept }, // Classification of  type of observation
  "code" : { CodeableConcept }, // R!  Type of observation (code / type)
  "subject" : { Reference(Patient|Group|Device|Location) }, // Who and/or what this is about
  "encounter" : { Reference(Encounter) }, // Healthcare event during which this observation is made
  // effective[x]: Clinically relevant time/time-period for observation. One of these 2:
  "effectiveDateTime" : "<dateTime>",
  "effectivePeriod" : { Period },
  "issued" : "<instant>", // Date/Time this was made available
  "performer" : [{ Reference(Practitioner|Organization|Patient|RelatedPerson) }], // Who is responsible for the observation
  // value[x]: Actual result. One of these 10:
  "valueQuantity" : { Quantity },
  "valueCodeableConcept" : { CodeableConcept },
  "valueString" : "<string>",
  "valueRange" : { Range },
  "valueRatio" : { Ratio },
  "valueSampledData" : { SampledData },
  "valueAttachment" : { Attachment },
  "valueTime" : "<time>",
  "valueDateTime" : "<dateTime>",
  "valuePeriod" : { Period },
  "dataAbsentReason" : { CodeableConcept }, // C? Why the result is missing
  "interpretation" : { CodeableConcept }, // High, low, normal, etc.
  "comment" : "<string>", // Comments about result
  "bodySite" : { CodeableConcept }, // Observed body part
  "method" : { CodeableConcept }, // How it was done
  "specimen" : { Reference(Specimen) }, // Specimen used for this observation
  "device" : { Reference(Device|DeviceMetric) }, // (Measurement) Device
  "referenceRange" : [{ // Provides guide for interpretation
    "low" : { Quantity(SimpleQuantity) }, // C? Low Range, if relevant
    "high" : { Quantity(SimpleQuantity) }, // C? High Range, if relevant
    "meaning" : { CodeableConcept }, // Indicates the meaning/use of this range of this range
    "age" : { Range }, // Applicable age range, if relevant
    "text" : "<string>" // Text based reference range in an observation
  }],
  "related" : [{ // Resource related to this observation
    "type" : "<code>", // has-member | derived-from | sequel-to | replaces | qualified-by | interfered-by
    "target" : { Reference(Observation|QuestionnaireResponse) } // R!  Resource that is related to this one
  }],
  "component" : [{ // Component results
    "code" : { CodeableConcept }, // C? R!  Type of component observation (code / type)
    // value[x]: Actual component result. One of these 10:
    "valueQuantity" : { Quantity },
    "valueCodeableConcept" : { CodeableConcept },
    "valueString" : "<string>",
    "valueRange" : { Range },
    "valueRatio" : { Ratio },
    "valueSampledData" : { SampledData },
    "valueAttachment" : { Attachment },
    "valueTime" : "<time>",
    "valueDateTime" : "<dateTime>",
    "valuePeriod" : { Period },
    "dataAbsentReason" : { CodeableConcept }, // C? Why the component result is missing
    "referenceRange" : [{ Content as for Observation.referenceRange }] // Provides guide for interpretation of component result
  }]
}

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. Observation IDomainResourceMeasurements and simple assertions
dataAbsentReason SHALL only be present if Observation.value[x] is not present
Component code SHALL not be same as observation code
... identifier 0..*IdentifierUnique Id for this particular observation
... status ?! Σ1..1coderegistered | preliminary | final | amended +
ObservationStatus (Required)
... category 0..1CodeableConceptClassification of type of observation
Observation Category Codes (Example)
... code Σ1..1CodeableConceptType of observation (code / type)
LOINC Codes (Example)
... subject Σ0..1Reference(Patient | Group | Device | Location)Who and/or what this is about
... encounter 0..1Reference(Encounter)Healthcare event during which this observation is made
... effective[x] Σ0..1Clinically relevant time/time-period for observation
.... effectiveDateTimedateTime
.... effectivePeriodPeriod
... issued Σ0..1instantDate/Time this was made available
... performer Σ0..*Reference(Practitioner | Organization | Patient | RelatedPerson)Who is responsible for the observation
... value[x] Σ0..1Actual result
.... valueQuantityQuantity
.... valueCodeableConceptCodeableConcept
.... valueStringstring
.... valueRangeRange
.... valueRatioRatio
.... valueSampledDataSampledData
.... valueAttachmentAttachment
.... valueTimetime
.... valueDateTimedateTime
.... valuePeriodPeriod
... dataAbsentReason I0..1CodeableConceptWhy the result is missing
Observation Value Absent Reason (Extensible)
... interpretation 0..1CodeableConceptHigh, low, normal, etc.
Observation Interpretation Codes (Extensible)
... comment 0..1stringComments about result
... bodySite 0..1CodeableConceptObserved body part
SNOMED CT Body Structures (Example)
... method 0..1CodeableConceptHow it was done
Observation Methods (Example)
... specimen 0..1Reference(Specimen)Specimen used for this observation
... device 0..1Reference(Device | DeviceMetric)(Measurement) Device
... referenceRange I0..*BackboneElementProvides guide for interpretation
Must have at least a low or a high or text
.... low I0..1SimpleQuantityLow Range, if relevant
.... high I0..1SimpleQuantityHigh Range, if relevant
.... meaning 0..1CodeableConceptIndicates the meaning/use of this range of this range
Observation Reference Range Meaning Codes (Example)
.... age 0..1RangeApplicable age range, if relevant
.... text 0..1stringText based reference range in an observation
... related Σ0..*BackboneElementResource related to this observation
.... type 0..1codehas-member | derived-from | sequel-to | replaces | qualified-by | interfered-by
ObservationRelationshipType (Required)
.... target 1..1Reference(Observation | QuestionnaireResponse)Resource that is related to this one
... component Σ0..*BackboneElementComponent results
.... code Σ I1..1CodeableConceptType of component observation (code / type)
LOINC Codes (Example)
.... value[x] Σ0..1Actual component result
..... valueQuantityQuantity
..... valueCodeableConceptCodeableConcept
..... valueStringstring
..... valueRangeRange
..... valueRatioRatio
..... valueSampledDataSampledData
..... valueAttachmentAttachment
..... valueTimetime
..... valueDateTimedateTime
..... valuePeriodPeriod
.... dataAbsentReason I0..1CodeableConceptWhy the component result is missing
Observation Value Absent Reason (Extensible)
.... referenceRange 0..*see referenceRangeProvides guide for interpretation of component result

doco Documentation for this format

UML Diagram

Observation (DomainResource)A unique identifier for the simple observation instanceidentifier : Identifier [0..*]The status of the result value (this element modifies the meaning of other elements)status : code [1..1] « Codes providing the status of an observation. (Strength=Required)ObservationStatus! »A code that classifies the general type of observation being made. This is used for searching, sorting and display purposescategory : CodeableConcept [0..1] « Codes for high level observation categories . (Strength=Example)Observation Category ?? »Describes what was observed. Sometimes this is called the observation "name"code : CodeableConcept [1..1] « Codes identifying names of simple observations. (Strength=Example)LOINC ?? »The patient, or group of patients, location, or device whose characteristics (direct or indirect) are described by the observation and into whose record the observation is placed. Comments: Indirect characteristics may be those of a specimen, fetus, donor, other observer (for example a relative or EMT), or any observation made about the subjectsubject : Reference [0..1] « Patient|Group|Device|Location »The healthcare event (e.g. a patient and healthcare provider interaction) during which this observation is madeencounter : Reference [0..1] « Encounter »The time or time-period the observed value is asserted as being true. For biological subjects - e.g. human patients - this is usually called the "physiologically relevant time". This is usually either the time of the procedure or of specimen collection, but very often the source of the date/time is not known, only the date/time itselfeffective[x] : Type [0..1] « dateTime|Period »The date and time this observation was made available to providers, typically after the results have been reviewed and verifiedissued : instant [0..1]Who was responsible for asserting the observed value as "true"performer : Reference [0..*] « Practitioner|Organization|Patient| RelatedPerson »The information determined as a result of making the observation, if the information has a simple valuevalue[x] : Type [0..1] « Quantity|CodeableConcept|string|Range|Ratio| SampledData|Attachment|time|dateTime|Period »Provides a reason why the expected value in the element Observation.value[x] is missingdataAbsentReason : CodeableConcept [0..1] « Codes specifying why the result (Observation.value[x]) is missing. (Strength=Extensible)Observation Value Absent Reas...+ »The assessment made based on the result of the observation. Intended as a simple compact code often placed adjacent to the result value in reports and flow sheets to signal the meaning/normalcy status of the result. Otherwise known as abnormal flaginterpretation : CodeableConcept [0..1] « Codes identifying interpretations of observations. (Strength=Extensible)Observation Interpretation + »May include statements about significant, unexpected or unreliable values, or information about the source of the value where this may be relevant to the interpretation of the resultcomment : string [0..1]Indicates the site on the subject's body where the observation was made (i.e. the target site)bodySite : CodeableConcept [0..1] « Codes describing anatomical locations. May include laterality. (Strength=Example)SNOMED CT Body Structures?? »Indicates the mechanism used to perform the observationmethod : CodeableConcept [0..1] « Methods for simple observations. (Strength=Example)Observation Methods?? »The specimen that was used when this observation was madespecimen : Reference [0..1] « Specimen »The device used to generate the observation datadevice : Reference [0..1] « Device|DeviceMetric »ReferenceRangeThe value of the low bound of the reference range. The low bound of the reference range endpoint is inclusive of the value (e.g. reference range is >=5 - <=9). If the low bound is omitted, it is assumed to be meaningless (e.g. reference range is <=2.3)low : Quantity(SimpleQuantity) [0..1]The value of the high bound of the reference range. The high bound of the reference range endpoint is inclusive of the value (e.g. reference range is >=5 - <=9). If the high bound is omitted, it is assumed to be meaningless (e.g. reference range is >= 2.3)high : Quantity(SimpleQuantity) [0..1]Code for the meaning of the reference rangemeaning : CodeableConcept [0..1] « Code for the meaning of a reference range. (Strength=Example)Observation Reference Range M...?? »The age at which this reference range is applicable. This is a neonatal age (e.g. number of weeks at term) if the meaning says soage : Range [0..1]Text based reference range in an observation which may be used when a quantitative range is not appropriate for an observation. An example would be a reference value of "Negative" or a list or table of 'normals'text : string [0..1]RelatedA code specifying the kind of relationship that exists with the target resourcetype : code [0..1] « Codes specifying how two observations are related. (Strength=Required)ObservationRelationshipType! »A reference to the observation or [[[QuestionnaireResponse]]] resource that is related to this observationtarget : Reference [1..1] « Observation|QuestionnaireResponse »ComponentDescribes what was observed. Sometimes this is called the observation "code"code : CodeableConcept [1..1] « Codes identifying names of simple observations. (Strength=Example)LOINC ?? »The information determined as a result of making the observation, if the information has a simple valuevalue[x] : Type [0..1] « Quantity|CodeableConcept|string|Range|Ratio| SampledData|Attachment|time|dateTime|Period »Provides a reason why the expected value in the element Observation.value[x] is missingdataAbsentReason : CodeableConcept [0..1] « Codes specifying why the result (Observation.value[x]) is missing. (Strength=Extensible)Observation Value Absent Reas...+ »Guidance on how to interpret the value by comparison to a normal or recommended rangereferenceRange[0..*]A reference to another resource (usually another Observation but could also be a QuestionnaireAnswer) whose relationship is defined by the relationship type coderelated[0..*]Guidance on how to interpret the value by comparison to a normal or recommended rangereferenceRange[0..*]Some observations have multiple component observations. These component observations are expressed as separate code value pairs that share the same attributes. Examples include systolic and diastolic component observations for blood pressure measurement and multiple component observations for genetics observationscomponent[0..*]

XML Template

<Observation xmlns="http://hl7.org/fhir"> doco
 <!-- from Resource: id, meta, implicitRules, and language -->
 <!-- from DomainResource: text, contained, extension, and modifierExtension -->
 <identifier><!-- 0..* Identifier Unique Id for this particular observation --></identifier>
 <status value="[code]"/><!-- 1..1 registered | preliminary | final | amended + -->
 <category><!-- 0..1 CodeableConcept Classification of  type of observation --></category>
 <code><!-- 1..1 CodeableConcept Type of observation (code / type) --></code>
 <subject><!-- 0..1 Reference(Patient|Group|Device|Location) Who and/or what this is about --></subject>
 <encounter><!-- 0..1 Reference(Encounter) Healthcare event during which this observation is made --></encounter>
 <effective[x]><!-- 0..1 dateTime|Period Clinically relevant time/time-period for observation --></effective[x]>
 <issued value="[instant]"/><!-- 0..1 Date/Time this was made available -->
 <performer><!-- 0..* Reference(Practitioner|Organization|Patient|RelatedPerson) Who is responsible for the observation --></performer>
 <value[x]><!-- 0..1 Quantity|CodeableConcept|string|Range|Ratio|SampledData|
   Attachment|time|dateTime|Period Actual result --></value[x]>
 <dataAbsentReason><!-- ?? 0..1 CodeableConcept Why the result is missing --></dataAbsentReason>
 <interpretation><!-- 0..1 CodeableConcept High, low, normal, etc. --></interpretation>
 <comment value="[string]"/><!-- 0..1 Comments about result -->
 <bodySite><!-- 0..1 CodeableConcept Observed body part --></bodySite>
 <method><!-- 0..1 CodeableConcept How it was done --></method>
 <specimen><!-- 0..1 Reference(Specimen) Specimen used for this observation --></specimen>
 <device><!-- 0..1 Reference(Device|DeviceMetric) (Measurement) Device --></device>
 <referenceRange>  <!-- 0..* Provides guide for interpretation -->
  <low><!-- ?? 0..1 Quantity(SimpleQuantity) Low Range, if relevant --></low>
  <high><!-- ?? 0..1 Quantity(SimpleQuantity) High Range, if relevant --></high>
  <meaning><!-- 0..1 CodeableConcept Indicates the meaning/use of this range of this range --></meaning>
  <age><!-- 0..1 Range Applicable age range, if relevant --></age>
  <text value="[string]"/><!-- 0..1 Text based reference range in an observation -->
 </referenceRange>
 <related>  <!-- 0..* Resource related to this observation -->
  <type value="[code]"/><!-- 0..1 has-member | derived-from | sequel-to | replaces | qualified-by | interfered-by -->
  <target><!-- 1..1 Reference(Observation|QuestionnaireResponse) Resource that is related to this one --></target>
 </related>
 <component>  <!-- 0..* Component results -->
  <code><!-- ?? 1..1 CodeableConcept Type of component observation (code / type) --></code>
  <value[x]><!-- 0..1 Quantity|CodeableConcept|string|Range|Ratio|SampledData|
    Attachment|time|dateTime|Period Actual component result --></value[x]>
  <dataAbsentReason><!-- ?? 0..1 CodeableConcept Why the component result is missing --></dataAbsentReason>
  <referenceRange><!-- 0..* Content as for Observation.referenceRange Provides guide for interpretation of component result --></referenceRange>
 </component>
</Observation>

JSON Template

{doco
  "resourceType" : "Observation",
  // from Resource: id, meta, implicitRules, and language
  // from DomainResource: text, contained, extension, and modifierExtension
  "identifier" : [{ Identifier }], // Unique Id for this particular observation
  "status" : "<code>", // R!  registered | preliminary | final | amended +
  "category" : { CodeableConcept }, // Classification of  type of observation
  "code" : { CodeableConcept }, // R!  Type of observation (code / type)
  "subject" : { Reference(Patient|Group|Device|Location) }, // Who and/or what this is about
  "encounter" : { Reference(Encounter) }, // Healthcare event during which this observation is made
  // effective[x]: Clinically relevant time/time-period for observation. One of these 2:
  "effectiveDateTime" : "<dateTime>",
  "effectivePeriod" : { Period },
  "issued" : "<instant>", // Date/Time this was made available
  "performer" : [{ Reference(Practitioner|Organization|Patient|RelatedPerson) }], // Who is responsible for the observation
  // value[x]: Actual result. One of these 10:
  "valueQuantity" : { Quantity },
  "valueCodeableConcept" : { CodeableConcept },
  "valueString" : "<string>",
  "valueRange" : { Range },
  "valueRatio" : { Ratio },
  "valueSampledData" : { SampledData },
  "valueAttachment" : { Attachment },
  "valueTime" : "<time>",
  "valueDateTime" : "<dateTime>",
  "valuePeriod" : { Period },
  "dataAbsentReason" : { CodeableConcept }, // C? Why the result is missing
  "interpretation" : { CodeableConcept }, // High, low, normal, etc.
  "comment" : "<string>", // Comments about result
  "bodySite" : { CodeableConcept }, // Observed body part
  "method" : { CodeableConcept }, // How it was done
  "specimen" : { Reference(Specimen) }, // Specimen used for this observation
  "device" : { Reference(Device|DeviceMetric) }, // (Measurement) Device
  "referenceRange" : [{ // Provides guide for interpretation
    "low" : { Quantity(SimpleQuantity) }, // C? Low Range, if relevant
    "high" : { Quantity(SimpleQuantity) }, // C? High Range, if relevant
    "meaning" : { CodeableConcept }, // Indicates the meaning/use of this range of this range
    "age" : { Range }, // Applicable age range, if relevant
    "text" : "<string>" // Text based reference range in an observation
  }],
  "related" : [{ // Resource related to this observation
    "type" : "<code>", // has-member | derived-from | sequel-to | replaces | qualified-by | interfered-by
    "target" : { Reference(Observation|QuestionnaireResponse) } // R!  Resource that is related to this one
  }],
  "component" : [{ // Component results
    "code" : { CodeableConcept }, // C? R!  Type of component observation (code / type)
    // value[x]: Actual component result. One of these 10:
    "valueQuantity" : { Quantity },
    "valueCodeableConcept" : { CodeableConcept },
    "valueString" : "<string>",
    "valueRange" : { Range },
    "valueRatio" : { Ratio },
    "valueSampledData" : { SampledData },
    "valueAttachment" : { Attachment },
    "valueTime" : "<time>",
    "valueDateTime" : "<dateTime>",
    "valuePeriod" : { Period },
    "dataAbsentReason" : { CodeableConcept }, // C? Why the component result is missing
    "referenceRange" : [{ Content as for Observation.referenceRange }] // Provides guide for interpretation of component result
  }]
}

 

Alternate definitions: Schema/Schematron, Resource Profile (XML, JSON), Questionnaire

4.31.3.1 Terminology Bindings

PathDefinitionTypeReference
Observation.status Codes providing the status of an observation.RequiredObservationStatus
Observation.category Codes for high level observation categories .ExampleObservation Category Codes
Observation.code
Observation.component.code
Codes identifying names of simple observations.ExampleLOINC Codes
Observation.dataAbsentReason
Observation.component.dataAbsentReason
Codes specifying why the result (Observation.value[x]) is missing.ExtensibleObservation Value Absent Reason
Observation.interpretation Codes identifying interpretations of observations.ExtensibleObservation Interpretation Codes
Observation.bodySite Codes describing anatomical locations. May include laterality.ExampleSNOMED CT Body Structures
Observation.method Methods for simple observations.ExampleObservation Methods
Observation.referenceRange.meaning Code for the meaning of a reference range.ExampleObservation Reference Range Meaning Codes
Observation.related.type Codes specifying how two observations are related.RequiredObservationRelationshipType

4.31.3.2 Constraints

  • obs-3: On Observation.referenceRange: Must have at least a low or a high or text (expression on Observation.referenceRange: low or high or text)
  • obs-6: dataAbsentReason SHALL only be present if Observation.value[x] is not present (expression: dataAbsentReason.empty() or value.empty())
  • obs-7: Component code SHALL not be same as observation code (expression: component.where(code = $context.code).empty())

4.31.4 Notes:

At its simplest, a resource instances can consist of only a code and a value, and status flag. The relevance of other properties will vary based on the type of observation.

Profiles will be created to provide guidance on capturing certain types of simple observations. This resource focuses on the level of detail captured by most systems. However, any "simple" observation can easily be broken into numerous components and sub-components to provide additional information relevant in certain circumstances. As with other resources, extensions can be used to introduce this additional complexity.

4.31.4.1 Grouping of Observations

Many observations have important relationships to other observations and need to be assembled in groups together (traditionally referred to as "panels" or " batteries" by laboratories) that can be used to represent relationships between the individual data items. Typically this is done by referencing the individual observations in the DiagnosticReport resource where the DiagnosticReport.code names the panel and serves as the grouping element. Several examples demonstrate observation grouping using DiagnosticReport as the grouper.

The Observation resource has two structures for grouping observations which allow for grouping and even complex nesting of results. The Observation resource can contain a simple observations (e.g. atomic results) or can itself be a groups/panels of other observations.

First, panels can be assembled as separate resources referenced using the Observation.related element with a defined relationship type. This approach should be used when the attributes within the resource for each observation are different and/or each panel result exists or needs to be processed as independent FHIR resource (i.e they "stand alone"). The Observation.related element defines the grouping of observations into a panel/battery in this case. The Observation.code names the panel but typically does not have its own Observation.value and the set of member observations for a panel or battery are listed in the Observation.related element. This structure also permits further nesting of groups (panel of panels). For example, a bacterial cultures with susceptibility testing can use this structure for grouping, because a panel for susceptibility tests (one for each bacterium isolated) would be linked as panel to the observation about each organism isolated. The example of a complex micro isolate and sensitivities report demonstrates this.

Assessment tools such as an Apgar or Glasgow score have both a value and related observations or answers from which a final score or value is derived and may be grouped as a set of observations using the Observation.related structure. For example, the Glasgow coma score example is structured like a panel with 3 related observations (related type ='derived-from') that measure the status of a given aspect of the patients neurological status. These are added together to get Glasgow Coma Score value.

Secondly panels can be grouped via the component structure, if the panel members share the same attributes and are not separable observations (i.e - they don't "stand alone") or don't need to be processed independently, then the Observation.component element may be used to group them within a single resource. As is true when using Observation.related above, the observation for a panel that carries the component typically does not have its own Observation.value. For example, one might group systolic and diastolic blood pressure within a Blood Pressure Panel using Observation.component because the two are almost always produced together. The GFR example demonstrates another example grouping of observations using Observation.component to tie together the race based estimates of glomerular filtration based upon a serum creatinine measurement.

Grouping via components should be used judiciously because what is available to group can vary widely with the source and the idea of what to group together is often highly contextual and based upon the end user's point of view.

4.31.4.2 Value[x] and Datatypes

  • The element, Observation.value[x], has a variable name depending on the type as follows:
    • valueQuantity
    • valueCodeableConcept
    • valueString
    • valueRange
    • valueRatio
    • valueSampledData
    • valueAttachment
    • valueTime
    • valueDateTime
    • valuePeriod
  • If the data element is usually coded or if the type associated with the Observation.code defines a coded value, use CodeableConcept instead of string data type even if the value is uncoded text. For example the LOINC 43304-5 Chlamydia trachomatis rRNA [Presence] in Unspecified specimen by Probe and target amplification method is typically associated with coded presence/absence concepts. Using the coded value for 'negative' with a standard code translation, the Observation.valueCodeableConcept would be:
    			"valueCodeableConcept": {
    			"coding": [
    			  {
    				"system": "http://snomed.info/sct",
    				"code": "260385009",
    				"display": "Negative"
    			  },
    			  {
    				"system": "urn:oid:2.16.840.1.113883.3.72.5.24",
    				"code": "NEG",
    				"display": "Negative"
    			  }
    			],
    			"text": "Negative for Chlamydia Trachomatis rRNA"
    			  }
    			
    Using text only, the Observation.valueCodeableConcept the would be:
    			"valueCodeableConcept": {
    			"text": "Negative for Chlamydia Trachomatis rRNA"
    			  }
    			
  • A value set is bound to the ValueCodeableConcept element. For example, in the USLab Observation Profile this element is bound to USlab Coded Results, which is composed of several SNOMED CT hierarchies. The source system may also provide their own ("local") coded result values as well. Hence coded results are often coded in multiple value sets based on different code systems and these may be mapped using the ConceptMap resource and/or given as translations directly in the element as shown in the example above.
  • The Boolean data type is rarely used for Observation.value[x] because most observations result values are never truly Boolean due to exceptional values such as "unknown". If needed, use valueCodeableConcept for a Boolean concept instead, and select codes from HL7 v2 Table 0136. These "yes/no" concepts can be mapped to the display name "true/false" or other mutually exclusive terms that may be needed.
  • The special values "E" (error), "L" (below detection limit) and "U" (above detection limit) can be used are in the SampledData data type. However when using valueQuantity in an observation for above and below detection limit values, valueQuantity should be used by stating the limit along with the comparator. In addition, when there is an error the dataAbsentReason element should be used with the appropriate value ( 'error' or "NaN"). For example if the value was below the lower limit of detection of <2.0 mmol/L the Observation.valueQuantity would be:
    		"valueQuantity": {
        "value": 2.0,
         "comparator" : "<",
        "unit": "mmol/l",
        "system": "http://unitsofmeasure.org",
        "code": "mmol/L"
         }
    			
    If the value was "NaN" (i.e. an error) the Observation.valueCodeableConcept would be absent and Observation.dataAbsentReason would be:
    "dataAbsentReason": {
        "coding": [
          {
            "system": "http://hl7.org/fhir/data-absent-reason",
            "code": "NaN",
            "display": "Not a Number"
          }
          
  • Because there are multiple types allowed for the value element, multiple value search parameters are defined. There is no standard parameter for searching values of type Attachment, or Ratio

4.31.4.3 Physiologically Relevant Time of the Observation

The effectiveDateTime or effectivePeriod is the time that the observation is most relevant as an observation of the subject. For a biological subject (e.g. a human patient), this is the physiologically relevant time of the observation. In the case of an observation using a specimen, this represents the start and end of the specimen collection (e.g. 24 hour Urine Sodium), but if the collection time is sufficiently short, this is reported as a point in time value (e.g. normal venipuncture). In the case of an observation obtained directly from a subject (e.g. BP, Chest X-ray), this is the start and end time of the observation process, which again, is often reported as a single point in time.

4.31.4.4 Reference Range

Most commonly observations will only have one generic reference range. Reference ranges may be useful for lab tests and other measures like systolic blood pressure, but will have little relevance for something like "pregnancy status". Systems MAY choose to restrict to only supplying the relevant reference range based on knowledge about the patient (e.g. specific to the patient's age, gender, weight and other factors), but this may not be possible or appropriate. Whenever more than one reference range is supplied, the differences between them SHOULD be provided in the reference range and/or age properties.

4.31.4.5 Canceled or Aborted Observations

If a measurement or test could not be completed (for example if the specimen is unsatisfactory or the provider cancelled the order), then the status value should be updated to "canceled" and the specific details given - preferably as coded values in the dataAbsentReason or valueCodeableConcept element. Additional information may provided in comments as well. The specimen reject example demonstrates this using a coded value for unsatisfactory specimen in dataAbsentReason.

4.31.5 Search Parameters

Search parameters for this resource. The common parameters also apply. See Searching for more information about searching in REST, messaging, and services.

NameTypeDescriptionPaths
categorytokenThe classification of the type of observationObservation.category
codetokenThe code of the observation typeObservation.code
code-value-[x]compositeBoth code and one of the value parameters
component-codetokenThe component code of the observation typeObservation.component.code
component-code-value-[x]compositeBoth component code and one of the component value parameters
component-data-absent-reasontokenThe reason why the expected value in the element Observation.component.value[x] is missing.Observation.component.dataAbsentReason
component-value-concepttokenThe value of the component observation, if the value is a CodeableConceptObservation.component.valueCodeableConcept
component-value-quantityquantityThe value of the component observation, if the value is a Quantity, or a SampledData (just search on the bounds of the values in sampled data)Observation.component.valueQuantity
component-value-stringstringThe value of the component observation, if the value is a string, and also searches in CodeableConcept.textObservation.component.valueString
data-absent-reasontokenThe reason why the expected value in the element Observation.value[x] is missing.Observation.dataAbsentReason
datedateObtained date/time. If the obtained element is a period, a date that falls in the periodObservation.effective[x]
devicereferenceThe Device that generated the observation data.Observation.device
(Device, DeviceMetric)
encounterreferenceHealthcare event related to the observationObservation.encounter
(Encounter)
identifiertokenThe unique id for a particular observationObservation.identifier
patientreferenceThe subject that the observation is about (if patient)Observation.subject
(Patient)
performerreferenceWho performed the observationObservation.performer
(Patient, Organization, Practitioner, RelatedPerson)
relatedcompositeRelated Observations - search on related-type and related-target together
related-targetreferenceResource that is related to this oneObservation.related.target
(Observation, QuestionnaireResponse)
related-typetokenhas-member | derived-from | sequel-to | replaces | qualified-by | interfered-byObservation.related.type
specimenreferenceSpecimen used for this observationObservation.specimen
(Specimen)
statustokenThe status of the observationObservation.status
subjectreferenceThe subject that the observation is aboutObservation.subject
(Device, Location, Patient, Group)
value-concepttokenThe value of the observation, if the value is a CodeableConceptObservation.valueCodeableConcept
value-datedateThe value of the observation, if the value is a date or period of timeObservation.valueDateTime, Observation.valuePeriod
value-quantityquantityThe value of the observation, if the value is a Quantity, or a SampledData (just search on the bounds of the values in sampled data)Observation.valueQuantity
value-stringstringThe value of the observation, if the value is a string, and also searches in CodeableConcept.textObservation.valueString