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: DDCCComposition - Detailed Descriptions

Draft as of 2025-03-10

Definitions for the DDCCComposition resource profile.

Guidance on how to interpret the contents of this table can be found here

0. Composition
Definition

A set of healthcare-related information that is assembled together into a single logical package that provides a single coherent statement of meaning, establishes its own context and that has clinical attestation with regard to who is making the statement. A Composition defines the structure and narrative content necessary for a document. However, a Composition alone does not constitute a document. Rather, the Composition must be the first entry in a Bundle where Bundle.type=document, and any other resources referenced from Composition must be included as subsequent entries in the Bundle (for example Patient, Practitioner, Encounter, etc.).

ShortA set of resources composed into a single coherent clinical statement with clinical attestation
Comments

While the focus of this specification is on patient-specific clinical statements, this resource can also apply to other healthcare-related statements such as study protocol designs, healthcare invoices and other activities that are not necessarily patient-specific or clinical.

Control0..*
Is Modifierfalse
Summaryfalse
Invariantsdom-2: If the resource is contained in another resource, it SHALL NOT contain nested Resources (contained.contained.empty())
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 (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: 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: If a resource is contained in another resource, it SHALL NOT have a security label (contained.meta.security.empty())
dom-6: A resource should have narrative for robust management (text.`div`.exists())
2. Composition.implicitRules
Definition

A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.

ShortA set of rules under which this content was created
Comments

Asserting this rule set restricts the content to be only understood by a limited set of trading partners. This inherently limits the usefulness of the data in the long term. However, the existing health eco-system is highly fractured, and not yet ready to define, collect, and exchange data in a generally computable sense. Wherever possible, implementers and/or specification writers should avoid using this element. Often, when used, the URL is a reference to an implementation guide that defines these special rules as part of it's narrative along with other profiles, value sets, etc.

Control0..1
Typeuri
Is Modifiertrue because This element is labeled as a modifier because the implicit rules may provide additional knowledge about the resource that modifies it's meaning or interpretation
Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
Summarytrue
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
4. Composition.modifierExtension
Definition

May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.

Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).

ShortExtensions that cannot be ignored
Comments

There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.

Control0..*
TypeExtension
Is Modifiertrue because Modifier extensions are expected to modify the meaning or interpretation of the resource that contains them
Summaryfalse
Requirements

Modifier extensions allow for extensions that cannot be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the definition of modifier extensions.

Alternate Namesextensions, user content
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
6. Composition.identifier
Definition

A version-independent identifier for the Composition. This identifier stays constant as the composition is changed over time.

ShortVersion-independent identifier for the Composition
Comments

Similar to ClinicalDocument/setId in CDA. See discussion in resource definition for how these relate.

NoteThis is a business identifier, not a resource identifier (see discussion)
Control10..1
TypeIdentifier
Is Modifierfalse
Must Supporttrue
Summarytrue
LabelCertificate Identifier
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
8. Composition.identifier.use
Definition

The purpose of this identifier.

Shortusual | official | temp | secondary | old (If known)
Comments

Applications can assume that an identifier is permanent unless it explicitly says that it is temporary.

Control0..1
BindingThe codes SHALL be taken from IdentifierUsehttp://hl7.org/fhir/ValueSet/identifier-use|4.0.1
(required to http://hl7.org/fhir/ValueSet/identifier-use|4.0.1)

Identifies the purpose for this identifier, if known .

Typecode
Is Modifiertrue because This is labeled as "Is Modifier" because applications should not mistake a temporary id for a permanent one.
Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
Summarytrue
Requirements

Allows the appropriate identifier for a particular context of use to be selected from among a set of identifiers.

Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
10. Composition.identifier.system
Definition

Establishes the namespace for the value - that is, a URL that describes a set values that are unique.

ShortThe namespace for the identifier value
Comments

Identifier.system is always case sensitive.

Control10..1
Typeuri
Is Modifierfalse
Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
Must Supporttrue
Summarytrue
Requirements

There are many sets of identifiers. To perform matching of two identifiers, we need to know what set we're dealing with. The system identifies a particular set of unique identifiers.

Example<br/><b>General</b>:http://www.acme.com/identifiers/patient
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
12. Composition.identifier.value
Definition

The portion of the identifier typically relevant to the user and which is unique within the context of the system.

ShortThe value that is unique
Comments

If the value is a full URI, then the system SHALL be urn:ietf:rfc:3986. The value's primary purpose is computational mapping. As a result, it may be normalized for comparison purposes (e.g. removing non-significant whitespace, dashes, etc.) A value formatted for human display can be conveyed using the Rendered Value extension. Identifier.value is to be treated as case sensitive unless knowledge of the Identifier.system allows the processer to be confident that non-case-sensitive processing is safe.

Control10..1
Typestring
Is Modifierfalse
Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
Must Supporttrue
Summarytrue
Example<br/><b>General</b>:123456
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
14. Composition.status
Definition

The workflow/clinical status of this composition. The status is a marker for the clinical standing of the document.

Shortpreliminary | final | amended | entered-in-error
Comments

If a composition is marked as withdrawn, the compositions/documents in the series, or data from the composition or document series, should never be displayed to a user without being clearly marked as untrustworthy. The flag "entered-in-error" is why this element is labeled as a modifier of other elements.

Some reporting work flows require that the original narrative of a final document never be altered; instead, only new narrative can be added. The composition resource has no explicit status for explicitly noting whether this business rule is in effect. This would be handled by an extension if required.

Control1..1
BindingThe codes SHALL be taken from CompositionStatushttp://hl7.org/fhir/ValueSet/composition-status|4.0.1
(required to http://hl7.org/fhir/ValueSet/composition-status|4.0.1)

The workflow/clinical status of the composition.

Typecode
Is Modifiertrue because This element is labelled as a modifier because it is a status element that contains status entered-in-error which means that the resource should not be treated as valid
Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
Must Supporttrue
Summarytrue
Requirements

Need to be able to mark interim, amended, or withdrawn compositions or documents.

Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
16. Composition.type
Definition

Specifies that this composition refers to a DDCC


Specifies the particular kind of composition (e.g. History and Physical, Discharge Summary, Progress Note). This usually equates to the purpose of making the composition.

ShortKind of composition ("DDCC")Kind of composition (LOINC if possible)
Comments

For Composition type, LOINC is ubiquitous and strongly endorsed by HL7. Most implementation guides will require a specific LOINC code, or use LOINC as an extensible binding.

Control1..1
BindingThe codes SHOULD be taken from FHIRDocumentTypeCodeshttp://hl7.org/fhir/ValueSet/doc-typecodes
(preferred to http://hl7.org/fhir/ValueSet/doc-typecodes)

Type of a composition.

TypeCodeableConcept
Is Modifierfalse
Summarytrue
Requirements

Key metadata element describing the composition, used in searching/filtering.

Pattern Value{
  "coding" : [{
    "system" : "http://loinc.org",
    "code" : "82593-5"
  }]
}
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
18. Composition.subject
Definition

Who or what the composition is about. The composition can be about a person, (patient or healthcare practitioner), a device (e.g. a machine) or even a group of subjects (such as a document about a herd of livestock, or a set of patients that share a common exposure).

ShortWho and/or what the composition is about
Comments

For clinical documents, this is usually the patient.

Control10..1
TypeReference(DDCC Patient, Resource)
Is Modifierfalse
Must Supporttrue
Summarytrue
Requirements

Essential metadata for searching for the composition. Identifies who and/or what the composition/document is about.

Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
20. Composition.subject.reference
Definition

A reference to a location at which the other resource is found. The reference may be a relative reference, in which case it is relative to the service base URL, or an absolute URL that resolves to the location where the resource is found. The reference may be version specific or not. If the reference is not to a FHIR RESTful server, then it should be assumed to be version specific. Internal fragment references (start with '#') refer to contained resources.

ShortLiteral reference, Relative, internal or absolute URL
Comments

Using absolute URLs provides a stable scalable approach suitable for a cloud/web context, while using relative/logical references provides a flexible approach suitable for use when trading across closed eco-system boundaries. Absolute URLs do not need to point to a FHIR RESTful server, though this is the preferred approach. If the URL conforms to the structure "/[type]/[id]" then it should be assumed that the reference is to a FHIR RESTful server.

Control10..1
This element is affected by the following invariants: ref-1
Typestring
Is Modifierfalse
Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
Must Supporttrue
Summarytrue
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
22. Composition.date
Definition

The composition editing time, when the composition was last logically changed by the author.

ShortComposition editing time
Comments

The Last Modified Date on the composition may be after the date of the document was attested without being changed.

Control1..1
TypedateTime
Is Modifierfalse
Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
Summarytrue
Requirements

dateTime is used for tracking, organizing versions and searching. Note that this is the time of authoring. When packaged in a document, Bundle.timestamp is the date of packaging.


dateTime is used for tracking, organizing versions and searching. Note that this is the time of authoring. When packaged in a document, Bundle.timestamp is the date of packaging.

Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
24. Composition.author
Definition

Identifies who is responsible for the information in the composition, not necessarily who typed it in.

ShortWho and/or what authored the composition
Control1..*
TypeReference(Practitioner, PractitionerRole, Device, Patient, RelatedPerson, Organization)
Is Modifierfalse
Summarytrue
Requirements

Identifies who is responsible for the content.

Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
26. Composition.title
Definition

Official human-readable label for the composition.

ShortHuman Readable name/title
Comments

For many compositions, the title is the same as the text or a display name of Composition.type (e.g. a "consultation" or "progress note"). Note that CDA does not make title mandatory, but there are no known cases where it is useful for title to be omitted, so it is mandatory here. Feedback on this requirement is welcome during the trial use period.

Control1..1
Typestring
Is Modifierfalse
Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
Must Supporttrue
Summarytrue
Pattern ValueDigital Documentation of COVID-19 Certificate (DDCC)
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
28. Composition.attester
Definition

A participant who has attested to the accuracy of the composition/document.

ShortAttests to accuracy of composition
Comments

Only list each attester once.

Control10..1*
TypeBackboneElement
Is Modifierfalse
Must Supporttrue
Summaryfalse
Requirements

Identifies responsibility for the accuracy of the composition content.

Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
30. Composition.attester.modifierExtension
Definition

May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.

Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).

ShortExtensions that cannot be ignored even if unrecognized
Comments

There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.

Control0..*
TypeExtension
Is Modifiertrue because Modifier extensions are expected to modify the meaning or interpretation of the element that contains them
Summarytrue
Requirements

Modifier extensions allow for extensions that cannot be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the definition of modifier extensions.

Alternate Namesextensions, user content, modifiers
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
32. Composition.attester.mode
Definition

The type of attestation the authenticator offers.

Shortpersonal | professional | legal | official
Control1..1
BindingThe codes SHALL be taken from CompositionAttestationModehttp://hl7.org/fhir/ValueSet/composition-attestation-mode|4.0.1
(required to http://hl7.org/fhir/ValueSet/composition-attestation-mode|4.0.1)

The way in which a person authenticated a composition.

Typecode
Is Modifierfalse
Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
Summaryfalse
Requirements

Indicates the level of authority of the attestation.

Pattern Valueofficial
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
34. Composition.attester.party
Definition

Who attested the composition in the specified way.

ShortWho attested the composition
Control10..1
TypeReference(DDCC Organization, Patient, RelatedPerson, Practitioner, PractitionerRole, Organization)
Is Modifierfalse
Must Supporttrue
Summaryfalse
Requirements

Identifies who has taken on the responsibility for accuracy of the composition content.

LabelCertificate issuer
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
36. Composition.event
Definition

The clinical service, such as a colonoscopy or an appendectomy, being documented.

ShortThe clinical service(s) being documented
Comments

The event needs to be consistent with the type element, though can provide further information if desired.

Control0..1*
TypeBackboneElement
Is Modifierfalse
Summarytrue
Requirements

Provides context for the composition and creates a linkage between a resource describing an event and the composition created describing the event.

Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
38. Composition.event.modifierExtension
Definition

May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.

Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).

ShortExtensions that cannot be ignored even if unrecognized
Comments

There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.

Control0..*
TypeExtension
Is Modifiertrue because Modifier extensions are expected to modify the meaning or interpretation of the element that contains them
Summarytrue
Requirements

Modifier extensions allow for extensions that cannot be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the definition of modifier extensions.

Alternate Namesextensions, user content, modifiers
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())