Aidbox Forms
Form building and structured data capturing with Aidbox
Building forms and capturing structured data is a complex process.
One of the solutions is suggested by FHIR. There is the FHIR SDC Implementation Guide which describes how to collect data using Questionnaire and QuestionnaireResponse resources. It is a good way. But the implementation on FHIR turned out to be not convenient, a massive QuestionnaireResponse with nested objects does not allow you to conveniently work with this table and make all kinds of queries, as well as build analytics on the data. Additionally, QuestionnaireResponse is too generic and difficult to work with.
We tried to take into account all these difficulties when developing our product. We developed our own DSL, which gives flexibility and composabiltity, with which you can describe any forms with complex logic and embed them in a workflow.
Aidbox Forms is a toolkit that helps health vendors create and customize forms for doctors, combine them into a workflow and collect data in a structured form, so that they can then be conveniently used for analytics and other purposes.

  • Create any forms with complex logic
  • Prefill forms with existing data
  • Add any validation to the form
  • Change the layout according to your style
  • Extract data and store them in FHIR resources
  • Describe workflow with data prefilled from previous forms or make it dynamic (when next form is suggested based on completed results)

We have presented the form as a layered structure. To design the form, you need to describe the necessary layers using DSL.
Let's look at the diagram to see how the form is built.
Two layers are required - Form Layout and Data Model, the rest are optional depending on needs of your practice.
Form Layout layer describes components and how they are shown on the form. This layer is described using Layout DSL.
Data Model layer specifies the data structure or how the data will be stored in the database. This layer is described using Document DSL.
Form Prefill layer describes how to automatically fill out the form with existing data. This layer is described using Launch DSL.
Form Validation layer describes validation rules and field constraints. This layer is described using FinalizeConstraints DSL.
FHIR mapping layer describes how data will be extracted to FHIR resources (Observation, AllergyIntolerance and others). This layer is described using Finalize DSL.
There is the entity that binds all form layers (DSL) - Form DSL

Forms can be embedded into a workflow.
Workflow is a skeleton for forms composition in more complex structures.
Initially Workflow have nested structure of items, where each item can be:
  • Section - used for forms grouping.
  • Form - reference to existed form.
Workflow and items has status model , model is slightly different
Workflow statuses:
  • new
  • in-progress
  • canceled
  • completed
Item statuses:
  • new
  • in-progress
  • skipped
  • completed
canceled status used for WF because skipped status is not obvious in this domain. WF is a process of action, but item is just a step which can be omitted.
Workflow support 2 additional features:
  • versioning - is automatic and based on hashing essential fields of definitions. If some essential field of form/wf is changed - created a new version and snapshotted to DB
  • section id generation - is generated from item path (path from WF root to item itself).
These features you can configure via api-constructor in zen-project.

Copy link
Edit on GitHub
On this page
By using Aidbox Forms you can:
Our solution
FHIR to Aidbox Forms conversion and to back.