Canonical Resource Management Infrastructure Implementation Guide
1.0.0 - STU1 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.0.0 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

: CRMI Data Requirements Operation - XML Representation

Active as of 2024-05-08

Raw xml | Download



<OperationDefinition xmlns="http://hl7.org/fhir">
  <id value="crmi-data-requirements"/>
  <text>
    <status value="extensions"/>
    <div xmlns="http://www.w3.org/1999/xhtml"><p>URL: [base]/ActivityDefinition/$data-requirements</p><p>URL: [base]/ActivityDefinition/[id]/$data-requirements</p><p>URL: [base]/CapabilityStatement/$data-requirements</p><p>URL: [base]/CapabilityStatement/[id]/$data-requirements</p><p>URL: [base]/CodeSystem/$data-requirements</p><p>URL: [base]/CodeSystem/[id]/$data-requirements</p><p>URL: [base]/CompartmentDefinition/$data-requirements</p><p>URL: [base]/CompartmentDefinition/[id]/$data-requirements</p><p>URL: [base]/ConceptMap/$data-requirements</p><p>URL: [base]/ConceptMap/[id]/$data-requirements</p><p>URL: [base]/ExampleScenario/$data-requirements</p><p>URL: [base]/ExampleScenario/[id]/$data-requirements</p><p>URL: [base]/GraphDefinition/$data-requirements</p><p>URL: [base]/GraphDefinition/[id]/$data-requirements</p><p>URL: [base]/ImplementationGuide/$data-requirements</p><p>URL: [base]/ImplementationGuide/[id]/$data-requirements</p><p>URL: [base]/Library/$data-requirements</p><p>URL: [base]/Library/[id]/$data-requirements</p><p>URL: [base]/Measure/$data-requirements</p><p>URL: [base]/Measure/[id]/$data-requirements</p><p>URL: [base]/Medication/$data-requirements</p><p>URL: [base]/Medication/[id]/$data-requirements</p><p>URL: [base]/MedicationKnowledge/$data-requirements</p><p>URL: [base]/MedicationKnowledge/[id]/$data-requirements</p><p>URL: [base]/MessageDefinition/$data-requirements</p><p>URL: [base]/MessageDefinition/[id]/$data-requirements</p><p>URL: [base]/NamingSystem/$data-requirements</p><p>URL: [base]/NamingSystem/[id]/$data-requirements</p><p>URL: [base]/OperationDefinition/$data-requirements</p><p>URL: [base]/OperationDefinition/[id]/$data-requirements</p><p>URL: [base]/PlanDefinition/$data-requirements</p><p>URL: [base]/PlanDefinition/[id]/$data-requirements</p><p>URL: [base]/Questionnaire/$data-requirements</p><p>URL: [base]/Questionnaire/[id]/$data-requirements</p><p>URL: [base]/SearchParameter/$data-requirements</p><p>URL: [base]/SearchParameter/[id]/$data-requirements</p><p>URL: [base]/StructureDefinition/$data-requirements</p><p>URL: [base]/StructureDefinition/[id]/$data-requirements</p><p>URL: [base]/StructureMap/$data-requirements</p><p>URL: [base]/StructureMap/[id]/$data-requirements</p><p>URL: [base]/Substance/$data-requirements</p><p>URL: [base]/Substance/[id]/$data-requirements</p><p>URL: [base]/TerminologyCapabilities/$data-requirements</p><p>URL: [base]/TerminologyCapabilities/[id]/$data-requirements</p><p>URL: [base]/TestScript/$data-requirements</p><p>URL: [base]/TestScript/[id]/$data-requirements</p><p>URL: [base]/ValueSet/$data-requirements</p><p>URL: [base]/ValueSet/[id]/$data-requirements</p><p>Parameters</p><table class="grid"><tr><td><b>Use</b></td><td><b>Name</b></td><td><b>Scope</b></td><td><b>Cardinality</b></td><td><b>Type</b></td><td><b>Binding</b></td><td><b>Documentation</b></td></tr><tr><td>IN</td><td>id</td><td/><td>0..1</td><td><a href="http://hl7.org/fhir/R4/datatypes.html#string">string</a></td><td/><td><div><p>The logical id of the canonical or artifact resource to analyze.</p>
</div></td></tr><tr><td>IN</td><td>url</td><td/><td>0..1</td><td><a href="http://hl7.org/fhir/R4/datatypes.html#uri">uri</a></td><td/><td><div><p>A canonical or artifact reference to a canonical resource.</p>
</div></td></tr><tr><td>IN</td><td>version</td><td/><td>0..1</td><td><a href="http://hl7.org/fhir/R4/datatypes.html#string">string</a></td><td/><td><div><p>The version of the canonical or artifact resource to analyze</p>
</div></td></tr><tr><td>IN</td><td>identifier</td><td/><td>0..1</td><td><a href="http://hl7.org/fhir/R4/datatypes.html#string">string</a><br/>(<a href="http://hl7.org/fhir/R4/search.html#token">token</a>)</td><td/><td><div><p>A business identifier of the canonical or artifact resource to be analyzed.</p>
</div></td></tr><tr><td>IN</td><td>expression</td><td/><td>0..*</td><td><a href="http://hl7.org/fhir/R4/datatypes.html#string">string</a></td><td/><td><div><p>The name of a specific expression to be considered for analysis. If no
expressions are specified, the analysis is performed on the entire resource. If
expressions are specified, the analysis is performed only on the expressions
specified.</p>
</div></td></tr><tr><td>IN</td><td>parameters</td><td/><td>0..1</td><td><a href="http://hl7.org/fhir/R4/parameters.html">Parameters</a></td><td/><td><div><p>Any input parameters for the artifact. If the artifact is a logic library,
or references logic libraries, parameters defined in this input will be
bound by name to parameters defined in the logic library (or referenced
libraries). If the logic library is a CQL library, parameter types are
mapped to CQL as specified in the Using CQL with FHIR implementation guide.
If a parameter appears more than once in the input Parameters resource,
it is represented with a List in the input CQL. If a parameter has parts,
it is represented as a Tuple in the input CQL.</p>
</div></td></tr><tr><td>IN</td><td>artifactVersion</td><td/><td>0..*</td><td><a href="http://hl7.org/fhir/R4/datatypes.html#uri">uri</a></td><td/><td><div><p>Specifies a version to use for a canonical or artifact resource if the artifact referencing
the resource does not already specify a version. The format is the same as a canonical URL:
[url]|[version] - e.g. http://loinc.org|2.56</p>
<p>Note that this is a generalization of the <code>system-version</code> parameter to the $expand operation
to apply to any canonical resource, including code systems.</p>
</div></td></tr><tr><td>IN</td><td>checkArtifactVersion</td><td/><td>0..*</td><td><a href="http://hl7.org/fhir/R4/datatypes.html#uri">uri</a></td><td/><td><div><p>Edge Case: Specifies a version to use for a canonical or artifact resource. If the artifact referencing
the resource specifies a different version, an error is returned instead of the package. The
format is the same as a canonical URL: [url]|[version] - e.g. http://loinc.org|2.56</p>
<p>Note that this is a generalization of the <code>check-system-version</code> parameter to the $expand operation to
apply to any canonical resource, including code systems.</p>
</div></td></tr><tr><td>IN</td><td>forceArtifactVersion</td><td/><td>0..*</td><td><a href="http://hl7.org/fhir/R4/datatypes.html#uri">uri</a></td><td/><td><div><p>Edge Case: Specifies a version to use for a canonical or artifact resource. This parameter overrides any
specified version in the artifact (and any artifacts it depends on). The
format is the same as a canonical URL: [system]|[version] - e.g.
http://loinc.org|2.56. Note that this has obvious safety issues, in that it may
result in a value set expansion giving a different list of codes that is both
wrong and unsafe, and implementers should only use this capability reluctantly.</p>
<p>It primarily exists to deal with situations where specifications have fallen
into decay as time passes. If the version of a canonical is overridden, the version used SHALL
explicitly be represented in the expansion parameters.</p>
<p>Note that this is a generalization of the <code>force-system-version</code> parameter to the $expand operation
to apply to any canonical resource, including code systems.</p>
</div></td></tr><tr><td>IN</td><td>manifest</td><td/><td>0..1</td><td><a href="http://hl7.org/fhir/R4/datatypes.html#canonical">canonical</a> (<a href="StructureDefinition-crmi-manifestlibrary.html" title="http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-manifestlibrary">CRMI Manifest Library</a>)</td><td/><td><div><p>Specifies an asset-collection library that defines version bindings for code
systems and other canonical resources referenced by the value set(s) being expanded
and other canonical resources referenced by the artifact. When specified, code
systems and other canonical resources identified as <code>depends-on</code> related artifacts
in the manifest library have the same meaning as specifying that code system or other
canonical version in the <code>system-version</code> parameter of an expand or the <code>canonicalVersion</code>
parameter.</p>
</div></td></tr><tr><td>IN</td><td>artifactEndpointConfiguration</td><td/><td>0..*</td><td></td><td/><td><div><p>Configuration information to resolve canonical artifacts</p>
<ul>
<li><code>artifactRoute</code>: An optional route used to determine whether this endpoint is expected to be able to resolve artifacts that match the route (i.e. start with the route, up to and including the entire url)</li>
<li><code>endpointUri</code>: The URI of the endpoint, exclusive with the <code>endpoint</code> parameter</li>
<li><code>endpoint</code>: An Endpoint resource describing the endpoint, exclusive with the <code>endpointUri</code> parameter</li>
</ul>
<p><strong>Processing semantics</strong>:</p>
<p>Create a canonical-like reference (e.g.
<code>{canonical.url}|{canonical.version}</code> or similar extensions for non-canonical artifacts).</p>
<ul>
<li>Given a single <code>artifactEndpointConfiguration</code>
<ul>
<li>When <code>artifactRoute</code> is present
<ul>
<li>And <code>artifactRoute</code> <em>starts with</em> canonical or artifact reference</li>
<li>Then attempt to resolve with <code>endpointUri</code> or <code>endpoint</code></li>
</ul>
</li>
<li>When <code>artifactRoute</code> is not present
<ul>
<li>Then attempt to resolve with <code>endpointUri</code> or <code>endpoint</code></li>
</ul>
</li>
</ul>
</li>
<li>Given multiple <code>artifactEndpointConfiguration</code>s
<ul>
<li>Then rank order each configuration (see below)</li>
<li>And attempt to resolve with <code>endpointUri</code> or <code>endpoint</code> in order until resolved</li>
</ul>
</li>
</ul>
<p>Rank each <code>artifactEndpointConfiguration</code> such that:</p>
<ul>
<li>if <code>artifactRoute</code> is present <em>and</em> <code>artifactRoute</code> <em>starts with</em> canonical or artifact reference: rank based on number of matching characters</li>
<li>if <code>artifactRoute</code> is <em>not</em> present: include but rank lower</li>
</ul>
<p>NOTE: For evenly ranked <code>artifactEndpointConfiguration</code>s, order as defined in the
OperationDefinition.</p>
</div></td></tr><tr><td>IN</td><td>artifactEndpointConfiguration.artifactRoute</td><td/><td>0..1</td><td><a href="http://hl7.org/fhir/R4/datatypes.html#uri">uri</a></td><td/><td/></tr><tr><td>IN</td><td>artifactEndpointConfiguration.endpointUri</td><td/><td>0..1</td><td><a href="http://hl7.org/fhir/R4/datatypes.html#uri">uri</a></td><td/><td/></tr><tr><td>IN</td><td>artifactEndpointConfiguration.endpoint</td><td/><td>0..1</td><td><a href="http://hl7.org/fhir/R4/endpoint.html">Endpoint</a></td><td/><td/></tr><tr><td>IN</td><td>terminologyEndpoint</td><td/><td>0..1</td><td><a href="http://hl7.org/fhir/R4/endpoint.html">Endpoint</a></td><td/><td><div><p>An endpoint to use to access terminology (i.e. valuesets, codesystems, naming systems, concept maps, and
membership testing) referenced by the Resource. If no terminology endpoint is
supplied, the evaluation will attempt to use the server on which the operation
is being performed as the terminology server.</p>
</div></td></tr><tr><td>OUT</td><td>return</td><td/><td>1..1</td><td><a href="http://hl7.org/fhir/R4/library.html">Library</a></td><td/><td><div><p>The result of the requirements operation is a <em>module-definition</em> Library that
returns the computed effective requirements of the artifact.</p>
</div></td></tr></table><div><p>The data requirements operation is used for dependency gathering, as a way to understand
the set of dependencies of a given artifact, as well as for data requirements determination,
as a way to understand the complete set of data requirements for a given artifact, including
terminology usage (code systems, value sets, and direct-reference codes), parameters, dependencies,
and data requirements.</p>
</div></div>
  </text>
  <extension
             url="http://hl7.org/fhir/StructureDefinition/structuredefinition-wg">
    <valueCode value="cds"/>
  </extension>
  <url
       value="http://hl7.org/fhir/uv/crmi/OperationDefinition/crmi-data-requirements"/>
  <version value="1.0.0"/>
  <name value="CRMIDataRequirements"/>
  <title value="CRMI Data Requirements"/>
  <status value="active"/>
  <kind value="operation"/>
  <experimental value="false"/>
  <date value="2024-05-08T21:17:22+00:00"/>
  <publisher value="HL7 International / Clinical Decision Support"/>
  <contact>
    <telecom>
      <system value="url"/>
      <value value="http://www.hl7.org/Special/committees/dss"/>
    </telecom>
  </contact>
  <description
               value="Determines the effective data requirements for the artifact, including known
components and dependencies, and optionally informed by a version manifest.

See [$package and $data-requirements](distribution.html#package-and-data-requirements)"/>
  <jurisdiction>
    <coding>
      <system value="http://unstats.un.org/unsd/methods/m49/m49.htm"/>
      <code value="001"/>
      <display value="World"/>
    </coding>
  </jurisdiction>
  <code value="data-requirements"/>
  <comment
           value="The data requirements operation is used for dependency gathering, as a way to understand 
the set of dependencies of a given artifact, as well as for data requirements determination, 
as a way to understand the complete set of data requirements for a given artifact, including 
terminology usage (code systems, value sets, and direct-reference codes), parameters, dependencies,
and data requirements."/>
  <resource value="ActivityDefinition"/>
  <resource value="CapabilityStatement"/>
  <resource value="CodeSystem"/>
  <resource value="CompartmentDefinition"/>
  <resource value="ConceptMap"/>
  <resource value="ExampleScenario"/>
  <resource value="GraphDefinition"/>
  <resource value="ImplementationGuide"/>
  <resource value="Library"/>
  <resource value="Measure"/>
  <resource value="Medication"/>
  <resource value="MedicationKnowledge"/>
  <resource value="MessageDefinition"/>
  <resource value="NamingSystem"/>
  <resource value="OperationDefinition"/>
  <resource value="PlanDefinition"/>
  <resource value="Questionnaire"/>
  <resource value="SearchParameter"/>
  <resource value="StructureDefinition"/>
  <resource value="StructureMap"/>
  <resource value="Substance"/>
  <resource value="TerminologyCapabilities"/>
  <resource value="TestScript"/>
  <resource value="ValueSet"/>
  <system value="false"/>
  <type value="true"/>
  <instance value="true"/>
  <parameter>
    <name value="id"/>
    <use value="in"/>
    <min value="0"/>
    <max value="1"/>
    <documentation
                   value="The logical id of the canonical or artifact resource to analyze."/>
    <type value="string"/>
  </parameter>
  <parameter>
    <name value="url"/>
    <use value="in"/>
    <min value="0"/>
    <max value="1"/>
    <documentation
                   value="A canonical or artifact reference to a canonical resource."/>
    <type value="uri"/>
  </parameter>
  <parameter>
    <name value="version"/>
    <use value="in"/>
    <min value="0"/>
    <max value="1"/>
    <documentation
                   value="The version of the canonical or artifact resource to analyze"/>
    <type value="string"/>
  </parameter>
  <parameter>
    <name value="identifier"/>
    <use value="in"/>
    <min value="0"/>
    <max value="1"/>
    <documentation
                   value="A business identifier of the canonical or artifact resource to be analyzed."/>
    <type value="string"/>
    <searchType value="token"/>
  </parameter>
  <parameter>
    <name value="expression"/>
    <use value="in"/>
    <min value="0"/>
    <max value="*"/>
    <documentation
                   value="The name of a specific expression to be considered for analysis. If no
expressions are specified, the analysis is performed on the entire resource. If
expressions are specified, the analysis is performed only on the expressions
specified."/>
    <type value="string"/>
  </parameter>
  <parameter>
    <name value="parameters"/>
    <use value="in"/>
    <min value="0"/>
    <max value="1"/>
    <documentation
                   value="Any input parameters for the artifact. If the artifact is a logic library, 
or references logic libraries, parameters defined in this input will be
bound by name to parameters defined in the logic library (or referenced
libraries). If the logic library is a CQL library, parameter types are 
mapped to CQL as specified in the Using CQL with FHIR implementation guide. 
If a parameter appears more than once in the input Parameters resource, 
it is represented with a List in the input CQL. If a parameter has parts, 
it is represented as a Tuple in the input CQL."/>
    <type value="Parameters"/>
  </parameter>
  <parameter>
    <name value="artifactVersion"/>
    <use value="in"/>
    <min value="0"/>
    <max value="*"/>
    <documentation
                   value="Specifies a version to use for a canonical or artifact resource if the artifact referencing 
the resource does not already specify a version. The format is the same as a canonical URL:
[url]|[version] - e.g. http://loinc.org|2.56 

Note that this is a generalization of the `system-version` parameter to the $expand operation 
to apply to any canonical resource, including code systems."/>
    <type value="uri"/>
  </parameter>
  <parameter>
    <name value="checkArtifactVersion"/>
    <use value="in"/>
    <min value="0"/>
    <max value="*"/>
    <documentation
                   value="Edge Case: Specifies a version to use for a canonical or artifact resource. If the artifact referencing 
the resource specifies a different version, an error is returned instead of the package. The
format is the same as a canonical URL: [url]|[version] - e.g. http://loinc.org|2.56 

Note that this is a generalization of the `check-system-version` parameter to the $expand operation to 
apply to any canonical resource, including code systems."/>
    <type value="uri"/>
  </parameter>
  <parameter>
    <name value="forceArtifactVersion"/>
    <use value="in"/>
    <min value="0"/>
    <max value="*"/>
    <documentation
                   value="Edge Case: Specifies a version to use for a canonical or artifact resource. This parameter overrides any
specified version in the artifact (and any artifacts it depends on). The
format is the same as a canonical URL: [system]|[version] - e.g.
http://loinc.org|2.56. Note that this has obvious safety issues, in that it may
result in a value set expansion giving a different list of codes that is both
wrong and unsafe, and implementers should only use this capability reluctantly.

It primarily exists to deal with situations where specifications have fallen
into decay as time passes. If the version of a canonical is overridden, the version used SHALL
explicitly be represented in the expansion parameters. 

Note that this is a generalization of the `force-system-version` parameter to the $expand operation 
to apply to any canonical resource, including code systems."/>
    <type value="uri"/>
  </parameter>
  <parameter>
    <name value="manifest"/>
    <use value="in"/>
    <min value="0"/>
    <max value="1"/>
    <documentation
                   value="Specifies an asset-collection library that defines version bindings for code
systems and other canonical resources referenced by the value set(s) being expanded
and other canonical resources referenced by the artifact. When specified, code
systems and other canonical resources identified as `depends-on` related artifacts 
in the manifest library have the same meaning as specifying that code system or other
canonical version in the `system-version` parameter of an expand or the `canonicalVersion` 
parameter."/>
    <type value="canonical"/>
    <targetProfile
                   value="http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-manifestlibrary"/>
  </parameter>
  <parameter>
    <name value="artifactEndpointConfiguration"/>
    <use value="in"/>
    <min value="0"/>
    <max value="*"/>
    <documentation
                   value="Configuration information to resolve canonical artifacts
* `artifactRoute`: An optional route used to determine whether this endpoint is expected to be able to resolve artifacts that match the route (i.e. start with the route, up to and including the entire url)
* `endpointUri`: The URI of the endpoint, exclusive with the `endpoint` parameter
* `endpoint`: An Endpoint resource describing the endpoint, exclusive with the `endpointUri` parameter

**Processing semantics**:

Create a canonical-like reference (e.g.
`{canonical.url}|{canonical.version}` or similar extensions for non-canonical artifacts).

* Given a single `artifactEndpointConfiguration`
  * When `artifactRoute` is present
    * And `artifactRoute` *starts with* canonical or artifact reference
    * Then attempt to resolve with `endpointUri` or `endpoint`
  * When `artifactRoute` is not present
    * Then attempt to resolve with `endpointUri` or `endpoint`
* Given multiple `artifactEndpointConfiguration`s
  * Then rank order each configuration (see below)
  * And attempt to resolve with `endpointUri` or `endpoint` in order until resolved

Rank each `artifactEndpointConfiguration` such that:
* if `artifactRoute` is present *and* `artifactRoute` *starts with* canonical or artifact reference: rank based on number of matching characters 
* if `artifactRoute` is *not* present: include but rank lower

NOTE: For evenly ranked `artifactEndpointConfiguration`s, order as defined in the
OperationDefinition."/>
    <part>
      <name value="artifactRoute"/>
      <use value="in"/>
      <min value="0"/>
      <max value="1"/>
      <type value="uri"/>
    </part>
    <part>
      <name value="endpointUri"/>
      <use value="in"/>
      <min value="0"/>
      <max value="1"/>
      <type value="uri"/>
    </part>
    <part>
      <name value="endpoint"/>
      <use value="in"/>
      <min value="0"/>
      <max value="1"/>
      <type value="Endpoint"/>
    </part>
  </parameter>
  <parameter>
    <name value="terminologyEndpoint"/>
    <use value="in"/>
    <min value="0"/>
    <max value="1"/>
    <documentation
                   value="An endpoint to use to access terminology (i.e. valuesets, codesystems, naming systems, concept maps, and
membership testing) referenced by the Resource. If no terminology endpoint is
supplied, the evaluation will attempt to use the server on which the operation
is being performed as the terminology server."/>
    <type value="Endpoint"/>
  </parameter>
  <parameter>
    <name value="return"/>
    <use value="out"/>
    <min value="1"/>
    <max value="1"/>
    <documentation
                   value="The result of the requirements operation is a _module-definition_ Library that
returns the computed effective requirements of the artifact."/>
    <type value="Library"/>
  </parameter>
</OperationDefinition>