How to: populate forms with data
Warn
You should have items with types - that corresponds populate values types.
In all populate items configuration you should use proper item(widget) for populate data
String Input
string
Textarea
string
URL
url
Integer Input
integer
Decimal Input
decimal
Quantity Input
quantity
Date
date
Time
time
Datetime
dateTime
Choice Input
coding
Open Choice Input
coding/string
Radio Button
coding
Boolean input
boolean
File
attachment
Author's Signature
attachment
Reference
reference
How to populate form with patient demographic data: patient name, DOB, MRN, address, phone
To populate a form we should:
setup a form to be able to get patient's data and prefill form items with it (design time)
provide patient's reference to population operation. (usage time)
Form Setup (design time)
Assume that we already have:
form with 5 items(data: patient name, DOB, MRN, address, phone)
Patient resource in the Aidbox DB
Patient resource example:
WARN: You should have items with types - that corresponds populate values types. (see WARN section)
We should setup items with populate
expressions.
How to find population expression:
select widget in the outline 2 click on
populate
checkbox in the widget settings panelin opened section select
Expression
tab
For this example we will use:
%subject
parameter, which will containPatient
resourceFHIRPath
expressions to retrieve data.
%subject
parameter will be filled with data in population operation
Expressions:
Patient name
DOB (Date widget)
MRN (Text widget)
address (Text widget)
phone (Text widget)
Populate Parameters (usage time)
To make %subject
resource available we should call $populate
operation with specific parameters
subject = <reference>
(reference to patient)local = true
(says that we should search for subject in DB and load resource)
Operation call example:
How to populate form with patient weight, height
To populate a form we should:
setup a form to be able to get patient's observations (design time)
provide patient's reference to population operation. (usage time)
Form Setup (design time)
Assume that we have:
Form with
body weight
andbody height
itemsPatient in DB
Patient's
body weight
andbody height
Observations
in DB
WARN: You should have items with types - that corresponds populate values types. (see WARN section)
Stored Observations
should be linked to a patient and should be coded with right terminology code (LOINC in our example)
LOINC coding for body measurements:
Body Height:
{ system: http://loinc.org, code: 8302-2 }
Body Weight:
{ system: http://loinc.org, code: 29463-7 }
Observation examples
Body Weight
Body Height
We should configure items with Observation based population
Select item in outline
Press
include code?
section and type corresponding code/system (from Observations)Enable
Populate
section (Observation
population should be opened by default) and choose period to search for Observations. (For example1 Month
)
Populate parameters (usage time)
To pass Patient's reference we use subject
parameter to $populatelink
/$populate
operation.
Operation call example:
How to populate form with patient allergies
To populate a form with data from allergies we should
setup a form to be able to find allergies for a patient and populate them in a list (design time)
Create a
group
/group table
with columns of proper typesSet
named expression
for createdgroup
to search for allergiesSet columns
populate expressions
to extract data from foundAllergyIntolerance
resources
provide
Patient
reference in input parameters of populate operation (usage time)
Form Setup (design time)
Assume that we already have:
Form for Allergies
Several
AllergyIntolerance
resources in DB
AllergyIntolerance
resource examples:
AllergyIntolerance
resource examples:Food allergy
No Known Drug Allergy
Since there can be several allergies - we should use Group Table (or Group) for them. It will allow us to grow a form with new elements.
Every table row should have next columns:
category (text input)
allergy code (text item)
reaction (Choice input)
criticality (Choice input)
WARN: You should have items with types - that corresponds populate values types. (see WARN section)
Reaction and allergy code should be taken from Terminology server, in demo purposes we just set answerOptions with predefined values.
Create a table with columns
Press
+ Add widget
button in the outlineSelect
Group Table
in a opened widget panel.
You will get a group table with 2 items in it.
Now we must setup our inputs
Remove predefined
Group table's
itemshover items with mouse and click on trash icon. (outline)
Create
Category
column and set answer options Category item FHIR SpecHover
Group Table
item in the outline and click on+
sign - this will open an items list panel for choosing item.Select
Choice Input
item type in a items list panelType it's title =
Category
intext
input of item's settings panelFind
Options
section inAttributes
segment ofitem's settings
panelFill out options with next value Category item FHIR Spec
code
=food
,display
=Food
code
=medication
,display
=Medication
code
=environment
,display
=Environment
code
=biologic
,display
=Biologic
Create
Allergy Code
columnRepeat actions from 2nd step with next values
text
=Allergy code
Options
aresystem
=http://snomed.info/sct
,code
=409137002
,display
=No Known Drug Allergy (situation)
system
=http://snomed.info/sct
,code
=227493005
,display
=Cashew nuts
(in production we should use ValuseSet here, but for demo purposes we just fill our value from existedAllergyIntolerance
resource)
Create
Reaction
column and set answer optionsRepeat actions from 2nd step with next values
text
=Reaction
Options
are:code
=1160593
,display
=cashew nut allergenic extract Injectable Product
(in production we should use ValuseSet here, but for demo purposes we just fill our value from existedAllergyIntolerance
resource)
Create
Criticality
column and set answer optionsRepeat actions from 2nd step with next values
Find
Options
section inAttributes
segment ofitem's settings
paneltext =
Criticality
Options
are: Criticality item FHIR Speccode
=low
,display
=Low Risk
code
=high
,display
=High Risk
code
=unable-to-assess
,display
=Unable to Assess Risk
Set table population expression
population expression
At first we should design and debug a FHIR Query to find AllergyIntolerance
resources
For searching AllergyIntolerance
we need only Patient
reference that we get as %subject
Input Parameter see Input Parameters section
Complete FHIR Search Query looks like this:
We should specify form's named expression
with this query, but with small modifications:
remove http method (
GET
)replace
patient
parameter value (=pt-1
) with embeddedFHIRPath
expression{{%subject.id}}
Embedded FHIRPath expression
{{%subject.id}}
consists of:
{{}}
- FHIRPath expression embedding point
%subject
- populate input parameter. (all parameters start with%
sign)
%subject.id
-FHIRPath
expression that extractsid
fromPatient
reference
To specify named expression we should:
Click on
group table
item in the outline panelEnable
Populate
section in item's settings panel (Observation
population should be opened by default)Select
Expression
tab inPopulate
section.enter
expression name
=allergy
(we will use expression by name in next section)set
expression language
=FHIRQuery
Copy
FHIRQuery
that we get in last step
Set columns population expressions
population expressions
For every column we should set populate expression which extracts data from %allergy
named expression.
Select column item in the outline
Enable
Populate
section (Observation
population should be opened by default)Select
Expression
tabEnter
FHIRPath
expression that extracts needed value.
Category (Choice input)
There can be several catigories but for demo purpores we just use first of them
Allergy code (Choice item)
Reaction (Choice input)
There can be several reactoins but for demo purpores we just use first of them
Criticality (Choice input)
Populate parameters (usage time)
To pass Patient's reference we use subject
parameter to $populatelink
/$populate
operation.
Operation call example:
How to populate form with data from another form during the visit
To populate a form with data from another form we should:
setup a form to be able to find another form's response and get information from it (design time)
Enable input parameter, that is common for both forms. (
Encounter
in our case)Set form's named expression with
FHIRQuery
to search for response in DBSet item's populate expression to extract data from found
QuestionnaireResponse
provide
Encounter
reference in input parameters of populate operation (usage time)
Form Setup (design time)
Assume that we have:
1st Form and it's response with captured data in DB, which will be used as data source
2nd Form, that should be pre-populated
WARN: You should have items with types - that corresponds populate values types. (see WARN section)
We are working only with 2nd form in this demo
Enable input parameter
To use %encounter
input parameter - we should enable it.
Click on form's name in the outline panel (top left corner of the Form Builder)
In
Populate section
of form's settings panel click onEncounter
checkbox.
Setup query to find a resource
Response of 1st form should be stored in DB and looks like this:
We are interested in following values from it.
encounter reference
- will be common with our formquestionnaire
- uniqueQuestionnaire's
identifieritem's
linkId
- will be used to extract an answer in following section.
We need to build FHIR Search Query
to find this response.
It's better to design and debug query in Aidbox REST Console
Complete FHIR Search Query looks like this:
It uses several filter criteria:
status = completed
- we need only submitted formsquestionnaire
- canonical URL of response's questionnaireencounter
- our common reference, for exampleenc-1
We should specify form's named expression
with this query, but with small modifications:
remove http method (
GET
)replace
encounter
parameter value (=enc-1
) with embeddedFHIRPath
expression{{%encounter.id}}
Embedded FHIRPath expression
{{%encounter.id}}
consists of:
{{}}
- FHIRPath expression embedding point
%encounter
- populate input parameter. (all parameters start with%
sign)
%encounter.id
-FHIRPath
expression that extractsid
fromEncounter
reference
To specify named expression we should:
Click on form's name in the outline panel (top left corner of the Form Builder)
In form's settings panel click button
+ Add Expression
(Named Expressions
section).Select created empty line
enter
expression name
=response
(we will use expression by name in next section)set
expression language
=FHIRQuery
Copy
FHIRQuery
that we get in last stepClick
close
button in thenamed expression
form
Set item's populate expression
We should use created named expression
(%response
) to extract a value and fill out our item.
Select the item in outline
Enable
Populate
section (Observation
population should be opened by default)Select
Expression
tabEnter
FHIRPath
expression that extracts needed value.
Populate parameters (usage time)
To pass Encounter's reference we use context
parameter - encounter
to $populatelink
/$populate
operation
Operation call example:
Last updated