FHIR Extensions Pack, published by HL7 International / FHIR Infrastructure. This guide is not an authorized publication; it is the continuous build for version 5.3.0-ballot-tc1 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/HL7/fhir-extensions/ and changes regularly. See the Directory of published versions
| Official URL: http://hl7.org/fhir/StructureDefinition/targetConstraint | Version: 5.3.0-ballot-tc1 | |||
| Standards status: Trial-use | Maturity Level: 2 | Responsible: HL7 International / Clinical Decision Support | Computable Name: TargetConstraint | |
Specifies a constraint that is enforced on instantiated (or target) resources. This extension can be applied to definitional resources (such as ActivityDefinition or Measure) and indicates that the constraint should be enforced on resources that are instantiated from the definition. For example, this extension can be used to define a constraint such as numerator count must be less than or equal to denominator count.
This extension allows constraints to be specified as part of definitional resources as an alternative to having to define a profile to enforce the constraint.
Context of Use
This extension may be used on the following element(s)
ActivityDefinition    
  
ActivityDefinition.participant    
  
ActivityDefinition.dosage    
  
Measure    
  
Measure.group    
  
Measure.group.population    
  
Measure.group.stratifier    
  
Measure.supplementalData    
  
PlanDefinition    
  
PlanDefinition.goal    
  
PlanDefinition.goal.target    
  
PlanDefinition.actor    
 (FHIR versions     
R5    
 and after)
  
PlanDefinition.action    
  
Questionnaire    
  
Questionnaire.item    
  Usage info
Usages:
You can also check for usages in the FHIR IG Statistics
Changes since version 5.2.0:
Description of Profiles, Differentials, Snapshots, and how the XML and JSON presentations work.
This structure is derived from Extension
Summary
Complex Extension: Specifies a constraint that is enforced on instantiated (or target) resources. This extension can be applied to definitional resources (such as ActivityDefinition or Measure) and indicates that the constraint should be enforced on resources that are instantiated from the definition. For example, this extension can be used to define a constraint such as numerator count must be less than or equal to denominator count.
Maturity: 2
This structure is derived from Extension
| Name | Flags | Card. | Type | Description & Constraints    Filter:   | 
|---|---|---|---|---|
|   Extension | 0..* | Extension | A constraint on the target resource | |
|    Slices for extension | Content/Rules for all slices | |||
|     extension:key | 1..1 | Extension | Unique identifier | |
|      extension | 0..0 | Extension | ||
|      url | 1..1 | uri | "key" | |
|      value[x] | 1..1 | id | Value of extension | |
|     extension:requirements | 0..1 | Extension | Why the constraint is defined | |
|      extension | 0..0 | Extension | ||
|      url | 1..1 | uri | "requirements" | |
|      value[x] | 1..1 | markdown | Value of extension | |
|     extension:severity | 1..1 | Extension | error | warning | |
|      extension | 0..0 | Extension | ||
|      url | 1..1 | uri | "severity" | |
|      value[x] | 1..1 | code | Value of extension Binding: ConstraintSeverity (required) | |
|     extension:expression | 1..1 | Extension | The invariant expression | |
|      extension | 0..0 | Extension | ||
|      url | 1..1 | uri | "expression" | |
|      value[x] | 1..1 | Expression | Value of extension | |
|     extension:human | 1..1 | Extension | Human-readable rule | |
|      extension | 0..0 | Extension | ||
|      url | 1..1 | uri | "human" | |
|      value[x] | 1..1 | string | Value of extension | |
|     extension:location | 0..* | Extension | Relative path to elements | |
|      extension | 0..0 | Extension | ||
|      url | 1..1 | uri | "location" | |
|      value[x] | 1..1 | string | Value of extension | |
|    url | 1..1 | uri | "http://hl7.org/fhir/StructureDefinition/targetConstraint" | |
|    value[x] | 0..0 | Value of extension | ||
|  Documentation for this format | ||||
| Name | Flags | Card. | Type | Description & Constraints    Filter:   | 
|---|---|---|---|---|
|   Extension | 0..* | Extension | A constraint on the target resource | |
|    id | 0..1 | id | Unique id for inter-element referencing | |
|    Slices for extension | 4..* | Extension | Additional content defined by implementations Slice: Unordered, Open by value:url | |
|     extension:key | 1..1 | Extension | Unique identifier | |
|      id | 0..1 | id | Unique id for inter-element referencing | |
|      extension | 0..0 | Extension Slice: Unordered, Open by value:url | ||
|      url | 1..1 | uri | "key" | |
|      value[x] | 1..1 | id | Value of extension | |
|     extension:requirements | 0..1 | Extension | Why the constraint is defined | |
|      id | 0..1 | id | Unique id for inter-element referencing | |
|      extension | 0..0 | Extension Slice: Unordered, Open by value:url | ||
|      url | 1..1 | uri | "requirements" | |
|      value[x] | 1..1 | markdown | Value of extension | |
|     extension:severity | 1..1 | Extension | error | warning | |
|      id | 0..1 | id | Unique id for inter-element referencing | |
|      extension | 0..0 | Extension Slice: Unordered, Open by value:url | ||
|      url | 1..1 | uri | "severity" | |
|      value[x] | 1..1 | code | Value of extension Binding: ConstraintSeverity (required) | |
|     extension:expression | 1..1 | Extension | The invariant expression | |
|      id | 0..1 | id | Unique id for inter-element referencing | |
|      extension | 0..0 | Extension Slice: Unordered, Open by value:url | ||
|      url | 1..1 | uri | "expression" | |
|      value[x] | 1..1 | Expression | Value of extension | |
|     extension:human | 1..1 | Extension | Human-readable rule | |
|      id | 0..1 | id | Unique id for inter-element referencing | |
|      extension | 0..0 | Extension Slice: Unordered, Open by value:url | ||
|      url | 1..1 | uri | "human" | |
|      value[x] | 1..1 | string | Value of extension | |
|     extension:location | 0..* | Extension | Relative path to elements | |
|      id | 0..1 | id | Unique id for inter-element referencing | |
|      extension | 0..0 | Extension Slice: Unordered, Open by value:url | ||
|      url | 1..1 | uri | "location" | |
|      value[x] | 1..1 | string | Value of extension | |
|    url | 1..1 | uri | "http://hl7.org/fhir/StructureDefinition/targetConstraint" | |
|  Documentation for this format | ||||
This structure is derived from Extension
Summary
Complex Extension: Specifies a constraint that is enforced on instantiated (or target) resources. This extension can be applied to definitional resources (such as ActivityDefinition or Measure) and indicates that the constraint should be enforced on resources that are instantiated from the definition. For example, this extension can be used to define a constraint such as numerator count must be less than or equal to denominator count.
Maturity: 2
Differential View
This structure is derived from Extension
| Name | Flags | Card. | Type | Description & Constraints    Filter:   | 
|---|---|---|---|---|
|   Extension | 0..* | Extension | A constraint on the target resource | |
|    Slices for extension | Content/Rules for all slices | |||
|     extension:key | 1..1 | Extension | Unique identifier | |
|      extension | 0..0 | Extension | ||
|      url | 1..1 | uri | "key" | |
|      value[x] | 1..1 | id | Value of extension | |
|     extension:requirements | 0..1 | Extension | Why the constraint is defined | |
|      extension | 0..0 | Extension | ||
|      url | 1..1 | uri | "requirements" | |
|      value[x] | 1..1 | markdown | Value of extension | |
|     extension:severity | 1..1 | Extension | error | warning | |
|      extension | 0..0 | Extension | ||
|      url | 1..1 | uri | "severity" | |
|      value[x] | 1..1 | code | Value of extension Binding: ConstraintSeverity (required) | |
|     extension:expression | 1..1 | Extension | The invariant expression | |
|      extension | 0..0 | Extension | ||
|      url | 1..1 | uri | "expression" | |
|      value[x] | 1..1 | Expression | Value of extension | |
|     extension:human | 1..1 | Extension | Human-readable rule | |
|      extension | 0..0 | Extension | ||
|      url | 1..1 | uri | "human" | |
|      value[x] | 1..1 | string | Value of extension | |
|     extension:location | 0..* | Extension | Relative path to elements | |
|      extension | 0..0 | Extension | ||
|      url | 1..1 | uri | "location" | |
|      value[x] | 1..1 | string | Value of extension | |
|    url | 1..1 | uri | "http://hl7.org/fhir/StructureDefinition/targetConstraint" | |
|    value[x] | 0..0 | Value of extension | ||
|  Documentation for this format | ||||
Snapshot View
| Name | Flags | Card. | Type | Description & Constraints    Filter:   | 
|---|---|---|---|---|
|   Extension | 0..* | Extension | A constraint on the target resource | |
|    id | 0..1 | id | Unique id for inter-element referencing | |
|    Slices for extension | 4..* | Extension | Additional content defined by implementations Slice: Unordered, Open by value:url | |
|     extension:key | 1..1 | Extension | Unique identifier | |
|      id | 0..1 | id | Unique id for inter-element referencing | |
|      extension | 0..0 | Extension Slice: Unordered, Open by value:url | ||
|      url | 1..1 | uri | "key" | |
|      value[x] | 1..1 | id | Value of extension | |
|     extension:requirements | 0..1 | Extension | Why the constraint is defined | |
|      id | 0..1 | id | Unique id for inter-element referencing | |
|      extension | 0..0 | Extension Slice: Unordered, Open by value:url | ||
|      url | 1..1 | uri | "requirements" | |
|      value[x] | 1..1 | markdown | Value of extension | |
|     extension:severity | 1..1 | Extension | error | warning | |
|      id | 0..1 | id | Unique id for inter-element referencing | |
|      extension | 0..0 | Extension Slice: Unordered, Open by value:url | ||
|      url | 1..1 | uri | "severity" | |
|      value[x] | 1..1 | code | Value of extension Binding: ConstraintSeverity (required) | |
|     extension:expression | 1..1 | Extension | The invariant expression | |
|      id | 0..1 | id | Unique id for inter-element referencing | |
|      extension | 0..0 | Extension Slice: Unordered, Open by value:url | ||
|      url | 1..1 | uri | "expression" | |
|      value[x] | 1..1 | Expression | Value of extension | |
|     extension:human | 1..1 | Extension | Human-readable rule | |
|      id | 0..1 | id | Unique id for inter-element referencing | |
|      extension | 0..0 | Extension Slice: Unordered, Open by value:url | ||
|      url | 1..1 | uri | "human" | |
|      value[x] | 1..1 | string | Value of extension | |
|     extension:location | 0..* | Extension | Relative path to elements | |
|      id | 0..1 | id | Unique id for inter-element referencing | |
|      extension | 0..0 | Extension Slice: Unordered, Open by value:url | ||
|      url | 1..1 | uri | "location" | |
|      value[x] | 1..1 | string | Value of extension | |
|    url | 1..1 | uri | "http://hl7.org/fhir/StructureDefinition/targetConstraint" | |
|  Documentation for this format | ||||
Other representations of profile: CSV, Excel, Schematron
| Path | Status | Usage | ValueSet | Version | Source | 
| Extension.extension:severity.value[x] | Base | required | ConstraintSeverity | 📦5.0.0 | FHIR Std. | 
| Id | Grade | Path(s) | Description | Expression | 
| ele-1 | error | **ALL** elements | All FHIR elements must have a @value or children | hasValue() or (children().count() > id.count()) | 
| ext-1 | error | **ALL** extensions | Must have either extensions or value[x], not both | extension.exists() != value.exists() | 
The extension is unchanged in R4B
The extension is unchanged in R4
The extension is represented a little differently in R3:
| Name | Flags | Card. | Type | Description & Constraints
          
Filter:     | ||||
|---|---|---|---|---|---|---|---|---|
|    Extension | 0..* | Extension | A constraint on the target resource | |||||
|      Slices for extension | Content/Rules for all slices | |||||||
|        extension:key | 1..1 | Extension | Unique identifier | |||||
|          extension | 0 .. 0 | Extension | ||||||
|          url | 1 .. 1 | uri | "key" | |||||
|          value[x] | 1.. 1 | id | Value of extension | |||||
|        extension:requirements | 0..1 | Extension | Why the constraint is defined | |||||
|          extension | 0 .. 0 | Extension | ||||||
|          url | 1 .. 1 | uri | "requirements" | |||||
|          value[x] | 1.. 1 | markdown | Value of extension | |||||
|        extension:severity | 1..1 | Extension | error | warning | |||||
|          extension | 0 .. 0 | Extension | ||||||
|          url | 1 .. 1 | uri | "severity" | |||||
|          value[x] | 1.. 1 | code | Value of extension Binding: ConstraintSeverity ( required ) | |||||
|        extension:expression | 1..1 | Extension | The invariant expression | |||||
|          Slices for extension | 0 ..* | Extension | Extension Slice: Unordered, Open by value:url | |||||
|            extension:_datatype | 1..1 | (Complex) | DataType name 'Expression' from R5 URL: http://hl7.org/fhir/StructureDefinition/_datatype | |||||
|              value[x] | 1.. 1 | string | Value of extension Fixed Value: Expression | |||||
|            extension:description | 0..1 | Extension | Natural language description of the condition | |||||
|              extension | 0 .. 0 | Extension | ||||||
|              url | 1 .. 1 | uri | "description" | |||||
|              value[x] | 1.. 1 | string | Value of extension | |||||
|            extension:name | 0..1 | Extension | Short name assigned to expression for reuse | |||||
|              extension | 0 .. 0 | Extension | ||||||
|              url | 1 .. 1 | uri | "name" | |||||
|              value[x] | 1.. 1 | code | Value of extension | |||||
|            extension:language | 0..1 | Extension | text/cql | text/fhirpath | application/x-fhir-query | etc. | |||||
|              extension | 0 .. 0 | Extension | ||||||
|              url | 1 .. 1 | uri | "language" | |||||
|              value[x] | 1.. 1 | code | Value of extension Binding: ExpressionLanguage ( extensible ) : The media type of the expression language. 
 | |||||
|            extension:expression | 0..1 | Extension | Expression in specified language | |||||
|              extension | 0 .. 0 | Extension | ||||||
|              url | 1 .. 1 | uri | "expression" | |||||
|              value[x] | 1.. 1 | string | Value of extension | |||||
|            extension:reference | 0..1 | Extension | Where the expression is found | |||||
|              extension | 0 .. 0 | Extension | ||||||
|              url | 1 .. 1 | uri | "reference" | |||||
|              value[x] | 1.. 1 | uri | Value of extension | |||||
|          url | 1 .. 1 | uri | "expression" | |||||
|          value[x] | 0 .. 0 | Value of extension | ||||||
|        extension:human | 1..1 | Extension | Human-readable rule | |||||
|          extension | 0 .. 0 | Extension | ||||||
|          url | 1 .. 1 | uri | "human" | |||||
|          value[x] | 1.. 1 | string | Value of extension | |||||
|        extension:location | 0..* | Extension | Relative path to elements | |||||
|          extension | 0 .. 0 | Extension | ||||||
|          url | 1 .. 1 | uri | "location" | |||||
|          value[x] | 1.. 1 | string | Value of extension | |||||
|      url | 1 .. 1 | uri | "http://hl7.org/fhir/StructureDefinition/targetConstraint" | |||||
|      value[x] | 0 .. 0 | Value of extension | ||||||
|  Documentation for this format | ||||||||
When reporting the results of this custom validation rule via an OperationOutcome (issue), the following property mappings should be considered:
| Issue property | Constraint property | Comments | 
|---|---|---|
| severity | severity | |
| code | 'Invariant' | Fixed code value from issue-type CodeSystem | 
| details.coding.system | Questionnaire.url | Canonical URL of Questionnaire that contains this constraint | 
| details.coding.code | key | |
| details.coding.display | human | This is the human readable error message | 
| details.text | human | This value can also be displayed to a user (instead of the coding.display above) and is often useful to also prefix the {}human{} value with the display text from the item(s) | 
| diagnostics | expression | The validation fhirpath expression (helps diagnose issues with validation rules) | 
| expression | evaluate location | The location expression should be evaluated on the QuestionnaireResponse (or item) to provide the location(s) of the error to permit a User Interface to show the error associated with the specific field(s) that caused the error/warning | 
The location component is a FHIRPath expression that should be executed on the target resource (or item that the constraint is associated with) to locate the path of the property(s) that should be flagged to the user when the constraint is violated.
When the location property is missing, it is assumed that the path of the answer being validated should be reported in the issue, and the path to the item in the target resource being validated should be used in the issue.expression field
e.g. A Questionnaire that has a group (g1) with 2 items (acc-date and review-date).
A validation rule will be added on the g1 item:
"url":"http://example.org/Questionnaire/abc",
...
"linkId":"q1",
"text": "Question 1",
{ 
    "key": "seq-dt", 
    "severity": "error", 
    "expression" : "item.where(linkId='acc-date').answer.first().trace('acc-date') < %resource.authored.trace('authored')", 
    "human": "The accident date must be before the completion date of the form", 
    "location": "item.where(linkId='acc-date').answer.first()" 
}
Example issue created from the above invariant example
{
  "severity": "error",
  "code": "Invariant",
  "details": {
    "coding": [{
      "system": "http://example.org/Questionnaire/abc", 
      "code" : "seq-dt", 
      "display": "The accident date must be before the review date"
    }],
    "text":"Question 1: The accident date must be before the completion date"
  },
  "diagnostics": "item.where(linkId='acc-date').answer.first().trace('acc-date') <  %resource.authored.trace('authored') acc-date: 2024-03-17; authored: 2024-02-01",
  "expression": ["QuestionnaireResponse.item[0].item[1].answer[0].value[0]"]
}
(none found)