This page is part of the FHIR Specification (v3.5.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
FHIR Infrastructure Work Group | Maturity Level: 2 | Ballot Status: Trial Use |
This page documents how the Parameters resource is used to define a set of FHIRPath based patch operations.
This table documents the FHIRPath operations that may be used to specify changes to a resource:
| Type | Path | Name | Value | Index | source | destination | Details |
| add | Path at which to add the content | Name of the property to add | Data type to add at nominated place | The content will be appended to the element identified in the path, using the name specified | |||
| insert | Path of the collection in which to insert the content | value (Data type) to add at nominated place | index at which to insert | The content will be inserted into the nominated list at the index specified (0 based). The index must be equal or less than the number of elements in the list | |||
| delete | Path of the element to delete | Only a single element can be deleted | |||||
| replace | Path of the element to replace | value (Data type) to replace it with | |||||
| move | Path of the collection in which to move the content | list index to move from | list index to move to | Move an element within a single list |
There are a few base rules that apply for all operations:
Observation.subject.resolve().identifier.
Servers SHALL NOT allow patch operations to alter other resources than the nominated target, and SHOULD return an error if the patch operation triesThe FHIRPath patch operations are encoded in a Parameters resource as follows:
| Parameter | Type |
| Type | code |
| Path | string |
| Name | string |
| Value | * |
| index | integer |
| source | integer |
| destination | integer |
Here is an example of adding an element:
<Parameters xmlns="http://hl7.org/fhir">
<parameter>
<name value="operation"/>
<part>
<name value="type"/>
<valueCode value="add"/>
</part>
<part>
<name value="path"/>
<valueString value="Patient"/>
</part>
<part>
<name value="name"/>
<valueString value="birthDate"/>
</part>
<part>
<name value="value"/>
<valueDate value="1930-01-01"/>
</part>
</parameter>
</Parameters>
Only some named data types (see the list) are allowed to be used directly in parameters. In order to add or insert other kinds of types - including anonymous elements (e.g. Observation.component, Timing.repeat), the content is defined by defining the name as described above, and instead of providing a value, a set of parts that are values are provided. Here is an example:
<Parameters xmlns="http://hl7.org/fhir">
<parameter>
<name value="operation"/>
<part>
<name value="type"/>
<valueCode value="add"/>
</part>
<part>
<name value="path"/>
<valueString value="Patient"/>
</part>
<part>
<name value="name"/>
<valueString value="contact"/>
</part>
<part>
<name value="value"/>
<part>
<name value="name"/>
<valueHumanName>
<text value="a name"/>
</valueHumanName>
</part>
</part>
</parameter>
</Parameters>
This pattern repeats as deep as necessary.
There is a set of test cases for implementers as part of the Test Case Downloads.