Data Extraction

Aidbox supports 3 options for data extraction: Observation-Based, Definition-Based, and Template-Based. These options provide flexibility in how form data is transformed into different FHIR resources

Observation-based extraction

it allows data collected through a Questionnaire Response (QR) to be extracted and stored in FHIR Observation resources.

Ensure that each item has both a code and a system defined.

Current Logic:

  • A new Observation is created for each Questionnaire Response instance at the time of data extraction.

  • If a QR is amended (modified after submission), the existing Observations linked to that QR are updated accordingly.

For detailed instructions and an example of extracting data into an Observation resource, visit the Observation-Based Extraction Guide.

Definition-based extraction

It maps form data dynamically to the corresponding FHIR resources. When configuring extraction, you must specify a FHIR Path expression in the Path field. This expression defines the resource and field where the data should be extracted.

Current Logic:

Two Options for Resource Extraction:

  • New Resource: If "new resource" is selected, a new resource is always created during extraction.Comment

  • Existing Resource: If "existing resource" is selected, the system includes the questionnaire-itemExtractionContext extension. This extension can be added either at the root of the Questionnaire or at any item level. It identifies the resource that serves as the context for extraction.Comment

Using itemExtractionContext:

  • Empty itemExtractionContext: When the itemExtractionContext is empty, the Questionnaire is used to create a new resource.

  • Populated itemExtractionContext: If the itemExtractionContext contains a resource (or set of resources), the Questionnaire updates the existing resource.

For detailed instructions and an example of extracting data into a Patient resource, visit the Definition-Based Extraction Guide.

Template-based extraction

It uses predefined templates embedded in the Questionnaire to extract answers into FHIR resources, along with all the "boiler-plate" content for the resource that is to be extracted..

Current Logic:

templateExtract and templateExtractBundle should not be used at the same time.

  • There is one location where you can place the templateExtractBundle extension:

    • At the root level of the Questionnaire: Used when you want to extract several resources and control properties of Bundle and it's entries.

  • There are two options where you can place the templateExtract extension:

    • At the root level of the Questionnaire: Used when you want to extract a single resource based on multiple answers from the form.

    • At the item level: Used when you want to extract data from specific questions or create a separate resource per repeated item.

  • Data is mapped from answers in the QuestionnaireResponse into the template using FHIRPath expressions.

  • Repeating items:

    • When templateExtract is placed on a repeatable item, the engine creates a new resource for each answer.

    • When extracting to a field that is an array (e.g., Patient.address), repeated answers can be added as multiple entries in the same resource.

  • Use of the allocateId extension allows generation of unique IDs and referencing between related resources.

  • There is a way to make references between extracted resources:

    • In template, where you want to put reference - you put templateExtractValue extension with a FHIRPath expression referencing variable (for example %newPatientId )

    • In item that contain template which you want to reference - you should put fullUrl extension into templateExtract extension and reference the same variable (for example %newPatientId )

    • You should find common parent item for these 2 items and put there allocateId extension with that variable name (for example newPatientId - without '%' sign at front).

      • item with allocateId extension defines a scope with a variable where temporary created id is accessible.

      • You can put allocateId on any item or questionnaire's root.

      • For repeated items you should put allocateId into repeated item and there will be created separate id for every iteration.

In Form UI Builder referencing resources greatly simplified and many steps are done automatically.

You should just select resource in dropdown when you specify value of a reference (for example RelatedPerson.patient)

  • There is a way to extract new resource or modify existed.

    • When creating new resource - you fill template as is - without any additional effort

    • When updating existed resource - there are a couple of actions should be done before.

      • hidden text item for resource-id should be created

      • item should be populated with existed resource-id in $populate step

      • resourceId extension with FHIRPath should be added to templateExtract extension, and FHIRPath expression should extracts id from hidden item.

In Form UI Builder exracting reference to resource from item slightly simplified, but other parts should be added manually (adding hidden item and it's population)

  • If the template includes expressions that return no result, the corresponding field or entry is automatically excluded from the output.

Steps to create a resource template:

  • Select a predefined resource template from existing ones, or create a new template.

  • At this moment, the Resource Template Editor will be opened.

  • Set up the template name.

  • Select the resource type of the template you want to create (e.g., Patient, Observation).

  • Choose new or existing resource

  • Search and prefill the fields that you need in this resource template.

  • Test and debug the extraction using the debug console. For this purpose, enter test data in the form.

  • Close the Resource Template Editor panel if everything is correct, or discard changes.

For detailed instructions and examples of using templates for data extraction, visit the Template-Based Extraction Guide.

Last updated

Was this helpful?