This page is part of the FHIR Specification (v3.3.0: R4 Ballot 2). 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: 5 | Normative | Compartments: Not linked to any defined compartments |
Normative Candidate Note: This page is candidate normative content for R4 in the Infrastructure Package. Once normative, it will lose it's Maturity Level, and breaking changes will no longer be made.
A collection of error, warning or information messages that result from a system action.
Operation outcomes are sets of error, warning and information messages that provide detailed information about the outcome of an attempted system operation. They are provided as a direct system response or component of one and provide information about the outcome of the operation.
The OperationOutcome resource is used in the following circumstances:
This resource is referenced by GuidanceResponse and MessageHeader. The reference from GuidanceResponse indicates that there is an additional use context that needs to be addressed in the scope.
This resource is not used for reporting clinical or workflow issues associated with a proposed or ongoing action; these would be handled using DetectedIssue or other resources. The resource is not designed to be persisted or referenced from other parts of the workflow.
It is possible to have both OperationOutcome
and DetectedIssue together, where the OperationOutcome might
indicate that a requested action was rejected due to a clinical issue and the DetectedIssue provides the details of the issue.
This resource is referenced by GuidanceResponse and MessageHeader
Structure
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
OperationOutcome | ΣN | DomainResource | Information about the success/failure of an action Elements defined in Ancestors: id, meta, implicitRules, language, text, contained, extension, modifierExtension | |
issue | Σ | 1..* | BackboneElement | A single issue associated with the action |
severity | ?!Σ | 1..1 | code | fatal | error | warning | information IssueSeverity (Required) |
code | Σ | 1..1 | code | Error or warning code IssueType (Required) |
details | Σ | 0..1 | CodeableConcept | Additional details about the error Operation Outcome Codes (Example) |
diagnostics | Σ | 0..1 | string | Additional diagnostic information about the issue |
location | Σ | 0..* | string | Path of element(s) related to issue |
expression | Σ | 0..* | string | FHIRPath of element(s) related to issue |
Documentation for this format |
UML Diagram (Legend)
XML Template
<OperationOutcome xmlns="http://hl7.org/fhir"> <!-- from Resource: id, meta, implicitRules, and language --> <!-- from DomainResource: text, contained, extension, and modifierExtension --> <issue> <!-- 1..* A single issue associated with the action --> <severity value="[code]"/><!-- 1..1 fatal | error | warning | information --> <code value="[code]"/><!-- 1..1 Error or warning code --> <details><!-- 0..1 CodeableConcept Additional details about the error --></details> <diagnostics value="[string]"/><!-- 0..1 Additional diagnostic information about the issue --> <location value="[string]"/><!-- 0..* Path of element(s) related to issue --> <expression value="[string]"/><!-- 0..* FHIRPath of element(s) related to issue --> </issue> </OperationOutcome>
JSON Template
{ "resourceType" : "OperationOutcome", // from Resource: id, meta, implicitRules, and language // from DomainResource: text, contained, extension, and modifierExtension "issue" : [{ // R! A single issue associated with the action "severity" : "<code>", // R! fatal | error | warning | information "code" : "<code>", // R! Error or warning code "details" : { CodeableConcept }, // Additional details about the error "diagnostics" : "<string>", // Additional diagnostic information about the issue "location" : ["<string>"], // Path of element(s) related to issue "expression" : ["<string>"] // FHIRPath of element(s) related to issue }] }
Turtle Template
@prefix fhir: <http://hl7.org/fhir/> . [ a fhir:OperationOutcome; 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:OperationOutcome.issue [ # 1..* A single issue associated with the action fhir:OperationOutcome.issue.severity [ code ]; # 1..1 fatal | error | warning | information fhir:OperationOutcome.issue.code [ code ]; # 1..1 Error or warning code fhir:OperationOutcome.issue.details [ CodeableConcept ]; # 0..1 Additional details about the error fhir:OperationOutcome.issue.diagnostics [ string ]; # 0..1 Additional diagnostic information about the issue fhir:OperationOutcome.issue.location [ string ], ... ; # 0..* Path of element(s) related to issue fhir:OperationOutcome.issue.expression [ string ], ... ; # 0..* FHIRPath of element(s) related to issue ], ...; ]
Changes since R3
OperationOutcome |
See the Full Difference for further information
This analysis is available as XML or JSON.
See R2 <--> R3 Conversion Maps (status = 6 tests that all execute ok. All tests pass round-trip testing and all r3 resources are valid.). Note: these have note yet been updated to be R3 to R4
Structure
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
OperationOutcome | ΣN | DomainResource | Information about the success/failure of an action Elements defined in Ancestors: id, meta, implicitRules, language, text, contained, extension, modifierExtension | |
issue | Σ | 1..* | BackboneElement | A single issue associated with the action |
severity | ?!Σ | 1..1 | code | fatal | error | warning | information IssueSeverity (Required) |
code | Σ | 1..1 | code | Error or warning code IssueType (Required) |
details | Σ | 0..1 | CodeableConcept | Additional details about the error Operation Outcome Codes (Example) |
diagnostics | Σ | 0..1 | string | Additional diagnostic information about the issue |
location | Σ | 0..* | string | Path of element(s) related to issue |
expression | Σ | 0..* | string | FHIRPath of element(s) related to issue |
Documentation for this format |
XML Template
<OperationOutcome xmlns="http://hl7.org/fhir"> <!-- from Resource: id, meta, implicitRules, and language --> <!-- from DomainResource: text, contained, extension, and modifierExtension --> <issue> <!-- 1..* A single issue associated with the action --> <severity value="[code]"/><!-- 1..1 fatal | error | warning | information --> <code value="[code]"/><!-- 1..1 Error or warning code --> <details><!-- 0..1 CodeableConcept Additional details about the error --></details> <diagnostics value="[string]"/><!-- 0..1 Additional diagnostic information about the issue --> <location value="[string]"/><!-- 0..* Path of element(s) related to issue --> <expression value="[string]"/><!-- 0..* FHIRPath of element(s) related to issue --> </issue> </OperationOutcome>
JSON Template
{ "resourceType" : "OperationOutcome", // from Resource: id, meta, implicitRules, and language // from DomainResource: text, contained, extension, and modifierExtension "issue" : [{ // R! A single issue associated with the action "severity" : "<code>", // R! fatal | error | warning | information "code" : "<code>", // R! Error or warning code "details" : { CodeableConcept }, // Additional details about the error "diagnostics" : "<string>", // Additional diagnostic information about the issue "location" : ["<string>"], // Path of element(s) related to issue "expression" : ["<string>"] // FHIRPath of element(s) related to issue }] }
Turtle Template
@prefix fhir: <http://hl7.org/fhir/> . [ a fhir:OperationOutcome; 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:OperationOutcome.issue [ # 1..* A single issue associated with the action fhir:OperationOutcome.issue.severity [ code ]; # 1..1 fatal | error | warning | information fhir:OperationOutcome.issue.code [ code ]; # 1..1 Error or warning code fhir:OperationOutcome.issue.details [ CodeableConcept ]; # 0..1 Additional details about the error fhir:OperationOutcome.issue.diagnostics [ string ]; # 0..1 Additional diagnostic information about the issue fhir:OperationOutcome.issue.location [ string ], ... ; # 0..* Path of element(s) related to issue fhir:OperationOutcome.issue.expression [ string ], ... ; # 0..* FHIRPath of element(s) related to issue ], ...; ]
Changes since DSTU2
OperationOutcome |
See the Full Difference for further information
This analysis is available as XML or JSON.
See R2 <--> R3 Conversion Maps (status = 6 tests that all execute ok. All tests pass round-trip testing and all r3 resources are valid.). Note: these have note yet been updated to be R3 to R4
Alternate definitions: Master Definition XML + JSON, XML Schema/Schematron + JSON Schema, ShEx (for Turtle) + see the extensions & the dependency analysis
Path | Definition | Type | Reference |
---|---|---|---|
OperationOutcome.issue.severity | How the issue affects the success of the action. | Required | IssueSeverity |
OperationOutcome.issue.code | A code that describes the type of issue. | Required | IssueType |
OperationOutcome.issue.details | A code that provides details as the exact issue. | Example | Operation Outcome Codes |
On the RESTful interface, operation outcome resources are only relevant when a level of computable detail is required that is more granular than that provided by the HTTP response codes. This granularity could include:
Operation outcomes returned SHOULD be in alignment with the HTTP response code. For example, if the HTTP code indicates a failure (300+), at least one of the issues should have a severity of "error", indicating the reason for the failure.
Each issue in an operation outcome may have a location reported. Systems that create operation outcomes SHOULD populate the location of an error. A correctly populated location can allow client systems to:
In order to support these kinds of usages, these applications need to use the location element consistently. Applications can use the location element to refer to a location inside a resource, or some location in the HTTP request (when appropriate).
While resources may be represented in XML, JSON, or other forms, error locations are always reported using a simplified XPath notation:
<location value="/f:Patient/f:identifier"/>
The XPath must use the FHIR standard XPath prefixes f: and h: for the FHIR and XHTML namespaces respectively.
The XPath here can be used to automatically find the relevant XML element in a resource if the resource is represented in XML. Because resources are often represented in JSON, and because applications will often process the XPath directly (e.g. to determine the relevant widget), the XPath statement must be simple. Specifically, the XPath SHALL only contain element names and repetition indicators. So this is legal:
<location value="/f:Patient/f:identifier[2]/f:label"/>
but this is not:
<location value="/f:Patient/f:identifier[f:system/@value='http://example.com/mrn']/f:label"/>
Because the Xpath is required to be simple, it can be converted to JsonPointer by dropping the namespace prefixes, and correcting for array offsets. The XPaths above have these equivalent JsonPointer representations:
Patient/identifier Patient/identifier/2/label
Note that correcting for array offsets may require knowledge of which elements are Arrays in JSON. It is also possible to convert the XPath statements to JsonPath, though there is no single standard for JsonPath.
Servers may also need to report errors in the HTTP headers - especially query parameters when processing searches. Errors are reported using a case sensitive location that has two parts, a fixed "http" and the header or query parameter name separated by a ".". Some examples:
Location | Description |
http.name:exact | A reference to the search parameter "name" with the modifier ":exact" |
http.Authorization | A reference to the Authorization header - perhaps to indicate that it is missing, and some form of authentication is required. |