# Composants de réponse complexe Pogues permet la conception de questionnaire dont la structure est faite de séquences, sous-séquences et questions. Pour ces dernières, il s'agit de constituer un triptyque : - question - réponse - variable(s) La réponse associée à une question peut être de différents types. Nous cherchons à étendre ces types de réponses à des "composants" dont la complexité n'est pas portée par DDI. ## Existant ### Pogues Les types de réponses actuels sont : - simple - liste à choix unique - liste à choix multiple - tableau (fixe ou dynamique) ### Dans le [modèle](https://github.com/InseeFr/Pogues-Model/blob/main/src/main/resources/xsd/Questionnaire.xsd) L'élément [Question](https://github.com/InseeFr/Pogues-Model/blob/main/src/main/resources/xsd/Questionnaire.xsd#L77) porte l'ensemble des informations liées à la question posée, on y trouve notamment : - [Response](https://github.com/InseeFr/Pogues-Model/blob/main/src/main/resources/xsd/Questionnaire.xsd#L237) - [ResponseStructure](https://github.com/InseeFr/Pogues-Model/blob/main/src/main/resources/xsd/Questionnaire.xsd#L171) - [Les types de questions (QuestionType)](https://github.com/InseeFr/Pogues-Model/blob/main/src/main/resources/xsd/Questionnaire.xsd#L483), à l'heure actuelle : - `SIMPLE` - `SINGLE_CHOICE` - `MULTIPLE_CHOICE` - `TABLE` Exemple d'une réponse simple (la question `PRODUCER` du questionnaire Simpsons) : ```json { "Response": [ { "CollectedVariableReference": "jbcgf11f", "id": "jbgd90cy", "mandatory": false, "Datatype": { "Pattern": "", "typeName": "TEXT", "type": "TextDatatypeType", "MaxLength": 30 } } ], "Control": [], "depth": 3, "FlowControl": [], "Label": [ "Who is the producer?" ], "id": "j3343qhx", "TargetMode": [ "CAWI", "PAPI", "CAPI", "CATI" ], "Declaration": [], "type": "QuestionType", "questionType": "SIMPLE", "Name": "PRODUCER" } ``` ### Dans DDI [QuestionItem](https://ddialliance.github.io/ddimodel-web/DDI-L-3.3/item-types/QuestionItem/) [QuestionGrid](https://ddialliance.github.io/ddimodel-web/DDI-L-3.3/_images/QuestionGrid.svg) pour les tableaux et les batteries de questions :::info Note : pour un tableau dynamique, une seule variable au sens Pogues / DDI est créée par colonne. Par exemple, pour le [questionnaire Simpsons](https://pogues.dev.insee.io/questionnaire/i6vwi2506prod) pour la première question du module V. Dans Pogues, on déclare la variable collectée `FAVOURITE_CHAR1` La variable dans le modèle Pogues ```json { "CollectedVariableReference": "kiq7llp5", "id": "kiq7p16z", "Datatype": { "Pattern": "", "typeName": "TEXT", "type": "TextDatatypeType", "MaxLength": 255 } ``` Dans DDI : - une variable pour la colonne ```xml <l:VariableName> <r:String xml:lang="fr-FR">FAVOURITE_CHAR1</r:String> </l:VariableName> ``` - liée à un paramètre de sortie du tableau ```xml <r:SourceParameterReference> <r:Agency>fr.insee</r:Agency> <r:ID>j6qg8rc6-QOP-kiq7p16z</r:ID> <r:Version>1</r:Version> <r:TypeOfObject>OutParameter</r:TypeOfObject> </r:SourceParameterReference> ``` ::: ## Cible ### Pogues Dans la liste des choix de réponses, on veut ajouter différents composants "complexes" : - un composant adresse - un composant autocomplétion - un composant liens deux-à-deux Deux possibilités d'affichage : 1. un nouvel item "Composants complexes" dans la liste des types de question, puis un choix à faire ensuite sur le composant choisi 2. trois nouvels items pour chacun des composants dans la liste des types de question, puis des champs dédiés au besoin de paramétrage de chacun des composants (à ce jour seul le composant d'autocomplétion semble nécessiter ce paramétrage) 3. question simple mais de nouveaux types de réponses Préférence à la solution 2. ### Modèle Ajouter des items à la [liste des types de question](https://github.com/InseeFr/Pogues-Model/blob/main/src/main/resources/xsd/Questionnaire.xsd#L483) ```xml <xs:simpleType name="QuestionTypeEnum"> <xs:restriction base="xs:token"> <xs:enumeration value="SIMPLE"/> <xs:enumeration value="SINGLE_CHOICE"/> <xs:enumeration value="MULTIPLE_CHOICE"/> <xs:enumeration value="TABLE"/> <!-- Nouveaux éléments --> <xs:enumeration value="ADDRESS"/> <xs:enumeration value="SUGGESTER"/> <xs:enumeration value="PAIRING"/> </xs:restriction> </xs:simpleType> ``` (valeurs non définitives) ### DDI On passe l'information dans le DDI via l'utilisation de l'élément `UserAttributePair` (cf. [cette doc](https://ddialliance.github.io/ddimodel-web/DDI-L-3.3/composite-types/StandardKeyValuePairType/)) ```xml <d:QuestionItem> <r:Agency>fr.insee</r:Agency> <r:ID>jr6ebqby</r:ID> <r:Version>1</r:Version> <r:UserAttributePair> <r:AttributeKey>UIComponent</r:AttributeKey> <r:AttributeValue>HouseholdPairing</r:AttributeValue> </r:UserAttributePair> <d:QuestionItemName> <r:String xml:lang="fr-FR">LIEN_DEUX_A_DEUX</r:String> </d:QuestionItemName> [...] </d:QuestionItem> ``` :::info Les valeurs données ici pour `AttributeKey` et `AttributeValue` ont valeur d'exemple mais ne sont pas les valeurs finales. On utilisera probablement des valeurs issues d'un vocabulaire contrôlé, qui reste à créer. :::