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: CRMIModuleDefinitionLibrary - Detailed Descriptions

Page standards status: Trial-use Maturity Level: 3

Definitions for the crmi-moduledefinitionlibrary resource profile.

Guidance on how to interpret the contents of this table can be found here

0. Library
Definition

The Library resource is a general-purpose container for knowledge asset definitions. It can be used to describe and expose existing knowledge assets such as logic libraries and information model descriptions, as well as to describe a collection of knowledge assets.

ShortRepresents a library of quality improvement components
Control0..*
Is Modifierfalse
Must Supportfalse
Summaryfalse
Invariantsdom-2: If the resource is contained in another resource, it SHALL NOT contain nested Resources (contained.contained.empty())
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 (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-4: 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-5: If a resource is contained in another resource, it SHALL NOT have a security label (contained.meta.security.empty())
dom-6: A resource should have narrative for robust management (text.`div`.exists())
lib-0: Name 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}'))
lib-0: Name 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}'))
2. Library.implicitRules
Definition

A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.

ShortA set of rules under which this content was created
Comments

Asserting this rule set restricts the content to be only understood by a limited set of trading partners. This inherently limits the usefulness of the data in the long term. However, the existing health eco-system is highly fractured, and not yet ready to define, collect, and exchange data in a generally computable sense. Wherever possible, implementers and/or specification writers should avoid using this element. Often, when used, the URL is a reference to an implementation guide that defines these special rules as part of it's narrative along with other profiles, value sets, etc.

Control0..1
Typeuri
Is Modifiertrue because This element is labeled as a modifier because the implicit rules may provide additional knowledge about the resource that modifies it's meaning or interpretation
Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
Summarytrue
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
4. Library.extension:directReferenceCode
Slice NamedirectReferenceCode
Definition

Indicates that the given code is directly referenced by artifact logic (e.g. as a direct-reference code in CQL). Terminology dependencies used in logic can be collected and reported, typically using the relatedArtifact element with a type of depends-on. However, direct-reference codes cannot be represented in the relatedArtifact element, so this extension provides a means to support communicating direct-reference code dependencies of knowledge artifacts. As with value set dependencies, direct-reference codes may be the terminology target of a data requirement.

ShortA code directly referenced by the artifact
Control0..*
TypeExtension(Direct reference code) (Extension Type: Coding)
Is Modifierfalse
Must Supporttrue
Requirements

A module definition library must describe the direct-reference codes it uses.

Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
ele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
6. Library.extension:logicDefinition
Slice NamelogicDefinition
Definition

Represents a specific logic definition used by the artifact. When logic is referenced from knowledge artifacts, this extension allows each referenced definition to be represented independently so that consumers know which specific expressions are being referenced (i.e. not all expressions in a given library are always used), as well as allows processing applications (such as narrative generation) to easily surface the definitions to provide capabilities such as navigation.

ShortA logic definition used in the artifact
Control0..*
TypeExtension(Logic definition) (Complex Extension)
Is Modifierfalse
Must Supporttrue
Requirements

A module definition library must be able to describe the logic definitions it uses.

Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
8. Library.extension:inputParameters
Slice NameinputParameters
Definition

Specifies the input parameters to the operation (such as a test case description or a data requirements or evaluate operation). This extension can be used as part of the result of an operation to indicate what the parameters were, but it can also be used as part of the definition of a test case to specify what the input parameters are expected to be for the test case.

ShortWhat parameters
Control0..1
TypeExtension(Input parameters) (Extension Type: Reference(Parameters))
Is Modifierfalse
Must Supporttrue
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
ele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
10. Library.modifierExtension
Definition

May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element's descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.

Modifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).

ShortExtensions that cannot be ignored
Comments

There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.

Control0..*
TypeExtension
Is Modifiertrue because Modifier extensions are expected to modify the meaning or interpretation of the resource that contains them
Summaryfalse
Requirements

Modifier extensions allow for extensions that cannot be safely ignored to be clearly distinguished from the vast majority of extensions which can be safely ignored. This promotes interoperability by eliminating the need for implementers to prohibit the presence of extensions. For further information, see the definition of modifier extensions.

Alternate Namesextensions, user content
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
12. Library.status
Definition

The status of this library. Enables tracking the life-cycle of the content.

Shortdraft | active | retired | unknown
Comments

Allows filtering of libraries that are appropriate for use vs. not.

Control1..1
BindingThe codes SHALL be taken from PublicationStatushttp://hl7.org/fhir/ValueSet/publication-status|4.0.1
(required to http://hl7.org/fhir/ValueSet/publication-status|4.0.1)

The lifecycle status of an artifact.

Typecode
Is Modifiertrue because This is labeled as "Is Modifier" because applications should not use a retired {{title}} without due consideration
Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
Summarytrue
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
14. Library.type
Definition

Identifies the type of library such as a Logic Library, Model Definition, Asset Collection, or Module Definition.

Shortlogic-library | model-definition | asset-collection | module-definition
Control1..1
BindingUnless not suitable, these codes SHALL be taken from LibraryTypehttp://hl7.org/fhir/ValueSet/library-type
(extensible to http://hl7.org/fhir/ValueSet/library-type)

The type of knowledge asset this library contains.

TypeCodeableConcept
Is Modifierfalse
Must Supporttrue
Summarytrue
Pattern Value{
  "coding" : [{
    "system" : "http://terminology.hl7.org/CodeSystem/library-type",
    "code" : "module-definition"
  }]
}
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
16. Library.subject[x]
Definition

A code or group definition that describes the intended subject of the contents of the library.

ShortType of individual the library content is focused on
Control0..1
BindingUnless not suitable, these codes SHALL be taken from SubjectTypehttp://hl7.org/fhir/ValueSet/subject-type
(extensible to http://hl7.org/fhir/ValueSet/subject-type)

The possible types of subjects for a library (E.g. Patient, Practitioner, Organization, Location, etc.).

TypeChoice of: CodeableConcept, Reference(Group)
[x] NoteSeeChoice of Data Typesfor further information about how to use [x]
Is Modifierfalse
Must Supporttrue
Must Support TypesNo must-support rules about the choice of types/profiles
Summaryfalse
Requirements

A module definition library must report the subject it operates on.

Meaning if MissingPatient
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
18. Library.relatedArtifact
Definition

Any referenced dependencies including other logic libraries, model definitions, or terminologies.


Related artifacts such as additional documentation, justification, or bibliographic references.

ShortDependencies used by the artifactAdditional documentation, citations, etc.
Comments

Each related artifact is either an attachment, or a reference to another resource, but not both.

Control0..*
TypeRelatedArtifact
Is Modifierfalse
Must Supporttrue
Summaryfalse
Requirements

A module definition library must describe the dependencies it requires.


Libraries must be able to provide enough information for consumers of the content (and/or interventions or results produced by the content) to be able to determine and understand the justification for and evidence in support of the content.

Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
20. Library.parameter
Definition

The parameter element defines parameters used by the library.

ShortParameters defined by the library
Control0..*
TypeParameterDefinition
Is Modifierfalse
Must Supporttrue
Summaryfalse
Requirements

A module definition library must define any input and output parameters.

Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
22. Library.parameter.extension:defaultValue
Slice NamedefaultValue
Definition

An Extension

ShortExtension
Control0..1
TypeExtension(Default Value) (Extension Type: Choice of: string, boolean, integer, decimal, date, dateTime, Coding, CodeableConcept, Period, Range, Quantity, Ratio)
Is Modifierfalse
Must Supporttrue
Summaryfalse
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
24. Library.parameter.use
Definition

Whether the parameter is input or output for the module.

Shortin | out
Control1..1
BindingThe codes SHALL be taken from OperationParameterUsehttp://hl7.org/fhir/ValueSet/operation-parameter-use|4.0.1
(required to http://hl7.org/fhir/ValueSet/operation-parameter-use|4.0.1)

Whether the parameter is input or output.

Typecode
Is Modifierfalse
Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
Summarytrue
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
26. Library.parameter.type
Definition

The type of the parameter.

ShortWhat type of value
Control1..1
BindingThe codes SHALL be taken from FHIRAllTypeshttp://hl7.org/fhir/ValueSet/all-types|4.0.1
(required to http://hl7.org/fhir/ValueSet/all-types|4.0.1)

A list of all the concrete types defined in this version of the FHIR specification - Abstract Types, Data Types and Resource Types.

Typecode
Is Modifierfalse
Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
Summarytrue
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
28. Library.dataRequirement
Definition

Describes a set of data that must be provided in order to be able to successfully perform the computations defined by the library.

ShortWhat data is referenced by this library
Comments

Include data requirements for any data referenced by logic in the module. Systems MAY include a profile reference in the data requirement if the logic expects a specific profile. When elements are referenced in the logic, systems MAY communicate this using the mustSupport element of the data requirement. If the element is an extension, the mustSupport will be a FHIRPath referencing the extension (e.g. extension('http://example.org/fhir/StructureDefinition/example-extension')), and the mustSupport list will include a rendered-value extension with the slice name of the extension for human-readable views. For CQL-based logic, refer to the Parameters and DataRequirements topic in the Using CQL With FHIR IG.

Control0..*
TypeDataRequirement
Is Modifierfalse
Must Supporttrue
Summaryfalse
Requirements

A module definition library must declare any data requirements.

Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
30. Library.dataRequirement.extension:isSelective
Slice NameisSelective
Definition

specifies whether a given DataRequirement is "selective", meaning that it can be used, along with other selective requirements, to determine whether an artifact is applicable to a particular subject.

Shortspecifies whether a given DataRequirement is "selective"
Comments

Although this extension may be used by artifact authors as a way to indicate expected selectivity of a data requirement, it will more typically be used by implementers and downstream packaging repositories to indicate selectivity of a data requirement given known data heuristics in particular datasets.

Control0..1
TypeExtension(Is Selective) (Extension Type: boolean)
Is Modifierfalse
Must Supporttrue
Summaryfalse
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
32. Library.dataRequirement.extension:valueFilter
Slice NamevalueFilter
Definition

Allows additional value-based filters to be specified as part of a data requirement.

ShortExtension
Comments

Supports describing additional filtering information for the data requirement. For example a restriction of encounter data to finished encounters.

Control0..*
TypeExtension(Value Filter) (Complex Extension)
Is Modifierfalse
Must Supporttrue
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
34. Library.dataRequirement.extension:fhirQueryPattern
Slice NamefhirQueryPattern
Definition

A FHIR Query URL pattern that corresponds to the data specified by the data requirement. If multiple FHIR Query URLs are present, they each contribute to the data specified by the data requirement (i.e. the union of the results of the FHIR Queries represents the complete data for the data requirement). This is not a resolveable URL, in that it will contain 1) No base canonical (i.e. it's a relative query), and 2) Parameters using tokens that are delimited using double-braces and the context parameters are dependent solely on the subjectType, according to the following: Patient: context.patientId, Practitioner: context.practitionerId, Organization: context.organizationId, Location: context.locationId, Device: context.deviceId.

ShortWhat FHIR query?
Comments

Supports communicating a FHIR query (or set of queries) for the given data requirement. The query is server-specific, and will need to be created as informed by a CapabilityStatement. The $data-requirements operation should be expected to be able to provide an Endpoint or CapabilityStatement to provide this information.; If no endpoint or capability statement is provided, the capability statement of the server performing the operation is used.

Control0..*
TypeExtension(FHIR Query Pattern) (Extension Type: string)
Is Modifierfalse
Must Supportfalse
Summaryfalse
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
ext-1: Must have either extensions or value[x], not both (extension.exists() != value.exists())
36. Library.dataRequirement.type
Definition

The type of the required data, specified as the type name of a resource. For profiles, this value is set to the type of the base resource of the profile.

ShortThe type of the required data
Control1..1
BindingThe codes SHALL be taken from FHIRAllTypeshttp://hl7.org/fhir/ValueSet/all-types|4.0.1
(required to http://hl7.org/fhir/ValueSet/all-types|4.0.1)

A list of all the concrete types defined in this version of the FHIR specification - Abstract Types, Data Types and Resource Types.

Typecode
Is Modifierfalse
Primitive ValueThis primitive element may be present, or absent, or replaced by an extension
Summarytrue
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))
38. Library.content
Definition

The content of the library as an Attachment. The content may be a reference to a url, or may be directly embedded as a base-64 string. Either way, the contentType of the attachment determines how to interpret the content.

ShortContents of the library, either embedded or referenced
Control0..0*
TypeAttachment
Is Modifierfalse
Must Supportfalse
Summarytrue
Invariantsele-1: All FHIR elements must have a @value or children (hasValue() or (children().count() > id.count()))