How to create a form with dynamical answers into questions

Aidbox forms supports fetching answers into question with conditions and logic

What is answer expression

Aidbox Forms allows to create form which dynamically fetch answers into questions. An expression with FHIRPath or FHIR Query that resolves to a list of permitted answers for the question item or that establishes context for a group item. The user may select from among the list to choose answers for the question.

Example Use Case

Form have two questions. User wants filtrate possible answers into second question depends on answer from first question.

For example first question named Gender have two options: Maleand Female. Depends on answer from Gender , second question named Patient will have two possible lists of answer options with patients who have gender equals to Male or Female.

How to build form

In this guide we will create form with usage of FHIRPath expression and FHIR Query expression.

1. Form setup

Let's create a form which first group will have questions with FHIRPath expression and second group with FHIR Query expression.

Create in builder group called Diet and two items into, so your form in item tree should look like this:

Diet [group]
  - Type [string]
  - Food [string]

Then create another group called Patients and two items into, final item tree should like this:

Diet [group]
  - Type [choice]
  - Food [choice]
Patients [group]
  - Gender [choice]
  - Patient [reference]

2. Setting widgets

Let's setup first group with FHIRPath expression:

  1. Select Type widget in outline

  2. Choose Static options and create two options:

    1. code: meat, display: Meat ;

    2. code: vegetables, display: Vegetables .

  3. Select Food widget in outline

  4. Choose Expression options and select Language FHIRPath

  5. Write down expression:

    1. We define variable called value , which will be used as source of code from Type answer

    2. And create function iif which will define answer options matching Type answer

    3. Then we use combine function to unite our iif conditions

defineVariable('value', %resource.repeat(item).where(linkId = 'type-choice').answer.valueCoding.code).
select(iif(%value.exists($this = 'meat'), 'Beef' | 'Lamb').
combine(iif(%value.exists($this = 'vegetable'), 'Carrot' | 'Potato')))

Take note: Actual linkId may differ! You must select linkId equals to Type widget.

Now let's setup second group with FHIR Query expression:

  1. Select Gender widget in outline

  2. Choose Static options and create two options:

    1. code: male, display: Male ;

    2. code: female, display: Female .

  3. Select Patient widget in outline

  4. Choose Expression options and select Language FHIRQuery

  5. Write down expression:

    1. We define query to our resource Patient and parameter gender

    2. And links question from where code will be queried

Patient?gender={{ %resource.repeat(item).where(linkId = 'gender-choice').answer.valueCoding.code }}

Take note: Actual linkId may differ! You must select linkId equals to Gender widget.

Usage

Now let's try to answer on questions:

  1. Diet questions:

    1. If user choose into Type question Meat answer. Into Food question will be available only Beef and Lamb answer.

    2. If user choose Vegetables answer into Type question — into Food question will be available only Carrot and Potato answers.

  2. Patients questions:

    1. If user choose into Gender question Male answer. Into Patient reference question will be available list of patients only with Male gender.

    2. If user choose Female answer into Gender question — into Patient question will be available list of patients only with Female gender.

Last updated

Was this helpful?