HL7 FHIR Implementation Guide: Transversal Clinical Core
1.0.0 - STU1
This page is part of the HL7 Belgium FHIR Implementation Guide - Core clinical profiles - transversal (v1.0.0: Trial Use) based on FHIR R4. This is the current published version in its permanent home (it will always be available at this URL). For a full list of available versions, see the Directory of published versions
Official URL: https://www.ehealth.fgov.be/standards/fhir/core-clinical/StructureDefinition/be-observation | Version: 1.0.0 | |||
Active as of 2022-05-31 | Maturity Level: 1 | Responsible: eHealth Platform | Realm: BE | Computable Name: BeObservation |
Belgian federal profile for an observation. Initially based on the functional description of the NIHDI. As Observation is used in many instances in FHIR, please refer to the HL7 specs of the base resource for guidance around expression of actual values using UCUM, methods, location on body etc.
Special remarks for KMEHR users: The FHIR Observation resource captures many things that are in a KMEHR message structured as an ‘item’. This includes things like ‘vital signs such as body weight, blood pressure, and temperature […], personal characteristics such as eye-color […] social history like tobacco use, family support, or cognitive status […]’ ( https://www.hl7.org/fhir/R4/observation.html ) For some of these things, HL7 already has worked out profiles and they SHALL be used when such a use case is needed. Specifically, projects SHALL take note of the existing profiles described on https://www.hl7.org/fhir/R4/observation-vitalsigns.html
Usage:
Description of Profiles, Differentials, Snapshots and how the different presentations work.
Other representations of profile: CSV, Excel, Schematron
Path | Conformance | ValueSet |
Observation.language | preferred | CommonLanguages Max Binding: AllLanguages |
Observation.status | required | ObservationStatus |
Observation.category | preferred | ObservationCategoryCodes |
Observation.code | example | LOINCCodes |
Observation.dataAbsentReason | extensible | DataAbsentReason |
Observation.interpretation | extensible | ObservationInterpretationCodes |
Observation.bodySite | 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 | Grade | Path | Details | Requirements |
dom-2 | error | Observation | If the resource is contained in another resource, it SHALL NOT contain nested Resources : contained.contained.empty() | |
dom-3 | error | Observation | If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource : contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty() | |
dom-4 | error | Observation | If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated : contained.meta.versionId.empty() and contained.meta.lastUpdated.empty() | |
dom-5 | error | Observation | If a resource is contained in another resource, it SHALL NOT have a security label : contained.meta.security.empty() | |
dom-6 | Best Practice | Observation | A resource should have narrative for robust management : text.`div`.exists() | |
obs-6 | error | Observation | dataAbsentReason SHALL only be present if Observation.value[x] is not present : dataAbsentReason.empty() or value.empty() | |
obs-7 | error | Observation | 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() | |
ele-1 | error | Observation.meta | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.implicitRules | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.language | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.text | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.extension | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | error | Observation.extension | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | error | Observation.modifierExtension | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | error | Observation.modifierExtension | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | error | Observation.identifier | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.basedOn | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.partOf | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.status | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.category | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.code | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.subject | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.focus | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.encounter | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.effective[x] | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.issued | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.performer | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.value[x] | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.dataAbsentReason | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.interpretation | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.note | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.bodySite | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.method | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.specimen | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.device | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.referenceRange | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
obs-3 | error | Observation.referenceRange | Must have at least a low or a high or text : low.exists() or high.exists() or text.exists() | |
ele-1 | error | Observation.referenceRange.extension | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | error | Observation.referenceRange.extension | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | error | Observation.referenceRange.modifierExtension | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | error | Observation.referenceRange.modifierExtension | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | error | Observation.referenceRange.low | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.referenceRange.high | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.referenceRange.type | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.referenceRange.appliesTo | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.referenceRange.age | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.referenceRange.text | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.hasMember | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.derivedFrom | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.component | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.component.extension | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | error | Observation.component.extension | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | error | Observation.component.modifierExtension | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | error | Observation.component.modifierExtension | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | error | Observation.component.code | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.component.value[x] | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.component.dataAbsentReason | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.component.interpretation | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | error | Observation.component.referenceRange | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) |