WHO Digital Documentation of COVID-19 Certificates (DDCC)
1.0.0 - CI Build International flag

WHO Digital Documentation of COVID-19 Certificates (DDCC), published by WHO. This guide is not an authorized publication; it is the continuous build for version 1.0.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/WorldHealthOrganization/ddcc/tree/main and changes regularly. See the Directory of published versions

Resource Profile: DDCC Observation

Official URL: http://smart.who.int/ddcc/StructureDefinition/DDCCObservation Version: 1.0.0
Draft as of 2025-03-10 Computable Name: DDCCObservation

A DDCC Observation contains the content corresponding to a row in the Test Events section of a Paper DDCC. While this is not a further profile of the International Patient Summary (IPS) Observation resouce, this is intended to map into an IPS Observation resource.

Usage:

Formal Views of Profile Content

Description of Profiles, Differentials, Snapshots and how the different presentations work.

NameFlagsCard.TypeDescription & Constraintsdoco
.. Observation C 0..* ObservationResultsLaboratoryUvIps Laboratory result for a simple test or for a panel/study
dom-2: If the resource is contained in another resource, it SHALL NOT contain nested Resources
dom-3: 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
dom-4: If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated
dom-5: If a resource is contained in another resource, it SHALL NOT have a security label
dom-6: A resource should have narrative for robust management
obs-6: dataAbsentReason SHALL only be present if Observation.value[x] is not present
obs-7: If Observation.code is the same as an Observation.component.code then the value element associated with the code SHALL NOT be present
ips-2: if no "hasMember" element is present then Observation must have a" value"
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
ele-1: All FHIR elements must have a @value or children
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
ele-1: All FHIR elements must have a @value or children
ext-1: Must have either extensions or value[x], not both
... status ?!Σ 1..1 code registered | preliminary | final | amended +
Binding: ObservationStatus (required): Codes providing the status of an observation.


ele-1: All FHIR elements must have a @value or children
Fixed Value: final
.... coding 1..* Coding Code defined by a terminology system
Fixed Value: (complex)
..... system 1..1 uri Identity of the terminology system
Fixed Value: http://terminology.hl7.org/CodeSystem/observation-category
..... code 1..1 code Symbol in syntax defined by the system
Fixed Value: laboratory
.... category:laboratory S 1..1 CodeableConceptIPS Concept - reference to a terminology or just text
Binding: ObservationCategoryCodes (preferred): Codes for high level observation categories.


ele-1: All FHIR elements must have a @value or children

Required Pattern: At least the following
..... coding 1..* Coding Code defined by a terminology system
Fixed Value: (complex)
...... system 1..1 uri Identity of the terminology system
Fixed Value: http://terminology.hl7.org/CodeSystem/observation-category
...... code 1..1 code Symbol in syntax defined by the system
Fixed Value: laboratory
... code S 1..1 CodeableConceptIPS Concept - reference to a terminology or just text
Binding: Results Laboratory Observation - IPS (preferred)
ele-1: All FHIR elements must have a @value or children
... subject SΣ 1..1 Reference(Patient (IPS) | Group | Device | Location) Who and/or what the observation is about
ele-1: All FHIR elements must have a @value or children
.... reference SΣC 1..1 string Literal reference, Relative, internal or absolute URL
ele-1: All FHIR elements must have a @value or children
... effective[x] SΣ 1..1 dateTime Clinically relevant time/time-period for observation
ele-1: All FHIR elements must have a @value or children
.... Slices for extension Content/Rules for all slices
..... extension:data-absent-reason S 0..1 code effective[x] absence reason
URL: http://hl7.org/fhir/StructureDefinition/data-absent-reason
Binding: DataAbsentReason (required)
ele-1: All FHIR elements must have a @value or children
ext-1: Must have either extensions or value[x], not both
... performer SΣ 1..* Reference(Practitioner (IPS) | PractitionerRole (IPS) | Organization (IPS) | CareTeam | Patient (IPS) | RelatedPerson) Who is responsible for the observation
ele-1: All FHIR elements must have a @value or children
... Slices for value[x] SΣC 1..1 CodeableConcept Actual result
Slice: Unordered, Closed by type:$this
ele-1: All FHIR elements must have a @value or children
.... value[x]:valueString SΣC 0..1 string Actual result
ele-1: All FHIR elements must have a @value or children
.... value[x]:valueRange SC 0..1 RangeIPS Set of values bounded by low and high
ele-1: All FHIR elements must have a @value or children
rng-2: If present, low SHALL have a lower value than high
.... value[x]:valueRatio SC 0..1 RatioIPS A ratio of two Quantity values - a numerator and a denominator
ele-1: All FHIR elements must have a @value or children
rat-1: Numerator and denominator SHALL both be present, or both are absent. If both are absent, there SHALL be some extension present
.... value[x]:valueTime SΣC 0..1 time Actual result
ele-1: All FHIR elements must have a @value or children
.... value[x]:valueDateTime SΣC 0..1 dateTime Actual result
ele-1: All FHIR elements must have a @value or children
.... value[x]:valuePeriod SΣC 0..1 Period Actual result
ele-1: All FHIR elements must have a @value or children
.... value[x]:valueQuantity SC 0..1 QuantityIPS A measured amount using UCUM
ele-1: All FHIR elements must have a @value or children
qty-3: If a code for the unit is present, the system SHALL also be present
.... value[x]:valueCodeableConcept S 0..1 CodeableConceptIPS Concept - reference to a terminology or just text
Binding: Results Coded Values Laboratory - IPS (preferred)
Additional BindingsPurpose
Results Blood Group - SNOMED CT IPS Free Set candidate
Results Presence Absence - SNOMED CT IPS Free Set candidate
Results Microorganism - SNOMED CT IPS Free Set candidate

ele-1: All FHIR elements must have a @value or children
... method S 0..1 CodeableConcept How it was done
Binding: WHO Speciman Sample Origin (COVID-19) (required)
ele-1: All FHIR elements must have a @value or children
... component SΣ 0..* BackboneElement Component results
ele-1: All FHIR elements must have a @value or children
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
ele-1: All FHIR elements must have a @value or children
ext-1: Must have either extensions or value[x], not both
.... code Σ 1..1 CodeableConcept Type of component observation (code / type)
Binding: LOINCCodes (example): Codes identifying names of simple observations.


ele-1: All FHIR elements must have a @value or children

doco Documentation for this format

Terminology Bindings

PathConformanceValueSet / CodeURI
Observation.statusrequiredFixed Value: final
http://hl7.org/fhir/ValueSet/observation-status|4.0.1
from the FHIR Standard
Observation.categorypreferredPattern: laboratory
http://hl7.org/fhir/ValueSet/observation-category
from the FHIR Standard
Observation.category:laboratorypreferredPattern: laboratory
http://hl7.org/fhir/ValueSet/observation-category
from the FHIR Standard
Observation.codepreferredResultsLaboratoryObservationUvIps
http://hl7.org/fhir/uv/ips/ValueSet/results-laboratory-observations-uv-ips
Observation.value[x]:valueCodeableConceptpreferredResultsCodedValuesLaboratoryUvIps
http://hl7.org/fhir/uv/ips/ValueSet/results-coded-values-laboratory-uv-ips
Observation.methodrequiredWHODDCCSampleOriginCOVID19
http://smart.who.int/ddcc/ValueSet/WHODDCCSampleOriginCOVID19
from this IG
Observation.component.codeexampleLOINCCodes (a valid code from LOINC)
http://hl7.org/fhir/ValueSet/observation-codes
from the FHIR Standard

Constraints

IdGradePath(s)DetailsRequirements
dom-2errorObservationIf the resource is contained in another resource, it SHALL NOT contain nested Resources
: contained.contained.empty()
dom-3errorObservationIf 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-4errorObservationIf 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-5errorObservationIf a resource is contained in another resource, it SHALL NOT have a security label
: contained.meta.security.empty()
dom-6best practiceObservationA resource should have narrative for robust management
: text.`div`.exists()
ele-1error**ALL** elementsAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ext-1error**ALL** extensionsMust have either extensions or value[x], not both
: extension.exists() != value.exists()
ips-2errorObservationif no "hasMember" element is present then Observation must have a" value"
: value.exists() or hasMember.exists()
obs-6errorObservationdataAbsentReason SHALL only be present if Observation.value[x] is not present
: dataAbsentReason.empty() or value.empty()
obs-7errorObservationIf 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()
qty-3errorObservation.value[x]:valueQuantityIf a code for the unit is present, the system SHALL also be present
: code.empty() or system.exists()
rat-1errorObservation.value[x]:valueRatioNumerator and denominator SHALL both be present, or both are absent. If both are absent, there SHALL be some extension present
: (numerator.empty() xor denominator.exists()) and (numerator.exists() or extension.exists())
rng-2errorObservation.value[x]:valueRangeIf present, low SHALL have a lower value than high
: low.empty() or high.empty() or (low <= high)

 

Other representations of profile: CSV, Excel, Schematron