This page is part of the FHIR Specification (v1.8.0: STU 3 Draft). The current version which supercedes this version is 5.0.0. For a full list of available versions, see the Directory of published versions . Page versions: R5 R4B R4 R3 R2
FHIR Infrastructure Work Group | Maturity Level: 1 | Compartments: Not linked to any defined compartments |
A formal computable definition of an operation (on the RESTful interface) or a named query (using the search interaction).
The OperationDefinition resource provides a formal computable definition of an operation or a named query. The OperationDefinition serves two principal purposes:
See below for further information about these, and about how Operations and Named Queries are executed.
Operation Definitions are published to define operations that servers can implement in a common fashion. The FHIR specification itself describes a number (see below), and other organizations, including IHE, national programs, jurisdictions and vendors are able to publish additional operation definitions.
OperationDefinition resources are referred to from two different places:
This resource is referenced by CapabilityStatement and ServiceDefinition
Structure
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
OperationDefinition | DomainResource | Definition of an operation or a named query | ||
url | Σ | 0..1 | uri | Logical uri to reference this operation definition (globally unique) |
version | Σ | 0..1 | string | Business version of the operation definition |
name | Σ | 1..1 | string | Name for this operation definition (Computer friendly) |
status | ?!Σ | 1..1 | code | draft | active | retired PublicationStatus (Required) |
kind | 1..1 | code | operation | query OperationKind (Required) | |
experimental | ?!Σ | 0..1 | boolean | If 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 operation definition | |
useContext | Σ | 0..* | UsageContext | Content intends to support these contexts |
jurisdiction | Σ | 0..* | CodeableConcept | Intended jurisdiction for operation definition (if applicable) Jurisdiction ValueSet (Extensible) |
purpose | 0..1 | markdown | Why this operation definition is defined | |
idempotent | 0..1 | boolean | Whether content is unchanged by the operation | |
code | 1..1 | code | Name used to invoke the operation | |
comment | 0..1 | string | Additional information about use | |
base | 0..1 | Reference(OperationDefinition) | Marks this as a profile of the base | |
resource | 0..* | code | Types this operation applies to ResourceType (Required) | |
system | 1..1 | boolean | Invoke at the system level? | |
type | 1..1 | boolean | Invole at the type level? | |
instance | 1..1 | boolean | Invoke on an instance? | |
parameter | I | 0..* | BackboneElement | Parameters for the operation/query Either a type must be provided, or parts A search type can only be specified for parameters of type string |
name | 1..1 | code | Name in Parameters.parameter.name or in URL | |
use | 1..1 | code | in | out OperationParameterUse (Required) | |
min | 1..1 | integer | Minimum Cardinality | |
max | 1..1 | string | Maximum Cardinality (a number or *) | |
documentation | 0..1 | string | Description of meaning/use | |
type | I | 0..1 | code | What type this parameter has FHIRAllTypes (Required) |
searchType | I | 0..1 | code | number | date | string | token | reference | composite | quantity | uri SearchParamType (Required) |
profile | 0..1 | Reference(StructureDefinition) | Profile on the type | |
binding | 0..1 | BackboneElement | ValueSet details if this is coded | |
strength | 1..1 | code | required | extensible | preferred | example BindingStrength (Required) | |
valueSet[x] | 1..1 | Source of value set | ||
valueSetUri | uri | |||
valueSetReference | Reference(ValueSet) | |||
part | I | 0..* | see parameter | Parts of a nested Parameter |
overload | 0..* | BackboneElement | For generating overloaded methods in code | |
parameterName | 0..* | string | Name of parameter to include in overload | |
comment | 0..1 | string | Comments to go on overload | |
Documentation for this format |
UML Diagram (Legend)
XML Template
<OperationDefinition xmlns="http://hl7.org/fhir"> <!-- from Resource: id, meta, implicitRules, and language --> <!-- from DomainResource: text, contained, extension, and modifierExtension --> <url value="[uri]"/><!-- 0..1 Logical uri to reference this operation definition (globally unique) --> <version value="[string]"/><!-- 0..1 Business version of the operation definition --> <name value="[string]"/><!-- 1..1 Name for this operation definition (Computer friendly) --> <status value="[code]"/><!-- 1..1 draft | active | retired --> <kind value="[code]"/><!-- 1..1 operation | query --> <experimental value="[boolean]"/><!-- 0..1 If for testing purposes, not real usage --> <date value="[dateTime]"/><!-- 0..1 Date this was last changed --> <publisher value="[string]"/><!-- 0..1 Name of the publisher (Organization or individual) --> <contact><!-- 0..* ContactDetail Contact details for the publisher --></contact> <description value="[markdown]"/><!-- 0..1 Natural language description of the operation definition --> <useContext><!-- 0..* UsageContext Content intends to support these contexts --></useContext> <jurisdiction><!-- 0..* CodeableConcept Intended jurisdiction for operation definition (if applicable) --></jurisdiction> <purpose value="[markdown]"/><!-- 0..1 Why this operation definition is defined --> <idempotent value="[boolean]"/><!-- 0..1 Whether content is unchanged by the operation --> <code value="[code]"/><!-- 1..1 Name used to invoke the operation --> <comment value="[string]"/><!-- 0..1 Additional information about use --> <base><!-- 0..1 Reference(OperationDefinition) Marks this as a profile of the base --></base> <resource value="[code]"/><!-- 0..* Types this operation applies to --> <system value="[boolean]"/><!-- 1..1 Invoke at the system level? --> <type value="[boolean]"/><!-- 1..1 Invole at the type level? --> <instance value="[boolean]"/><!-- 1..1 Invoke on an instance? --> <parameter> <!-- 0..* Parameters for the operation/query --> <name value="[code]"/><!-- 1..1 Name in Parameters.parameter.name or in URL --> <use value="[code]"/><!-- 1..1 in | out --> <min value="[integer]"/><!-- 1..1 Minimum Cardinality --> <max value="[string]"/><!-- 1..1 Maximum Cardinality (a number or *) --> <documentation value="[string]"/><!-- 0..1 Description of meaning/use --> <type value="[code]"/><!-- 0..1 What type this parameter has --> <searchType value="[code]"/><!-- 0..1 number | date | string | token | reference | composite | quantity | uri --> <profile><!-- 0..1 Reference(StructureDefinition) Profile on the type --></profile> <binding> <!-- 0..1 ValueSet details if this is coded --> <strength value="[code]"/><!-- 1..1 required | extensible | preferred | example --> <valueSet[x]><!-- 1..1 uri|Reference(ValueSet) Source of value set --></valueSet[x]> </binding> <part><!-- 0..* Content as for OperationDefinition.parameter Parts of a nested Parameter --></part> </parameter> <overload> <!-- 0..* For generating overloaded methods in code --> <parameterName value="[string]"/><!-- 0..* Name of parameter to include in overload --> <comment value="[string]"/><!-- 0..1 Comments to go on overload --> </overload> </OperationDefinition>
JSON Template
{ "resourceType" : "OperationDefinition", // from Resource: id, meta, implicitRules, and language // from DomainResource: text, contained, extension, and modifierExtension "url" : "<uri>", // Logical uri to reference this operation definition (globally unique) "version" : "<string>", // Business version of the operation definition "name" : "<string>", // R! Name for this operation definition (Computer friendly) "status" : "<code>", // R! draft | active | retired "kind" : "<code>", // R! operation | query "experimental" : <boolean>, // If for testing purposes, not real usage "date" : "<dateTime>", // Date this was last changed "publisher" : "<string>", // Name of the publisher (Organization or individual) "contact" : [{ ContactDetail }], // Contact details for the publisher "description" : "<markdown>", // Natural language description of the operation definition "useContext" : [{ UsageContext }], // Content intends to support these contexts "jurisdiction" : [{ CodeableConcept }], // Intended jurisdiction for operation definition (if applicable) "purpose" : "<markdown>", // Why this operation definition is defined "idempotent" : <boolean>, // Whether content is unchanged by the operation "code" : "<code>", // R! Name used to invoke the operation "comment" : "<string>", // Additional information about use "base" : { Reference(OperationDefinition) }, // Marks this as a profile of the base "resource" : ["<code>"], // Types this operation applies to "system" : <boolean>, // R! Invoke at the system level? "type" : <boolean>, // R! Invole at the type level? "instance" : <boolean>, // R! Invoke on an instance? "parameter" : [{ // Parameters for the operation/query "name" : "<code>", // R! Name in Parameters.parameter.name or in URL "use" : "<code>", // R! in | out "min" : <integer>, // R! Minimum Cardinality "max" : "<string>", // R! Maximum Cardinality (a number or *) "documentation" : "<string>", // Description of meaning/use "type" : "<code>", // C? What type this parameter has "searchType" : "<code>", // C? number | date | string | token | reference | composite | quantity | uri "profile" : { Reference(StructureDefinition) }, // Profile on the type "binding" : { // ValueSet details if this is coded "strength" : "<code>", // R! required | extensible | preferred | example // valueSet[x]: Source of value set. One of these 2: "valueSetUri" : "<uri>" "valueSetReference" : { Reference(ValueSet) } }, "part" : [{ Content as for OperationDefinition.parameter }] // C? Parts of a nested Parameter }], "overload" : [{ // For generating overloaded methods in code "parameterName" : ["<string>"], // Name of parameter to include in overload "comment" : "<string>" // Comments to go on overload }] }
Turtle Template
@prefix fhir: <http://hl7.org/fhir/> . [ a fhir:OperationDefinition; fhir:nodeRole fhir:treeRoot; # if this is the parser root # from Resource: .id, .meta, .implicitRules, and .language # from DomainResource: .text, .contained, .extension, and .modifierExtension fhir:OperationDefinition.url [ uri ]; # 0..1 Logical uri to reference this operation definition (globally unique) fhir:OperationDefinition.version [ string ]; # 0..1 Business version of the operation definition fhir:OperationDefinition.name [ string ]; # 1..1 Name for this operation definition (Computer friendly) fhir:OperationDefinition.status [ code ]; # 1..1 draft | active | retired fhir:OperationDefinition.kind [ code ]; # 1..1 operation | query fhir:OperationDefinition.experimental [ boolean ]; # 0..1 If for testing purposes, not real usage fhir:OperationDefinition.date [ dateTime ]; # 0..1 Date this was last changed fhir:OperationDefinition.publisher [ string ]; # 0..1 Name of the publisher (Organization or individual) fhir:OperationDefinition.contact [ ContactDetail ], ... ; # 0..* Contact details for the publisher fhir:OperationDefinition.description [ markdown ]; # 0..1 Natural language description of the operation definition fhir:OperationDefinition.useContext [ UsageContext ], ... ; # 0..* Content intends to support these contexts fhir:OperationDefinition.jurisdiction [ CodeableConcept ], ... ; # 0..* Intended jurisdiction for operation definition (if applicable) fhir:OperationDefinition.purpose [ markdown ]; # 0..1 Why this operation definition is defined fhir:OperationDefinition.idempotent [ boolean ]; # 0..1 Whether content is unchanged by the operation fhir:OperationDefinition.code [ code ]; # 1..1 Name used to invoke the operation fhir:OperationDefinition.comment [ string ]; # 0..1 Additional information about use fhir:OperationDefinition.base [ Reference(OperationDefinition) ]; # 0..1 Marks this as a profile of the base fhir:OperationDefinition.resource [ code ], ... ; # 0..* Types this operation applies to fhir:OperationDefinition.system [ boolean ]; # 1..1 Invoke at the system level? fhir:OperationDefinition.type [ boolean ]; # 1..1 Invole at the type level? fhir:OperationDefinition.instance [ boolean ]; # 1..1 Invoke on an instance? fhir:OperationDefinition.parameter [ # 0..* Parameters for the operation/query fhir:OperationDefinition.parameter.name [ code ]; # 1..1 Name in Parameters.parameter.name or in URL fhir:OperationDefinition.parameter.use [ code ]; # 1..1 in | out fhir:OperationDefinition.parameter.min [ integer ]; # 1..1 Minimum Cardinality fhir:OperationDefinition.parameter.max [ string ]; # 1..1 Maximum Cardinality (a number or *) fhir:OperationDefinition.parameter.documentation [ string ]; # 0..1 Description of meaning/use fhir:OperationDefinition.parameter.type [ code ]; # 0..1 What type this parameter has fhir:OperationDefinition.parameter.searchType [ code ]; # 0..1 number | date | string | token | reference | composite | quantity | uri fhir:OperationDefinition.parameter.profile [ Reference(StructureDefinition) ]; # 0..1 Profile on the type fhir:OperationDefinition.parameter.binding [ # 0..1 ValueSet details if this is coded fhir:OperationDefinition.parameter.binding.strength [ code ]; # 1..1 required | extensible | preferred | example # OperationDefinition.parameter.binding.valueSet[x] : 1..1 Source of value set. One of these 2 fhir:OperationDefinition.parameter.binding.valueSetUri [ uri ] fhir:OperationDefinition.parameter.binding.valueSetReference [ Reference(ValueSet) ] ]; fhir:OperationDefinition.parameter.part [ See OperationDefinition.parameter ], ... ; # 0..* Parts of a nested Parameter ], ...; fhir:OperationDefinition.overload [ # 0..* For generating overloaded methods in code fhir:OperationDefinition.overload.parameterName [ string ], ... ; # 0..* Name of parameter to include in overload fhir:OperationDefinition.overload.comment [ string ]; # 0..1 Comments to go on overload ], ...; ]
Changes since DSTU2
OperationDefinition | |
OperationDefinition.status | Change value set from http://hl7.org/fhir/ValueSet/conformance-resource-status to http://hl7.org/fhir/ValueSet/publication-status |
OperationDefinition.experimental | Now marked as Modifier |
OperationDefinition.contact | Type changed from BackboneElement to ContactDetail |
OperationDefinition.description | Type changed from string to markdown |
OperationDefinition.useContext | added Element |
OperationDefinition.jurisdiction | added Element |
OperationDefinition.purpose | added Element |
OperationDefinition.comment | Renamed from notes to comment |
OperationDefinition.resource | added Element |
OperationDefinition.type |
Min Cardinality changed from 0 to 1 Max Cardinality changed from * to 1 Type changed from code to boolean Remove Binding http://hl7.org/fhir/ValueSet/resource-types (required) |
OperationDefinition.parameter.type | Change value set from http://hl7.org/fhir/ValueSet/operation-parameter-type to http://hl7.org/fhir/ValueSet/all-types |
OperationDefinition.parameter.searchType | added Element |
OperationDefinition.overload | added Element |
OperationDefinition.overload.parameterName | added Element |
OperationDefinition.overload.comment | added Element |
OperationDefinition.contact.name | deleted |
OperationDefinition.contact.telecom | deleted |
OperationDefinition.requirements | deleted |
See the Full Difference for further information
Structure
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
OperationDefinition | DomainResource | Definition of an operation or a named query | ||
url | Σ | 0..1 | uri | Logical uri to reference this operation definition (globally unique) |
version | Σ | 0..1 | string | Business version of the operation definition |
name | Σ | 1..1 | string | Name for this operation definition (Computer friendly) |
status | ?!Σ | 1..1 | code | draft | active | retired PublicationStatus (Required) |
kind | 1..1 | code | operation | query OperationKind (Required) | |
experimental | ?!Σ | 0..1 | boolean | If 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 operation definition | |
useContext | Σ | 0..* | UsageContext | Content intends to support these contexts |
jurisdiction | Σ | 0..* | CodeableConcept | Intended jurisdiction for operation definition (if applicable) Jurisdiction ValueSet (Extensible) |
purpose | 0..1 | markdown | Why this operation definition is defined | |
idempotent | 0..1 | boolean | Whether content is unchanged by the operation | |
code | 1..1 | code | Name used to invoke the operation | |
comment | 0..1 | string | Additional information about use | |
base | 0..1 | Reference(OperationDefinition) | Marks this as a profile of the base | |
resource | 0..* | code | Types this operation applies to ResourceType (Required) | |
system | 1..1 | boolean | Invoke at the system level? | |
type | 1..1 | boolean | Invole at the type level? | |
instance | 1..1 | boolean | Invoke on an instance? | |
parameter | I | 0..* | BackboneElement | Parameters for the operation/query Either a type must be provided, or parts A search type can only be specified for parameters of type string |
name | 1..1 | code | Name in Parameters.parameter.name or in URL | |
use | 1..1 | code | in | out OperationParameterUse (Required) | |
min | 1..1 | integer | Minimum Cardinality | |
max | 1..1 | string | Maximum Cardinality (a number or *) | |
documentation | 0..1 | string | Description of meaning/use | |
type | I | 0..1 | code | What type this parameter has FHIRAllTypes (Required) |
searchType | I | 0..1 | code | number | date | string | token | reference | composite | quantity | uri SearchParamType (Required) |
profile | 0..1 | Reference(StructureDefinition) | Profile on the type | |
binding | 0..1 | BackboneElement | ValueSet details if this is coded | |
strength | 1..1 | code | required | extensible | preferred | example BindingStrength (Required) | |
valueSet[x] | 1..1 | Source of value set | ||
valueSetUri | uri | |||
valueSetReference | Reference(ValueSet) | |||
part | I | 0..* | see parameter | Parts of a nested Parameter |
overload | 0..* | BackboneElement | For generating overloaded methods in code | |
parameterName | 0..* | string | Name of parameter to include in overload | |
comment | 0..1 | string | Comments to go on overload | |
Documentation for this format |
XML Template
<OperationDefinition xmlns="http://hl7.org/fhir"> <!-- from Resource: id, meta, implicitRules, and language --> <!-- from DomainResource: text, contained, extension, and modifierExtension --> <url value="[uri]"/><!-- 0..1 Logical uri to reference this operation definition (globally unique) --> <version value="[string]"/><!-- 0..1 Business version of the operation definition --> <name value="[string]"/><!-- 1..1 Name for this operation definition (Computer friendly) --> <status value="[code]"/><!-- 1..1 draft | active | retired --> <kind value="[code]"/><!-- 1..1 operation | query --> <experimental value="[boolean]"/><!-- 0..1 If for testing purposes, not real usage --> <date value="[dateTime]"/><!-- 0..1 Date this was last changed --> <publisher value="[string]"/><!-- 0..1 Name of the publisher (Organization or individual) --> <contact><!-- 0..* ContactDetail Contact details for the publisher --></contact> <description value="[markdown]"/><!-- 0..1 Natural language description of the operation definition --> <useContext><!-- 0..* UsageContext Content intends to support these contexts --></useContext> <jurisdiction><!-- 0..* CodeableConcept Intended jurisdiction for operation definition (if applicable) --></jurisdiction> <purpose value="[markdown]"/><!-- 0..1 Why this operation definition is defined --> <idempotent value="[boolean]"/><!-- 0..1 Whether content is unchanged by the operation --> <code value="[code]"/><!-- 1..1 Name used to invoke the operation --> <comment value="[string]"/><!-- 0..1 Additional information about use --> <base><!-- 0..1 Reference(OperationDefinition) Marks this as a profile of the base --></base> <resource value="[code]"/><!-- 0..* Types this operation applies to --> <system value="[boolean]"/><!-- 1..1 Invoke at the system level? --> <type value="[boolean]"/><!-- 1..1 Invole at the type level? --> <instance value="[boolean]"/><!-- 1..1 Invoke on an instance? --> <parameter> <!-- 0..* Parameters for the operation/query --> <name value="[code]"/><!-- 1..1 Name in Parameters.parameter.name or in URL --> <use value="[code]"/><!-- 1..1 in | out --> <min value="[integer]"/><!-- 1..1 Minimum Cardinality --> <max value="[string]"/><!-- 1..1 Maximum Cardinality (a number or *) --> <documentation value="[string]"/><!-- 0..1 Description of meaning/use --> <type value="[code]"/><!-- 0..1 What type this parameter has --> <searchType value="[code]"/><!-- 0..1 number | date | string | token | reference | composite | quantity | uri --> <profile><!-- 0..1 Reference(StructureDefinition) Profile on the type --></profile> <binding> <!-- 0..1 ValueSet details if this is coded --> <strength value="[code]"/><!-- 1..1 required | extensible | preferred | example --> <valueSet[x]><!-- 1..1 uri|Reference(ValueSet) Source of value set --></valueSet[x]> </binding> <part><!-- 0..* Content as for OperationDefinition.parameter Parts of a nested Parameter --></part> </parameter> <overload> <!-- 0..* For generating overloaded methods in code --> <parameterName value="[string]"/><!-- 0..* Name of parameter to include in overload --> <comment value="[string]"/><!-- 0..1 Comments to go on overload --> </overload> </OperationDefinition>
JSON Template
{ "resourceType" : "OperationDefinition", // from Resource: id, meta, implicitRules, and language // from DomainResource: text, contained, extension, and modifierExtension "url" : "<uri>", // Logical uri to reference this operation definition (globally unique) "version" : "<string>", // Business version of the operation definition "name" : "<string>", // R! Name for this operation definition (Computer friendly) "status" : "<code>", // R! draft | active | retired "kind" : "<code>", // R! operation | query "experimental" : <boolean>, // If for testing purposes, not real usage "date" : "<dateTime>", // Date this was last changed "publisher" : "<string>", // Name of the publisher (Organization or individual) "contact" : [{ ContactDetail }], // Contact details for the publisher "description" : "<markdown>", // Natural language description of the operation definition "useContext" : [{ UsageContext }], // Content intends to support these contexts "jurisdiction" : [{ CodeableConcept }], // Intended jurisdiction for operation definition (if applicable) "purpose" : "<markdown>", // Why this operation definition is defined "idempotent" : <boolean>, // Whether content is unchanged by the operation "code" : "<code>", // R! Name used to invoke the operation "comment" : "<string>", // Additional information about use "base" : { Reference(OperationDefinition) }, // Marks this as a profile of the base "resource" : ["<code>"], // Types this operation applies to "system" : <boolean>, // R! Invoke at the system level? "type" : <boolean>, // R! Invole at the type level? "instance" : <boolean>, // R! Invoke on an instance? "parameter" : [{ // Parameters for the operation/query "name" : "<code>", // R! Name in Parameters.parameter.name or in URL "use" : "<code>", // R! in | out "min" : <integer>, // R! Minimum Cardinality "max" : "<string>", // R! Maximum Cardinality (a number or *) "documentation" : "<string>", // Description of meaning/use "type" : "<code>", // C? What type this parameter has "searchType" : "<code>", // C? number | date | string | token | reference | composite | quantity | uri "profile" : { Reference(StructureDefinition) }, // Profile on the type "binding" : { // ValueSet details if this is coded "strength" : "<code>", // R! required | extensible | preferred | example // valueSet[x]: Source of value set. One of these 2: "valueSetUri" : "<uri>" "valueSetReference" : { Reference(ValueSet) } }, "part" : [{ Content as for OperationDefinition.parameter }] // C? Parts of a nested Parameter }], "overload" : [{ // For generating overloaded methods in code "parameterName" : ["<string>"], // Name of parameter to include in overload "comment" : "<string>" // Comments to go on overload }] }
Turtle Template
@prefix fhir: <http://hl7.org/fhir/> . [ a fhir:OperationDefinition; fhir:nodeRole fhir:treeRoot; # if this is the parser root # from Resource: .id, .meta, .implicitRules, and .language # from DomainResource: .text, .contained, .extension, and .modifierExtension fhir:OperationDefinition.url [ uri ]; # 0..1 Logical uri to reference this operation definition (globally unique) fhir:OperationDefinition.version [ string ]; # 0..1 Business version of the operation definition fhir:OperationDefinition.name [ string ]; # 1..1 Name for this operation definition (Computer friendly) fhir:OperationDefinition.status [ code ]; # 1..1 draft | active | retired fhir:OperationDefinition.kind [ code ]; # 1..1 operation | query fhir:OperationDefinition.experimental [ boolean ]; # 0..1 If for testing purposes, not real usage fhir:OperationDefinition.date [ dateTime ]; # 0..1 Date this was last changed fhir:OperationDefinition.publisher [ string ]; # 0..1 Name of the publisher (Organization or individual) fhir:OperationDefinition.contact [ ContactDetail ], ... ; # 0..* Contact details for the publisher fhir:OperationDefinition.description [ markdown ]; # 0..1 Natural language description of the operation definition fhir:OperationDefinition.useContext [ UsageContext ], ... ; # 0..* Content intends to support these contexts fhir:OperationDefinition.jurisdiction [ CodeableConcept ], ... ; # 0..* Intended jurisdiction for operation definition (if applicable) fhir:OperationDefinition.purpose [ markdown ]; # 0..1 Why this operation definition is defined fhir:OperationDefinition.idempotent [ boolean ]; # 0..1 Whether content is unchanged by the operation fhir:OperationDefinition.code [ code ]; # 1..1 Name used to invoke the operation fhir:OperationDefinition.comment [ string ]; # 0..1 Additional information about use fhir:OperationDefinition.base [ Reference(OperationDefinition) ]; # 0..1 Marks this as a profile of the base fhir:OperationDefinition.resource [ code ], ... ; # 0..* Types this operation applies to fhir:OperationDefinition.system [ boolean ]; # 1..1 Invoke at the system level? fhir:OperationDefinition.type [ boolean ]; # 1..1 Invole at the type level? fhir:OperationDefinition.instance [ boolean ]; # 1..1 Invoke on an instance? fhir:OperationDefinition.parameter [ # 0..* Parameters for the operation/query fhir:OperationDefinition.parameter.name [ code ]; # 1..1 Name in Parameters.parameter.name or in URL fhir:OperationDefinition.parameter.use [ code ]; # 1..1 in | out fhir:OperationDefinition.parameter.min [ integer ]; # 1..1 Minimum Cardinality fhir:OperationDefinition.parameter.max [ string ]; # 1..1 Maximum Cardinality (a number or *) fhir:OperationDefinition.parameter.documentation [ string ]; # 0..1 Description of meaning/use fhir:OperationDefinition.parameter.type [ code ]; # 0..1 What type this parameter has fhir:OperationDefinition.parameter.searchType [ code ]; # 0..1 number | date | string | token | reference | composite | quantity | uri fhir:OperationDefinition.parameter.profile [ Reference(StructureDefinition) ]; # 0..1 Profile on the type fhir:OperationDefinition.parameter.binding [ # 0..1 ValueSet details if this is coded fhir:OperationDefinition.parameter.binding.strength [ code ]; # 1..1 required | extensible | preferred | example # OperationDefinition.parameter.binding.valueSet[x] : 1..1 Source of value set. One of these 2 fhir:OperationDefinition.parameter.binding.valueSetUri [ uri ] fhir:OperationDefinition.parameter.binding.valueSetReference [ Reference(ValueSet) ] ]; fhir:OperationDefinition.parameter.part [ See OperationDefinition.parameter ], ... ; # 0..* Parts of a nested Parameter ], ...; fhir:OperationDefinition.overload [ # 0..* For generating overloaded methods in code fhir:OperationDefinition.overload.parameterName [ string ], ... ; # 0..* Name of parameter to include in overload fhir:OperationDefinition.overload.comment [ string ]; # 0..1 Comments to go on overload ], ...; ]
Changes since DSTU2
OperationDefinition | |
OperationDefinition.status | Change value set from http://hl7.org/fhir/ValueSet/conformance-resource-status to http://hl7.org/fhir/ValueSet/publication-status |
OperationDefinition.experimental | Now marked as Modifier |
OperationDefinition.contact | Type changed from BackboneElement to ContactDetail |
OperationDefinition.description | Type changed from string to markdown |
OperationDefinition.useContext | added Element |
OperationDefinition.jurisdiction | added Element |
OperationDefinition.purpose | added Element |
OperationDefinition.comment | Renamed from notes to comment |
OperationDefinition.resource | added Element |
OperationDefinition.type |
Min Cardinality changed from 0 to 1 Max Cardinality changed from * to 1 Type changed from code to boolean Remove Binding http://hl7.org/fhir/ValueSet/resource-types (required) |
OperationDefinition.parameter.type | Change value set from http://hl7.org/fhir/ValueSet/operation-parameter-type to http://hl7.org/fhir/ValueSet/all-types |
OperationDefinition.parameter.searchType | added Element |
OperationDefinition.overload | added Element |
OperationDefinition.overload.parameterName | added Element |
OperationDefinition.overload.comment | added Element |
OperationDefinition.contact.name | deleted |
OperationDefinition.contact.telecom | deleted |
OperationDefinition.requirements | deleted |
See the Full Difference for further information
Alternate definitions: Master Definition (XML, JSON), XML Schema/Schematron (for ) + JSON Schema, ShEx (for Turtle), JSON-LD (for RDF as JSON-LD),
Path | Definition | Type | Reference |
---|---|---|---|
OperationDefinition.status | The lifecycle status of a Value Set or Concept Map. | Required | PublicationStatus |
OperationDefinition.kind | Whether an operation is a normal operation or a query. | Required | OperationKind |
OperationDefinition.jurisdiction | Countries and regions within which this artifact is targeted for use | Extensible | Jurisdiction ValueSet |
OperationDefinition.resource | One of the resource types defined as part of FHIR. | Required | http://hl7.org/fhir/valueset/resource-typesResourceType |
OperationDefinition.parameter.use | Whether an operation parameter is an input or an output parameter. | Required | OperationParameterUse |
OperationDefinition.parameter.type | Either an abstract type, a resource or a data type. | Required | http://hl7.org/fhir/valueset/all-typesFHIRAllTypes |
OperationDefinition.parameter.searchType | Data types allowed to be used for search parameters. | Required | SearchParamType |
OperationDefinition.parameter.binding.strength | Indication of the degree of conformance expectations associated with a binding. | Required | BindingStrength |
Base Operations (All resource types) | |
Validate a resource | [base]/[Resource]/$validate | [base]/[Resource]/[id]/$validate |
Access a list of profiles, tags, and security labels | [base]/$meta | [base]/[Resource]/$meta | [base]/[Resource]/[id]/$meta |
Add profiles, tags, and security labels to a resource | [base]/[Resource]/[id]/$meta-add |
Delete profiles, tags, and security labels for a resource | [base]/[Resource]/[id]/$meta-delete |
Operations Defined by Resource Types | |
Apply | [base]/ActivityDefinition/[id]/$apply |
Data Requirements | [base]/ActivityDefinition/[id]/$data-requirements |
Fetch a subset of the CapabilityStatement resource | [base]/CapabilityStatement/$subset | [base]/CapabilityStatement/[id]/$subset |
Test if a server implements a client's required operations | [base]/CapabilityStatement/$implements | [base]/CapabilityStatement/[id]/$implements |
Test if a server implements a client's required operations | [base]/CapabilityStatement/$conforms |
Concept Look Up & Decomposition | [base]/CodeSystem/$lookup |
Subsumption Testing | [base]/CodeSystem/$subsumes | [base]/CodeSystem/[id]/$subsumes |
Code Composition based on supplied properties | [base]/CodeSystem/$compose | [base]/CodeSystem/[id]/$compose |
Generate a Document | [base]/Composition/$document | [base]/Composition/[id]/$document |
Concept Translation | [base]/ConceptMap/$translate | [base]/ConceptMap/[id]/$translate |
Closure Table Maintenance | [base]/$closure |
Fetch Encounter Record | [base]/Encounter/[id]/$everything |
Data Requirements | [base]/$data-requirements | [base]/Library/[id]/$data-requirements |
Find a functional list | [base]/List/$find |
Evaluate Measure | [base]/Measure/$evaluate-measure | [base]/Measure/[id]/$evaluate-measure |
Data Requirements | [base]/Measure/[id]/$data-requirements |
Process Message | [base]/$process-message |
Observation Statistics | [base]/Observation/$stats |
Find patient matches using MPI based logic | [base]/Patient/$match |
Fetch Patient Record | [base]/Patient/$everything | [base]/Patient/[id]/$everything |
Place | [base]/PlanDefinition/[id]/$apply |
Data Requirements | [base]/PlanDefinition/[id]/$data-requirements |
Populate Questionnaire | [base]/Questionnaire/$populate | [base]/Questionnaire/[id]/$populate |
Generate HTML for Questionnaire | [base]/Questionnaire/$populatehtml | [base]/Questionnaire/[id]/$populatehtml |
Generate a link to a Questionnaire completion webpage | [base]/Questionnaire/$populatelink | [base]/Questionnaire/[id]/$populatelink |
Evaluate | [base]/ServiceDefinition/[id]/$evaluate |
Data Requirements | [base]/ServiceDefinition/[id]/$data-requirements |
Build Questionnaire | [base]/StructureDefinition/$questionnaire | [base]/StructureDefinition/[id]/$questionnaire |
Model Instance Transformation | [base]/StructureMap/$transform | [base]/StructureMap/[id]/$transform |
Reserve Task | [base]/Task/[id]/$reserve |
Start Task | [base]/Task/[id]/$start |
Finish Task | [base]/Task/[id]/$finish |
Fail Task | [base]/Task/[id]/$fail |
Release Task | [base]/Task/[id]/$release |
Suspend Task | [base]/Task/[id]/$suspend |
Resume Task | [base]/Task/[id]/$resume |
Cancel Task | [base]/Task/[id]/$cancel |
Stop Task | [base]/Task/[id]/$stop |
Set Task Input | [base]/Task/[id]/$set-input |
Set Task Output | [base]/Task/[id]/$set-output |
Value Set Expansion | [base]/ValueSet/$expand | [base]/ValueSet/[id]/$expand |
Value Set based Validation | [base]/ValueSet/$validate-code | [base]/ValueSet/[id]/$validate-code |
Operations Defined by Implementation Guides |
Operations are executed by POSTing to a URL that is defined by the operation definition. Named Queries are executed by performing a search with the value of the search parameter "_query" set to the name provided in the definition.
If the named query is to be performed over the RESTful API, all the parameters must be simple search parameters, so that they can be represented directly in the URL without tricky encoding issues. Named queries always return a bundle containing a set of resources, so all the out parameters must be resources, not data types etc.
There are two ways to pass resources to an operation - directly, or by reference. Since the two forms have very different behaviors and consequences, the definition of an Operation distinguishes between these two.
As an example, take the Questionnaire.$populate operation. This operation takes a questionnaire as a direct parameter. The type of the parameter is defined as 'Questionnaire'. In a parameters resource, it would be represented like this:
<parameter> <name value="questionnaire"/> <resource> <Questionnaire> <!-- Questionnaire contents --> </Questionnaire> </resource> </parameter>
or, in JSON:
"parameter": [ { "name": "questionnaire", "resource": { "resourceType": "Questionnaire", // Questionnaire contents } } ]
Other parameters are passed by reference. For example, populate takes a set of references to other resources that should be used to pre-populate the questionnaire. These are passed by reference, and the type of the parameter is 'Reference(Any)' - a reference to any kind of resource. In a parameters resource, it would be represented like this:
<parameter> <name value="content"/> <valueReference> <reference value="Patient/123"> </Questionnaire> </valueReference> </parameter>
or, in JSON:
"parameter": [ { "name": "questionnaire", "valueReference" : { "reference" : "Patient/123" } } ]
Some operations can take either form; in that case, two different parameters must be defined, one for a resource directly, and one for a reference.
It's possible for two different organizations to create different operation definitions that have the same name (or, perhaps more likely, to define equivalent operations that have the same name but incompatible approaches in their parameter lists).
It's also possible, though unlikely, that a server will be required to support both of these operations. Should this be the case, the server is able to do this by giving one of them a new name, and then referring to it by definition in the capability statement. To illustrate this, let's assume that two different organizations (orgA and orgB) both define an operation called "dothis", and the definitions are incompatible. OrgA publishes its operation definition at http://orga.com/fhir/dothis.xml, and OrgB publishes its operation at http://fhir.orgb.com/meta/OperationDefinition/dothis. The server is able to implement both. Its capability statement will say:
<CapabilityStatement xmlns="http://hl7.org/fhir"> <!-- snip --> <rest> <!-- snip --> <operation> <name value="dothis"/> <definition> <reference value="http://orga.com/fhir/dothis.xml"/> </definition> </operation> <operation> <name value="dothis2"/> <definition> <reference value="http://fhir.orgb.com/meta/OperationDefinition/dothis"/> </definition> </operation> <!-- snip --> </rest> <!-- snip --> </CapabilityStatement>
If a general purpose cross server client is looking for the implementation of the http://fhir.orgb.com/meta/OperationDefinition/dothis operation, and wants to be robust against this name clash problem, instead of simply executing the $dothis operation, it can look at the server's capability statement for the underlying definition URI, and then execute the name given in the capability statement.
A client can determine the compatibility of the server by iterating its capability statement and seeing whether any of the operations it declares to support source from the same definitions as those the client depends on, and whether the server supports the parameters it uses. A client that does this can report a useful error to the user rather than allowing mystifying operational errors to occur.
Note, however, that there are fundamental limitations to this approach because there are many aspects of these operations that aren't (and can't be) defined in a formal fashion. (For example, co-occurrence constraints amongst parameters.)
In the same sense, a 3rd party tool can examine the capability statements from a server and a client definition of an acceptable server and confirm whether those two system are would be unable to interoperate.
Finally, it is possible to generate user interface forms automatically from the operation definitions. The documentation in the form definition and the parameter documentation should be sufficiently useful to allow moderately technical users to guess at the correct content of the form. For this reason, highly technical documentation should go in OperationDefinition.notes.
Note also this is not expected to be a tool of use to typical healthcare end-users; such users will usually need more support than can be offered in a generated form.
Search parameters for this resource. The common parameters also apply. See Searching for more information about searching in REST, messaging, and services.
Name | Type | Description | Paths | In Common |
base | reference | Marks this as a profile of the base | OperationDefinition.base (OperationDefinition) | |
code | token | Name used to invoke the operation | OperationDefinition.code | |
date | date | The operation definition publication date | OperationDefinition.date | |
description | string | Text search against the description of the operation definition | OperationDefinition.description | |
instance | token | Invoke on an instance? | OperationDefinition.instance | |
jurisdiction | token | Intended jurisdiction for operation definition | OperationDefinition.jurisdiction | |
kind | token | operation | query | OperationDefinition.kind | |
name | string | Name of the operation definition | OperationDefinition.name | |
paramprofile | reference | Profile on the type | OperationDefinition.parameter.profile (StructureDefinition) | |
publisher | string | Name of the publisher of the operation definition | OperationDefinition.publisher | |
status | token | The current status of the operation definition | OperationDefinition.status | |
system | token | Invoke at the system level? | OperationDefinition.system | |
type | token | Invole at the type level? | OperationDefinition.type | |
url | uri | The uri that identifies the operation definition | OperationDefinition.url | |
version | token | The version identifier of the operation definition | OperationDefinition.version |