SMART Health Cards: Vaccination & Testing Implementation Guide
1.0.0 - STU1 Release International flag

SMART Health Cards: Vaccination & Testing Implementation Guide, published by HL7 International / Public Health. 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/HL7/fhir-shc-vaccination-ig/ and changes regularly. See the Directory of published versions

Resource Profile: Infectious Disease (Generic) Laboratory Test Results Bundle - Allowable Data

Official URL: http://hl7.org/fhir/uv/shc-vaccination/StructureDefinition/shc-infectious-disease-laboratory-bundle-ad Version: 1.0.0
Draft as of 2023-12-27 Computable Name: SHCInfectiousDiseaseLaboratoryBundleAD

Defines a fallback (AD) profile representing a bundle of patient and generic infectious disease laboratory testing data for health cards.

See here for implementation details.

Start here!
Profile Group: Bundles

Description:

Defines the contents of the fhirBundle element in a SMART Health Card for a given use case.

Primary profile (DM) Fallback profile (AD) Scope of profile pair
Immunization Bundle Fallback Immunization for any infectious disease
COVID-19 Labs Bundle Fallback Lab results for COVID-19 only
Generic Labs Bundle Fallback Lab results for any infections disease
For more information about the types of profiles in this IG, see the profiles page.

Note! This is a fallback “allowable data” (AD) profile. Implementers should validate against the primary “data minimization” (DM) profile if possible.

Usage:

  • This Resource Profile is not used by any profiles in this Implementation Guide

Formal Views of Profile Content

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

This structure is derived from Bundle

NameFlagsCard.TypeDescription & Constraintsdoco
.. Bundle 0..*BundleContains a collection of resources
... id C0..1idShould be omitted
vc-should-be-omitted: SHOULD be omitted for data minimization.
... type S1..1codedocument | message | transaction | transaction-response | batch | batch-response | history | searchset | collection
Fixed Value: collection
... Slices for entry S2..*BackboneElementEntry in the bundle - will have a resource or information
Slice: Unordered, Closed by type:resource
.... entry:All Slices Content/Rules for all slices
..... id 0..1stringShould not be populated
..... fullUrl S1..1uriLocally unique identifier like resource:0
..... resource S0..1ResourceA resource in the bundle
.... entry:patient S1..1BackboneElementPatient
..... fullUrl SC1..1uriLocally unique identifier like resource:0
vc-shall-be-resource-uri: IDs SHALL use resource:# format
..... resource 1..1SHCPatientGeneralADInformation about an individual receiving an individual receiving a vaccination or infectious disease-related laboratory test
.... entry:labResult SC1..*BackboneElementLaboratory result
vc-bundle-lab-status-complete: Bundle SHALL only include results with status final or status that is subsequent to final.
..... fullUrl SC1..1uriLocally unique identifier like resource:0
vc-shall-be-resource-uri: IDs SHALL use resource:# format
..... resource 1..1SHCInfectiousDiseaseLaboratoryResultObservationADMeasurements and simple assertions

doco Documentation for this format

Constraints

IdGradePath(s)DetailsRequirements
vc-bundle-lab-status-completeerrorBundle.entry:labResultBundle SHALL only include results with status final or status that is subsequent to final.
: $this.resource.ofType(Observation).status.lower() in ('final'|'amended'|'corrected')
vc-shall-be-resource-urierrorBundle.entry:patient.fullUrl, Bundle.entry:labResult.fullUrlIDs SHALL use resource:# format
: $this.matches('^resource:[0-9]+$')
vc-should-be-omittedwarningBundle.idSHOULD be omitted for data minimization.
: $this.length() = 0
NameFlagsCard.TypeDescription & Constraintsdoco
.. Bundle C0..*BundleContains a collection of resources
... id ΣC0..1idShould be omitted
vc-should-be-omitted: SHOULD be omitted for data minimization.
... implicitRules ?!Σ0..1uriA set of rules under which this content was created
... type SΣ1..1codedocument | message | transaction | transaction-response | batch | batch-response | history | searchset | collection
Binding: BundleType (required): Indicates the purpose of a bundle - how it is intended to be used.


Fixed Value: collection
.... entry:All Slices Content/Rules for all slices
..... id 0..1stringShould not be populated
..... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
..... fullUrl SΣ1..1uriLocally unique identifier like resource:0
..... resource SΣ0..1ResourceA resource in the bundle
.... entry:patient SΣC1..1BackboneElementPatient
This repeating element order: For bundles of type 'document' and 'message', the first resource is special (must be Composition or MessageHeader respectively). For all bundles, the meaning of the order of entries depends on the bundle type
..... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
..... fullUrl SΣC1..1uriLocally unique identifier like resource:0
vc-shall-be-resource-uri: IDs SHALL use resource:# format
..... resource 1..1SHCPatientGeneralADInformation about an individual receiving an individual receiving a vaccination or infectious disease-related laboratory test
.... entry:labResult SΣC1..*BackboneElementLaboratory result
vc-bundle-lab-status-complete: Bundle SHALL only include results with status final or status that is subsequent to final.
This repeating element order: For bundles of type 'document' and 'message', the first resource is special (must be Composition or MessageHeader respectively). For all bundles, the meaning of the order of entries depends on the bundle type
..... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
..... fullUrl SΣC1..1uriLocally unique identifier like resource:0
vc-shall-be-resource-uri: IDs SHALL use resource:# format
..... resource C1..1SHCInfectiousDiseaseLaboratoryResultObservationADMeasurements and simple assertions

doco Documentation for this format

Terminology Bindings

PathConformanceValueSet / Code
Bundle.typerequiredFixed Value: collection

Constraints

IdGradePath(s)DetailsRequirements
bdl-1errorBundletotal only when a search or history
: total.empty() or (type = 'searchset') or (type = 'history')
bdl-2errorBundleentry.search only when a search
: entry.search.empty() or (type = 'searchset')
bdl-3errorBundleentry.request mandatory for batch/transaction/history, otherwise prohibited
: entry.all(request.exists() = (%resource.type = 'batch' or %resource.type = 'transaction' or %resource.type = 'history'))
bdl-4errorBundleentry.response mandatory for batch-response/transaction-response/history, otherwise prohibited
: entry.all(response.exists() = (%resource.type = 'batch-response' or %resource.type = 'transaction-response' or %resource.type = 'history'))
bdl-5errorBundle.entry, Bundle.entry:patient, Bundle.entry:labResultmust be a resource unless there's a request or response
: resource.exists() or request.exists() or response.exists()
bdl-7errorBundleFullUrl must be unique in a bundle, or else entries with the same fullUrl must have different meta.versionId (except in history bundles)
: (type = 'history') or entry.where(fullUrl.exists()).select(fullUrl&resource.meta.versionId).isDistinct()
bdl-8errorBundle.entry, Bundle.entry:patient, Bundle.entry:labResultfullUrl cannot be a version specific reference
: fullUrl.contains('/_history/').not()
bdl-9errorBundleA document must have an identifier with a system and a value
: type = 'document' implies (identifier.system.exists() and identifier.value.exists())
bdl-10errorBundleA document must have a date
: type = 'document' implies (timestamp.hasValue())
bdl-11errorBundleA document must have a Composition as the first resource
: type = 'document' implies entry.first().resource.is(Composition)
bdl-12errorBundleA message must have a MessageHeader as the first resource
: type = 'message' implies entry.first().resource.is(MessageHeader)
dom-2errorBundle.entry:patient.resource, Bundle.entry:labResult.resourceIf the resource is contained in another resource, it SHALL NOT contain nested Resources
: contained.contained.empty()
dom-3errorBundle.entry:patient.resource, Bundle.entry:labResult.resourceIf 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-4errorBundle.entry:patient.resource, Bundle.entry:labResult.resourceIf 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-5errorBundle.entry:patient.resource, Bundle.entry:labResult.resourceIf a resource is contained in another resource, it SHALL NOT have a security label
: contained.meta.security.empty()
dom-6best practiceBundle.entry:patient.resource, Bundle.entry:labResult.resourceA 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()
obs-6errorBundle.entry:labResult.resourcedataAbsentReason SHALL only be present if Observation.value[x] is not present
: dataAbsentReason.empty() or value.empty()
obs-7errorBundle.entry:labResult.resourceIf 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()
vc-bundle-lab-status-completeerrorBundle.entry:labResultBundle SHALL only include results with status final or status that is subsequent to final.
: $this.resource.ofType(Observation).status.lower() in ('final'|'amended'|'corrected')
vc-shall-be-resource-urierrorBundle.entry:patient.fullUrl, Bundle.entry:labResult.fullUrlIDs SHALL use resource:# format
: $this.matches('^resource:[0-9]+$')
vc-should-be-omittedwarningBundle.idSHOULD be omitted for data minimization.
: $this.length() = 0
NameFlagsCard.TypeDescription & Constraintsdoco
.. Bundle C0..*BundleContains a collection of resources
... id ΣC0..1idShould be omitted
vc-should-be-omitted: SHOULD be omitted for data minimization.
... meta Σ0..1MetaMetadata about the resource
... implicitRules ?!Σ0..1uriA set of rules under which this content was created
... identifier Σ0..1IdentifierPersistent identifier for the bundle
... type SΣ1..1codedocument | message | transaction | transaction-response | batch | batch-response | history | searchset | collection
Binding: BundleType (required): Indicates the purpose of a bundle - how it is intended to be used.


Fixed Value: collection
... timestamp Σ0..1instantWhen the bundle was assembled
... total ΣC0..1unsignedIntIf search, the total number of matches
... link Σ0..*BackboneElementLinks related to this Bundle
.... id 0..1stringUnique id for inter-element referencing
.... extension 0..*ExtensionAdditional content defined by implementations
.... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
.... relation Σ1..1stringSee http://www.iana.org/assignments/link-relations/link-relations.xhtml#link-relations-1
.... url Σ1..1uriReference details for the link
... Slices for entry SΣC2..*BackboneElementEntry in the bundle - will have a resource or information
Slice: Unordered, Closed by type:resource
This repeating element order: For bundles of type 'document' and 'message', the first resource is special (must be Composition or MessageHeader respectively). For all bundles, the meaning of the order of entries depends on the bundle type
.... entry:All Slices Content/Rules for all slices
..... id 0..1stringShould not be populated
..... extension 0..*ExtensionAdditional content defined by implementations
..... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
..... link Σ0..*See link (Bundle)Links related to this entry
..... fullUrl SΣ1..1uriLocally unique identifier like resource:0
..... resource SΣ0..1ResourceA resource in the bundle
..... search ΣC0..1BackboneElementSearch related information
...... id 0..1stringUnique id for inter-element referencing
...... extension 0..*ExtensionAdditional content defined by implementations
...... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
...... mode Σ0..1codematch | include | outcome - why this is in the result set
Binding: SearchEntryMode (required): Why an entry is in the result set - whether it's included as a match or because of an _include requirement, or to convey information or warning information about the search process.

...... score Σ0..1decimalSearch ranking (between 0 and 1)
..... request ΣC0..1BackboneElementAdditional execution information (transaction/batch/history)
...... id 0..1stringUnique id for inter-element referencing
...... extension 0..*ExtensionAdditional content defined by implementations
...... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
...... method Σ1..1codeGET | HEAD | POST | PUT | DELETE | PATCH
Binding: HTTPVerb (required): HTTP verbs (in the HTTP command line). See HTTP rfc for details.

...... url Σ1..1uriURL for HTTP equivalent of this entry
...... ifNoneMatch Σ0..1stringFor managing cache currency
...... ifModifiedSince Σ0..1instantFor managing cache currency
...... ifMatch Σ0..1stringFor managing update contention
...... ifNoneExist Σ0..1stringFor conditional creates
..... response ΣC0..1BackboneElementResults of execution (transaction/batch/history)
...... id 0..1stringUnique id for inter-element referencing
...... extension 0..*ExtensionAdditional content defined by implementations
...... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
...... status Σ1..1stringStatus response code (text optional)
...... location Σ0..1uriThe location (if the operation returns a location)
...... etag Σ0..1stringThe Etag for the resource (if relevant)
...... lastModified Σ0..1instantServer's date time modified
...... outcome Σ0..1ResourceOperationOutcome with hints and warnings (for batch/transaction)
.... entry:patient SΣC1..1BackboneElementPatient
This repeating element order: For bundles of type 'document' and 'message', the first resource is special (must be Composition or MessageHeader respectively). For all bundles, the meaning of the order of entries depends on the bundle type
..... id 0..1stringUnique id for inter-element referencing
..... extension 0..*ExtensionAdditional content defined by implementations
..... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
..... link Σ0..*See link (Bundle)Links related to this entry
..... fullUrl SΣC1..1uriLocally unique identifier like resource:0
vc-shall-be-resource-uri: IDs SHALL use resource:# format
..... resource 1..1SHCPatientGeneralADInformation about an individual receiving an individual receiving a vaccination or infectious disease-related laboratory test
..... search ΣC0..1BackboneElementSearch related information
...... id 0..1stringUnique id for inter-element referencing
...... extension 0..*ExtensionAdditional content defined by implementations
...... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
...... mode Σ0..1codematch | include | outcome - why this is in the result set
Binding: SearchEntryMode (required): Why an entry is in the result set - whether it's included as a match or because of an _include requirement, or to convey information or warning information about the search process.

...... score Σ0..1decimalSearch ranking (between 0 and 1)
..... request ΣC0..1BackboneElementAdditional execution information (transaction/batch/history)
...... id 0..1stringUnique id for inter-element referencing
...... extension 0..*ExtensionAdditional content defined by implementations
...... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
...... method Σ1..1codeGET | HEAD | POST | PUT | DELETE | PATCH
Binding: HTTPVerb (required): HTTP verbs (in the HTTP command line). See HTTP rfc for details.

...... url Σ1..1uriURL for HTTP equivalent of this entry
...... ifNoneMatch Σ0..1stringFor managing cache currency
...... ifModifiedSince Σ0..1instantFor managing cache currency
...... ifMatch Σ0..1stringFor managing update contention
...... ifNoneExist Σ0..1stringFor conditional creates
..... response ΣC0..1BackboneElementResults of execution (transaction/batch/history)
...... id 0..1stringUnique id for inter-element referencing
...... extension 0..*ExtensionAdditional content defined by implementations
...... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
...... status Σ1..1stringStatus response code (text optional)
...... location Σ0..1uriThe location (if the operation returns a location)
...... etag Σ0..1stringThe Etag for the resource (if relevant)
...... lastModified Σ0..1instantServer's date time modified
...... outcome Σ0..1ResourceOperationOutcome with hints and warnings (for batch/transaction)
.... entry:labResult SΣC1..*BackboneElementLaboratory result
vc-bundle-lab-status-complete: Bundle SHALL only include results with status final or status that is subsequent to final.
This repeating element order: For bundles of type 'document' and 'message', the first resource is special (must be Composition or MessageHeader respectively). For all bundles, the meaning of the order of entries depends on the bundle type
..... id 0..1stringUnique id for inter-element referencing
..... extension 0..*ExtensionAdditional content defined by implementations
..... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
..... link Σ0..*See link (Bundle)Links related to this entry
..... fullUrl SΣC1..1uriLocally unique identifier like resource:0
vc-shall-be-resource-uri: IDs SHALL use resource:# format
..... resource C1..1SHCInfectiousDiseaseLaboratoryResultObservationADMeasurements and simple assertions
..... search ΣC0..1BackboneElementSearch related information
...... id 0..1stringUnique id for inter-element referencing
...... extension 0..*ExtensionAdditional content defined by implementations
...... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
...... mode Σ0..1codematch | include | outcome - why this is in the result set
Binding: SearchEntryMode (required): Why an entry is in the result set - whether it's included as a match or because of an _include requirement, or to convey information or warning information about the search process.

...... score Σ0..1decimalSearch ranking (between 0 and 1)
..... request ΣC0..1BackboneElementAdditional execution information (transaction/batch/history)
...... id 0..1stringUnique id for inter-element referencing
...... extension 0..*ExtensionAdditional content defined by implementations
...... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
...... method Σ1..1codeGET | HEAD | POST | PUT | DELETE | PATCH
Binding: HTTPVerb (required): HTTP verbs (in the HTTP command line). See HTTP rfc for details.

...... url Σ1..1uriURL for HTTP equivalent of this entry
...... ifNoneMatch Σ0..1stringFor managing cache currency
...... ifModifiedSince Σ0..1instantFor managing cache currency
...... ifMatch Σ0..1stringFor managing update contention
...... ifNoneExist Σ0..1stringFor conditional creates
..... response ΣC0..1BackboneElementResults of execution (transaction/batch/history)
...... id 0..1stringUnique id for inter-element referencing
...... extension 0..*ExtensionAdditional content defined by implementations
...... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
...... status Σ1..1stringStatus response code (text optional)
...... location Σ0..1uriThe location (if the operation returns a location)
...... etag Σ0..1stringThe Etag for the resource (if relevant)
...... lastModified Σ0..1instantServer's date time modified
...... outcome Σ0..1ResourceOperationOutcome with hints and warnings (for batch/transaction)
... signature Σ0..1SignatureDigital Signature

doco Documentation for this format

Terminology Bindings

PathConformanceValueSet / Code
Bundle.languagepreferredCommonLanguages
Additional Bindings Purpose
AllLanguages Max Binding
Bundle.typerequiredFixed Value: collection
Bundle.entry.search.moderequiredSearchEntryMode
Bundle.entry.request.methodrequiredHTTPVerb
Bundle.entry:patient.search.moderequiredSearchEntryMode
Bundle.entry:patient.request.methodrequiredHTTPVerb
Bundle.entry:labResult.search.moderequiredSearchEntryMode
Bundle.entry:labResult.request.methodrequiredHTTPVerb

Constraints

IdGradePath(s)DetailsRequirements
bdl-1errorBundletotal only when a search or history
: total.empty() or (type = 'searchset') or (type = 'history')
bdl-2errorBundleentry.search only when a search
: entry.search.empty() or (type = 'searchset')
bdl-3errorBundleentry.request mandatory for batch/transaction/history, otherwise prohibited
: entry.all(request.exists() = (%resource.type = 'batch' or %resource.type = 'transaction' or %resource.type = 'history'))
bdl-4errorBundleentry.response mandatory for batch-response/transaction-response/history, otherwise prohibited
: entry.all(response.exists() = (%resource.type = 'batch-response' or %resource.type = 'transaction-response' or %resource.type = 'history'))
bdl-5errorBundle.entry, Bundle.entry:patient, Bundle.entry:labResultmust be a resource unless there's a request or response
: resource.exists() or request.exists() or response.exists()
bdl-7errorBundleFullUrl must be unique in a bundle, or else entries with the same fullUrl must have different meta.versionId (except in history bundles)
: (type = 'history') or entry.where(fullUrl.exists()).select(fullUrl&resource.meta.versionId).isDistinct()
bdl-8errorBundle.entry, Bundle.entry:patient, Bundle.entry:labResultfullUrl cannot be a version specific reference
: fullUrl.contains('/_history/').not()
bdl-9errorBundleA document must have an identifier with a system and a value
: type = 'document' implies (identifier.system.exists() and identifier.value.exists())
bdl-10errorBundleA document must have a date
: type = 'document' implies (timestamp.hasValue())
bdl-11errorBundleA document must have a Composition as the first resource
: type = 'document' implies entry.first().resource.is(Composition)
bdl-12errorBundleA message must have a MessageHeader as the first resource
: type = 'message' implies entry.first().resource.is(MessageHeader)
dom-2errorBundle.entry:patient.resource, Bundle.entry:labResult.resourceIf the resource is contained in another resource, it SHALL NOT contain nested Resources
: contained.contained.empty()
dom-3errorBundle.entry:patient.resource, Bundle.entry:labResult.resourceIf 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-4errorBundle.entry:patient.resource, Bundle.entry:labResult.resourceIf 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-5errorBundle.entry:patient.resource, Bundle.entry:labResult.resourceIf a resource is contained in another resource, it SHALL NOT have a security label
: contained.meta.security.empty()
dom-6best practiceBundle.entry:patient.resource, Bundle.entry:labResult.resourceA 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()
obs-6errorBundle.entry:labResult.resourcedataAbsentReason SHALL only be present if Observation.value[x] is not present
: dataAbsentReason.empty() or value.empty()
obs-7errorBundle.entry:labResult.resourceIf 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()
vc-bundle-lab-status-completeerrorBundle.entry:labResultBundle SHALL only include results with status final or status that is subsequent to final.
: $this.resource.ofType(Observation).status.lower() in ('final'|'amended'|'corrected')
vc-shall-be-resource-urierrorBundle.entry:patient.fullUrl, Bundle.entry:labResult.fullUrlIDs SHALL use resource:# format
: $this.matches('^resource:[0-9]+$')
vc-should-be-omittedwarningBundle.idSHOULD be omitted for data minimization.
: $this.length() = 0

This structure is derived from Bundle

Summary

Mandatory: 7 elements
Must-Support: 8 elements
Fixed Value: 1 element

Structures

This structure refers to these other structures:

Slices

This structure defines the following Slices:

  • The element Bundle.entry is sliced based on the value of type:resource (Closed)

Differential View

This structure is derived from Bundle

NameFlagsCard.TypeDescription & Constraintsdoco
.. Bundle 0..*BundleContains a collection of resources
... id C0..1idShould be omitted
vc-should-be-omitted: SHOULD be omitted for data minimization.
... type S1..1codedocument | message | transaction | transaction-response | batch | batch-response | history | searchset | collection
Fixed Value: collection
... Slices for entry S2..*BackboneElementEntry in the bundle - will have a resource or information
Slice: Unordered, Closed by type:resource
.... entry:All Slices Content/Rules for all slices
..... id 0..1stringShould not be populated
..... fullUrl S1..1uriLocally unique identifier like resource:0
..... resource S0..1ResourceA resource in the bundle
.... entry:patient S1..1BackboneElementPatient
..... fullUrl SC1..1uriLocally unique identifier like resource:0
vc-shall-be-resource-uri: IDs SHALL use resource:# format
..... resource 1..1SHCPatientGeneralADInformation about an individual receiving an individual receiving a vaccination or infectious disease-related laboratory test
.... entry:labResult SC1..*BackboneElementLaboratory result
vc-bundle-lab-status-complete: Bundle SHALL only include results with status final or status that is subsequent to final.
..... fullUrl SC1..1uriLocally unique identifier like resource:0
vc-shall-be-resource-uri: IDs SHALL use resource:# format
..... resource 1..1SHCInfectiousDiseaseLaboratoryResultObservationADMeasurements and simple assertions

doco Documentation for this format

Constraints

IdGradePath(s)DetailsRequirements
vc-bundle-lab-status-completeerrorBundle.entry:labResultBundle SHALL only include results with status final or status that is subsequent to final.
: $this.resource.ofType(Observation).status.lower() in ('final'|'amended'|'corrected')
vc-shall-be-resource-urierrorBundle.entry:patient.fullUrl, Bundle.entry:labResult.fullUrlIDs SHALL use resource:# format
: $this.matches('^resource:[0-9]+$')
vc-should-be-omittedwarningBundle.idSHOULD be omitted for data minimization.
: $this.length() = 0

Key Elements View

NameFlagsCard.TypeDescription & Constraintsdoco
.. Bundle C0..*BundleContains a collection of resources
... id ΣC0..1idShould be omitted
vc-should-be-omitted: SHOULD be omitted for data minimization.
... implicitRules ?!Σ0..1uriA set of rules under which this content was created
... type SΣ1..1codedocument | message | transaction | transaction-response | batch | batch-response | history | searchset | collection
Binding: BundleType (required): Indicates the purpose of a bundle - how it is intended to be used.


Fixed Value: collection
.... entry:All Slices Content/Rules for all slices
..... id 0..1stringShould not be populated
..... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
..... fullUrl SΣ1..1uriLocally unique identifier like resource:0
..... resource SΣ0..1ResourceA resource in the bundle
.... entry:patient SΣC1..1BackboneElementPatient
This repeating element order: For bundles of type 'document' and 'message', the first resource is special (must be Composition or MessageHeader respectively). For all bundles, the meaning of the order of entries depends on the bundle type
..... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
..... fullUrl SΣC1..1uriLocally unique identifier like resource:0
vc-shall-be-resource-uri: IDs SHALL use resource:# format
..... resource 1..1SHCPatientGeneralADInformation about an individual receiving an individual receiving a vaccination or infectious disease-related laboratory test
.... entry:labResult SΣC1..*BackboneElementLaboratory result
vc-bundle-lab-status-complete: Bundle SHALL only include results with status final or status that is subsequent to final.
This repeating element order: For bundles of type 'document' and 'message', the first resource is special (must be Composition or MessageHeader respectively). For all bundles, the meaning of the order of entries depends on the bundle type
..... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
..... fullUrl SΣC1..1uriLocally unique identifier like resource:0
vc-shall-be-resource-uri: IDs SHALL use resource:# format
..... resource C1..1SHCInfectiousDiseaseLaboratoryResultObservationADMeasurements and simple assertions

doco Documentation for this format

Terminology Bindings

PathConformanceValueSet / Code
Bundle.typerequiredFixed Value: collection

Constraints

IdGradePath(s)DetailsRequirements
bdl-1errorBundletotal only when a search or history
: total.empty() or (type = 'searchset') or (type = 'history')
bdl-2errorBundleentry.search only when a search
: entry.search.empty() or (type = 'searchset')
bdl-3errorBundleentry.request mandatory for batch/transaction/history, otherwise prohibited
: entry.all(request.exists() = (%resource.type = 'batch' or %resource.type = 'transaction' or %resource.type = 'history'))
bdl-4errorBundleentry.response mandatory for batch-response/transaction-response/history, otherwise prohibited
: entry.all(response.exists() = (%resource.type = 'batch-response' or %resource.type = 'transaction-response' or %resource.type = 'history'))
bdl-5errorBundle.entry, Bundle.entry:patient, Bundle.entry:labResultmust be a resource unless there's a request or response
: resource.exists() or request.exists() or response.exists()
bdl-7errorBundleFullUrl must be unique in a bundle, or else entries with the same fullUrl must have different meta.versionId (except in history bundles)
: (type = 'history') or entry.where(fullUrl.exists()).select(fullUrl&resource.meta.versionId).isDistinct()
bdl-8errorBundle.entry, Bundle.entry:patient, Bundle.entry:labResultfullUrl cannot be a version specific reference
: fullUrl.contains('/_history/').not()
bdl-9errorBundleA document must have an identifier with a system and a value
: type = 'document' implies (identifier.system.exists() and identifier.value.exists())
bdl-10errorBundleA document must have a date
: type = 'document' implies (timestamp.hasValue())
bdl-11errorBundleA document must have a Composition as the first resource
: type = 'document' implies entry.first().resource.is(Composition)
bdl-12errorBundleA message must have a MessageHeader as the first resource
: type = 'message' implies entry.first().resource.is(MessageHeader)
dom-2errorBundle.entry:patient.resource, Bundle.entry:labResult.resourceIf the resource is contained in another resource, it SHALL NOT contain nested Resources
: contained.contained.empty()
dom-3errorBundle.entry:patient.resource, Bundle.entry:labResult.resourceIf 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-4errorBundle.entry:patient.resource, Bundle.entry:labResult.resourceIf 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-5errorBundle.entry:patient.resource, Bundle.entry:labResult.resourceIf a resource is contained in another resource, it SHALL NOT have a security label
: contained.meta.security.empty()
dom-6best practiceBundle.entry:patient.resource, Bundle.entry:labResult.resourceA 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()
obs-6errorBundle.entry:labResult.resourcedataAbsentReason SHALL only be present if Observation.value[x] is not present
: dataAbsentReason.empty() or value.empty()
obs-7errorBundle.entry:labResult.resourceIf 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()
vc-bundle-lab-status-completeerrorBundle.entry:labResultBundle SHALL only include results with status final or status that is subsequent to final.
: $this.resource.ofType(Observation).status.lower() in ('final'|'amended'|'corrected')
vc-shall-be-resource-urierrorBundle.entry:patient.fullUrl, Bundle.entry:labResult.fullUrlIDs SHALL use resource:# format
: $this.matches('^resource:[0-9]+$')
vc-should-be-omittedwarningBundle.idSHOULD be omitted for data minimization.
: $this.length() = 0

Snapshot View

NameFlagsCard.TypeDescription & Constraintsdoco
.. Bundle C0..*BundleContains a collection of resources
... id ΣC0..1idShould be omitted
vc-should-be-omitted: SHOULD be omitted for data minimization.
... meta Σ0..1MetaMetadata about the resource
... implicitRules ?!Σ0..1uriA set of rules under which this content was created
... identifier Σ0..1IdentifierPersistent identifier for the bundle
... type SΣ1..1codedocument | message | transaction | transaction-response | batch | batch-response | history | searchset | collection
Binding: BundleType (required): Indicates the purpose of a bundle - how it is intended to be used.


Fixed Value: collection
... timestamp Σ0..1instantWhen the bundle was assembled
... total ΣC0..1unsignedIntIf search, the total number of matches
... link Σ0..*BackboneElementLinks related to this Bundle
.... id 0..1stringUnique id for inter-element referencing
.... extension 0..*ExtensionAdditional content defined by implementations
.... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
.... relation Σ1..1stringSee http://www.iana.org/assignments/link-relations/link-relations.xhtml#link-relations-1
.... url Σ1..1uriReference details for the link
... Slices for entry SΣC2..*BackboneElementEntry in the bundle - will have a resource or information
Slice: Unordered, Closed by type:resource
This repeating element order: For bundles of type 'document' and 'message', the first resource is special (must be Composition or MessageHeader respectively). For all bundles, the meaning of the order of entries depends on the bundle type
.... entry:All Slices Content/Rules for all slices
..... id 0..1stringShould not be populated
..... extension 0..*ExtensionAdditional content defined by implementations
..... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
..... link Σ0..*See link (Bundle)Links related to this entry
..... fullUrl SΣ1..1uriLocally unique identifier like resource:0
..... resource SΣ0..1ResourceA resource in the bundle
..... search ΣC0..1BackboneElementSearch related information
...... id 0..1stringUnique id for inter-element referencing
...... extension 0..*ExtensionAdditional content defined by implementations
...... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
...... mode Σ0..1codematch | include | outcome - why this is in the result set
Binding: SearchEntryMode (required): Why an entry is in the result set - whether it's included as a match or because of an _include requirement, or to convey information or warning information about the search process.

...... score Σ0..1decimalSearch ranking (between 0 and 1)
..... request ΣC0..1BackboneElementAdditional execution information (transaction/batch/history)
...... id 0..1stringUnique id for inter-element referencing
...... extension 0..*ExtensionAdditional content defined by implementations
...... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
...... method Σ1..1codeGET | HEAD | POST | PUT | DELETE | PATCH
Binding: HTTPVerb (required): HTTP verbs (in the HTTP command line). See HTTP rfc for details.

...... url Σ1..1uriURL for HTTP equivalent of this entry
...... ifNoneMatch Σ0..1stringFor managing cache currency
...... ifModifiedSince Σ0..1instantFor managing cache currency
...... ifMatch Σ0..1stringFor managing update contention
...... ifNoneExist Σ0..1stringFor conditional creates
..... response ΣC0..1BackboneElementResults of execution (transaction/batch/history)
...... id 0..1stringUnique id for inter-element referencing
...... extension 0..*ExtensionAdditional content defined by implementations
...... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
...... status Σ1..1stringStatus response code (text optional)
...... location Σ0..1uriThe location (if the operation returns a location)
...... etag Σ0..1stringThe Etag for the resource (if relevant)
...... lastModified Σ0..1instantServer's date time modified
...... outcome Σ0..1ResourceOperationOutcome with hints and warnings (for batch/transaction)
.... entry:patient SΣC1..1BackboneElementPatient
This repeating element order: For bundles of type 'document' and 'message', the first resource is special (must be Composition or MessageHeader respectively). For all bundles, the meaning of the order of entries depends on the bundle type
..... id 0..1stringUnique id for inter-element referencing
..... extension 0..*ExtensionAdditional content defined by implementations
..... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
..... link Σ0..*See link (Bundle)Links related to this entry
..... fullUrl SΣC1..1uriLocally unique identifier like resource:0
vc-shall-be-resource-uri: IDs SHALL use resource:# format
..... resource 1..1SHCPatientGeneralADInformation about an individual receiving an individual receiving a vaccination or infectious disease-related laboratory test
..... search ΣC0..1BackboneElementSearch related information
...... id 0..1stringUnique id for inter-element referencing
...... extension 0..*ExtensionAdditional content defined by implementations
...... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
...... mode Σ0..1codematch | include | outcome - why this is in the result set
Binding: SearchEntryMode (required): Why an entry is in the result set - whether it's included as a match or because of an _include requirement, or to convey information or warning information about the search process.

...... score Σ0..1decimalSearch ranking (between 0 and 1)
..... request ΣC0..1BackboneElementAdditional execution information (transaction/batch/history)
...... id 0..1stringUnique id for inter-element referencing
...... extension 0..*ExtensionAdditional content defined by implementations
...... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
...... method Σ1..1codeGET | HEAD | POST | PUT | DELETE | PATCH
Binding: HTTPVerb (required): HTTP verbs (in the HTTP command line). See HTTP rfc for details.

...... url Σ1..1uriURL for HTTP equivalent of this entry
...... ifNoneMatch Σ0..1stringFor managing cache currency
...... ifModifiedSince Σ0..1instantFor managing cache currency
...... ifMatch Σ0..1stringFor managing update contention
...... ifNoneExist Σ0..1stringFor conditional creates
..... response ΣC0..1BackboneElementResults of execution (transaction/batch/history)
...... id 0..1stringUnique id for inter-element referencing
...... extension 0..*ExtensionAdditional content defined by implementations
...... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
...... status Σ1..1stringStatus response code (text optional)
...... location Σ0..1uriThe location (if the operation returns a location)
...... etag Σ0..1stringThe Etag for the resource (if relevant)
...... lastModified Σ0..1instantServer's date time modified
...... outcome Σ0..1ResourceOperationOutcome with hints and warnings (for batch/transaction)
.... entry:labResult SΣC1..*BackboneElementLaboratory result
vc-bundle-lab-status-complete: Bundle SHALL only include results with status final or status that is subsequent to final.
This repeating element order: For bundles of type 'document' and 'message', the first resource is special (must be Composition or MessageHeader respectively). For all bundles, the meaning of the order of entries depends on the bundle type
..... id 0..1stringUnique id for inter-element referencing
..... extension 0..*ExtensionAdditional content defined by implementations
..... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
..... link Σ0..*See link (Bundle)Links related to this entry
..... fullUrl SΣC1..1uriLocally unique identifier like resource:0
vc-shall-be-resource-uri: IDs SHALL use resource:# format
..... resource C1..1SHCInfectiousDiseaseLaboratoryResultObservationADMeasurements and simple assertions
..... search ΣC0..1BackboneElementSearch related information
...... id 0..1stringUnique id for inter-element referencing
...... extension 0..*ExtensionAdditional content defined by implementations
...... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
...... mode Σ0..1codematch | include | outcome - why this is in the result set
Binding: SearchEntryMode (required): Why an entry is in the result set - whether it's included as a match or because of an _include requirement, or to convey information or warning information about the search process.

...... score Σ0..1decimalSearch ranking (between 0 and 1)
..... request ΣC0..1BackboneElementAdditional execution information (transaction/batch/history)
...... id 0..1stringUnique id for inter-element referencing
...... extension 0..*ExtensionAdditional content defined by implementations
...... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
...... method Σ1..1codeGET | HEAD | POST | PUT | DELETE | PATCH
Binding: HTTPVerb (required): HTTP verbs (in the HTTP command line). See HTTP rfc for details.

...... url Σ1..1uriURL for HTTP equivalent of this entry
...... ifNoneMatch Σ0..1stringFor managing cache currency
...... ifModifiedSince Σ0..1instantFor managing cache currency
...... ifMatch Σ0..1stringFor managing update contention
...... ifNoneExist Σ0..1stringFor conditional creates
..... response ΣC0..1BackboneElementResults of execution (transaction/batch/history)
...... id 0..1stringUnique id for inter-element referencing
...... extension 0..*ExtensionAdditional content defined by implementations
...... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
...... status Σ1..1stringStatus response code (text optional)
...... location Σ0..1uriThe location (if the operation returns a location)
...... etag Σ0..1stringThe Etag for the resource (if relevant)
...... lastModified Σ0..1instantServer's date time modified
...... outcome Σ0..1ResourceOperationOutcome with hints and warnings (for batch/transaction)
... signature Σ0..1SignatureDigital Signature

doco Documentation for this format

Terminology Bindings

PathConformanceValueSet / Code
Bundle.languagepreferredCommonLanguages
Additional Bindings Purpose
AllLanguages Max Binding
Bundle.typerequiredFixed Value: collection
Bundle.entry.search.moderequiredSearchEntryMode
Bundle.entry.request.methodrequiredHTTPVerb
Bundle.entry:patient.search.moderequiredSearchEntryMode
Bundle.entry:patient.request.methodrequiredHTTPVerb
Bundle.entry:labResult.search.moderequiredSearchEntryMode
Bundle.entry:labResult.request.methodrequiredHTTPVerb

Constraints

IdGradePath(s)DetailsRequirements
bdl-1errorBundletotal only when a search or history
: total.empty() or (type = 'searchset') or (type = 'history')
bdl-2errorBundleentry.search only when a search
: entry.search.empty() or (type = 'searchset')
bdl-3errorBundleentry.request mandatory for batch/transaction/history, otherwise prohibited
: entry.all(request.exists() = (%resource.type = 'batch' or %resource.type = 'transaction' or %resource.type = 'history'))
bdl-4errorBundleentry.response mandatory for batch-response/transaction-response/history, otherwise prohibited
: entry.all(response.exists() = (%resource.type = 'batch-response' or %resource.type = 'transaction-response' or %resource.type = 'history'))
bdl-5errorBundle.entry, Bundle.entry:patient, Bundle.entry:labResultmust be a resource unless there's a request or response
: resource.exists() or request.exists() or response.exists()
bdl-7errorBundleFullUrl must be unique in a bundle, or else entries with the same fullUrl must have different meta.versionId (except in history bundles)
: (type = 'history') or entry.where(fullUrl.exists()).select(fullUrl&resource.meta.versionId).isDistinct()
bdl-8errorBundle.entry, Bundle.entry:patient, Bundle.entry:labResultfullUrl cannot be a version specific reference
: fullUrl.contains('/_history/').not()
bdl-9errorBundleA document must have an identifier with a system and a value
: type = 'document' implies (identifier.system.exists() and identifier.value.exists())
bdl-10errorBundleA document must have a date
: type = 'document' implies (timestamp.hasValue())
bdl-11errorBundleA document must have a Composition as the first resource
: type = 'document' implies entry.first().resource.is(Composition)
bdl-12errorBundleA message must have a MessageHeader as the first resource
: type = 'message' implies entry.first().resource.is(MessageHeader)
dom-2errorBundle.entry:patient.resource, Bundle.entry:labResult.resourceIf the resource is contained in another resource, it SHALL NOT contain nested Resources
: contained.contained.empty()
dom-3errorBundle.entry:patient.resource, Bundle.entry:labResult.resourceIf 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-4errorBundle.entry:patient.resource, Bundle.entry:labResult.resourceIf 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-5errorBundle.entry:patient.resource, Bundle.entry:labResult.resourceIf a resource is contained in another resource, it SHALL NOT have a security label
: contained.meta.security.empty()
dom-6best practiceBundle.entry:patient.resource, Bundle.entry:labResult.resourceA 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()
obs-6errorBundle.entry:labResult.resourcedataAbsentReason SHALL only be present if Observation.value[x] is not present
: dataAbsentReason.empty() or value.empty()
obs-7errorBundle.entry:labResult.resourceIf 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()
vc-bundle-lab-status-completeerrorBundle.entry:labResultBundle SHALL only include results with status final or status that is subsequent to final.
: $this.resource.ofType(Observation).status.lower() in ('final'|'amended'|'corrected')
vc-shall-be-resource-urierrorBundle.entry:patient.fullUrl, Bundle.entry:labResult.fullUrlIDs SHALL use resource:# format
: $this.matches('^resource:[0-9]+$')
vc-should-be-omittedwarningBundle.idSHOULD be omitted for data minimization.
: $this.length() = 0

This structure is derived from Bundle

Summary

Mandatory: 7 elements
Must-Support: 8 elements
Fixed Value: 1 element

Structures

This structure refers to these other structures:

Slices

This structure defines the following Slices:

  • The element Bundle.entry is sliced based on the value of type:resource (Closed)

 

Other representations of profile: CSV, Excel, Schematron