This page is part of the FHIR Specification (v1.2.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
This resource has 4 operations associated with it:
$validate | Validate a resource |
$meta | Access a list of profiles, tags, and security labels |
$meta-add | Add profiles, tags, and security labels to a resource |
$meta-delete | Delete profiles, tags, and security labels for a resource |
For more information about operations, including how they are invoked, see Operations.
The validate operation checks whether the attached content would be acceptable either generally, as a create, an update or as a delete to an existing resource. The action the server takes depends on the mode parameter:
Modes update and delete can only be used when the operation is invoked at the resource instance level. The return from this operation is an OperationOutcome
Formal Definition (as a OperationDefinition).
URL: [base]/Resource/$validate
URL: [base]/Resource/[id]/$validate
In Parameters: | |||||
Name | Cardinality | Type | Binding | Profile | Documentation |
resource | 0..1 | Resource | Must be present unless the mode is "delete" | ||
mode | 0..1 | code | ResourceValidationMode (Required) | Default is 'no action'; (e.g. general validation) | |
profile | 0..1 | uri | If this is nominated, then the resource is validated against this specific profile. If a profile is nominated, and the server cannot validate against the nominated profile, it SHALL return an error | ||
Out Parameters: | |||||
Name | Cardinality | Type | Binding | Profile | Documentation |
return | 1..1 | OperationOutcome | If the operation outcome does not list any errors, and a mode was specified, then this is an indication that the operation would be expected to succeed (excepting for transactional integrity issues, see below) Note: as this the only out parameter, it is a resource, and it has the name 'return', the result of this operation is returned directly as a resource |
This operation may be used during design and development to validate application design. It can also be used at run-time. One possible use might be that a client asks the server whether a proposed update is valid as the user is editing a dialog and displays an updated error to the user. The operation can be used as part of a light-weight two phase commit protocol but there is no expectation that the server will hold the content of the resource after this operation is used, or that the server guarantees to successfully perform an actual create, update or delete after the validation operation completes.
Validate a Patient against the DAF patient profile using POST directly. (Request):
POST /open/Patient/$validate?profile=http://hl7.org/fhir/StructureDefinition/daf-patient [other headers] <?xml version="1.0" encoding="UTF-8"?> <Patient xmlns="http://hl7.org/fhir"> <id value="us01"/> <text> <status value="generated"/> <div xmlns="http://www.w3.org/1999/xhtml"> <table> <tbody> <tr> <td>Name</td> <td>Peter James <b>Chalmers</b> ("Jim") </td> </tr> <tr> <td>Address</td> <td>534 Erewhon, Pleasantville, Orange County, 3999</td> </tr> <tr> <td>Contacts</td> <td>Home: unknown. Work: (03) 5555 6473</td> </tr> <tr> <td>Id</td> <td>MRN: 12345 (Acme Healthcare)</td> </tr> </tbody> </table> </div> </text> <extension url="http://hl7.org/fhir/StructureDefinition/us-core-race"> <valueCodeableConcept> <coding> <system value="http://hl7.org/fhir/v3/Race"/> <code value="1096-7"/> </coding> </valueCodeableConcept> </extension> <extension url="http://hl7.org/fhir/StructureDefinition/us-core-ethnicity"> <valueCodeableConcept> <coding> <system value="http://hl7.org/fhir/v3/Ethnicity"/> <code value="2162-6"/> </coding> </valueCodeableConcept> </extension> <active value="true"/> <!-- Peter James Chalmers, but called "Jim" --> <name> <use value="official"/> <family value="Chalmers"/> <given value="Peter"/> <given value="James"/> </name> <telecom> <system value="phone"/> <value value="(03) 5555 6473"/> <use value="work"/> </telecom> <telecom> <extension url="http://hl7.org/fhir/StructureDefinition/us-core-direct"> <valueBoolean value="true"/> </extension> <system value="email"/> <value value="person@example.org"/> <use value="work"/> </telecom> <address> <extension url="http://hl7.org/fhir/StructureDefinition/us-core-county"> <valueString value="Orange County"/> </extension> <use value="home"/> <line value="534 Erewhon St"/> <city value="PleasantVille"/> <state value="Vic"/> <postalCode value="3999"/> </address> </Patient>
Validate a proposed patient update - and for this example, using the Parameters syntax (Request):
POST /open/Patient/example/$validate [other headers] <Parameters xmlns="http://hl7.org/fhir"> <parameter> <name value="mode"/> <valueCode value="update"/> <parameter> <parameter> <name value="mode"/> <resource> <?xml version="1.0" encoding="UTF-8"?> <Patient xmlns="http://hl7.org/fhir"> <id value="example"/> <text> <status value="generated"/> <div xmlns="http://www.w3.org/1999/xhtml"> <table> <tbody> <tr> <td>Name</td> <td>Peter James <b>Chalmers</b> ("Jim") </td> </tr> <tr> <td>Address</td> <td>534 Erewhon, Pleasantville, Vic, 3999</td> </tr> <tr> <td>Contacts</td> <td>Home: unknown. Work: (03) 5555 6473</td> </tr> <tr> <td>Id</td> <td>MRN: 12345 (Acme Healthcare)</td> </tr> </tbody> </table> </div> </text> <!-- MRN assigned by ACME healthcare on 6-May 2001 --> <identifier> <use value="usual"/> <type> <coding> <system value="http://hl7.org/fhir/v2/0203"/> <code value="MR"/> </coding> </type> <system value="urn:oid:1.2.36.146.595.217.0.1"/> <value value="12345"/> <period> <start value="2001-05-06"/> </period> <assigner> <display value="Acme Healthcare"/> </assigner> </identifier> <active value="true"/> <!-- Peter James Chalmers, but called "Jim" --> <name> <use value="official"/> <family value="Chalmers"/> <given value="Peter"/> <given value="James"/> </name> <name> <use value="usual"/> <given value="Jim"/> </name> <telecom> <use value="home"/> <!-- home communication details aren't known --> </telecom> <telecom> <system value="phone"/> <value value="(03) 5555 6473"/> <use value="work"/> </telecom> <!-- use FHIR code system for male / female --> <gender value="male"/> <birthDate value="1974-12-25"> <extension url="http://hl7.org/fhir/StructureDefinition/patient-birthTime"> <valueDateTime value="1974-12-25T14:35:45-05:00"/> </extension> </birthDate> <deceasedBoolean value="false"/> <address> <use value="home"/> <type value="both"/> <line value="534 Erewhon St"/> <city value="PleasantVille"/> <district value="Rainbow"/> <state value="Vic"/> <postalCode value="3999"/> <period> <start value="1974-12-25"/> </period> </address> <contact> <relationship> <coding> <system value="http://hl7.org/fhir/patient-contact-relationship"/> <code value="partner"/> </coding> </relationship> <name> <family value="du"> <!-- the "du" part is a family name prefix (VV in iso 21090) --> <extension url="http://hl7.org/fhir/StructureDefinition/iso21090-EN-qualifier"> <valueCode value="VV"/> </extension> </family> <family value="Marché"/> <given value="Bénédicte"/> </name> <telecom> <system value="phone"/> <value value="+33 (237) 998327"/> </telecom> <gender value="female"/> <period> <!-- The contact relationship started in 2012 --> <start value="2012"/> </period> </contact> <managingOrganization> <reference value="Organization/1"/> </managingOrganization> </Patient> </resource> <parameter> </Parameters>
Returned when the resource is valid (Response):
HTTP/1.1 200 OK [other headers] <?xml version="1.0" encoding="UTF-8"?> <OperationOutcome xmlns="http://hl7.org/fhir"> <id value="allok"/> <text> <status value="additional"/> <div xmlns="http://www.w3.org/1999/xhtml"> <p>All OK</p> </div> </text> <issue> <severity value="information"/> <code value="informational"/> <details> <text value="All OK"/> </details> </issue> </OperationOutcome>
Returned when the resource is not valid (Response):
HTTP/1.1 400 Bad Request [other headers] <?xml version="1.0" encoding="UTF-8"?> <OperationOutcome xmlns="http://hl7.org/fhir"> <id value="validationfail"/> <text> <status value="generated"/> <div xmlns="http://www.w3.org/1999/xhtml"> <p>Error parsing resource XML (Unknown Content "label" @ /Patient/identifier/label)</p> </div> </text> <issue> <severity value="error"/> <code value="structure"/> <details> <text value="Error parsing resource XML (Unknown Content "label""/> </details> <location value="/f:Patient/f:identifier"/> </issue> </OperationOutcome>
This operation retrieves a summary of the profiles, tags, and security labels for the given scope; e.g. for each scope:
Formal Definition (as a OperationDefinition).
URL: [base]/$meta
URL: [base]/Resource/$meta
URL: [base]/Resource/[id]/$meta
Out Parameters: | |||||
Name | Cardinality | Type | Binding | Profile | Documentation |
return | 1..1 | Meta | The meta returned by the operation |
At the system and type levels, the $meta operation is used to get a summary of all the labels that are in use across the system. The principle use for this operation is to support search e.g. what tags can be searched for. At these levels, the meta will not contain versionId, lastUpdated etc. Systems are not obligated to implement the operation at this level (and should return a 4xx error if they don't). At the resource and historical entry level, the $meta operation returns the same meta as would be returned by accessing the resource directly. This can be used to allow a system to get access to the meta-information for the resource without accessing the resource itself, e.g. for security reasons
Get all the tags, profiles, and security labels used on patient resources (Request):
GET /fhir/Patient/$meta
All the tags, profiles, and security labels used on patient resources (Response):
HTTP/1.1 200 OK [other headers] <Parameters> <return> <profile value="http://hl7.org/fhir/StructureDefinition/daf-patient"/> <profile value="http://hl7.org/fhir/StructureDefinition/uslab-patient"/> <security> <system value="http://hl7.org/fhir/v3/ActCode"/> <code value="EMP"/> <display value="employee information sensitivity"/> </security> <tag> <system value="http://example.org/codes/tags"/> <code value="current"/> <display value="Current Inpatient"/> </tag> </return> </Parameters>
This operation takes a meta, and adds the profiles, tags, and security labels found in it to the nominated resource. This operation can also be used on historical entries - to update them without creating a different historical version
Formal Definition (as a OperationDefinition).
URL: [base]/Resource/[id]/$meta-add
In Parameters: | |||||
Name | Cardinality | Type | Binding | Profile | Documentation |
meta | 1..1 | Meta | Profiles, tags, and security labels to add to the existing resource. Note that profiles, tags, and security labels are sets, and duplicates are not created. The identity of a tag or security label is the system+code. When matching existing tags during adding, version and display are ignored. For profiles, matching is based on the full URL | ||
Out Parameters: | |||||
Name | Cardinality | Type | Binding | Profile | Documentation |
return | 1..1 | Meta | Resulting meta for the resource |
This operation is special in that executing this operation does not cause a new version of the resource to be created. The meta is updated directly. This is because the content in meta does not affect the meaning of the resource, and the security labels (in particular) are used to apply access rules to existing versions of resources
Add a 'paper record lost' tag to a resource (Request):
POST /fhir/Patient/example/$meta-add [Other headers] <Parameters> <meta> <tag> <system value="http://example.org/codes/tags"/> <code value="record-lost"/> <display value="Patient File Lost"/> </tag> </meta> </Parameters>
All the tags, profiles, and security labels used on patient resources (Response):
HTTP/1.1 200 OK [other headers] <Parameters> <return> <profile value="http://hl7.org/fhir/StructureDefinition/daf-patient"/> <tag> <system value="http://example.org/codes/tags"/> <code value="current"/> <display value="Current Inpatient"/> </tag> <tag> <system value="http://example.org/codes/tags"/> <code value="record-lost"/> <display value="Patient File Lost"/> </tag> </return> </Parameters>
This operation takes a meta, and deletes the profiles, tags, and security labels found in it from the nominated resource. This operation can also be used on historical entries
Formal Definition (as a OperationDefinition).
URL: [base]/Resource/[id]/$meta-delete
In Parameters: | |||||
Name | Cardinality | Type | Binding | Profile | Documentation |
meta | 1..1 | Meta | Profiles, tags, and security labels to delete from the existing resource. It is not an error if these tags, profiles, and labels do not exist. The identity of a tag or security label is the system+code. When matching existing tags during deletion, version and display are ignored. For profiles, matching is based on the full URL | ||
Out Parameters: | |||||
Name | Cardinality | Type | Binding | Profile | Documentation |
return | 1..1 | Meta | Resulting meta for the resource |
This operation is special in that executing this operation does not cause a new version of the resource to be created. The meta is updated directly. This is because the content in meta does not affect the meaning of the resource, and the security labels (in particular) are used to apply access rules to existing versions of resources
Remove the 'current patient' tag from a resource (Request):
POST /fhir/Patient/example/$meta-delete [Other headers] <Parameters> <meta> <tag> <system value="http://example.org/codes/tags"/> <code value="current"/> <display value="Current Inpatient"/> </tag> </meta> </Parameters>
All the tags, profiles, and security labels used on patient resources (Response):
HTTP/1.1 200 OK [other headers] <Parameters> <return> <profile value="http://hl7.org/fhir/StructureDefinition/daf-patient"/> <tag> <system value="http://example.org/codes/tags"/> <code value="record-lost"/> <display value="Patient File Lost"/> </tag> </return> </Parameters>