NCPI FHIR Implementation Guide
0.2.0 - ci-build

NCPI FHIR Implementation Guide - Local Development build (v0.2.0). See the Directory of published versions

Resource Profile: NCPI Data Dictionary Harmony

Official URL: https://nih-ncpi.github.io/ncpi-fhir-ig/StructureDefinition/study-data-dictionary-harmony Version: 0.2.0
Draft as of 2023-09-15 Computable Name: StudyDataDictionaryHarmony

Based on the FHIR resource type, ConceptMap, the StudyDataDictionaryHarmony resource provides insight into the transformations made during the ETL from source data into FHIR allowing clients to use the $translate function to discover all of the public codes that were mapped from one of the study’s actual vocabulary.

Key Guidelines for Usage

The mechanics of the ConceptMap, upon which the StudyDataDictionaryHarmony is based is simple. A single vocabulary (ValueSet) is required for each the source and the target and for each code in the source an element is created which identifies the target codes. Clients can query these ConceptMap resources via the $translate operation.

There will be a single StudyDataDictionaryHarmony resource for a study where all codes that are mapped to one or more public ontologies are captured along with their target mappings. This represents the documentation describing the transformations performed on the FHIR resources in use.

Usage:

Formal Views of Profile Content

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

This structure is derived from ConceptMap

NameFlagsCard.TypeDescription & Constraintsdoco
.. ConceptMap 0..*ConceptMapA map from one set of concepts to one or more other concepts

doco Documentation for this format
NameFlagsCard.TypeDescription & Constraintsdoco
.. ConceptMap C0..*ConceptMapA map from one set of concepts to one or more other concepts
... implicitRules ?!Σ0..1uriA set of rules under which this content was created
... modifierExtension ?!0..*ExtensionExtensions that cannot be ignored
... status ?!Σ1..1codedraft | active | retired | unknown
Binding: PublicationStatus (required): The lifecycle status of an artifact.


doco Documentation for this format

Terminology Bindings

PathConformanceValueSet
ConceptMap.statusrequiredPublicationStatus

Constraints

IdGradePath(s)DetailsRequirements
cmd-0warningConceptMapName should be usable as an identifier for the module by machine processing applications such as code generation
: name.matches('[A-Z]([A-Za-z0-9_]){0,254}')
dom-2errorConceptMapIf the resource is contained in another resource, it SHALL NOT contain nested Resources
: contained.contained.empty()
dom-3errorConceptMapIf 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-4errorConceptMapIf 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-5errorConceptMapIf a resource is contained in another resource, it SHALL NOT have a security label
: contained.meta.security.empty()
dom-6best practiceConceptMapA 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()
NameFlagsCard.TypeDescription & Constraintsdoco
.. ConceptMap C0..*ConceptMapA map from one set of concepts to one or more other concepts
... id Σ0..1idLogical id of this artifact
... meta Σ0..1MetaMetadata about the resource
... implicitRules ?!Σ0..1uriA set of rules under which this content was created
... text 0..1NarrativeText summary of the resource, for human interpretation
... contained 0..*ResourceContained, inline Resources
... extension 0..*ExtensionAdditional content defined by implementations
... modifierExtension ?!0..*ExtensionExtensions that cannot be ignored
... url Σ0..1uriCanonical identifier for this concept map, represented as a URI (globally unique)
... identifier Σ0..1IdentifierAdditional identifier for the concept map
... version Σ0..1stringBusiness version of the concept map
... name ΣC0..1stringName for this concept map (computer friendly)
... title Σ0..1stringName for this concept map (human friendly)
... status ?!Σ1..1codedraft | active | retired | unknown
Binding: PublicationStatus (required): The lifecycle status of an artifact.

... experimental Σ0..1booleanFor testing purposes, not real usage
... date Σ0..1dateTimeDate last changed
... publisher Σ0..1stringName of the publisher (organization or individual)
... contact Σ0..*ContactDetailContact details for the publisher
... description 0..1markdownNatural language description of the concept map
... useContext Σ0..*UsageContextThe context that the content is intended to support
... jurisdiction Σ0..*CodeableConceptIntended jurisdiction for concept map (if applicable)
Binding: Jurisdiction ValueSet (extensible): Countries and regions within which this artifact is targeted for use.


... purpose 0..1markdownWhy this concept map is defined
... copyright 0..1markdownUse and/or publishing restrictions
... source[x] Σ0..1The source value set that contains the concepts that are being mapped
.... sourceUriuri
.... sourceCanonicalcanonical(ValueSet)
... target[x] Σ0..1The target value set which provides context for the mappings
.... targetUriuri
.... targetCanonicalcanonical(ValueSet)
... group 0..*BackboneElementSame source and target systems
.... 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
.... source 0..1uriSource system where concepts to be mapped are defined
.... sourceVersion 0..1stringSpecific version of the code system
.... target 0..1uriTarget system that the concepts are to be mapped to
.... targetVersion 0..1stringSpecific version of the code system
.... element 1..*BackboneElementMappings for a concept from the source set
..... 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
..... code 0..1codeIdentifies element being mapped
..... display 0..1stringDisplay for the code
..... target C0..*BackboneElementConcept in target system for element
...... 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
...... code 0..1codeCode that identifies the target element
...... display 0..1stringDisplay for the code
...... equivalence ?!1..1coderelatedto | equivalent | equal | wider | subsumes | narrower | specializes | inexact | unmatched | disjoint
Binding: ConceptMapEquivalence (required): The degree of equivalence between concepts.

...... comment C0..1stringDescription of status/issues in mapping
...... dependsOn 0..*BackboneElementOther elements required for this mapping (from context)
....... 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
....... property 1..1uriReference to property mapping depends on
....... system 0..1canonical(CodeSystem)Code System (if necessary)
....... value 1..1stringValue of the referenced element
....... display 0..1stringDisplay for the code (if value is a code)
...... product 0..*See dependsOn (ConceptMap)Other concepts that this mapping also produces
.... unmapped C0..1BackboneElementWhat to do when there is no mapping for the source concept
..... 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 1..1codeprovided | fixed | other-map
Binding: ConceptMapGroupUnmappedMode (required): Defines which action to take if there is no match in the group.

..... code 0..1codeFixed code when mode = fixed
..... display 0..1stringDisplay for the code
..... url 0..1canonical(ConceptMap)canonical reference to an additional ConceptMap to use for mapping if the source concept is unmapped

doco Documentation for this format

Terminology Bindings

PathConformanceValueSet
ConceptMap.languagepreferredCommonLanguages
Additional Bindings Purpose
AllLanguages Max Binding
ConceptMap.statusrequiredPublicationStatus
ConceptMap.jurisdictionextensibleJurisdiction ValueSet
ConceptMap.group.element.target.equivalencerequiredConceptMapEquivalence
ConceptMap.group.unmapped.moderequiredConceptMapGroupUnmappedMode

Constraints

IdGradePath(s)DetailsRequirements
cmd-0warningConceptMapName should be usable as an identifier for the module by machine processing applications such as code generation
: name.matches('[A-Z]([A-Za-z0-9_]){0,254}')
cmd-1errorConceptMap.group.element.targetIf the map is narrower or inexact, there SHALL be some comments
: comment.exists() or equivalence.empty() or ((equivalence != 'narrower') and (equivalence != 'inexact'))
cmd-2errorConceptMap.group.unmappedIf the mode is 'fixed', a code must be provided
: (mode = 'fixed') implies code.exists()
cmd-3errorConceptMap.group.unmappedIf the mode is 'other-map', a url must be provided
: (mode = 'other-map') implies url.exists()
dom-2errorConceptMapIf the resource is contained in another resource, it SHALL NOT contain nested Resources
: contained.contained.empty()
dom-3errorConceptMapIf 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-4errorConceptMapIf 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-5errorConceptMapIf a resource is contained in another resource, it SHALL NOT have a security label
: contained.meta.security.empty()
dom-6best practiceConceptMapA 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()

This structure is derived from ConceptMap

Summary

Differential View

This structure is derived from ConceptMap

NameFlagsCard.TypeDescription & Constraintsdoco
.. ConceptMap 0..*ConceptMapA map from one set of concepts to one or more other concepts

doco Documentation for this format

Key Elements View

NameFlagsCard.TypeDescription & Constraintsdoco
.. ConceptMap C0..*ConceptMapA map from one set of concepts to one or more other concepts
... implicitRules ?!Σ0..1uriA set of rules under which this content was created
... modifierExtension ?!0..*ExtensionExtensions that cannot be ignored
... status ?!Σ1..1codedraft | active | retired | unknown
Binding: PublicationStatus (required): The lifecycle status of an artifact.


doco Documentation for this format

Terminology Bindings

PathConformanceValueSet
ConceptMap.statusrequiredPublicationStatus

Constraints

IdGradePath(s)DetailsRequirements
cmd-0warningConceptMapName should be usable as an identifier for the module by machine processing applications such as code generation
: name.matches('[A-Z]([A-Za-z0-9_]){0,254}')
dom-2errorConceptMapIf the resource is contained in another resource, it SHALL NOT contain nested Resources
: contained.contained.empty()
dom-3errorConceptMapIf 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-4errorConceptMapIf 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-5errorConceptMapIf a resource is contained in another resource, it SHALL NOT have a security label
: contained.meta.security.empty()
dom-6best practiceConceptMapA 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()

Snapshot View

NameFlagsCard.TypeDescription & Constraintsdoco
.. ConceptMap C0..*ConceptMapA map from one set of concepts to one or more other concepts
... id Σ0..1idLogical id of this artifact
... meta Σ0..1MetaMetadata about the resource
... implicitRules ?!Σ0..1uriA set of rules under which this content was created
... text 0..1NarrativeText summary of the resource, for human interpretation
... contained 0..*ResourceContained, inline Resources
... extension 0..*ExtensionAdditional content defined by implementations
... modifierExtension ?!0..*ExtensionExtensions that cannot be ignored
... url Σ0..1uriCanonical identifier for this concept map, represented as a URI (globally unique)
... identifier Σ0..1IdentifierAdditional identifier for the concept map
... version Σ0..1stringBusiness version of the concept map
... name ΣC0..1stringName for this concept map (computer friendly)
... title Σ0..1stringName for this concept map (human friendly)
... status ?!Σ1..1codedraft | active | retired | unknown
Binding: PublicationStatus (required): The lifecycle status of an artifact.

... experimental Σ0..1booleanFor testing purposes, not real usage
... date Σ0..1dateTimeDate last changed
... publisher Σ0..1stringName of the publisher (organization or individual)
... contact Σ0..*ContactDetailContact details for the publisher
... description 0..1markdownNatural language description of the concept map
... useContext Σ0..*UsageContextThe context that the content is intended to support
... jurisdiction Σ0..*CodeableConceptIntended jurisdiction for concept map (if applicable)
Binding: Jurisdiction ValueSet (extensible): Countries and regions within which this artifact is targeted for use.


... purpose 0..1markdownWhy this concept map is defined
... copyright 0..1markdownUse and/or publishing restrictions
... source[x] Σ0..1The source value set that contains the concepts that are being mapped
.... sourceUriuri
.... sourceCanonicalcanonical(ValueSet)
... target[x] Σ0..1The target value set which provides context for the mappings
.... targetUriuri
.... targetCanonicalcanonical(ValueSet)
... group 0..*BackboneElementSame source and target systems
.... 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
.... source 0..1uriSource system where concepts to be mapped are defined
.... sourceVersion 0..1stringSpecific version of the code system
.... target 0..1uriTarget system that the concepts are to be mapped to
.... targetVersion 0..1stringSpecific version of the code system
.... element 1..*BackboneElementMappings for a concept from the source set
..... 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
..... code 0..1codeIdentifies element being mapped
..... display 0..1stringDisplay for the code
..... target C0..*BackboneElementConcept in target system for element
...... 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
...... code 0..1codeCode that identifies the target element
...... display 0..1stringDisplay for the code
...... equivalence ?!1..1coderelatedto | equivalent | equal | wider | subsumes | narrower | specializes | inexact | unmatched | disjoint
Binding: ConceptMapEquivalence (required): The degree of equivalence between concepts.

...... comment C0..1stringDescription of status/issues in mapping
...... dependsOn 0..*BackboneElementOther elements required for this mapping (from context)
....... 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
....... property 1..1uriReference to property mapping depends on
....... system 0..1canonical(CodeSystem)Code System (if necessary)
....... value 1..1stringValue of the referenced element
....... display 0..1stringDisplay for the code (if value is a code)
...... product 0..*See dependsOn (ConceptMap)Other concepts that this mapping also produces
.... unmapped C0..1BackboneElementWhat to do when there is no mapping for the source concept
..... 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 1..1codeprovided | fixed | other-map
Binding: ConceptMapGroupUnmappedMode (required): Defines which action to take if there is no match in the group.

..... code 0..1codeFixed code when mode = fixed
..... display 0..1stringDisplay for the code
..... url 0..1canonical(ConceptMap)canonical reference to an additional ConceptMap to use for mapping if the source concept is unmapped

doco Documentation for this format

Terminology Bindings

PathConformanceValueSet
ConceptMap.languagepreferredCommonLanguages
Additional Bindings Purpose
AllLanguages Max Binding
ConceptMap.statusrequiredPublicationStatus
ConceptMap.jurisdictionextensibleJurisdiction ValueSet
ConceptMap.group.element.target.equivalencerequiredConceptMapEquivalence
ConceptMap.group.unmapped.moderequiredConceptMapGroupUnmappedMode

Constraints

IdGradePath(s)DetailsRequirements
cmd-0warningConceptMapName should be usable as an identifier for the module by machine processing applications such as code generation
: name.matches('[A-Z]([A-Za-z0-9_]){0,254}')
cmd-1errorConceptMap.group.element.targetIf the map is narrower or inexact, there SHALL be some comments
: comment.exists() or equivalence.empty() or ((equivalence != 'narrower') and (equivalence != 'inexact'))
cmd-2errorConceptMap.group.unmappedIf the mode is 'fixed', a code must be provided
: (mode = 'fixed') implies code.exists()
cmd-3errorConceptMap.group.unmappedIf the mode is 'other-map', a url must be provided
: (mode = 'other-map') implies url.exists()
dom-2errorConceptMapIf the resource is contained in another resource, it SHALL NOT contain nested Resources
: contained.contained.empty()
dom-3errorConceptMapIf 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-4errorConceptMapIf 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-5errorConceptMapIf a resource is contained in another resource, it SHALL NOT have a security label
: contained.meta.security.empty()
dom-6best practiceConceptMapA 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()

This structure is derived from ConceptMap

Summary

 

Other representations of profile: CSV, Excel, Schematron

Notes: