๐ŸŽ“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 "https://github.com/zen-fhir/hl7-fhir-r4-core.git"
        hl7-fhir-us-core "https://github.com/zen-fhir/hl7-fhir-us-core.git"}}

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 #{hl7-fhir-us-core.us-core-patient}

 {:zen/tags #{zen/schema zen.fhir/profile-schema}
  ;; :confirms is needed only if you want to extend an existing profile
  :confirms #{hl7-fhir-us-core.us-core-patient/schema}
  :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"]}
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"]}

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.

Last updated