--- type: "sdc-page" title: "SDC: Adaptive Forms" source: "sdc/input/pagecontent/adaptive.xml" --- # SDC: Adaptive Forms ### Adaptive Questionnaire Background Adaptive Forms follow an architecture where a questionnaire is not pre-defined, rather the questionnaire is dynamically developed based on previous answers to questions chosen from an item bank of questions. This type of administration is also known as Computerized Adaptive Testing (CAT), or administration of Adaptive Questionnaires. In these cases, a set of questions (typically 4 to 12) are administered from a question bank containing numerous questions. The selected questions are based on Item Response Theory (IRT) algorithms which look at the answers provided and select the next question based on IRT algorithms. The questions are selected to quickly obtain the necessary outcomes (e.g. assessing a person's physical function) using fewer questions rather than administering a large question bank. These small sets of questions still provide the necessary confidence and scores required to interpret the data appropriately as if the whole questionnaire was administered. The adaptive process relies on the [$next-question](http://build.fhir.org/ig/HL7/sdc/OperationDefinition-Questionnaire-next-question.html) operation to dynamically determine and retrieve subsequent questions based on previous answers. ### Adaptive Questionnaire Administration Abstract Model and Actors Profiles: - [Adaptive Questionnaire Profile](/sdc-structuredefinition-sdc-questionnaire-adapt-intro) - [Adaptive QuestionnaireResponse Profile](/sdc-structuredefinition-sdc-questionnaireresponse-adapt-intro) - [Adaptive Questionnaire Search Profile](/sdc-structuredefinition-sdc-questionnaire-adapt-srch-intro) Relevant Extensions: - [questionnaireAdaptive](/sdc-structuredefinition-sdc-questionnaire-questionnaireadaptive-intro) Example Questionnaires: - [Adaptive PHQ9 - Start](http://build.fhir.org/ig/HL7/sdc/QuestionnaireResponse-adaptive-questionnaireresponse-sdc-example-phq9-start.html) - [Adaptive PHQ9 - Complete](http://build.fhir.org/ig/HL7/sdc/QuestionnaireResponse-adaptive-questionnaireresponse-sdc-example-phq9.html) The section explains the process of administering an Adaptive Questionnaire and the actors (systems) involved. Figure 1 below shows the abstract model of the administration process. ![Adaptive Questionnaire Administration Abstract Model](adaptive-questionnaire-model.png) **Figure 1: Adaptive Questionnaire Administration Abstract Model** #### Actors, Definitions and Data Flow **External Assessment Center:** The External IRT based Assessment Center is a system that can administer a questionnaire based on IRT algorithms. The data that is necessary for the administration is only the initial item bank. The External Assessment Center does not need to know about the specific patient identity or any other clinical information. The Assessment Center will use algorithms recommended by the Questionnaire designer to determine how to administer the questionnaire. **Patient Facing Administration App:** The Patient Facing Administration App is the actual app that is being used to present the questions to the patient. It can be an EHR, a SMART on FHIR App, an Independent PRO Administration App. ### Data Flow Description for Adaptive Questionnaires Administration As shown in Figure 1 above, the Patient Facing Administration App (EHR, Care Delivery System, Independent App or SMART on FHIR App) acts as the client and initiates the administration process. The following section describes the steps that take place when completing an adaptive Questionnaire and also provides examples of the content sent to and received back from the [next question](http://build.fhir.org/ig/HL7/sdc/OperationDefinition-Questionnaire-next-question.html) operation. With regard to the server's response, it is possible that more than one new question is returned in the questionnaire, and previously sent questions that were unanswered might not be sent back by the server. - **Step 0:** Before initiating the administration process for an adaptive questionnaire, the app must first locate the appropriate questionnaire. This can be done through various mechanisms such as performing a search operation, referencing a Task resource, or other mechanism. The questionnaire being located `SHALL` conform to the `Adaptive Questionnaire Search Profile`, which ensures that it is discoverable and compliant with adaptive questionnaire requirements. Additionally, the located questionnaire `SHALL` include the `questionnaireAdaptive` extension. This extension explicitly indicates that the questionnaire supports adaptiveness and may provide details about the endpoints where the $next-question operation can be invoked. If the questionnaireAdaptive extension doesn't specify a URL, the location must be independently negotiated, though as a fallback, try the server on which the Questionnaire is hosted. This step ensures that the app knows whether the questionnaire is adaptive and where to send subsequent requests for the adaptive process. - **Step 1:** The available adaptive questionnaires are loaded into the Assessment Center. - **Step 2:** The administration is initiated with a specific Adaptive Questionnaire. **_Request_** `POST [base]/Questionnaire/$next-question` **Request Body** JSON {% fragment QuestionnaireResponse/adaptive-questionnaireresponse-sdc-example-phq9-start JSON EXCEPT:contained.ofType(Questionnaire)|questionnaire|status EXCEPT:id|derivedFrom BASE:contained %} XML {% fragment QuestionnaireResponse/adaptive-questionnaireresponse-sdc-example-phq9-start XML EXCEPT:contained.ofType(Questionnaire)|questionnaire|status EXCEPT:id|derivedFrom BASE:contained %} JSON {% fragment QuestionnaireResponse/adaptive-questionnaireresponse-sdc-example-phq9-start JSON EXCEPT:contained.ofType(Questionnaire)|questionnaire|status EXCEPT:id|derivedFrom|item BASE:contained EXCEPT:item\[0\] BASE:contained.item %} XML {% fragment QuestionnaireResponse/adaptive-questionnaireresponse-sdc-example-phq9-start XML EXCEPT:contained.ofType(Questionnaire)|questionnaire|status EXCEPT:id|derivedFrom|item BASE:contained EXCEPT:item\[0\] BASE:contained.item %} JSON {% fragment QuestionnaireResponse/adaptive-questionnaireresponse-sdc-example-phq9-start JSON EXCEPT:contained.ofType(Questionnaire)|questionnaire|status EXCEPT:id|derivedFrom|item BASE:contained EXCEPT:item\[0\] BASE:contained.item EXCEPT:item\[0\] BASE:item %} XML {% fragment QuestionnaireResponse/adaptive-questionnaireresponse-sdc-example-phq9-start XML EXCEPT:contained.ofType(Questionnaire)|questionnaire|status EXCEPT:id|derivedFrom|item BASE:contained EXCEPT:item\[0\] BASE:contained.item EXCEPT:item\[0\] BASE:item %} JSON {% fragment QuestionnaireResponse/adaptive-questionnaireresponse-sdc-example-phq9-start JSON EXCEPT:contained.ofType(Questionnaire)|questionnaire|status EXCEPT:id|derivedFrom|item BASE:contained EXCEPT:item\[0\]|item\[1\] BASE:contained.item EXCEPT:item\[0\] BASE:item %} XML {% fragment QuestionnaireResponse/adaptive-questionnaireresponse-sdc-example-phq9-start XML EXCEPT:contained.ofType(Questionnaire)|questionnaire|status EXCEPT:id|derivedFrom|item BASE:contained EXCEPT:item\[0\]|item\[1\] BASE:contained.item EXCEPT:item\[0\] BASE:item %} JSON {% fragment QuestionnaireResponse/adaptive-questionnaireresponse-sdc-example-phq9-start JSON EXCEPT:contained.ofType(Questionnaire)|questionnaire|status EXCEPT:id|derivedFrom|item BASE:contained EXCEPT:item.last() BASE:contained.item EXCEPT:item.last() BASE:item %} XML {% fragment QuestionnaireResponse/adaptive-questionnaireresponse-sdc-example-phq9-start XML EXCEPT:contained.ofType(Questionnaire)|questionnaire|status EXCEPT:id|derivedFrom|item BASE:contained EXCEPT:item.last() BASE:contained.item EXCEPT:item.last() BASE:item %} JSON {% fragment QuestionnaireResponse/adaptive-questionnaireresponse-sdc-example-phq9 JSON EXCEPT:contained.ofType(Questionnaire)|questionnaire|status EXCEPT:id|derivedFrom|item BASE:contained EXCEPT:item.last() BASE:contained.item EXCEPT:item.last() BASE:item %} XML {% fragment QuestionnaireResponse/adaptive-questionnaireresponse-sdc-example-phq9 XML EXCEPT:contained.ofType(Questionnaire)|questionnaire|status EXCEPT:id|derivedFrom|item BASE:contained EXCEPT:item.last() BASE:contained.item EXCEPT:item.last() BASE:item %}