Pogues icon indicating copy to clipboard operation
Pogues copied to clipboard

DDI implementation of the household members pairing component

Open romaintailhurat opened this issue 2 years ago • 16 comments

Pogues will offer a new type of question in order to invoke a household members pairing component. We have to find a proper way to pass this information through DDI.

Because there is no direct DDI object to model this, we could use the UserAttributePair:

<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>

romaintailhurat avatar May 20 '22 09:05 romaintailhurat

Note: the choice made here will be reused for at least two other complexe response option, the address component and the suggester component.

romaintailhurat avatar May 25 '22 13:05 romaintailhurat

WIP doc.

romaintailhurat avatar May 31 '22 07:05 romaintailhurat

Validation from @ORogel @loichenninger requested 🤗

romaintailhurat avatar Jun 01 '22 09:06 romaintailhurat

Si on est sur une questionItem, il nous manque l'information l'information sur quelle est la question (ou plutôt la variable du rosterforloop) qui porte la liste des individus du logement sur laquelle itérer (le scope).

ORogel avatar Aug 29 '22 15:08 ORogel

Following the Insee DDI guidelines, i think the best option here is to import in the Household members pairing component the members list variable, as an OutParameter:

<d:QuestionItem>
...
<r:InParameter isArray="false">
    <r:Agency>fr.insee</r:Agency>
    <r:ID>l7k4kgby-IP-1</r:ID>
    <r:Version>1</r:Version>
    <r:ParameterName>
        <r:String xml:lang="fr-FR">MEMBERS_LIST</r:String>
    </r:ParameterName>
</r:InParameter>
<r:Binding>
    <!-- External parameter from the "number of household members" question -->
    <r:SourceParameterReference>
        <r:Agency>fr.insee</r:Agency>
        <r:ID>l7k4i42g-QOP-l7k4qsso</r:ID>
        <r:Version>1</r:Version>
        <r:TypeOfObject>OutParameter</r:TypeOfObject>
    </r:SourceParameterReference>
    <!-- Internal parameter used by this QuestionItem -->
    <r:TargetParameterReference>
        <r:Agency>fr.insee</r:Agency>
        <r:ID>l7k4kgby-IP-1</r:ID>
        <r:Version>1</r:Version>
        <r:TypeOfObject>InParameter</r:TypeOfObject>
    </r:TargetParameterReference>
</r:Binding>
...
</d:QuestionItem>

romaintailhurat avatar Sep 02 '22 07:09 romaintailhurat

🇫🇷 Suggestion : Ajouter un OutParameters pour les variables de la question (nommées LINKS dans le Json Lunatic : https://github.com/InseeFr/Lunatic/blob/v2-develop/src/stories/pairwise/links/links.json). Ainsi, on a la métadonnées dans les variables.

🇬🇧 Suggestion : Adding an OutParameters for question collected variables (named LINKS into Lunatic Json : https://github.com/InseeFr/Lunatic/blob/v2-develop/src/stories/pairwise/links/links.json). To have the metadata about variable.

ORogel avatar Sep 02 '22 09:09 ORogel

TODO Options list to inject into DDI ("Père, mère, ..."

romaintailhurat avatar Sep 12 '22 07:09 romaintailhurat

@dzkwsk To validate the design.

romaintailhurat avatar Sep 13 '22 11:09 romaintailhurat

I am ok with this proposal, with UserAttributePair and Bindings UserAttributePair was also, according to Algenta, a better choice to introduce innovation (than a label or a name)

The only thing is that we have to define for that the controlled vocabulary to be sure we have for each key word a definition and stick to this definition

dzkwsk avatar Sep 22 '22 08:09 dzkwsk

En partant du question : https://pogues-sandbox.dev.insee.io/questionnaire/l8eh81yn Proposition finale : en partant d'une question en réponse à choix unique liste déroulante, ajout du bloc.

    <r:UserAttributePair>
        <r:AttributeKey>UIComponent</r:AttributeKey>
        <r:AttributeValue>HouseholdPairing</r:AttributeValue>
    </r:UserAttributePair>

et

    <r:InParameter isArray="false">
        <r:Agency>fr.insee</r:Agency>
        <r:ID>l8ehb20u-IP-1</r:ID>
        <r:Version>1</r:Version>
        <r:ParameterName>
            <r:String xml:lang="fr-FR">G_PRENOMS</r:String>
        </r:ParameterName>
...
    <r:Binding>
        <r:SourceParameterReference>
            <r:Agency>fr.insee</r:Agency>
            <r:ID>l0v3g11i-QOP-l0v3lt3g</r:ID>
            <r:Version>1</r:Version>
            <r:TypeOfObject>OutParameter</r:TypeOfObject>
        </r:SourceParameterReference>
        <r:TargetParameterReference>
            <r:Agency>fr.insee</r:Agency>
            <r:ID>l8ehb20u-IP-1</r:ID>
            <r:Version>1</r:Version>
            <r:TypeOfObject>InParameter</r:TypeOfObject>
        </r:TargetParameterReference>
    </r:Binding>

l0v3g11i-QOP-l0v3lt3gfaisant référence à la variable G_PRENOMS

ce qui donne pour la modélisation de la question (le reste ne changeant pas : variable réponse et codelist) :

<d:QuestionItem>
    <r:Agency>fr.insee</r:Agency>
    <r:ID>l8ehb20u</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">LIENS</r:String>
    </d:QuestionItemName>
    <r:InParameter isArray="false">
        <r:Agency>fr.insee</r:Agency>
        <r:ID>l8ehb20u-IP-1</r:ID>
        <r:Version>1</r:Version>
        <r:ParameterName>
            <r:String xml:lang="fr-FR">G_PRENOMS</r:String>
        </r:ParameterName>
    </r:InParameter>
    <r:OutParameter isArray="false">
        <r:Agency>fr.insee</r:Agency>
        <r:ID>l8ehb20u-QOP-l8ekilro</r:ID>
        <r:Version>1</r:Version>
        <r:ParameterName>
            <r:String xml:lang="fr-FR">LIENS</r:String>
        </r:ParameterName>
    </r:OutParameter>
    <r:Binding>
        <r:SourceParameterReference>
            <r:Agency>fr.insee</r:Agency>
            <r:ID>l0v3g11i-QOP-l0v3lt3g</r:ID>
            <r:Version>1</r:Version>
            <r:TypeOfObject>OutParameter</r:TypeOfObject>
        </r:SourceParameterReference>
        <r:TargetParameterReference>
            <r:Agency>fr.insee</r:Agency>
            <r:ID>l8ehb20u-IP-1</r:ID>
            <r:Version>1</r:Version>
            <r:TypeOfObject>InParameter</r:TypeOfObject>
        </r:TargetParameterReference>
    </r:Binding>
    <r:Binding>
        <r:SourceParameterReference>
            <r:Agency>fr.insee</r:Agency>
            <r:ID>l8ehb20u-RDOP-l8ekilro</r:ID>
            <r:Version>1</r:Version>
            <r:TypeOfObject>OutParameter</r:TypeOfObject>
        </r:SourceParameterReference>
        <r:TargetParameterReference>
            <r:Agency>fr.insee</r:Agency>
            <r:ID>l8ehb20u-QOP-l8ekilro</r:ID>
            <r:Version>1</r:Version>
            <r:TypeOfObject>OutParameter</r:TypeOfObject>
        </r:TargetParameterReference>
    </r:Binding>
    <d:QuestionText>
        <d:LiteralText>
            <d:Text xml:lang="fr-FR">"Quel est le lien de PRENOM avec les habitants du logement situé à l’adresse ADR ?" </d:Text>
        </d:LiteralText>
    </d:QuestionText>
    <d:CodeDomain>
        <r:GenericOutputFormat controlledVocabularyID="INSEE-GOF-CV">drop-down-list</r:GenericOutputFormat>
        <r:CodeListReference>
            <r:Agency>fr.insee</r:Agency>
            <r:ID>l8ek40jz</r:ID>
            <r:Version>1</r:Version>
            <r:TypeOfObject>CodeList</r:TypeOfObject>
        </r:CodeListReference>
        <r:OutParameter isArray="false">
            <r:Agency>fr.insee</r:Agency>
            <r:ID>l8ehb20u-RDOP-l8ekilro</r:ID>
            <r:Version>1</r:Version>
            <r:CodeRepresentation>
                <r:CodeListReference>
                    <r:Agency>fr.insee</r:Agency>
                    <r:ID>l8ek40jz</r:ID>
                    <r:Version>1</r:Version>
                    <r:TypeOfObject>CodeList</r:TypeOfObject>
                </r:CodeListReference>
            </r:CodeRepresentation>
        </r:OutParameter>
        <r:ResponseCardinality maximumResponses="1"/>
    </d:CodeDomain>
</d:QuestionItem>

ORogel avatar Sep 23 '22 14:09 ORogel

Et comment on fait la différence entre le InParameter en provenance du scope et un InParameter dû à une personnalisation du libellé ?

-> non, c'est bon : dans le cas de la personnalisation des libellés, on ne s'appuie pas sur les InParameter, mais sur le caractère ¤ pour indiquer les noms de variable. Remarque non valide (mais je la laisse pour éviter que l'on se pose la question ensuite)

BulotF avatar Nov 10 '22 16:11 BulotF

🇫🇷 @romaintailhurat : est-ce qu'on peut passer le QuestionItem en QuestionGrid pour la modélisation DDI ? La raison : on a plusieurs variables en réponses à la question lien 2 à 2, donc plus logique, et permet de ne pas faire un hack côté Eno. C'est possible ?

🇬🇧 @romaintailhurat : can we switch the QuestionItem to QuestionGrid for DDI modeling ? The reason: we have several variables in answers to the pairwise question, so more logical, and allows not to make a hack on the Eno side. Is this possible?

ORogel avatar Nov 24 '22 10:11 ORogel

Yes, it totally makes sense, we indeed had this discussion when designing.

romaintailhurat avatar Nov 24 '22 11:11 romaintailhurat

🇫🇷 Dans le cas où on part sur un QuestionGrid, est-ce que la meilleure place pour le Scope ne serait pas dans le GridDimension (qui serait alors de type Roster) Les attributs obligatoire @minimumRequired and @maxumumAllowed reprendraient la valeur du Roster qui sert de Scope. Pour référencer le Scope en dimensions 1 comme 2, on pourrait utiliser l'élément r:CommandCodeType (décrit dans le lien ci-dessous), dont le contenu est assez libre, si je lis bien... A faire confronter à la modélisation actuelle par @dzkwsk

🇬🇧 In that case, perheaps, the Scope variable's best place would be in GridDimension / d:Roster... @minimumRequired and @maxumumAllowed : the ones from the scope ConditionForContinuation -> this may refer to the Scope variable @dzkwsk shoul check which version is the purest.

r:CommandCodeType, complex content Provides the condition for continuing to add another iteration to the Roster. This may be a human readable condition and/or a machine-actionable command.

Source : https://ddialliance.org/Specification/DDI-Lifecycle/3.3/XMLSchema/FieldLevelDocumentation/schemas/datacollection_xsd/complexTypes/RosterType.html

BulotF avatar Nov 24 '22 13:11 BulotF

ok, je regarde et je reviens vers vous si j'ai des questions

dzkwsk avatar Nov 25 '22 13:11 dzkwsk

ca me semble ok aussi d'avoir le scope qui soit une des dimensions du questionGrid

Pour le choix entre Roster et CodeDomain, est ce que le coté plus minimaliste du roster ne pourrait pas vous gêner pour certaines fonctionnalités utilisant ce tableau des membres ? ou est ce que c'est plus simple à gérer d'avoir seulement les coordonnnées i, j .. ? je suis d'accord avec le commandcode qu'on pourra mettre sur la dimension que l'on veut,

Concernant le userattributpair "HouseHoldPairing" est ce qu'on peut avoir plusieurs composant de ce type ? ( par exemple un composant qui ne garderait qu'une partie des membres du ménages, un autre qui balayerait tous les membres du ménage). si c'est le cas faudra voir pour ajouter de l'info pour différencier les composants HouseHoldPairing dans les métadonnées.

dzkwsk avatar Nov 27 '22 15:11 dzkwsk