This page is part of the FHIR Specification (v0.0.82: DSTU 1). The current version which supercedes this version is 5.0.0. For a full list of available versions, see the Directory of published versions
A conformance statement is a set of requirements for a desired implementation or a description of how a target application fulfills those requirements in a particular implementation.
Conformance statements are used in one of three ways:
In this scenario, the conformance statement describes the capabilities of a deployed and configured solution available at a particular access point or set of access points. The statement describes exactly how to interface with that deployed solution and thus provides for a degree of self-configuration of software solutions.
This is the type of profile that FHIR restful solutions are expected to make available on invocation of the conformance operation. It is also the type of statement that forms a basis for the testing, certification or commissioning of specific software installations.
A conformance statement is identified as being an implementation statement through the presence of the implementation element.
In this scenario, the conformance statement describes generic capabilities of a software application or component solution. The solution might be available for purchase or other acquisition and might be deployed and configured at any number of independent sites. Because it is not dependent on any particular implementation, the profile cannot provide specific details such as endpoint addresses. It may also need to document various configurations in which the application can be set up or describe the degree of customizability associated with the solution.
This type of statement may be used as a marketing tool by software and system developers to formally describe their capabilities. It can also be used as the basis for conformance testing of software solutions independent of a particular installation.
A conformance statement is identified as being a software solution statement through the presence of the software element.
In this scenario, the conformance statement describes the capabilities of a desired system. It might be used as part of an architectural design process to document needed system capabilities, or might be used as part of an RFP process to formally document the requirements of a requested solution and to document the criteria by which proposals will be evaluated.
A conformance statement is identified as being a requirements statement through the presence of the proposal element.
These three types of profiles can be used together. A requirements statement can be compared against the solution statements proffered by respondents to an RFP. A solution statement for a software package forms the starting point for the implementation statement associated with a particular installation of that software package.
Conformance Statements provide for a degree of automatic configuration and adaptation. However, capturing absolutely every variation that could impact the interoperability of two systems, let alone keeping that detailed information up-to-date as systems evolve through maintenance and upgrades is rarely practical. Therefore, conformance statements should be seen as an interim step. They provide a degree of automation. However, they also provide a great deal of human-readable content that can minimize the need for direct communication between the operators of the systems being configured to interoperate.
<Conformance xmlns="http://hl7.org/fhir"> <!-- from Resource: extension, modifierExtension, language, text, and contained --> <identifier value="[string]"/><!-- 0..1 Logical id to reference this statement § --> <version value="[string]"/><!-- 0..1 Logical id for this version of the statement § --> <name value="[string]"/><!-- 0..1 Informal name for this conformance statement § --> <publisher value="[string]"/><!-- 1..1 Publishing Organization § --> <telecom><!-- 0..* Contact Contacts for Organization § --></telecom> <description value="[string]"/><!-- 0..1 Human description of the conformance statement § --> <status value="[code]"/><!-- 0..1 draft | active | retired § --> <experimental value="[boolean]"/><!-- 0..1 If for testing purposes, not real usage § --> <date value="[dateTime]"/><!-- 1..1 Publication Date § --> <software> <!-- 0..1 Software that is covered by this conformance statement § --> <name value="[string]"/><!-- 1..1 A name the software is known by § --> <version value="[string]"/><!-- 0..1 Version covered by this statement § --> <releaseDate value="[dateTime]"/><!-- 0..1 Date this version released § --> </software> <implementation> <!-- 0..1 If this describes a specific instance § --> <description value="[string]"/><!-- 1..1 Describes this specific instance § --> <url value="[uri]"/><!-- 0..1 Base URL for the installation § --> </implementation> <fhirVersion value="[id]"/><!-- 1..1 FHIR Version § --> <acceptUnknown value="[boolean]"/><!-- 1..1 True if application accepts unknown elements § --> <format value="[code]"/><!-- 1..* formats supported (xml | json | mime type) --> <profile><!-- 0..* Resource(Profile) Profiles supported by the system --></profile> <rest> <!-- 0..* If the endpoint is a RESTful one --> <mode value="[code]"/><!-- 1..1 client | server --> <documentation value="[string]"/><!-- 0..1 General description of implementation --> <security> <!-- 0..1 Information about security of implementation --> <cors value="[boolean]"/><!-- 0..1 Adds CORS Headers (http://enable-cors.org/) --> <service><!-- 0..* CodeableConcept OAuth | OAuth2 | NTLM | Basic | Kerberos --></service> <description value="[string]"/><!-- 0..1 General description of how security works --> <certificate> <!-- 0..* Certificates associated with security profiles --> <type value="[code]"/><!-- 0..1 Mime type for certificate --> <blob value="[base64Binary]"/><!-- 0..1 Actual certificate --> </certificate> </security> <resource> <!-- 1..* Resource served on the REST interface --> <type value="[code]"/><!-- 1..1 A resource type that is supported --> <profile><!-- 0..1 Resource(Profile) What structural features are supported --></profile> <operation> <!-- 1..* What operations are supported? --> <code value="[code]"/><!-- 1..1 read | vread | update | delete | history-instance | validate | history-type | create | search-type --> <documentation value="[string]"/><!-- 0..1 Anything special about operation behavior --> </operation> <readHistory value="[boolean]"/><!-- 0..1 Whether vRead can return past versions --> <updateCreate value="[boolean]"/><!-- 0..1 If allows/uses update to a new location --> <searchInclude value="[string]"/><!-- 0..* _include values supported by the server --> <searchParam> <!-- 0..* Additional search params defined --> <name value="[string]"/><!-- 1..1 Name of search parameter --> <definition value="[uri]"/><!-- 0..1 Source of definition for parameter --> <type value="[code]"/><!-- 1..1 number | date | string | token | reference | composite | quantity --> <documentation value="[string]"/><!-- 0..1 Server-specific usage --> <target value="[code]"/><!-- 0..* Types of resource (if a resource reference) --> <chain value="[string]"/><!-- 0..* Chained names supported --> </searchParam> </resource> <operation> <!-- 0..* What operations are supported? --> <code value="[code]"/><!-- 1..1 transaction | search-system | history-system --> <documentation value="[string]"/><!-- 0..1 Anything special about operation behavior --> </operation> <query> <!-- 0..* Definition of a named query --> <name value="[string]"/><!-- 1..1 Special named queries (_query=) --> <definition value="[uri]"/><!-- 1..1 Where query is defined --> <documentation value="[string]"/><!-- 0..1 Additional usage guidance --> <parameter><!-- 0..* Content as for Conformance.rest.resource.searchParam Parameter for the named query --></parameter> </query> <documentMailbox value="[uri]"/><!-- 0..* How documents are accepted in /Mailbox --> </rest> <messaging> <!-- 0..* If messaging is supported --> <endpoint value="[uri]"/><!-- 0..1 Actual endpoint being described --> <reliableCache value="[integer]"/><!-- 0..1 Reliable Message Cache Length --> <documentation value="[string]"/><!-- 0..1 Messaging interface behavior details --> <event> <!-- 1..* Declare support for this event --> <code><!-- 1..1 Coding Event type --></code> <category value="[code]"/><!-- 0..1 Consequence | Currency | Notification --> <mode value="[code]"/><!-- 1..1 sender | receiver --> <protocol><!-- 0..* Coding http | ftp | mllp + --></protocol> <focus value="[code]"/><!-- 1..1 Resource that's focus of message --> <request><!-- 1..1 Resource(Profile) Profile that describes the request --></request> <response><!-- 1..1 Resource(Profile) Profile that describes the response --></response> <documentation value="[string]"/><!-- 0..1 Endpoint-specific event documentation --> </event> </messaging> <document> <!-- 0..* Document definition --> <mode value="[code]"/><!-- 1..1 producer | consumer --> <documentation value="[string]"/><!-- 0..1 Description of document support --> <profile><!-- 1..1 Resource(Profile) Constraint on a resource used in the document --></profile> </document> </Conformance>
Alternate definitions: Schema/Schematron, Resource Profile
Path | Definition | Type | Reference |
---|---|---|---|
Conformance.status | The status of this conformance statement | Fixed | http://hl7.org/fhir/conformance-statement-status |
Conformance.format Conformance.rest.security.certificate.type | The mime type of an attachment | Incomplete | BCP 13 (RFCs 2045, 2046, 2047, 4288, 4289 and 2049) |
Conformance.rest.mode | The mode of a RESTful conformance statement | Fixed | http://hl7.org/fhir/restful-conformance-mode |
Conformance.rest.security.service | Types of security services used with FHIR | Fixed | http://hl7.org/fhir/restful-security-service |
Conformance.rest.resource.type Conformance.rest.resource.searchParam.target Conformance.messaging.event.focus | One of the resource types defined as part of FHIR | Incomplete | http://hl7.org/fhir/resource-types |
Conformance.rest.resource.operation.code | Operations supported by REST at the type or instance level | Fixed | http://hl7.org/fhir/type-restful-operation |
Conformance.rest.resource.searchParam.type | Data types allowed to be used for search parameters | Fixed | http://hl7.org/fhir/search-param-type |
Conformance.rest.operation.code | Operations supported by REST at the system level | Fixed | http://hl7.org/fhir/system-restful-operation |
Conformance.messaging.event.code | One of the message events defined as part of FHIR | Incomplete | http://hl7.org/fhir/message-events |
Conformance.messaging.event.category | The impact of the content of a message | Fixed | http://hl7.org/fhir/message-significance-category |
Conformance.messaging.event.mode | The mode of a message conformance statement | Fixed | http://hl7.org/fhir/message-conformance-event-mode |
Conformance.messaging.event.protocol | The protocol used for message transport | Fixed | http://hl7.org/fhir/message-transport |
Conformance.document.mode | Whether the application produces or consumes documents | Fixed | http://hl7.org/fhir/document-mode |
A conformance profile declares two different kinds of profiles for the functionality it describes. The Resource Profiles are specified using Conformance.rest.resource.profile element and the System Profiles are specified using Conformance.profile element.
These profiles describe the general features that are supported by the system for each kind of resource. Typically, this is the superset of all the different use-cases implemented by the system. This is a resource-level perspective of the system functionality.
These profiles describe the information handled/produced by the system on a per use case basis. Some examples of the uses for system profiles:
Typically, these profiles are a series of variations on the same set of resources - different use cases leading to handling the resources that represent them differently. These use-cases described above all pertain to system that produce and publish data, but the same concept applies to systems that consume data. For instance:
For producer and a consumer systems to exchange data successfully based on one of these system supported profiles, it's not enough to know that the systems happen to have system profiles that overlap for the use case of interest; the consumer must be able to filter the total set of resources made available by the producer system and deal only with the ones relevant to the use case.
As an example consider a laboratory system generating 1000s of reports a day. 1% of those reports are a particular endocrine report that a decision support system knows how to process. Both systems declare that they support the particular endocrine profile, but how does the expert system actually find the endocrine reports that it knows how to process?
One possible option is for the expert system to receive every single report coming from the lab system, check whether it conforms to the profile or not, and then decide whether to process it. Checking whether a resource conforms to a particular profile or not is a straight forward operation (on option is to use the provided tools for this), but this is very inefficient way - the expert system has to receive and process 100 times many resources as it uses. To help a consumer find the correct set of reports for a use-case, the producer of the resources also SHALL:
Beyond these requirements, a producer of resources SHOULD ensure that any data that would reasonably be expected to conform to the declared profiles SHOULD be published in this form.
DSTU note: there are many uninvestigated issues associated with system profiles. HL7 is actively seeking feedback from users who experiment with system profiles, and users should be prepared for changes to features and obligations in this area in the future.
Search parameters for this resource. The standard parameters also apply. See Searching for more information about searching in REST, messaging, and services.
Name | Type | Description | Paths |
_id | token | The logical resource id associated with the resource (must be supported by all servers) | |
_language | token | The language of the resource | |
date | date | The conformance statement publication date | Conformance.date |
description | string | Text search in the description of the conformance statement | Conformance.description |
event | token | Event code in a conformance statement | Conformance.messaging.event.code |
fhirversion | token | The version of FHIR | Conformance.version |
format | token | formats supported (xml | json | mime type) | Conformance.format |
identifier | token | The identifier of the conformance statement | Conformance.identifier |
mode | token | Mode - restful (server/client) or messaging (sender/receiver) | Conformance.rest.mode |
name | string | Name of the conformance statement | Conformance.name |
profile | reference | A profile id invoked in a conformance statement | Conformance.rest.resource.profile (Profile) |
publisher | string | Name of the publisher of the conformance statement | Conformance.publisher |
resource | token | Name of a resource mentioned in a conformance statement | Conformance.rest.resource.type |
security | token | Information about security of implementation | Conformance.rest.security |
software | string | Part of a the name of a software application | Conformance.software.name |
status | token | The current status of the conformance statement | Conformance.status |
supported-profile | reference | Profiles supported by the system | Conformance.profile (Profile) |
version | token | The version identifier of the conformance statement | Conformance.version |