This page is part of the FHIR Specification (v4.6.0: R5 Draft Ballot - see ballot notes). 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: N | Normative (from v4.0.0) | Security Category: Patient | Compartments: Device, Encounter, 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, as well as capture results of tests performed on products and substances. 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 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 core profiles for the Observation resource have been defined as well. If implementations use this Resource when expressing the profile-specific concepts as structured data, they SHALL conform to the following profiles:
Profile | Description |
---|---|
Vital signs | The FHIR Vital Signs profile sets minimum expectations for the Observation 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, MedicationUsage 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 resource. The Observation resource is often referenced by the Condition resource to provide specific subjective and objective data to support its assertions. 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 MedicationUsage, 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 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
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 resource. The Observation resource should not be used to record clinical diagnosis about a patient or subject as discussed above.
This resource is referenced by AdverseEvent, ChargeItem, Condition, DeviceUsage, DiagnosticReport, Goal, Immunization, MedicationUsage, MolecularSequence, NutritionIntake, itself, Procedure and QuestionnaireResponse.
This resource implements the Event pattern.
Structure
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
Observation | N | DomainResource | Measurements and simple assertions + Rule: dataAbsentReason SHALL only be present if Observation.value[x] is not present + Rule: If Observation.code is the same as an Observation.component.code then the value element associated with the code SHALL NOT be present Elements defined in Ancestors: id, meta, implicitRules, language, text, contained, extension, modifierExtension | |
identifier | Σ | 0..* | Identifier | Business Identifier for observation |
instantiates[x] | Σ | 0..1 | Instantiates FHIR ObservationDefinition | |
instantiatesCanonical | canonical(ObservationDefinition) | |||
instantiatesReference | Reference(ObservationDefinition) | |||
basedOn | Σ | 0..* | Reference(CarePlan | DeviceRequest | ImmunizationRecommendation | MedicationRequest | NutritionOrder | ServiceRequest) | Fulfills plan, proposal or order |
partOf | Σ | 0..* | Reference(MedicationAdministration | MedicationDispense | MedicationUsage | Procedure | Immunization | ImagingStudy) | Part of referenced event |
status | ?!Σ | 1..1 | code | registered | preliminary | final | amended + ObservationStatus (Required) |
category | 0..* | CodeableConcept | Classification of type of observation Observation Category Codes (Preferred) | |
code | Σ | 1..1 | CodeableConcept | Type of observation (code / type) LOINC Codes (Example) |
subject | Σ | 0..1 | Reference(Patient | Group | Device | Location | Organization | Procedure | Practitioner | Medication | Substance) | 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 | Σ | 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 | |||
effectiveTiming | Timing | |||
effectiveInstant | instant | |||
issued | Σ | 0..1 | instant | Date/Time this version was made available |
performer | Σ | 0..* | Reference(Practitioner | PractitionerRole | Organization | CareTeam | Patient | RelatedPerson) | Who is responsible for the observation |
value[x] | ΣI | 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 | |||
dataAbsentReason | I | 0..1 | CodeableConcept | Why the result is missing DataAbsentReason (Extensible) |
interpretation | 0..* | CodeableConcept | High, low, normal, etc. Observation Interpretation Codes (Extensible) | |
note | 0..* | Annotation | Comments about the observation | |
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 + Rule: 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 |
type | 0..1 | CodeableConcept | Reference range qualifier Observation Reference Range Meaning Codes (Preferred) | |
appliesTo | 0..* | CodeableConcept | Reference range population Observation Reference Range Applies To Codes (Example) | |
age | 0..1 | Range | Applicable age range, if relevant | |
text | 0..1 | string | Text based reference range in an observation | |
hasMember | Σ | 0..* | Reference(Observation | QuestionnaireResponse | MolecularSequence) | Related resource that belongs to the Observation group |
derivedFrom | Σ | 0..* | Reference(DocumentReference | ImagingStudy | QuestionnaireResponse | Observation | MolecularSequence) | Related measurements the observation is made from |
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 | |||
valueBoolean | boolean | |||
valueInteger | integer | |||
valueRange | Range | |||
valueRatio | Ratio | |||
valueSampledData | SampledData | |||
valueTime | time | |||
valueDateTime | dateTime | |||
valuePeriod | Period | |||
valueAttachment | Attachment | |||
dataAbsentReason | I | 0..1 | CodeableConcept | Why the component result is missing DataAbsentReason (Extensible) |
interpretation | 0..* | 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 Business Identifier for observation --></identifier> <instantiates[x]><!-- 0..1 canonical(ObservationDefinition)|Reference( ObservationDefinition) Instantiates FHIR ObservationDefinition --></instantiates[x]> <basedOn><!-- 0..* Reference(CarePlan|DeviceRequest|ImmunizationRecommendation| MedicationRequest|NutritionOrder|ServiceRequest) Fulfills plan, proposal or order --></basedOn> <partOf><!-- 0..* Reference(ImagingStudy|Immunization|MedicationAdministration| MedicationDispense|MedicationUsage|Procedure) Part of referenced event --></partOf> <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(Device|Group|Location|Medication|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> <encounter><!-- 0..1 Reference(Encounter) Healthcare event during which this observation is made --></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><!-- 0..* Reference(CareTeam|Organization|Patient|Practitioner| PractitionerRole|RelatedPerson) Who is responsible for the observation --></performer> <value[x]><!-- 0..1 Quantity|CodeableConcept|string|boolean|integer|Range|Ratio| SampledData|time|dateTime|Period|Attachment Actual result --></value[x]> <dataAbsentReason><!-- 0..1 CodeableConcept Why the result is missing --></dataAbsentReason> <interpretation><!-- 0..* CodeableConcept High, low, normal, etc. --></interpretation> <note><!-- 0..* Annotation Comments about the observation --></note> <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> <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="[string]"/><!-- 0..1 Text based reference range in an observation --> </referenceRange> <hasMember><!-- 0..* Reference(MolecularSequence|Observation| QuestionnaireResponse) Related resource that belongs to the Observation group --></hasMember> <derivedFrom><!-- 0..* Reference(DocumentReference|ImagingStudy| MolecularSequence|Observation|QuestionnaireResponse) Related measurements the observation is made from --></derivedFrom> <component> <!-- 0..* Component results --> <code><!-- 1..1 CodeableConcept Type of component observation (code / type) --></code> <value[x]><!-- 0..1 Quantity|CodeableConcept|string|boolean|integer|Range| Ratio|SampledData|time|dateTime|Period|Attachment Actual component result --></value[x]> <dataAbsentReason><!-- 0..1 CodeableConcept Why the component result 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 --></referenceRange> </component> </Observation>
JSON Template
{ "resourceType" : "Observation", // from Resource: id, meta, implicitRules, and language // from DomainResource: text, contained, extension, and modifierExtension "identifier" : [{ Identifier }], // Business Identifier for observation // instantiates[x]: Instantiates FHIR ObservationDefinition. One of these 2: "instantiatesCanonical" : { canonical(ObservationDefinition) }, "instantiatesReference" : { Reference(ObservationDefinition) }, "basedOn" : [{ Reference(CarePlan|DeviceRequest|ImmunizationRecommendation| MedicationRequest|NutritionOrder|ServiceRequest) }], // Fulfills plan, proposal or order "partOf" : [{ Reference(ImagingStudy|Immunization|MedicationAdministration| MedicationDispense|MedicationUsage|Procedure) }], // Part of referenced event "status" : "<code>", // R! registered | preliminary | final | amended + "category" : [{ CodeableConcept }], // Classification of type of observation "code" : { CodeableConcept }, // R! Type of observation (code / type) "subject" : { Reference(Device|Group|Location|Medication|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 "encounter" : { Reference(Encounter) }, // Healthcare event during which this observation is made // 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|Organization|Patient|Practitioner| PractitionerRole|RelatedPerson) }], // Who is responsible for the observation // value[x]: Actual result. One of these 12: "valueQuantity" : { Quantity }, "valueCodeableConcept" : { CodeableConcept }, "valueString" : "<string>", "valueBoolean" : <boolean>, "valueInteger" : <integer>, "valueRange" : { Range }, "valueRatio" : { Ratio }, "valueSampledData" : { SampledData }, "valueTime" : "<time>", "valueDateTime" : "<dateTime>", "valuePeriod" : { Period }, "valueAttachment" : { Attachment }, "dataAbsentReason" : { CodeableConcept }, // C? Why the result is missing "interpretation" : [{ CodeableConcept }], // High, low, normal, etc. "note" : [{ Annotation }], // Comments about the observation "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 "type" : { CodeableConcept }, // Reference range qualifier "appliesTo" : [{ CodeableConcept }], // Reference range population "age" : { Range }, // Applicable age range, if relevant "text" : "<string>" // Text based reference range in an observation }], "hasMember" : [{ Reference(MolecularSequence|Observation| QuestionnaireResponse) }], // Related resource that belongs to the Observation group "derivedFrom" : [{ Reference(DocumentReference|ImagingStudy| MolecularSequence|Observation|QuestionnaireResponse) }], // Related measurements the observation is made from "component" : [{ // Component results "code" : { CodeableConcept }, // R! Type of component observation (code / type) // value[x]: Actual component result. One of these 12: "valueQuantity" : { Quantity }, "valueCodeableConcept" : { CodeableConcept }, "valueString" : "<string>", "valueBoolean" : <boolean>, "valueInteger" : <integer>, "valueRange" : { Range }, "valueRatio" : { Ratio }, "valueSampledData" : { SampledData }, "valueTime" : "<time>", "valueDateTime" : "<dateTime>", "valuePeriod" : { Period }, "valueAttachment" : { Attachment }, "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..* Business Identifier for observation # Observation.instantiates[x] : 0..1 Instantiates FHIR ObservationDefinition. One of these 2 fhir:Observation.instantiatesCanonical [ canonical(ObservationDefinition) ] fhir:Observation.instantiatesReference [ Reference(ObservationDefinition) ] fhir:Observation.basedOn [ Reference(CarePlan|DeviceRequest|ImmunizationRecommendation|MedicationRequest| NutritionOrder|ServiceRequest) ], ... ; # 0..* Fulfills plan, proposal or order fhir:Observation.partOf [ Reference(ImagingStudy|Immunization|MedicationAdministration|MedicationDispense| MedicationUsage|Procedure) ], ... ; # 0..* Part of referenced event 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(Device|Group|Location|Medication|Organization|Patient|Practitioner|Procedure| Substance) ]; # 0..1 Who and/or what the observation is about fhir:Observation.focus [ Reference(Any) ], ... ; # 0..* What the observation is about, when it is not about the subject of record 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 4 fhir:Observation.effectiveDateTime [ dateTime ] fhir:Observation.effectivePeriod [ Period ] fhir:Observation.effectiveTiming [ Timing ] fhir:Observation.effectiveInstant [ instant ] fhir:Observation.issued [ instant ]; # 0..1 Date/Time this version was made available fhir:Observation.performer [ Reference(CareTeam|Organization|Patient|Practitioner|PractitionerRole|RelatedPerson) ], ... ; # 0..* Who is responsible for the observation # Observation.value[x] : 0..1 Actual result. One of these 12 fhir:Observation.valueQuantity [ Quantity ] fhir:Observation.valueCodeableConcept [ CodeableConcept ] fhir:Observation.valueString [ string ] fhir:Observation.valueBoolean [ boolean ] fhir:Observation.valueInteger [ integer ] fhir:Observation.valueRange [ Range ] fhir:Observation.valueRatio [ Ratio ] fhir:Observation.valueSampledData [ SampledData ] fhir:Observation.valueTime [ time ] fhir:Observation.valueDateTime [ dateTime ] fhir:Observation.valuePeriod [ Period ] fhir:Observation.valueAttachment [ Attachment ] fhir:Observation.dataAbsentReason [ CodeableConcept ]; # 0..1 Why the result is missing fhir:Observation.interpretation [ CodeableConcept ], ... ; # 0..* High, low, normal, etc. fhir:Observation.note [ Annotation ], ... ; # 0..* Comments about the observation 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.type [ CodeableConcept ]; # 0..1 Reference range qualifier fhir:Observation.referenceRange.appliesTo [ CodeableConcept ], ... ; # 0..* Reference range population 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.hasMember [ Reference(MolecularSequence|Observation|QuestionnaireResponse) ], ... ; # 0..* Related resource that belongs to the Observation group fhir:Observation.derivedFrom [ Reference(DocumentReference|ImagingStudy|MolecularSequence|Observation| QuestionnaireResponse) ], ... ; # 0..* Related measurements the observation is made from 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 12 fhir:Observation.component.valueQuantity [ Quantity ] fhir:Observation.component.valueCodeableConcept [ CodeableConcept ] fhir:Observation.component.valueString [ string ] fhir:Observation.component.valueBoolean [ boolean ] fhir:Observation.component.valueInteger [ integer ] fhir:Observation.component.valueRange [ Range ] fhir:Observation.component.valueRatio [ Ratio ] fhir:Observation.component.valueSampledData [ SampledData ] fhir:Observation.component.valueTime [ time ] fhir:Observation.component.valueDateTime [ dateTime ] fhir:Observation.component.valuePeriod [ Period ] fhir:Observation.component.valueAttachment [ Attachment ] fhir:Observation.component.dataAbsentReason [ CodeableConcept ]; # 0..1 Why the component result is missing fhir:Observation.component.interpretation [ CodeableConcept ], ... ; # 0..* High, low, normal, etc. fhir:Observation.component.referenceRange [ See Observation.referenceRange ], ... ; # 0..* Provides guide for interpretation of component result ], ...; ]
Changes since R3
Observation | |
Observation.instantiates[x] |
|
Observation.partOf |
|
Observation.status |
|
Observation.subject |
|
Observation.value[x] |
|
Observation.derivedFrom |
|
Observation.component.value[x] |
|
See the Full Difference for further information
This analysis is available 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).)
Structure
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
Observation | N | DomainResource | Measurements and simple assertions + Rule: dataAbsentReason SHALL only be present if Observation.value[x] is not present + Rule: If Observation.code is the same as an Observation.component.code then the value element associated with the code SHALL NOT be present Elements defined in Ancestors: id, meta, implicitRules, language, text, contained, extension, modifierExtension | |
identifier | Σ | 0..* | Identifier | Business Identifier for observation |
instantiates[x] | Σ | 0..1 | Instantiates FHIR ObservationDefinition | |
instantiatesCanonical | canonical(ObservationDefinition) | |||
instantiatesReference | Reference(ObservationDefinition) | |||
basedOn | Σ | 0..* | Reference(CarePlan | DeviceRequest | ImmunizationRecommendation | MedicationRequest | NutritionOrder | ServiceRequest) | Fulfills plan, proposal or order |
partOf | Σ | 0..* | Reference(MedicationAdministration | MedicationDispense | MedicationUsage | Procedure | Immunization | ImagingStudy) | Part of referenced event |
status | ?!Σ | 1..1 | code | registered | preliminary | final | amended + ObservationStatus (Required) |
category | 0..* | CodeableConcept | Classification of type of observation Observation Category Codes (Preferred) | |
code | Σ | 1..1 | CodeableConcept | Type of observation (code / type) LOINC Codes (Example) |
subject | Σ | 0..1 | Reference(Patient | Group | Device | Location | Organization | Procedure | Practitioner | Medication | Substance) | 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 | Σ | 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 | |||
effectiveTiming | Timing | |||
effectiveInstant | instant | |||
issued | Σ | 0..1 | instant | Date/Time this version was made available |
performer | Σ | 0..* | Reference(Practitioner | PractitionerRole | Organization | CareTeam | Patient | RelatedPerson) | Who is responsible for the observation |
value[x] | ΣI | 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 | |||
dataAbsentReason | I | 0..1 | CodeableConcept | Why the result is missing DataAbsentReason (Extensible) |
interpretation | 0..* | CodeableConcept | High, low, normal, etc. Observation Interpretation Codes (Extensible) | |
note | 0..* | Annotation | Comments about the observation | |
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 + Rule: 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 |
type | 0..1 | CodeableConcept | Reference range qualifier Observation Reference Range Meaning Codes (Preferred) | |
appliesTo | 0..* | CodeableConcept | Reference range population Observation Reference Range Applies To Codes (Example) | |
age | 0..1 | Range | Applicable age range, if relevant | |
text | 0..1 | string | Text based reference range in an observation | |
hasMember | Σ | 0..* | Reference(Observation | QuestionnaireResponse | MolecularSequence) | Related resource that belongs to the Observation group |
derivedFrom | Σ | 0..* | Reference(DocumentReference | ImagingStudy | QuestionnaireResponse | Observation | MolecularSequence) | Related measurements the observation is made from |
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 | |||
valueBoolean | boolean | |||
valueInteger | integer | |||
valueRange | Range | |||
valueRatio | Ratio | |||
valueSampledData | SampledData | |||
valueTime | time | |||
valueDateTime | dateTime | |||
valuePeriod | Period | |||
valueAttachment | Attachment | |||
dataAbsentReason | I | 0..1 | CodeableConcept | Why the component result is missing DataAbsentReason (Extensible) |
interpretation | 0..* | 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 Business Identifier for observation --></identifier> <instantiates[x]><!-- 0..1 canonical(ObservationDefinition)|Reference( ObservationDefinition) Instantiates FHIR ObservationDefinition --></instantiates[x]> <basedOn><!-- 0..* Reference(CarePlan|DeviceRequest|ImmunizationRecommendation| MedicationRequest|NutritionOrder|ServiceRequest) Fulfills plan, proposal or order --></basedOn> <partOf><!-- 0..* Reference(ImagingStudy|Immunization|MedicationAdministration| MedicationDispense|MedicationUsage|Procedure) Part of referenced event --></partOf> <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(Device|Group|Location|Medication|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> <encounter><!-- 0..1 Reference(Encounter) Healthcare event during which this observation is made --></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><!-- 0..* Reference(CareTeam|Organization|Patient|Practitioner| PractitionerRole|RelatedPerson) Who is responsible for the observation --></performer> <value[x]><!-- 0..1 Quantity|CodeableConcept|string|boolean|integer|Range|Ratio| SampledData|time|dateTime|Period|Attachment Actual result --></value[x]> <dataAbsentReason><!-- 0..1 CodeableConcept Why the result is missing --></dataAbsentReason> <interpretation><!-- 0..* CodeableConcept High, low, normal, etc. --></interpretation> <note><!-- 0..* Annotation Comments about the observation --></note> <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> <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="[string]"/><!-- 0..1 Text based reference range in an observation --> </referenceRange> <hasMember><!-- 0..* Reference(MolecularSequence|Observation| QuestionnaireResponse) Related resource that belongs to the Observation group --></hasMember> <derivedFrom><!-- 0..* Reference(DocumentReference|ImagingStudy| MolecularSequence|Observation|QuestionnaireResponse) Related measurements the observation is made from --></derivedFrom> <component> <!-- 0..* Component results --> <code><!-- 1..1 CodeableConcept Type of component observation (code / type) --></code> <value[x]><!-- 0..1 Quantity|CodeableConcept|string|boolean|integer|Range| Ratio|SampledData|time|dateTime|Period|Attachment Actual component result --></value[x]> <dataAbsentReason><!-- 0..1 CodeableConcept Why the component result 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 --></referenceRange> </component> </Observation>
JSON Template
{ "resourceType" : "Observation", // from Resource: id, meta, implicitRules, and language // from DomainResource: text, contained, extension, and modifierExtension "identifier" : [{ Identifier }], // Business Identifier for observation // instantiates[x]: Instantiates FHIR ObservationDefinition. One of these 2: "instantiatesCanonical" : { canonical(ObservationDefinition) }, "instantiatesReference" : { Reference(ObservationDefinition) }, "basedOn" : [{ Reference(CarePlan|DeviceRequest|ImmunizationRecommendation| MedicationRequest|NutritionOrder|ServiceRequest) }], // Fulfills plan, proposal or order "partOf" : [{ Reference(ImagingStudy|Immunization|MedicationAdministration| MedicationDispense|MedicationUsage|Procedure) }], // Part of referenced event "status" : "<code>", // R! registered | preliminary | final | amended + "category" : [{ CodeableConcept }], // Classification of type of observation "code" : { CodeableConcept }, // R! Type of observation (code / type) "subject" : { Reference(Device|Group|Location|Medication|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 "encounter" : { Reference(Encounter) }, // Healthcare event during which this observation is made // 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|Organization|Patient|Practitioner| PractitionerRole|RelatedPerson) }], // Who is responsible for the observation // value[x]: Actual result. One of these 12: "valueQuantity" : { Quantity }, "valueCodeableConcept" : { CodeableConcept }, "valueString" : "<string>", "valueBoolean" : <boolean>, "valueInteger" : <integer>, "valueRange" : { Range }, "valueRatio" : { Ratio }, "valueSampledData" : { SampledData }, "valueTime" : "<time>", "valueDateTime" : "<dateTime>", "valuePeriod" : { Period }, "valueAttachment" : { Attachment }, "dataAbsentReason" : { CodeableConcept }, // C? Why the result is missing "interpretation" : [{ CodeableConcept }], // High, low, normal, etc. "note" : [{ Annotation }], // Comments about the observation "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 "type" : { CodeableConcept }, // Reference range qualifier "appliesTo" : [{ CodeableConcept }], // Reference range population "age" : { Range }, // Applicable age range, if relevant "text" : "<string>" // Text based reference range in an observation }], "hasMember" : [{ Reference(MolecularSequence|Observation| QuestionnaireResponse) }], // Related resource that belongs to the Observation group "derivedFrom" : [{ Reference(DocumentReference|ImagingStudy| MolecularSequence|Observation|QuestionnaireResponse) }], // Related measurements the observation is made from "component" : [{ // Component results "code" : { CodeableConcept }, // R! Type of component observation (code / type) // value[x]: Actual component result. One of these 12: "valueQuantity" : { Quantity }, "valueCodeableConcept" : { CodeableConcept }, "valueString" : "<string>", "valueBoolean" : <boolean>, "valueInteger" : <integer>, "valueRange" : { Range }, "valueRatio" : { Ratio }, "valueSampledData" : { SampledData }, "valueTime" : "<time>", "valueDateTime" : "<dateTime>", "valuePeriod" : { Period }, "valueAttachment" : { Attachment }, "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..* Business Identifier for observation # Observation.instantiates[x] : 0..1 Instantiates FHIR ObservationDefinition. One of these 2 fhir:Observation.instantiatesCanonical [ canonical(ObservationDefinition) ] fhir:Observation.instantiatesReference [ Reference(ObservationDefinition) ] fhir:Observation.basedOn [ Reference(CarePlan|DeviceRequest|ImmunizationRecommendation|MedicationRequest| NutritionOrder|ServiceRequest) ], ... ; # 0..* Fulfills plan, proposal or order fhir:Observation.partOf [ Reference(ImagingStudy|Immunization|MedicationAdministration|MedicationDispense| MedicationUsage|Procedure) ], ... ; # 0..* Part of referenced event 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(Device|Group|Location|Medication|Organization|Patient|Practitioner|Procedure| Substance) ]; # 0..1 Who and/or what the observation is about fhir:Observation.focus [ Reference(Any) ], ... ; # 0..* What the observation is about, when it is not about the subject of record 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 4 fhir:Observation.effectiveDateTime [ dateTime ] fhir:Observation.effectivePeriod [ Period ] fhir:Observation.effectiveTiming [ Timing ] fhir:Observation.effectiveInstant [ instant ] fhir:Observation.issued [ instant ]; # 0..1 Date/Time this version was made available fhir:Observation.performer [ Reference(CareTeam|Organization|Patient|Practitioner|PractitionerRole|RelatedPerson) ], ... ; # 0..* Who is responsible for the observation # Observation.value[x] : 0..1 Actual result. One of these 12 fhir:Observation.valueQuantity [ Quantity ] fhir:Observation.valueCodeableConcept [ CodeableConcept ] fhir:Observation.valueString [ string ] fhir:Observation.valueBoolean [ boolean ] fhir:Observation.valueInteger [ integer ] fhir:Observation.valueRange [ Range ] fhir:Observation.valueRatio [ Ratio ] fhir:Observation.valueSampledData [ SampledData ] fhir:Observation.valueTime [ time ] fhir:Observation.valueDateTime [ dateTime ] fhir:Observation.valuePeriod [ Period ] fhir:Observation.valueAttachment [ Attachment ] fhir:Observation.dataAbsentReason [ CodeableConcept ]; # 0..1 Why the result is missing fhir:Observation.interpretation [ CodeableConcept ], ... ; # 0..* High, low, normal, etc. fhir:Observation.note [ Annotation ], ... ; # 0..* Comments about the observation 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.type [ CodeableConcept ]; # 0..1 Reference range qualifier fhir:Observation.referenceRange.appliesTo [ CodeableConcept ], ... ; # 0..* Reference range population 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.hasMember [ Reference(MolecularSequence|Observation|QuestionnaireResponse) ], ... ; # 0..* Related resource that belongs to the Observation group fhir:Observation.derivedFrom [ Reference(DocumentReference|ImagingStudy|MolecularSequence|Observation| QuestionnaireResponse) ], ... ; # 0..* Related measurements the observation is made from 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 12 fhir:Observation.component.valueQuantity [ Quantity ] fhir:Observation.component.valueCodeableConcept [ CodeableConcept ] fhir:Observation.component.valueString [ string ] fhir:Observation.component.valueBoolean [ boolean ] fhir:Observation.component.valueInteger [ integer ] fhir:Observation.component.valueRange [ Range ] fhir:Observation.component.valueRatio [ Ratio ] fhir:Observation.component.valueSampledData [ SampledData ] fhir:Observation.component.valueTime [ time ] fhir:Observation.component.valueDateTime [ dateTime ] fhir:Observation.component.valuePeriod [ Period ] fhir:Observation.component.valueAttachment [ Attachment ] fhir:Observation.component.dataAbsentReason [ CodeableConcept ]; # 0..1 Why the component result is missing fhir:Observation.component.interpretation [ CodeableConcept ], ... ; # 0..* High, low, normal, etc. fhir:Observation.component.referenceRange [ See Observation.referenceRange ], ... ; # 0..* Provides guide for interpretation of component result ], ...; ]
Changes since Release 3
Observation | |
Observation.instantiates[x] |
|
Observation.partOf |
|
Observation.status |
|
Observation.subject |
|
Observation.value[x] |
|
Observation.derivedFrom |
|
Observation.component.value[x] |
|
See the Full Difference for further information
This analysis is available 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).)
See the Profiles & Extensions and the alternate definitions: Master Definition XML + JSON, XML Schema/Schematron + JSON Schema, ShEx (for Turtle) + see the extensions, the spreadsheet version & the dependency analysis a
Path | Definition | Type | Reference |
---|---|---|---|
Observation.status | Required | ObservationStatus | |
Observation.category | Preferred | ObservationCategoryCodes | |
Observation.code | Example | LOINCCodes | |
Observation.dataAbsentReason | Extensible | DataAbsentReason | |
Observation.interpretation | Extensible | ObservationInterpretationCodes | |
Observation.bodySite | Codes describing anatomical locations. May include laterality. | Example | SNOMEDCTBodyStructures |
Observation.method | Example | ObservationMethods | |
Observation.referenceRange.type | Preferred | ObservationReferenceRangeMeaningCodes | |
Observation.referenceRange.appliesTo | Example | ObservationReferenceRangeAppliesToCodes | |
Observation.component.code | Example | LOINCCodes | |
Observation.component.dataAbsentReason | Extensible | DataAbsentReason | |
Observation.component.interpretation | Extensible | ObservationInterpretationCodes |
id | Level | Location | Description | Expression |
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 | Rule | (base) | dataAbsentReason SHALL only be present if Observation.value[x] is not present | dataAbsentReason.empty() or value.empty() |
obs-7 | Rule | (base) | If Observation.code is the same as an Observation.component.code then the value element associated with the code SHALL NOT be present | value.empty() or component.code.where(coding.intersect(%resource.code.coding).exists()).empty() |
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
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.
Many observations have important relationships to other observations and need to be grouped together. These structures have been defined to do this: DiagnosticReport and DiagnosticReport.result
, Observation and the elements: Observation.component
, Observation.hasMember
and Observation.derivedFrom
. The sections below provides guidance around which structure to use. Because the idea of what to group together is often highly contextual and based upon the end user's point of view, the choice of which structure to use will be driven by jurisdiction, organizational practice and context. Profiling will normally be necessary for implementation.
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:
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 and Observation-replaces 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:
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).
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.
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" }
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" }
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" } .. 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:
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:
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:
Observation.code
is nearly identical to 1) above, but the level of granularity is shifted from the value to code. For example:
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:
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:
The following list provides guidance on using codes or other observations to provide additional context that may alter how an observation is interpreted.:
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 ... }
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 ... }
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:We are seeking input from the implementer community in evaluating existing Observation Extensions for this purpose
Feedback here .
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
.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 (these "yes/no" concepts can be mapped to the display name "true/false" or other mutually exclusive terms that may be needed") valueQuantity
would be:
"valueQuantity": { "value": 2.0, "comparator": "<", "unit": "mmol/l", "system": "http://unitsofmeasure.org", "code": "mmol/L" }If the value was "NaN" (i.e. an error) the
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" } ] }
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.
Genetic reporting makes heavy use of the DiagnosticReport and Observation resources. An implementation guide describing how to represent genetic results can be found here .
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:
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:
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 | Expression | In Common |
based-on TU | reference | Reference to the service request. | Observation.basedOn (CarePlan, MedicationRequest, NutritionOrder, DeviceRequest, ServiceRequest, ImmunizationRecommendation) | |
category TU | token | The classification of the type of observation | Observation.category | |
code TU | token | The code of the observation type | Observation.code | |
code-value-concept TU | composite | Code and coded value parameter pair | On Observation: code: code value-concept: value.as(CodeableConcept) | |
code-value-date TU | composite | Code and date/time value parameter pair | On Observation: code: code value-date: value.as(DateTime) | value.as(Period) | |
code-value-quantity TU | composite | Code and quantity value parameter pair | On Observation: code: code value-quantity: value.as(Quantity) | |
code-value-string TU | composite | Code and string value parameter pair | On Observation: code: code value-string: value.as(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) | |
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) | |
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-value-concept TU | token | The value or component value of the observation, if the value is a CodeableConcept | (Observation.value as CodeableConcept) | (Observation.component.value as 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) | (Observation.value as Quantity) | (Observation.value as SampledData) | (Observation.component.value as Quantity) | (Observation.component.value as SampledData) | |
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) | |
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) | |
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-value-concept TU | token | The value of the component observation, if the value is a CodeableConcept | (Observation.component.value as 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) | (Observation.component.value as Quantity) | (Observation.component.value as SampledData) | |
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 | Observation.effective | |
derived-from TU | reference | Related measurements the observation is made from | Observation.derivedFrom (Observation, ImagingStudy, MolecularSequence, 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) | |
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 (Observation, MolecularSequence, QuestionnaireResponse) | |
identifier TU | token | The unique id for a particular observation | Observation.identifier | |
method TU | token | The method used for the observation | Observation.method | |
part-of TU | reference | Part of referenced event | Observation.partOf (Immunization, MedicationDispense, MedicationAdministration, Procedure, ImagingStudy, MedicationUsage) | |
patient TU | reference | The subject that the observation is about (if patient) | Observation.subject.where(resolve() is Patient) (Practitioner, Group, Organization, Device, Medication, Patient, Procedure, Substance, Location) | |
performer TU | reference | Who performed the observation | Observation.performer (Practitioner, Organization, CareTeam, Patient, PractitionerRole, RelatedPerson) | |
specimen TU | reference | Specimen used for this observation | Observation.specimen (Specimen) | |
status | token | The status of the observation | Observation.status | |
subject TU | reference | The subject that the observation is about | Observation.subject (Practitioner, Group, Organization, 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) | |
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 as 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) | (Observation.value as Quantity) | (Observation.value as SampledData) | |
value-string TU | string | The value of the observation, if the value is a string, and also searches in CodeableConcept.text | (Observation.value as string) | (Observation.value as CodeableConcept).text |