Familles et foyers

Nous disposons actuellement d'un script simple relatif à une seule personne. Souvent, les applications nécessitent davantage d'informations sur la situation du client, en commençant par leur situation.

En général, les informations sont requises sur la personne principale, puis suivies par une question simple qui permettra au client de passer à une autre zone de l'application. Par exemple, une fois les informations personnelles saisies, il est demandé au client s'il vit seul. Si la réponse est oui, la personne peut être traitée comme une personne seule qui ne vit pas dans un foyer ou avec d'autres personnes. La plupart des clients souhaitent parcourir le processus d'application le plus vite possible. Par conséquent, de telles questions permettent d'accéder à des parties plus pertinentes de l'application.

Si le client vit avec d'autres personnes, il est nécessaire de poser des questions sur chaque personne. Les boucles permettent de capturer les informations de chaque personne. Selon la façon dont l'auteur du script souhaite présenter ces questions, plusieurs types de boucle sont disponibles : for, while et for-each.

IEG dispose également d'un onglet Personne qui permet au client de voir les personnes concernées par ces questions lors de la saisie des données. Cet onglet apparaît automatiquement pour chaque entité Person dans le magasin de données. Chaque personne est représentée par une icône (basée sur le sexe et l'âge) et un nom. La personne actuellement sélectionnée est mise en surbrillance.

Prenons un scénario pour la gestion des données de la famille/du foyer comme une extension des exigences dans le modèle de base. Dans ce cas, il est demandé au client de connaître le nombre de personnes du foyer, y compris le client. De nouvelles pages de question doivent être ajoutées pour capturer ces informations.

La première page de question concerne la situation. Dans cet exemple, l'unique question à poser est la suivante : Hormis vous-même, de combien de personnes se compose la famille ?

Figure 1. Obtention de la taille du foyer
<question-page id="HouseholdPage" progress="10">
    <title id="LoopControlPage.Title">
        <![CDATA[Détails du foyer]]>
    </title>
    <description id="LoopControlPage.Description">
        <![CDATA[Veuillez nous fournir les informations sur votre
        foyer]]>
    </description>
    <icon image="sample_title_household" />
    <cluster>
        <title id="DetailsCluster.Title">
            <![CDATA[Détails]]>
        </title>
        <question id="numPeople" control-question="true" 
            control-question-type="IEG_INT32" 
            mandatory="true">
            <label id="NumPeople.Label">
                <![CDATA[De combien de personnes se compose votre
                foyer ?]]>
            </label>
        </question>
    </cluster>
</question-page>

Il s'agit d'une question de contrôle, c'est-à-dire une question qui permet de contrôler la taille d'une boucle, et non d'une question à des fins de collecte de données. Les questions de contrôle ne sont pas stockées dans le schéma de magasin de données. Elle seront utilisées dans l'expression de boucle 'for' de la page de questions suivante.

La page de questions aux membres du foyer se trouve à l'intérieur d'une boucle 'for' qui va itérer sur le nombre de membres de la famille.

Figure 2. Utilisation de la boucle 'for' pour collecter les membres du foyer
<loop loop-type="for" loop-expression="numPeople" 
    entity="Person" criteria="isPrimary==false">
    <question-page id="PersonDetailsPage" 
        show-person-tabs="true" 
        progress="20">
        <title id="PersonDetailsPage.Title">
            <![CDATA[Détails du membre du foyer]]>
        </title>
        <description id="PersonDetailsPage.Description">
            <![CDATA[Veuillez nous fournir les informations de la
                personne suivante de votre foyer]]>
        </description>
        <icon image="sample_title_household" />
        <cluster>
            <title id="DetailsCluster.Title">
                <![CDATA[Détails de la personne]]>
            </title>
            <description id="DetailsCluster.Description">
                <![CDATA[Entrez les détails de la personne
                ci-dessous]]>
            </description>
            <question id="firstName" mandatory="true">
                <label id="FirstName.Label">
                    <![CDATA[Prénom :]]>
                </label>
            </question>
            <question id="lastName">
                <label id="lastName.Label">
                    <![CDATA[Nom :]]>
                </label>
            </question>
            <question id="gender" mandatory="true">
                <label id="Gender.Label">
                    <![CDATA[Sexe :]]>
                </label>
            </question>
        </cluster>
    </question-page>
</loop>

L'exemple ci-dessus présente comment le client entre le nombre de membres qui composent le foyer. La question aurait pu être posée différemment : 'Vivez-vous avec votre famille ?' Dans ce cas, un élément de condition dans le script peut être utilisé pour vérifier la valeur de cette question. La page du membre de la famille s'affiche s'il vit avec sa famille. Sur cette page de questions, une question de contrôle est posée pour déterminer s'il souhaite capturer les détails d'un autre membre de la famille.

Cette question de contrôle est utilisée dans une boucle 'while' autour de la page de questions du membre de la famille, comme suit :

Figure 3. Utilisation de la boucle 'while' pour collecter les informations sur les membres du foyer
<question-page id="HouseholdPage" progress="10">
    <title id="LoopControlPage.Title">
        <![CDATA[Détails du foyer]]>
    </title>
    <description id="LoopControlPage.Description">
        <![CDATA[Veuillez nous fournir les informations sur votre
        foyer]]>
    </description>
    <icon image="sample_title_household" />
    <cluster>
        <title id="DetailsCluster.Title">
            <![CDATA[Détails]]>
        </title>
        <question id="livesWithFamily" control-question="true" 
            control-question-type="IEG_BOOLEAN" 
            mandatory="true">
            <label id="NumPeople.Label">
                <![CDATA[Vivez-vous avec votre famille ?]]>
            </label>
        </question>
    </cluster>
</question-page>

Grâce à cette méthode, la question de contrôle est de type booléen, car elle est utilisée dans une expression de condition qui indique si la boucle while doit être saisie ou non. Une fois saisie, la boucle est itérée jusqu'à la collecte de tous les membres du foyer, comme suit :

Figure 4. Utilisation de la boucle while pour collecter les membres du foyer
<condition expression="livesWithFamily==true">
  <loop loop-type="while" loop-expression="
    anotherMember==true" 
    entity="Person">
      <question-page id="PersonDetailsPage" 
       show-person-tabs="true"
         progress="20">
           <title id="PersonDetailsPage.Title">
               <![CDATA[Détails du membre du foyer]]>
           </title>
           <description id="PersonDetailsPage.Description">
               <![CDATA[Veuillez fournir les informations de la
                 personne suivante de votre foyer]]>
           </description>
           <icon image="sample_title_household" />
           <cluster>
               <title id="DetailsCluster.Title">
                   <![CDATA[Détails de la personne]]>
               </title>
               <description id="DetailsCluster.Description">
                   <![CDATA[Entrez les détails de la personne
                   ci-dessous]]>
               </description>
           <question id="firstName" mandatory="true">
               <label id="FirstName.Label">
                   <![CDATA[Prénom :]]>
               </label>
           </question>
           <question id="lastName">
               <label id="lastName.Label">
                   <![CDATA[Nom :]]>
               </label>
           </question>
           <question id="gender" mandatory="true">
               <label id="Gender.Label">
                   <![CDATA[Sexe :]]>
               </label>
           </question>
           </cluster>
           <cluster>
               <question id="anotherMember" 
               control-question="true" 
                 control-question-type="IEG_BOOLEAN">
                   <label id="AnotherMember.Label">
                       <![CDATA[Y a-t-il un autre
                       membre dans votre foyer ?]]>
                   </label>
               </question>
           </cluster>
      </question-page>
  </loop>
</condition>