This page is part of the Canonical Resource Management Infrastructure Implementation Guide (v1.0.0: STU1) based on FHIR (HL7® FHIR® Standard) R4. This is the current published version in its permanent home (it will always be available at this URL). For a full list of available versions, see the Directory of published versions
Artifact Repository Service
This page documents the conformance expectations of an artifact repository service to support authoring, publishing, and distribution of FHIR-based knowledge artifacts including questionnaires, decision support rules, quality measures, guidelines, and reporting specifications, as well as their associated terminologies and data element descriptions.
This implementation guide is not advocating for any particular central authority for content repositories, rather the intent is to propose a capability statement that enables publishers to build consistent and interoperable repositories for sharing knowledge artifacts.
This implementation guide is not prescriptive about authentication or authorization, but strongly recommends that these capabilities be addressed through standard mechanisms, as described in FHIR standard security mechanisms. In addition, though knowledge artifacts typically do not include patient-specific information, test data for knowledge artifacts can sometimes be derived from or based on real patient information. In this cases, care must be taken to ensure the data is scrubbed to remove any possibility of violating patient privacy or security.
This page defines three levels of artifact repository capabilities:
- Shareable Artifact Repository: The minimum functionality required to support read-only, API access to artifacts
- Publishable Artifact Repository: Additional capabilities to support indexing and searching, dependency tracing, and packaging of artifacts
- Authoring Artifact Repository: Additional write capabilities to support content authoring using the repository as a content store
Note that the Publishable and Authoring repositories build on the Shareable repository, so that Shareable describes the minimum basic capabilities of an artifact repository, and the Publishable and Authoring repositories build on that to support additional, more sophisticated use cases.
In addition, the repository capabilities described here are intended to conform to and facilitate artifact management as described in the Artifact Lifecycle topic of this implementation guide. In particular, artifact status is a key element and care must be taken to ensure that artifact status can only transition as specified in the Artifact Status topic.
Artifact Repository Actions
The following conceptual actions support artifact authoring, searching, publication, and distribution. In this section, each of these actions are described conceptually, and then the capability statements segment these actions into the shareable, publishable, and authoring repositories to support the various use cases for an artifact ecosystem.
- Retrieve: Get a specific artifact by its server-specific identity
- Search: Search for an artifact according to specific criteria
- Package: Package an artifact for a particular environment (regardless of status)
- Requirements: Determine the data requirements and dependencies for a particular artifact (regardless of status)
- Submit: Post a new artifact in draft status
- Revise: Update an existing artifact in draft status
- Withdraw: Delete a draft artifact
- Review: Review and provide comments on an existing artifact (regardless of status)
- Approve: Approve and provide comments on an existing artifact (regardless of status)
- Publish: Post a new artifact with active status
- Release: Update an existing draft artifact to active and pin the the versions for all artifacts referenced either directly or transitively by the artifact.
- Retire: Post an update that sets status to retired on an existing active artifact
- Archive: Delete a retired artifact
- Draft: Draft a new version of an existing active artifact
- Clone: Clone a new artifact based on an existing artifact (regardless of status)
- Diff: Compare two knowledge artifacts and optionally expand any ValueSets in the dependency tree
NOTE: These are conceptual actions that can be performed in a variety of ways. The purpose of the capability statements is to describe how these actions are actually performed in an API, as either a FHIR RESTful interaction (create, read, update, delete), or FHIR operation (e.g. $package).
Shareable Artifact Repository
The ShareableArtifactRepository capability statement defines the minimum expectations for an artifact repository that provides basic access to shareable artifact content:
- Represent artifacts using the appropriate capability profile for the artifact
- Retrieve artifacts by their logical id
- Search for artifacts by url, version, identifier, name, title, status, and description
The CRMIShareableArtifactRepository capability statement captures these requirements formally, while the following sections provide a narrative description of them.
Note that the shareable artifact repository defined here supports only the knowledge artifacts that are the primary focus of this implementation guide:
- ActivityDefinition
- Library
- Measure
- PlanDefinition
- Questionnaire
Repository support for other types of artifacts SHALL follow the same pattern established for these artifacts.
Server Requirements
- Services MAY require authentication. If authentication is required, it SHOULD be in the form of an authentication header (usually a bearer token) that the use can determine in advance and provider to their tooling environment in some configuration.
- For all string search parameters, servers
- SHALL support the
contains
modifier
- SHALL support the
exact
modifier
- SHOULD support the
text
modifier
- Servers SHALL support the expression of
AND
and OR
search parameters for all search parameters, as defined in the composite search parameter topic.
Note that for servers that support write capabilities, the version
element of an artifact is a business version, and is independent of resource versioning. Artifact repositories that support write capabilities may wish to implement resource versioning as well as artifact (business) versioning to ensure auditability of changes, however, this is an implementation decision and does not impact the conceptual support for artifact versions (because each different version of an artifact will necessarily be a different resource instance in the server. Note also that R6 has introduced additional capabilities to better support resource versioning for servers that provide such support.
Artifacts
For each type of knowledge artifact supported by a ShareableArtifactRepository:
- SHALL Represent basic artifact information, as specified by the shareable profile for the artifact, which includes url, identifier, version, name, title, type, status, experimental, date, publisher, contact, description, useContext, and jurisdiction.
- For computable artifacts, SHALL represent computable artifact information, as specified by the computable artifact profile.
- For executable artifacts, SHALL represent executable artifact information, as specified by the executable artifact profile.
- For published artifacts, SHALL represent publishable artifact information, as specified by the publishable artifact profile.
- SHALL support retrieve by either
read
by the server-defined id for the artifact
search
using the _id
search parameter
- SHALL support search using the
search
interaction by:
- url: Returning all versions of the artifact matching that url
- version: Returning the artifact matching that version (can appear only in combination with a url search)
- identifier: Returning any artifact matching the identifier
- name: Returning any artifact matching the name, according to the string-matching semantics in FHIR
- title: Returning any artifact matching the title, according to the string-matching semantics in FHIR
- status: Returning artifacts that match the given status
- description: Returning any artifact matching the search description, according to string-matching semantics in FHIR
See the CRMIShareableArtifactRepository capability statement for a formal description of these requirements.
Publishable Artifact Repository
The PublishableArtifactRepository capability statement builds on the ShareableArtifactRepository and expresses additional functionality that SHOULD be provided in support of providing published FHIR artifacts including additional searching and packaging capabilities:
- Package artifacts using the $package operation
- Requirements using the $data-requirements operation
- Search using additional publishable metadata
- Should support minimum write capability (Publish, Retire, Archive)
The CRMIPublishableArtifactRepository capability statement captures these requirements formally, while the following sections provide a narrative description of them.
Note that the publishable artifact repository defined here supports only the knowledge artifacts that are the primary focus of this implementation guide:
- ActivityDefinition
- Library
- Measure
- PlanDefinition
- Questionnaire
Repository support for other types of artifacts SHALL follow the same pattern established for these artifacts.
Artifacts
For each type of knowledge artifact supported by a PublishableArtifactRepository:
- SHALL support artifact packaging: $package operation
- SHALL support the url parameter
- SHALL support the version parameter
- SHOULD support the id parameter
- SHOULD support the offset parameter
- SHOULD support the count parameter
- SHOULD support artifactVersion parameter (overrides artifact versions specified in the manifest)
- SHOULD support checkArtifactVersion parameter (overrides artifact versions specified in the manifest)
- SHOULD support forceArtifactVersion parameter (overrides artifact versions specified in the manifest)
- SHOULD support manifest parameter (provides a reference to a manifest to be used for the packaging)
- SHOULD support include parameter
- SHOULD support includeUri parameter
- SHOULD support exclude parameter
- SHOULD support excludeUri parameter
- SHOULD support packageOnly parameter
- SHOULD support contentEndpoint parameter
- SHOULD support terminologyEndpoint parameter
- SHALL support artifact requirements analysis: $data-requirements operation
- SHALL support the url parameter
- SHALL support the version parameter
- SHOULD support the id parameter
- SHOULD support the expression parameter
- SHOULD support the parameters parameter
- SHOULD support artifactVersion parameter (overrides artifact versions specified in the manifest)
- SHOULD support checkArtifactVersion parameter (overrides code artifact versions specified in the manifest)
- SHOULD support forceArtifactVersion parameter (overrides code artifact versions specified in the manifest)
- SHOULD support manifest parameter (provides a reference to a manifest to be used for the packaging)
- SHOULD support artifact Metadata searches:
- date: Returning all artifacts matching the given date
- effective: Returning all artifacts matching the given effectivePeriod
- jurisdiction: Returning all artifacts matching the given jurisdiction
- context: Returning all artifacts with a use context value matching the given context
- context-type: Returning all artifacts with a use context type matching the given context type
- context-type-quantity: Returning all artifacts with a use context quantity or range matching the given quantity
- context-type-value: Returning all artifacts with a given use context type and value
- topic: Returning all artifacts matching the given topic
- MAY support artifact RelatedArtifact searches:
- composed-of: Returning all artifacts that have the given artifact as a component
- depends-on: Returning all artifacts that have the given artifact as a dependency
- derived-from: Returning all artifacts that are derived from the given artifact
- successor: Returning all artifacts that have the given artifact as a successor
- predecessor: Returning all artifacts that have the given artifact as a predecessor
- SHOULD support minimum write capability:
- Support the publish action by either the
create
or put
interaction
- The artifact must be in
active
status and must conform to at least the appropriate shareable and publishable profiles for the artifact
- Support the retire action using an
update
interaction
- The artifact must be in
active
status and update is only allowed to change the status to retired
and update the date
(and other metadata appropriate to indicate retired status)
- Support the archive action using a
delete
interaction
- The artifact must be in
retired
status
Authoring Artifact Repository
The AuthoringArtifactRepository capability statement defines additional capabilities that are required to support content authoring workflows in a shared environment. For systems that do not exchange in progress content, or support external review/approval processes, these capabilities are not required to be exposed:
- Support
draft
artifacts (the Submit, Revise, and Withdraw actions)
- Support artifact review and approval (the Review and Approve actions)
- Support artifact authoring (Draft, Clone, Release, and Diff)
The CRMIAuthoringArtifactRepository capability statement captures these requirements formally, while the following sections provide a narrative description of them.
Note that the authoring artifact repository defined here supports only the knowledge artifacts that are the primary focus of this implementation guide:
- ActivityDefinition
- Library
- Measure
- PlanDefinition
- Questionnaire
Repository support for other types of artifacts SHALL follow the same pattern established for these artifacts.
Artifacts
For each type of artifact supported, an AuthoringMeasureRepository:
- SHALL support submit using either the
create
or update
interaction
- The artifact must be in draft status
- SHALL support revise using the
update
interaction
- The artifact must be in (and remain in) draft status
- SHOULD support withdraw using the
delete
interaction
- The artifact must be in draft status
- SHOULD support review using the $review operation
- SHOULD support id parameter
- SHOULD support reviewDate parameter
- SHOULD support artifactAssessmentType parameter
- SHOULD support artifactAssessmentSummary parameter
- SHOULD support artifactAssessmentTarget parameter
- SHOULD support artifactAssessmentAuthor parameter
- SHOULD support approve using the $approve operation
- SHOULD support id parameter
- SHOULD support approvalDate parameter
- SHOULD support artifactAssessmentType parameter
- SHOULD support artifactAssessmentSummary parameter
- SHOULD support artifactAssessmentTarget parameter
- SHOULD support artifactAssessmentAuthor parameter
- SHALL support draft using the $draft operation
- SHOULD support id parameter
- SHOULD support version parameter
- SHALL support release using the $release operation
- SHOULD support id parameter
- SHOULD support version parameter
- SHOULD support versionBehavior parameter
- SHOULD support latestFromTxServer parameter
- SHOULD support experimentalBehavior parameter
- SHOULD support releaseLabel parameter
- SHOULD support clone using the $clone operation
- SHOULD support id parameter
- SHOULD support version parameter
- SHOULD support diff using the $artifact-diff operation
- SHALL support target parameter
- SHALL support source parameter
- SHOULD support compareComputable parameter
- SHOULD support compareExecutable parameter
The Review and Approve actions are supported via operations, rather than interactions, because they have a specific set of input parameters and are only allowed to make certain updates to the artifacts. Although an update
interaction could be used in theory, this would place a higher burden on the client to ensure the updated resource was only affecting appropriate elements, something the server must validate anyway.
The Release action is supported as an operation because it is specifically asking the server to perform a series of processes involving updating statuses, dates, and potentially versions on multiple artifacts, all within the same operation. Multiple update
interactions could in theory be used to support this, this would place a higher burden on the client to ensure the release processing was followed appropriately for the artifact and all child artifacts, recursively. In addition, all these updates would need to be performed as part of a single transaction, and the server would need to validate the transaction updates anyway.
The Draft action is supported as an operation because it involves not only creating a new version of an artifact, but any child artifacts, recursively. This could be done in theory by the client reading all relevant artifacts and creating new resources, but an operation simplifies implementation for the client.
The Clone action is supported as an operation because it involves not only creating a copy of the artifact, but any child artifacts, recursively. This could be done in theory by the client reading all relevant artifacts and creating new resources, but an operation simplifies implementation for the client.