SMART Health Cards: Vaccination & Testing Implementation Guide
0.5.0-rc - ci-build

SMART Health Cards: Vaccination & Testing Implementation Guide, published by vci.org. This is not an authorized publication; it is the continuous build for version 0.5.0-rc). This version is based on the current content of https://github.com/dvci/vaccine-credential-ig/ and changes regularly. See the Directory of published versions

Resource Profile: Generic Laboratory Result Observation Profile - Data Minimization

Defining URL:http://hl7.org/fhir/uv/smarthealthcards-vaccination/StructureDefinition/infectious-disease-laboratory-result-observation-dm
Version:0.5.0-rc
Name:InfectiousDiseaseLaboratoryResultObservationDM
Title:Generic Laboratory Result Observation Profile - Data Minimization
Status:Active as of 2021-05-15T19:35:22+00:00
Definition:

Profile for reporting laboratory results indicating current or previous infection status for a disease without a specified laboratory result profile. Only elements necessary for Verifiers can be populated.

Publisher:vci.org
Source Resource:XML / JSON / Turtle

The official URL for this profile is:

http://hl7.org/fhir/uv/smarthealthcards-vaccination/StructureDefinition/infectious-disease-laboratory-result-observation-dm

Note This is a “data minimization” profile. The corresponding “allowable data” profile is here.

Formal Views of Profile Content

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

This structure is derived from InfectiousDiseaseLaboratoryResultObservation

Summary

Prohibited: 38 elements

This structure is derived from InfectiousDiseaseLaboratoryResultObservation

NameFlagsCard.TypeDescription & Constraintsdoco
.. Observation 0..*InfectiousDiseaseLaboratoryResultObservationMeasurements and simple assertions
... id 0..0
... meta
.... id 0..0
.... extension 0..0
.... versionId 0..0
.... lastUpdated 0..0
.... source 0..0
.... profile 0..0
.... tag 0..0
... implicitRules 0..0
... language 0..0
... text 0..0
... contained 0..0
... extension 0..0
... modifierExtension 0..0
... identifier 0..0
... basedOn 0..0
... partOf 0..0
... category 0..0
... focus 0..0
... encounter 0..0
... issued 0..0
... performer
.... id 0..0
.... extension 0..0
.... reference 0..0
.... type 0..0
.... identifier 0..0
... valueCodeableConcept 0..1CodeableConceptActual result
.... text 0..0
... valueQuantity 0..1QuantityActual result
.... id 0..0
... dataAbsentReason 0..0
... interpretation 0..0
... note 0..0
... bodySite 0..0
... method 0..0
... specimen 0..0
... device 0..0
... hasMember 0..0
... derivedFrom 0..0
... component 0..0

doco Documentation for this format
NameFlagsCard.TypeDescription & Constraintsdoco
.. Observation I0..*InfectiousDiseaseLaboratoryResultObservationMeasurements and simple assertions
... meta Σ0..1MetaMetadata about the resource
.... extension 0..0
.... security SΣ0..1CodingLimited security label to convey identity level of assurance for patient referenced by this resource.
Binding: Identity Assurance Level (required)
... status ?!SΣI1..1coderegistered | preliminary | final | amended +
Binding: ObservationStatus (required): Codes providing the status of an observation.

... code SΣI1..1CodeableConceptLOINC identifying the lab test
Binding: LOINCCodes (required)
.... id 0..1stringUnique id for inter-element referencing
.... extension 0..*ExtensionAdditional content defined by implementations
Slice: Unordered, Open by value:url
.... reference ΣI1..1stringThis SHOULD use an absolute URI like `resource:0` that will resolve within the containing Bundle.
... effective[x] SΣ1..1Clinically relevant time/time-period for observation
.... effectiveDateTimedateTime
.... effectivePeriodPeriod
... performer SΣ0..1Reference(Organization)Organization which was responsible for the laboratory test result.
.... extension 0..0
.... display SΣI1..1stringShort, human-readable text representation of the organization.
... value[x] SΣI1..1(Slice Definition)Actual result
Slice: Unordered, Closed by type:$this
.... valueCodeableConceptCodeableConcept
.... valueQuantityQuantity
.... value[x]:valueCodeableConcept ΣI0..1CodeableConceptActual result
Binding: Lab result findings (required)
..... id 0..1stringUnique id for inter-element referencing
..... extension 0..*ExtensionAdditional content defined by implementations
Slice: Unordered, Open by value:url
..... coding Σ0..*CodingCode defined by a terminology system
.... value[x]:valueQuantity ΣI0..1QuantityActual result
..... extension 0..*ExtensionAdditional content defined by implementations
Slice: Unordered, Open by value:url
..... value Σ0..1decimalNumerical value (with implicit precision)
..... comparator ?!Σ0..1code< | <= | >= | > - how to understand the value
Binding: QuantityComparator (required): How the Quantity should be understood and represented.

..... unit Σ0..1stringUnit representation
..... system ΣI0..1uriSystem that defines coded unit form
..... code Σ0..1codeCoded form of the unit
.... value[x]:valueString ΣI0..1stringString representation of results; used ONLY when a computable representation is not possible
... referenceRange SI0..*BackboneElementProvides guide for interpretation
.... 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
.... low I0..1SimpleQuantityLow Range, if relevant
.... high I0..1SimpleQuantityHigh Range, if relevant
.... type 0..1CodeableConceptReference range qualifier
Binding: ObservationReferenceRangeMeaningCodes (preferred): Code for the meaning of a reference range.

.... appliesTo 0..*CodeableConceptReference range population
Binding: ObservationReferenceRangeAppliesToCodes (example): Codes identifying the population the reference range applies to.


.... age 0..1RangeApplicable age range, if relevant
.... text 0..1stringText based reference range in an observation

doco Documentation for this format
NameFlagsCard.TypeDescription & Constraintsdoco
.. Observation I0..*InfectiousDiseaseLaboratoryResultObservationMeasurements and simple assertions
... meta Σ0..1MetaMetadata about the resource
.... security Σ0..1CodingLimited security label to convey identity level of assurance for patient referenced by this resource.
Binding: Identity Assurance Level (required)
... status ?!ΣI1..1coderegistered | preliminary | final | amended +
Binding: ObservationStatus (required): Codes providing the status of an observation.

... code ΣI1..1CodeableConceptLOINC identifying the lab test
Binding: LOINCCodes (required)
... effective[x] Σ1..1Clinically relevant time/time-period for observation
.... effectiveDateTimedateTime
.... effectivePeriodPeriod
... performer Σ0..1Reference(Organization)Organization which was responsible for the laboratory test result.
.... display ΣI1..1stringShort, human-readable text representation of the organization.
... value[x] ΣI1..1(Slice Definition)Actual result
Slice: Unordered, Closed by type:$this
.... valueCodeableConceptCodeableConcept
.... valueQuantityQuantity
... referenceRange I0..*BackboneElementProvides guide for interpretation

doco Documentation for this format

This structure is derived from InfectiousDiseaseLaboratoryResultObservation

Summary

Prohibited: 38 elements

Differential View

This structure is derived from InfectiousDiseaseLaboratoryResultObservation

NameFlagsCard.TypeDescription & Constraintsdoco
.. Observation 0..*InfectiousDiseaseLaboratoryResultObservationMeasurements and simple assertions
... id 0..0
... meta
.... id 0..0
.... extension 0..0
.... versionId 0..0
.... lastUpdated 0..0
.... source 0..0
.... profile 0..0
.... tag 0..0
... implicitRules 0..0
... language 0..0
... text 0..0
... contained 0..0
... extension 0..0
... modifierExtension 0..0
... identifier 0..0
... basedOn 0..0
... partOf 0..0
... category 0..0
... focus 0..0
... encounter 0..0
... issued 0..0
... performer
.... id 0..0
.... extension 0..0
.... reference 0..0
.... type 0..0
.... identifier 0..0
... valueCodeableConcept 0..1CodeableConceptActual result
.... text 0..0
... valueQuantity 0..1QuantityActual result
.... id 0..0
... dataAbsentReason 0..0
... interpretation 0..0
... note 0..0
... bodySite 0..0
... method 0..0
... specimen 0..0
... device 0..0
... hasMember 0..0
... derivedFrom 0..0
... component 0..0

doco Documentation for this format

Snapshot View

NameFlagsCard.TypeDescription & Constraintsdoco
.. Observation I0..*InfectiousDiseaseLaboratoryResultObservationMeasurements and simple assertions
... meta Σ0..1MetaMetadata about the resource
.... extension 0..0
.... security SΣ0..1CodingLimited security label to convey identity level of assurance for patient referenced by this resource.
Binding: Identity Assurance Level (required)
... status ?!SΣI1..1coderegistered | preliminary | final | amended +
Binding: ObservationStatus (required): Codes providing the status of an observation.

... code SΣI1..1CodeableConceptLOINC identifying the lab test
Binding: LOINCCodes (required)
.... id 0..1stringUnique id for inter-element referencing
.... extension 0..*ExtensionAdditional content defined by implementations
Slice: Unordered, Open by value:url
.... reference ΣI1..1stringThis SHOULD use an absolute URI like `resource:0` that will resolve within the containing Bundle.
... effective[x] SΣ1..1Clinically relevant time/time-period for observation
.... effectiveDateTimedateTime
.... effectivePeriodPeriod
... performer SΣ0..1Reference(Organization)Organization which was responsible for the laboratory test result.
.... extension 0..0
.... display SΣI1..1stringShort, human-readable text representation of the organization.
... value[x] SΣI1..1(Slice Definition)Actual result
Slice: Unordered, Closed by type:$this
.... valueCodeableConceptCodeableConcept
.... valueQuantityQuantity
.... value[x]:valueCodeableConcept ΣI0..1CodeableConceptActual result
Binding: Lab result findings (required)
..... id 0..1stringUnique id for inter-element referencing
..... extension 0..*ExtensionAdditional content defined by implementations
Slice: Unordered, Open by value:url
..... coding Σ0..*CodingCode defined by a terminology system
.... value[x]:valueQuantity ΣI0..1QuantityActual result
..... extension 0..*ExtensionAdditional content defined by implementations
Slice: Unordered, Open by value:url
..... value Σ0..1decimalNumerical value (with implicit precision)
..... comparator ?!Σ0..1code< | <= | >= | > - how to understand the value
Binding: QuantityComparator (required): How the Quantity should be understood and represented.

..... unit Σ0..1stringUnit representation
..... system ΣI0..1uriSystem that defines coded unit form
..... code Σ0..1codeCoded form of the unit
.... value[x]:valueString ΣI0..1stringString representation of results; used ONLY when a computable representation is not possible
... referenceRange SI0..*BackboneElementProvides guide for interpretation
.... 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
.... low I0..1SimpleQuantityLow Range, if relevant
.... high I0..1SimpleQuantityHigh Range, if relevant
.... type 0..1CodeableConceptReference range qualifier
Binding: ObservationReferenceRangeMeaningCodes (preferred): Code for the meaning of a reference range.

.... appliesTo 0..*CodeableConceptReference range population
Binding: ObservationReferenceRangeAppliesToCodes (example): Codes identifying the population the reference range applies to.


.... age 0..1RangeApplicable age range, if relevant
.... text 0..1stringText based reference range in an observation

doco Documentation for this format

 

Other representations of profile: Schematron

Terminology Bindings

PathConformanceValueSet
Observation.meta.securityrequiredIdentityAssuranceLevel
Observation.statusrequiredObservationStatus
Observation.coderequiredLOINCCodes
Observation.value[x]:valueCodeableConceptrequiredLabResultFindings
Observation.value[x]:valueQuantity.comparatorrequiredQuantityComparator
Observation.referenceRange.typepreferredObservationReferenceRangeMeaningCodes
Observation.referenceRange.appliesToexampleObservationReferenceRangeAppliesToCodes
Observation.component.codeexampleLOINCCodes
Observation.component.dataAbsentReasonextensibleDataAbsentReason
Observation.component.interpretationextensibleObservationInterpretationCodes

Constraints

IdPathDetailsRequirements
dom-2ObservationIf the resource is contained in another resource, it SHALL NOT contain nested Resources
: contained.contained.empty()
dom-3ObservationIf 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-4ObservationIf 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-5ObservationIf a resource is contained in another resource, it SHALL NOT have a security label
: contained.meta.security.empty()
dom-6ObservationA resource should have narrative for robust management
: text.`div`.exists()
obs-6ObservationdataAbsentReason SHALL only be present if Observation.value[x] is not present
: dataAbsentReason.empty() or value.empty()
obs-7ObservationIf Observation.code is the same as an Observation.component.code then the value element associated with the code SHALL NOT be present
: value.empty() or component.code.where(coding.intersect(%resource.code.coding).exists()).empty()
ele-1Observation.metaAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Observation.meta.securityAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Observation.statusAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
vc-observation-status-shall-be-completeObservation.statusSHALL be `final`, `amended`, or `corrected`
: $this.lower() in ('final'|'amended'|'corrected')
ele-1Observation.codeAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
vc-shall-not-be-a-covid-loincObservation.codeThis profile SHALL NOT be used to report results from COVID lab tests (https://vsac.nlm.nih.gov/valueset/2.16.840.1.113762.1.4.1114.9/expansion). Use Covid19LaboratoryResultObservation instead.
: $this.memberOf('http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1114.9').not()
ele-1Observation.subjectAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Observation.subject.extensionAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ext-1Observation.subject.extensionMust have either extensions or value[x], not both
: extension.exists() != value.exists()
ele-1Observation.subject.referenceAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Observation.effective[x]All FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Observation.performerAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Observation.performer.displayAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
vc-should-be-under-30-charsObservation.performer.displayLength SHOULD be <30 for data minimization.
: $this.length() < 30
ele-1Observation.value[x]All FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Observation.value[x]:valueCodeableConceptAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Observation.value[x]:valueCodeableConcept.extensionAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ext-1Observation.value[x]:valueCodeableConcept.extensionMust have either extensions or value[x], not both
: extension.exists() != value.exists()
ele-1Observation.value[x]:valueCodeableConcept.codingAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Observation.value[x]:valueQuantityAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
vc-observation-quantity-should-have-rangeObservation.value[x]:valueQuantityQuantitative lab results SHOULD include reference range
: %resource.referenceRange.exists()
ele-1Observation.value[x]:valueQuantity.extensionAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ext-1Observation.value[x]:valueQuantity.extensionMust have either extensions or value[x], not both
: extension.exists() != value.exists()
ele-1Observation.value[x]:valueQuantity.valueAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Observation.value[x]:valueQuantity.comparatorAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Observation.value[x]:valueQuantity.unitAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Observation.value[x]:valueQuantity.systemAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Observation.value[x]:valueQuantity.codeAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Observation.value[x]:valueStringAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
vc-should-be-under-20-charsObservation.value[x]:valueStringLength SHOULD be <20 for data minimization.
: $this.length() < 20
ele-1Observation.referenceRangeAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
obs-3Observation.referenceRangeMust have at least a low or a high or text
: low.exists() or high.exists() or text.exists()
vc-observation-range-only-quantityObservation.referenceRangeReference range SHOULD only be included for quantitative lab results
: $this.exists() and %resource.value.ofType(Quantity).exists()
ele-1Observation.referenceRange.extensionAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ext-1Observation.referenceRange.extensionMust have either extensions or value[x], not both
: extension.exists() != value.exists()
ele-1Observation.referenceRange.modifierExtensionAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ext-1Observation.referenceRange.modifierExtensionMust have either extensions or value[x], not both
: extension.exists() != value.exists()
ele-1Observation.referenceRange.lowAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Observation.referenceRange.highAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Observation.referenceRange.typeAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Observation.referenceRange.appliesToAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Observation.referenceRange.ageAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Observation.referenceRange.textAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Observation.component.extensionAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ext-1Observation.component.extensionMust have either extensions or value[x], not both
: extension.exists() != value.exists()
ele-1Observation.component.modifierExtensionAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ext-1Observation.component.modifierExtensionMust have either extensions or value[x], not both
: extension.exists() != value.exists()
ele-1Observation.component.codeAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Observation.component.value[x]All FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Observation.component.dataAbsentReasonAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Observation.component.interpretationAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Observation.component.referenceRangeAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())