This page is part of the FHIR Specification (v1.6.0: STU 3 Ballot 4). The current version which supercedes this version is 5.0.0. For a full list of available versions, see the Directory of published versions . Page versions: R5 R4B R4 R3 R2
Orders and Observations Work Group | Maturity Level: 3 | Compartments: Device, Encounter, Patient, Practitioner, RelatedPerson |
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. It is the intent of the Orders and Observation Workgroup to align this resource with the workflow pattern for event resources.
Observations are a central element in healthcare, used to support diagnosis, monitor progress, determine baselines and patterns and even capture demographic characteristics. Most observations are simple name/value pair assertions with some metadata, but some observations group other observations together logically, or even are multi-component observations. Note that the DiagnosticReport resource provides a clinical or workflow context for a set of observations.
Uses for the Observation resource include:
The following core profiles for the Observation resource have been defined as well. If implementations use the Observation Resource, they SHALL conform to these profiles when expressing the profile-specific concepts as structured data:
In contrast to the Observation resource, the DiagnosticReport resource typically includes additional clinical context and some mix of atomic results, images, imaging reports, textual and coded interpretation, and formatted representations. Laboratory reports, pathology reports, and imaging reports should be represented using the DiagnosticReport resource. The Observation resource is referenced by the DiagnosticReport to provide the atomic results for a particular investigation.
The Observation resources should not be used to record diagnosis or clinical assessments about a patient or subject that are typically captured in the Condition resource or the ClinicalImpression resource. However, the Observation resource is often referenced by the Condition resource to provide specific subjective and objective data to support its assertions. There are other resources that can be considered "specializations" of the Observation resource and should be used for those specific contexts and use cases. They include AllergyIntolerance resource, FamilyMemberHistory resource, Procedure resource, and Questionnaire resource.
In some cases, such as when source data is coming from an HL7 v2 feed, a system may not have information that allows it to distinguish diagnosis, allergy and other "specialized" types of observations from lab, vital sign and other observation types intended to be conveyed with this resource. In those circumstances, such specialized observations may also appear using this resource.
This resource is referenced by ClinicalImpression, Condition, DiagnosticReport, Goal, Immunization, ImmunizationRecommendation, Procedure, QuestionnaireResponse and Sequence
Structure
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
Observation | I | DomainResource | Measurements and simple assertions If code is the same as a component code then the value element associated with the code SHALL NOT be present dataAbsentReason SHALL only be present if Observation.value[x] is not present | |
identifier | 0..* | Identifier | Unique Id for this particular observation | |
status | ?!Σ | 1..1 | code | registered | preliminary | final | amended + ObservationStatus (Required) |
category | 0..* | CodeableConcept | Classification of type of observation Observation Category Codes (Example) | |
code | Σ | 1..1 | CodeableConcept | Type of observation (code / type) LOINC Codes (Example) |
subject | Σ | 0..1 | Reference(Patient | Group | Device | Location) | Who and/or what this is about |
encounter | 0..1 | Reference(Encounter) | Healthcare event during which this observation is made | |
effective[x] | Σ | 0..1 | Clinically relevant time/time-period for observation | |
effectiveDateTime | dateTime | |||
effectivePeriod | Period | |||
issued | Σ | 0..1 | instant | Date/Time this was made available |
performer | Σ | 0..* | Reference(Practitioner | Organization | Patient | RelatedPerson) | Who is responsible for the observation |
value[x] | ΣI | 0..1 | Actual result | |
valueQuantity | Quantity | |||
valueCodeableConcept | CodeableConcept | |||
valueString | string | |||
valueRange | Range | |||
valueRatio | Ratio | |||
valueSampledData | SampledData | |||
valueAttachment | Attachment | |||
valueTime | time | |||
valueDateTime | dateTime | |||
valuePeriod | Period | |||
dataAbsentReason | I | 0..1 | CodeableConcept | Why the result is missing Observation Value Absent Reason (Extensible) |
interpretation | 0..1 | CodeableConcept | High, low, normal, etc. Observation Interpretation Codes (Extensible) | |
comment | 0..1 | string | Comments about result | |
bodySite | 0..1 | CodeableConcept | Observed body part SNOMED CT Body Structures (Example) | |
method | 0..1 | CodeableConcept | How it was done Observation Methods (Example) | |
specimen | 0..1 | Reference(Specimen) | Specimen used for this observation | |
device | 0..1 | Reference(Device | DeviceMetric) | (Measurement) Device | |
referenceRange | I | 0..* | BackboneElement | Provides guide for interpretation Must have at least a low or a high or text |
low | I | 0..1 | SimpleQuantity | Low Range, if relevant |
high | I | 0..1 | SimpleQuantity | High Range, if relevant |
meaning | 0..* | CodeableConcept | Reference range qualifier Observation Reference Range Meaning Codes (Example) | |
age | 0..1 | Range | Applicable age range, if relevant | |
text | 0..1 | string | Text based reference range in an observation | |
related | Σ | 0..* | BackboneElement | Resource related to this observation |
type | 0..1 | code | has-member | derived-from | sequel-to | replaces | qualified-by | interfered-by ObservationRelationshipType (Required) | |
target | 1..1 | Reference(Observation | QuestionnaireResponse | Sequence) | Resource that is related to this one | |
component | Σ | 0..* | BackboneElement | Component results |
code | Σ | 1..1 | CodeableConcept | Type of component observation (code / type) LOINC Codes (Example) |
value[x] | Σ | 0..1 | Actual component result | |
valueQuantity | Quantity | |||
valueCodeableConcept | CodeableConcept | |||
valueString | string | |||
valueRange | Range | |||
valueRatio | Ratio | |||
valueSampledData | SampledData | |||
valueAttachment | Attachment | |||
valueTime | time | |||
valueDateTime | dateTime | |||
valuePeriod | Period | |||
dataAbsentReason | I | 0..1 | CodeableConcept | Why the component result is missing Observation Value Absent Reason (Extensible) |
interpretation | 0..1 | CodeableConcept | High, low, normal, etc. Observation Interpretation Codes (Extensible) | |
referenceRange | 0..* | see referenceRange | Provides guide for interpretation of component result | |
Documentation for this format |
UML Diagram (Legend)
XML Template
<Observation xmlns="http://hl7.org/fhir"> <!-- from Resource: id, meta, implicitRules, and language --> <!-- from DomainResource: text, contained, extension, and modifierExtension --> <identifier><!-- 0..* Identifier Unique Id for this particular observation --></identifier> <status value="[code]"/><!-- 1..1 registered | preliminary | final | amended + --> <category><!-- 0..* CodeableConcept Classification of type of observation --></category> <code><!-- 1..1 CodeableConcept Type of observation (code / type) --></code> <subject><!-- 0..1 Reference(Patient|Group|Device|Location) Who and/or what this is about --></subject> <encounter><!-- 0..1 Reference(Encounter) Healthcare event during which this observation is made --></encounter> <effective[x]><!-- 0..1 dateTime|Period Clinically relevant time/time-period for observation --></effective[x]> <issued value="[instant]"/><!-- 0..1 Date/Time this was made available --> <performer><!-- 0..* Reference(Practitioner|Organization|Patient|RelatedPerson) Who is responsible for the observation --></performer> <value[x]><!-- 0..1 Quantity|CodeableConcept|string|Range|Ratio|SampledData| Attachment|time|dateTime|Period Actual result --></value[x]> <dataAbsentReason><!-- 0..1 CodeableConcept Why the result is missing --></dataAbsentReason> <interpretation><!-- 0..1 CodeableConcept High, low, normal, etc. --></interpretation> <comment value="[string]"/><!-- 0..1 Comments about result --> <bodySite><!-- 0..1 CodeableConcept Observed body part --></bodySite> <method><!-- 0..1 CodeableConcept How it was done --></method> <specimen><!-- 0..1 Reference(Specimen) Specimen used for this observation --></specimen> <device><!-- 0..1 Reference(Device|DeviceMetric) (Measurement) Device --></device> <referenceRange> <!-- 0..* Provides guide for interpretation --> <low><!-- 0..1 Quantity(SimpleQuantity) Low Range, if relevant --></low> <high><!-- 0..1 Quantity(SimpleQuantity) High Range, if relevant --></high> <meaning><!-- 0..* CodeableConcept Reference range qualifier --></meaning> <age><!-- 0..1 Range Applicable age range, if relevant --></age> <text value="[string]"/><!-- 0..1 Text based reference range in an observation --> </referenceRange> <related> <!-- 0..* Resource related to this observation --> <type value="[code]"/><!-- 0..1 has-member | derived-from | sequel-to | replaces | qualified-by | interfered-by --> <target><!-- 1..1 Reference(Observation|QuestionnaireResponse|Sequence) Resource that is related to this one --></target> </related> <component> <!-- 0..* Component results --> <code><!-- 1..1 CodeableConcept Type of component observation (code / type) --></code> <value[x]><!-- 0..1 Quantity|CodeableConcept|string|Range|Ratio|SampledData| Attachment|time|dateTime|Period Actual component result --></value[x]> <dataAbsentReason><!-- 0..1 CodeableConcept Why the component result is missing --></dataAbsentReason> <interpretation><!-- 0..1 CodeableConcept High, low, normal, etc. --></interpretation> <referenceRange><!-- 0..* Content as for Observation.referenceRange Provides guide for interpretation of component result --></referenceRange> </component> </Observation>
JSON Template
{ "resourceType" : "Observation", // from Resource: id, meta, implicitRules, and language // from DomainResource: text, contained, extension, and modifierExtension "identifier" : [{ Identifier }], // Unique Id for this particular observation "status" : "<code>", // R! registered | preliminary | final | amended + "category" : [{ CodeableConcept }], // Classification of type of observation "code" : { CodeableConcept }, // R! Type of observation (code / type) "subject" : { Reference(Patient|Group|Device|Location) }, // Who and/or what this is about "encounter" : { Reference(Encounter) }, // Healthcare event during which this observation is made // effective[x]: Clinically relevant time/time-period for observation. One of these 2: "effectiveDateTime" : "<dateTime>", "effectivePeriod" : { Period }, "issued" : "<instant>", // Date/Time this was made available "performer" : [{ Reference(Practitioner|Organization|Patient|RelatedPerson) }], // Who is responsible for the observation // value[x]: Actual result. One of these 10: "valueQuantity" : { Quantity }, "valueCodeableConcept" : { CodeableConcept }, "valueString" : "<string>", "valueRange" : { Range }, "valueRatio" : { Ratio }, "valueSampledData" : { SampledData }, "valueAttachment" : { Attachment }, "valueTime" : "<time>", "valueDateTime" : "<dateTime>", "valuePeriod" : { Period }, "dataAbsentReason" : { CodeableConcept }, // C? Why the result is missing "interpretation" : { CodeableConcept }, // High, low, normal, etc. "comment" : "<string>", // Comments about result "bodySite" : { CodeableConcept }, // Observed body part "method" : { CodeableConcept }, // How it was done "specimen" : { Reference(Specimen) }, // Specimen used for this observation "device" : { Reference(Device|DeviceMetric) }, // (Measurement) Device "referenceRange" : [{ // Provides guide for interpretation "low" : { Quantity(SimpleQuantity) }, // C? Low Range, if relevant "high" : { Quantity(SimpleQuantity) }, // C? High Range, if relevant "meaning" : [{ CodeableConcept }], // Reference range qualifier "age" : { Range }, // Applicable age range, if relevant "text" : "<string>" // Text based reference range in an observation }], "related" : [{ // Resource related to this observation "type" : "<code>", // has-member | derived-from | sequel-to | replaces | qualified-by | interfered-by "target" : { Reference(Observation|QuestionnaireResponse|Sequence) } // R! Resource that is related to this one }], "component" : [{ // Component results "code" : { CodeableConcept }, // R! Type of component observation (code / type) // value[x]: Actual component result. One of these 10: "valueQuantity" : { Quantity }, "valueCodeableConcept" : { CodeableConcept }, "valueString" : "<string>", "valueRange" : { Range }, "valueRatio" : { Ratio }, "valueSampledData" : { SampledData }, "valueAttachment" : { Attachment }, "valueTime" : "<time>", "valueDateTime" : "<dateTime>", "valuePeriod" : { Period }, "dataAbsentReason" : { CodeableConcept }, // C? Why the component result is missing "interpretation" : { CodeableConcept }, // High, low, normal, etc. "referenceRange" : [{ Content as for Observation.referenceRange }] // Provides guide for interpretation of component result }] }
Turtle Template
@prefix fhir: <http://hl7.org/fhir/> . [ a fhir:Observation; fhir:nodeRole fhir:treeRoot; # if this is the parser root # from Resource: .id, .meta, .implicitRules, and .language # from DomainResource: .text, .contained, .extension, and .modifierExtension fhir:Observation.identifier [ Identifier ], ... ; # 0..* Unique Id for this particular observation fhir:Observation.status [ code ]; # 1..1 registered | preliminary | final | amended + fhir:Observation.category [ CodeableConcept ], ... ; # 0..* Classification of type of observation fhir:Observation.code [ CodeableConcept ]; # 1..1 Type of observation (code / type) fhir:Observation.subject [ Reference(Patient|Group|Device|Location) ]; # 0..1 Who and/or what this is about fhir:Observation.encounter [ Reference(Encounter) ]; # 0..1 Healthcare event during which this observation is made # Observation.effective[x] : 0..1 Clinically relevant time/time-period for observation. One of these 2 fhir:Observation.effectiveDateTime [ dateTime ] fhir:Observation.effectivePeriod [ Period ] fhir:Observation.issued [ instant ]; # 0..1 Date/Time this was made available fhir:Observation.performer [ Reference(Practitioner|Organization|Patient|RelatedPerson) ], ... ; # 0..* Who is responsible for the observation # Observation.value[x] : 0..1 Actual result. One of these 10 fhir:Observation.valueQuantity [ Quantity ] fhir:Observation.valueCodeableConcept [ CodeableConcept ] fhir:Observation.valueString [ string ] fhir:Observation.valueRange [ Range ] fhir:Observation.valueRatio [ Ratio ] fhir:Observation.valueSampledData [ SampledData ] fhir:Observation.valueAttachment [ Attachment ] fhir:Observation.valueTime [ time ] fhir:Observation.valueDateTime [ dateTime ] fhir:Observation.valuePeriod [ Period ] fhir:Observation.dataAbsentReason [ CodeableConcept ]; # 0..1 Why the result is missing fhir:Observation.interpretation [ CodeableConcept ]; # 0..1 High, low, normal, etc. fhir:Observation.comment [ string ]; # 0..1 Comments about result fhir:Observation.bodySite [ CodeableConcept ]; # 0..1 Observed body part fhir:Observation.method [ CodeableConcept ]; # 0..1 How it was done fhir:Observation.specimen [ Reference(Specimen) ]; # 0..1 Specimen used for this observation fhir:Observation.device [ Reference(Device|DeviceMetric) ]; # 0..1 (Measurement) Device fhir:Observation.referenceRange [ # 0..* Provides guide for interpretation fhir:Observation.referenceRange.low [ Quantity(SimpleQuantity) ]; # 0..1 Low Range, if relevant fhir:Observation.referenceRange.high [ Quantity(SimpleQuantity) ]; # 0..1 High Range, if relevant fhir:Observation.referenceRange.meaning [ CodeableConcept ], ... ; # 0..* Reference range qualifier fhir:Observation.referenceRange.age [ Range ]; # 0..1 Applicable age range, if relevant fhir:Observation.referenceRange.text [ string ]; # 0..1 Text based reference range in an observation ], ...; fhir:Observation.related [ # 0..* Resource related to this observation fhir:Observation.related.type [ code ]; # 0..1 has-member | derived-from | sequel-to | replaces | qualified-by | interfered-by fhir:Observation.related.target [ Reference(Observation|QuestionnaireResponse|Sequence) ]; # 1..1 Resource that is related to this one ], ...; fhir:Observation.component [ # 0..* Component results fhir:Observation.component.code [ CodeableConcept ]; # 1..1 Type of component observation (code / type) # Observation.component.value[x] : 0..1 Actual component result. One of these 10 fhir:Observation.component.valueQuantity [ Quantity ] fhir:Observation.component.valueCodeableConcept [ CodeableConcept ] fhir:Observation.component.valueString [ string ] fhir:Observation.component.valueRange [ Range ] fhir:Observation.component.valueRatio [ Ratio ] fhir:Observation.component.valueSampledData [ SampledData ] fhir:Observation.component.valueAttachment [ Attachment ] fhir:Observation.component.valueTime [ time ] fhir:Observation.component.valueDateTime [ dateTime ] fhir:Observation.component.valuePeriod [ Period ] fhir:Observation.component.dataAbsentReason [ CodeableConcept ]; # 0..1 Why the component result is missing fhir:Observation.component.interpretation [ CodeableConcept ]; # 0..1 High, low, normal, etc. fhir:Observation.component.referenceRange [ See Observation.referenceRange ], ... ; # 0..* Provides guide for interpretation of component result ], ...; ]
Changes since DSTU2
Observation | |
Observation.category | Max Cardinality changed from 1 to * |
Observation.comment | Renamed from comments to comment |
Observation.referenceRange.meaning | Max Cardinality changed from 1 to * |
Observation.related.target | Add Reference(Sequence) |
Observation.component.interpretation | added |
See the Full Difference for further information
Structure
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
Observation | I | DomainResource | Measurements and simple assertions If code is the same as a component code then the value element associated with the code SHALL NOT be present dataAbsentReason SHALL only be present if Observation.value[x] is not present | |
identifier | 0..* | Identifier | Unique Id for this particular observation | |
status | ?!Σ | 1..1 | code | registered | preliminary | final | amended + ObservationStatus (Required) |
category | 0..* | CodeableConcept | Classification of type of observation Observation Category Codes (Example) | |
code | Σ | 1..1 | CodeableConcept | Type of observation (code / type) LOINC Codes (Example) |
subject | Σ | 0..1 | Reference(Patient | Group | Device | Location) | Who and/or what this is about |
encounter | 0..1 | Reference(Encounter) | Healthcare event during which this observation is made | |
effective[x] | Σ | 0..1 | Clinically relevant time/time-period for observation | |
effectiveDateTime | dateTime | |||
effectivePeriod | Period | |||
issued | Σ | 0..1 | instant | Date/Time this was made available |
performer | Σ | 0..* | Reference(Practitioner | Organization | Patient | RelatedPerson) | Who is responsible for the observation |
value[x] | ΣI | 0..1 | Actual result | |
valueQuantity | Quantity | |||
valueCodeableConcept | CodeableConcept | |||
valueString | string | |||
valueRange | Range | |||
valueRatio | Ratio | |||
valueSampledData | SampledData | |||
valueAttachment | Attachment | |||
valueTime | time | |||
valueDateTime | dateTime | |||
valuePeriod | Period | |||
dataAbsentReason | I | 0..1 | CodeableConcept | Why the result is missing Observation Value Absent Reason (Extensible) |
interpretation | 0..1 | CodeableConcept | High, low, normal, etc. Observation Interpretation Codes (Extensible) | |
comment | 0..1 | string | Comments about result | |
bodySite | 0..1 | CodeableConcept | Observed body part SNOMED CT Body Structures (Example) | |
method | 0..1 | CodeableConcept | How it was done Observation Methods (Example) | |
specimen | 0..1 | Reference(Specimen) | Specimen used for this observation | |
device | 0..1 | Reference(Device | DeviceMetric) | (Measurement) Device | |
referenceRange | I | 0..* | BackboneElement | Provides guide for interpretation Must have at least a low or a high or text |
low | I | 0..1 | SimpleQuantity | Low Range, if relevant |
high | I | 0..1 | SimpleQuantity | High Range, if relevant |
meaning | 0..* | CodeableConcept | Reference range qualifier Observation Reference Range Meaning Codes (Example) | |
age | 0..1 | Range | Applicable age range, if relevant | |
text | 0..1 | string | Text based reference range in an observation | |
related | Σ | 0..* | BackboneElement | Resource related to this observation |
type | 0..1 | code | has-member | derived-from | sequel-to | replaces | qualified-by | interfered-by ObservationRelationshipType (Required) | |
target | 1..1 | Reference(Observation | QuestionnaireResponse | Sequence) | Resource that is related to this one | |
component | Σ | 0..* | BackboneElement | Component results |
code | Σ | 1..1 | CodeableConcept | Type of component observation (code / type) LOINC Codes (Example) |
value[x] | Σ | 0..1 | Actual component result | |
valueQuantity | Quantity | |||
valueCodeableConcept | CodeableConcept | |||
valueString | string | |||
valueRange | Range | |||
valueRatio | Ratio | |||
valueSampledData | SampledData | |||
valueAttachment | Attachment | |||
valueTime | time | |||
valueDateTime | dateTime | |||
valuePeriod | Period | |||
dataAbsentReason | I | 0..1 | CodeableConcept | Why the component result is missing Observation Value Absent Reason (Extensible) |
interpretation | 0..1 | CodeableConcept | High, low, normal, etc. Observation Interpretation Codes (Extensible) | |
referenceRange | 0..* | see referenceRange | Provides guide for interpretation of component result | |
Documentation for this format |
XML Template
<Observation xmlns="http://hl7.org/fhir"> <!-- from Resource: id, meta, implicitRules, and language --> <!-- from DomainResource: text, contained, extension, and modifierExtension --> <identifier><!-- 0..* Identifier Unique Id for this particular observation --></identifier> <status value="[code]"/><!-- 1..1 registered | preliminary | final | amended + --> <category><!-- 0..* CodeableConcept Classification of type of observation --></category> <code><!-- 1..1 CodeableConcept Type of observation (code / type) --></code> <subject><!-- 0..1 Reference(Patient|Group|Device|Location) Who and/or what this is about --></subject> <encounter><!-- 0..1 Reference(Encounter) Healthcare event during which this observation is made --></encounter> <effective[x]><!-- 0..1 dateTime|Period Clinically relevant time/time-period for observation --></effective[x]> <issued value="[instant]"/><!-- 0..1 Date/Time this was made available --> <performer><!-- 0..* Reference(Practitioner|Organization|Patient|RelatedPerson) Who is responsible for the observation --></performer> <value[x]><!-- 0..1 Quantity|CodeableConcept|string|Range|Ratio|SampledData| Attachment|time|dateTime|Period Actual result --></value[x]> <dataAbsentReason><!-- 0..1 CodeableConcept Why the result is missing --></dataAbsentReason> <interpretation><!-- 0..1 CodeableConcept High, low, normal, etc. --></interpretation> <comment value="[string]"/><!-- 0..1 Comments about result --> <bodySite><!-- 0..1 CodeableConcept Observed body part --></bodySite> <method><!-- 0..1 CodeableConcept How it was done --></method> <specimen><!-- 0..1 Reference(Specimen) Specimen used for this observation --></specimen> <device><!-- 0..1 Reference(Device|DeviceMetric) (Measurement) Device --></device> <referenceRange> <!-- 0..* Provides guide for interpretation --> <low><!-- 0..1 Quantity(SimpleQuantity) Low Range, if relevant --></low> <high><!-- 0..1 Quantity(SimpleQuantity) High Range, if relevant --></high> <meaning><!-- 0..* CodeableConcept Reference range qualifier --></meaning> <age><!-- 0..1 Range Applicable age range, if relevant --></age> <text value="[string]"/><!-- 0..1 Text based reference range in an observation --> </referenceRange> <related> <!-- 0..* Resource related to this observation --> <type value="[code]"/><!-- 0..1 has-member | derived-from | sequel-to | replaces | qualified-by | interfered-by --> <target><!-- 1..1 Reference(Observation|QuestionnaireResponse|Sequence) Resource that is related to this one --></target> </related> <component> <!-- 0..* Component results --> <code><!-- 1..1 CodeableConcept Type of component observation (code / type) --></code> <value[x]><!-- 0..1 Quantity|CodeableConcept|string|Range|Ratio|SampledData| Attachment|time|dateTime|Period Actual component result --></value[x]> <dataAbsentReason><!-- 0..1 CodeableConcept Why the component result is missing --></dataAbsentReason> <interpretation><!-- 0..1 CodeableConcept High, low, normal, etc. --></interpretation> <referenceRange><!-- 0..* Content as for Observation.referenceRange Provides guide for interpretation of component result --></referenceRange> </component> </Observation>
JSON Template
{ "resourceType" : "Observation", // from Resource: id, meta, implicitRules, and language // from DomainResource: text, contained, extension, and modifierExtension "identifier" : [{ Identifier }], // Unique Id for this particular observation "status" : "<code>", // R! registered | preliminary | final | amended + "category" : [{ CodeableConcept }], // Classification of type of observation "code" : { CodeableConcept }, // R! Type of observation (code / type) "subject" : { Reference(Patient|Group|Device|Location) }, // Who and/or what this is about "encounter" : { Reference(Encounter) }, // Healthcare event during which this observation is made // effective[x]: Clinically relevant time/time-period for observation. One of these 2: "effectiveDateTime" : "<dateTime>", "effectivePeriod" : { Period }, "issued" : "<instant>", // Date/Time this was made available "performer" : [{ Reference(Practitioner|Organization|Patient|RelatedPerson) }], // Who is responsible for the observation // value[x]: Actual result. One of these 10: "valueQuantity" : { Quantity }, "valueCodeableConcept" : { CodeableConcept }, "valueString" : "<string>", "valueRange" : { Range }, "valueRatio" : { Ratio }, "valueSampledData" : { SampledData }, "valueAttachment" : { Attachment }, "valueTime" : "<time>", "valueDateTime" : "<dateTime>", "valuePeriod" : { Period }, "dataAbsentReason" : { CodeableConcept }, // C? Why the result is missing "interpretation" : { CodeableConcept }, // High, low, normal, etc. "comment" : "<string>", // Comments about result "bodySite" : { CodeableConcept }, // Observed body part "method" : { CodeableConcept }, // How it was done "specimen" : { Reference(Specimen) }, // Specimen used for this observation "device" : { Reference(Device|DeviceMetric) }, // (Measurement) Device "referenceRange" : [{ // Provides guide for interpretation "low" : { Quantity(SimpleQuantity) }, // C? Low Range, if relevant "high" : { Quantity(SimpleQuantity) }, // C? High Range, if relevant "meaning" : [{ CodeableConcept }], // Reference range qualifier "age" : { Range }, // Applicable age range, if relevant "text" : "<string>" // Text based reference range in an observation }], "related" : [{ // Resource related to this observation "type" : "<code>", // has-member | derived-from | sequel-to | replaces | qualified-by | interfered-by "target" : { Reference(Observation|QuestionnaireResponse|Sequence) } // R! Resource that is related to this one }], "component" : [{ // Component results "code" : { CodeableConcept }, // R! Type of component observation (code / type) // value[x]: Actual component result. One of these 10: "valueQuantity" : { Quantity }, "valueCodeableConcept" : { CodeableConcept }, "valueString" : "<string>", "valueRange" : { Range }, "valueRatio" : { Ratio }, "valueSampledData" : { SampledData }, "valueAttachment" : { Attachment }, "valueTime" : "<time>", "valueDateTime" : "<dateTime>", "valuePeriod" : { Period }, "dataAbsentReason" : { CodeableConcept }, // C? Why the component result is missing "interpretation" : { CodeableConcept }, // High, low, normal, etc. "referenceRange" : [{ Content as for Observation.referenceRange }] // Provides guide for interpretation of component result }] }
Turtle Template
@prefix fhir: <http://hl7.org/fhir/> . [ a fhir:Observation; fhir:nodeRole fhir:treeRoot; # if this is the parser root # from Resource: .id, .meta, .implicitRules, and .language # from DomainResource: .text, .contained, .extension, and .modifierExtension fhir:Observation.identifier [ Identifier ], ... ; # 0..* Unique Id for this particular observation fhir:Observation.status [ code ]; # 1..1 registered | preliminary | final | amended + fhir:Observation.category [ CodeableConcept ], ... ; # 0..* Classification of type of observation fhir:Observation.code [ CodeableConcept ]; # 1..1 Type of observation (code / type) fhir:Observation.subject [ Reference(Patient|Group|Device|Location) ]; # 0..1 Who and/or what this is about fhir:Observation.encounter [ Reference(Encounter) ]; # 0..1 Healthcare event during which this observation is made # Observation.effective[x] : 0..1 Clinically relevant time/time-period for observation. One of these 2 fhir:Observation.effectiveDateTime [ dateTime ] fhir:Observation.effectivePeriod [ Period ] fhir:Observation.issued [ instant ]; # 0..1 Date/Time this was made available fhir:Observation.performer [ Reference(Practitioner|Organization|Patient|RelatedPerson) ], ... ; # 0..* Who is responsible for the observation # Observation.value[x] : 0..1 Actual result. One of these 10 fhir:Observation.valueQuantity [ Quantity ] fhir:Observation.valueCodeableConcept [ CodeableConcept ] fhir:Observation.valueString [ string ] fhir:Observation.valueRange [ Range ] fhir:Observation.valueRatio [ Ratio ] fhir:Observation.valueSampledData [ SampledData ] fhir:Observation.valueAttachment [ Attachment ] fhir:Observation.valueTime [ time ] fhir:Observation.valueDateTime [ dateTime ] fhir:Observation.valuePeriod [ Period ] fhir:Observation.dataAbsentReason [ CodeableConcept ]; # 0..1 Why the result is missing fhir:Observation.interpretation [ CodeableConcept ]; # 0..1 High, low, normal, etc. fhir:Observation.comment [ string ]; # 0..1 Comments about result fhir:Observation.bodySite [ CodeableConcept ]; # 0..1 Observed body part fhir:Observation.method [ CodeableConcept ]; # 0..1 How it was done fhir:Observation.specimen [ Reference(Specimen) ]; # 0..1 Specimen used for this observation fhir:Observation.device [ Reference(Device|DeviceMetric) ]; # 0..1 (Measurement) Device fhir:Observation.referenceRange [ # 0..* Provides guide for interpretation fhir:Observation.referenceRange.low [ Quantity(SimpleQuantity) ]; # 0..1 Low Range, if relevant fhir:Observation.referenceRange.high [ Quantity(SimpleQuantity) ]; # 0..1 High Range, if relevant fhir:Observation.referenceRange.meaning [ CodeableConcept ], ... ; # 0..* Reference range qualifier fhir:Observation.referenceRange.age [ Range ]; # 0..1 Applicable age range, if relevant fhir:Observation.referenceRange.text [ string ]; # 0..1 Text based reference range in an observation ], ...; fhir:Observation.related [ # 0..* Resource related to this observation fhir:Observation.related.type [ code ]; # 0..1 has-member | derived-from | sequel-to | replaces | qualified-by | interfered-by fhir:Observation.related.target [ Reference(Observation|QuestionnaireResponse|Sequence) ]; # 1..1 Resource that is related to this one ], ...; fhir:Observation.component [ # 0..* Component results fhir:Observation.component.code [ CodeableConcept ]; # 1..1 Type of component observation (code / type) # Observation.component.value[x] : 0..1 Actual component result. One of these 10 fhir:Observation.component.valueQuantity [ Quantity ] fhir:Observation.component.valueCodeableConcept [ CodeableConcept ] fhir:Observation.component.valueString [ string ] fhir:Observation.component.valueRange [ Range ] fhir:Observation.component.valueRatio [ Ratio ] fhir:Observation.component.valueSampledData [ SampledData ] fhir:Observation.component.valueAttachment [ Attachment ] fhir:Observation.component.valueTime [ time ] fhir:Observation.component.valueDateTime [ dateTime ] fhir:Observation.component.valuePeriod [ Period ] fhir:Observation.component.dataAbsentReason [ CodeableConcept ]; # 0..1 Why the component result is missing fhir:Observation.component.interpretation [ CodeableConcept ]; # 0..1 High, low, normal, etc. fhir:Observation.component.referenceRange [ See Observation.referenceRange ], ... ; # 0..* Provides guide for interpretation of component result ], ...; ]
Changes since DSTU2
Observation | |
Observation.category | Max Cardinality changed from 1 to * |
Observation.comment | Renamed from comments to comment |
Observation.referenceRange.meaning | Max Cardinality changed from 1 to * |
Observation.related.target | Add Reference(Sequence) |
Observation.component.interpretation | added |
See the Full Difference for further information
Alternate definitions: Master Definition (XML, JSON), XML Schema/Schematron (for ) + JSON Schema, ShEx (for Turtle)
Path | Definition | Type | Reference |
---|---|---|---|
Observation.status | Codes providing the status of an observation. | Required | ObservationStatus |
Observation.category | Codes for high level observation categories . | Example | Observation Category Codes |
Observation.code Observation.component.code | Codes identifying names of simple observations. | Example | LOINC Codes |
Observation.dataAbsentReason Observation.component.dataAbsentReason | Codes specifying why the result (Observation.value[x]) is missing. | Extensible | Observation Value Absent Reason |
Observation.interpretation Observation.component.interpretation | Codes identifying interpretations of observations. | Extensible | Observation Interpretation Codes |
Observation.bodySite | Codes describing anatomical locations. May include laterality. | Example | SNOMED CT Body Structures |
Observation.method | Methods for simple observations. | Example | Observation Methods |
Observation.referenceRange.meaning | Code for the meaning of a reference range. | Example | Observation Reference Range Meaning Codes |
Observation.related.type | Codes specifying how two observations are related. | Required | ObservationRelationshipType |
At its simplest, a resource instances can consist of only a code and a value, and status flag. The relevance of other properties will vary based on the type of observation.
Profiles will be created to provide guidance on capturing certain types of simple observations. This resource focuses on the level of detail captured by most systems. However, any "simple" observation can easily be broken into numerous components and sub-components to provide additional information relevant in certain circumstances. As with other resources, extensions can be used to introduce this additional complexity.
Many observations have important relationships to other observations and need to be assembled in groups together (traditionally referred to as "panels" or " batteries" by laboratories) that can be used to represent relationships between the individual data items. Typically this is done by referencing the individual observations in the DiagnosticReport resource where the DiagnosticReport.code names the panel and serves as the grouping element. Several examples demonstrate observation grouping using DiagnosticReport as the grouper.
The Observation resource has two structures for grouping observations which allow for grouping and even complex nesting of results. In addition to representing a single observation. the Observation resource can group other observations.
First, several observations can be linked together using the Observation.related element with a defined relationship type. This approach should be used when the attributes within the resource for each observation are different and/or each panel result exists or needs to be processed as independent FHIR resource (i.e they "stand alone"). The Observation.related element defines the grouping of observations into a panel/battery in this case. The Observation.code names the panel but typically does not have its own Observation.value and the set of member observations for a panel or battery are listed in the Observation.related element. This structure also permits further nesting of groups (panel of panels). For example, a bacterial cultures with susceptibility testing can use this structure for grouping, because a panel for susceptibility tests (one for each bacterium isolated) would be linked as panel to the observation about each organism isolated. The example of a complex micro isolate and sensitivities report demonstrates this.
Secondly Observations can be grouped using the Observation.component element. Observation.component SHOULD NOT be used to group results that can be reasonably interpreted independently. If the panel members share the same attributes and are not separable observations (i.e - they don't "stand alone") or don't need to be processed independently, then the Observation.component element may be used to group them within a single resource. As is true when using Observation.related above, the observation for a panel that carries the component typically does not have its own Observation.value. For example systolic and diastolic blood pressure are represented as single Observation - Blood Pressure Panel because the two are almost always produced together. The GFR example demonstrates another example grouping of observations using Observation.component to tie together the race based estimates of glomerular filtration based upon a serum creatinine measurement. Grouping via components should be used judiciously because what is available to group can vary widely with the source and the idea of what to group together is often highly contextual and based upon the end user's point of view.
Assessment tools such as an Apgar or Glasgow score may be represented with both an overall value and related observations or answers from which a final score or value is derived and may be grouped as a set of observations using the Observation.related structure. For example, the Glasgow coma score example is structured like a panel with 3 component observations that measure the status of a given aspect of the patients neurological status. These are added together to get Glasgow Coma Score value.
"valueCodeableConcept": { "coding": [ { "system": "http://snomed.info/sct", "code": "260385009", "display": "Negative" }, { "system": "urn:oid:2.16.840.1.113883.3.72.5.24", "code": "NEG", "display": "Negative" } ], "text": "Negative for Chlamydia Trachomatis rRNA" }Using text only, the Observation.valueCodeableConcept the would be:
"valueCodeableConcept": { "text": "Negative for Chlamydia Trachomatis rRNA" }
"valueQuantity": { "value": 2.0, "comparator" : "<", "unit": "mmol/l", "system": "http://unitsofmeasure.org", "code": "mmol/L" }If the value was "NaN" (i.e. an error) the Observation.valueCodeableConcept would be absent and Observation.dataAbsentReason would be:
"dataAbsentReason": { "coding": [ { "system": "http://hl7.org/fhir/data-absent-reason", "code": "NaN", "display": "Not a Number" }
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 commonly observations will only have one generic reference range. Reference ranges may be useful for lab tests and other measures like systolic blood pressure, but will have little relevance for something like "pregnancy status". Systems MAY choose to restrict to only supplying the relevant reference range based on knowledge about the patient (e.g. specific to the patient's age, gender, weight and other factors), but this may not be possible or appropriate. Whenever more than one reference range is supplied, the differences between them SHOULD be provided in the reference range and/or age properties.
If a measurement or test could not be completed (for example if the specimen is unsatisfactory or the provider cancelled the order), then the status value should be updated to "canceled" and the specific details given - preferably as coded values in the dataAbsentReason or valueCodeableConcept element. Additional information may provided in comments as well. The specimen reject example demonstrates this using a coded value for unsatisfactory specimen in dataAbsentReason.
Search parameters for this resource. The common parameters also apply. See Searching for more information about searching in REST, messaging, and services.
Name | Type | Description | Paths |
category | token | The classification of the type of observation | Observation.category |
code | token | The code of the observation type or component type | Observation.code, Observation.component.code |
code-value-[x] | composite | Code and value parameter pair | |
data-absent-reason | token | The reason why the expected value in the element Observation.value[x] is missing. | Observation.dataAbsentReason, Observation.component.dataAbsentReason |
date | date | Obtained date/time. If the obtained element is a period, a date that falls in the period | Observation.effective[x] |
device | reference | The Device that generated the observation data. | Observation.device (Device, DeviceMetric) |
encounter | reference | Healthcare event related to the observation | Observation.encounter (Encounter) |
identifier | token | The unique id for a particular observation | Observation.identifier |
method | token | The method used for the observation | Observation.method |
patient | reference | The subject that the observation is about (if patient) | Observation.subject (Patient) |
performer | reference | Who performed the observation | Observation.performer (Practitioner, Organization, Patient, RelatedPerson) |
related | composite | Related Observations - search on related-type and related-target together | |
related-target | reference | Resource that is related to this one | Observation.related.target (Observation, Sequence, QuestionnaireResponse) |
related-type | token | has-member | derived-from | sequel-to | replaces | qualified-by | interfered-by | Observation.related.type |
specimen | reference | Specimen used for this observation | Observation.specimen (Specimen) |
status | token | The status of the observation | Observation.status |
subject | reference | The subject that the observation is about | Observation.subject (Group, Device, Patient, Location) |
value-concept | token | The value or component value of the observation, if the value is a CodeableConcept | Observation.valueCodeableConcept, Observation.component.valueCodeableConcept |
value-date | date | The value of the observation, if the value is a date or period of time | Observation.valueDateTime, Observation.valuePeriod |
value-quantity | 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) | Observation.valueQuantity, Observation.component.valueQuantity |
value-string | string | The value or component value of the observation, if the value is a string, and also searches in CodeableConcept.text | Observation.valueString, Observation.component.valueString |