The $diff
operation can be used to generate a differential between two versions of a resource, or even two different resources of the same type.
Differentials generated by this operation are in FHIR Patch format.
In generated differentials, where a value has changed (i.e. a replace operation), an additional part value will be present on the given operation called previousValue
. This part shows the value as it was in the from version of the resource.
When the $diff operation is invoked at the instance level (meaning it is invoked on a specific resource ID), it will compare two versions of the given resource.
fromVersion=[versionId]
: (optional) If specified, compare using this version as the source. If not specified, the immediately previous version will be compared.includeMeta=true
: (optional) If specified, changes to Resource.meta will be included in the diff. This element is omitted by default.To invoke:
GET http://fhir.example.com/baseR4/Patient/123/$diff
The server will produce a response resembling the following:
{
"resourceType": "Parameters",
"parameter": [ {
"name": "operation",
"part": [ {
"name": "type",
"valueCode": "replace"
}, {
"name": "path",
"valueString": "Patient.name.family"
}, {
"name": "previousValue",
"valueId": "Smyth"
}, {
"name": "value",
"valueId": "SmithB"
} ]
} ]
}
When the $diff operation is invoked at the server level (meaning it is invoked against the server base URL), it will compare two arbitrary resources of any type.
from=[reference]
: Specifies the source of the comparison. The value must include a resource type and a resource ID, and can optionally include a version, e.g. Patient/123
or Patient/123/_history/2
.to=[reference]
: Specifies the target of the comparison. The value must include a resource type and a resource ID, and can optionally include a version, e.g. Patient/123
or Patient/123/_history/2
.includeMeta=true
: (optional) If specified, changes to Resource.meta will be included in the diff. This element is omitted by default.To invoke:
GET http://fhir.example.com/baseR4/$diff?from=Patient/1&to=Patient/2
The server will produce a response resembling the following:
{
"resourceType": "Parameters",
"parameter": [ {
"name": "operation",
"part": [ {
"name": "type",
"valueCode": "replace"
}, {
"name": "path",
"valueString": "Patient.id"
}, {
"name": "previousValue",
"valueId": "1"
}, {
"name": "value",
"valueId": "2"
} ]
} ]
}