Familien und Haushalte

Unser aktuelles Script ist unkompliziert, da es sich auf nur eine Person bezieht. Oft benötigen Anwendungen mehr Informationen zur Situation des Kunden, angefangen mit seinen Lebensbedingungen.

Im Allgemeinen werden Informationen zur Primärperson abgefragt, gefolgt von einer einfachen Frage, die es dem Kunden ermöglicht, in einen anderen Bereich der Anwendung zu springen. Beispiel: Nach dem Eingeben der persönlichen Angaben wird der Kunde gefragt, ob er allein lebt. Ist die Antwort "Ja", kann die Person als einzelne Person behandelt werden, die nicht in einem Haushalt mit der Familie oder anderen Personen zusammenlebt. Da die meisten Kunden den Anwendungsprozess so schnell wie möglich hinter sich bringen wollen, bilden solche Fragen eine effiziente Methode, um zu den relevanten Teilen der Anwendung vorzudringen.

Lebt der Kunde mit anderen Personen zusammen, müssen möglicherweise Fragen zu jeder dieser Personen gestellt werden. Für das Erfassen der Informationen zu jeder Person werden Schleifen verwendet. Je nachdem, wie der Scriptautor diese Fragen darstellen will, kann er einen der folgenden Schleifentypen verwenden: For-, While- und Foreach-Schleifen.

IEG bietet auch eine Personenregisterkarte, die dem Kunden beim Eingeben der Daten anzeigt, auf wen sich diese Fragen beziehen. Diese erscheint für eine Personenentität automatisch im DS. Jede Person wird durch ein Symbol, das auf Alter und Geschlecht beruht, und einen Namen dargestellt. Die aktuelle Person wird hervorgehoben.

Hier ein Beispielszenario zur Handhabung von Familien- bzw. Haushaltsdaten als Erweiterung der Erfordernisse im Basisbeispiel. Der Kunde wird gefragt, wie viele Personen, inklusive seiner selbst, im Haushalt leben. Um diese Information zu erfassen, müssen einige neue Fragenseiten hinzugefügt werden.

Die erste Frage bezieht sich auf die Lebensbedingungen. In diesem Beispiel muss nur eine Frage gestellt werden: Wie viele Personen gehören außer Ihnen zur Familie?

Abbildung 1. Haushaltsgröße erfassen
<question-page id="HouseholdPage" progress="10">
    <title id="LoopControlPage.Title">
        <![CDATA[Household Details]]>
    </title>
    <description id="LoopControlPage.Description">
        <![CDATA[Please tell us some information about your
        household]]>
    </description>
    <icon image="sample_title_household" />
    <cluster>
        <title id="DetailsCluster.Title">
            <![CDATA[Details]]>
        </title>
        <question id="numPeople" control-question="true" 
            control-question-type="IEG_INT32" 
            mandatory="true">
            <label id="NumPeople.Label">
                <![CDATA[How many other people are in your
                household?]]>
            </label>
        </question>
    </cluster>
</question-page>

Diese Frage ist eine Kontrollfrage, d.h. eine Frage, mit der die Größe einer Schleife gesteuert wird. Sie dient nicht der Datenerfassung. Kontrollfragen werden nicht im DS-Schema gespeichert. Die Kontrollfrage wird im Schleifenausdruck der For-Schleife in der nächsten Fragenseite verwendet.

Die Fragenseite zu den Familienmitgliedern befindet sich innerhalb einer For-Schleife, die über die Anzahl der Familienmitglieder iteriert.

Abbildung 2. For-Schleife zum Erfassen der Haushaltsmitglieder verwenden
<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[Household Member Details]]>
        </title>
        <description id="PersonDetailsPage.Description">
            <![CDATA[Please enter the details for the
                next person in your household]]>
        </description>
        <icon image="sample_title_household" />
        <cluster>
            <title id="DetailsCluster.Title">
                <![CDATA[Person Details]]>
            </title>
            <description id="DetailsCluster.Description">
                <![CDATA[Enter the details for this person
                below]]>
            </description>
            <question id="firstName" mandatory="true">
                <label id="FirstName.Label">
                    <![CDATA[First Name:]]>
                </label>
            </question>
            <question id="lastName">
                <label id="lastName.Label">
                    <![CDATA[Last Name:]]>
                </label>
            </question>
            <question id="gender" mandatory="true">
                <label id="Gender.Label">
                    <![CDATA[Gender:]]>
                </label>
            </question>
        </cluster>
    </question-page>
</loop>

Das obige Beispiel zeigt, wie der Kunde die Anzahl an Familienmitgliedern eingibt. Die Frage hätte aber auch anders gestellt werden können, z.B.: "Leben Sie mit Ihrer Familie zusammen?" In diesem Fall kann im Script ein Bedingungselement verwendet werden, um den Wert dieser Frage zu überprüfen. Dadurch würde in dem Fall, dass der Kunde tatsächlich mit seiner Familie in einem Haushalt lebt, die Seite mit den Familienmitgliedern angezeigt werden. Auf dieser Fragenseite wird eine Kontrollfrage gestellt, um festzustellen, ob der Kunde Angaben zu einem weiteren Familienmitglied erfassen möchte.

Diese Kontrollfrage würde wie folgt in einer While-Schleife um die Fragenseite mit den Familienmitgliedern herum verwendet werden:

Abbildung 3. While-Schleife zum Erfassen der Haushaltsmitglieder verwenden
<question-page id="HouseholdPage" progress="10">
    <title id="LoopControlPage.Title">
        <![CDATA[Household Details]]>
    </title>
    <description id="LoopControlPage.Description">
        <![CDATA[Please tell us some information about your
        household]]>
    </description>
    <icon image="sample_title_household" />
    <cluster>
        <title id="DetailsCluster.Title">
            <![CDATA[Details]]>
        </title>
        <question id="livesWithFamily" control-question="true" 
            control-question-type="IEG_BOOLEAN" 
            mandatory="true">
            <label id="NumPeople.Label">
                <![CDATA[Do you live with your family?]]>
            </label>
        </question>
    </cluster>
</question-page>

Bei dieser Methode ist die Kontrollfrage ein boolescher Typ, da sie in einem Bedingungsausdruck verwendet wird, der anzeigt, ob eine While-Schleife eingegeben werden sollte oder nicht. Nachdem die Schleife eingegeben ist, iteriert sie, bis die Angaben zu allen Haushaltsmitgliedern erfasst sind, wie folgt:

Abbildung 4. While-Schleife zum Erfassen der Haushaltsmitglieder verwenden
<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[Household Member Details]]>
           </title>
           <description id="PersonDetailsPage.Description">
               <![CDATA[Please enter the details for 
                 the next person in your household]]>
           </description>
           <icon image="sample_title_household" />
           <cluster>
               <title id="DetailsCluster.Title">
                   <![CDATA[Person Details]]>
               </title>
               <description id="DetailsCluster.Description">
                   <![CDATA[Enter the details for this 
                   person below]]>
               </description>
           <question id="firstName" mandatory="true">
               <label id="FirstName.Label">
                   <![CDATA[First Name:]]>
               </label>
           </question>
           <question id="lastName">
               <label id="lastName.Label">
                   <![CDATA[Last Name:]]>
               </label>
           </question>
           <question id="gender" mandatory="true">
               <label id="Gender.Label">
                   <![CDATA[Gender:]]>
               </label>
           </question>
           </cluster>
           <cluster>
               <question id="anotherMember" 
               control-question="true" 
                 control-question-type="IEG_BOOLEAN">
                   <label id="AnotherMember.Label">
                       <![CDATA[Is there another 
                       household member?]]>
                   </label>
               </question>
           </cluster>
      </question-page>
  </loop>
</condition>