The ehealth-definedquestion profile of StructureDefinition represents the concept of a DefinedQuestion. A DefinedQuestion is a standalone representation of a question and possibly its answer options that can be used in one or more Questionnaire resources. Although a Questionnaire can be constructed without being based on any DefinedQuestion, it is expected that a catalogue of DefinedQuestion will emerge over time and the particular DefinedQuestion will be reused in multiple Questionnaire.
The DefinedQuestion concept is based on ideas described in https://www.hl7.org/fhir/stu3/questionnaire.html#2.38.5.4
. Whether a DefinedQuestion is referenced in a Questionnaire or not, it is the Questionnaire’s own definition which takes precedence.
In the eHealth Infrastructure, a reference to a DefinedQuestion by url
in a Questionnaire question is used to enable robust extraction in automated processing rule(s) of answer(s) to that question from corresponding QuestionnaireResponse. An answer in a QuestionnaireResponse is already unambiguously related to a question in a Questionnaire through the question’s linkId
. If the same question is used in another Questionnaire it will likely end up with a different linkId
in that Questionnaire. By referencing a DefinedQuestion by its url
in Questionnaire.item.definition
, the same question can be referenced unambiguously in multiple Questionnaire.
Multiple DefinedQuestion with identical url
can coexist as long as they have differing business versions in version
. This way, different versions of the same question can have different answer options.
When using a DefinedQuestion in a Questionnaire, the Questionnaire.item.definition
element must contain the url
followed by a pipe and the business version thereby referencing a versioned DefinedQuestion.
An automated processing rule captured in a Library resource can, when extracting answer(s) to the question in a QuestionnaireResponse, choose to search for either the versioned reference or the version-less reference to a DefinedQuestion. The latter can be obtained by disregarding the pipe and business version in the rule logic.
The actual details of the DefinedQuestion’s question and possible answers are described in the ElementDefinition
found in either snapshot.element
or differential.element
.
The official URL for this profile is:
http://ehealth.sundhed.dk/fhir/StructureDefinition/ehealth-definedquestion
This profile builds on StructureDefinition.
This profile was published on Tue Oct 27 14:11:48 UTC 2020 as a draft by null.
Description of Profiles, Differentials, Snapshots, and how the XML and JSON presentations work.
This structure is derived from StructureDefinition
This structure is derived from StructureDefinition
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
StructureDefinition | 0..* | StructureDefinition | Structural Definition | |
Documentation for this format |
This structure is derived from StructureDefinition
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
StructureDefinition | I | 0..* | StructureDefinition | Structural Definition |
id | Σ | 0..1 | id | Logical id of this artifact |
meta | Σ | 0..1 | Meta | Metadata about the resource |
implicitRules | ?!Σ | 0..1 | uri | A set of rules under which this content was created |
language | 0..1 | code | Language of the resource content Binding: Common Languages (extensible) Max Binding: All Languages | |
text | 0..1 | Narrative | Text summary of the resource, for human interpretation | |
contained | 0..* | Resource | Contained, inline Resources | |
extension | 0..* | Extension | Additional Content defined by implementations | |
modifierExtension | ?! | 0..* | Extension | Extensions that cannot be ignored |
url | Σ | 1..1 | uri | Logical URI to reference this structure definition (globally unique) |
identifier | Σ | 0..* | Identifier | Additional identifier for the structure definition |
version | Σ | 0..1 | string | Business version of the structure definition |
name | Σ | 1..1 | string | Name for this structure definition (computer friendly) |
title | Σ | 0..1 | string | Name for this structure definition (human friendly) |
status | ?!Σ | 1..1 | code | draft | active | retired | unknown Binding: PublicationStatus (required) |
experimental | ?!Σ | 0..1 | boolean | For testing purposes, not real usage |
date | Σ | 0..1 | dateTime | Date this was last changed |
publisher | Σ | 0..1 | string | Name of the publisher (organization or individual) |
contact | Σ | 0..* | ContactDetail | Contact details for the publisher |
description | 0..1 | markdown | Natural language description of the structure definition | |
useContext | Σ | 0..* | UsageContext | Context the content is intended to support |
jurisdiction | Σ | 0..* | CodeableConcept | Intended jurisdiction for structure definition (if applicable) Binding: Jurisdiction ValueSet (extensible) |
purpose | 0..1 | markdown | Why this structure definition is defined | |
copyright | 0..1 | markdown | Use and/or publishing restrictions | |
keyword | Σ | 0..* | Coding | Assist with indexing and finding Binding: Structure Definition Codes (example) |
fhirVersion | Σ | 0..1 | id | FHIR Version this StructureDefinition targets |
mapping | I | 0..* | BackboneElement | External specification that the content is mapped to sdf-2: Must have at least a name or a uri (or both) |
id | 0..1 | string | xml:id (or equivalent in JSON) | |
extension | 0..* | Extension | Additional Content defined by implementations | |
modifierExtension | ?!Σ | 0..* | Extension | Extensions that cannot be ignored |
identity | 1..1 | id | Internal id when this mapping is used | |
uri | I | 0..1 | uri | Identifies what this mapping refers to |
name | I | 0..1 | string | Names what this mapping refers to |
comment | 0..1 | string | Versions, Issues, Scope limitations etc. | |
kind | Σ | 1..1 | code | primitive-type | complex-type | resource | logical Binding: StructureDefinitionKind (required) |
abstract | Σ | 1..1 | boolean | Whether the structure is abstract |
contextType | ΣI | 0..1 | code | resource | datatype | extension Binding: ExtensionContext (required) |
context | ΣI | 0..* | string | Where the extension can be used in instances |
contextInvariant | ΣI | 0..* | string | FHIRPath invariants - when the extension can be used |
type | ΣI | 1..1 | code | Type defined or constrained by this structure Binding: FHIRDefinedType (extensible) |
baseDefinition | ΣI | 0..1 | uri | Definition that this type is constrained/specialized from |
derivation | Σ | 0..1 | code | specialization | constraint - How relates to base definition Binding: TypeDerivationRule (required) |
snapshot | I | 0..1 | BackboneElement | Snapshot view of the structure sdf-15: The first element in a snapshot has no type sdf-8: In any snapshot, all the elements must be in the specified type sdf-3: Each element definition in a snapshot must have a formal definition and cardinalities |
id | 0..1 | string | xml:id (or equivalent in JSON) | |
extension | 0..* | Extension | Additional Content defined by implementations | |
modifierExtension | ?!Σ | 0..* | Extension | Extensions that cannot be ignored |
element | I | 1..* | ElementDefinition | Definition of elements in the resource (if no StructureDefinition) |
differential | I | 0..1 | BackboneElement | Differential view of the structure sdf-15a: If the first element in a differential has no "." in the path, it has no type sdf-20: No slicing on the root element sdf-8a: In any differential, all the elements must be in the specified type |
id | 0..1 | string | xml:id (or equivalent in JSON) | |
extension | 0..* | Extension | Additional Content defined by implementations | |
modifierExtension | ?!Σ | 0..* | Extension | Extensions that cannot be ignored |
element | 1..* | ElementDefinition | Definition of elements in the resource (if no StructureDefinition) | |
Documentation for this format |
This structure is derived from StructureDefinition
Differential View
This structure is derived from StructureDefinition
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
StructureDefinition | 0..* | StructureDefinition | Structural Definition | |
Documentation for this format |
Snapshot View
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
StructureDefinition | I | 0..* | StructureDefinition | Structural Definition |
id | Σ | 0..1 | id | Logical id of this artifact |
meta | Σ | 0..1 | Meta | Metadata about the resource |
implicitRules | ?!Σ | 0..1 | uri | A set of rules under which this content was created |
language | 0..1 | code | Language of the resource content Binding: Common Languages (extensible) Max Binding: All Languages | |
text | 0..1 | Narrative | Text summary of the resource, for human interpretation | |
contained | 0..* | Resource | Contained, inline Resources | |
extension | 0..* | Extension | Additional Content defined by implementations | |
modifierExtension | ?! | 0..* | Extension | Extensions that cannot be ignored |
url | Σ | 1..1 | uri | Logical URI to reference this structure definition (globally unique) |
identifier | Σ | 0..* | Identifier | Additional identifier for the structure definition |
version | Σ | 0..1 | string | Business version of the structure definition |
name | Σ | 1..1 | string | Name for this structure definition (computer friendly) |
title | Σ | 0..1 | string | Name for this structure definition (human friendly) |
status | ?!Σ | 1..1 | code | draft | active | retired | unknown Binding: PublicationStatus (required) |
experimental | ?!Σ | 0..1 | boolean | For testing purposes, not real usage |
date | Σ | 0..1 | dateTime | Date this was last changed |
publisher | Σ | 0..1 | string | Name of the publisher (organization or individual) |
contact | Σ | 0..* | ContactDetail | Contact details for the publisher |
description | 0..1 | markdown | Natural language description of the structure definition | |
useContext | Σ | 0..* | UsageContext | Context the content is intended to support |
jurisdiction | Σ | 0..* | CodeableConcept | Intended jurisdiction for structure definition (if applicable) Binding: Jurisdiction ValueSet (extensible) |
purpose | 0..1 | markdown | Why this structure definition is defined | |
copyright | 0..1 | markdown | Use and/or publishing restrictions | |
keyword | Σ | 0..* | Coding | Assist with indexing and finding Binding: Structure Definition Codes (example) |
fhirVersion | Σ | 0..1 | id | FHIR Version this StructureDefinition targets |
mapping | I | 0..* | BackboneElement | External specification that the content is mapped to sdf-2: Must have at least a name or a uri (or both) |
id | 0..1 | string | xml:id (or equivalent in JSON) | |
extension | 0..* | Extension | Additional Content defined by implementations | |
modifierExtension | ?!Σ | 0..* | Extension | Extensions that cannot be ignored |
identity | 1..1 | id | Internal id when this mapping is used | |
uri | I | 0..1 | uri | Identifies what this mapping refers to |
name | I | 0..1 | string | Names what this mapping refers to |
comment | 0..1 | string | Versions, Issues, Scope limitations etc. | |
kind | Σ | 1..1 | code | primitive-type | complex-type | resource | logical Binding: StructureDefinitionKind (required) |
abstract | Σ | 1..1 | boolean | Whether the structure is abstract |
contextType | ΣI | 0..1 | code | resource | datatype | extension Binding: ExtensionContext (required) |
context | ΣI | 0..* | string | Where the extension can be used in instances |
contextInvariant | ΣI | 0..* | string | FHIRPath invariants - when the extension can be used |
type | ΣI | 1..1 | code | Type defined or constrained by this structure Binding: FHIRDefinedType (extensible) |
baseDefinition | ΣI | 0..1 | uri | Definition that this type is constrained/specialized from |
derivation | Σ | 0..1 | code | specialization | constraint - How relates to base definition Binding: TypeDerivationRule (required) |
snapshot | I | 0..1 | BackboneElement | Snapshot view of the structure sdf-15: The first element in a snapshot has no type sdf-8: In any snapshot, all the elements must be in the specified type sdf-3: Each element definition in a snapshot must have a formal definition and cardinalities |
id | 0..1 | string | xml:id (or equivalent in JSON) | |
extension | 0..* | Extension | Additional Content defined by implementations | |
modifierExtension | ?!Σ | 0..* | Extension | Extensions that cannot be ignored |
element | I | 1..* | ElementDefinition | Definition of elements in the resource (if no StructureDefinition) |
differential | I | 0..1 | BackboneElement | Differential view of the structure sdf-15a: If the first element in a differential has no "." in the path, it has no type sdf-20: No slicing on the root element sdf-8a: In any differential, all the elements must be in the specified type |
id | 0..1 | string | xml:id (or equivalent in JSON) | |
extension | 0..* | Extension | Additional Content defined by implementations | |
modifierExtension | ?!Σ | 0..* | Extension | Extensions that cannot be ignored |
element | 1..* | ElementDefinition | Definition of elements in the resource (if no StructureDefinition) | |
Documentation for this format |
Path | Conformance | ValueSet |
StructureDefinition.language | extensible | Common Languages Max Binding: All Languages |
StructureDefinition.status | required | PublicationStatus |
StructureDefinition.jurisdiction | extensible | Jurisdiction ValueSet |
StructureDefinition.keyword | example | Structure Definition Codes |
StructureDefinition.kind | required | StructureDefinitionKind |
StructureDefinition.contextType | required | ExtensionContext |
StructureDefinition.type | extensible | FHIRDefinedType |
StructureDefinition.derivation | required | TypeDerivationRule |
Id | Path | Details | Requirements |
dom-2 | StructureDefinition | If the resource is contained in another resource, it SHALL NOT contain nested Resources : contained.contained.empty() | |
dom-1 | StructureDefinition | If the resource is contained in another resource, it SHALL NOT contain any narrative : contained.text.empty() | |
dom-4 | StructureDefinition | If 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-3 | StructureDefinition | If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource : contained.where(('#'+id in %resource.descendants().reference).not()).empty() | |
sdf-9 | StructureDefinition | In any snapshot or differential, no label, code or requirements on the 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-19 | StructureDefinition | Custom types can only be used in logical models : kind = 'logical' or (differential.element.type.code.all(hasValue() implies matches('^[a-zA-Z0-9]+$')) and snapshot.element.type.code.all(hasValue() implies matches('^[a-zA-Z0-9]+$'))) | custom types only in logical models |
sdf-16 | StructureDefinition | All element definitions must have unique ids (snapshot) : snapshot.element.id.trace('ids').isDistinct() | element ids need to be unique |
sdf-18 | StructureDefinition | Context Invariants can only be used for extensions : contextInvariant.exists() implies type = 'Extension' | contextInvariant |
sdf-17 | StructureDefinition | All element definitions must have unique ids (diff) : differential.element.id.trace('ids').isDistinct() | element ids need to be unique |
sdf-11 | StructureDefinition | If there's a type, its content must match the path name in the first element of a snapshot : snapshot.empty() or snapshot.element.first().path = type | Ensure that the type is not inconsistent with the other information in the structure |
sdf-14 | StructureDefinition | All element definitions must have an id : snapshot.element.all(id.exists()) and differential.element.all(id.exists()) | elements have id |
sdf-1 | StructureDefinition | Element paths must be unique unless the structure is a constraint : derivation = 'constraint' or snapshot.element.select(path).isDistinct() | |
sdf-7 | StructureDefinition | If the structure describes a base Resource or Type, the URL has to start with "http://hl7.org/fhir/StructureDefinition/" and the tail must match the id : (derivation = 'constraint') or (kind = 'logical') or (url = 'http://hl7.org/fhir/StructureDefinition/'+id) | |
sdf-6 | StructureDefinition | A structure must have either a differential, or a snapshot (or both) : snapshot.exists() or differential.exists() | |
sdf-5 | StructureDefinition | If the structure defines an extension then the structure must have context information : type != 'Extension' or derivation = 'specialization' or (context.exists() and contextType.exists()) | |
sdf-4 | StructureDefinition | If the structure is not abstract, then there SHALL be a baseDefinition : abstract = true or baseDefinition.exists() | Ensure that the base types are abstract |
ele-1 | StructureDefinition.mapping | All FHIR elements must have a @value or children : hasValue() | (children().count() > id.count()) | |
sdf-2 | StructureDefinition.mapping | Must have at least a name or a uri (or both) : name.exists() or uri.exists() | |
ele-1 | StructureDefinition.snapshot | All FHIR elements must have a @value or children : hasValue() | (children().count() > id.count()) | |
sdf-15 | StructureDefinition.snapshot | The first element in a snapshot has no type : kind!='logical' implies snapshot.element.first().type.empty() | No Type on the root element (snapshot) |
sdf-8 | StructureDefinition.snapshot | In any snapshot, all the elements must be in the specified type : (%resource.kind = 'logical' or element.first().path = %resource.type) and element.tail().all(path.startsWith(%resource.snapshot.element.first().path&'.')) | |
sdf-3 | StructureDefinition.snapshot | Each element definition in a snapshot must have a formal definition and cardinalities : element.all(definition and min and max) | |
ele-1 | StructureDefinition.differential | All FHIR elements must have a @value or children : hasValue() | (children().count() > id.count()) | |
sdf-15a | StructureDefinition.differential | If the first element in a differential has no "." in the path, it has no type : element.first().path.contains('.').not() implies element.first().type.empty() | No Type on the root element (differential) |
sdf-20 | StructureDefinition.differential | No slicing on the root element : element.where(path.contains('.').not()).slicing.empty() | no slicing on root |
sdf-8a | StructureDefinition.differential | In any differential, all the elements must be in the specified type : element.first().path.startsWith(%resource.type) and element.tail().all(path.startsWith(%resource.type&'.')) |