Page tree
Skip to end of metadata
Go to start of metadata

Track overview

Breakout session at 3:00 - 4:00 p.m. ET today (Friday), for demoing Questionnaire-related tools.  Bring your tools to demo, or just come and watch.   (The link should be under

Short Description

Questionnaires and forms permeate healthcare.  This track will focus on testing implementation of the US Core Questionnaire profiles, the Structured Data Capture (SDC) implementation guide and the Patient Reported Outcomes (PRO) implementation guide, which all provide guidance on how to define and complete questionnaires in healthcare, including the ability to automatically populate forms and the ability to extract resource information from completed forms.

Long Description

Track objectives include:

  • Representing a wide variety of forms using FHIR and verifying that the SDC implementation guide supports the needed representation capabilities, including flow control logic and calculations
  • Testing authoring application abilities to create and edit such forms
  • Test the ability of questionnaire completion tools abilities to handle different types of forms
  • Test the ability of applications to automatically complete forms using existing data
  • Test the ability of systems to handle rendering 'adaptive' forms (forms where a third-party system decides on the next question based on prior answers)


  • Test an Implementation Guide

Submitting Work Group/Project/Accelerator/Affiliate/Implementer Group

FHIR Infrastructure

Track Leads

Brian Postlethwaite ( - Australia time
Paul Lynch ( - North American time

Related tracks

The following tracks are likely to make use of Questionnaires:

FHIR Version

  • Current build (experimental)
  • FHIR R4 (primary)

Specification(s) this track uses

Artifacts of focus

Clinical input requested (if any)

Clinical use-cases are always welcome - and clinicians who want to try out questionnaire completion software is also welcome

Patient input requested (if any)

Patients are welcome to try out questionnaire completion software

Expected participants


Zulip stream

Track Orientation

Sept. 3, 5pm Eastern

Recording can be found here:

Note:  In order to access the above recording, you need to first log in at  If you don't have an account, use the big blue "Request an Account" button on that page.

Track details

System Roles

Role 1 Name

Role 1 - Forms Repository Server

A server that holds the FHIR Questionnaires to be used for rendering and pre-population (forms should have the SDC pre-population information in them)

Role 2 - Data Provider

A FHIR Server that provides data for use in the pre-population of a form, and also clinical context (preferably through smart on fhir app launch)

For best results the server should also support the search batch processing, reducing the number of calls to the server to retrieve data to populate with.

Role 3 - Populate Server

A server that implements the SDC $populate operation, with FHIRPath or Observation based data extraction processing

Role 4 - Forms Receiver

A server that will receive a FHIR Questionnaire that has been submitted by a user, and subsequently validated.

Role 5 - Form Renderer

A user interface for displaying a Questionnaire/Questionnaire response, permitting a user to complete the form and submit the answers.


Scenario 1 - Create a new Form with fhirpath based pre-population fields inside

This will be used to get experience creating forms, including data extraction information, and fhirpath expressions

Action: Create a new form and save it to a FHIR Server (Such as the Telstra Health Test Server - which will validate the definition)

Precondition: (none)

Success Criteria: Form was able to validate and be used by a populate server, retrieving data from several FHIR Servers (PMS)

Bonus point: Search bundle was external to the form

Bonus point: Data extraction includes multiple launch contexts

Bonus point: Multiple queries in the search bundle

Bonus point: Multiple groups with complex fhirpath extract expressions

Scenario 2 - Provide data for pre-population based on a Search Bundle 

Action: Return the results a search for data as defined by a form pre-population definition

Precondition: A Form with pre-populate rules, a context to perform the searching

Success Criteria: able to return the results of the search

Bonus point: able to handle a bundle as well as individual search interactions

Scenario 3 - Perform a pre-population of provided form

Action: Implement the fhirpath based $populate operation

Precondition: A form definition with fhirpath based data extraction rules in it, and the set of required resources to complete the population (data context)

Success Criteria: A draft QuestionnaireResponse resource is created with all the answers as completed 

Bonus point: pre-populate a definition with repeating sections

Bonus point: pre-populate a definition with multiple search bundle queries

Scenario 4 - Validate a form provided by a user that has been pre-populated

Action: perform QuestionnaireResponse validation against a defined Questionnaire definition, including SDC extenions.

Precondition: A form that has SDC validation extensions in it

Success Criteria: The basic FHIR validations, and Questionnaire Type validations are performed

Bonus point: SDC extensions are reported

Bonus point: SDC complex validation extensions are reported

Scenario 5 - Render a form with data that has been been pre-populated

Action: Ability to render the QuestionnaireResponse, and then submit it to a designated location (for validation etc)

Precondition: A QuestionnaireResponse with completed answers in it.

Success Criteria: Each completed answer should display with the data as extracted, and SDC extensions should also be honored, specifically enable when.

Bonus point: Fhirpath based enable when logic

Scenario 6 - Terminology questionnaire choice column extension (R4 backport experimental)

When using questionnaire-choiceColumn to indicate additional columns to show for an item's answerValueSet, it looks like I first need to do an $expand (maybe with filter) to get a list of N items, and then do an additional N CodeSystem $lookup queries to get the properties requested by the questionnaire-choiceColumn instances for each item. The $lookup queries could be done in a batch, but with at least HAPI FHIR the queries within a batch seem to be processed in series, so that might not help much. Is there a better approach?

Scenario 7 - Validations and Advanced EnableWhen processing

If an item A has enableWhen, and enableWhen.question points to another item B that happens to be disabled, what should be be the effect on item A's enableWhen? We're thinking that it should act as if item B's question has no answer (even item B did have an answer before it got disabled).

Consider how the fhirpath expression based enablewhen works in this situation.

Scenario 8 - AnswerExpression as another alternative to answerOption or answerValueSet

Under some scenarios you need to have a more dynamic set of options than are possible to define with a static set, this extension permits you to provide an expression to define that set of possible values.

J#25960 and J#28386

Example available here:


None at this point, however will have a test service available for all roles, that you can switch various roles for testing, or provide your own questionnaires too.  If someone wants to write TestScripts, they'd be welcome (smile)

Security and Privacy Considerations

No expectation for OAuth or TLS in the test environment (though such technologies might well be needed in a production environment)

Track Report Out

What was the track trying to achieve: 

Paul and Brian planned to work on the answerExpression extension


  • Brian Postlethwaite - Telstra Health
  • Paul Lynch - U.S. National Library of Medicine
  • Stoyan Halkaliev - NursIT Institute GmbH
  • Casey Thompson - Clinovations Gov Health
  • Ana Kostadinovska

Notable achievements:

An example was created to test scenario 8 - AnswerExpressions, and Brian/Paul started to test potential implementations of this

The Telstra Health tech demo is here, and you can select this demonstration from the dropdown list

Discovered issues / questions:

There are times when the output of an answerExpression might just be a list of strings, and there is no way to show that in a list in R4.  (But, that should be fixed in R5)

Discussion on validation vs presentation - validation on client will have access to all the context, where when processed by a server, may not have the context to validate with.

Valueset expansions don't have properties in R4, do in R5, Brian has backported this to R4 and taken up with terminology and reported Jira issue  FHIR-28479 - Getting issue details... STATUS  to track this clarification. This is likely to be one of the common places to extract this answerExpression. Another would be drug strengths to be available for a specific drug.

When selecting a coding from a terminology that has properties in the expansion (which is good to be able to use with the choice column extension), however once it is selected, how can that be accessed, or do we really need to hit the terminology server again for use in an answerExpression?

(  group linkId: med_row

   lookupquery: %lookup_drug = 'http://terminology-server/codesystem/$lookup?url=canonical&code={{item.where(linkId='Drug_Name').answer.value.code}}' // this returns the parameters object

   (   choice linkid: Drug_Name  )

   (   choice linkid: Strength

        answerExpression: '%lookup_drug.parameter.where(name='propertyname?')'.value



OR this could be represented using the fhirpath terminologies extensions as this

(  group linkId: med_row

   variable: %lookup_drug = '%terminonologies.lookup(item.where(linkId='Drug_Name').answer.value.code' // this returns the parameters object

   (   choice linkid: Drug_Name  )

   (   choice linkid: Strength

        answerExpression: '%lookup_drug.parameter.where(name='propertyname?')'.value



Breakout Session - Current projects using FHIR Questionnaires

Brian Postlethwaite from Telstra Health (Australia) demonstrated their Questionnaire Renderer and how it interacts with the $populate operation

And also demonstrated some of the enablewhen capabilities of the renderer, showing the ability for multiple values and ranges.

Then moved on to demonstrate the fhirpathtester tool showing how it helps with testing expression logic that we use in questionnaires for extraction, validation, enablewhen expressions, and other calculations, including the new answerExpression logic. It is a real designer/developer tool.

Next up was Paul Lynch from the US National Library of Medicine who demonstrated their Form Builder, and also their smart on fhir tech demonstration application too.

The final presenter for the session was Stoyan Halkaliev - NursIT Institute GmbH (Germany) showing off their Questionnaire editor in depth.

There is a short video on the top with a brief introduction and a "try it now" button on the site to try things, when it asks for a login, just use the "offline" button at the bottom.

  • No labels