Canonical Resource Management Infrastructure Implementation Guide
1.1.0-cibuild - cibuild International flag

Canonical Resource Management Infrastructure Implementation Guide, published by HL7 International / Clinical Decision Support. This guide is not an authorized publication; it is the continuous build for version 1.1.0-cibuild built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/HL7/crmi-ig/ and changes regularly. See the Directory of published versions

Resource Profile: CRMI Shareable StructureDefinition

Official URL: http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-shareablestructuredefinition Version: 1.1.0-cibuild
Standards status: Trial-use Maturity Level: 3 Computable Name: CRMIShareableStructureDefinition
Other Identifiers: OID:2.16.840.1.113883.4.642.40.38.42.58

Enforces the minimum information set for the structure definition metadata required by HL7 and other organizations that share and publish structure definitions

Usage:

Formal Views of Profile Content

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

NameFlagsCard.TypeDescription & Constraintsdoco
.. StructureDefinition C 1..1 StructureDefinition Structural Definition
dom-2: If the resource is contained in another resource, it SHALL NOT contain nested Resources
dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource
dom-4: If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated
dom-5: If a resource is contained in another resource, it SHALL NOT have a security label
dom-6: A resource should have narrative for robust management
sdf-0: Name should be usable as an identifier for the module by machine processing applications such as code generation
sdf-1: Element paths must be unique unless the structure is a constraint
sdf-15a: If the first element in a differential has no "." in the path and it's not a logical model, it has no type
sdf-4: If the structure is not abstract, then there SHALL be a baseDefinition
sdf-5: If the structure defines an extension then the structure must have context information
sdf-6: A structure must have either a differential, or a snapshot (or both)
sdf-9: In any snapshot or differential, no label, code or requirements on an element without a "." in the path (e.g. the first element)
sdf-11: If there's a type, its content must match the path name in the first element of a snapshot
sdf-14: All element definitions must have an id
sdf-15: The first element in a snapshot has no type unless model is a logical model.
sdf-16: All element definitions must have unique ids (snapshot)
sdf-17: All element definitions must have unique ids (diff)
sdf-18: Context Invariants can only be used for extensions
sdf-19: FHIR Specification models only use FHIR defined types
sdf-21: Default values can only be specified on specializations
sdf-22: FHIR Specification models never have default values
sdf-23: No slice name on root
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
ele-1: All FHIR elements must have a @value or children
... Slices for extension Content/Rules for all slices
.... knowledgeCapability S 0..* code shareable | computable | publishable | executable
URL: http://hl7.org/fhir/StructureDefinition/cqf-knowledgeCapability
Binding: KnowledgeCapability (required)
ele-1: All FHIR elements must have a @value or children
ext-1: Must have either extensions or value[x], not both
.... artifactComment S 0..* (Complex) Additional documentation, review, or usage guidance
URL: http://hl7.org/fhir/StructureDefinition/cqf-artifactComment
ele-1: All FHIR elements must have a @value or children
ext-1: Must have either extensions or value[x], not both
.... versionAlgorithm S 0..1 string, Coding How to compare versions
URL: http://hl7.org/fhir/StructureDefinition/artifact-versionAlgorithm
Binding: version-algorithm (extensible)
ele-1: All FHIR elements must have a @value or children
ext-1: Must have either extensions or value[x], not both
.... versionPolicy S 0..1 CodeableConcept metadata | strict
URL: http://hl7.org/fhir/StructureDefinition/artifact-versionPolicy
Binding: Artifact Version Policy (extensible): The versioning policy of the artifact


ele-1: All FHIR elements must have a @value or children
ext-1: Must have either extensions or value[x], not both
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
ele-1: All FHIR elements must have a @value or children
ext-1: Must have either extensions or value[x], not both
... version SΣ 1..1 string Business version of the structure definition
ele-1: All FHIR elements must have a @value or children
... name SΣC 1..1 string Name for this structure definition (computer friendly)
ele-1: All FHIR elements must have a @value or children
... title SΣ 1..1 string Name for this structure definition (human friendly)
ele-1: All FHIR elements must have a @value or children
... status ?!SΣ 1..1 code draft | active | retired | unknown
Binding: PublicationStatus (required): The lifecycle status of an artifact.


ele-1: All FHIR elements must have a @value or children
... experimental SΣ 1..1 boolean For testing purposes, not real usage
ele-1: All FHIR elements must have a @value or children
... publisher SΣ 0..1 string Name of the publisher (organization or individual)
ele-1: All FHIR elements must have a @value or children
... description S 1..1 markdown Natural language description of the structure definition
ele-1: All FHIR elements must have a @value or children
... kind Σ 1..1 code primitive-type | complex-type | resource | logical
Binding: StructureDefinitionKind (required): Defines the type of structure that a definition is describing.


ele-1: All FHIR elements must have a @value or children
... abstract Σ 1..1 boolean Whether the structure is abstract
ele-1: All FHIR elements must have a @value or children
... type ΣC 1..1 uri Type defined or constrained by this structure
Binding: FHIRDefinedType (extensible): Either a resource or a data type, including logical model types.


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

doco Documentation for this format

Terminology Bindings

PathConformanceValueSetURI
StructureDefinition.statusrequiredPublicationStatus
http://hl7.org/fhir/ValueSet/publication-status|4.0.1
from the FHIR Standard
StructureDefinition.kindrequiredStructureDefinitionKind
http://hl7.org/fhir/ValueSet/structure-definition-kind|4.0.1
from the FHIR Standard
StructureDefinition.typeextensibleFHIRDefinedType
http://hl7.org/fhir/ValueSet/defined-types
from the FHIR Standard

Constraints

IdGradePath(s)DetailsRequirements
dom-2errorStructureDefinitionIf the resource is contained in another resource, it SHALL NOT contain nested Resources
: contained.contained.empty()
dom-3errorStructureDefinitionIf 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-4errorStructureDefinitionIf 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-5errorStructureDefinitionIf a resource is contained in another resource, it SHALL NOT have a security label
: contained.meta.security.empty()
dom-6best practiceStructureDefinitionA 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()
sdf-0warningStructureDefinitionName 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}')
sdf-1errorStructureDefinitionElement paths must be unique unless the structure is a constraint
: derivation = 'constraint' or snapshot.element.select(path).isDistinct()
sdf-6errorStructureDefinitionA structure must have either a differential, or a snapshot (or both)
: snapshot.exists() or differential.exists()
sdf-14errorStructureDefinitionAll element definitions must have an id
: snapshot.element.all(id.exists()) and differential.element.all(id.exists())
elements have id
sdf-15aerrorStructureDefinitionIf the first element in a differential has no "." in the path and it's not a logical model, it has no type
: (kind!='logical' and differential.element.first().path.contains('.').not()) implies differential.element.first().type.empty()
No Type on the root element (differential)
sdf-4errorStructureDefinitionIf the structure is not abstract, then there SHALL be a baseDefinition
: abstract = true or baseDefinition.exists()
Ensure that the base types are abstract
sdf-5errorStructureDefinitionIf the structure defines an extension then the structure must have context information
: type != 'Extension' or derivation = 'specialization' or (context.exists())
sdf-9errorStructureDefinitionIn any snapshot or differential, no label, code or requirements on an element without a "." in the path (e.g. the first element)
: children().element.where(path.contains('.').not()).label.empty() and children().element.where(path.contains('.').not()).code.empty() and children().element.where(path.contains('.').not()).requirements.empty()
Because these 3 fields seem to be have overlapping meaning with the ones in the root of StructureDefinition
sdf-11errorStructureDefinitionIf there's a type, its content must match the path name in the first element of a snapshot
: kind != 'logical' implies snapshot.empty() or snapshot.element.first().path = type
Ensure that the type is not inconsistent with the other information in the structure
sdf-15errorStructureDefinitionThe first element in a snapshot has no type unless model is a logical model.
: kind!='logical' implies snapshot.element.first().type.empty()
No Type on the root element (snapshot)
sdf-16errorStructureDefinitionAll element definitions must have unique ids (snapshot)
: snapshot.element.all(id.exists()) and snapshot.element.id.trace('ids').isDistinct()
element ids need to be unique
sdf-17errorStructureDefinitionAll element definitions must have unique ids (diff)
: differential.element.all(id.exists()) and differential.element.id.trace('ids').isDistinct()
element ids need to be unique
sdf-18errorStructureDefinitionContext Invariants can only be used for extensions
: contextInvariant.exists() implies type = 'Extension'
contextInvariant
sdf-19errorStructureDefinitionFHIR Specification models only use FHIR defined types
: url.startsWith('http://hl7.org/fhir/StructureDefinition') implies (differential.element.type.code.all(matches('^[a-zA-Z0-9]+$') or matches('^http:\\/\\/hl7\\.org\\/fhirpath\\/System\\.[A-Z][A-Za-z]+$')) and snapshot.element.type.code.all(matches('^[a-zA-Z0-9\\.]+$') or matches('^http:\\/\\/hl7\\.org\\/fhirpath\\/System\\.[A-Z][A-Za-z]+$')))
custom types only in logical models
sdf-21errorStructureDefinitionDefault values can only be specified on specializations
: differential.element.defaultValue.exists() implies (derivation = 'specialization')
no default values on data types or resources
sdf-22errorStructureDefinitionFHIR Specification models never have default values
: url.startsWith('http://hl7.org/fhir/StructureDefinition') implies (snapshot.element.defaultValue.empty() and differential.element.defaultValue.empty())
no default values on data types or resources
sdf-23errorStructureDefinitionNo slice name on root
: (snapshot | differential).element.all(path.contains('.').not() implies sliceName.empty())
no sliceName on root

 

Other representations of profile: CSV, Excel, Schematron