Familias y unidades familiares

Tenemos actualmente tienen un script sencillo, relacionado con una persona. Normalmente las solicitudes necesitan más información sobre las circunstancias del cliente, empezando por su situación de vida.

En general, se solicita información sobre la persona principal y a esto le sigue una pregunta sencilla que permitirá que el cliente salte a otra área de la solicitud. Por ejemplo, después de entrar detalles personales, se le pregunta al cliente "¿Vive solo?" . Si la respuesta es afirmativa, se puede tratar a la persona como un solo individuo que no vive en una unidad familiar compuesta por una familia u otros individuos. La mayoría de los clientes desean pasar por el proceso de solicitud lo más rápidamente posible, por lo tanto preguntas como estas proporcionan una buena forma de pasar a partes más relevantes de la solicitud.

Si el cliente vive con otras personas, es posible que sea necesario realizar preguntas sobre cada persona. Se utilizan bucles para capturar información de cada persona y, en función de la manera en que desee presentar estas preguntas, el autor del script puede elegir estos tipos de bucle: "for", "while" y "for-each".

IEG también presenta una pestaña de personas que permite al cliente ver con quién están relacionadas estas preguntas mientras se entran los datos. Esto aparecerá automáticamente para una entidad de persona en el almacén de datos. Cada persona se representará mediante un icono (basado en el sexo y edad) y un nombre. La persona actual estará resaltada.

Veamos un escenario para manejar datos de familia/unidad familiar como una extensión de los requisitos del ejemplo básico. Aquí, se le pregunta al cliente cuántas personas hay en la unidad familiar, incluido el cliente. Es necesario añadir algunas páginas de preguntas nuevas para capturar esta información.

En la primera página de preguntas se pregunta sobre la situación que viven. En este ejemplo, sólo se puede formular una pregunta: ¿Cuántas personas hay en la familia (excluyéndose usted)?

Figura 1. Obtención del tamaño de la unidad familiar
<question-page id="HouseholdPage" progress="10">
    <title id="LoopControlPage.Title">
        <![CDATA[Detalles de la unidad familiar]]>
    </title>
    <description id="LoopControlPage.Description">
        <![CDATA[Proporcione información sobre su
        unidad familiar]]>
    </description>
    <icon image="sample_title_household" />
    <cluster>
        <title id="DetailsCluster.Title">
            <![CDATA[Detalles]]>
        </title>
        <question id="numPeople" control-question="true" 
            control-question-type="IEG_INT32" 
            mandatory="true">
            <label id="NumPeople.Label">
                <![CDATA[¿Cuántas personas hay en su
                unidad familiar?]]>
            </label>
        </question>
    </cluster>
</question-page>

Esta es una pregunta de control, es decir, una pregunta utilizada para controlar el tamaño de un bucle y no para recopilar datos. Las preguntas de control no se almacenan en el esquema de almacén de datos. Se utilizará en la expresión de bucle para el bucle "for" en la página de preguntas siguiente.

La página de preguntas de los miembros de la familia está dentro de un bucle "for" que se repetirá para todos los miembros de la familia.

Figura 2. Utilización del bucle "for" para recopilar miembros de la unidad familiar
<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[Detalles de miembros de la unidad familiar]]>
        </title>
        <description id="PersonDetailsPage.Description">
            <![CDATA[Especifique los detalles de la
                siguiente persona de su unidad familiar]]>
        </description>
        <icon image="sample_title_household" />
        <cluster>
            <title id="DetailsCluster.Title">
                <![CDATA[Detalles de la persona]]>
            </title>
            <description id="DetailsCluster.Description">
                <![CDATA[Especifique los detalles de esta persona
                más abajo]]>
            </description>
            <question id="firstName" mandatory="true">
                <label id="FirstName.Label">
                    <![CDATA[Nombre:]]>
                </label>
            </question>
            <question id="lastName">
                <label id="lastName.Label">
                    <![CDATA[Apellidos:]]>
                </label>
            </question>
            <question id="gender" mandatory="true">
                <label id="Gender.Label">
                    <![CDATA[Sexo:]]>
                </label>
            </question>
        </cluster>
    </question-page>
</loop>

Lo anterior es un ejemplo de cómo el cliente entra el número de miembros de la familia. Pero la pregunta podía haberse formulado de una forma diferente, por ejemplo: "¿Vive con su familia?" En este caso, se puede utilizar un elemento de condición del script para comprobar el valor de esa pregunta. Esto visualizará la página de miembro de la familia si efectivamente viven con su familia. En esta página de preguntas, se realiza una pregunta de control para determinar si desean capturar detalles de otro miembro de la familia.

Esta pregunta de control se utilizará en un bucle "while" en toda la página de preguntas de miembro de la familia, tal como se indica a continuación:

Figura 3. Utilización del bucle "while" para recopilar miembros de la unidad familiar
<question-page id="HouseholdPage" progress="10">
    <title id="LoopControlPage.Title">
        <![CDATA[Detalles de la unidad familiar]]>
    </title>
    <description id="LoopControlPage.Description">
        <![CDATA[Proporcione información sobre su
        unidad familiar]]>
    </description>
    <icon image="sample_title_household" />
    <cluster>
        <title id="DetailsCluster.Title">
            <![CDATA[Detalles]]>
        </title>
        <question id="livesWithFamily" control-question="true" 
            control-question-type="IEG_BOOLEAN" 
            mandatory="true">
            <label id="NumPeople.Label">
                <![CDATA[¿Vive con su familia?]]>
            </label>
        </question>
    </cluster>
</question-page>

Con este enfoque, la pregunta de control es un tipo booleano, porque se utiliza en una expresión de condición que indica si se debe entrar en el bucle while. Una vez que se ha entrado en él, el bucle se itera hasta que se han reunido detalles de todos los miembros de la unidad familiar, como se indica a continuación:

Figura 4. Utilización del bucle "while" para recopilar miembros de la unidad familiar
<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[Detalles de miembros de la unidad familiar]]>
           </title>
           <description id="PersonDetailsPage.Description">
               <![CDATA[Especifique los detalles de
                 la siguiente persona de la unidad familiar]]>
           </description>
           <icon image="sample_title_household" />
           <cluster>
               <title id="DetailsCluster.Title">
                   <![CDATA[Detalles de la persona]]>
               </title>
               <description id="DetailsCluster.Description">
                   <![CDATA[Especifique los detalles de esta
                   persona más abajo]]>
               </description>
           <question id="firstName" mandatory="true">
               <label id="FirstName.Label">
                   <![CDATA[Nombre:]]>
               </label>
           </question>
           <question id="lastName">
               <label id="lastName.Label">
                   <![CDATA[Apellidos:]]>
               </label>
           </question>
           <question id="gender" mandatory="true">
               <label id="Gender.Label">
                   <![CDATA[Sexo:]]>
               </label>
           </question>
           </cluster>
           <cluster>
               <question id="anotherMember" 
               control-question="true" 
                 control-question-type="IEG_BOOLEAN">
                   <label id="AnotherMember.Label">
                       <![CDATA[¿Hay otro
                       miembro de la unidad familiar?]]>
                   </label>
               </question>
           </cluster>
      </question-page>
  </loop>
</condition>