Release 4 FHIR CI-Build

This page is part of the Continuous Integration Build of FHIR Specification (v4.0.1: R4 - Mixed Normative and STU ) in it's permanent home (it will always (will be available incorrect/inconsistent at this URL). The current version which supercedes this version is 5.0.0 . For a full list of available versions, see times).
See the Directory of published versions icon . Page versions: R5 R4B R4 R3 R2

10.1 Resource Observation - Content

Responsible Owner: Orders and Observations icon Work Group Maturity Level : N   Normative (from v4.0.0) Security Category : Patient Compartments : Device , Encounter , Group , Patient , Practitioner , RelatedPerson
This page has been approved as part of an ANSI standard. See the Observation Package for further details.

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

This resource is an event resource from a FHIR workflow perspective - see Workflow .

Observations are a central element in healthcare, used to support diagnosis, monitor progress, determine baselines and patterns and even capture demographic characteristics. characteristics, as well as capture results of tests performed on products, substances, and environments. 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 and the Observation resource is referenced by DiagnosticReport to represent laboratory, imaging, and other clinical and diagnostic data to form a complete report.

Uses for the Observation resource include:

* The boundaries between clinical findings and disorders remains a challenge in medical ontology. Refer to the Boundaries section below and in Condition for general guidance. These boundaries can be clarified by profiling Observation for a particular use case.

The following set of core profiles for the Observation resource have been defined as well. If implementations use this Resource defined. Implementations using the Observation resource when expressing the profile-specific concepts as structured data, they SHALL conform to the following specified profiles:

Profile Description
Vital signs The FHIR Vital Signs profile sets profiles set the minimum expectations for the Observation Resource resource to record, search and fetch the vital signs (e.g. temperature, blood pressure, respiration rate, etc.) associated with a patient

At its core, Observation allows expressing a name-value pair or structured collection of name-value pairs. As such, it can support conveying any type of information desired. However, that is not its intent. Observation is intended for capturing measurements and subjective point-in-time assessments. It is not intended to be used for those specific contexts and use cases already covered by other FHIR resources. For example, the AllergyIntolerance resource represents a patient allergies, MedicationStatement resource: medications taken by a patient, FamilyMemberHistory resource: a patient's family history, Procedure resource: information about a procedure, and QuestionnaireResponse resource: a set of answers to a set of questions.

The Observation resource should not be used to record clinical diagnosis about a patient or subject that are typically captured in the Condition resource or the ClinicalImpression ClinicalAssessment resource. The Observation resource is often referenced by the Condition resource to provide specific subjective and objective data to support its assertions. assertions, including symptoms and assessments of the presence or absence of diagnostically significant phenomena. Symptoms may sometimes be recorded as Conditions if no etiology has yet been identified, or if the symptom is severe enough to merit independent treatment, but in most cases a symptom can be represented in an Observation with a relationship to the Condition of concern. There will however be situations of overlap. For example, a response to a question of "have you ever taken illicit drugs" could in principle be represented using MedicationStatement, but most systems would treat such an assertion as an Observation. In some cases, such as when source data is coming from an HL7 v2 V2 icon feed, a system might not have information that allows it to distinguish diagnosis, allergy and other "specialized" types of observations from laboratory, 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. Adhering to such convention is an appropriate use of Observation. If implementers are uncertain whether a proposed use of Observation is appropriate, they're encouraged to consult with implementers on chat.fhir.org implementer's stream icon

The Media resource captures a specific type of observation whose value is audio, video or image data. This resource is used instead of When an Observation to represent such forms of information as it exposes instantiates an ObservationDefinition , the metadata relevant for interpreting elements of the information. See Media's boundaries section Observation resource are expected to see how Media (and Observation) differs inherit their content from ImagingStudy and DocumentReference the corresponding definitional elements declared in the ObservationDefinition resource listed here .

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. "Laboratories routinely have a variable that is summative across a series of discrete variables - these are usually called 'impressions' or 'interpretations'. Sometimes they are algorithmically specified and sometimes they have the imprimatur of pathologists and they are conveyed in Observation or DiagnosticReport instead of the Clinical Impression ClinicalAssessment resource. The Observation resource should not be used to record clinical diagnosis about a patient or subject as discussed above.

This The Observation resource is referenced used extensively for observations about people, groups, devices, locations, substances, and procedures – not about the record describing these entities. For example, DeviceAlert represents a single alert or alarm condition detected and signaled by a patient-connected health / medical device to create clinician’s awareness of a patient safety risk that needs to be addressed, whereas Observation captures any evidentiary data needed to interpret the alert condition or that is the reason why the alert condition is present.

The Observation resource contains several elements related to the origin and quality of the observation. To record more detailed information about the source of an Observation, the Provenance resource may be used. More in-depth commentary about or evaluation of the Observation record itself may be recorded in ArtifactAssessment .

Note to Balloters: A new organizer element (trial-use) is added to the normative Observation resource in this ballot. The OO Work Group is seeking reviewers and implementer feedback on this new element, which is intended to help clarify and make explicit when an instance of the Observation resource is used for organizing/grouping sets of sub-observations (e.g., for laboratory panel/battery result reporting). This capability is particularly applicable for use in laboratory result reporting, but it can also be used as appropriate with other types of observations.

Structure

Period SimpleQuantity Period
Name Flags Card. Type Description & Constraints      Filter: Filters doco
. . Observation I N DomainResource Measurements and simple assertions
+ Rule: dataAbsentReason Observation.dataAbsentReason SHALL only be present if Observation.value[x] is not present
+ Rule: If Observation.code Observation.component.code is the same as an Observation.component.code Observation.code, then Observation.value SHALL NOT be present (the Observation.component.value[x] holds the value element associated with the code value).
+ Rule: Observation.component.dataAbsentReason SHALL only be present if Observation.component.value[x] is not present
+ Rule: if organizer exists and organizer = true, then value[x], dataAbsentReason and component SHALL NOT be present
+ Warning: All observations SHOULD have a performer

Elements defined in Ancestors: id , meta , implicitRules , language , text , contained , extension , modifierExtension
. . . identifier Σ 0..* Identifier Business Identifier for observation

. . . basedOn Σ 0..* Reference ( CarePlan | DeviceRequest | ImmunizationRecommendation | MedicationRequest | NutritionOrder | ServiceRequest ) Fulfills plan, proposal or order

. . . triggeredBy 0..* BackboneElement Triggering observation(s)

.. . partOf . observation Σ 1..1 Reference ( Observation ) Triggering observation
.... type Σ 1..1 code 0..* reflex | repeat | re-run
Binding: triggered Bytype ( Required )
. . . . reason 0..1 string Reason that the observation was triggered
... partOf Σ 0..* Reference ( MedicationAdministration | MedicationDispense | MedicationStatement | Procedure | Immunization | ImagingStudy | GenomicStudy ) Part of referenced event

. . . status ?! Σ 1..1 code registered | specimen-in-process | preliminary | final | amended + | corrected | appended | cancelled | entered-in-error | unknown | cannot-be-obtained
ObservationStatus Binding: Observation Status ( Required )
. . . category 0..* CodeableConcept Classification of type of observation
Binding: Observation Category Codes ( Preferred )

. . . code Σ C 1..1 CodeableConcept Type of observation (code / type)
Binding: LOINC Codes codes with Observation or Both ( Example )
. . . subject Σ 0..1 Reference ( Patient | Group | Device | Location | Organization | Procedure | Practitioner | Medication | Substance | BiologicallyDerivedProduct | NutritionProduct ) Who and/or what the observation is about
. . . focus Σ ?! TU Σ 0..* Reference ( Any ) What the observation is about, when it is not about the subject of record

. . encounter . organizer Σ C 0..1 boolean This observation organizes/groups a set of sub-observations
... encounter Σ 0..1 Reference ( Encounter ) Healthcare event during which this observation is made made. If you need to place the observation within one or more episodes of care, use the workflow-episodeOfCare extension
. . . effective[x] Σ 0..1 Clinically relevant time/time-period for observation
. . . . effectiveDateTime dateTime
. . . . effectivePeriod Period
. . . . effectiveTiming Timing
. . . . effectiveInstant instant
. . . issued Σ 0..1 instant Date/Time this version was made available
. . . performer Σ 0..* Reference ( Practitioner | PractitionerRole | Organization | CareTeam | Patient | RelatedPerson | HealthcareService | Group ) Who is responsible for the observation

. . . value[x] Σ I C 0..1 Actual result
. . . . valueQuantity Quantity
. . . . valueCodeableConcept CodeableConcept
. . . . valueString string
. . . . valueBoolean boolean
. . . . valueInteger integer
. . . . valueRange Range
. . . . valueRatio Ratio
. . . . valueSampledData SampledData
. . . . valueTime time
. . . . valueDateTime dateTime
. . . . valuePeriod Period
. . . . valueAttachment Attachment
. . . . valueReference Reference ( MolecularDefinition )
. . . dataAbsentReason I C 0..1 CodeableConcept Why the result value is missing
DataAbsentReason Binding: Data Absent Reason ( Extensible )
. . . interpretation 0..* CodeableConcept High, low, normal, etc. etc
Binding: Observation Interpretation Codes ( Extensible )

. . note . interpretationContext 0..* CodeableReference ( Any ) Context for understanding the observation
Binding: Observation Interpretation Context Codes ( Example )

0..*
. . . note 0..* Annotation Comments about the observation

. . . bodySite 0..1 CodeableConcept DEPRECATED: Observed body part
Binding: SNOMED CT Body Structures ( Example )
. . method . bodyStructure 0..1 CodeableReference ( BodyStructure ) Observed body structure
Binding: SNOMED CT Body Structures ( Example )
0..1
. . . method 0..1 CodeableConcept How it was done
Binding: Observation Methods ( Example )
. . . specimen C 0..1 Reference ( Specimen | Group ) Specimen used for this observation
+ Rule: If Observation.specimen is a reference to Group, the group can only have specimens
. . . device 0..1 Reference ( Device | DeviceMetric ) A reference to the device that generates the measurements or the device settings for the device
(Measurement) Device
. . . referenceRange I C 0..* BackboneElement Provides guide for interpretation
+ Rule: Must have at least a low or a high or text

. . . . low I C 0..1 SimpleQuantity Quantity Low Range, if relevant
+ Rule: If low.comparator exists, it must be '>=' or '>'.
. . . . high C I 0..1 Quantity High Range, if relevant
+ Rule: If high.comparator exists, it must be '<=' or '<'.
0..1
. . . . normalValue 0..1 High Range, CodeableConcept Normal value, if relevant
Binding: Observation Reference Range Normal Value Codes ( Example )
. . . . type 0..1 CodeableConcept Reference range qualifier
Binding: Observation Reference Range Meaning Codes ( Preferred )
. . . . appliesTo 0..* CodeableConcept Reference range population
Binding: Observation Reference Range Applies To Codes ( Example )

. . . . age 0..1 Range Applicable age range, if relevant
. . . . text C 0..1 string markdown Text based reference range in an observation
. . . hasMember Σ 0..* Reference ( Observation | QuestionnaireResponse | MolecularSequence MolecularDefinition ) Related resource that belongs to the Observation group

. . . derivedFrom Σ 0..* Reference ( DocumentReference | ImagingStudy | Media ImagingSelection | QuestionnaireResponse | Observation | MolecularSequence MolecularDefinition | GenomicStudy ) Related measurements resource from which the observation is made from

. . . component Σ C 0..* BackboneElement Component results

. . . . code Σ C 1..1 CodeableConcept Type of component observation (code / type)
Binding: LOINC Codes codes with Observation or Both ( Example )
. . . . value[x] Σ C 0..1 Actual component result
. . . . . valueQuantity Quantity
. . . . . valueCodeableConcept CodeableConcept
. . . . . valueString string
. . . . . valueBoolean boolean
. . . . . valueInteger integer
. . . . . valueRange Range
. . . . . valueRatio Ratio
. . . . . valueSampledData SampledData
. . . . . valueTime time
. . . . . valueDateTime dateTime
. . . . . valuePeriod Period
. . . . . valueAttachment Attachment
. . . . . valueReference Reference ( MolecularDefinition )
. . . . dataAbsentReason I C 0..1 CodeableConcept Why the component result value is missing
DataAbsentReason Binding: Data Absent Reason ( Extensible )
. . . . interpretation 0..* CodeableConcept High, low, normal, etc. etc
Binding: Observation Interpretation Codes ( Extensible )

. . . . referenceRange 0..* see referenceRange Provides guide for interpretation of component result value


doco Documentation for this format icon

See the Extensions for this resource

UML Diagram ( Legend )

Observation ( DomainResource ) A unique identifier assigned to this observation identifier : Identifier [0..*] A plan, proposal or order that is fulfilled in whole or in part by this event. For example, a MedicationRequest may require a patient to have laboratory test performed before it is dispensed basedOn : Reference [0..*] « CarePlan | DeviceRequest | ImmunizationRecommendation | MedicationRequest | NutritionOrder | ServiceRequest » A larger event of which this particular Observation is a component or step. For example, an observation as part of a procedure partOf : Reference [0..*] « MedicationAdministration | MedicationDispense | MedicationStatement | Procedure | Immunization | ImagingStudy | GenomicStudy » 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. null (Strength=Required) ObservationStatus ! » A code that classifies the general type of observation being made category : CodeableConcept [0..*] « Codes for high level observation categories. null (Strength=Preferred) ObservationCategoryCodes ? » Describes what was observed. Sometimes this is called the observation "name" code : CodeableConcept [1..1] « Codes identifying names of simple observations. null (Strength=Example) LOINCCodes LOINCObsOrBoth ?? » « This element has or is affected by some invariants C » The patient, or group of patients, location, device, organization, procedure or device practitioner this observation is about and into whose or what record the observation is placed. If the actual focus of the observation is different from the subject (or a sample of, part, or region of the subject), the `focus` element or the `code` itself specifies the actual focus of the observation subject : Reference [0..1] « Patient | Group | Device | Location » | Organization | Procedure | Practitioner | Medication | Substance | BiologicallyDerivedProduct | NutritionProduct » The actual focus of an observation when it is not the patient subject of record representing something or someone associated with the patient such as a spouse, parent, fetus, or donor. For example, fetus observations in a mother's record. The focus of an observation could also be an existing condition, an intervention, the subject's diet, another observation of the subject, or a body structure such as tumor or implanted device. An example use case would be using the Observation resource to capture whether the mother is trained to change her child's tracheostomy tube. In this example, the child is the patient of record and the mother is the focus focus. As another use case, a caregiver (RelatedPerson) has back strain and is unable to provide ADL support to a patient (Subject) (this element modifies the meaning of other elements) focus : Reference [0..*] « Any » This observation serves as an organizer or grouper for a set of (one or more) sub-observations organizer : boolean [0..1] « This element has or is affected by some invariants C » The healthcare event (e.g. a patient and healthcare provider interaction) during which this observation is made encounter : 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 itself effective[x] : Type DataType [0..1] « dateTime | Period | Timing | instant » The date and time this version of the observation was made available to providers, typically after the results have been reviewed and verified issued : instant [0..1] Who was responsible for asserting the observed value as "true" performer : Reference [0..*] « Practitioner | PractitionerRole | Organization | CareTeam | Patient | RelatedPerson | HealthcareService | Group » The information determined as a result of making the observation, if the information has a simple value value[x] : Type DataType [0..1] « Quantity | CodeableConcept | string | boolean | integer | Range | Ratio | SampledData | time | dateTime | Period | Attachment | Reference ( MolecularDefinition ) » « This element has or is affected by some invariants C » Provides a reason why the expected value in the element Observation.value[x] is missing dataAbsentReason : CodeableConcept [0..1] « Codes specifying why the result (`Observation.value[x]`) is missing. null (Strength=Extensible) DataAbsentReason + » « This element has or is affected by some invariants C » A categorical assessment of an observation value. For example, high, low, normal interpretation : CodeableConcept [0..*] « Codes identifying interpretations of observations. null (Strength=Extensible) ObservationInterpretationCodes + » Other preceding or concurrent information that is critical to understand the context and significance of the observation interpretationContext : CodeableReference [0..*] « Any ; null (Strength=Example) ObservationInterpretationCont... ?? » Comments about the observation or the results note : Annotation [0..*] DEPRECATED: This element is deprecated. Use bodyStructure instead. 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) SNOMEDCTBodyStructures ?? » Indicates the body structure on the subject's body where the observation was made (i.e. the target site) bodyStructure : CodeableReference [0..1] « BodyStructure ; Codes describing anatomical body structures. May include laterality. (Strength=Example) SNOMEDCTBodyStructures ?? » Indicates the mechanism used to perform the observation method : CodeableConcept [0..1] « Methods for simple observations. null (Strength=Example) ObservationMethods ?? » The specimen that was used when this observation was made specimen : Reference [0..1] « Specimen | Group » The device used A reference to generate the observation data device that generates the measurements or the device settings for the device device : Reference [0..1] « Device | DeviceMetric » This observation is a group observation (e.g. a battery, a panel of tests, a set of vital sign measurements) that includes the target as a member of the group hasMember : Reference [0..*] « Observation | QuestionnaireResponse | MolecularSequence MolecularDefinition » The target resource that represents a measurement from which this observation value is derived. For example, a calculated anion gap or a fetal measurement based on an ultrasound image derivedFrom : Reference [0..*] « DocumentReference | ImagingStudy | Media ImagingSelection | QuestionnaireResponse | Observation | MolecularSequence MolecularDefinition | GenomicStudy » ReferenceRange TriggeredBy The value of the low bound of Reference to the reference range. triggering observation observation : Reference [1..1] « Observation » The low bound type of trigger. Reflex | Repeat | Re-run type : code [1..1] « null (Strength=Required) TriggeredBytype ! » Provides the reference range endpoint is inclusive reason why this observation was performed as a result of the observation(s) referenced reason : string [0..1] ReferenceRange The value (e.g. reference range is >=5 - <=9). If of the low bound is omitted, it is assumed to be meaningless (e.g. of the reference range is <=2.3) low : Quantity ( SimpleQuantity ) [0..1] « This element has or is affected by some invariants C » The value of the high bound of the reference range. The high bound of the reference range endpoint high : Quantity [0..1] « This element has or is inclusive affected by some invariants C » The value of the normal value (e.g. reference range is >=5 - <=9). If of the high bound is omitted, it is assumed to be meaningless (e.g. reference range is >= 2.3) high normalValue : Quantity ( SimpleQuantity CodeableConcept ) [0..1] « null (Strength=Example) ObservationReferenceRangeNorm... ?? » Codes to indicate the what part of the targeted reference population it applies to. For example, the normal or therapeutic range type : CodeableConcept [0..1] « Code for the meaning of a reference range. null (Strength=Preferred) ObservationReferenceRangeMean... ? » Codes to indicate the target population this reference range applies to. For example, a reference range may be based on the normal population or a particular sex or race. Multiple `appliesTo` are interpreted as an "AND" of the target populations. For example, to represent a target population of African American females, both a code of female and a code for African American would be used appliesTo : CodeableConcept [0..*] « Codes identifying the population the reference range applies to. null (Strength=Example) ObservationReferenceRangeAppl... ?? » 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 so age : 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 markdown [0..1] « This element has or is affected by some invariants C » Component Describes what was observed. Sometimes this is called the observation "code" code : CodeableConcept [1..1] « Codes identifying names of simple observations. null (Strength=Example) LOINCCodes LOINCObsOrBoth ?? » « This element has or is affected by some invariants C » The information determined as a result of making the observation, if the information has a simple value value[x] : Type DataType [0..1] « Quantity | CodeableConcept | string | boolean | integer | Range | Ratio | SampledData | time | dateTime | Period | Attachment | Reference ( MolecularDefinition ) » « This element has or is affected by some invariants C » Provides a reason why the expected value in the element Observation.component.value[x] is missing dataAbsentReason : CodeableConcept [0..1] « Codes specifying why the result (`Observation.value[x]`) is missing. null (Strength=Extensible) DataAbsentReason + » « This element has or is affected by some invariants C » A categorical assessment of an observation value. For example, high, low, normal interpretation : CodeableConcept [0..*] « Codes identifying interpretations of observations. null (Strength=Extensible) ObservationInterpretationCodes + » Identifies the observation(s) that triggered the performance of this observation triggeredBy [0..*] Guidance on how to interpret the value by comparison to a normal or recommended range. Multiple reference ranges are interpreted as an "OR". In other words, to represent two distinct target populations, two `referenceRange` elements would be used referenceRange [0..*] Guidance on how to interpret the value by comparison to a normal or recommended range referenceRange [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 observations component [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 Business Identifier for observation --></identifier>
 <|
   </basedOn>
 <|
   </partOf>
 <

 <basedOn><!-- 0..* Reference(CarePlan|DeviceRequest|MedicationRequest|
   NutritionOrder|ServiceRequest) Fulfills plan, proposal or order --></basedOn>

 <triggeredBy>  <!-- 0..* Triggering observation(s) -->
  <observation><!-- 1..1 Reference(Observation) Triggering observation --></observation>
  <type value="[code]"/><!-- 1..1 reflex | repeat | re-run -->
  <reason value="[string]"/><!-- 0..1 Reason that the observation was triggered -->
 </triggeredBy>
 <partOf><!-- 0..* Reference(GenomicStudy|ImagingStudy|Immunization|
   MedicationAdministration|MedicationDispense|MedicationStatement|Procedure) Part of referenced event --></partOf>

 <status value="[code]"/><!-- 1..1 registered | specimen-in-process | preliminary | final | amended | corrected | appended | cancelled | entered-in-error | unknown | cannot-be-obtained -->

 <category><!-- 0..* CodeableConcept Classification of  type of observation --></category>
 <</code>
 <</subject>
 <</focus>
 <</encounter>

 <code><!-- I 1..1 CodeableConcept Type of observation (code / type) --></code>
 <subject><!-- 0..1 Reference(BiologicallyDerivedProduct|Device|Group|Location|
   Medication|NutritionProduct|Organization|Patient|Practitioner|Procedure|
   Substance) Who and/or what the observation is about --></subject>

 <focus><!-- 0..* Reference(Any) What the observation is about, when it is not about the subject of record --></focus>
 <organizer value="[boolean]"/><!-- I 0..1 This observation organizes/groups a set of sub-observations -->
 <encounter><!-- 0..1 Reference(Encounter) Healthcare event during which this observation is made. If you need to place the observation within one or more episodes of care, use the workflow-episodeOfCare extension --></encounter>

 <effective[x]><!-- 0..1 dateTime|Period|Timing|instant Clinically relevant time/time-period for observation --></effective[x]>
 <issued value="[instant]"/><!-- 0..1 Date/Time this version was made available -->
 <|
   </performer>
 <|
   </value[x]>
 <</dataAbsentReason>
 <</interpretation>

 <performer><!-- 0..* Reference(CareTeam|Group|HealthcareService|Organization|
   Patient|Practitioner|PractitionerRole|RelatedPerson) Who is responsible for the observation --></performer>

 <value[x]><!-- I 0..1 Quantity|CodeableConcept|string|boolean|integer|Range|Ratio|
   SampledData|time|dateTime|Period|Attachment|Reference(MolecularDefinition) Actual result --></value[x]>

 <dataAbsentReason><!-- I 0..1 CodeableConcept Why the result value is missing --></dataAbsentReason>
 <interpretation><!-- 0..* CodeableConcept High, low, normal, etc --></interpretation>
 <interpretationContext><!-- 0..* CodeableReference(Any) Context for understanding the observation --></interpretationContext>

 <note><!-- 0..* Annotation Comments about the observation --></note>
 <</bodySite>

 <bodySite><!-- 0..1 CodeableConcept DEPRECATED: Observed body part --></bodySite>
 <bodyStructure><!-- 0..1 CodeableReference(BodyStructure) Observed body structure --></bodyStructure>

 <method><!-- 0..1 CodeableConcept How it was done --></method>
 <</specimen>
 <</device>

 <specimen><!-- 0..1 Reference(Group|Specimen) Specimen used for this observation --></specimen>
 <device><!-- 0..1 Reference(Device|DeviceMetric) A reference to the device that generates the measurements or the device settings for the device --></device>

 <referenceRange>  <!-- 0..* Provides guide for interpretation -->
  <</low>
  <</high>

  <low><!-- I 0..1 Quantity Low Range, if relevant --></low>
  <high><!-- I 0..1 Quantity High Range, if relevant --></high>
  <normalValue><!-- 0..1 CodeableConcept Normal value, if relevant --></normalValue>

  <type><!-- 0..1 CodeableConcept Reference range qualifier --></type>
  <appliesTo><!-- 0..* CodeableConcept Reference range population --></appliesTo>
  <age><!-- 0..1 Range Applicable age range, if relevant --></age>
  <

  <text value="[markdown]"/><!-- I 0..1 Text based reference range in an observation -->

 </referenceRange>
 <|
   </hasMember>
 <|
   </derivedFrom>
 <
  <</code>
  <|
    </value[x]>
  <</dataAbsentReason>
  <</interpretation>
  <</referenceRange>

 <hasMember><!-- 0..* Reference(MolecularDefinition|Observation|
   QuestionnaireResponse) Related resource that belongs to the Observation group --></hasMember>

 <derivedFrom><!-- 0..* Reference(DocumentReference|GenomicStudy|ImagingSelection|
   ImagingStudy|MolecularDefinition|Observation|QuestionnaireResponse) Related resource from which the observation is made --></derivedFrom>

 <component>  <!-- I 0..* Component results -->
  <code><!-- I 1..1 CodeableConcept Type of component observation (code / type) --></code>
  <value[x]><!-- I 0..1 Quantity|CodeableConcept|string|boolean|integer|Range|
    Ratio|SampledData|time|dateTime|Period|Attachment|Reference(
    MolecularDefinition) Actual component result --></value[x]>

  <dataAbsentReason><!-- I 0..1 CodeableConcept Why the component result value is missing --></dataAbsentReason>
  <interpretation><!-- 0..* CodeableConcept High, low, normal, etc --></interpretation>
  <referenceRange><!-- 0..* Content as for Observation.referenceRange Provides guide for interpretation of component result value --></referenceRange>

 </component>
</Observation>

JSON Template

{doco
  "resourceType" : "Observation",
  // from Resource: id, meta, implicitRules, and language
  // from DomainResource: text, contained, extension, and modifierExtension
  "identifier" : [{ Identifier }], // Business Identifier for observation
  "|
   
  "|
   
  "

  "basedOn" : [{ Reference(CarePlan|DeviceRequest|MedicationRequest|
   NutritionOrder|ServiceRequest) }], // Fulfills plan, proposal or order

  "triggeredBy" : [{ // Triggering observation(s)
    "observation" : { Reference(Observation) }, // R!  Triggering observation
    "type" : "<code>", // R!  reflex | repeat | re-run
    "reason" : "<string>" // Reason that the observation was triggered
  }],
  "partOf" : [{ Reference(GenomicStudy|ImagingStudy|Immunization|
   MedicationAdministration|MedicationDispense|MedicationStatement|Procedure) }], // Part of referenced event

  "status" : "<code>", // R!  registered | specimen-in-process | preliminary | final | amended | corrected | appended | cancelled | entered-in-error | unknown | cannot-be-obtained

  "category" : [{ CodeableConcept }], // Classification of  type of observation
  "
  "
  "
  "

  "code" : { CodeableConcept }, // I R!  Type of observation (code / type)
  "subject" : { Reference(BiologicallyDerivedProduct|Device|Group|Location|
   Medication|NutritionProduct|Organization|Patient|Practitioner|Procedure|
   Substance) }, // Who and/or what the observation is about

  "focus" : [{ Reference(Any) }], // What the observation is about, when it is not about the subject of record
  "organizer" : <boolean>, // I This observation organizes/groups a set of sub-observations
  "encounter" : { Reference(Encounter) }, // Healthcare event during which this observation is made. If you need to place the observation within one or more episodes of care, use the workflow-episodeOfCare extension

  // effective[x]: Clinically relevant time/time-period for observation. One of these 4:
  "effectiveDateTime" : "<dateTime>",
  "effectivePeriod" : { Period },
  "effectiveTiming" : { Timing },
  "effectiveInstant" : "<instant>",
  "issued" : "<instant>", // Date/Time this version was made available
  "|
   
  

  "performer" : [{ Reference(CareTeam|Group|HealthcareService|Organization|
   Patient|Practitioner|PractitionerRole|RelatedPerson) }], // Who is responsible for the observation
  // value[x]: Actual result. One of these 13:
  "valueQuantity" : { Quantity },
  "valueCodeableConcept" : { CodeableConcept },
  "valueString" : "<string>",
  "valueBoolean" : <boolean>,
  "valueInteger" : <integer>,
  "valueRange" : { Range },
  "valueRatio" : { Ratio },
  "valueSampledData" : { SampledData },
  "valueTime" : "<time>",
  "valueDateTime" : "<dateTime>",
  "valuePeriod" : { Period },
  "
  "

  "valueAttachment" : { Attachment },
  "valueReference" : { Reference(MolecularDefinition) },
  "dataAbsentReason" : { CodeableConcept }, // I Why the result value is missing
  "interpretation" : [{ CodeableConcept }], // High, low, normal, etc
  "interpretationContext" : [{ CodeableReference(Any) }], // Context for understanding the observation

  "note" : [{ Annotation }], // Comments about the observation
  "

  "bodySite" : { CodeableConcept }, // DEPRECATED: Observed body part
  "bodyStructure" : { CodeableReference(BodyStructure) }, // Observed body structure

  "method" : { CodeableConcept }, // How it was done
  "
  "

  "specimen" : { Reference(Group|Specimen) }, // Specimen used for this observation
  "device" : { Reference(Device|DeviceMetric) }, // A reference to the device that generates the measurements or the device settings for the device

  "referenceRange" : [{ // Provides guide for interpretation
    "
    "

    "low" : { Quantity }, // I Low Range, if relevant
    "high" : { Quantity }, // I High Range, if relevant
    "normalValue" : { CodeableConcept }, // Normal value, if relevant

    "type" : { CodeableConcept }, // Reference range qualifier
    "appliesTo" : [{ CodeableConcept }], // Reference range population
    "age" : { Range }, // Applicable age range, if relevant
    "

    "text" : "<markdown>" // I Text based reference range in an observation

  }],
  "|
   
  "|
   
  "
    "
    

  "hasMember" : [{ Reference(MolecularDefinition|Observation|
   QuestionnaireResponse) }], // Related resource that belongs to the Observation group

  "derivedFrom" : [{ Reference(DocumentReference|GenomicStudy|ImagingSelection|
   ImagingStudy|MolecularDefinition|Observation|QuestionnaireResponse) }], // Related resource from which the observation is made

  "component" : [{ // I Component results
    "code" : { CodeableConcept }, // I R!  Type of component observation (code / type)
    // value[x]: Actual component result. One of these 13:
    "valueQuantity" : { Quantity },
    "valueCodeableConcept" : { CodeableConcept },
    "valueString" : "<string>",
    "valueBoolean" : <boolean>,
    "valueInteger" : <integer>,
    "valueRange" : { Range },
    "valueRatio" : { Ratio },
    "valueSampledData" : { SampledData },
    "valueTime" : "<time>",
    "valueDateTime" : "<dateTime>",
    "valuePeriod" : { Period },
    "
    "
    "

    "valueAttachment" : { Attachment },
    "valueReference" : { Reference(MolecularDefinition) },
    "dataAbsentReason" : { CodeableConcept }, // I Why the component result value is missing
    "interpretation" : [{ CodeableConcept }], // High, low, normal, etc
    "referenceRange" : [{ Content as for Observation.referenceRange }] // Provides guide for interpretation of component result value

  }]
}

Turtle Template

@prefix fhir: <http://hl7.org/fhir/> .doco


[ a fhir:Observation;
  fhir:nodeRole fhir:treeRoot; # if this is the parser root

  # from 
  # from 
  fhir:
  fhir:|
  
  fhir:|
  
  fhir:
  fhir:
  fhir:
  fhir:
  fhir:
  fhir:
  # . One of these 4
    fhir: ]
    fhir: ]
    fhir: ]
    fhir: ]
  fhir:
  fhir:
  # . One of these 11
    fhir: ]
    fhir: ]
    fhir: ]
    fhir: ]
    fhir: ]
    fhir: ]
    fhir: ]
    fhir: ]
    fhir: ]
    fhir: ]
    fhir: ]
  fhir:
  fhir:
  fhir:
  fhir:
  fhir:
  fhir:
  fhir:
  fhir:
    fhir:
    fhir:
    fhir:
    fhir:
    fhir:
    fhir:
  ], ...;
  fhir:
  fhir:|
  
  fhir:
    fhir:
    # . One of these 11
      fhir: ]
      fhir: ]
      fhir: ]
      fhir: ]
      fhir: ]
      fhir: ]
      fhir: ]
      fhir: ]
      fhir: ]
      fhir: ]
      fhir: ]
    fhir:
    fhir:
    fhir:
  ], ...;

  # from Resource: fhir:id, fhir:meta, fhir:implicitRules, and fhir:language
  # from DomainResource: fhir:text, fhir:contained, fhir:extension, and fhir:modifierExtension
  fhir:identifier  ( [ Identifier ] ... ) ; # 0..* Business Identifier for observation
  fhir:basedOn  ( [ Reference(CarePlan|DeviceRequest|MedicationRequest|NutritionOrder|ServiceRequest) ] ... ) ; # 0..* Fulfills plan, proposal or order
  fhir:triggeredBy ( [ # 0..* Triggering observation(s)
    fhir:observation [ Reference(Observation) ] ; # 1..1 Triggering observation
    fhir:type [ code ] ; # 1..1 reflex | repeat | re-run
    fhir:reason [ string ] ; # 0..1 Reason that the observation was triggered
  ] ... ) ;
  fhir:partOf  ( [ Reference(GenomicStudy|ImagingStudy|Immunization|MedicationAdministration|
  MedicationDispense|MedicationStatement|Procedure) ] ... ) ; # 0..* Part of referenced event

  fhir:status [ code ] ; # 1..1 registered | specimen-in-process | preliminary | final | amended | corrected | appended | cancelled | entered-in-error | unknown | cannot-be-obtained
  fhir:category  ( [ CodeableConcept ] ... ) ; # 0..* Classification of  type of observation
  fhir:code [ CodeableConcept ] ; # 1..1 I Type of observation (code / type)
  fhir:subject [ Reference(BiologicallyDerivedProduct|Device|Group|Location|Medication|NutritionProduct|
  Organization|Patient|Practitioner|Procedure|Substance) ] ; # 0..1 Who and/or what the observation is about

  fhir:focus  ( [ Reference(Any) ] ... ) ; # 0..* What the observation is about, when it is not about the subject of record
  fhir:organizer [ boolean ] ; # 0..1 I This observation organizes/groups a set of sub-observations
  fhir:encounter [ Reference(Encounter) ] ; # 0..1 Healthcare event during which this observation is made. If you need to place the observation within one or more episodes of care, use the workflow-episodeOfCare extension
  # effective[x] : 0..1 Clinically relevant time/time-period for observation. One of these 4
    fhir:effective [  a fhir:DateTime ; dateTime ]
    fhir:effective [  a fhir:Period ; Period ]
    fhir:effective [  a fhir:Timing ; Timing ]
    fhir:effective [  a fhir:Instant ; instant ]
  fhir:issued [ instant ] ; # 0..1 Date/Time this version was made available
  fhir:performer  ( [ Reference(CareTeam|Group|HealthcareService|Organization|Patient|Practitioner|
  PractitionerRole|RelatedPerson) ] ... ) ; # 0..* Who is responsible for the observation

  # value[x] : 0..1 I Actual result. One of these 13
    fhir:value [  a fhir:Quantity ; Quantity ]
    fhir:value [  a fhir:CodeableConcept ; CodeableConcept ]
    fhir:value [  a fhir:String ; string ]
    fhir:value [  a fhir:Boolean ; boolean ]
    fhir:value [  a fhir:Integer ; integer ]
    fhir:value [  a fhir:Range ; Range ]
    fhir:value [  a fhir:Ratio ; Ratio ]
    fhir:value [  a fhir:SampledData ; SampledData ]
    fhir:value [  a fhir:Time ; time ]
    fhir:value [  a fhir:DateTime ; dateTime ]
    fhir:value [  a fhir:Period ; Period ]
    fhir:value [  a fhir:Attachment ; Attachment ]
    fhir:value [  a fhir:Reference ; Reference(MolecularDefinition) ]
  fhir:dataAbsentReason [ CodeableConcept ] ; # 0..1 I Why the result value is missing
  fhir:interpretation  ( [ CodeableConcept ] ... ) ; # 0..* High, low, normal, etc
  fhir:interpretationContext  ( [ CodeableReference(Any) ] ... ) ; # 0..* Context for understanding the observation
  fhir:note  ( [ Annotation ] ... ) ; # 0..* Comments about the observation
  fhir:bodySite [ CodeableConcept ] ; # 0..1 DEPRECATED: Observed body part
  fhir:bodyStructure [ CodeableReference(BodyStructure) ] ; # 0..1 Observed body structure
  fhir:method [ CodeableConcept ] ; # 0..1 How it was done
  fhir:specimen [ Reference(Group|Specimen) ] ; # 0..1 Specimen used for this observation
  fhir:device [ Reference(Device|DeviceMetric) ] ; # 0..1 A reference to the device that generates the measurements or the device settings for the device
  fhir:referenceRange ( [ # 0..* Provides guide for interpretation
    fhir:low [ Quantity ] ; # 0..1 I Low Range, if relevant
    fhir:high [ Quantity ] ; # 0..1 I High Range, if relevant
    fhir:normalValue [ CodeableConcept ] ; # 0..1 Normal value, if relevant
    fhir:type [ CodeableConcept ] ; # 0..1 Reference range qualifier
    fhir:appliesTo  ( [ CodeableConcept ] ... ) ; # 0..* Reference range population
    fhir:age [ Range ] ; # 0..1 Applicable age range, if relevant
    fhir:text [ markdown ] ; # 0..1 I Text based reference range in an observation
  ] ... ) ;
  fhir:hasMember  ( [ Reference(MolecularDefinition|Observation|QuestionnaireResponse) ] ... ) ; # 0..* Related resource that belongs to the Observation group
  fhir:derivedFrom  ( [ Reference(DocumentReference|GenomicStudy|ImagingSelection|ImagingStudy|MolecularDefinition|
  Observation|QuestionnaireResponse) ] ... ) ; # 0..* Related resource from which the observation is made

  fhir:component ( [ # 0..* I Component results
    fhir:code [ CodeableConcept ] ; # 1..1 I Type of component observation (code / type)
    # value[x] : 0..1 I Actual component result. One of these 13
      fhir:value [  a fhir:Quantity ; Quantity ]
      fhir:value [  a fhir:CodeableConcept ; CodeableConcept ]
      fhir:value [  a fhir:String ; string ]
      fhir:value [  a fhir:Boolean ; boolean ]
      fhir:value [  a fhir:Integer ; integer ]
      fhir:value [  a fhir:Range ; Range ]
      fhir:value [  a fhir:Ratio ; Ratio ]
      fhir:value [  a fhir:SampledData ; SampledData ]
      fhir:value [  a fhir:Time ; time ]
      fhir:value [  a fhir:DateTime ; dateTime ]
      fhir:value [  a fhir:Period ; Period ]
      fhir:value [  a fhir:Attachment ; Attachment ]
      fhir:value [  a fhir:Reference ; Reference(MolecularDefinition) ]
    fhir:dataAbsentReason [ CodeableConcept ] ; # 0..1 I Why the component result value is missing
    fhir:interpretation  ( [ CodeableConcept ] ... ) ; # 0..* High, low, normal, etc
    fhir:referenceRange  ( [ See Observation.referenceRange ] ... ) ; # 0..* Provides guide for interpretation of component result value
  ] ... ) ;

]

Changes since R3 from both R4 and R4B

Observation
Observation.basedOn
    Type Reference: Added Target Type ServiceRequest
  • Type Reference: Removed Target Types ProcedureRequest, ReferralRequest Type ImmunizationRecommendation
Observation.partOf Observation.triggeredBy
  • Added Element
Observation.status Observation.triggeredBy.observation
  • Change value set from http://hl7.org/fhir/ValueSet/observation-status to http://hl7.org/fhir/ValueSet/observation-status|4.0.1 Added Mandatory Element
Observation.focus Observation.triggeredBy.type
  • Added Mandatory Element
Observation.encounter Observation.triggeredBy.reason
  • Renamed from context to encounter Added Element
Observation.partOf
  • Type Reference: Removed Added Target Type EpisodeOfCare GenomicStudy
Observation.effective[x] Observation.status
  • Remove code corrected
  • Add Types Timing, instant codes specimen-in-process , cannot-be-obtained
Observation.performer Observation.subject
  • Type Reference: Added Target Types PractitionerRole, CareTeam Organization, Procedure, Practitioner, Medication, Substance, BiologicallyDerivedProduct, NutritionProduct
Observation.value[x] Observation.focus
  • Add Type integer Now marked as Modifier
Observation.organizer
  • Remove Type Attachment Added Element
Observation.dataAbsentReason Observation.performer
  • Change value set from http://hl7.org/fhir/ValueSet/observation-valueabsentreason to http://hl7.org/fhir/ValueSet/data-absent-reason Change code system for extensibly bound codes from "http://hl7.org/fhir/data-absent-reason" to "http://terminology.hl7.org/CodeSystem/data-absent-reason" Type Reference: Added Target Types HealthcareService, Group
Observation.interpretation Observation.value[x]
  • Max Cardinality changed from 1 to * Change code system for extensibly bound codes from "http://terminology.hl7.org/CodeSystem/v2-0078" to "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation" Add Types Attachment, Reference(MolecularDefinition)
Observation.note Observation.interpretationContext
  • Renamed from comment to note Added Element
Observation.bodyStructure
  • Max Cardinality changed from 1 to * Added Element
Observation.specimen
  • Type changed from string to Annotation Reference: Added Target Type Group
Observation.referenceRange.type Observation.referenceRange.low
  • Remove Binding http://hl7.org/fhir/ValueSet/referencerange-meaning (extensible) Type changed from Quantity(http://hl7.org/fhir/StructureDefinition/SimpleQuantity) to Quantity
Observation.hasMember Observation.referenceRange.high
  • Added Element Type changed from Quantity(http://hl7.org/fhir/StructureDefinition/SimpleQuantity) to Quantity
Observation.derivedFrom Observation.referenceRange.normalValue
  • Added Element
Observation.component.value[x] Observation.referenceRange.text
  • Add Types boolean, integer Remove Type Attachment changed from string to markdown
Observation.component.dataAbsentReason Observation.hasMember
  • Change value set from http://hl7.org/fhir/ValueSet/observation-valueabsentreason to http://hl7.org/fhir/ValueSet/data-absent-reason Type Reference: Added Target Type MolecularDefinition
  • Change code system for extensibly bound codes from "http://hl7.org/fhir/data-absent-reason" to "http://terminology.hl7.org/CodeSystem/data-absent-reason" Type Reference: Removed Target Type MolecularSequence
Observation.component.interpretation Observation.derivedFrom
  • Max Cardinality changed from 1 to * Type Reference: Added Target Types ImagingSelection, MolecularDefinition, GenomicStudy
  • Change code system for extensibly bound codes from "http://terminology.hl7.org/CodeSystem/v2-0078" to "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation" Type Reference: Removed Target Types Media, MolecularSequence
Observation.related Observation.component.value[x]
  • deleted Add Types Attachment, Reference(MolecularDefinition)

See the Full Difference for further information

This analysis is available for R4 as XML or JSON . See R3 <--> R4 Conversion Maps (status = 48 tests that all execute ok. All tests pass round-trip testing and 23 r3 resources are invalid (0 errors). ) for R4B as XML or JSON .

Structure

Period SimpleQuantity Period
Name Flags Card. Type Description & Constraints      Filter: Filters doco
. . Observation I N DomainResource Measurements and simple assertions
+ Rule: dataAbsentReason Observation.dataAbsentReason SHALL only be present if Observation.value[x] is not present
+ Rule: If Observation.code Observation.component.code is the same as an Observation.component.code Observation.code, then Observation.value SHALL NOT be present (the Observation.component.value[x] holds the value element associated with the code value).
+ Rule: Observation.component.dataAbsentReason SHALL only be present if Observation.component.value[x] is not present
+ Rule: if organizer exists and organizer = true, then value[x], dataAbsentReason and component SHALL NOT be present
+ Warning: All observations SHOULD have a performer

Elements defined in Ancestors: id , meta , implicitRules , language , text , contained , extension , modifierExtension
. . . identifier Σ 0..* Identifier Business Identifier for observation

. . . basedOn Σ 0..* Reference ( CarePlan | DeviceRequest | ImmunizationRecommendation | MedicationRequest | NutritionOrder | ServiceRequest ) Fulfills plan, proposal or order

. . . triggeredBy 0..* BackboneElement Triggering observation(s)

. . . partOf . observation Σ 1..1 Reference ( Observation ) Triggering observation
.... type Σ 1..1 code reflex | repeat | re-run
Binding: triggered Bytype ( Required )
0..*
. . . . reason 0..1 string Reason that the observation was triggered
... partOf Σ 0..* Reference ( MedicationAdministration | MedicationDispense | MedicationStatement | Procedure | Immunization | ImagingStudy | GenomicStudy ) Part of referenced event

. . . status ?! Σ 1..1 code registered | specimen-in-process | preliminary | final | amended + | corrected | appended | cancelled | entered-in-error | unknown | cannot-be-obtained
ObservationStatus Binding: Observation Status ( Required )
. . . category 0..* CodeableConcept Classification of type of observation
Binding: Observation Category Codes ( Preferred )

. . . code Σ C 1..1 CodeableConcept Type of observation (code / type)
Binding: LOINC Codes codes with Observation or Both ( Example )
. . . subject Σ 0..1 Reference ( Patient | Group | Device | Location | Organization | Procedure | Practitioner | Medication | Substance | BiologicallyDerivedProduct | NutritionProduct ) Who and/or what the observation is about
. . . focus Σ ?! TU Σ 0..* Reference ( Any ) What the observation is about, when it is not about the subject of record

. . encounter . organizer Σ C 0..1 boolean This observation organizes/groups a set of sub-observations
... encounter Σ 0..1 Reference ( Encounter ) Healthcare event during which this observation is made made. If you need to place the observation within one or more episodes of care, use the workflow-episodeOfCare extension
. . . effective[x] Σ 0..1 Clinically relevant time/time-period for observation
. . . . effectiveDateTime dateTime
. . . . effectivePeriod Period
. . . . effectiveTiming Timing
. . . . effectiveInstant instant
. . . issued Σ 0..1 instant Date/Time this version was made available
. . . performer Σ 0..* Reference ( Practitioner | PractitionerRole | Organization | CareTeam | Patient | RelatedPerson | HealthcareService | Group ) Who is responsible for the observation

. . . value[x] Σ I C 0..1 Actual result
. . . . valueQuantity Quantity
. . . . valueCodeableConcept CodeableConcept
. . . . valueString string
. . . . valueBoolean boolean
. . . . valueInteger integer
. . . . valueRange Range
. . . . valueRatio Ratio
. . . . valueSampledData SampledData
. . . . valueTime time
. . . . valueDateTime dateTime
. . . . valuePeriod Period
. . . . valueAttachment Attachment
. . . . valueReference Reference ( MolecularDefinition )
. . . dataAbsentReason I C 0..1 CodeableConcept Why the result value is missing
DataAbsentReason Binding: Data Absent Reason ( Extensible )
. . . interpretation 0..* CodeableConcept High, low, normal, etc. etc
Binding: Observation Interpretation Codes ( Extensible )

. . note . interpretationContext 0..* CodeableReference ( Any ) Context for understanding the observation
Binding: Observation Interpretation Context Codes ( Example )

0..*
. . . note 0..* Annotation Comments about the observation

. . . bodySite 0..1 CodeableConcept DEPRECATED: Observed body part
Binding: SNOMED CT Body Structures ( Example )
. . method . bodyStructure 0..1 CodeableReference ( BodyStructure ) Observed body structure
Binding: SNOMED CT Body Structures ( Example )
0..1
. . . method 0..1 CodeableConcept How it was done
Binding: Observation Methods ( Example )
. . . specimen C 0..1 Reference ( Specimen | Group ) Specimen used for this observation
+ Rule: If Observation.specimen is a reference to Group, the group can only have specimens
. . . device 0..1 Reference ( Device | DeviceMetric ) A reference to the device that generates the measurements or the device settings for the device
(Measurement) Device
. . . referenceRange I C 0..* BackboneElement Provides guide for interpretation
+ Rule: Must have at least a low or a high or text

. . . . low I C 0..1 SimpleQuantity Quantity Low Range, if relevant
+ Rule: If low.comparator exists, it must be '>=' or '>'.
. . . . high C I 0..1 Quantity High Range, if relevant
+ Rule: If high.comparator exists, it must be '<=' or '<'.
0..1
. . . . normalValue High Range, 0..1 CodeableConcept Normal value, if relevant
Binding: Observation Reference Range Normal Value Codes ( Example )
. . . . type 0..1 CodeableConcept Reference range qualifier
Binding: Observation Reference Range Meaning Codes ( Preferred )
. . . . appliesTo 0..* CodeableConcept Reference range population
Binding: Observation Reference Range Applies To Codes ( Example )

. . . . age 0..1 Range Applicable age range, if relevant
. . . . text C 0..1 string markdown Text based reference range in an observation
. . . hasMember Σ 0..* Reference ( Observation | QuestionnaireResponse | MolecularSequence MolecularDefinition ) Related resource that belongs to the Observation group

. . . derivedFrom Σ 0..* Reference ( DocumentReference | ImagingStudy | Media ImagingSelection | QuestionnaireResponse | Observation | MolecularSequence MolecularDefinition | GenomicStudy ) Related measurements resource from which the observation is made from

. . . component Σ C 0..* BackboneElement Component results

. . . . code Σ C 1..1 CodeableConcept Type of component observation (code / type)
Binding: LOINC Codes codes with Observation or Both ( Example )
. . . . value[x] Σ C 0..1 Actual component result
. . . . . valueQuantity Quantity
. . . . . valueCodeableConcept CodeableConcept
. . . . . valueString string
. . . . . valueBoolean boolean
. . . . . valueInteger integer
. . . . . valueRange Range
. . . . . valueRatio Ratio
. . . . . valueSampledData SampledData
. . . . . valueTime time
. . . . . valueDateTime dateTime
. . . . . valuePeriod Period
. . . . . valueAttachment Attachment
. . . . . valueReference Reference ( MolecularDefinition )
. . . . dataAbsentReason I C 0..1 CodeableConcept Why the component result value is missing
DataAbsentReason Binding: Data Absent Reason ( Extensible )
. . . . interpretation 0..* CodeableConcept High, low, normal, etc. etc
Binding: Observation Interpretation Codes ( Extensible )

. . . . referenceRange 0..* see referenceRange Provides guide for interpretation of component result value


doco Documentation for this format icon

See the Extensions for this resource

UML Diagram ( Legend )

Observation ( DomainResource ) A unique identifier assigned to this observation identifier : Identifier [0..*] A plan, proposal or order that is fulfilled in whole or in part by this event. For example, a MedicationRequest may require a patient to have laboratory test performed before it is dispensed basedOn : Reference [0..*] « CarePlan | DeviceRequest | ImmunizationRecommendation | MedicationRequest | NutritionOrder | ServiceRequest » A larger event of which this particular Observation is a component or step. For example, an observation as part of a procedure partOf : Reference [0..*] « MedicationAdministration | MedicationDispense | MedicationStatement | Procedure | Immunization | ImagingStudy | GenomicStudy » 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. null (Strength=Required) ObservationStatus ! » A code that classifies the general type of observation being made category : CodeableConcept [0..*] « Codes for high level observation categories. null (Strength=Preferred) ObservationCategoryCodes ? » Describes what was observed. Sometimes this is called the observation "name" code : CodeableConcept [1..1] « Codes identifying names of simple observations. null (Strength=Example) LOINCCodes LOINCObsOrBoth ?? » « This element has or is affected by some invariants C » The patient, or group of patients, location, device, organization, procedure or device practitioner this observation is about and into whose or what record the observation is placed. If the actual focus of the observation is different from the subject (or a sample of, part, or region of the subject), the `focus` element or the `code` itself specifies the actual focus of the observation subject : Reference [0..1] « Patient | Group | Device | Location » | Organization | Procedure | Practitioner | Medication | Substance | BiologicallyDerivedProduct | NutritionProduct » The actual focus of an observation when it is not the patient subject of record representing something or someone associated with the patient such as a spouse, parent, fetus, or donor. For example, fetus observations in a mother's record. The focus of an observation could also be an existing condition, an intervention, the subject's diet, another observation of the subject, or a body structure such as tumor or implanted device. An example use case would be using the Observation resource to capture whether the mother is trained to change her child's tracheostomy tube. In this example, the child is the patient of record and the mother is the focus focus. As another use case, a caregiver (RelatedPerson) has back strain and is unable to provide ADL support to a patient (Subject) (this element modifies the meaning of other elements) focus : Reference [0..*] « Any » This observation serves as an organizer or grouper for a set of (one or more) sub-observations organizer : boolean [0..1] « This element has or is affected by some invariants C » The healthcare event (e.g. a patient and healthcare provider interaction) during which this observation is made encounter : 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 itself effective[x] : Type DataType [0..1] « dateTime | Period | Timing | instant » The date and time this version of the observation was made available to providers, typically after the results have been reviewed and verified issued : instant [0..1] Who was responsible for asserting the observed value as "true" performer : Reference [0..*] « Practitioner | PractitionerRole | Organization | CareTeam | Patient | RelatedPerson | HealthcareService | Group » The information determined as a result of making the observation, if the information has a simple value value[x] : Type DataType [0..1] « Quantity | CodeableConcept | string | boolean | integer | Range | Ratio | SampledData | time | dateTime | Period | Attachment | Reference ( MolecularDefinition ) » « This element has or is affected by some invariants C » Provides a reason why the expected value in the element Observation.value[x] is missing dataAbsentReason : CodeableConcept [0..1] « Codes specifying why the result (`Observation.value[x]`) is missing. null (Strength=Extensible) DataAbsentReason + » « This element has or is affected by some invariants C » A categorical assessment of an observation value. For example, high, low, normal interpretation : CodeableConcept [0..*] « Codes identifying interpretations of observations. null (Strength=Extensible) ObservationInterpretationCodes + » Other preceding or concurrent information that is critical to understand the context and significance of the observation interpretationContext : CodeableReference [0..*] « Any ; null (Strength=Example) ObservationInterpretationCont... ?? » Comments about the observation or the results note : Annotation [0..*] DEPRECATED: This element is deprecated. Use bodyStructure instead. 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) SNOMEDCTBodyStructures ?? » Indicates the body structure on the subject's body where the observation was made (i.e. the target site) bodyStructure : CodeableReference [0..1] « BodyStructure ; Codes describing anatomical body structures. May include laterality. (Strength=Example) SNOMEDCTBodyStructures ?? » Indicates the mechanism used to perform the observation method : CodeableConcept [0..1] « Methods for simple observations. null (Strength=Example) ObservationMethods ?? » The specimen that was used when this observation was made specimen : Reference [0..1] « Specimen | Group » The device used A reference to generate the observation data device that generates the measurements or the device settings for the device device : Reference [0..1] « Device | DeviceMetric » This observation is a group observation (e.g. a battery, a panel of tests, a set of vital sign measurements) that includes the target as a member of the group hasMember : Reference [0..*] « Observation | QuestionnaireResponse | MolecularSequence MolecularDefinition » The target resource that represents a measurement from which this observation value is derived. For example, a calculated anion gap or a fetal measurement based on an ultrasound image derivedFrom : Reference [0..*] « DocumentReference | ImagingStudy | Media ImagingSelection | QuestionnaireResponse | Observation | MolecularSequence MolecularDefinition | GenomicStudy » ReferenceRange TriggeredBy The value of the low bound of Reference to the reference range. triggering observation observation : Reference [1..1] « Observation » The low bound type of trigger. Reflex | Repeat | Re-run type : code [1..1] « null (Strength=Required) TriggeredBytype ! » Provides the reference range endpoint is inclusive reason why this observation was performed as a result of the observation(s) referenced reason : string [0..1] ReferenceRange The value (e.g. reference range is >=5 - <=9). If of the low bound is omitted, it is assumed to be meaningless (e.g. of the reference range is <=2.3) low : Quantity ( SimpleQuantity ) [0..1] « This element has or is affected by some invariants C » The value of the high bound of the reference range. The high bound of the reference range endpoint high : Quantity [0..1] « This element has or is inclusive affected by some invariants C » The value of the normal value (e.g. reference range is >=5 - <=9). If of the high bound is omitted, it is assumed to be meaningless (e.g. reference range is >= 2.3) high normalValue : Quantity ( SimpleQuantity CodeableConcept ) [0..1] « null (Strength=Example) ObservationReferenceRangeNorm... ?? » Codes to indicate the what part of the targeted reference population it applies to. For example, the normal or therapeutic range type : CodeableConcept [0..1] « Code for the meaning of a reference range. null (Strength=Preferred) ObservationReferenceRangeMean... ? » Codes to indicate the target population this reference range applies to. For example, a reference range may be based on the normal population or a particular sex or race. Multiple `appliesTo` are interpreted as an "AND" of the target populations. For example, to represent a target population of African American females, both a code of female and a code for African American would be used appliesTo : CodeableConcept [0..*] « Codes identifying the population the reference range applies to. null (Strength=Example) ObservationReferenceRangeAppl... ?? » 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 so age : 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 markdown [0..1] « This element has or is affected by some invariants C » Component Describes what was observed. Sometimes this is called the observation "code" code : CodeableConcept [1..1] « Codes identifying names of simple observations. null (Strength=Example) LOINCCodes LOINCObsOrBoth ?? » « This element has or is affected by some invariants C » The information determined as a result of making the observation, if the information has a simple value value[x] : Type DataType [0..1] « Quantity | CodeableConcept | string | boolean | integer | Range | Ratio | SampledData | time | dateTime | Period | Attachment | Reference ( MolecularDefinition ) » « This element has or is affected by some invariants C » Provides a reason why the expected value in the element Observation.component.value[x] is missing dataAbsentReason : CodeableConcept [0..1] « Codes specifying why the result (`Observation.value[x]`) is missing. null (Strength=Extensible) DataAbsentReason + » « This element has or is affected by some invariants C » A categorical assessment of an observation value. For example, high, low, normal interpretation : CodeableConcept [0..*] « Codes identifying interpretations of observations. null (Strength=Extensible) ObservationInterpretationCodes + » Identifies the observation(s) that triggered the performance of this observation triggeredBy [0..*] Guidance on how to interpret the value by comparison to a normal or recommended range. Multiple reference ranges are interpreted as an "OR". In other words, to represent two distinct target populations, two `referenceRange` elements would be used referenceRange [0..*] Guidance on how to interpret the value by comparison to a normal or recommended range referenceRange [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 observations component [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 Business Identifier for observation --></identifier>
 <|
   </basedOn>
 <|
   </partOf>
 <

 <basedOn><!-- 0..* Reference(CarePlan|DeviceRequest|MedicationRequest|
   NutritionOrder|ServiceRequest) Fulfills plan, proposal or order --></basedOn>

 <triggeredBy>  <!-- 0..* Triggering observation(s) -->
  <observation><!-- 1..1 Reference(Observation) Triggering observation --></observation>
  <type value="[code]"/><!-- 1..1 reflex | repeat | re-run -->
  <reason value="[string]"/><!-- 0..1 Reason that the observation was triggered -->
 </triggeredBy>
 <partOf><!-- 0..* Reference(GenomicStudy|ImagingStudy|Immunization|
   MedicationAdministration|MedicationDispense|MedicationStatement|Procedure) Part of referenced event --></partOf>

 <status value="[code]"/><!-- 1..1 registered | specimen-in-process | preliminary | final | amended | corrected | appended | cancelled | entered-in-error | unknown | cannot-be-obtained -->

 <category><!-- 0..* CodeableConcept Classification of  type of observation --></category>
 <</code>
 <</subject>
 <</focus>
 <</encounter>

 <code><!-- I 1..1 CodeableConcept Type of observation (code / type) --></code>
 <subject><!-- 0..1 Reference(BiologicallyDerivedProduct|Device|Group|Location|
   Medication|NutritionProduct|Organization|Patient|Practitioner|Procedure|
   Substance) Who and/or what the observation is about --></subject>

 <focus><!-- 0..* Reference(Any) What the observation is about, when it is not about the subject of record --></focus>
 <organizer value="[boolean]"/><!-- I 0..1 This observation organizes/groups a set of sub-observations -->
 <encounter><!-- 0..1 Reference(Encounter) Healthcare event during which this observation is made. If you need to place the observation within one or more episodes of care, use the workflow-episodeOfCare extension --></encounter>

 <effective[x]><!-- 0..1 dateTime|Period|Timing|instant Clinically relevant time/time-period for observation --></effective[x]>
 <issued value="[instant]"/><!-- 0..1 Date/Time this version was made available -->
 <|
   </performer>
 <|
   </value[x]>
 <</dataAbsentReason>
 <</interpretation>

 <performer><!-- 0..* Reference(CareTeam|Group|HealthcareService|Organization|
   Patient|Practitioner|PractitionerRole|RelatedPerson) Who is responsible for the observation --></performer>

 <value[x]><!-- I 0..1 Quantity|CodeableConcept|string|boolean|integer|Range|Ratio|
   SampledData|time|dateTime|Period|Attachment|Reference(MolecularDefinition) Actual result --></value[x]>

 <dataAbsentReason><!-- I 0..1 CodeableConcept Why the result value is missing --></dataAbsentReason>
 <interpretation><!-- 0..* CodeableConcept High, low, normal, etc --></interpretation>
 <interpretationContext><!-- 0..* CodeableReference(Any) Context for understanding the observation --></interpretationContext>

 <note><!-- 0..* Annotation Comments about the observation --></note>
 <</bodySite>

 <bodySite><!-- 0..1 CodeableConcept DEPRECATED: Observed body part --></bodySite>
 <bodyStructure><!-- 0..1 CodeableReference(BodyStructure) Observed body structure --></bodyStructure>

 <method><!-- 0..1 CodeableConcept How it was done --></method>
 <</specimen>
 <</device>

 <specimen><!-- 0..1 Reference(Group|Specimen) Specimen used for this observation --></specimen>
 <device><!-- 0..1 Reference(Device|DeviceMetric) A reference to the device that generates the measurements or the device settings for the device --></device>

 <referenceRange>  <!-- 0..* Provides guide for interpretation -->
  <</low>
  <</high>

  <low><!-- I 0..1 Quantity Low Range, if relevant --></low>
  <high><!-- I 0..1 Quantity High Range, if relevant --></high>
  <normalValue><!-- 0..1 CodeableConcept Normal value, if relevant --></normalValue>

  <type><!-- 0..1 CodeableConcept Reference range qualifier --></type>
  <appliesTo><!-- 0..* CodeableConcept Reference range population --></appliesTo>
  <age><!-- 0..1 Range Applicable age range, if relevant --></age>
  <

  <text value="[markdown]"/><!-- I 0..1 Text based reference range in an observation -->

 </referenceRange>
 <|
   </hasMember>
 <|
   </derivedFrom>
 <
  <</code>
  <|
    </value[x]>
  <</dataAbsentReason>
  <</interpretation>
  <</referenceRange>

 <hasMember><!-- 0..* Reference(MolecularDefinition|Observation|
   QuestionnaireResponse) Related resource that belongs to the Observation group --></hasMember>

 <derivedFrom><!-- 0..* Reference(DocumentReference|GenomicStudy|ImagingSelection|
   ImagingStudy|MolecularDefinition|Observation|QuestionnaireResponse) Related resource from which the observation is made --></derivedFrom>

 <component>  <!-- I 0..* Component results -->
  <code><!-- I 1..1 CodeableConcept Type of component observation (code / type) --></code>
  <value[x]><!-- I 0..1 Quantity|CodeableConcept|string|boolean|integer|Range|
    Ratio|SampledData|time|dateTime|Period|Attachment|Reference(
    MolecularDefinition) Actual component result --></value[x]>

  <dataAbsentReason><!-- I 0..1 CodeableConcept Why the component result value is missing --></dataAbsentReason>
  <interpretation><!-- 0..* CodeableConcept High, low, normal, etc --></interpretation>
  <referenceRange><!-- 0..* Content as for Observation.referenceRange Provides guide for interpretation of component result value --></referenceRange>

 </component>
</Observation>

JSON Template

{doco
  "resourceType" : "Observation",
  // from Resource: id, meta, implicitRules, and language
  // from DomainResource: text, contained, extension, and modifierExtension
  "identifier" : [{ Identifier }], // Business Identifier for observation
  "|
   
  "|
   
  "

  "basedOn" : [{ Reference(CarePlan|DeviceRequest|MedicationRequest|
   NutritionOrder|ServiceRequest) }], // Fulfills plan, proposal or order

  "triggeredBy" : [{ // Triggering observation(s)
    "observation" : { Reference(Observation) }, // R!  Triggering observation
    "type" : "<code>", // R!  reflex | repeat | re-run
    "reason" : "<string>" // Reason that the observation was triggered
  }],
  "partOf" : [{ Reference(GenomicStudy|ImagingStudy|Immunization|
   MedicationAdministration|MedicationDispense|MedicationStatement|Procedure) }], // Part of referenced event

  "status" : "<code>", // R!  registered | specimen-in-process | preliminary | final | amended | corrected | appended | cancelled | entered-in-error | unknown | cannot-be-obtained

  "category" : [{ CodeableConcept }], // Classification of  type of observation
  "
  "
  "
  "

  "code" : { CodeableConcept }, // I R!  Type of observation (code / type)
  "subject" : { Reference(BiologicallyDerivedProduct|Device|Group|Location|
   Medication|NutritionProduct|Organization|Patient|Practitioner|Procedure|
   Substance) }, // Who and/or what the observation is about

  "focus" : [{ Reference(Any) }], // What the observation is about, when it is not about the subject of record
  "organizer" : <boolean>, // I This observation organizes/groups a set of sub-observations
  "encounter" : { Reference(Encounter) }, // Healthcare event during which this observation is made. If you need to place the observation within one or more episodes of care, use the workflow-episodeOfCare extension

  // effective[x]: Clinically relevant time/time-period for observation. One of these 4:
  "effectiveDateTime" : "<dateTime>",
  "effectivePeriod" : { Period },
  "effectiveTiming" : { Timing },
  "effectiveInstant" : "<instant>",
  "issued" : "<instant>", // Date/Time this version was made available
  "|
   
  

  "performer" : [{ Reference(CareTeam|Group|HealthcareService|Organization|
   Patient|Practitioner|PractitionerRole|RelatedPerson) }], // Who is responsible for the observation
  // value[x]: Actual result. One of these 13:
  "valueQuantity" : { Quantity },
  "valueCodeableConcept" : { CodeableConcept },
  "valueString" : "<string>",
  "valueBoolean" : <boolean>,
  "valueInteger" : <integer>,
  "valueRange" : { Range },
  "valueRatio" : { Ratio },
  "valueSampledData" : { SampledData },
  "valueTime" : "<time>",
  "valueDateTime" : "<dateTime>",
  "valuePeriod" : { Period },
  "
  "

  "valueAttachment" : { Attachment },
  "valueReference" : { Reference(MolecularDefinition) },
  "dataAbsentReason" : { CodeableConcept }, // I Why the result value is missing
  "interpretation" : [{ CodeableConcept }], // High, low, normal, etc
  "interpretationContext" : [{ CodeableReference(Any) }], // Context for understanding the observation

  "note" : [{ Annotation }], // Comments about the observation
  "

  "bodySite" : { CodeableConcept }, // DEPRECATED: Observed body part
  "bodyStructure" : { CodeableReference(BodyStructure) }, // Observed body structure

  "method" : { CodeableConcept }, // How it was done
  "
  "

  "specimen" : { Reference(Group|Specimen) }, // Specimen used for this observation
  "device" : { Reference(Device|DeviceMetric) }, // A reference to the device that generates the measurements or the device settings for the device

  "referenceRange" : [{ // Provides guide for interpretation
    "
    "

    "low" : { Quantity }, // I Low Range, if relevant
    "high" : { Quantity }, // I High Range, if relevant
    "normalValue" : { CodeableConcept }, // Normal value, if relevant

    "type" : { CodeableConcept }, // Reference range qualifier
    "appliesTo" : [{ CodeableConcept }], // Reference range population
    "age" : { Range }, // Applicable age range, if relevant
    "

    "text" : "<markdown>" // I Text based reference range in an observation

  }],
  "|
   
  "|
   
  "
    "
    

  "hasMember" : [{ Reference(MolecularDefinition|Observation|
   QuestionnaireResponse) }], // Related resource that belongs to the Observation group

  "derivedFrom" : [{ Reference(DocumentReference|GenomicStudy|ImagingSelection|
   ImagingStudy|MolecularDefinition|Observation|QuestionnaireResponse) }], // Related resource from which the observation is made

  "component" : [{ // I Component results
    "code" : { CodeableConcept }, // I R!  Type of component observation (code / type)
    // value[x]: Actual component result. One of these 13:
    "valueQuantity" : { Quantity },
    "valueCodeableConcept" : { CodeableConcept },
    "valueString" : "<string>",
    "valueBoolean" : <boolean>,
    "valueInteger" : <integer>,
    "valueRange" : { Range },
    "valueRatio" : { Ratio },
    "valueSampledData" : { SampledData },
    "valueTime" : "<time>",
    "valueDateTime" : "<dateTime>",
    "valuePeriod" : { Period },
    "
    "
    "

    "valueAttachment" : { Attachment },
    "valueReference" : { Reference(MolecularDefinition) },
    "dataAbsentReason" : { CodeableConcept }, // I Why the component result value is missing
    "interpretation" : [{ CodeableConcept }], // High, low, normal, etc
    "referenceRange" : [{ Content as for Observation.referenceRange }] // Provides guide for interpretation of component result value

  }]
}

Turtle Template

@prefix fhir: <http://hl7.org/fhir/> .doco


[ a fhir:Observation;
  fhir:nodeRole fhir:treeRoot; # if this is the parser root

  # from 
  # from 
  fhir:
  fhir:|
  
  fhir:|
  
  fhir:
  fhir:
  fhir:
  fhir:
  fhir:
  fhir:
  # . One of these 4
    fhir: ]
    fhir: ]
    fhir: ]
    fhir: ]
  fhir:
  fhir:
  # . One of these 11
    fhir: ]
    fhir: ]
    fhir: ]
    fhir: ]
    fhir: ]
    fhir: ]
    fhir: ]
    fhir: ]
    fhir: ]
    fhir: ]
    fhir: ]
  fhir:
  fhir:
  fhir:
  fhir:
  fhir:
  fhir:
  fhir:
  fhir:
    fhir:
    fhir:
    fhir:
    fhir:
    fhir:
    fhir:
  ], ...;
  fhir:
  fhir:|
  
  fhir:
    fhir:
    # . One of these 11
      fhir: ]
      fhir: ]
      fhir: ]
      fhir: ]
      fhir: ]
      fhir: ]
      fhir: ]
      fhir: ]
      fhir: ]
      fhir: ]
      fhir: ]
    fhir:
    fhir:
    fhir:
  ], ...;

  # from Resource: fhir:id, fhir:meta, fhir:implicitRules, and fhir:language
  # from DomainResource: fhir:text, fhir:contained, fhir:extension, and fhir:modifierExtension
  fhir:identifier  ( [ Identifier ] ... ) ; # 0..* Business Identifier for observation
  fhir:basedOn  ( [ Reference(CarePlan|DeviceRequest|MedicationRequest|NutritionOrder|ServiceRequest) ] ... ) ; # 0..* Fulfills plan, proposal or order
  fhir:triggeredBy ( [ # 0..* Triggering observation(s)
    fhir:observation [ Reference(Observation) ] ; # 1..1 Triggering observation
    fhir:type [ code ] ; # 1..1 reflex | repeat | re-run
    fhir:reason [ string ] ; # 0..1 Reason that the observation was triggered
  ] ... ) ;
  fhir:partOf  ( [ Reference(GenomicStudy|ImagingStudy|Immunization|MedicationAdministration|
  MedicationDispense|MedicationStatement|Procedure) ] ... ) ; # 0..* Part of referenced event

  fhir:status [ code ] ; # 1..1 registered | specimen-in-process | preliminary | final | amended | corrected | appended | cancelled | entered-in-error | unknown | cannot-be-obtained
  fhir:category  ( [ CodeableConcept ] ... ) ; # 0..* Classification of  type of observation
  fhir:code [ CodeableConcept ] ; # 1..1 I Type of observation (code / type)
  fhir:subject [ Reference(BiologicallyDerivedProduct|Device|Group|Location|Medication|NutritionProduct|
  Organization|Patient|Practitioner|Procedure|Substance) ] ; # 0..1 Who and/or what the observation is about

  fhir:focus  ( [ Reference(Any) ] ... ) ; # 0..* What the observation is about, when it is not about the subject of record
  fhir:organizer [ boolean ] ; # 0..1 I This observation organizes/groups a set of sub-observations
  fhir:encounter [ Reference(Encounter) ] ; # 0..1 Healthcare event during which this observation is made. If you need to place the observation within one or more episodes of care, use the workflow-episodeOfCare extension
  # effective[x] : 0..1 Clinically relevant time/time-period for observation. One of these 4
    fhir:effective [  a fhir:DateTime ; dateTime ]
    fhir:effective [  a fhir:Period ; Period ]
    fhir:effective [  a fhir:Timing ; Timing ]
    fhir:effective [  a fhir:Instant ; instant ]
  fhir:issued [ instant ] ; # 0..1 Date/Time this version was made available
  fhir:performer  ( [ Reference(CareTeam|Group|HealthcareService|Organization|Patient|Practitioner|
  PractitionerRole|RelatedPerson) ] ... ) ; # 0..* Who is responsible for the observation

  # value[x] : 0..1 I Actual result. One of these 13
    fhir:value [  a fhir:Quantity ; Quantity ]
    fhir:value [  a fhir:CodeableConcept ; CodeableConcept ]
    fhir:value [  a fhir:String ; string ]
    fhir:value [  a fhir:Boolean ; boolean ]
    fhir:value [  a fhir:Integer ; integer ]
    fhir:value [  a fhir:Range ; Range ]
    fhir:value [  a fhir:Ratio ; Ratio ]
    fhir:value [  a fhir:SampledData ; SampledData ]
    fhir:value [  a fhir:Time ; time ]
    fhir:value [  a fhir:DateTime ; dateTime ]
    fhir:value [  a fhir:Period ; Period ]
    fhir:value [  a fhir:Attachment ; Attachment ]
    fhir:value [  a fhir:Reference ; Reference(MolecularDefinition) ]
  fhir:dataAbsentReason [ CodeableConcept ] ; # 0..1 I Why the result value is missing
  fhir:interpretation  ( [ CodeableConcept ] ... ) ; # 0..* High, low, normal, etc
  fhir:interpretationContext  ( [ CodeableReference(Any) ] ... ) ; # 0..* Context for understanding the observation
  fhir:note  ( [ Annotation ] ... ) ; # 0..* Comments about the observation
  fhir:bodySite [ CodeableConcept ] ; # 0..1 DEPRECATED: Observed body part
  fhir:bodyStructure [ CodeableReference(BodyStructure) ] ; # 0..1 Observed body structure
  fhir:method [ CodeableConcept ] ; # 0..1 How it was done
  fhir:specimen [ Reference(Group|Specimen) ] ; # 0..1 Specimen used for this observation
  fhir:device [ Reference(Device|DeviceMetric) ] ; # 0..1 A reference to the device that generates the measurements or the device settings for the device
  fhir:referenceRange ( [ # 0..* Provides guide for interpretation
    fhir:low [ Quantity ] ; # 0..1 I Low Range, if relevant
    fhir:high [ Quantity ] ; # 0..1 I High Range, if relevant
    fhir:normalValue [ CodeableConcept ] ; # 0..1 Normal value, if relevant
    fhir:type [ CodeableConcept ] ; # 0..1 Reference range qualifier
    fhir:appliesTo  ( [ CodeableConcept ] ... ) ; # 0..* Reference range population
    fhir:age [ Range ] ; # 0..1 Applicable age range, if relevant
    fhir:text [ markdown ] ; # 0..1 I Text based reference range in an observation
  ] ... ) ;
  fhir:hasMember  ( [ Reference(MolecularDefinition|Observation|QuestionnaireResponse) ] ... ) ; # 0..* Related resource that belongs to the Observation group
  fhir:derivedFrom  ( [ Reference(DocumentReference|GenomicStudy|ImagingSelection|ImagingStudy|MolecularDefinition|
  Observation|QuestionnaireResponse) ] ... ) ; # 0..* Related resource from which the observation is made

  fhir:component ( [ # 0..* I Component results
    fhir:code [ CodeableConcept ] ; # 1..1 I Type of component observation (code / type)
    # value[x] : 0..1 I Actual component result. One of these 13
      fhir:value [  a fhir:Quantity ; Quantity ]
      fhir:value [  a fhir:CodeableConcept ; CodeableConcept ]
      fhir:value [  a fhir:String ; string ]
      fhir:value [  a fhir:Boolean ; boolean ]
      fhir:value [  a fhir:Integer ; integer ]
      fhir:value [  a fhir:Range ; Range ]
      fhir:value [  a fhir:Ratio ; Ratio ]
      fhir:value [  a fhir:SampledData ; SampledData ]
      fhir:value [  a fhir:Time ; time ]
      fhir:value [  a fhir:DateTime ; dateTime ]
      fhir:value [  a fhir:Period ; Period ]
      fhir:value [  a fhir:Attachment ; Attachment ]
      fhir:value [  a fhir:Reference ; Reference(MolecularDefinition) ]
    fhir:dataAbsentReason [ CodeableConcept ] ; # 0..1 I Why the component result value is missing
    fhir:interpretation  ( [ CodeableConcept ] ... ) ; # 0..* High, low, normal, etc
    fhir:referenceRange  ( [ See Observation.referenceRange ] ... ) ; # 0..* Provides guide for interpretation of component result value
  ] ... ) ;

]

Changes since Release 3 from both R4 and R4B

Observation
Observation.basedOn
    Type Reference: Added Target Type ServiceRequest
  • Type Reference: Removed Target Types ProcedureRequest, ReferralRequest Type ImmunizationRecommendation
Observation.partOf Observation.triggeredBy
  • Added Element
Observation.status Observation.triggeredBy.observation
  • Change value set from http://hl7.org/fhir/ValueSet/observation-status to http://hl7.org/fhir/ValueSet/observation-status|4.0.1 Added Mandatory Element
Observation.focus Observation.triggeredBy.type
  • Added Mandatory Element
Observation.encounter Observation.triggeredBy.reason
  • Renamed from context to encounter Added Element
Observation.partOf
  • Type Reference: Removed Added Target Type EpisodeOfCare GenomicStudy
Observation.effective[x] Observation.status
  • Remove code corrected
  • Add Types Timing, instant codes specimen-in-process , cannot-be-obtained
Observation.performer Observation.subject
  • Type Reference: Added Target Types PractitionerRole, CareTeam Organization, Procedure, Practitioner, Medication, Substance, BiologicallyDerivedProduct, NutritionProduct
Observation.value[x] Observation.focus
  • Add Type integer Now marked as Modifier
Observation.organizer
  • Remove Type Attachment Added Element
Observation.dataAbsentReason Observation.performer
  • Change value set from http://hl7.org/fhir/ValueSet/observation-valueabsentreason to http://hl7.org/fhir/ValueSet/data-absent-reason Change code system for extensibly bound codes from "http://hl7.org/fhir/data-absent-reason" to "http://terminology.hl7.org/CodeSystem/data-absent-reason" Type Reference: Added Target Types HealthcareService, Group
Observation.interpretation Observation.value[x]
  • Max Cardinality changed from 1 to * Change code system for extensibly bound codes from "http://terminology.hl7.org/CodeSystem/v2-0078" to "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation" Add Types Attachment, Reference(MolecularDefinition)
Observation.note Observation.interpretationContext
  • Renamed from comment to note Added Element
Observation.bodyStructure
  • Max Cardinality changed from 1 to * Added Element
Observation.specimen
  • Type changed from string to Annotation Reference: Added Target Type Group
Observation.referenceRange.type Observation.referenceRange.low
  • Remove Binding http://hl7.org/fhir/ValueSet/referencerange-meaning (extensible) Type changed from Quantity(http://hl7.org/fhir/StructureDefinition/SimpleQuantity) to Quantity
Observation.hasMember Observation.referenceRange.high
  • Added Element Type changed from Quantity(http://hl7.org/fhir/StructureDefinition/SimpleQuantity) to Quantity
Observation.derivedFrom Observation.referenceRange.normalValue
  • Added Element
Observation.component.value[x] Observation.referenceRange.text
  • Add Types boolean, integer Remove Type Attachment changed from string to markdown
Observation.component.dataAbsentReason Observation.hasMember
  • Change value set from http://hl7.org/fhir/ValueSet/observation-valueabsentreason to http://hl7.org/fhir/ValueSet/data-absent-reason Type Reference: Added Target Type MolecularDefinition
  • Change code system for extensibly bound codes from "http://hl7.org/fhir/data-absent-reason" to "http://terminology.hl7.org/CodeSystem/data-absent-reason" Type Reference: Removed Target Type MolecularSequence
Observation.component.interpretation Observation.derivedFrom
  • Max Cardinality changed from 1 to * Type Reference: Added Target Types ImagingSelection, MolecularDefinition, GenomicStudy
  • Change code system for extensibly bound codes from "http://terminology.hl7.org/CodeSystem/v2-0078" to "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation" Type Reference: Removed Target Types Media, MolecularSequence
Observation.related Observation.component.value[x]
  • deleted Add Types Attachment, Reference(MolecularDefinition)

See the Full Difference for further information

This analysis is available for R4 as XML or JSON . See R3 <--> R4 Conversion Maps (status = 48 tests that all execute ok. All tests pass round-trip testing and 23 r3 resources are invalid (0 errors). ) for R4B as XML or JSON .

 

See the Profiles & Extensions and the alternate Additional definitions: Master Definition XML + JSON , XML Schema / Schematron + JSON Schema , ShEx (for Turtle ) + see the extensions , the spreadsheet version & the dependency analysis

Observation.status Observation.interpretation Observation.component.interpretation Observation.referenceRange.type
Path Definition ValueSet Type Reference Documentation
Observation.triggeredBy.type TriggeredBytype Required

Codes providing the status type of an triggeredBy observation.

Observation.status ObservationStatus Required ObservationStatus

Codes providing the status of an observation.

Observation.category Codes for high level observation categories. ObservationCategoryCodes Preferred ObservationCategoryCodes

Observation Category codes.

Observation.code Observation.component.code Codes identifying names of simple observations. LOINCObsOrBoth Example LOINCCodes

LOINC concepts whose ORDER_OBS property is 'Observation' (Obs only) or 'Both'.

Observation.dataAbsentReason Observation.component.dataAbsentReason DataAbsentReason Extensible Codes specifying

Used to specify why the result (`Observation.value[x]`) normally expected content of the data element is missing.

Observation.interpretation ObservationInterpretationCodes (a valid code from ObservationInterpretation icon ) Extensible DataAbsentReason

A categorical assessment, providing a rough qualitative interpretation of the observation value, such as “normal”/ “abnormal”,”low” / “high”, “better” / “worse”, “susceptible” / “resistant”, “expected”/ “not expected”. The value set is intended to be for ANY use where coded representation of an interpretation is needed.

Notes:

This is being communicated in v2.x in OBX-8 (Observation Interpretation), in v3 in ObservationInterpretation (CWE) in R1 (Representative Realm) and in FHIR in Observation.interpretation. Historically these values come from the laboratory domain, and these codes are extensively used. The value set binding is extensible, so codes outside the value set that are needed for interpretation concepts (i.e. particular meanings) that are not included in the value set can be used, and these new codes may also be added to the value set and published in a future version.

Observation.interpretationContext ObservationInterpretationContextCodes Example

Codes identifying interpretations contextual factors that affect interpretation of observations. Examples include conditions or states such as diabetic, fasting, or paraplegic that may be critical to understanding the significance of an observation. This is an example value set and implementations may use other codes or reference specific conditions as needed.

Observation.bodySite SNOMEDCTBodyStructures Extensible Example ObservationInterpretationCodes

This value set includes all codes from SNOMED CT icon where concept is-a 442083009 (Anatomical or acquired body site (body structure)).

Observation.bodySite Observation.bodyStructure Codes describing anatomical locations. May include laterality. SNOMEDCTBodyStructures Example SNOMEDCTBodyStructures

This value set includes all codes from SNOMED CT icon where concept is-a 442083009 (Anatomical or acquired body site (body structure)).

Observation.method Methods for simple observations. ObservationMethods Example ObservationMethods

Observation Method codes from SNOMED CT icon where concept is-a 272394005 (Technique (qualifier value)) or is-a 129264002 (Action (qualifier value)) or is-a 386053000 (Evaluation procedure(procedure))

Observation.referenceRange.normalValue ObservationReferenceRangeNormalValueCodes (a valid code from ObservationreferenceRangeNormalValue ) Example Code for

Codes that describe the normal value in the meaning of a reference range. range, such as “Negative” or “Absent”

Observation.referenceRange.type ObservationReferenceRangeMeaningCodes Preferred ObservationReferenceRangeMeaningCodes

This value set defines a set of codes that can be used to indicate the meaning/use of a reference range for a particular target population.

Observation.referenceRange.appliesTo ObservationReferenceRangeAppliesToCodes Example Codes identifying

This value set defines a set of codes that can be used to indicate the particular target population the reference range applies to.

Observation.component.code LOINCObsOrBoth Example

LOINC concepts whose ORDER_OBS property is 'Observation' (Obs only) or 'Both'.

Observation.component.dataAbsentReason ObservationReferenceRangeAppliesToCodes DataAbsentReason Extensible

Used to specify why the normally expected content of the data element is missing.

Observation.component.interpretation ObservationInterpretationCodes (a valid code from ObservationInterpretation icon ) Extensible

A categorical assessment, providing a rough qualitative interpretation of the observation value, such as “normal”/ “abnormal”,”low” / “high”, “better” / “worse”, “susceptible” / “resistant”, “expected”/ “not expected”. The value set is intended to be for ANY use where coded representation of an interpretation is needed.

Notes:

This is being communicated in v2.x in OBX-8 (Observation Interpretation), in v3 in ObservationInterpretation (CWE) in R1 (Representative Realm) and in FHIR in Observation.interpretation. Historically these values come from the laboratory domain, and these codes are extensively used. The value set binding is extensible, so codes outside the value set that are needed for interpretation concepts (i.e. particular meanings) that are not included in the value set can be used, and these new codes may also be added to the value set and published in a future version.

id UniqueKey Level Location Description Expression
obs-3 img  obs-3 Rule Observation.referenceRange Must have at least a low or a high or text low.exists() or high.exists() or text.exists()
obs-6 img  obs-6 Rule (base) dataAbsentReason Observation.dataAbsentReason SHALL only be present if Observation.value[x] is not present dataAbsentReason.empty() or value.empty()
obs-7 img  obs-7 Rule (base) If Observation.code Observation.component.code is the same as an Observation.component.code Observation.code, then the value element associated with the code Observation.value SHALL NOT be present (the Observation.component.value[x] holds the value). value.empty() or component.code.where(coding.intersect(%resource.code.coding).exists()).empty()
img  obs-9 Rule Observation.specimen If Observation.specimen is a reference to Group, the group can only have specimens (reference.resolve().exists() and reference.resolve() is Group) implies reference.resolve().member.entity.resolve().all($this is Specimen)
img  obs-10 Rule (base) Observation.component.dataAbsentReason SHALL only be present if Observation.component.value[x] is not present component.empty() or component.where(dataAbsentReason.exists()).all(value.empty())
img  obs-11 Rule (base) if organizer exists and organizer = true, then value[x], dataAbsentReason and component SHALL NOT be present (organizer.exists() and organizer.allTrue()) implies (value.empty() and dataAbsentReason.empty() and component.empty())
img  obs-12 Warning (base) All observations SHOULD have a performer performer.exists()
img  obs-13 Rule Observation.referenceRange.low If low.comparator exists, it must be '>=' or '>'. comparator.exists() implies (comparator = '>=' or comparator = '>')
img  obs-14 Rule Observation.referenceRange.high If high.comparator exists, it must be '<=' or '<'. comparator.exists() implies (comparator = '<=' or comparator = '<')

At its simplest, a resource instance 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 are created to provide guidance on capturing certain types of observations for a given use case. The Observation resource focuses on the level of detail captured by most systems. However, for a given use case there may be additional constraints and additional information relevant in certain circumstances. As with other resources, extensions can be used to introduce this additional complexity.

Typically, an observation is made about the subject - a patient, or group of patients, location, or device - and the distinction between the subject and what is directly measured for an observation is specified in the observation code itself ( e.g., "Blood Glucose") and does not need to be represented separately. However, three attributes may be used for representing the focus of the observation if it is not the subject itself. The specimen and , bodySite , and bodyStructure elements are used to represent measurements taken on subject samples or anatomic and morphological locations, and focus represents specific aspect of the subject that are the point of attention such as another observation or a device implanted in a patient.

There may be some confusion about what to record in the subject, focus, and device elements, and the observation-recording extension, particularly involving Devices.

  • The subject is whose (or what entity’s) record the observation should appear in. If the Observation is about another person, device, or location, but collected in the context of a particular patient, then the subject is that patient. Devices may be the subject of an observation when the record is about the device itself absent a patient (or other) context, such as a calibration record. A subject is expected except when the resource is not finalized, has been anonymized, or similar.
  • When the Observation is about someone or something other than subject, that person or entity is recorded in the focus element. An observation about a patient’s home would record the patient as the subject, and the home location as the focus. An implanted artificial hip device could be the focus of a wear measurement Observation with a patient subject.
  • The device element is used to record the Device (or within a device, the DeviceMetric) that provides the measurement, analysis, or setting configuration recorded in the Observation. For example, the radiology software generating the hip prosthetic wear measurement would be recorded in device. In the calibration record above, one would expect the device element to be populated with the calibration device providing the measurements about the subject device.
  • In some cases, the source of the observation is not the entity recording it. This may be, for example, a radiologist-dictated observation entered by a transcriptionist, or a reading off a thermometer entered into the chart by a nurse. If it is important to record that the person or device that made the observation is not the person or device that entered it into the record, then the observation-recording extension may be used.

Note that a device could appear in any of these elements depending on the role it is playing in a particular Observation; there is no fixed element where a device would be recorded. Similarly, patients, related persons, practitioners and other entities may in may appear in various elements. As a result, finding all Observations involving a particular device, etc. may require multiple searches.

Many observations have important relationships to other observations and need to be grouped together. These structures have been defined together in some fashion to document critical relationships for interpretation of the observations. The methods to do this: so primarily are through DiagnosticReport and using DiagnosticReport.result , Observation and the elements: Observation using Observation.component , Observation.hasMember , and Observation.derivedFrom . The sections below provides See the Diagnostics Module for guidance around which structure related to use. Because the idea of what Microbiology reporting and relevant relationships necessary to group together is often highly contextual support reflex, follow-up, and based upon the end user's point of view, the choice add-on orders.

Note that Composition may also be used to organize observations and diagnostic reports, but that is only for purpose of which structure readability, not to use will be driven by jurisdiction, organizational practice record critical relationships for interpretations. See DiagnosticReport.composition and context. Profiling will normally be necessary Composition for implementation. further considerations for that separate purpose.

DiagnosticReport relates directly to an order (ServiceRequest). The DiagnosticReport.code names the panel and serves as the grouping element, which is traditionally referred to as a "panel" or "battery" by laboratories. The DiagnosticReport.result element references the individual observations. Several examples demonstrate observation grouping using DiagnosticReport as the grouping structure.

Observation.component is used for any supporting result that cannot reasonably be interpreted and used outside the scope of the Observation it is a component of. Component observations may make up the separate and individual parts of the observation or may provide qualifying information to Observation.code and may only be able to be understood in relation to the Observation.code (for example, see the $stats operation ). Therefore all code-value and component.code-component.value pairs need to be taken into account to correctly understand the meaning of the observation. Components should only be used when there is only one method, one observation, one performer, one device, and one time. Some use cases for using this structure include:

  1. Observations that are commonly produced and interpreted together. For example, systolic and diastolic blood pressure are represented as a single Blood pressure panel . Another example are ST segment measurements from the different ECG leads (e.g., ST I, ST II, etc.).
  2. Assessment tool results that are commonly produced and interpreted together. For example, a newborn Apgar score that is a single Observation with five components.
  3. Representing multiple answers to a question ( relationship and boundaries between Observation and Questionnaire/QuestionnaireResponse). For example, reporting the types of alcohol consumed by a patient

On the other hand, any observations that are clinically relevant outside the context of being a component of another observation should be represented by separate Observation resources. For example a Body Mass Index (BMI) Observation should not contain components for height and weight because they are clinically relevant observations on their own and should be represented by separate Observation resources. See the section below on how to relate independent Observations.

Observation.hasMember and Observation.derivedFrom and the core extensions: Observation-sequelTo icon and Observation-replaces icon are used for any supporting result that can be interpreted and used on its own and has one or more different values for method, observation, performer, device, time, and/or error conditions. Two common use cases for using this structure are:

  1. For grouping related observations such as for a "panel" or "battery". In this case the Observation.code represents the "panel" code, typically Observation.value[x] is not present, and the set of member Observations are listed in Observation.hasMember . This structure permits nested grouping when used with DiagnosticReport (e.g. complex micro isolate and sensitivities report ). ) as described in the Diagnostics Module
  2. When linking to other Observations from which an Observation is derived. In this case both Observation.code and Observation.value[x] are present, and the linked observations are listed in Observation.derivedFrom . An example of this would be a Body Mass Index (BMI) Observation where the height and weight measurements are referenced.

To perform a delta check one can instantiate a new observation (the comparison observation) with derivedFrom populated with references to the two prior Observations that triggered the delta check. Also, the Observation.interpretation of the comparison Observation has the code of the interpretation of the delta check.

When a result value is a represented as a predefined concept using a code, valueCodeableConcept is used. This element is bound to a value set comprised of a standard nomenclature such as SNOMED CT or a source system ("local") coded result values.

Results may be coded in multiple value sets based on different code systems and these may be mapped using the ConceptMap resource and/or given as additional codings directly in the element as shown in the example below.

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, valueCodeableConcept would be:


	"valueCodeableConcept": {
		"coding": [
			{
				"system": "http://snomed.info/sct",
				"code": "260385009",
				"display": "Negative"
			}, {
				"system": "https://acme.lab/resultcodes",
				"code": "NEG",
				"display": "Negative"
			}
		],
		"text": "Negative for Chlamydia Trachomatis rRNA"
	}

		"valueCodeableConcept": {
			"coding": [
				{
					"system": "http://snomed.info/sct",
					"code": "260385009",
					"display": "Negative"
				}, {
					"system": "https://acme.lab/resultcodes",
					"code": "NEG",
					"display": "Negative"
				}
			],
			"text": "Negative for Chlamydia Trachomatis rRNA"
		}


When the data element is usually coded or the type associated with the code element defines a coded value, use valueCodeableConcept even if there is no appropriate code and only free text is available. For example using text only, the valueCodeableConcept element would be:


	"valueCodeableConcept": {
		"text": "uncoded free text result"
	}

		"valueCodeableConcept": {
			"text": "uncoded free text result"
		}


When a coded answer list includes a concept code for "other" and there is a free text description of the concept, the valueCodeableConcept.text element should be used to capture the full meaning of the source. In the example below, the answer code "Other" is provided in the valueCodeableConcept element and the text value supplied value in the CodeableConcept.text element.

{ "resourceType": "Observation", ... snip ... "code": { "coding": [ { "system": "http://loinc.org", "code": "74076-1", "display": "Medication or substance involved" } ] }, .. snip ... "valueCodeableConcept": { "coding": [ { "system": "http://loinc.org", "code": " LA20343-2", "display": "Other substance: PLEASE SPECIFY" } ], "text": "Other: Blue pills I found under my couch"
	{
		"resourceType": "Observation",
		... snip ...
		"code": {
			"coding": [
				{
					"system": "http://loinc.org",
					"code": "74076-1",
					"display": "Medication or substance involved"
				}
			]
		},
		.. snip ...
		"valueCodeableConcept": {
			"coding": [
				{
					"system": "http://loinc.org",
					"code": " LA20343-2",
					"display": "Other substance: PLEASE SPECIFY"
				}
			],
			"text": "Other: Blue pills I found under my couch"
		}
		.. snip ...

	}
	.. snip ...
}

A recurring issue for many observation events, regardless of the particular pattern, is determining how to populate observation.code and observation.value. While this is typically straight-forward for laboratory observations, it can get blurry for other types of observations, such as findings and disorders, family history observations, etc. This discussion focuses on the way in which the coded representation of such statements is expressed using the Observation.code and Observation.value elements.

There are two distinct facets that are central to a FHIR Observations:

  • The action taken to make the finding and/or the property about which the property was observed. For example: measurement of blood hemoglobin.
  • The result of the observation. For example: 14 g/dl.

Several different ways of representing the same information exist using different combinations of the Observation.code and Observation.value . Unconstrained use of the alternatives presents a major challenge for computation of semantic equivalence and for safe interpretation of observations originating from different applications and users. The following four patterns could reasonably represent the same case. Considering that the Observation resource needs to support many use cases, the appropriate place to define the specific pattern is expected to be done through profiles and implementation guides as specified by the jurisdictions and/or organizations implementing FHIR:

  1. Observation.code represents the nature of the observation and the Observation.value a code represents the non-numeric result value. These are two distinct facets that are central to a FHIR Observations. For example:
    • code=[Examination]
    • value=[Abdomen tender]
  2. Observation.code is nearly identical to 1) above, but the level of granularity is shifted from the value to code. For example:
    • code=[Abdominal examination]
    • value=[Tenderness]
  3. The Observation.code is also expressed in a way that does not specify the observation action but indicates a statement about findings reduced to a single name (or term), as in the above item. In this example, the Observation.value is present and "qualifies" the finding typically confirming or refuting it. For example:
    • code=[Abdominal tenderness]
    • value=[found/true]
  4. in this example the Observation.code is expressed in a way that does not specify the observation action but indicates a statement about findings reduced to a single name (or term). In this particular example in that context, the Observation.value is omitted. For example:
    • code=[Abdominal tenderness]
    • value element is omitted
  1. Recommended rules for case 1 and 2 patterns:
    • The Observation.code is preferably a LOINC icon concept code.
      • If a SNOMED CT icon concept code is used, the expression SHOULD represent a 363787002 (Observable entity(Observable entity)) or 386053000 (Evaluation procedure(evaluation procedure))
    • For non-numeric values, the Observation.value is preferably a SNOMED CT concept code.
  2. Recommended rules for case 3 pattern:
    • The Observation.code is preferably a LOINC or SNOMED CT concept code.
      • If a SNOMED CT concept code is used, the expression SHOULD represent a 404684003 (Clinical finding (finding)) , 413350009 (Finding with explicit context(finding)), or 272379006 (Event(event)).
    • The Observation.value is represented by either
  3. Recommended rules for case 4 pattern:
    • The Observation.code is preferably a SNOMED CT concept code where the concept is-a 404684003 (Clinical finding (finding)) , 413350009 (Finding with explicit context(finding)), or 272379006 (Event(event)).
    • The Observation.value is omitted. The default interpretation is the concept (single code or expression) represented in Observation.code is present in the patient. An Observation.dataAbsentReason value of 'clinical-finding' SHOULD be used to indicate why the expected value is missing.
  4. SHOULD NOT use the Assertion pattern as described in HL7 Version 3 Implementation Guide: TermInfo - Using SNOMED CT in CDA R2 Models, Release 1 icon . ( The code is 'ASSERTION' and the value is a SNOMED CT concept or expression )

The following list provides guidance on using codes or other observations to provide additional context that may alter how an observation is interpreted.:

  1. If possible, use the most specific code you can

    e.g.:

    { "resourceType": "Observation", ... snip ... "code": { "coding": [ { "system": "http://loinc.org", "code": "6689-4", "display": "Glucose [Mass/​volume] in Blood --2 hours post meal" } ] }, ... snip ... }
    	{
    	"resourceType": "Observation",
    	... snip ...
    	"code": {
    		"coding": [
    			{
    				"system": "http://loinc.org",
    				"code": "6689-4",
    				"display": "Glucose [Mass/​volume] in Blood --2 hours post meal"
    			}
    		]
    	},
    	... snip ...
    	}
    
    
  2. Alternatively, use additional codes in Observation.code as described above .

    e.g.: Observation.code = coding-1: 59408-5 Oxygen saturation in Arterial blood by Pulse oximetry, coding-2: 20564-1 Oxygen saturation in Blood

    { "resourceType": "Observation", ... snip ... "code": { "coding": [ { "system": "http://loinc.org", "code": "59408-5", "display": "Oxygen saturation in Arterial blood by Pulse oximetry" }, { "system": "http://loinc.org", "code": "20564-1", "display": "Oxygen saturation in Blood" } ] }, ... snip ... }
    	{
    	"resourceType": "Observation",
    	... snip ...
    	"code": {
    		"coding": [
    			{
    				"system": "http://loinc.org",
    				"code": "59408-5",
    				"display": "Oxygen saturation in Arterial blood by Pulse oximetry"
    			},
    			{
    				"system": "http://loinc.org",
    				"code": "20564-1",
    				"display": "Oxygen saturation in Blood"
    			}
    		]
    	},
    	... snip ...
    	}
    
    
  3. As described above , observations are typically grouped together to provide additional information needed for correctly understanding and interpreting the observation. As an alternative to grouping observations, extensions may be used to provide references to other observations needed for understanding and interpreting an observation.

Note: Note to Implementers: We are seeking input from the implementer community in evaluating existing Observation Extensions for this purpose

Feedback here icon .

  • The element, Observation.value[x], has a variable name depending on the type as follows:
    • valueQuantity
    • valueCodeableConcept
    • valueString
    • valueBoolean
    • valueInteger
    • valueRange
    • valueRatio
    • valueSampledData
    • valueTime
    • valueDateTime
    • valuePeriod
    • valueAttachment

  • See above section on Using codes for result values
  • See section JSON representation of primitive elements for additional information on significant digits in decimal values.
  • The Attachment data type is used to represent an observation result value if the actual value is a binary file such as an image. If the observation result value is derived from the binary file (for example 'X' detected and here is the the proof in this image), the binary file may be directly represented using DocumentReference and referenced in the Observation with derivedFrom . Images that are referenced as part of a report should be represented with DiagnosticReport.media or, if the entire report is in a binary format such as pdf, with DiagnosticReport.presentedForm .
  • The Boolean data type is rarely used for value[x] because most observations result values are never truly Boolean due to exceptional values such as "unknown", therefore they should use the CodeableConcept data type instead and select codes from http://terminology.hl7.org/ValueSet/v2-0136 icon (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 valueQuantity would be: "valueQuantity": { "value": 2.0, "comparator": "<", "unit": "mmol/l", "system": "http://unitsofmeasure.org", "code": "mmol/L" }
    		"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 valueCodeableConcept element would be absent and dataAbsentReason element would be: "dataAbsentReason": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/data-absent-reason", "code": "NaN", "display": "Not a Number" } ] }
    		"dataAbsentReason": {
    			"coding": [
    				{
    					"system": "http://terminology.hl7.org/CodeSystem/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 Ratio

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.

Most common observations will only have one generic reference range. Reference ranges may be useful for laboratory 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 might 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.

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 "cancelled" and the specific details given - preferably as coded values in the dataAbsentReason or valueCodeableConcept element. Additional information may be provided in the `note` element as well. The specimen reject example demonstrates this using a coded value for unsatisfactory specimen in dataAbsentReason.

For Observations that will not or were not performed:

  • We create one Observation for each Test result or Panel that was requested that will not be performed
  • Observation.code to identify each Test result or Panel requested to be performed
  • Observation.dataAbsentReason with an appropriate Reason
  • Observation.note with a human readable explanation
  • If the reason is a specific specimen condition, reference this via Specimen.condition

Genetic Genomic reporting makes heavy use of the DiagnosticReport and Observation resources. resources to represent structured, computable genomic data. An implementation guide describing how to represent genetic results can be found here icon .

Beyond the structured, computable data available in DiagnosticReport and Observation, metadata about the analysis performed is captured in the GenomicStudy resource. GenomicStudy aims at delineating relevant information of a genomic study. A genomic study might comprise one or more analyses, each serving a specific purpose. These analyses may vary in method (e.g., karyotyping, CNV, or SNV detection), performer, software, devices used, or regions targeted.

When referencing genomic analysis from an Observation, the partOf attribute MAY be used to reference the GenomicStudy that led to this observation being made. Another option is that derivedFrom MAY be used to reference a DocumentReference when the observation was derived from the data in the file, even when that file was produced as part of a GenomicStudy output. Also, derivedFrom MAY be used to reference the GenomicStudy where the data was produced.

The lastn query operation meets the common need for searching for the most recent or "last known" Observations for a subject. Examples where this query could be used:

  • Fetch the last 5 temperatures for a patient to view trends
  • Get the most recent laboratory results for patient
  • Fetch the last 3 results for all vitals for a patient

See the Last N Observations Query section in the Observation resource operations page for more information and examples

The stats operation performs a set of statistical calculations on a set of clinical measurements such as a blood pressure as stored on the server. This operation is focused on Observation resources with valueQuantity elements that have UCUM unit codes. Examples where this operation could be used:

  • Get the average, min, max and count of a series of BP measurements for a patient
  • Determine 20th or 80th percentile on a set of measurements over a time period
See the Observation Statistics section in the Observation resource operations page for more information and examples

Search parameters for this resource. See also the full list of search parameters for this resource , and check the Extensions registry for search parameters on extensions related to this resource. The common parameters also apply. See Searching for more information about searching in REST, messaging, and services.

Name Type Description Expression In Common
based-on TU reference Reference to the service request. Observation.basedOn
( CarePlan , MedicationRequest , NutritionOrder , DeviceRequest , ServiceRequest , ImmunizationRecommendation )
body-site token DEPRECATED: Observed body part Observation.bodySite
body-structure-code token Code for observed body structure Observation.bodyStructure.concept
category TU token The classification of the type of observation Observation.category
code TU token The code of the observation type Observation.code 13 19 Resources
code-value-concept TU composite Code and coded value parameter pair On Observation:
  code: code
  value-concept: value.as(CodeableConcept) value.ofType(CodeableConcept)
code-value-date TU composite Code and date/time value parameter pair On Observation:
  code: code
  value-date: value.as(DateTime) value.ofType(dateTime) | value.as(Period) value.ofType(Period)
code-value-quantity TU composite Code and quantity value parameter pair On Observation:
  code: code
  value-quantity: value.as(Quantity) value.ofType(Quantity)
code-value-string TU composite Code and string value parameter pair On Observation:
  code: code
  value-string: value.as(string) value.ofType(string)
combo-code TU token The code of the observation type or component type Observation.code | Observation.component.code
combo-code-value-concept TU composite Code and coded value parameter pair, including in components On Observation | Observation.component:
  combo-code: code
  combo-value-concept: value.as(CodeableConcept) value.ofType(CodeableConcept)
combo-code-value-quantity TU composite Code and quantity value parameter pair, including in components On Observation | Observation.component:
  combo-code: code
  combo-value-quantity: value.as(Quantity) value.ofType(Quantity)
combo-data-absent-reason TU token The reason why the expected value in the element Observation.value[x] or Observation.component.value[x] is missing. Observation.dataAbsentReason | Observation.component.dataAbsentReason
combo-interpretation token The interpretation of the observation type or component type Observation.interpretation | Observation.component.interpretation
combo-value-concept TU token The value or component value of the observation, if the value is a CodeableConcept (Observation.value as CodeableConcept) Observation.value.ofType(CodeableConcept) | (Observation.component.value as CodeableConcept) Observation.component.value.ofType(CodeableConcept)
combo-value-quantity TU quantity The value or component value of the observation, if the value is a Quantity, or a SampledData (just search on the bounds of the values in sampled data) Quantity. (Observation.value as Quantity) | (Observation.value as SampledData) | (Observation.component.value as Quantity) Observation.value.ofType(Quantity) | (Observation.component.value as SampledData) Observation.component.value.ofType(Quantity)
component-code TU token The component code of the observation type Observation.component.code
component-code-value-concept TU composite Component code and component coded value parameter pair On Observation.component:
  component-code: code
  component-value-concept: value.as(CodeableConcept) value.ofType(CodeableConcept)
component-code-value-quantity TU composite Component code and component quantity value parameter pair On Observation.component:
  component-code: code
  component-value-quantity: value.as(Quantity) value.ofType(Quantity)
component-data-absent-reason TU token The reason why the expected value in the element Observation.component.value[x] is missing. Observation.component.dataAbsentReason
component-interpretation token The component interpretation of the observation type Observation.component.interpretation
component-value-concept TU token The value of the component observation, if the value is a CodeableConcept (Observation.component.value as CodeableConcept) Observation.component.value.ofType(CodeableConcept)
component-value-quantity TU quantity The 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) Quantity. (Observation.component.value as Quantity) | (Observation.component.value as SampledData) Observation.component.value.ofType(Quantity)
component-value-reference reference Reference contained in valueReference. Observation.component.value.ofType(Reference)
( MolecularDefinition )
data-absent-reason TU token The reason why the expected value in the element Observation.value[x] is missing. Observation.dataAbsentReason
date TU date Obtained date/time. If the obtained element is a period, a date that falls in the period Clinically relevant time/time-period for observation Observation.effective Observation.effective.ofType(dateTime) | Observation.effective.ofType(Period) | Observation.effective.ofType(Timing) | Observation.effective.ofType(instant) 17 23 Resources
derived-from TU reference Related measurements the observation is made from Observation.derivedFrom
( Media GenomicStudy , MolecularDefinition , Observation , ImagingStudy , MolecularSequence ImagingSelection , QuestionnaireResponse , DocumentReference )
device TU reference The Device that generated the observation data. Observation.device
( Device , DeviceMetric )
encounter TU reference Encounter related to the observation Observation.encounter
( Encounter )
12 27 Resources
focus TU reference The focus of an observation when the focus is not the patient of record. Observation.focus
(Any)
has-member TU reference Related resource that belongs to the Observation group Observation.hasMember
( MolecularDefinition , Observation , MolecularSequence , QuestionnaireResponse )
identifier TU token The unique id for a particular observation Observation.identifier 30 59 Resources
interpretation token The interpretation of the observation type Observation.interpretation
method TU token The method used for the observation Observation.method
part-of TU reference Part of referenced event Observation.partOf
( GenomicStudy , Immunization , MedicationDispense , MedicationAdministration , Procedure , ImagingStudy , MedicationStatement )
patient TU reference The subject that the observation is about (if patient) Observation.subject.where(resolve() is Patient)
( Patient )
33 61 Resources
performer TU reference Who performed the observation Observation.performer
( Practitioner , Group , Organization , CareTeam , Patient , HealthcareService , PractitionerRole , RelatedPerson )
reference reference Observed body structure (reference) Observation.bodyStructure.reference
( BodyStructure )
specimen TU reference Specimen used for this observation Observation.specimen
( Specimen , Group )
status TU token The status of the observation Observation.status
subject TU reference The subject that the observation is about Observation.subject
( Practitioner , Group , Organization , BiologicallyDerivedProduct , NutritionProduct , Device , Medication , Patient , Procedure , Substance , Location )
value-concept TU token The value of the observation, if the value is a CodeableConcept (Observation.value as CodeableConcept) Observation.value.ofType(CodeableConcept)
value-date TU date The value of the observation, if the value is a date or period of time (Observation.value as dateTime) Observation.value.ofType(dateTime) | (Observation.value as Period) Observation.value.ofType(Period)
value-quantity TU quantity The value of the observation, if the value is a Quantity, or a SampledData (just search on the bounds of the values in sampled data) Quantity. (Observation.value as Quantity) | (Observation.value as SampledData) Observation.value.ofType(Quantity)
value-reference reference Reference contained in valueReference. Observation.value.ofType(Reference)
( MolecularDefinition )
value-string TU string The value of the observation, if the value is a string, and also searches in CodeableConcept.text string. (Observation.value as string) | (Observation.value as CodeableConcept).text Observation.value.ofType(string)