HL7 v2+ Specification
0.0.0 - draft
HL7 v2+ Specification, published by HL7 International. This guide is not an authorized publication; it is the continuous build for version 0.0.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/HL7/v2ig/ and changes regularly. See the Directory of published versions
Official URL: http://hl7.org/v2/StructureDefinition/primitive-data-type-profile | Version: 0.0.0 | |||
Standards status: Informative | Computable Name: V2DataTypeDefinition |
Rules that are true for all primitive type definitions
Usages:
You can also check for usages in the FHIR IG Statistics
Description of Profiles, Differentials, Snapshots and how the different presentations work.
Name | Flags | Card. | Type | Description & Constraints Filter: ![]() ![]() |
---|---|---|---|---|
![]() ![]() |
C | 0..* | StructureDefinition | Structural Definition Constraints: cnl-0, sdf-1, sdf-4, sdf-5, sdf-6, sdf-11, sdf-14, sdf-15, sdf-15a, sdf-9, sdf-16, sdf-17, sdf-18, sdf-19, sdf-21, sdf-22, sdf-23, sdf-27, sdf-29 |
![]() ![]() ![]() |
?!Σ | 0..1 | uri | A set of rules under which this content was created |
![]() ![]() ![]() |
0..* | Resource | Contained, inline Resources | |
![]() ![]() ![]() |
?!Σ | 0..* | Extension | Extensions that cannot be ignored |
![]() ![]() ![]() |
ΣC | 1..1 | uri | Canonical identifier for this structure definition, represented as a URI (globally unique) Binding: HL7 v2 Primitive Data Types ValueSet (required) Constraints: cnl-1 |
![]() ![]() ![]() |
ΣC | 1..1 | string | Name for this structure definition (computer friendly) |
![]() ![]() ![]() |
?!Σ | 1..1 | code | draft | active | retired | unknown Binding: PublicationStatus (required): The lifecycle status of an artifact. |
![]() ![]() ![]() |
ΣC | 1..1 | code | primitive-type | complex-type | resource | logical Binding: StructureDefinitionKind (required): Defines the type of structure that a definition is describing. Fixed Value: primitive-type |
![]() ![]() ![]() |
ΣC | 1..1 | boolean | Whether the structure is abstract Fixed Value: false |
![]() ![]() ![]() |
ΣC | 1..1 | uri | Type defined or constrained by this structure Binding: FHIRTypes (extensible): Either a resource or a data type, including logical model types. |
![]() ![]() ![]() |
ΣC | 0..1 | canonical(StructureDefinition) | Definition that this type is constrained/specialized from |
![]() ![]() ![]() |
ΣC | 0..1 | code | specialization | constraint - How relates to base definition Binding: TypeDerivationRule (required): How a type relates to its baseDefinition. Fixed Value: constraint |
![]() ![]() ![]() |
C | 0..1 | BackboneElement | Snapshot view of the structure Constraints: sdf-3, sdf-8, sdf-24, sdf-25, sdf-26, sdf-8b |
![]() ![]() ![]() ![]() |
?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized |
![]() ![]() ![]() ![]() |
C | 1..* | ElementDefinition | Definition of elements in the resource (if no StructureDefinition) Constraints: sdf-10, sdf-28 |
![]() |
Path | Status | Usage | ValueSet | Version | Source |
StructureDefinition.url | Base | required | HL7 v2 Primitive Data Types ValueSet | 📦0.0.0 | This IG |
StructureDefinition.status | Base | required | PublicationStatus | 📍5.0.0 | FHIR Std. |
StructureDefinition.kind | Base | required | Structure Definition Kind | 📍5.0.0 | FHIR Std. |
StructureDefinition.type | Base | extensible | All FHIR Types | 📍5.0.0 | FHIR Std. |
StructureDefinition.derivation | Base | required | Type Derivation Rule | 📍5.0.0 | FHIR Std. |
Id | Grade | Path(s) | Description | Expression |
cnl-0 | warning | StructureDefinition | Name should be usable as an identifier for the module by machine processing applications such as code generation |
name.exists() implies name.matches('^[A-Z]([A-Za-z0-9_]){1,254}$')
|
cnl-1 | warning | StructureDefinition.url | URL should not contain | or # - these characters make processing canonical references problematic |
exists() implies matches('^[^|# ]+$')
|
ele-1 | error | **ALL** elements | All FHIR elements must have a @value or children |
hasValue() or (children().count() > id.count())
|
ext-1 | error | **ALL** extensions | Must have either extensions or value[x], not both |
extension.exists() != value.exists()
|
sdf-1 | error | StructureDefinition | Element paths must be unique unless the structure is a constraint |
derivation = 'constraint' or snapshot.element.select(path).isDistinct()
|
sdf-15a | error | StructureDefinition |
If the first element in a differential has no "." in the path and it's not a logical model, it has no type Requirements: No Type on the root element (differential) |
(kind!='logical' and differential.element.first().path.contains('.').not()) implies differential.element.first().type.empty()
|
sdf-3 | error | StructureDefinition.snapshot | Each element definition in a snapshot must have a formal definition and cardinalities, unless model is a logical model |
%resource.kind = 'logical' or element.all(definition.exists() and min.exists() and max.exists())
|
sdf-4 | error | StructureDefinition |
If the structure is not abstract, then there SHALL be a baseDefinition Requirements: Ensure that the base types are abstract |
abstract = true or baseDefinition.exists()
|
sdf-5 | error | StructureDefinition | If the structure defines an extension then the structure must have context information |
type != 'Extension' or derivation = 'specialization' or (context.exists())
|
sdf-6 | error | StructureDefinition | A structure must have either a differential, or a snapshot (or both) |
snapshot.exists() or differential.exists()
|
sdf-8 | error | StructureDefinition.snapshot | All snapshot elements must start with the StructureDefinition's specified type for non-logical models, or with the same type name for logical models |
(%resource.kind = 'logical' or element.first().path = %resource.type) and element.tail().all(path.startsWith(%resource.snapshot.element.first().path&'.'))
|
sdf-9 | error | StructureDefinition |
In any snapshot or differential, no label, code or requirements on an element without a "." in the path (e.g. the first element) Requirements: Because these 3 fields seem to be have overlapping meaning with the ones in the root of StructureDefinition |
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()
|
sdf-10 | error | StructureDefinition.snapshot.element |
provide either a binding reference or a description (or both) Requirements: binding is required |
binding.empty() or binding.valueSet.exists() or binding.description.exists()
|
sdf-11 | error | StructureDefinition |
If there's a type, its content must match the path name in the first element of a snapshot Requirements: Ensure that the type is not inconsistent with the other information in the structure |
kind != 'logical' implies snapshot.empty() or snapshot.element.first().path = type
|
sdf-14 | error | StructureDefinition |
All element definitions must have an id Requirements: elements have id |
snapshot.element.all(id.exists()) and differential.element.all(id.exists())
|
sdf-15 | error | StructureDefinition |
The first element in a snapshot has no type unless model is a logical model. Requirements: No Type on the root element (snapshot) |
kind!='logical' implies snapshot.element.first().type.empty()
|
sdf-16 | error | StructureDefinition |
All element definitions must have unique ids (snapshot) Requirements: element ids need to be unique |
snapshot.element.all(id.exists()) and snapshot.element.id.trace('ids').isDistinct()
|
sdf-17 | error | StructureDefinition |
All element definitions must have unique ids (diff) Requirements: element ids need to be unique |
differential.element.all(id.exists()) and differential.element.id.trace('ids').isDistinct()
|
sdf-18 | error | StructureDefinition |
Context Invariants can only be used for extensions Requirements: contextInvariant |
contextInvariant.exists() implies type = 'Extension'
|
sdf-19 | error | StructureDefinition |
FHIR Specification models only use FHIR defined types Requirements: custom types only in logical models |
url.startsWith('http://hl7.org/fhir/StructureDefinition') implies (differential | snapshot).element.type.code.all(matches('^[a-zA-Z0-9]+$') or matches('^http:\\/\\/hl7\\.org\\/fhirpath\\/System\\.[A-Z][A-Za-z]+$'))
|
sdf-21 | error | StructureDefinition |
Default values can only be specified on specializations Requirements: no default values on data types or resources |
differential.element.defaultValue.exists() implies (derivation = 'specialization')
|
sdf-22 | error | StructureDefinition |
FHIR Specification models never have default values Requirements: no default values on data types or resources |
url.startsWith('http://hl7.org/fhir/StructureDefinition') implies (snapshot.element.defaultValue.empty() and differential.element.defaultValue.empty())
|
sdf-23 | error | StructureDefinition |
No slice name on root Requirements: no sliceName on root |
(snapshot | differential).element.all(path.contains('.').not() implies sliceName.empty())
|
sdf-24 | error | StructureDefinition.snapshot | For CodeableReference elements, target profiles must be listed on the CodeableReference, not the CodeableReference.reference |
element.where(type.where(code='Reference').exists() and path.endsWith('.reference') and type.targetProfile.exists() and (path.substring(0,$this.path.length()-10) in %context.element.where(type.where(code='CodeableReference').exists()).path)).exists().not()
|
sdf-25 | error | StructureDefinition.snapshot | For CodeableReference elements, bindings must be listed on the CodeableReference, not the CodeableReference.concept |
element.where(type.where(code='CodeableConcept').exists() and path.endsWith('.concept') and binding.exists() and (path.substring(0,$this.path.length()-8) in %context.element.where(type.where(code='CodeableReference').exists()).path)).exists().not()
|
sdf-26 | best practice | StructureDefinition.snapshot | The root element of a profile should not have mustSupport = true |
$this.where(element[0].mustSupport='true').exists().not()
|
sdf-27 | error | StructureDefinition | If there's a base definition, there must be a derivation |
baseDefinition.exists() implies derivation.exists()
|
sdf-28 | error | StructureDefinition.snapshot.element | If there are no discriminators, there must be a definition |
slicing.exists().not() or (slicing.discriminator.exists() or slicing.description.exists())
|
sdf-29 | warning | StructureDefinition | Elements in Resources must have a min cardinality or 0 or 1 and a max cardinality of 1 or * |
((kind in 'resource' | 'complex-type') and (derivation = 'specialization')) implies differential.element.where((min != 0 and min != 1) or (max != '1' and max != '*')).empty()
|
sdf-8b | error | StructureDefinition.snapshot | All snapshot elements must have a base definition |
element.all(base.exists())
|
This structure is derived from StructureDefinition
Name | Flags | Card. | Type | Description & Constraints Filter: ![]() ![]() |
---|---|---|---|---|
![]() ![]() |
0..* | StructureDefinition | Structural Definition | |
![]() ![]() ![]() |
1..1 | uri | Canonical identifier for this structure definition, represented as a URI (globally unique) Binding: HL7 v2 Primitive Data Types ValueSet (required) | |
![]() ![]() ![]() |
1..1 | code | primitive-type | complex-type | resource | logical Fixed Value: primitive-type | |
![]() ![]() ![]() |
1..1 | boolean | Whether the structure is abstract Fixed Value: false | |
![]() ![]() ![]() |
0..1 | code | specialization | constraint - How relates to base definition Fixed Value: constraint | |
![]() |
Path | Status | Usage | ValueSet | Version | Source |
StructureDefinition.url | Base | required | HL7 v2 Primitive Data Types ValueSet | 📦0.0.0 | This IG |
Name | Flags | Card. | Type | Description & Constraints Filter: ![]() ![]() | ||||
---|---|---|---|---|---|---|---|---|
![]() ![]() |
C | 0..* | StructureDefinition | Structural Definition Constraints: cnl-0, sdf-1, sdf-4, sdf-5, sdf-6, sdf-11, sdf-14, sdf-15, sdf-15a, sdf-9, sdf-16, sdf-17, sdf-18, sdf-19, sdf-21, sdf-22, sdf-23, sdf-27, sdf-29 | ||||
![]() ![]() ![]() |
Σ | 0..1 | id | Logical id of this artifact | ||||
![]() ![]() ![]() |
Σ | 0..1 | Meta | Metadata about the resource | ||||
![]() ![]() ![]() |
?!Σ | 0..1 | uri | A set of rules under which this content was created | ||||
![]() ![]() ![]() |
0..1 | code | Language of the resource content Binding: AllLanguages (required): IETF language tag for a human language
| |||||
![]() ![]() ![]() |
0..1 | Narrative | Text summary of the resource, for human interpretation This profile does not constrain the narrative in regard to content, language, or traceability to data elements | |||||
![]() ![]() ![]() |
0..* | Resource | Contained, inline Resources | |||||
![]() ![]() ![]() |
0..* | Extension | Additional content defined by implementations | |||||
![]() ![]() ![]() |
?!Σ | 0..* | Extension | Extensions that cannot be ignored | ||||
![]() ![]() ![]() |
ΣC | 1..1 | uri | Canonical identifier for this structure definition, represented as a URI (globally unique) Binding: HL7 v2 Primitive Data Types ValueSet (required) Constraints: cnl-1 | ||||
![]() ![]() ![]() |
Σ | 0..* | Identifier | Additional identifier for the structure definition | ||||
![]() ![]() ![]() |
Σ | 0..1 | string | Business version of the structure definition | ||||
![]() ![]() ![]() |
Σ | 0..1 | How to compare versions Binding: VersionAlgorithm (extensible) | |||||
![]() ![]() ![]() ![]() |
string | |||||||
![]() ![]() ![]() ![]() |
Coding | |||||||
![]() ![]() ![]() |
ΣC | 1..1 | string | Name for this structure definition (computer friendly) | ||||
![]() ![]() ![]() |
Σ | 0..1 | string | Name for this structure definition (human friendly) | ||||
![]() ![]() ![]() |
?!Σ | 1..1 | code | draft | active | retired | unknown Binding: PublicationStatus (required): The lifecycle status of an artifact. | ||||
![]() ![]() ![]() |
Σ | 0..1 | boolean | For testing purposes, not real usage | ||||
![]() ![]() ![]() |
Σ | 0..1 | dateTime | Date last changed | ||||
![]() ![]() ![]() |
Σ | 0..1 | string | Name of the publisher/steward (organization or individual) | ||||
![]() ![]() ![]() |
Σ | 0..* | ContactDetail | Contact details for the publisher | ||||
![]() ![]() ![]() |
0..1 | markdown | Natural language description of the structure definition | |||||
![]() ![]() ![]() |
Σ | 0..* | UsageContext | The context that the content is intended to support | ||||
![]() ![]() ![]() |
Σ | 0..* | CodeableConcept | Intended jurisdiction for structure definition (if applicable) Binding: JurisdictionValueSet (extensible): Countries and regions within which this artifact is targeted for use. | ||||
![]() ![]() ![]() |
0..1 | markdown | Why this structure definition is defined | |||||
![]() ![]() ![]() |
0..1 | markdown | Use and/or publishing restrictions | |||||
![]() ![]() ![]() |
0..1 | string | Copyright holder and year(s) | |||||
![]() ![]() ![]() |
Σ | 0..* | Coding | Assist with indexing and finding Binding: DefinitionUseCodes (extensible): Codes for the meaning of the defined structure (SNOMED CT and LOINC codes, as an example). | ||||
![]() ![]() ![]() |
Σ | 0..1 | code | FHIR Version this StructureDefinition targets Binding: FHIRVersion (required): All published FHIR Versions. | ||||
![]() ![]() ![]() |
C | 0..* | BackboneElement | External specification that the content is mapped to Constraints: sdf-2 | ||||
![]() ![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |||||
![]() ![]() ![]() ![]() |
0..* | Extension | Additional content defined by implementations | |||||
![]() ![]() ![]() ![]() |
?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized | ||||
![]() ![]() ![]() ![]() |
1..1 | id | Internal id when this mapping is used | |||||
![]() ![]() ![]() ![]() |
C | 0..1 | uri | Identifies what this mapping refers to | ||||
![]() ![]() ![]() ![]() |
C | 0..1 | string | Names what this mapping refers to | ||||
![]() ![]() ![]() ![]() |
0..1 | string | Versions, Issues, Scope limitations etc | |||||
![]() ![]() ![]() |
ΣC | 1..1 | code | primitive-type | complex-type | resource | logical Binding: StructureDefinitionKind (required): Defines the type of structure that a definition is describing. Fixed Value: primitive-type | ||||
![]() ![]() ![]() |
ΣC | 1..1 | boolean | Whether the structure is abstract Fixed Value: false | ||||
![]() ![]() ![]() |
ΣC | 0..* | BackboneElement | If an extension, where it can be used in instances | ||||
![]() ![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |||||
![]() ![]() ![]() ![]() |
0..* | Extension | Additional content defined by implementations | |||||
![]() ![]() ![]() ![]() |
?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized | ||||
![]() ![]() ![]() ![]() |
Σ | 1..1 | code | fhirpath | element | extension Binding: ExtensionContextType (required): How an extension context is interpreted. | ||||
![]() ![]() ![]() ![]() |
Σ | 1..1 | string | Where the extension can be used in instances | ||||
![]() ![]() ![]() |
ΣC | 0..* | string | FHIRPath invariants - when the extension can be used | ||||
![]() ![]() ![]() |
ΣC | 1..1 | uri | Type defined or constrained by this structure Binding: FHIRTypes (extensible): Either a resource or a data type, including logical model types. | ||||
![]() ![]() ![]() |
ΣC | 0..1 | canonical(StructureDefinition) | Definition that this type is constrained/specialized from | ||||
![]() ![]() ![]() |
ΣC | 0..1 | code | specialization | constraint - How relates to base definition Binding: TypeDerivationRule (required): How a type relates to its baseDefinition. Fixed Value: constraint | ||||
![]() ![]() ![]() |
C | 0..1 | BackboneElement | Snapshot view of the structure Constraints: sdf-3, sdf-8, sdf-24, sdf-25, sdf-26, sdf-8b | ||||
![]() ![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |||||
![]() ![]() ![]() ![]() |
0..* | Extension | Additional content defined by implementations | |||||
![]() ![]() ![]() ![]() |
?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized | ||||
![]() ![]() ![]() ![]() |
C | 1..* | ElementDefinition | Definition of elements in the resource (if no StructureDefinition) Constraints: sdf-10, sdf-28 | ||||
![]() ![]() ![]() |
C | 0..1 | BackboneElement | Differential view of the structure Constraints: sdf-20, sdf-8a | ||||
![]() ![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |||||
![]() ![]() ![]() ![]() |
0..* | Extension | Additional content defined by implementations | |||||
![]() ![]() ![]() ![]() |
?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized | ||||
![]() ![]() ![]() ![]() |
C | 1..* | ElementDefinition | Definition of elements in the resource (if no StructureDefinition) | ||||
![]() |
Path | Status | Usage | ValueSet | Version | Source |
StructureDefinition.language | Base | required | All Languages | 📍5.0.0 | FHIR Std. |
StructureDefinition.url | Base | required | HL7 v2 Primitive Data Types ValueSet | 📦0.0.0 | This IG |
StructureDefinition.versionAlgorithm[x] | Base | extensible | Version Algorithm | 📍5.0.0 | FHIR Std. |
StructureDefinition.status | Base | required | PublicationStatus | 📍5.0.0 | FHIR Std. |
StructureDefinition.jurisdiction | Base | extensible | Jurisdiction ValueSet | 📍5.0.0 | FHIR Std. |
StructureDefinition.keyword | Base | extensible | Structure Definition Use Codes / Keywords | 📍5.0.0 | FHIR Std. |
StructureDefinition.fhirVersion | Base | required | FHIRVersion | 📍5.0.0 | FHIR Std. |
StructureDefinition.kind | Base | required | Structure Definition Kind | 📍5.0.0 | FHIR Std. |
StructureDefinition.context.type | Base | required | Extension Context Type | 📍5.0.0 | FHIR Std. |
StructureDefinition.type | Base | extensible | All FHIR Types | 📍5.0.0 | FHIR Std. |
StructureDefinition.derivation | Base | required | Type Derivation Rule | 📍5.0.0 | FHIR Std. |
Id | Grade | Path(s) | Description | Expression |
cnl-0 | warning | StructureDefinition | Name should be usable as an identifier for the module by machine processing applications such as code generation |
name.exists() implies name.matches('^[A-Z]([A-Za-z0-9_]){1,254}$')
|
cnl-1 | warning | StructureDefinition.url | URL should not contain | or # - these characters make processing canonical references problematic |
exists() implies matches('^[^|# ]+$')
|
ele-1 | error | **ALL** elements | All FHIR elements must have a @value or children |
hasValue() or (children().count() > id.count())
|
ext-1 | error | **ALL** extensions | Must have either extensions or value[x], not both |
extension.exists() != value.exists()
|
sdf-1 | error | StructureDefinition | Element paths must be unique unless the structure is a constraint |
derivation = 'constraint' or snapshot.element.select(path).isDistinct()
|
sdf-15a | error | StructureDefinition |
If the first element in a differential has no "." in the path and it's not a logical model, it has no type Requirements: No Type on the root element (differential) |
(kind!='logical' and differential.element.first().path.contains('.').not()) implies differential.element.first().type.empty()
|
sdf-2 | error | StructureDefinition.mapping | Must have at least a name or a uri (or both) |
name.exists() or uri.exists()
|
sdf-3 | error | StructureDefinition.snapshot | Each element definition in a snapshot must have a formal definition and cardinalities, unless model is a logical model |
%resource.kind = 'logical' or element.all(definition.exists() and min.exists() and max.exists())
|
sdf-4 | error | StructureDefinition |
If the structure is not abstract, then there SHALL be a baseDefinition Requirements: Ensure that the base types are abstract |
abstract = true or baseDefinition.exists()
|
sdf-5 | error | StructureDefinition | If the structure defines an extension then the structure must have context information |
type != 'Extension' or derivation = 'specialization' or (context.exists())
|
sdf-6 | error | StructureDefinition | A structure must have either a differential, or a snapshot (or both) |
snapshot.exists() or differential.exists()
|
sdf-8 | error | StructureDefinition.snapshot | All snapshot elements must start with the StructureDefinition's specified type for non-logical models, or with the same type name for logical models |
(%resource.kind = 'logical' or element.first().path = %resource.type) and element.tail().all(path.startsWith(%resource.snapshot.element.first().path&'.'))
|
sdf-9 | error | StructureDefinition |
In any snapshot or differential, no label, code or requirements on an element without a "." in the path (e.g. the first element) Requirements: Because these 3 fields seem to be have overlapping meaning with the ones in the root of StructureDefinition |
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()
|
sdf-10 | error | StructureDefinition.snapshot.element |
provide either a binding reference or a description (or both) Requirements: binding is required |
binding.empty() or binding.valueSet.exists() or binding.description.exists()
|
sdf-11 | error | StructureDefinition |
If there's a type, its content must match the path name in the first element of a snapshot Requirements: Ensure that the type is not inconsistent with the other information in the structure |
kind != 'logical' implies snapshot.empty() or snapshot.element.first().path = type
|
sdf-14 | error | StructureDefinition |
All element definitions must have an id Requirements: elements have id |
snapshot.element.all(id.exists()) and differential.element.all(id.exists())
|
sdf-15 | error | StructureDefinition |
The first element in a snapshot has no type unless model is a logical model. Requirements: No Type on the root element (snapshot) |
kind!='logical' implies snapshot.element.first().type.empty()
|
sdf-16 | error | StructureDefinition |
All element definitions must have unique ids (snapshot) Requirements: element ids need to be unique |
snapshot.element.all(id.exists()) and snapshot.element.id.trace('ids').isDistinct()
|
sdf-17 | error | StructureDefinition |
All element definitions must have unique ids (diff) Requirements: element ids need to be unique |
differential.element.all(id.exists()) and differential.element.id.trace('ids').isDistinct()
|
sdf-18 | error | StructureDefinition |
Context Invariants can only be used for extensions Requirements: contextInvariant |
contextInvariant.exists() implies type = 'Extension'
|
sdf-19 | error | StructureDefinition |
FHIR Specification models only use FHIR defined types Requirements: custom types only in logical models |
url.startsWith('http://hl7.org/fhir/StructureDefinition') implies (differential | snapshot).element.type.code.all(matches('^[a-zA-Z0-9]+$') or matches('^http:\\/\\/hl7\\.org\\/fhirpath\\/System\\.[A-Z][A-Za-z]+$'))
|
sdf-20 | error | StructureDefinition.differential |
No slicing on the root element Requirements: no slicing on root |
element.where(path.contains('.').not()).slicing.empty()
|
sdf-21 | error | StructureDefinition |
Default values can only be specified on specializations Requirements: no default values on data types or resources |
differential.element.defaultValue.exists() implies (derivation = 'specialization')
|
sdf-22 | error | StructureDefinition |
FHIR Specification models never have default values Requirements: no default values on data types or resources |
url.startsWith('http://hl7.org/fhir/StructureDefinition') implies (snapshot.element.defaultValue.empty() and differential.element.defaultValue.empty())
|
sdf-23 | error | StructureDefinition |
No slice name on root Requirements: no sliceName on root |
(snapshot | differential).element.all(path.contains('.').not() implies sliceName.empty())
|
sdf-24 | error | StructureDefinition.snapshot | For CodeableReference elements, target profiles must be listed on the CodeableReference, not the CodeableReference.reference |
element.where(type.where(code='Reference').exists() and path.endsWith('.reference') and type.targetProfile.exists() and (path.substring(0,$this.path.length()-10) in %context.element.where(type.where(code='CodeableReference').exists()).path)).exists().not()
|
sdf-25 | error | StructureDefinition.snapshot | For CodeableReference elements, bindings must be listed on the CodeableReference, not the CodeableReference.concept |
element.where(type.where(code='CodeableConcept').exists() and path.endsWith('.concept') and binding.exists() and (path.substring(0,$this.path.length()-8) in %context.element.where(type.where(code='CodeableReference').exists()).path)).exists().not()
|
sdf-26 | best practice | StructureDefinition.snapshot | The root element of a profile should not have mustSupport = true |
$this.where(element[0].mustSupport='true').exists().not()
|
sdf-27 | error | StructureDefinition | If there's a base definition, there must be a derivation |
baseDefinition.exists() implies derivation.exists()
|
sdf-28 | error | StructureDefinition.snapshot.element | If there are no discriminators, there must be a definition |
slicing.exists().not() or (slicing.discriminator.exists() or slicing.description.exists())
|
sdf-29 | warning | StructureDefinition | Elements in Resources must have a min cardinality or 0 or 1 and a max cardinality of 1 or * |
((kind in 'resource' | 'complex-type') and (derivation = 'specialization')) implies differential.element.where((min != 0 and min != 1) or (max != '1' and max != '*')).empty()
|
sdf-8a | error | StructureDefinition.differential | In any differential, all the elements must start with the StructureDefinition's specified type for non-logical models, or with the same type name for logical models |
(%resource.kind = 'logical' or element.first().path.startsWith(%resource.type)) and (element.tail().empty() or element.tail().all(path.startsWith(%resource.differential.element.first().path.replaceMatches('\\..*','')&'.')))
|
sdf-8b | error | StructureDefinition.snapshot | All snapshot elements must have a base definition |
element.all(base.exists())
|
This structure is derived from StructureDefinition
Key Elements View
Name | Flags | Card. | Type | Description & Constraints Filter: ![]() ![]() |
---|---|---|---|---|
![]() ![]() |
C | 0..* | StructureDefinition | Structural Definition Constraints: cnl-0, sdf-1, sdf-4, sdf-5, sdf-6, sdf-11, sdf-14, sdf-15, sdf-15a, sdf-9, sdf-16, sdf-17, sdf-18, sdf-19, sdf-21, sdf-22, sdf-23, sdf-27, sdf-29 |
![]() ![]() ![]() |
?!Σ | 0..1 | uri | A set of rules under which this content was created |
![]() ![]() ![]() |
0..* | Resource | Contained, inline Resources | |
![]() ![]() ![]() |
?!Σ | 0..* | Extension | Extensions that cannot be ignored |
![]() ![]() ![]() |
ΣC | 1..1 | uri | Canonical identifier for this structure definition, represented as a URI (globally unique) Binding: HL7 v2 Primitive Data Types ValueSet (required) Constraints: cnl-1 |
![]() ![]() ![]() |
ΣC | 1..1 | string | Name for this structure definition (computer friendly) |
![]() ![]() ![]() |
?!Σ | 1..1 | code | draft | active | retired | unknown Binding: PublicationStatus (required): The lifecycle status of an artifact. |
![]() ![]() ![]() |
ΣC | 1..1 | code | primitive-type | complex-type | resource | logical Binding: StructureDefinitionKind (required): Defines the type of structure that a definition is describing. Fixed Value: primitive-type |
![]() ![]() ![]() |
ΣC | 1..1 | boolean | Whether the structure is abstract Fixed Value: false |
![]() ![]() ![]() |
ΣC | 1..1 | uri | Type defined or constrained by this structure Binding: FHIRTypes (extensible): Either a resource or a data type, including logical model types. |
![]() ![]() ![]() |
ΣC | 0..1 | canonical(StructureDefinition) | Definition that this type is constrained/specialized from |
![]() ![]() ![]() |
ΣC | 0..1 | code | specialization | constraint - How relates to base definition Binding: TypeDerivationRule (required): How a type relates to its baseDefinition. Fixed Value: constraint |
![]() ![]() ![]() |
C | 0..1 | BackboneElement | Snapshot view of the structure Constraints: sdf-3, sdf-8, sdf-24, sdf-25, sdf-26, sdf-8b |
![]() ![]() ![]() ![]() |
?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized |
![]() ![]() ![]() ![]() |
C | 1..* | ElementDefinition | Definition of elements in the resource (if no StructureDefinition) Constraints: sdf-10, sdf-28 |
![]() |
Path | Status | Usage | ValueSet | Version | Source |
StructureDefinition.url | Base | required | HL7 v2 Primitive Data Types ValueSet | 📦0.0.0 | This IG |
StructureDefinition.status | Base | required | PublicationStatus | 📍5.0.0 | FHIR Std. |
StructureDefinition.kind | Base | required | Structure Definition Kind | 📍5.0.0 | FHIR Std. |
StructureDefinition.type | Base | extensible | All FHIR Types | 📍5.0.0 | FHIR Std. |
StructureDefinition.derivation | Base | required | Type Derivation Rule | 📍5.0.0 | FHIR Std. |
Id | Grade | Path(s) | Description | Expression |
cnl-0 | warning | StructureDefinition | Name should be usable as an identifier for the module by machine processing applications such as code generation |
name.exists() implies name.matches('^[A-Z]([A-Za-z0-9_]){1,254}$')
|
cnl-1 | warning | StructureDefinition.url | URL should not contain | or # - these characters make processing canonical references problematic |
exists() implies matches('^[^|# ]+$')
|
ele-1 | error | **ALL** elements | All FHIR elements must have a @value or children |
hasValue() or (children().count() > id.count())
|
ext-1 | error | **ALL** extensions | Must have either extensions or value[x], not both |
extension.exists() != value.exists()
|
sdf-1 | error | StructureDefinition | Element paths must be unique unless the structure is a constraint |
derivation = 'constraint' or snapshot.element.select(path).isDistinct()
|
sdf-15a | error | StructureDefinition |
If the first element in a differential has no "." in the path and it's not a logical model, it has no type Requirements: No Type on the root element (differential) |
(kind!='logical' and differential.element.first().path.contains('.').not()) implies differential.element.first().type.empty()
|
sdf-3 | error | StructureDefinition.snapshot | Each element definition in a snapshot must have a formal definition and cardinalities, unless model is a logical model |
%resource.kind = 'logical' or element.all(definition.exists() and min.exists() and max.exists())
|
sdf-4 | error | StructureDefinition |
If the structure is not abstract, then there SHALL be a baseDefinition Requirements: Ensure that the base types are abstract |
abstract = true or baseDefinition.exists()
|
sdf-5 | error | StructureDefinition | If the structure defines an extension then the structure must have context information |
type != 'Extension' or derivation = 'specialization' or (context.exists())
|
sdf-6 | error | StructureDefinition | A structure must have either a differential, or a snapshot (or both) |
snapshot.exists() or differential.exists()
|
sdf-8 | error | StructureDefinition.snapshot | All snapshot elements must start with the StructureDefinition's specified type for non-logical models, or with the same type name for logical models |
(%resource.kind = 'logical' or element.first().path = %resource.type) and element.tail().all(path.startsWith(%resource.snapshot.element.first().path&'.'))
|
sdf-9 | error | StructureDefinition |
In any snapshot or differential, no label, code or requirements on an element without a "." in the path (e.g. the first element) Requirements: Because these 3 fields seem to be have overlapping meaning with the ones in the root of StructureDefinition |
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()
|
sdf-10 | error | StructureDefinition.snapshot.element |
provide either a binding reference or a description (or both) Requirements: binding is required |
binding.empty() or binding.valueSet.exists() or binding.description.exists()
|
sdf-11 | error | StructureDefinition |
If there's a type, its content must match the path name in the first element of a snapshot Requirements: Ensure that the type is not inconsistent with the other information in the structure |
kind != 'logical' implies snapshot.empty() or snapshot.element.first().path = type
|
sdf-14 | error | StructureDefinition |
All element definitions must have an id Requirements: elements have id |
snapshot.element.all(id.exists()) and differential.element.all(id.exists())
|
sdf-15 | error | StructureDefinition |
The first element in a snapshot has no type unless model is a logical model. Requirements: No Type on the root element (snapshot) |
kind!='logical' implies snapshot.element.first().type.empty()
|
sdf-16 | error | StructureDefinition |
All element definitions must have unique ids (snapshot) Requirements: element ids need to be unique |
snapshot.element.all(id.exists()) and snapshot.element.id.trace('ids').isDistinct()
|
sdf-17 | error | StructureDefinition |
All element definitions must have unique ids (diff) Requirements: element ids need to be unique |
differential.element.all(id.exists()) and differential.element.id.trace('ids').isDistinct()
|
sdf-18 | error | StructureDefinition |
Context Invariants can only be used for extensions Requirements: contextInvariant |
contextInvariant.exists() implies type = 'Extension'
|
sdf-19 | error | StructureDefinition |
FHIR Specification models only use FHIR defined types Requirements: custom types only in logical models |
url.startsWith('http://hl7.org/fhir/StructureDefinition') implies (differential | snapshot).element.type.code.all(matches('^[a-zA-Z0-9]+$') or matches('^http:\\/\\/hl7\\.org\\/fhirpath\\/System\\.[A-Z][A-Za-z]+$'))
|
sdf-21 | error | StructureDefinition |
Default values can only be specified on specializations Requirements: no default values on data types or resources |
differential.element.defaultValue.exists() implies (derivation = 'specialization')
|
sdf-22 | error | StructureDefinition |
FHIR Specification models never have default values Requirements: no default values on data types or resources |
url.startsWith('http://hl7.org/fhir/StructureDefinition') implies (snapshot.element.defaultValue.empty() and differential.element.defaultValue.empty())
|
sdf-23 | error | StructureDefinition |
No slice name on root Requirements: no sliceName on root |
(snapshot | differential).element.all(path.contains('.').not() implies sliceName.empty())
|
sdf-24 | error | StructureDefinition.snapshot | For CodeableReference elements, target profiles must be listed on the CodeableReference, not the CodeableReference.reference |
element.where(type.where(code='Reference').exists() and path.endsWith('.reference') and type.targetProfile.exists() and (path.substring(0,$this.path.length()-10) in %context.element.where(type.where(code='CodeableReference').exists()).path)).exists().not()
|
sdf-25 | error | StructureDefinition.snapshot | For CodeableReference elements, bindings must be listed on the CodeableReference, not the CodeableReference.concept |
element.where(type.where(code='CodeableConcept').exists() and path.endsWith('.concept') and binding.exists() and (path.substring(0,$this.path.length()-8) in %context.element.where(type.where(code='CodeableReference').exists()).path)).exists().not()
|
sdf-26 | best practice | StructureDefinition.snapshot | The root element of a profile should not have mustSupport = true |
$this.where(element[0].mustSupport='true').exists().not()
|
sdf-27 | error | StructureDefinition | If there's a base definition, there must be a derivation |
baseDefinition.exists() implies derivation.exists()
|
sdf-28 | error | StructureDefinition.snapshot.element | If there are no discriminators, there must be a definition |
slicing.exists().not() or (slicing.discriminator.exists() or slicing.description.exists())
|
sdf-29 | warning | StructureDefinition | Elements in Resources must have a min cardinality or 0 or 1 and a max cardinality of 1 or * |
((kind in 'resource' | 'complex-type') and (derivation = 'specialization')) implies differential.element.where((min != 0 and min != 1) or (max != '1' and max != '*')).empty()
|
sdf-8b | error | StructureDefinition.snapshot | All snapshot elements must have a base definition |
element.all(base.exists())
|
Differential View
This structure is derived from StructureDefinition
Name | Flags | Card. | Type | Description & Constraints Filter: ![]() ![]() |
---|---|---|---|---|
![]() ![]() |
0..* | StructureDefinition | Structural Definition | |
![]() ![]() ![]() |
1..1 | uri | Canonical identifier for this structure definition, represented as a URI (globally unique) Binding: HL7 v2 Primitive Data Types ValueSet (required) | |
![]() ![]() ![]() |
1..1 | code | primitive-type | complex-type | resource | logical Fixed Value: primitive-type | |
![]() ![]() ![]() |
1..1 | boolean | Whether the structure is abstract Fixed Value: false | |
![]() ![]() ![]() |
0..1 | code | specialization | constraint - How relates to base definition Fixed Value: constraint | |
![]() |
Path | Status | Usage | ValueSet | Version | Source |
StructureDefinition.url | Base | required | HL7 v2 Primitive Data Types ValueSet | 📦0.0.0 | This IG |
Snapshot View
Name | Flags | Card. | Type | Description & Constraints Filter: ![]() ![]() | ||||
---|---|---|---|---|---|---|---|---|
![]() ![]() |
C | 0..* | StructureDefinition | Structural Definition Constraints: cnl-0, sdf-1, sdf-4, sdf-5, sdf-6, sdf-11, sdf-14, sdf-15, sdf-15a, sdf-9, sdf-16, sdf-17, sdf-18, sdf-19, sdf-21, sdf-22, sdf-23, sdf-27, sdf-29 | ||||
![]() ![]() ![]() |
Σ | 0..1 | id | Logical id of this artifact | ||||
![]() ![]() ![]() |
Σ | 0..1 | Meta | Metadata about the resource | ||||
![]() ![]() ![]() |
?!Σ | 0..1 | uri | A set of rules under which this content was created | ||||
![]() ![]() ![]() |
0..1 | code | Language of the resource content Binding: AllLanguages (required): IETF language tag for a human language
| |||||
![]() ![]() ![]() |
0..1 | Narrative | Text summary of the resource, for human interpretation This profile does not constrain the narrative in regard to content, language, or traceability to data elements | |||||
![]() ![]() ![]() |
0..* | Resource | Contained, inline Resources | |||||
![]() ![]() ![]() |
0..* | Extension | Additional content defined by implementations | |||||
![]() ![]() ![]() |
?!Σ | 0..* | Extension | Extensions that cannot be ignored | ||||
![]() ![]() ![]() |
ΣC | 1..1 | uri | Canonical identifier for this structure definition, represented as a URI (globally unique) Binding: HL7 v2 Primitive Data Types ValueSet (required) Constraints: cnl-1 | ||||
![]() ![]() ![]() |
Σ | 0..* | Identifier | Additional identifier for the structure definition | ||||
![]() ![]() ![]() |
Σ | 0..1 | string | Business version of the structure definition | ||||
![]() ![]() ![]() |
Σ | 0..1 | How to compare versions Binding: VersionAlgorithm (extensible) | |||||
![]() ![]() ![]() ![]() |
string | |||||||
![]() ![]() ![]() ![]() |
Coding | |||||||
![]() ![]() ![]() |
ΣC | 1..1 | string | Name for this structure definition (computer friendly) | ||||
![]() ![]() ![]() |
Σ | 0..1 | string | Name for this structure definition (human friendly) | ||||
![]() ![]() ![]() |
?!Σ | 1..1 | code | draft | active | retired | unknown Binding: PublicationStatus (required): The lifecycle status of an artifact. | ||||
![]() ![]() ![]() |
Σ | 0..1 | boolean | For testing purposes, not real usage | ||||
![]() ![]() ![]() |
Σ | 0..1 | dateTime | Date last changed | ||||
![]() ![]() ![]() |
Σ | 0..1 | string | Name of the publisher/steward (organization or individual) | ||||
![]() ![]() ![]() |
Σ | 0..* | ContactDetail | Contact details for the publisher | ||||
![]() ![]() ![]() |
0..1 | markdown | Natural language description of the structure definition | |||||
![]() ![]() ![]() |
Σ | 0..* | UsageContext | The context that the content is intended to support | ||||
![]() ![]() ![]() |
Σ | 0..* | CodeableConcept | Intended jurisdiction for structure definition (if applicable) Binding: JurisdictionValueSet (extensible): Countries and regions within which this artifact is targeted for use. | ||||
![]() ![]() ![]() |
0..1 | markdown | Why this structure definition is defined | |||||
![]() ![]() ![]() |
0..1 | markdown | Use and/or publishing restrictions | |||||
![]() ![]() ![]() |
0..1 | string | Copyright holder and year(s) | |||||
![]() ![]() ![]() |
Σ | 0..* | Coding | Assist with indexing and finding Binding: DefinitionUseCodes (extensible): Codes for the meaning of the defined structure (SNOMED CT and LOINC codes, as an example). | ||||
![]() ![]() ![]() |
Σ | 0..1 | code | FHIR Version this StructureDefinition targets Binding: FHIRVersion (required): All published FHIR Versions. | ||||
![]() ![]() ![]() |
C | 0..* | BackboneElement | External specification that the content is mapped to Constraints: sdf-2 | ||||
![]() ![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |||||
![]() ![]() ![]() ![]() |
0..* | Extension | Additional content defined by implementations | |||||
![]() ![]() ![]() ![]() |
?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized | ||||
![]() ![]() ![]() ![]() |
1..1 | id | Internal id when this mapping is used | |||||
![]() ![]() ![]() ![]() |
C | 0..1 | uri | Identifies what this mapping refers to | ||||
![]() ![]() ![]() ![]() |
C | 0..1 | string | Names what this mapping refers to | ||||
![]() ![]() ![]() ![]() |
0..1 | string | Versions, Issues, Scope limitations etc | |||||
![]() ![]() ![]() |
ΣC | 1..1 | code | primitive-type | complex-type | resource | logical Binding: StructureDefinitionKind (required): Defines the type of structure that a definition is describing. Fixed Value: primitive-type | ||||
![]() ![]() ![]() |
ΣC | 1..1 | boolean | Whether the structure is abstract Fixed Value: false | ||||
![]() ![]() ![]() |
ΣC | 0..* | BackboneElement | If an extension, where it can be used in instances | ||||
![]() ![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |||||
![]() ![]() ![]() ![]() |
0..* | Extension | Additional content defined by implementations | |||||
![]() ![]() ![]() ![]() |
?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized | ||||
![]() ![]() ![]() ![]() |
Σ | 1..1 | code | fhirpath | element | extension Binding: ExtensionContextType (required): How an extension context is interpreted. | ||||
![]() ![]() ![]() ![]() |
Σ | 1..1 | string | Where the extension can be used in instances | ||||
![]() ![]() ![]() |
ΣC | 0..* | string | FHIRPath invariants - when the extension can be used | ||||
![]() ![]() ![]() |
ΣC | 1..1 | uri | Type defined or constrained by this structure Binding: FHIRTypes (extensible): Either a resource or a data type, including logical model types. | ||||
![]() ![]() ![]() |
ΣC | 0..1 | canonical(StructureDefinition) | Definition that this type is constrained/specialized from | ||||
![]() ![]() ![]() |
ΣC | 0..1 | code | specialization | constraint - How relates to base definition Binding: TypeDerivationRule (required): How a type relates to its baseDefinition. Fixed Value: constraint | ||||
![]() ![]() ![]() |
C | 0..1 | BackboneElement | Snapshot view of the structure Constraints: sdf-3, sdf-8, sdf-24, sdf-25, sdf-26, sdf-8b | ||||
![]() ![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |||||
![]() ![]() ![]() ![]() |
0..* | Extension | Additional content defined by implementations | |||||
![]() ![]() ![]() ![]() |
?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized | ||||
![]() ![]() ![]() ![]() |
C | 1..* | ElementDefinition | Definition of elements in the resource (if no StructureDefinition) Constraints: sdf-10, sdf-28 | ||||
![]() ![]() ![]() |
C | 0..1 | BackboneElement | Differential view of the structure Constraints: sdf-20, sdf-8a | ||||
![]() ![]() ![]() ![]() |
0..1 | string | Unique id for inter-element referencing | |||||
![]() ![]() ![]() ![]() |
0..* | Extension | Additional content defined by implementations | |||||
![]() ![]() ![]() ![]() |
?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized | ||||
![]() ![]() ![]() ![]() |
C | 1..* | ElementDefinition | Definition of elements in the resource (if no StructureDefinition) | ||||
![]() |
Path | Status | Usage | ValueSet | Version | Source |
StructureDefinition.language | Base | required | All Languages | 📍5.0.0 | FHIR Std. |
StructureDefinition.url | Base | required | HL7 v2 Primitive Data Types ValueSet | 📦0.0.0 | This IG |
StructureDefinition.versionAlgorithm[x] | Base | extensible | Version Algorithm | 📍5.0.0 | FHIR Std. |
StructureDefinition.status | Base | required | PublicationStatus | 📍5.0.0 | FHIR Std. |
StructureDefinition.jurisdiction | Base | extensible | Jurisdiction ValueSet | 📍5.0.0 | FHIR Std. |
StructureDefinition.keyword | Base | extensible | Structure Definition Use Codes / Keywords | 📍5.0.0 | FHIR Std. |
StructureDefinition.fhirVersion | Base | required | FHIRVersion | 📍5.0.0 | FHIR Std. |
StructureDefinition.kind | Base | required | Structure Definition Kind | 📍5.0.0 | FHIR Std. |
StructureDefinition.context.type | Base | required | Extension Context Type | 📍5.0.0 | FHIR Std. |
StructureDefinition.type | Base | extensible | All FHIR Types | 📍5.0.0 | FHIR Std. |
StructureDefinition.derivation | Base | required | Type Derivation Rule | 📍5.0.0 | FHIR Std. |
Id | Grade | Path(s) | Description | Expression |
cnl-0 | warning | StructureDefinition | Name should be usable as an identifier for the module by machine processing applications such as code generation |
name.exists() implies name.matches('^[A-Z]([A-Za-z0-9_]){1,254}$')
|
cnl-1 | warning | StructureDefinition.url | URL should not contain | or # - these characters make processing canonical references problematic |
exists() implies matches('^[^|# ]+$')
|
ele-1 | error | **ALL** elements | All FHIR elements must have a @value or children |
hasValue() or (children().count() > id.count())
|
ext-1 | error | **ALL** extensions | Must have either extensions or value[x], not both |
extension.exists() != value.exists()
|
sdf-1 | error | StructureDefinition | Element paths must be unique unless the structure is a constraint |
derivation = 'constraint' or snapshot.element.select(path).isDistinct()
|
sdf-15a | error | StructureDefinition |
If the first element in a differential has no "." in the path and it's not a logical model, it has no type Requirements: No Type on the root element (differential) |
(kind!='logical' and differential.element.first().path.contains('.').not()) implies differential.element.first().type.empty()
|
sdf-2 | error | StructureDefinition.mapping | Must have at least a name or a uri (or both) |
name.exists() or uri.exists()
|
sdf-3 | error | StructureDefinition.snapshot | Each element definition in a snapshot must have a formal definition and cardinalities, unless model is a logical model |
%resource.kind = 'logical' or element.all(definition.exists() and min.exists() and max.exists())
|
sdf-4 | error | StructureDefinition |
If the structure is not abstract, then there SHALL be a baseDefinition Requirements: Ensure that the base types are abstract |
abstract = true or baseDefinition.exists()
|
sdf-5 | error | StructureDefinition | If the structure defines an extension then the structure must have context information |
type != 'Extension' or derivation = 'specialization' or (context.exists())
|
sdf-6 | error | StructureDefinition | A structure must have either a differential, or a snapshot (or both) |
snapshot.exists() or differential.exists()
|
sdf-8 | error | StructureDefinition.snapshot | All snapshot elements must start with the StructureDefinition's specified type for non-logical models, or with the same type name for logical models |
(%resource.kind = 'logical' or element.first().path = %resource.type) and element.tail().all(path.startsWith(%resource.snapshot.element.first().path&'.'))
|
sdf-9 | error | StructureDefinition |
In any snapshot or differential, no label, code or requirements on an element without a "." in the path (e.g. the first element) Requirements: Because these 3 fields seem to be have overlapping meaning with the ones in the root of StructureDefinition |
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()
|
sdf-10 | error | StructureDefinition.snapshot.element |
provide either a binding reference or a description (or both) Requirements: binding is required |
binding.empty() or binding.valueSet.exists() or binding.description.exists()
|
sdf-11 | error | StructureDefinition |
If there's a type, its content must match the path name in the first element of a snapshot Requirements: Ensure that the type is not inconsistent with the other information in the structure |
kind != 'logical' implies snapshot.empty() or snapshot.element.first().path = type
|
sdf-14 | error | StructureDefinition |
All element definitions must have an id Requirements: elements have id |
snapshot.element.all(id.exists()) and differential.element.all(id.exists())
|
sdf-15 | error | StructureDefinition |
The first element in a snapshot has no type unless model is a logical model. Requirements: No Type on the root element (snapshot) |
kind!='logical' implies snapshot.element.first().type.empty()
|
sdf-16 | error | StructureDefinition |
All element definitions must have unique ids (snapshot) Requirements: element ids need to be unique |
snapshot.element.all(id.exists()) and snapshot.element.id.trace('ids').isDistinct()
|
sdf-17 | error | StructureDefinition |
All element definitions must have unique ids (diff) Requirements: element ids need to be unique |
differential.element.all(id.exists()) and differential.element.id.trace('ids').isDistinct()
|
sdf-18 | error | StructureDefinition |
Context Invariants can only be used for extensions Requirements: contextInvariant |
contextInvariant.exists() implies type = 'Extension'
|
sdf-19 | error | StructureDefinition |
FHIR Specification models only use FHIR defined types Requirements: custom types only in logical models |
url.startsWith('http://hl7.org/fhir/StructureDefinition') implies (differential | snapshot).element.type.code.all(matches('^[a-zA-Z0-9]+$') or matches('^http:\\/\\/hl7\\.org\\/fhirpath\\/System\\.[A-Z][A-Za-z]+$'))
|
sdf-20 | error | StructureDefinition.differential |
No slicing on the root element Requirements: no slicing on root |
element.where(path.contains('.').not()).slicing.empty()
|
sdf-21 | error | StructureDefinition |
Default values can only be specified on specializations Requirements: no default values on data types or resources |
differential.element.defaultValue.exists() implies (derivation = 'specialization')
|
sdf-22 | error | StructureDefinition |
FHIR Specification models never have default values Requirements: no default values on data types or resources |
url.startsWith('http://hl7.org/fhir/StructureDefinition') implies (snapshot.element.defaultValue.empty() and differential.element.defaultValue.empty())
|
sdf-23 | error | StructureDefinition |
No slice name on root Requirements: no sliceName on root |
(snapshot | differential).element.all(path.contains('.').not() implies sliceName.empty())
|
sdf-24 | error | StructureDefinition.snapshot | For CodeableReference elements, target profiles must be listed on the CodeableReference, not the CodeableReference.reference |
element.where(type.where(code='Reference').exists() and path.endsWith('.reference') and type.targetProfile.exists() and (path.substring(0,$this.path.length()-10) in %context.element.where(type.where(code='CodeableReference').exists()).path)).exists().not()
|
sdf-25 | error | StructureDefinition.snapshot | For CodeableReference elements, bindings must be listed on the CodeableReference, not the CodeableReference.concept |
element.where(type.where(code='CodeableConcept').exists() and path.endsWith('.concept') and binding.exists() and (path.substring(0,$this.path.length()-8) in %context.element.where(type.where(code='CodeableReference').exists()).path)).exists().not()
|
sdf-26 | best practice | StructureDefinition.snapshot | The root element of a profile should not have mustSupport = true |
$this.where(element[0].mustSupport='true').exists().not()
|
sdf-27 | error | StructureDefinition | If there's a base definition, there must be a derivation |
baseDefinition.exists() implies derivation.exists()
|
sdf-28 | error | StructureDefinition.snapshot.element | If there are no discriminators, there must be a definition |
slicing.exists().not() or (slicing.discriminator.exists() or slicing.description.exists())
|
sdf-29 | warning | StructureDefinition | Elements in Resources must have a min cardinality or 0 or 1 and a max cardinality of 1 or * |
((kind in 'resource' | 'complex-type') and (derivation = 'specialization')) implies differential.element.where((min != 0 and min != 1) or (max != '1' and max != '*')).empty()
|
sdf-8a | error | StructureDefinition.differential | In any differential, all the elements must start with the StructureDefinition's specified type for non-logical models, or with the same type name for logical models |
(%resource.kind = 'logical' or element.first().path.startsWith(%resource.type)) and (element.tail().empty() or element.tail().all(path.startsWith(%resource.differential.element.first().path.replaceMatches('\\..*','')&'.')))
|
sdf-8b | error | StructureDefinition.snapshot | All snapshot elements must have a base definition |
element.all(base.exists())
|
This structure is derived from StructureDefinition
Other representations of profile: CSV, Excel, Schematron