AidboxProfile
Since the 2405 release, using Aidbox in FHIR schema validation engine is recommended, which is incompatible with zen or Entity/Attribute options.
For custom profiling, Aidbox provides additional resource AidboxProfile. This resource specifies resource type and JSON Schema which validates the specified resource type.
AidboxProfile Resource Structure
bind
The bind element is of the type Reference. It specifies the resource type which the profile will be applied to.
Example: Binding to Practitioner resource.
bind:
id: Practitioner # Target resource type "Practitoner"
resourceType: Entity
{
"bind": {
"id": "Practitioner",
"resourceType": "Entity"
}
}
schema
It's a plain JSON Schema object which validates a resource.
Example: Require the name attribute
schema:
type: object
required:
- name
{
"schema": {
"type": "object",
"required": ["name"]
}
}
Examples
Require Properties
Let's validate newly created Patient resources by specifying that name and gender properties are required. First, we need to create the appropriate AidboxProfile resource.
POST /AidboxProfile
resourceType: AidboxProfile
id: custom-patient-constraint
bind:
id: Patient
resourceType: Entity
schema:
type: object
required:
- name
- gender
POST [base]/AidboxProfile
{
"resourceType": "AidboxProfile",
"id": "custom-patient-constraint",
"bind": {
"id": "Patient",
"resourceType": "Entity"
},
"schema": {
"type": "object",
"required": [
"name",
"gender"
]
}
}
STATUS: 201
{
"bind": {
"id": "Patient",
"resourceType": "Entity"
},
"schema": {
"required": [
"name",
"gender"
]
},
"id": "custom-patient-constraint",
"resourceType": "AidboxProfile",
"meta": {
"lastUpdated": "2018-10-10T14:45:43.801Z",
"versionId": "2",
"tag": [{
"system": "https://aidbox.io",
"code": "created"
}
]
}
}
$ docker-compose down && docker-compose up -d
Now, let's try to create a Patient resource without name and/or gender . You will receive the error.
POST /Patient
resourceType: Patient
birthDate: '1985-01-11'
POST [base]/Patient
{
"resourceType": "Patient",
"birthDate": "1985-01-11"
}
STATUS: 422
{
"resourceType": "OperationOutcome",
"errors": [{
"path": [],
"message": "Property name is required",
"profile": {
"id": "custom-patient-constraint",
"resourceType": "AidboxProfile"
}
}, {
"path": [],
"message": "Property gender is required",
"profile": {
"id": "custom-patient-constraint",
"resourceType": "AidboxProfile"
}
}
],
"warnings": []
}
Require Nested Properties
Let's require given and family elements of the name property. In this case, we are expecting that name attribute of the type HumanName will contain elements given and family. Let's create the AidboxProfile resource with the code below.
POST /AidboxProfile
resourceType: AidboxProfile
id: custom-patient-constraint
bind:
id: Patient
resourceType: Entity
schema:
type: object
required:
- name
properties:
name:
type: array
minItems: 1
items:
type: object
required:
- given
- family
properties:
given:
type: array
minItems: 1
items:
type: string
family:
type: string
POST [base]/AidboxProfile
{
"resourceType": "AidboxProfile",
"id": "custom-patient-constraint",
"bind": {
"id": "Patient",
"resourceType": "Entity"
},
"schema": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": [
"given",
"family"
],
"properties": {
"given": {
"type": "array",
"minItems": 1,
"items": {
"type": "string"
}
},
"family": {
"type": "string"
}
}
}
}
}
}
}
STATUS: 201
{
"bind": {
"id": "Patient",
"resourceType": "Entity"
},
"schema": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "array",
"items": {
"type": "object",
"required": [
"given",
"family"
],
"properties": {
"given": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1
},
"family": {
"type": "string"
}
}
},
"minItems": 1
}
}
},
"id": "custom-patient-constraint",
"resourceType": "AidboxProfile",
"meta": {
"lastUpdated": "2018-10-11T09:47:18.147Z",
"versionId": "12",
"tag": [{
"system": "https://aidbox.io",
"code": "created"
}
]
}
}
Now, on the Patient resource creation we will be receiving the validation error. Let's try to create a Patient resource without a family name. You will receive the error.
POST /Patient
name:
- text: John Malcovich
given:
- John
POST [base]/Patient
{
"name": [
{
"text": "John Malcovich",
"given": [
"John"
]
}
]
}
STATUS: 422
{
"resourceType": "OperationOutcome",
"errors": [
{
"path": [
"name",
0
],
"message": "Property family is required",
"profile": {
"id": "custom-patient-constraint",
"resourceType": "AidboxProfile"
}
}
],
"warnings": []
}
See settings