Eswatini HL7 FHIR Implementation Guide
1.0.0 - draft
Eswatini
Eswatini HL7 FHIR Implementation Guide - Local Development build (v1.0.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions
| Official URL: https://eswatinihie.com/fhir/StructureDefinition/SzVitalSigns | Version: 1.0.0 | |||
| Active as of 2026-08-21 | Computable Name: SzVitalSigns | |||
The Eswatini Vital Signs Profile defines the constraints and usage of the HL7 FHIR Observation resource for representing vital signs measurements collected as part of patient care within the Eswatini National Digital Health Ecosystem. It provides a standardized and interoperable approach for capturing, exchanging, and interpreting core physiological measurements that are routinely used to assess a patient’s health status. This profile ensures that vital signs data is recorded in a consistent, clinically meaningful, and nationally aligned manner, supporting clinical decision‑making, continuity of care, and health reporting.
This profile SHALL be used by systems that record or exchange patient vital signs, including:
Electronic Medical Record (EMR) systems Facility‑based clinical systems Community and outreach health systems National health information exchange (HIE) services
The profile applies to the capture of core vital signs measurements, such as:
Body temperature Blood pressure Pulse or heart rate Respiratory rate Weight, height, and other routine physiological measurements
Each vital sign represents a single clinical measurement made at a specific point in time.
Usages:
You can also check for usages in the FHIR IG Statistics
Description of Profiles, Differentials, Snapshots and how the different presentations work.
| Name | Flags | Card. | Type | Description & Constraints Filter: ![]() ![]() |
|---|---|---|---|---|
![]() |
C | 0..* | observation-vitalsigns | FHIR Vital Signs Profile Constraints: obs-6, obs-7, vs-2 |
![]() ![]() |
Σ | 1..1 | id | Logical id of this artifact |
![]() ![]() |
?!Σ | 0..1 | uri | A set of rules under which this content was created |
![]() ![]() |
?! | 0..* | Extension | Extensions that cannot be ignored |
![]() ![]() |
?!SΣ | 1..1 | code | registered | preliminary | final | amended + Binding: ObservationStatus (required) |
![]() ![]() |
S | 1..* | CodeableConcept | Classification of type of observation Slice: Unordered, Open by value:coding.code, value:coding.system Binding: ObservationCategoryCodes (preferred): Codes for high level observation categories. |
![]() ![]() ![]() |
S | 1..1 | CodeableConcept | Classification of type of observation Binding: ObservationCategoryCodes (preferred): Codes for high level observation categories. |
![]() ![]() ![]() ![]() |
SΣ | 1..* | Coding | Code defined by a terminology system |
![]() ![]() ![]() ![]() ![]() |
SΣ | 1..1 | uri | Identity of the terminology system Fixed Value: http://terminology.hl7.org/CodeSystem/observation-category |
![]() ![]() ![]() ![]() ![]() |
SΣ | 1..1 | code | Symbol in syntax defined by the system Fixed Value: vital-signs |
![]() ![]() |
SΣ | 1..1 | CodeableConcept | Specific vital sign being observed Binding: VitalSigns (required) |
![]() ![]() |
SΣ | 1..1 | Reference(Eswatini Patient Profile) | Patient related to the vitals being recorded |
![]() ![]() |
Σ | 1..1 | Reference(Eswatini Encounter Profile) | Visit related to the vitals being recorded |
![]() ![]() |
SΣC | 1..1 | dateTime | Date and time when the vital sign was observed Constraints: vs-1 |
![]() ![]() |
SΣC | 1..1 | Vital Signs value are recorded using the Quantity data type. For supporting observations such as Cuff size could use other datatypes such as CodeableConcept. | |
![]() ![]() ![]() |
Quantity | |||
![]() ![]() ![]() |
string | |||
![]() ![]() ![]() |
integer | |||
![]() ![]() |
SC | 0..1 | CodeableConcept | Why the result is missing Binding: DataAbsentReason (extensible): Codes specifying why the result (Observation.value[x]) is missing. |
![]() ![]() |
SΣC | 0..* | BackboneElement | Used when reporting systolic and diastolic blood pressure. Constraints: vs-3 |
![]() ![]() ![]() |
?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized |
![]() ![]() ![]() |
SΣ | 1..1 | CodeableConcept | Type of component observation (code / type) Binding: VitalSigns (extensible): This identifies the vital sign result type. |
![]() ![]() ![]() |
SΣC | 0..1 | Vital Sign Value recorded with UCUM Binding: VitalSignsUnits (extensible): Common UCUM units for recording Vital Signs. | |
![]() ![]() ![]() ![]() |
Quantity | |||
![]() ![]() ![]() ![]() |
CodeableConcept | |||
![]() ![]() ![]() ![]() |
string | |||
![]() ![]() ![]() ![]() |
boolean | |||
![]() ![]() ![]() ![]() |
integer | |||
![]() ![]() ![]() ![]() |
Range | |||
![]() ![]() ![]() ![]() |
Ratio | |||
![]() ![]() ![]() ![]() |
SampledData | |||
![]() ![]() ![]() ![]() |
time | |||
![]() ![]() ![]() ![]() |
dateTime | |||
![]() ![]() ![]() ![]() |
Period | |||
![]() ![]() ![]() |
SC | 0..1 | CodeableConcept | Why the component result is missing Binding: DataAbsentReason (extensible): Codes specifying why the result (Observation.value[x]) is missing. |
Documentation for this format | ||||
| Path | Status | Usage | ValueSet | Version | Source |
| Observation.status | Base | required | ObservationStatus | 📍4.0.1 | FHIR Std. |
| Observation.category | Base | preferred | Observation Category Codes | 📍4.0.1 | FHIR Std. |
| Observation.category:VSCat | Base | preferred | Observation Category Codes | 📍4.0.1 | FHIR Std. |
| Observation.code | Base | required | Vital Signs | 📦4.0.1 | FHIR Std. |
| Observation.dataAbsentReason | Base | extensible | DataAbsentReason | 📍4.0.1 | FHIR Std. |
| Observation.component.code | Base | extensible | Vital Signs | 📍4.0.1 | FHIR Std. |
| Observation.component.value[x] | Base | extensible | Vital Signs Units | 📍4.0.1 | FHIR Std. |
| Observation.component.dataAbsentReason | Base | extensible | DataAbsentReason | 📍4.0.1 | FHIR Std. |
| Id | Grade | Path(s) | Description | Expression |
| 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()
|
| ele-1 | error | **ALL** elements | All FHIR elements must have a @value or children |
hasValue() or (children().count() > id.count())
|
| ext-1 | error | **ALL** extensions | Must have either extensions or value[x], not both |
extension.exists() != value.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()
|
| vs-1 | error | Observation.effective[x] | if Observation.effective[x] is dateTime and has a value then that value shall be precise to the day |
$this is dateTime implies $this.toString().length() >= 10
|
| vs-2 | error | Observation | If there is no component or hasMember element then either a value[x] or a data absent reason must be present. |
(component.empty() and hasMember.empty()) implies (dataAbsentReason.exists() or value.exists())
|
| vs-3 | error | Observation.component | If there is no a value a data absent reason must be present |
value.exists() or dataAbsentReason.exists()
|
This structure is derived from observation-vitalsigns
| Name | Flags | Card. | Type | Description & Constraints Filter: ![]() ![]() |
|---|---|---|---|---|
![]() |
0..* | observation-vitalsigns | FHIR Vital Signs Profile | |
![]() ![]() |
1..1 | id | Logical id of this artifact | |
![]() ![]() |
1..1 | CodeableConcept | Specific vital sign being observed Binding: VitalSigns (required) | |
![]() ![]() |
1..1 | Reference(Eswatini Patient Profile) | Patient related to the vitals being recorded | |
![]() ![]() |
1..1 | Reference(Eswatini Encounter Profile) | Visit related to the vitals being recorded | |
![]() ![]() |
1..1 | dateTime | Date and time when the vital sign was observed | |
![]() ![]() |
1..1 | Vital Signs value are recorded using the Quantity data type. For supporting observations such as Cuff size could use other datatypes such as CodeableConcept. | ||
![]() ![]() ![]() |
Quantity | |||
![]() ![]() ![]() |
string | |||
![]() ![]() ![]() |
integer | |||
Documentation for this format | ||||
| Path | Status | Usage | ValueSet | Version | Source |
| Observation.code | Base | required | Vital Signs | 📦4.0.1 | FHIR Std. |
| Name | Flags | Card. | Type | Description & Constraints Filter: ![]() ![]() | ||||
|---|---|---|---|---|---|---|---|---|
![]() |
C | 0..* | observation-vitalsigns | FHIR Vital Signs Profile Constraints: obs-6, obs-7, vs-2 | ||||
![]() ![]() |
Σ | 1..1 | id | Logical id of this artifact | ||||
![]() ![]() |
Σ | 0..1 | Meta | Metadata about the resource | ||||
![]() ![]() |
?!Σ | 0..1 | uri | A set of rules under which this content was created | ||||
![]() ![]() |
0..1 | code | Language of the resource content Binding: CommonLanguages (preferred): A human language.
| |||||
![]() ![]() |
0..1 | Narrative | Text summary of the resource, for human interpretation This profile does not constrain the narrative in regard to content, language, or traceability to data elements | |||||
![]() ![]() |
0..* | Resource | Contained, inline Resources | |||||
![]() ![]() |
0..* | Extension | Additional content defined by implementations | |||||
![]() ![]() |
?! | 0..* | Extension | Extensions that cannot be ignored | ||||
![]() ![]() |
Σ | 0..* | Identifier | Business Identifier for observation | ||||
![]() ![]() |
Σ | 0..* | Reference(CarePlan | DeviceRequest | ImmunizationRecommendation | MedicationRequest | NutritionOrder | ServiceRequest) | Fulfills plan, proposal or order | ||||
![]() ![]() |
Σ | 0..* | Reference(MedicationAdministration | MedicationDispense | MedicationStatement | Procedure | Immunization | ImagingStudy) | Part of referenced event | ||||
![]() ![]() |
?!SΣ | 1..1 | code | registered | preliminary | final | amended + Binding: ObservationStatus (required) | ||||
![]() ![]() |
S | 1..* | CodeableConcept | Classification of type of observation Slice: Unordered, Open by value:coding.code, value:coding.system Binding: ObservationCategoryCodes (preferred): Codes for high level observation categories. | ||||
![]() ![]() ![]() |
S | 1..1 | CodeableConcept | Classification of type of observation Binding: ObservationCategoryCodes (preferred): Codes for high level observation categories. | ||||
![]() ![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |||||
![]() ![]() ![]() ![]() |
0..* | Extension | Additional content defined by implementations Slice: Unordered, Open by value:url | |||||
![]() ![]() ![]() ![]() |
SΣ | 1..* | Coding | Code defined by a terminology system | ||||
![]() ![]() ![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |||||
![]() ![]() ![]() ![]() ![]() |
0..* | Extension | Additional content defined by implementations Slice: Unordered, Open by value:url | |||||
![]() ![]() ![]() ![]() ![]() |
SΣ | 1..1 | uri | Identity of the terminology system Fixed Value: http://terminology.hl7.org/CodeSystem/observation-category | ||||
![]() ![]() ![]() ![]() ![]() |
Σ | 0..1 | string | Version of the system - if relevant | ||||
![]() ![]() ![]() ![]() ![]() |
SΣ | 1..1 | code | Symbol in syntax defined by the system Fixed Value: vital-signs | ||||
![]() ![]() ![]() ![]() ![]() |
Σ | 0..1 | string | Representation defined by the system | ||||
![]() ![]() ![]() ![]() ![]() |
Σ | 0..1 | boolean | If this coding was chosen directly by the user | ||||
![]() ![]() ![]() ![]() |
Σ | 0..1 | string | Plain text representation of the concept | ||||
![]() ![]() |
SΣ | 1..1 | CodeableConcept | Specific vital sign being observed Binding: VitalSigns (required) | ||||
![]() ![]() |
SΣ | 1..1 | Reference(Eswatini Patient Profile) | Patient related to the vitals being recorded | ||||
![]() ![]() |
Σ | 0..* | Reference(Resource) | What the observation is about, when it is not about the subject of record | ||||
![]() ![]() |
Σ | 1..1 | Reference(Eswatini Encounter Profile) | Visit related to the vitals being recorded | ||||
![]() ![]() |
SΣC | 1..1 | dateTime | Date and time when the vital sign was observed Constraints: vs-1 | ||||
![]() ![]() |
Σ | 0..1 | instant | Date/Time this version was made available | ||||
![]() ![]() |
Σ | 0..* | Reference(Practitioner | PractitionerRole | Organization | CareTeam | Patient | RelatedPerson) | Who is responsible for the observation | ||||
![]() ![]() |
SΣC | 1..1 | Vital Signs value are recorded using the Quantity data type. For supporting observations such as Cuff size could use other datatypes such as CodeableConcept. | |||||
![]() ![]() ![]() |
Quantity | |||||||
![]() ![]() ![]() |
string | |||||||
![]() ![]() ![]() |
integer | |||||||
![]() ![]() |
SC | 0..1 | CodeableConcept | Why the result is missing Binding: DataAbsentReason (extensible): Codes specifying why the result (Observation.value[x]) is missing. | ||||
![]() ![]() |
0..* | CodeableConcept | High, low, normal, etc. Binding: ObservationInterpretationCodes (extensible): Codes identifying interpretations of observations. | |||||
![]() ![]() |
0..* | Annotation | Comments about the observation | |||||
![]() ![]() |
0..1 | CodeableConcept | Observed body part Binding: SNOMEDCTBodyStructures (example): Codes describing anatomical locations. May include laterality. | |||||
![]() ![]() |
0..1 | CodeableConcept | How it was done Binding: ObservationMethods (example): Methods for simple observations. | |||||
![]() ![]() |
0..1 | Reference(Specimen) | Specimen used for this observation | |||||
![]() ![]() |
0..1 | Reference(Device | DeviceMetric) | (Measurement) Device | |||||
![]() ![]() |
C | 0..* | BackboneElement | Provides guide for interpretation Constraints: obs-3 | ||||
![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |||||
![]() ![]() ![]() |
0..* | Extension | Additional content defined by implementations | |||||
![]() ![]() ![]() |
?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized | ||||
![]() ![]() ![]() |
C | 0..1 | SimpleQuantity(4.0.1) | Low Range, if relevant | ||||
![]() ![]() ![]() |
C | 0..1 | SimpleQuantity(4.0.1) | High Range, if relevant | ||||
![]() ![]() ![]() |
0..1 | CodeableConcept | Reference range qualifier Binding: ObservationReferenceRangeMeaningCodes (preferred): Code for the meaning of a reference range. | |||||
![]() ![]() ![]() |
0..* | CodeableConcept | Reference range population Binding: ObservationReferenceRangeAppliesToCodes (example): Codes identifying the population the reference range applies to. | |||||
![]() ![]() ![]() |
0..1 | Range | Applicable age range, if relevant | |||||
![]() ![]() ![]() |
0..1 | string | Text based reference range in an observation | |||||
![]() ![]() |
Σ | 0..* | Reference(QuestionnaireResponse | MolecularSequence | Vital Signs Profile) | Used when reporting vital signs panel components | ||||
![]() ![]() |
Σ | 0..* | Reference(DocumentReference | ImagingStudy | Media | QuestionnaireResponse | MolecularSequence | Vital Signs Profile) | Related measurements the observation is made from | ||||
![]() ![]() |
SΣC | 0..* | BackboneElement | Used when reporting systolic and diastolic blood pressure. Constraints: vs-3 | ||||
![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |||||
![]() ![]() ![]() |
0..* | Extension | Additional content defined by implementations | |||||
![]() ![]() ![]() |
?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized | ||||
![]() ![]() ![]() |
SΣ | 1..1 | CodeableConcept | Type of component observation (code / type) Binding: VitalSigns (extensible): This identifies the vital sign result type. | ||||
![]() ![]() ![]() |
SΣC | 0..1 | Vital Sign Value recorded with UCUM Binding: VitalSignsUnits (extensible): Common UCUM units for recording Vital Signs. | |||||
![]() ![]() ![]() ![]() |
Quantity | |||||||
![]() ![]() ![]() ![]() |
CodeableConcept | |||||||
![]() ![]() ![]() ![]() |
string | |||||||
![]() ![]() ![]() ![]() |
boolean | |||||||
![]() ![]() ![]() ![]() |
integer | |||||||
![]() ![]() ![]() ![]() |
Range | |||||||
![]() ![]() ![]() ![]() |
Ratio | |||||||
![]() ![]() ![]() ![]() |
SampledData | |||||||
![]() ![]() ![]() ![]() |
time | |||||||
![]() ![]() ![]() ![]() |
dateTime | |||||||
![]() ![]() ![]() ![]() |
Period | |||||||
![]() ![]() ![]() |
SC | 0..1 | CodeableConcept | Why the component result is missing Binding: DataAbsentReason (extensible): Codes specifying why the result (Observation.value[x]) is missing. | ||||
![]() ![]() ![]() |
0..* | CodeableConcept | High, low, normal, etc. Binding: ObservationInterpretationCodes (extensible): Codes identifying interpretations of observations. | |||||
![]() ![]() ![]() |
0..* | See referenceRange (Observation) | Provides guide for interpretation of component result | |||||
Documentation for this format | ||||||||
| Path | Status | Usage | ValueSet | Version | Source |
| Observation.language | Base | preferred | Common Languages | 📍4.0.1 | FHIR Std. |
| Observation.status | Base | required | ObservationStatus | 📍4.0.1 | FHIR Std. |
| Observation.category | Base | preferred | Observation Category Codes | 📍4.0.1 | FHIR Std. |
| Observation.category:VSCat | Base | preferred | Observation Category Codes | 📍4.0.1 | FHIR Std. |
| Observation.code | Base | required | Vital Signs | 📦4.0.1 | FHIR Std. |
| Observation.dataAbsentReason | Base | extensible | DataAbsentReason | 📍4.0.1 | FHIR Std. |
| Observation.interpretation | Base | extensible | Observation Interpretation Codes | 📍4.0.1 | FHIR Std. |
| Observation.bodySite | Base | example | SNOMED CT Body Structures | 📍4.0.1 | FHIR Std. |
| Observation.method | Base | example | Observation Methods | 📍4.0.1 | FHIR Std. |
| Observation.referenceRange.type | Base | preferred | Observation Reference Range Meaning Codes | 📍4.0.1 | FHIR Std. |
| Observation.referenceRange.appliesTo | Base | example | Observation Reference Range Applies To Codes | 📍4.0.1 | FHIR Std. |
| Observation.component.code | Base | extensible | Vital Signs | 📍4.0.1 | FHIR Std. |
| Observation.component.value[x] | Base | extensible | Vital Signs Units | 📍4.0.1 | FHIR Std. |
| Observation.component.dataAbsentReason | Base | extensible | DataAbsentReason | 📍4.0.1 | FHIR Std. |
| Observation.component.interpretation | Base | extensible | Observation Interpretation Codes | 📍4.0.1 | FHIR Std. |
| Id | Grade | Path(s) | Description | Expression |
| 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()
|
| ele-1 | error | **ALL** elements | All FHIR elements must have a @value or children |
hasValue() or (children().count() > id.count())
|
| ext-1 | error | **ALL** extensions | Must have either extensions or value[x], not both |
extension.exists() != value.exists()
|
| obs-3 | error | Observation.referenceRange | Must have at least a low or a high or text |
low.exists() or high.exists() or text.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()
|
| vs-1 | error | Observation.effective[x] | if Observation.effective[x] is dateTime and has a value then that value shall be precise to the day |
$this is dateTime implies $this.toString().length() >= 10
|
| vs-2 | error | Observation | If there is no component or hasMember element then either a value[x] or a data absent reason must be present. |
(component.empty() and hasMember.empty()) implies (dataAbsentReason.exists() or value.exists())
|
| vs-3 | error | Observation.component | If there is no a value a data absent reason must be present |
value.exists() or dataAbsentReason.exists()
|
This structure is derived from observation-vitalsigns
Key Elements View
| Name | Flags | Card. | Type | Description & Constraints Filter: ![]() ![]() |
|---|---|---|---|---|
![]() |
C | 0..* | observation-vitalsigns | FHIR Vital Signs Profile Constraints: obs-6, obs-7, vs-2 |
![]() ![]() |
Σ | 1..1 | id | Logical id of this artifact |
![]() ![]() |
?!Σ | 0..1 | uri | A set of rules under which this content was created |
![]() ![]() |
?! | 0..* | Extension | Extensions that cannot be ignored |
![]() ![]() |
?!SΣ | 1..1 | code | registered | preliminary | final | amended + Binding: ObservationStatus (required) |
![]() ![]() |
S | 1..* | CodeableConcept | Classification of type of observation Slice: Unordered, Open by value:coding.code, value:coding.system Binding: ObservationCategoryCodes (preferred): Codes for high level observation categories. |
![]() ![]() ![]() |
S | 1..1 | CodeableConcept | Classification of type of observation Binding: ObservationCategoryCodes (preferred): Codes for high level observation categories. |
![]() ![]() ![]() ![]() |
SΣ | 1..* | Coding | Code defined by a terminology system |
![]() ![]() ![]() ![]() ![]() |
SΣ | 1..1 | uri | Identity of the terminology system Fixed Value: http://terminology.hl7.org/CodeSystem/observation-category |
![]() ![]() ![]() ![]() ![]() |
SΣ | 1..1 | code | Symbol in syntax defined by the system Fixed Value: vital-signs |
![]() ![]() |
SΣ | 1..1 | CodeableConcept | Specific vital sign being observed Binding: VitalSigns (required) |
![]() ![]() |
SΣ | 1..1 | Reference(Eswatini Patient Profile) | Patient related to the vitals being recorded |
![]() ![]() |
Σ | 1..1 | Reference(Eswatini Encounter Profile) | Visit related to the vitals being recorded |
![]() ![]() |
SΣC | 1..1 | dateTime | Date and time when the vital sign was observed Constraints: vs-1 |
![]() ![]() |
SΣC | 1..1 | Vital Signs value are recorded using the Quantity data type. For supporting observations such as Cuff size could use other datatypes such as CodeableConcept. | |
![]() ![]() ![]() |
Quantity | |||
![]() ![]() ![]() |
string | |||
![]() ![]() ![]() |
integer | |||
![]() ![]() |
SC | 0..1 | CodeableConcept | Why the result is missing Binding: DataAbsentReason (extensible): Codes specifying why the result (Observation.value[x]) is missing. |
![]() ![]() |
SΣC | 0..* | BackboneElement | Used when reporting systolic and diastolic blood pressure. Constraints: vs-3 |
![]() ![]() ![]() |
?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized |
![]() ![]() ![]() |
SΣ | 1..1 | CodeableConcept | Type of component observation (code / type) Binding: VitalSigns (extensible): This identifies the vital sign result type. |
![]() ![]() ![]() |
SΣC | 0..1 | Vital Sign Value recorded with UCUM Binding: VitalSignsUnits (extensible): Common UCUM units for recording Vital Signs. | |
![]() ![]() ![]() ![]() |
Quantity | |||
![]() ![]() ![]() ![]() |
CodeableConcept | |||
![]() ![]() ![]() ![]() |
string | |||
![]() ![]() ![]() ![]() |
boolean | |||
![]() ![]() ![]() ![]() |
integer | |||
![]() ![]() ![]() ![]() |
Range | |||
![]() ![]() ![]() ![]() |
Ratio | |||
![]() ![]() ![]() ![]() |
SampledData | |||
![]() ![]() ![]() ![]() |
time | |||
![]() ![]() ![]() ![]() |
dateTime | |||
![]() ![]() ![]() ![]() |
Period | |||
![]() ![]() ![]() |
SC | 0..1 | CodeableConcept | Why the component result is missing Binding: DataAbsentReason (extensible): Codes specifying why the result (Observation.value[x]) is missing. |
Documentation for this format | ||||
| Path | Status | Usage | ValueSet | Version | Source |
| Observation.status | Base | required | ObservationStatus | 📍4.0.1 | FHIR Std. |
| Observation.category | Base | preferred | Observation Category Codes | 📍4.0.1 | FHIR Std. |
| Observation.category:VSCat | Base | preferred | Observation Category Codes | 📍4.0.1 | FHIR Std. |
| Observation.code | Base | required | Vital Signs | 📦4.0.1 | FHIR Std. |
| Observation.dataAbsentReason | Base | extensible | DataAbsentReason | 📍4.0.1 | FHIR Std. |
| Observation.component.code | Base | extensible | Vital Signs | 📍4.0.1 | FHIR Std. |
| Observation.component.value[x] | Base | extensible | Vital Signs Units | 📍4.0.1 | FHIR Std. |
| Observation.component.dataAbsentReason | Base | extensible | DataAbsentReason | 📍4.0.1 | FHIR Std. |
| Id | Grade | Path(s) | Description | Expression |
| 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()
|
| ele-1 | error | **ALL** elements | All FHIR elements must have a @value or children |
hasValue() or (children().count() > id.count())
|
| ext-1 | error | **ALL** extensions | Must have either extensions or value[x], not both |
extension.exists() != value.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()
|
| vs-1 | error | Observation.effective[x] | if Observation.effective[x] is dateTime and has a value then that value shall be precise to the day |
$this is dateTime implies $this.toString().length() >= 10
|
| vs-2 | error | Observation | If there is no component or hasMember element then either a value[x] or a data absent reason must be present. |
(component.empty() and hasMember.empty()) implies (dataAbsentReason.exists() or value.exists())
|
| vs-3 | error | Observation.component | If there is no a value a data absent reason must be present |
value.exists() or dataAbsentReason.exists()
|
Differential View
This structure is derived from observation-vitalsigns
| Name | Flags | Card. | Type | Description & Constraints Filter: ![]() ![]() |
|---|---|---|---|---|
![]() |
0..* | observation-vitalsigns | FHIR Vital Signs Profile | |
![]() ![]() |
1..1 | id | Logical id of this artifact | |
![]() ![]() |
1..1 | CodeableConcept | Specific vital sign being observed Binding: VitalSigns (required) | |
![]() ![]() |
1..1 | Reference(Eswatini Patient Profile) | Patient related to the vitals being recorded | |
![]() ![]() |
1..1 | Reference(Eswatini Encounter Profile) | Visit related to the vitals being recorded | |
![]() ![]() |
1..1 | dateTime | Date and time when the vital sign was observed | |
![]() ![]() |
1..1 | Vital Signs value are recorded using the Quantity data type. For supporting observations such as Cuff size could use other datatypes such as CodeableConcept. | ||
![]() ![]() ![]() |
Quantity | |||
![]() ![]() ![]() |
string | |||
![]() ![]() ![]() |
integer | |||
Documentation for this format | ||||
| Path | Status | Usage | ValueSet | Version | Source |
| Observation.code | Base | required | Vital Signs | 📦4.0.1 | FHIR Std. |
Snapshot View
| Name | Flags | Card. | Type | Description & Constraints Filter: ![]() ![]() | ||||
|---|---|---|---|---|---|---|---|---|
![]() |
C | 0..* | observation-vitalsigns | FHIR Vital Signs Profile Constraints: obs-6, obs-7, vs-2 | ||||
![]() ![]() |
Σ | 1..1 | id | Logical id of this artifact | ||||
![]() ![]() |
Σ | 0..1 | Meta | Metadata about the resource | ||||
![]() ![]() |
?!Σ | 0..1 | uri | A set of rules under which this content was created | ||||
![]() ![]() |
0..1 | code | Language of the resource content Binding: CommonLanguages (preferred): A human language.
| |||||
![]() ![]() |
0..1 | Narrative | Text summary of the resource, for human interpretation This profile does not constrain the narrative in regard to content, language, or traceability to data elements | |||||
![]() ![]() |
0..* | Resource | Contained, inline Resources | |||||
![]() ![]() |
0..* | Extension | Additional content defined by implementations | |||||
![]() ![]() |
?! | 0..* | Extension | Extensions that cannot be ignored | ||||
![]() ![]() |
Σ | 0..* | Identifier | Business Identifier for observation | ||||
![]() ![]() |
Σ | 0..* | Reference(CarePlan | DeviceRequest | ImmunizationRecommendation | MedicationRequest | NutritionOrder | ServiceRequest) | Fulfills plan, proposal or order | ||||
![]() ![]() |
Σ | 0..* | Reference(MedicationAdministration | MedicationDispense | MedicationStatement | Procedure | Immunization | ImagingStudy) | Part of referenced event | ||||
![]() ![]() |
?!SΣ | 1..1 | code | registered | preliminary | final | amended + Binding: ObservationStatus (required) | ||||
![]() ![]() |
S | 1..* | CodeableConcept | Classification of type of observation Slice: Unordered, Open by value:coding.code, value:coding.system Binding: ObservationCategoryCodes (preferred): Codes for high level observation categories. | ||||
![]() ![]() ![]() |
S | 1..1 | CodeableConcept | Classification of type of observation Binding: ObservationCategoryCodes (preferred): Codes for high level observation categories. | ||||
![]() ![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |||||
![]() ![]() ![]() ![]() |
0..* | Extension | Additional content defined by implementations Slice: Unordered, Open by value:url | |||||
![]() ![]() ![]() ![]() |
SΣ | 1..* | Coding | Code defined by a terminology system | ||||
![]() ![]() ![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |||||
![]() ![]() ![]() ![]() ![]() |
0..* | Extension | Additional content defined by implementations Slice: Unordered, Open by value:url | |||||
![]() ![]() ![]() ![]() ![]() |
SΣ | 1..1 | uri | Identity of the terminology system Fixed Value: http://terminology.hl7.org/CodeSystem/observation-category | ||||
![]() ![]() ![]() ![]() ![]() |
Σ | 0..1 | string | Version of the system - if relevant | ||||
![]() ![]() ![]() ![]() ![]() |
SΣ | 1..1 | code | Symbol in syntax defined by the system Fixed Value: vital-signs | ||||
![]() ![]() ![]() ![]() ![]() |
Σ | 0..1 | string | Representation defined by the system | ||||
![]() ![]() ![]() ![]() ![]() |
Σ | 0..1 | boolean | If this coding was chosen directly by the user | ||||
![]() ![]() ![]() ![]() |
Σ | 0..1 | string | Plain text representation of the concept | ||||
![]() ![]() |
SΣ | 1..1 | CodeableConcept | Specific vital sign being observed Binding: VitalSigns (required) | ||||
![]() ![]() |
SΣ | 1..1 | Reference(Eswatini Patient Profile) | Patient related to the vitals being recorded | ||||
![]() ![]() |
Σ | 0..* | Reference(Resource) | What the observation is about, when it is not about the subject of record | ||||
![]() ![]() |
Σ | 1..1 | Reference(Eswatini Encounter Profile) | Visit related to the vitals being recorded | ||||
![]() ![]() |
SΣC | 1..1 | dateTime | Date and time when the vital sign was observed Constraints: vs-1 | ||||
![]() ![]() |
Σ | 0..1 | instant | Date/Time this version was made available | ||||
![]() ![]() |
Σ | 0..* | Reference(Practitioner | PractitionerRole | Organization | CareTeam | Patient | RelatedPerson) | Who is responsible for the observation | ||||
![]() ![]() |
SΣC | 1..1 | Vital Signs value are recorded using the Quantity data type. For supporting observations such as Cuff size could use other datatypes such as CodeableConcept. | |||||
![]() ![]() ![]() |
Quantity | |||||||
![]() ![]() ![]() |
string | |||||||
![]() ![]() ![]() |
integer | |||||||
![]() ![]() |
SC | 0..1 | CodeableConcept | Why the result is missing Binding: DataAbsentReason (extensible): Codes specifying why the result (Observation.value[x]) is missing. | ||||
![]() ![]() |
0..* | CodeableConcept | High, low, normal, etc. Binding: ObservationInterpretationCodes (extensible): Codes identifying interpretations of observations. | |||||
![]() ![]() |
0..* | Annotation | Comments about the observation | |||||
![]() ![]() |
0..1 | CodeableConcept | Observed body part Binding: SNOMEDCTBodyStructures (example): Codes describing anatomical locations. May include laterality. | |||||
![]() ![]() |
0..1 | CodeableConcept | How it was done Binding: ObservationMethods (example): Methods for simple observations. | |||||
![]() ![]() |
0..1 | Reference(Specimen) | Specimen used for this observation | |||||
![]() ![]() |
0..1 | Reference(Device | DeviceMetric) | (Measurement) Device | |||||
![]() ![]() |
C | 0..* | BackboneElement | Provides guide for interpretation Constraints: obs-3 | ||||
![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |||||
![]() ![]() ![]() |
0..* | Extension | Additional content defined by implementations | |||||
![]() ![]() ![]() |
?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized | ||||
![]() ![]() ![]() |
C | 0..1 | SimpleQuantity(4.0.1) | Low Range, if relevant | ||||
![]() ![]() ![]() |
C | 0..1 | SimpleQuantity(4.0.1) | High Range, if relevant | ||||
![]() ![]() ![]() |
0..1 | CodeableConcept | Reference range qualifier Binding: ObservationReferenceRangeMeaningCodes (preferred): Code for the meaning of a reference range. | |||||
![]() ![]() ![]() |
0..* | CodeableConcept | Reference range population Binding: ObservationReferenceRangeAppliesToCodes (example): Codes identifying the population the reference range applies to. | |||||
![]() ![]() ![]() |
0..1 | Range | Applicable age range, if relevant | |||||
![]() ![]() ![]() |
0..1 | string | Text based reference range in an observation | |||||
![]() ![]() |
Σ | 0..* | Reference(QuestionnaireResponse | MolecularSequence | Vital Signs Profile) | Used when reporting vital signs panel components | ||||
![]() ![]() |
Σ | 0..* | Reference(DocumentReference | ImagingStudy | Media | QuestionnaireResponse | MolecularSequence | Vital Signs Profile) | Related measurements the observation is made from | ||||
![]() ![]() |
SΣC | 0..* | BackboneElement | Used when reporting systolic and diastolic blood pressure. Constraints: vs-3 | ||||
![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |||||
![]() ![]() ![]() |
0..* | Extension | Additional content defined by implementations | |||||
![]() ![]() ![]() |
?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized | ||||
![]() ![]() ![]() |
SΣ | 1..1 | CodeableConcept | Type of component observation (code / type) Binding: VitalSigns (extensible): This identifies the vital sign result type. | ||||
![]() ![]() ![]() |
SΣC | 0..1 | Vital Sign Value recorded with UCUM Binding: VitalSignsUnits (extensible): Common UCUM units for recording Vital Signs. | |||||
![]() ![]() ![]() ![]() |
Quantity | |||||||
![]() ![]() ![]() ![]() |
CodeableConcept | |||||||
![]() ![]() ![]() ![]() |
string | |||||||
![]() ![]() ![]() ![]() |
boolean | |||||||
![]() ![]() ![]() ![]() |
integer | |||||||
![]() ![]() ![]() ![]() |
Range | |||||||
![]() ![]() ![]() ![]() |
Ratio | |||||||
![]() ![]() ![]() ![]() |
SampledData | |||||||
![]() ![]() ![]() ![]() |
time | |||||||
![]() ![]() ![]() ![]() |
dateTime | |||||||
![]() ![]() ![]() ![]() |
Period | |||||||
![]() ![]() ![]() |
SC | 0..1 | CodeableConcept | Why the component result is missing Binding: DataAbsentReason (extensible): Codes specifying why the result (Observation.value[x]) is missing. | ||||
![]() ![]() ![]() |
0..* | CodeableConcept | High, low, normal, etc. Binding: ObservationInterpretationCodes (extensible): Codes identifying interpretations of observations. | |||||
![]() ![]() ![]() |
0..* | See referenceRange (Observation) | Provides guide for interpretation of component result | |||||
Documentation for this format | ||||||||
| Path | Status | Usage | ValueSet | Version | Source |
| Observation.language | Base | preferred | Common Languages | 📍4.0.1 | FHIR Std. |
| Observation.status | Base | required | ObservationStatus | 📍4.0.1 | FHIR Std. |
| Observation.category | Base | preferred | Observation Category Codes | 📍4.0.1 | FHIR Std. |
| Observation.category:VSCat | Base | preferred | Observation Category Codes | 📍4.0.1 | FHIR Std. |
| Observation.code | Base | required | Vital Signs | 📦4.0.1 | FHIR Std. |
| Observation.dataAbsentReason | Base | extensible | DataAbsentReason | 📍4.0.1 | FHIR Std. |
| Observation.interpretation | Base | extensible | Observation Interpretation Codes | 📍4.0.1 | FHIR Std. |
| Observation.bodySite | Base | example | SNOMED CT Body Structures | 📍4.0.1 | FHIR Std. |
| Observation.method | Base | example | Observation Methods | 📍4.0.1 | FHIR Std. |
| Observation.referenceRange.type | Base | preferred | Observation Reference Range Meaning Codes | 📍4.0.1 | FHIR Std. |
| Observation.referenceRange.appliesTo | Base | example | Observation Reference Range Applies To Codes | 📍4.0.1 | FHIR Std. |
| Observation.component.code | Base | extensible | Vital Signs | 📍4.0.1 | FHIR Std. |
| Observation.component.value[x] | Base | extensible | Vital Signs Units | 📍4.0.1 | FHIR Std. |
| Observation.component.dataAbsentReason | Base | extensible | DataAbsentReason | 📍4.0.1 | FHIR Std. |
| Observation.component.interpretation | Base | extensible | Observation Interpretation Codes | 📍4.0.1 | FHIR Std. |
| Id | Grade | Path(s) | Description | Expression |
| 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()
|
| ele-1 | error | **ALL** elements | All FHIR elements must have a @value or children |
hasValue() or (children().count() > id.count())
|
| ext-1 | error | **ALL** extensions | Must have either extensions or value[x], not both |
extension.exists() != value.exists()
|
| obs-3 | error | Observation.referenceRange | Must have at least a low or a high or text |
low.exists() or high.exists() or text.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()
|
| vs-1 | error | Observation.effective[x] | if Observation.effective[x] is dateTime and has a value then that value shall be precise to the day |
$this is dateTime implies $this.toString().length() >= 10
|
| vs-2 | error | Observation | If there is no component or hasMember element then either a value[x] or a data absent reason must be present. |
(component.empty() and hasMember.empty()) implies (dataAbsentReason.exists() or value.exists())
|
| vs-3 | error | Observation.component | If there is no a value a data absent reason must be present |
value.exists() or dataAbsentReason.exists()
|
This structure is derived from observation-vitalsigns
Other representations of profile: CSV, Excel, Schematron
The profile constrains the base Observation resource to ensure capture of essential vital signs information, including:
Observation status, indicating the state of the measurement Vital sign code, identifying what was measured Subject (Patient) who was measured Effective date/time, indicating when the measurement was taken Measurement value and units, recorded in a standardized manner
These elements ensure vital signs data is accurate, traceable, and clinically reliable.
This profile is designed to:
Conform to HL7 FHIR R4 Observation and Vital Signs conventions Support interoperability within the Eswatini National HIE Enable consistent exchange of vital signs data across clinical systems Support national reporting, analytics, and quality‑of‑care monitoring
Standardized vital signs data enables meaningful clinical interpretation and safe information sharing across care settings.
Systems claiming conformance to this profile SHALL:
Populate all required and Must Support elements defined by the profile Ensure vital signs measurements are recorded accurately and with appropriate units Maintain correct observation status and timing
Optional elements from the base Observation resource may be used where relevant, provided they do not conflict with the constraints defined in this profile.
The Eswatini Vital Signs Profile supports extensibility through standard FHIR mechanisms. Additional vital sign‑related data—such as programme‑specific indicators or locally required measurements—may be introduced using FHIR extensions, subject to national governance and approval.
The Eswatini Vital Signs Profile provides a standardized and interoperable representation of core physiological measurements, forming a critical component of patient assessment and clinical documentation. Adoption of this profile improves data consistency, supports continuity of care, and enhances interoperability across healthcare systems throughout the Kingdom of Eswatini.