Load zen profiles into Aidbox

Enable the US Core Implementation Guide, extend it with profile and validate data against it
Please start a discussion or contact us if you have questions, feedback or suggestions.


Install the Aidbox following this guide.
In the .env file find the line starting with AIDBOX_IMAGE and edit it to be like this if it is not:

Start with a zen project

The Aidbox starter repository you cloned by following the guide from Prerequisites is already a zen project. It has zen-package.edn, the project package file, and zrc/system.edn, the project entry file.

Add the required IG packages as dependencies

Update zen-package.edn so that it reflects information about the new project’ dependencies.
;; zen-package.edn
{:deps {hl7-fhir-r4-core ""
hl7-fhir-us-core ""}}
A dependency is any other zen project. It is common to include FHIR IG packages this way. We provide a number of prepackaged FHIR IGs which you can use similarly to the example above.
You also need to update an entry file, zrc/system.edn. It is used, among other things, for importing and loading all the project’s files, including its dependencies.
;; zrc/system.edn
{ns system
import #{aidbox

Create a namespace with your profiles

;; zrc/my-profiles.edn
{ns my-profiles
import #{}
{:zen/tags #{zen/schema zen.fhir/profile-schema}
;; :confirms is needed only if you want to extend an existing profile
:confirms #{}
:zen.fhir/type "Patient"
:zen.fhir/profileUri "urn:profile:MyPatientProfile"
:type zen/map
:require #{:birthDate}}}
Add my-profiles namespace to the entry file imports.
;; zrc/system.edn
{ns system
import #{aidbox
Refer to Aidbox Configuration project page if you want to learn more about zen projects.

Setup Aidbox for development with zen projects

Add AIDBOX_ZEN_DEV_MODE=enable to your.env file:
Now Aidbox will automatically reload when changes are made in the project. Note that this feature is a work in progress and some things may not reload properly.

Check if your profile is loaded

Start Aidbox.
docker compose up
Open Aidbox in your browser and click Profiles tab in the left menu:
You should see the list of zen namespaces loaded.
On this page you see the namespaces that are explicitly included in the zen project or used by Aidbox
Open your profile by clicking its name

Start validation

Test the data against this profile using validate tab
If your profile is tagged zen.fhir/profile-schema it can be used to validate your data On FHIR CRUD API requests a profile will be applied if data includes :zen.fhir/profileUri in the meta.profile attribute:
Data is missing `birthDate` attribute, required by the profile
POST /Patient
Content-Type: text/yaml
name: [{given: [Harry], family: Potter}]
meta: {profile: ["urn:profile:MyPatientProfile"]}
An error has been returned
# status 422
resourceType: OperationOutcome
status: generated
div: Invalid resource
- severity: fatal
code: invalid
- Patient.birthDate
diagnostics: ':birthDate is required'
Data contains `birthDate` required by profile
POST /Patient
Content-Type: text/yaml
name: [{given: [Harry], family: Potter}]
birthDate: "1980-07-31"
meta: {profile: ["urn:profile:MyPatientProfile"]}
# status 201
id: 20fdde9d-ede6-4edb-a16a-278ddfeef952
resourceType: Patient
- given:
- Harry
family: Potter
birthDate: '1980-07-31'
- urn:profile:MyPatientProfile
lastUpdated: '2021-09-03T14:40:11.300957Z'
createdAt: '2021-09-03T14:40:11.300957Z'
versionId: '57'

Development and production tips

If you want more tips about development and production usage, visit the links below:

Example project

See the example project used on this page.