1 - Úvod do jazyka JSON

Konfigurační soubor musí být validní JSON. Zkontrolovat je možné např. zde: https://jsonlint.com/.

Systém předpokládá, že celý definiční soubor dotazníku je jeden objekt.

Základní typy hodnot

Základní typy hodnot jsou:

  • textový řetězec (text) - jde o text v uvozovkách. Text nesmí přesahovat více řádků.
  • číslo - řada číslic, může před nimi být znaménko +/-
  • logický datový typ (boolean) - nabývá dvou hodnot - ano/ne (pravda/nepravda). Pravda se zapisuje jako true, nepravda jako false
  • objekt - viz dále
  • pole - viz dále

Objekt

Pro zápis se používají složené závorky. Objekt má parametry a hodnoty parametrů. Název parametru je v uvozovkách, po dvoujtečce následuje hodnota. Jednotlivé parametry s hodnotami musí být oddělené čárkami.

Zde je ukázaný jednoduchý objekt, který má parametr title a parametr name. Hodnota obou parametrů je textový řetězec.

{
  "title": "Test dotazniku na trauma",
  "name": "self_register_authorizer"
}

Jednotlivé parametry musí být oddělené čárkami. Hodnota parametru může být řetězec, číslo, další objekt nebo pole objektů (viz dále). Jednotlivé parametry jsou popsány u typů objektů. V současné době systém nekontroluje chybně pojmenované parametry a ignoruje je.

Pole objektů

Pole je množina seřazených objektů. Jestli parametry v objektu (viz výše) mají své jméno, jednotlivé prvky pole jsou určeny pouze pořadím. V JSONu moho pole obsahovat různé objekty nebo i další pole.

Pro zápis se používají hranaté závorky. Nápříklad stránky v dotazníku jsou zapsány jako pole:

{
  "title": "Test dotazniku na trauma",
  "authorizer": "self_register_authorizer",
  "pages": [
    {
      "id": "page1",
      "items": [
      ]
    }
  ]
}

pages i items jsou pole, které mohou obsahovat neomezené množství dalších objektů. Pro větší přehlednost se držíme praxe, že parametry typu pole jsou pojmenovány v množném čísle, tj. pages (stránky), items (položky).

2 - Základní části konfiguračního souboru dotazníku

Základní konfigurační soubor pro dotazníky vypdá následovně:

{
  "title": "Dotazník",
  "authorizer": "self_register_authorizer",
  "progress_bar": true,
  "questionnaire_locales": [
    "en",
    "sk",
    "cs"
  ],
  "globals": {
    "slider": {
      "min": 0,
      "max": 100,
      "step": 10
    }
  },
  "intro": {
    "cs": [
      "Vážení kolegové"
    ],
    "en": [
      "EN: Vážení kolegové,"
    ],
    "sk": [
      "Vážení kolegovia,"
    ]
  },
  "detailed_intro": {
    "cs": [
      "V následujících bodech máme povinnost Vás informovat o z....",
      "Veškerá práva a povinnosti při zpracování ..."
    ],
    "en": [
      "EN: V následujících bodech máme povinnost Vás informovat o z....",
      "EN: Veškerá práva a povinnosti při zpracování ..."
    ],
    "sk": [
      "V nasledujúcich bodoch máme povinnosť Vás informovať o ...",
      "Všetky práva a povinnosti pri spracovaní ..."
    ]
  },
  "consent": {
    "en": "EN: Četl jsem a souhlasím se zásadami ochrany osobních údajů",
    "cs": "Četl jsem a souhlasím se zásadami ochrany osobních údajů",
    "sk": "SK: Četl jsem a souhlasím se zásadami ochrany osobních údajů"
  },
  "pages": [
    {
      "type": "page",
      "id": "page-one",
      "items": [
        {
          "name": "sex",
          "type": "single_choice_radio",
          "text": {
            "en": "You are a",
            "cs": "Jste",
            "de": "Sind Sie"
          },
          "values": {
            "1": {
              "en": "Man",
              "cs": "Muž",
              "de": "Mann"
            },
            "0": {
              "en": "Woman",
              "cs": "Žena",
              "de": "Frau"
            }
          }
        }
      ]
    },
    {
      "type": "page",
      "id": "page-two",
      "items": [
      ]
    },
    {
      "type": "page",
      "id": "page-three",
      "items": [
      ]
    }
  ],
  "results": [
  ]
}


Tohle je trivální dotazník, který má úvod a potom se respondenta zeptá pouze na jedinou otázku - jestli je muž nebo žena.

Základní parametry:

  • title - Titul dotazníku
  • authorizer - modul pro konfiguraci přilašování uživatelů do dotazníku. Blíže viz Authorizer
  • progress_bar - má se zobrazovat na každé stránce dotazníku ukazatel z kolika procent už je dotazník vyplněn? true
    • ano, false - ne
  • questionnaire_locales - které jazyky má dotazník podporovat. Blíže viz podpora vícejazyčných dotazníků
  • globals - mechanismus pro globální nastavení parametrů u všech objektů konkrétního typu. V tomto případě si ušetříme psaní, kdy u každé otázky typu slider nastavíme spodní a hodní hodnotu a krok po kolika se posouvá

2.1 - Úvod dotazníku

Než je dotazník spuštěn a než se zobrazí první otázky, musí se zobrazit úvod a souhlas respondenta.

Úvod dotazníku
{
  "intro": {
    "cs": [
      "Vážení kolegové"
    ],
    "en": [
      "EN: Vážení kolegové,"
    ],
    "sk": [
      "Vážení kolegovia,"
    ]
  },
  "detailed_intro": {
    "cs": [
      "V následujících bodech máme povinnost Vás informovat o z....",
      "Veškerá práva a povinnosti při zpracování ..."
    ],
    "en": [
      "EN: V následujících bodech máme povinnost Vás informovat o z....",
      "EN: Veškerá práva a povinnosti při zpracování ..."
    ],
    "sk": [
      "V nasledujúcich bodoch máme povinnosť Vás informovať o ...",
      "Všetky práva a povinnosti pri spracovaní ..."
    ]
  },
  "consent": {
    "en": "EN: Četl jsem a souhlasím se zásadami ochrany osobních údajů",
    "cs": "Četl jsem a souhlasím se zásadami ochrany osobních údajů",
    "sk": "SK: Četl jsem a souhlasím se zásadami ochrany osobních údajů"
  }
}
  • intro - úvod dotazníku, zobrazuje se vždy - na obrázku začíná textem “Vážení kolegové”. Dále je náhled konfiguračního souboru zkrácený pro přehlednost.
  • detailed_intro - podrobný úvod, zobrazuje se po kliknutí na tlačítko “Klikněte sem pro detailní popis výzkumu”.
  • consent - přesný text k souhlasu se zaškrtávacími políčky. Bez zaškrtnutí tohoto políčka systém nepustí respondenta při vyplňování dále.

Všechny položky mohou být buďto přímo jako jednoduché textové řetězce, např:

"intro": "Vážení kolegové"

Nebo jako multijazykové řetězce:

{
  "intro": {
    "cs": [
      "Vážení kolegové"
    ],
    "en": [
      "Dear colleagues,"
    ],
    "sk": [
      "Vážení kolegovia,"
    ]
  }
}

Blíže viz Lokalizace dotazníků do více jazyků

v samostatném bloku nad tlačítkem Nejsem robot (reCaptcha).

2.2 - Stránky v dotazníku

V objektu dotazník questionnaire je parameter pages, což je pole, ve kterém jsou jednotlivé stránky. Pole znamená že položky jsou uzavřeny do hranatých závorek [] a jsou v něm vloženy seřazené objekty typu page.

{
  "pages": [
    {
      "type": "page",
      "id": "page-one",
      "items": [
        {
          "name": "sex",
          "type": "single_choice_radio",
          "text": "Jste",
          "values": {
            "m": "Muž",
            "f": "Žena"
          }
        }
      ]
    },
    {
      "type": "page",
      "id": "page-two",
      "items": [
        {
          "name": "sex",
          "type": "single_choice_radio",
          "text": "Jste",
          "values": {
            "m": "Muž",
            "f": "Žena"
          }
        }
      ]
    }
  ]
}

Objekt typu page

V dotazníku v poli pages jsou jednotlivé stránky. Stránka je definována jako objekt s paremetre "type": "page".

Například

{
  "type": "page",
  "id": "page-two",
  "display_conditions": [
    {
      "field": "family_status",
      "value_in": [
        "1",
        "3"
      ]
    }
  ],
  "items": [
    {
      "name": "sex",
      "type": "single_choice_radio",
      "text": "Jste",
      "values": {
        "m": "Muž",
        "f": "Žena"
      }
    }
  ],
  "conditions": [
    {
      "field": "pohlavi",
      "value": "m",
      "jump": "page-three"
    }
  ],
  "auto_forward": 25
}

Parametry:

  • id - jedinečný identifikáto stránky, nejlépe textový řetězec. Je povinnou položkou, bez něj nefunguje náhodné pořadí stránke. Pokud je duplicitní, tak to způsobí chybu při načtení dotazníku.
  • items - pole jednotlivých otázek (viz Typy otázek nebo sad otázek (viz Sady otázek)
  • display_conditions - podmínky pro zobrazení stránky, které se vyhodnocují při načítání stránky a ovlivňují, jestli se stránka zobrazí nebo přeskočí. Hodnota, v tomto případě pole pohlavi už musí být v databázi uložená. Blíže viz Podmínečné zobrazení
  • conditions - pole podmínek, které se vyhodnocují po odeslání odpovědí stránky. Tato položka vyhodnotí, jestli pole (field) pohlaví má hodnotu m. Pokud ano, tak přeskočí (jump) na stránku page-three. Mechanismus conditions je poměrně neobratný, protože je potřeba používat více stránek.
  • auto_forward - po zadaném počtu sekund, se stránku automaticky přesměruje na další v pořadí. Používá se pro stránky, které se mají zobrazit pouze na určitou dobu. Pokud na dané stránce má být nějaká

2.3 - Lokalizace dotazníků do více jazyků

Vícejazyčné dotazníky

Podpora vícejazyných dotazníků (lokalizace) má tři úrovně.

  1. Úroveň systému - zde jsou přeloženy různé systémové hlášky (tlačítka apod). Aktuálně jsou tyto prvky přeležné do jazyků čeština, angličtina, němčina, slovenština.

  2. Úroveń dotazníků - top level parameter questionnaire_locales musí obsahovat pole s podporovanými jazyky tohoto dotazníku. Jazyky jsou uváděny zkrácenými jazykovými ISO kódy (ISO 639-1)

  3. Úroveň jednotlivých textů. Například většina otázek má parametr text, který se zobrazí u samotné otázky. Například jednoduchá otázka na pohlaví:

Úvod dotazníku
{
  "name": "sex",
  "type": "single_choice_radio",
  "text": "Jste",
  "values": {
    "m": "Muž",
    "f": "Žena"
  }
}

Zobrazuje respondentovi popisek Jste a hodnoty Muž a Žena. Každý zobrazovaný řetězec může být lokalitován jako objekt, kde parametry jsou názvy jazyků a hodnoty potom přeložené jazyky. Lokalizovaná otázka potom vypadá takto:

{
  "name": "sex",
  "type": "single_choice_radio",
  "text": {
    "en": "You are a",
    "cs": "Jste",
    "de": "Sind Sie"
  },
  "values": {
    "1": {
      "en": "Man",
      "cs": "Muž",
      "de": "Mann"
    },
    "0": {
      "en": "Woman",
      "cs": "Žena",
      "de": "Frau"
    }
  }
}

Tento přístup jsme zvolili, protože v praxi se ukázalo, že udržovat paralelně 3 jazykové verze téhož rozsáhlého dotazníku jako samostatné soubory představuje velmi vážnou hrozbu pro duševní zdraví výzkumníků.

Je také možné omezit zobrazení některých textů či voleb v jednotlivých jazycích tím, že místo textového řetězce uvedeme speciální hodnotu false (nepravda).

Například otázka na etnicitu:

{
  "name": "ethnicity",
  "type": "single_choice_radio",
  "text": {
    "en": "Please, select your ethnicity",
    "cs": "Jaká je Vaše etnická příslušnost?",
    "de": "Bitte, wählen Sie Ihre Ethnizität aus"
  },
  "values": {
    "1": {
      "en": "Asian",
      "cs": "Asiat",
      "de": "Asiatisch"
    },
    "2": {
      "en": "White",
      "cs": "Běloch",
      "de": "Weiß"
    },
    "3": {
      "en": "Black or African American",
      "cs": "Afričan nebo Afro-Američan",
      "de": "Afrikaner oder Afroamerikaner"
    },
    "4": {
      "en": "Hispanic or Latino or Spanish Origin of any race",
      "de": "Hispanoamerikanisch oder Latino oder andere spanische Herkunft",
      "cs": false
    },
    "5": {
      "en": "Native Hawaiian or Other Pacific Islander",
      "de": false,
      "cs": false
    },
    "6": {
      "en": "American Indian or Alaska Native",
      "de": false,
      "cs": false
    }
  }
}

V tomto případě se hodnoty 1, 2 a 3 zobrazí ve všech jazykových mutacích dotazníku. Hodnota 4 se zobrazí pouze v německé a anglické verzi, hodnota 5 a 6 potom pouze v anglické jazykové mutaci. Předpokládáme zde, že mezi německy mluvícími respondenty nebudou Havaji ani Indiáni.

Systém je koncipován maximálně flexibilně, takže přeložené a nepřeložené řetězce je možné používat vedle sebe i v jednotlivých otázkách. Zde například hodnoty pro tabulku:

{
  "values": {
    "1": {
      "en": "Strongly disagree (1)",
      "cs": "Naprosto nesouhlasím (1)"
    },
    "2": "(2)",
    "3": "(3)",
    "4": "(4)",
    "5": "(5)",
    "6": "(6)",
    "7": {
      "en": "Strongly agree (7)",
      "cs": "Naprosto souhlasím  (7)"
    }
  }
}

Hodnoty 1 a 7 budou přeloženy, zatímco hodnoty 2 - 6 zůstávají stejné a není potřeba pro ně vytvářet pole jazykových hodnot.

2.4 - Moduly pro opakované využití

Pro opakované využívání je možné využívat moduly. Může jít o opakované použití v rámci jednoho dotazníku nebo v různých dotaznících. Typické scénáře mohou zahrnovat:

  1. Máte v rámci dotazníku stejnou sadu otázek, ale používáte ji v jiném kontextu. Příklad použití je napři v dotazníku FAST Elemementary Parent Post. Ptáme se na 9 různých aktivit v projektu pomocí stejné sady otázek - tj. jak byla aktivita srozumitelná, přínosná, zajímavá a jakou nám chtějí nechat zpětnou vazbu. Sadu otázek včetně hodnot máme v modulu a ten načteme v rámci jednoho dotazníku 9x. Tento scénář je popsán dále v použitých příkladech
  2. Máte standardizovaný nástroj - například Škála vnímaného stresu (PSSS), který chcete používat v různých výzkumech. Než abyste dotazník opakovaně kopírovali do dalších a dalších výzkumů, použijete jej jako modul.

Definice modulů

V adresáři questionnaires je podadresář modules. Moduly mají tento formát:

{
  "questions": [
    {
      "type": "wrapper",
      "name" : "activity_feedback",
      "items": [
        {
          "type": "question_table",
          "name": "params",
          "text": "Tato aktivita pro mě byla:",
          "values": {
            "1": "1 - Vůbec",
            "2": "2",
            "3": "3",
            "4": "4",
            "5": "5",
            "6": "6",
            "7": "7",
            "8": "8",
            "9": "9",
            "10": "10 - Maximálně"
          },
          "questions": [
            {
              "name": "understandable",
              "text": "Srozumitelná – bylo snadné pochopit, co máme dělat"
            },
            {
              "name": "interesting",
              "text": "Zajímavá – aktivita nás bavila, bylo příjemné ji dělat"
            },
            {
              "name": "helpful",
              "text": "Přínosná  -dozvěděl/a jsem se něco nového nebo jsem se něco nového naučil/a"
            }
          ]

        },
        {
          "type": "text_value",
          "name": "text",
          "text": "Chcete nám k této aktivitě ještě něco sdělit? Prosím napište nám to.",
          "rows": 4,
          "optional": true
        }
      ]
    }
  ]
}

Musí zde být obsažená položka questions. V jejím poli se potom nachází jedna nebo více otázek. Pokud je otázek více, tak při vložení do dotazníku musíme specifikovat, kterou otázku z dotazníku chceme využít pomoci direktivy section.

Dále zde vidíme použitý objekt Wrapper, který zajistí, že se budou všechny otázky vkládat dohromady. Ve wrapperu potom máme jednu tabulku a jednu otázku s volným textem.

Vložení modulu do výzkumu

Moduly se vkládají pomocí direktivy "type": "import":

    {
      "type": "import",
      "source": "FAST/activity_feedback"
      "name": "feedback_lottery",
    }

Direktiva source určuje odkud se modul načítá. Výchozí bod je adresář modules, zde je použitý jeho podadresář FAST (obsahuje moduly pro použití v Programu FAST).

Důležitá je direktiva name. Ta určuje, jaký prefix se vloží před název proměnné. Díky ní je možné použít modul ve výzkumu opakovaně, takže výsledné proměnné se budou jmenovat odlišně. Výsledné proměnné v tomto případě se budou jmenovat:

  • feedback_lottery_params_understandable
  • feedback_lottery_params_interesting
  • feedback_lottery_params_helpful
  • feedback_lottery_text

Logika složeného názvu:

  • feedback_lottery - je vložená v direktivě import
  • params - společná předpona tabulky
  • understandable, interesting, helpful - názvy řádků v tabulkách

Pokud potom použijeme další import, například v této podobě:

    {
      "type": "import",
      "source": "FAST/activity_feedback"
      "name": "feedback_family_group",
    }

Tak dostaneme následující proměnné:

  • feedback_family_group_params_understandable
  • feedback_family_group_params_interesting
  • feedback_family_group_params_helpful
  • feedback_family_group_text

2.5 - Náhodné pořadí

Aby se předešlo primingu v rámci dotazníků - https://en.wikipedia.org/wiki/Priming_(psychology), tak je možn u vybraných částí dotazníků měnit pořadí položek.

Je možné náhodně měnit pořadí u:

Nastavení náhodného pořadí je určeno parametrem shuffle. K němu je ve všech případech možné nastavit ještě pomocné parametry:

  • "shuffle_offset_start": 1 - kolik položek ze začátku vyřadit z míchání (tj. kolik stránek zůstane v původním pořadí)
  • "shuffle_offset_end": 1 - kolik položek od konce se vyřadí z míchání

Položkami zde chápeme buďto jednotlivé stránky, položky na stránce, řádky v tabulce nebo položky otákzy. Ilustrovat to můžeme u dotazníku. Pokud máme stránky page-1 až page-5 a oba offsety nastavím na 1:

{
  "title": "Dotazník",
  "shuffle": true,
  "shuffle_offset_start": 1,
  "shuffle_offset_end": 1,
  "pages": [
    {
      "id": "page-1"
    },
    {
      "id": "page-2"
    },
    {
      "id": "page-3"
    },
    {
      "id": "page-4"
    },
    {
      "id": "page-5"
    }
  ]
}

Tak výsledné možné kombinace stránek jsou:

  • page-1, page-2, page-3, page-4, page-5
  • page-1, page-2, page-4, page-3, page-5
  • page-1, page-3, page-2, page-4, page-5
  • page-1, page-3, page-4, page-2, page-5
  • page-1, page-4, page-3, page-2, page-5
  • page-1, page-4, page-2, page-3, page-5

2.6 - Podmínečné zobrazení

V průběhu vyplňování potřebujete, pokud se na základě dat, která uživatel vyplnil některé otázky nebo celé stránky zobrazí nebo naopak skryjí. Například pokud máte sadu utázek pouze pro ženy, tak tyto otázky budete chtít zobrazit pouze pokud předtím respondent vybral odpověď “žena”.

Podmínky statické

Statické podmínky předpokládají, že data už byla vyplněna na předcházejících stránkách a v tuto chvíli jsou už uloženy v databázi.

Statická podmínka se může týkat celé stránky, nebo se může týkat i jediné otázky.

Pokud se statická podmínka týká celé stránky, tak při nesplnění podmínky se stránka přeskočí. Zde například, pokud na otázku family_status byla vybrána odpověď married (ženatý) nebo in_relationship (ve vztahu), tak se zobrazí modul KMSS, což je dotazník Kansas Marital Satisfaction Scale. Pokud vybere respondent jinou hodnotu, stránka se přeskočí.

{
  "type": "page",
  "id": "page-kmss",
  "display_conditions": [
    {
      "field": "family_status",
      "value_in": [
        "married",
        "in_relationship"
      ]
    }
  ],
  "items": [
    {
      "name": "KMSS",
      "type": "import",
      "source": "KMSS"
    }
  ]
}


Pro jednotlivou otázku by stejná podmínka vypada následovně:


{
  "name": "spokojenost ve vztahu",
  "type": "single_choice_radio",
  "text": "Jste ve vztahu spokojeni?",
  "values": {
    "0": "Ne",
    "1": "Ano"
  },
  "condition": [
    {
      "field": "family_status",
      "value_in": [
        "married",
        "in_relationship"
      ]
    }
  ]
}


Jsou podporovány následující typy podmínek:

  • value: "1" - hodnota musí být 1
  • value_in: ["1", "2", "3", "4"] - hodnota musí nabývat jedné z hodnot, uvedených v poli
  • value_not: "1" - hodnot NENÍ 1
  • value_not_in: ["1", "2", "3", "4"] - hodnota NESMÍ nabývat žádné z hodnot v poli
  • tolerant: true|false - výchozí hodnota je false. Standardně pokud systém vyhodnocuje podmínku a nenajde příslušnou proměnnou v už uložených datech respondenta, tak skončí s chybou ConfigurationSystemException. V některých situací je ale žádoucí, aby podmínka byla tolerantní, takže pokud je nastavena hodnota tolerant: true, tak potom systém tuto podmínku vyhodnotí jako nesplněnou, pokud nenajde zdrojová data a nebude vyhazovat chybu.

Parametr display_conditions nebo conditions je pole, takže je možné zadat více podmínek. Vyphodnocování probíhá v pořadí jak jsou podmínky zadány a pro zobrazení otázky nebo stránky stačí, pokud jedna podmínka je vyhodnocena pozitivně. Podmínky jsou tedy ve vztahu nebo.

Podmínky jsou vyhodnocovány i při odeslání, takže pokud je otázka zobrazena, tak se kontroluje i jestli je vyplněná.

Podmínky dynamické

Dynammické podmínky se používají, pokud se dynamicky mění zobrazení formuláře přímo v prohlížeči, tj. při zaškrtnutí některé otázky se přímo zobrazí nebo naopak skryjí.

Jednoduchá uzkázka:

{
  "type": "page",
  "id": "page101",
  "items": [
    {
      "name": "sex",
      "type": "single_choice_radio",
      "text": "Jste:",
      "values": {
        "0": "Muž",
        "1": "Žena"
      }
    },
    {
      "name": "sex_confirmation",
      "type": "single_choice_radio",
      "text": "Skutečně jste žena?",
      "values": {
        "0": "Ano",
        "1": "Ne"
      },
      "display_if": {
        "what": "sex",
        "value": "1"
      }
    },
    {
      "type": "statement",
      "name": "final",
      "text": "End of All Questions."
    }
  ]
}

Na této stránkce, pokud vybereme odpověď Muž, tak se nezobrazí další otázka:

Úvod dotazníku

Pokud vybereme odpověď Žena, tak se zobrazí doplňující otázka:

Úvod dotazníku

Dynamická podmínka se vyhodnocuje i při odeslání. Pokud je splněná, tak se u zobrazené otázky kontroluje, jestli je vyplněná. Takže za těchto okolností, pokud respondent vybere že je Žena a nedoplní, jestli je skutečně žena, tak mu systém nedovolí pokračovat na další stránku.

Úvod dotazníku

Je možné zaráz odkazovat více hodnot. Tyto hodnoty potom musíme uvést jako pole. Můžeme odkazovat na různé hodnoty pro single_choice nebo na více hodnot multiple_choice. Např:

{
  "display_if": {
    "what": "nemoci",
    "value": [
      "1",
      "2",
      "3",
      "4"
    ]
  }
}

Přeskakování stránek

Poslední možností zpracování podmínek je vyhodnocení stránky po jejím uložení a následně přeskočení na jinou stránku. Klíčový je parametr jump, který určuje na kterou stránku, označenou pomocí id: parametru po vyplnění a úspěšném vyhodnocení podmínky systém přeskočí.

{
  "pages": [
    {
      "type": "page",
      "id": "page_1",
      "items": [
        {
          "name": "sex",
          "type": "single_choice_radio",
          "text": "Jste:",
          "values": {
            "m": "Muž",
            "f": "Žena"
          }
        }
      ],
      "conditions": [
        {
          "field": "sex",
          "value": "m",
          "jump": "page_for_all"
        }
      ]
    },
    {
      "type": "page",
      "id": "page_for_women",
      "items": [
        {
          "name": "question_for_women%_1",
          "type": "single_choice_radio",
          "text": "1. Otázka pouze proženy",
          "values": {
            "0": "Ano",
            "1": "Ne"
          }
        },
        {
          "name": "question_for_women_2",
          "type": "single_choice_radio",
          "text": "2. Otázka pouze proženy",
          "values": {
            "0": "Ano",
            "1": "Ne"
          }
        }
      ]
    },
    {
      "type": "page",
      "id": "page_for_all",
      "items": [
        {
          "name": "question_for_everyone",
          "type": "single_choice_radio",
          "text": "Otázka pro všechny",
          "values": {
            "0": "Ano",
            "1": "Ne"
          }
        }
      ]
    }
  ]
}


V tomto dotazníku pokud respondent vyplní hodnotu “Muž”, tak přeskočí na stránku page_for_all. Pokud vybere hodnotu žena, tak se zobrazí stránka s otázkami “1. a 2. otázka pouze pro ženy”.

Pomocí této logiky jde realizovat velmi složité postupy pro řízení průchodu dotazníkem. Nicméně oproti výše uvedeným metodám display_conditions je tento způsob poměrně složitý a komplikovaný na otestování.

2.7 - Zobrazení obázků

Aby se předešlo situacím, že respondent v online dotazníku uvidí obrázek v enormně široké podobně, v konfiguračním souboru se přidá k obrázku následující parametr: "orientation": "vertical" . Tento parametr zajistí adekvátní velikost obrázku. Po zakomponování tohoto parametru je vypadá výsledná konfigurace např. takto:

      {
        "type": "page",
        "id": "page-RMET1",
        "items": [
          {
            "name": "RMET_1",
            "type": "image_choice",
            "orientation": "vertical",
            "text": {
              "en": false,
              "cs": "Který emoční výraz nejlépe vystihuje obrázek obličeje?",
              "de": false
            },
            "image": "RMET_1.png",
            "values": {
              "1": "hravý",
              "2": "utěšující",
              "3": "podrážděný",
              "4": "znuděný"
            }
          }
        ]
      }

2.8 - Výsledky

Systém umí vyhodnocovat výsledky dotazníků a zobrazovat je respondentům. Toto zobrazení dotazníků funguje pouze u respondentů, kteří přišli přes web. Respondenti z jiných brokerů jsou hned po vyplnění odeslání zpět na stránky brokera.

{
  "results": [
    {
      "type": "single_value_result",
      "name": "GSES",
      "algorithm": "sum",
      "min_value": 1,
      "max_value": 4,
      "question_names": [
        "GSES_1",
        "GSES _2",
        "GSES _3",
        "GSES _4",
        "GSES_5",
        "GSES_6",
        "GSES _7",
        "GSES _8"
      ],
      "reversed_question_names": [],
      "histogram": true,
      "debug": false,
      "display": {
        "header": "Prožívání hanby a viny",
        "body": "Prožívání pocitů zahanbení a viny, které odpovídá na konkrétní jednání, je podstatná a usměrňující síla pro život jedince i společnosti. Nadměrné a neadekvátní prožívání těchto pocitů však může život člověka ovlivňovat negativně a může se stávat překážkou jeho dalšího růstu. Vaše průměrné skóre je: <b>{numeric_result}</b>, přičemž průměrné skóre zjištěné u předchozího online vzorku české populace bylo 2,1."
      }
    },
    {
      "type": "single_value_result",
      "name": "DSES",
      "algorithm": "sum",
      "min_value": 1,
      "max_value": 6,
      "question_names": [
        "DSES_1",
        "DSES_2",
        "DSES_3",
        "DSES_4",
        "DSES_5",
        "DSES_6",
        "DSES_7",
        "DSES_8",
        "DSES_9",
        "DSES_10",
        "DSES_11",
        "DSES_12",
        "DSES_13",
        "DSES_14",
        "DSES_15"
      ],
      "reversed_question_names": [],
      "histogram": true,
      "debug": false,
      "display": {
        "header": "Spiritualita",
        "body": "V testu spirituality jste dosáhli výsledku: <b>{text_result}</b>. V míře spirituality tedy dosahujete vyšších výsledků než {percentil}% lidí, kteří vyplnili tento dotazník před Vámi. Průměrné skóre v české populaci je 27,6 bodů (medián 21,5)."
      }
    },
    {
      "type": "single_value_result",
      "name": "HSPS_cutoff",
      "algorithm": "cutoff_greater",
      "cutoff_value": 5,
      "question_names": [
        "HSPS_1",
        "HSPS_2",
        "HSPS_3",
        "HSPS_4",
        "HSPS_5",
        "HSPS_6",
        "HSPS_7",
        "HSPS_8",
        "HSPS_9",
        "HSPS_10",
        "HSPS_11",
        "HSPS_12",
        "HSPS_13",
        "HSPS_14",
        "HSPS_15",
        "HSPS_16",
        "HSPS_17",
        "HSPS_18",
        "HSPS_19",
        "HSPS_20",
        "HSPS_21",
        "HSPS_22",
        "HSPS_23",
        "HSPS_24",
        "HSPS_25",
        "HSPS_26",
        "HSPS_27"
      ],
      "debug": false,
      "display": {
        "header": "Senzitivita",
        "rated_body": {
          "15": [
            "<p>Tento dotazník byl zaměřen na vysokou citlivost, která se týká zhruba 10-20% populace. ",
            "Vysoce citliví lidé vnímají okolní vlivy s vyšší intenzitou než ostatní a často i více vlivů najednou. ",
            "Vyšší citlivost se může projevovat jako intenzivnější vnímání některými (nebo všemi pěti) smysly nebo jako intenzivnější vnímání emocí a nálad druhých lidí. Není výjimkou, ",
            "že se u vysoce citlivých lidí projevuje kombinace obou druhů vyšší citlivosti. Vysoká citlivost jde ruku v ruce s vyšší tendencí být otevřený vůči novému, ",
            "|ale taktéž s vyššími nároky na zvládání různých podnětů.</p>",
            "<p>Na základě zjednodušeného vyhodnocení tohoto testu zřejmě do této kategorie nespadáte,",
            "pokud jste ale u více otázek dali 7 bodů, není vyloučené, že jste vysoce citlivým člověkem a doporučujeme Vám v tom případě projít si další internetové zdroje, ",
            "např. níže uvedené odkazy. I pokud se toto téma netýká Vás osobně, zcela jistě se navíc týká někoho z Vašich blízkých či známých:</p>",
            "<ul><li><a href='https://psychologie.cz/strach-z-odlisnosti/'>https://psychologie.cz/strach-z-odlisnosti/</a></li>",
            "<li><a href='https://hledani-reseni.cz/vysoce-citlivi-lide/'>https://hledani-reseni.cz/vysoce-citlivi-lide/</a></li>",
            "<li><a href='http://nadani-citlivosti.cz/nejcastejsi-otazky/'>http://nadani-citlivosti.cz/nejcastejsi-otazky/</a></li></ul>"
          ],
          "1000": [
            "<p>Vysoce citliví lidé vnímají okolní vlivy s vyšší intenzitou než ostatní a často i více vlivů najednou.",
            "Vyšší citlivost se může projevovat jako intenzivnější vnímání některými (nebo všemi pěti) smysly nebo jako intenzivnější vnímání emocí a nálad druhých lidí.",
            "Není výjimkou, že se u vysoce citlivých lidí projevuje kombinace obou druhů vyšší citlivosti.",
            "Na základě výsledku tohoto testu jste pravděpodobně vysoce citlivá osoba. Vysoká citlivost jde ruku v ruce s vyšší tendencí být otevřený vůči novému, ale taktéž s vyššími nároky na zvládání různých podnětů. ",
            "Žádný psychologický test však není tak přesný, aby na něm člověk založil svůj život. Z vlastní zkušenosti pravděpodobně sami nejlépe víte, zda se na Vás toto označení hodí.",
            "Pokud jste se s touto otázkou dosud nesetkali, doporučujeme Vám projít si další internetové zdroje, např. níže uvedené odkazy:</p>",
            "<ul><li><a href='https://psychologie.cz/strach-z-odlisnosti/'>https://psychologie.cz/strach-z-odlisnosti/</a></li>",
            "<li><a href='https://hledani-reseni.cz/vysoce-citlivi-lide/'>https://hledani-reseni.cz/vysoce-citlivi-lide/</a></li>",
            "<li><a href='http://nadani-citlivosti.cz/nejcastejsi-otazky/'>http://nadani-citlivosti.cz/nejcastejsi-otazky/</a></li></ul>"
          ]
        }
      }
    },
    {
      "type": "single_value_result",
      "name": "HSPS_average",
      "algorithm": "average",
      "min_value": 1,
      "max_value": 7,
      "question_names": [
        "HSPS_1",
        "HSPS_2",
        "HSPS_3",
        "HSPS_4",
        "HSPS_5",
        "HSPS_6",
        "HSPS_7",
        "HSPS_8",
        "HSPS_9",
        "HSPS_10",
        "HSPS_11",
        "HSPS_12",
        "HSPS_13",
        "HSPS_14",
        "HSPS_15",
        "HSPS_16",
        "HSPS_17",
        "HSPS_18",
        "HSPS_19",
        "HSPS_20",
        "HSPS_21",
        "HSPS_22",
        "HSPS_23",
        "HSPS_24",
        "HSPS_25",
        "HSPS_26",
        "HSPS_27"
      ],
      "histogram": true,
      "debug": false,
      "display": {
        "body": [
          "Vaše průměrné skóre je: <b>{numeric_result}</b>.",
          "V současné době bohužel nemáme k dispozici reprezentativní česká data. Uvádíme ale průměrné hodnoty získané na online vzorku v ČR a dalších vzorcích v jiných zemích ",
          "(pozor, ani zde se ale nejedná o reprezentativní vzorky, z těchto čísel tedy nelze usuzovat na hodnoty v celkové populaci, ale je potřeba je brát jako orientační).",
          "<ul><li>Předchozí online vzorek české populace (51 % žen): průměr = 3,79 (medián 3,89) </li>",
          "<ul><li>Vzorek 904 studentů psychologie z USA (58 % žen): průměr = 4.09 </li>",
          "<li>Online vzorek 357 respondentů z USA (46 % žen): průměr = 3.95</li>",
          "<li>Německý vzorek 898 respondentů (73 % žen): průměr = 4.54</li></ul"
        ]
      }
    },
    {
      "type": "single_value_result",
      "name": "BFI-N",
      "algorithm": "sum",
      "min_value": 1,
      "max_value": 7,
      "question_names": [
        "BFI_N_1",
        "BFI_N_3",
        "BFI_N_4",
        "BFI_N_6",
        "BFI_N_8"
      ],
      "reversed_question_names": [
        "BFI_N_2",
        "BFI_N_5",
        "BFI_N_7"
      ],
      "histogram": true,
      "debug": false,
      "display": {
        "header": "Neuroticismus",
        "body": "Nízká míra neuroticismu je spjatá s odolností vůči stresu, duševní stabilitou a vyrovnaností. Naopak vysoká míra neuroticismu jde ruku v ruce s duševní disharmonií a častějším, intenzivnějším prožíváním negativních citových stavů jako smutek, obavy, vina, hněv. Vaše průměrné skóre je: <b>{numeric_result}</b>, přičemž průměrné skóre u české populace nabývá hodnoty 22,7."
      }
    },
    {
      "type": "single_value_result",
      "name": "self_esteem",
      "algorithm": "average",
      "question_names": [
        "Self_esteem_1",
        "Self_esteem_3",
        "Self_esteem_4",
        "Self_esteem_7",
        "Self_esteem_10"
      ],
      "histogram": true,
      "debug": false,
      "display": {
        "header": "Vztah k sobě",
        "rated_body": {
          "1": "Máte pozitivní vztah k sobě a dobrý pocit vlastní hodnoty (podobně jako 6 % Čechů).",
          "2": "Máte poměrně dobrý vztah k sobě a pocit vlastní hodnoty (podobně jako 65 % Čechů).",
          "10000": "Zdá se, že se Vám dosud nedaří důvěřovat pocitu Vaší vlastní hodnoty (podobně jako 22 % Čechů)."
        }
      }
    },
    {
      "type": "single_value_result",
      "name": "RSPM",
      "algorithm": "check_values",
      "correct_answers": {
        "RSPM_11": "4",
        "RSPM_24": "5",
        "RSPM_28": "8",
        "RSPM_36": "2",
        "RSPM_43": "5",
        "RSPM_48": "6",
        "RSPM_49": "7",
        "RSPM_53": "1",
        "RSPM_55": "1"
      },
      "histogram": true,
      "debug": false,
      "display": {
        "header": "Inteligenční kvocient:",
        "body": "Tento test poskytuje velmi hrubý odhad inteligenčního kvocientu (IQ). Výsledky testu naznačují, že Vaše IQ je vyšší než u {percentil_high}% lidí, kteří absolvovali test před Vámi. Vzhledem k těmto lidem, čítá odhad vašeho IQ xxxxxx bodů. Je však nutné zdůraznit, že výsledek se může lišit od Vaší skutečné míry IQ. Váš výkon též může být ovlivněn řadou faktorů jako je například únava, pozornost apod. Z těchto důvodů je na místě Váš výsledek (IQ) nepřeceňovat."
      }
    },
    {
      "type": "complex_value_result",
      "name": "eba-ret",
      "algorithm": "third_faces",
      "face_values": {
        "anger": "Hněv",
        "disgust": "Znechucení",
        "fear": "Strach",
        "joy": "Radost",
        "neutral": "Neutrální",
        "sadness": "Smutek"
      },
      "question_names": [
        "EBA_RET1",
        "EBA_RET2",
        "EBA_RET3",
        "EBA_RET4",
        "EBA_RET5",
        "EBA_RET6",
        "EBA_RET7",
        "EBA_RET8",
        "EBA_RET9",
        "EBA_RET10"
      ],
      "spider_chart": true,
      "debug": false,
      "display": {
        "header": "Vybrané emoce",
        "body": [
          "<p>Vybrané emoce ve Vašem prožívání vztahů: {selected_text}</p>"
        ]
      }
    },
    {
      "type": "single_value_result",
      "name": "TEQ",
      "algorithm": "sum",
      "min_value": 1,
      "max_value": 5,
      "question_names": [
        "TEQ_1",
        "TEQ_CON_2",
        "TEQ_3",
        "TEQ_CON_4",
        "TEQ_5",
        "TEQ_CON_14",
        "TEQ_16"
      ],
      "reversed_question_names": [],
      "histogram": true,
      "debug": false,
      "display": {
        "header": "Empatie",
        "body": "V testu empatie jste dosáhli výsledku: <b>{text_result}</b>. Jinými slovy, v míře empatie dosahujete lepších výsledků než {percentil}% lidí, kteří vyplnili dotazník před Vámi. Míra empatie souvisí s tím, jak jsme citliví vůči pozitivním či negativním emocím druhých lidí. Empatie též souvisí s naší schopností rozpoznávat emoce a ochotou zajímat se o duševní svět druhého člověka."
      }
    },
    {
      "type": "questionnaire_note",
      "heading": "Poděkování",
      "note": "Děkujeme za vaše odpovědi v dotazníku. Vážíme si času, který jste věnoval/a zodpovězení našich otázek. Pokud si přejete získat kopii výsledků, jakmile bude průzkum ukončen, uveďte prosím níže vaši e-mailovou adresu. Vaše kontaktní údaje nebudou v žádném případě spojeny s vašimi odpověďmi z dotazníku."
    }
  ]
}

2.9 -

3 - Autorizace respondentů do dotazníku

Dotazníky mají různé potřeby, jak registrovat a popřípadě autorizovat respondenty. Proto systém podporu 4 autorizační mechanismy. Tyto mechanismy se primárně vztahují na respondenty, kteří přicházejí sami na stránky Dotazníků. Nově už funkcionalitu autorizačních mechanismů částečně přebírají Zprostředkovatelé (brokeři)

Typ autorizace je specifikován parametrem authorizer v top level konfiguraci dotazníku.

Implicitní autorizace

{
  "authorizer": "self_register_authorizer"
}

SelfRegisterAuthorizer je nejjednoduší autorizační mechanismus. Nový respondent, který začne vyplňovat dotazník, obdrží unikátní kód. Respondent není žádným způsobem kontrolován. Pokud tentýž respondent přijde znovu, tak dostane nový kód a není možné zkontrolovat, jestli náhodou už dotazník nevyplnil dříve.

Autorizace předem distribuovaným kódem

{
  "authorizer": "predefined_code_authorizer",
  "authorizer_config": {
    "code_file_name": "oxytocin-access-codes.csv"
  }
}

Při zahájení dotazníku systém po respondentovi požaduje kód, který mu byl předán předem. Toto scháma bylo použito například při odběru slin, kdy kód by na zkumavce a následně se stejným kódem potom respondent vypňoval dotazník. Každý kód lze použít právě jednou.

code_file_name je název souboru, ve který jsu uloženy kódy, jeden kód na řádek. Příklad použitých kódů:

SWIG
RNUF
REPY
DFWZ
TGQG
OWJZ
MIWY
AUTM

Autorizace předem distribuovaným kódem nebo implicitní autorizace

{
  "authorizer": "optional_predefined_code_authorizer",
  "authorizer_config": {
    "code_file_name": "oxytocin-access-codes.csv"
  }
}

Funguje jako oba výše uvedené mechanismy dohromady. Respondent je vyzván, aby zadal kód. Pokud ho zadá, tak se kód zkontroluje a pokud odpovídá a ještě nebyl použit, tak je respondent zaregistrován. Dále ale může respondent vstoupit bez kódu a potom je mu přidělen nový unikátní kód.

Znovupoužití kód po již vyplněném dotazníku

{
  "authorizer": "reuse_code_authorizer",
  "parent_research_id": 16
}

Pokud už respondent už dříve vyplnil jiný dotazník, tak na konci se mu může zobrazit jeho kód s poznámkou, aby si ho uložil. A potom s tímto kódem respondent vstoupí do nového dotazníku, čímž je zajištěno párování respondentů napříč dotazníky (retesty a podobně).

parent_research_id označuje id (číselný identifikátor) předchozího dotazníku. Tady je syntaxe poněkud nekonzistentní, protože paramer není uzavřen v bloku authorizer_config.

4 - Typy otázek

Společné parametry otázek

Otázka musí být vždy obsažena v poli items stránky. Jednoduchá otázka vypadá například takto:

{
  "name": "family_status",
  "type": "single_choice_radio",
  "text": "Rodinný stav",
  "values": {
    "1": "zadaný/á",
    "2": "nezadaný/á",
    "3": "ženatý, vdaná",
    "4": "rozvedený/á",
    "5": "vdovec, vdova",
    "6": "řeholník, řeholnice, kněz"
  }
}

Společné povinné parametry jsou:

  • name interní název otázky. Respondent ho nevidí. Pod tímto názvem je potom otázka označena v exportu. Tento název je využitý také u podmínek pro zobrazení (display_conditions, display_if) a skoků (page conditions).
  • type - typ otázky. Dostupné typy jsou popsány dále. Zde je o výběr z jedné hodnoty.
  • text - text otázky, který se zobrazí uživateli. Může být lokalizován do různých jazyků - viz Lokalizace

Volitelné parametry potom jsou:

optional

Ve výchozím stavu jsou všechny otázky povinné, takže pokud uživatel otázku nevyplní, tak po odeslání se stránka s otázkou zobrazí znovu, červeně zvýrazněná a nepustí respondenta dál, dokud otázku nevyplní.

Pokud má být otázka volitelná, tak stačí když bude mít nastaveno optional: true.

display_conditions

Při načítání stránky se kontroluje, jestli testovaná hodnota už je v databázi a má požadovanou hodnotu. Příklad:

{
  "name": "family_status",
  "type": "single_choice_radio",
  "text": "Rodinný stav",
  "values": {
    "1": "zadaný/á",
    "2": "nezadaný/á",
    "3": "ženatý, vdaná",
    "4": "rozvedený/á",
    "5": "vdovec, vdova",
    "6": "řeholník, řeholnice, kněz"
  },
  "display_conditions": [
    {
      "field": "family_status",
      "value_in": [
        "1",
        "3"
      ]
    }
  ]
}

Pokud otázka family_status má hodnotu 1 nebo 3, tak se tato otázka zobrazí, jinak ne. Otázka family_status v tomto případe musí už být na předchozích stránkách.

display_if

Zobraz pokud what ma hodnotu value. Hodnota se vyhodnocuje jak při načítání stránky, tak i dynamicky při vyplňování dotazníku, takže je možné přímo v prohlížeči dynamicky měnit, které otázky uživatel vidí a nevidí.

{
  "display_if": {
    "what": "faith_religion",
    "value": "1"
  }
}

4.1 - Statement

Technicky vzato statement není otázka, ale pouze informativní blok textu, který se zobrazí mezi otázkami. Nepotřebuje parametr name, protože se z něj nic neukládá do databáze.

Příklad:

{
  "type": "statement",
  "text": "Na následující stránce se Vám zobrazí seznam slov ... "
}

Se zobrazí takto:

statement example

Ve textu je možné používat lokalizaci.

Dále je možné použít parametr values, které se zobrazí jako seznam s odrážkami.

4.2 - Numerical Value

Otázka na vložení číselné hodnoty.

{
  "name": "year_of_birth",
  "type": "numerical_value",
  "text": "Rok narození",
  "min": 1900,
  "max": 2003,
  "float": false
}

Parametry:

  • min - minimální hodnota
  • max - maximální hodnota
  • float - mají se vkládat čísla s desetinnou čárkou? true - ano, false - ne

4.3 - Slider

Slider je vlastně rozšířením numerical_value. Získává číselnou hodnotu, ale uživatel posouvá posuvník, aniž by zadával konkrétní hodnotu.

 {
  "name": "protection",
  "type": "slider",
  "text": "Jak se nyní jako psychoterapeut chráníte ....",
  "min_label": "nijak",
  "max_label": "extrémně",
  "min": 0,
  "max": 100,
  "step": 10
}

Vytvoří tuto otázku

slider example

4.4 - Text Value

Textový vstup.

{
  "type": "text_value",
  "name": "covid_description",
  "text": "Pokud COVID-19 vstupuje do psychoterapeutických intervencí, jak je toto téma vašimi pacienty tématizováno?"
}

Zobrazí tuto otázku.

text_value example

4.5 - Single Choice

Otázka, kde respondent vybírá z více možností, přičemž může vybrat pouze jednu. Může být zobrazena jako tzv. drop down field (musí se rozkliknout) nebo se zobrazí všechny možnosti hned (radio buttons).

Parameter values mapuje textové hodnoty, které uvidí respondent na hodnoty, které jsou potom uloženy v databázi a následně exportovány. Takže pokud uživatel vybere např. možnost “ano, dlouhodobě”, tak se do odpovědí uloží hodnota 2.

Type parameter single_choice

{
  "name": "psychotherapy_change",
  "type": "single_choice",
  "text": "Mění se podle Vašeho názoru kvůli pandemii COVID-19 činnost psychoterapeutů?",
  "values": {
    "0": "ne",
    "1": "ano, krátkodobě (několik málo týdnů/měsíců)",
    "2": "ano, dlouhodobě (více měsíců)"
  }
}

Výchozí zobrazení:

single choice

Po rozliknutí:

single choice

Radio buttons

{
  "name": "psychotherapy_change",
  "type": "single_choice_radio",
  "text": "Mění se podle Vašeho názoru kvůli pandemii COVID-19 činnost psychoterapeutů?",
  "values": {
    "0": "ne",
    "1": "ano, krátkodobě (několik málo týdnů/měsíců)",
    "2": "ano, dlouhodobě (více měsíců)"
  }
}

Zobrazení

[single choice

Kompletní lokalizace

Ukázka single_choice_radio s kompletní lokalizací pro češtinu, angličtinu a slovenštinu.

{
  "name": "psychotherapy_change",
  "type": "single_choice_radio",
  "text": {
    "cs": "Mění se podle Vašeho názoru kvůli pandemii COVID-19 činnost psychoterapeutů?",
    "en": "In your opinion, does the practice of psychotherapy change because of Covid-19 pandemics?",
    "sk": "Mení sa podľa, Vášho názoru, kvôli koronavírusu (COVID-19) činnosť psychoterapeutov?"
  },
  "values": {
    "0": {
      "en": "no",
      "cs": "ne",
      "sk": "nie"
    },
    "1": {
      "en": "EN: ano, krátkodobě (několik málo týdnů/měsíců)",
      "cs": "ano, krátkodobě (několik málo týdnů/měsíců)",
      "sk": "áno, krátkodobo (niekoľko málo týždňov/mesiacov)"
    },
    "2": {
      "en": "EN: ano, dlouhodobě (více měsíců)",
      "cs": "ano, dlouhodobě (více měsíců)",
      "sk": "áno, dlhodobo (viac mesiacov)"
    }
  }
}

4.6 - Multiple Choice

Otázka, u které respondent může vybrat více odpovědí zaráz.

Například:

{
  "name": "onemocneni",
  "type": "multiple_choice",
  "text": "Máte dlouhotrvající onemocnění nebo postižení? Prosím označte všechny, které se na vás vztahují:",
  "values": {
    "1": "ischemická choroba srdce",
    "2": "hypertenze",
    "3": "cévní mozková příhoda / mozková mrtvice",
    "4": "chronické plicní onemocnění",
    "5": "astma",
    "6": "rakovina",
    "7": "diabetes",
    "8": "obezita",
    "9": "artritida",
    "10": "bolesti zad",
    "11": "žaludeční nebo dvanáctníkové vředy",
    "12": "záněty střeva (Crohnova choroba, ulcerózní kolitida)",
    "13": "kožní nemoci (ekzém)",
    "14": "alergie",
    "15": "migréna",
    "16": "bolesti nejasného původu",
    "17": "u žen – bolesti v malé pánvi (včetně gynekologických potíží)",
    "18": "deprese",
    "19": "onemocnění štítné žlázy",
    "20": "psychiatrické obtíže",
    "21": "žaludeční reflux",
    "22": "ADHD (porucha pozornosti s hyperaktivitou)",
    "23": "chronická únava",
    "24": "psoriáza (lupénka)",
    "26": "narcistická porucha osobnosti",
    "27": "disociální porucha osobnosti (antisociální porucha osobnosti)",
    "28": "hraniční porucha osobnosti",
    "29": "úzkost",
    "25": "<b>Žádné</b>",
    "other": "Jiné"
  }
}

Zobrazí tuto otázku

4.7 - Semantický diferenciál

Semantický diferenciál

Pro popis semantického diferenciálu viz https://cs.wikipedia.org/wiki/S%C3%A9mantick%C3%BD_diferenci%C3%A1l

Konfigurační soubor obsahuje volitelný objekt values, kde jsou záhlaví sloupců a pole questions s otázkami. Pokud se objekt values nepoužije, tak tabulka nebude mít žádné záhlaví.

Questions jsou atypické tím, že místo jednoduchého textu mají položku left a right, které uvádějí popisku vlevo a vpravo.

Samotná data se potom vkládají posuvníků. Nadpisy sloupců jsou tedy pouze orientační. Výsledné hodnoty jsou v rozsahu 0 - 100.

Systém kontroluje, jestli respondent pohnul s jednotlivými slidery. Pokud ano, tak slider zmodrá. Pokud ne, tak bude systém trvat na tom, aby respondent nastavil nějakou hodnotu.

Ukázka konfiguračního souboru.


{
  "type": "semantic_differential",
  "name": "regulations",
  "text": "Můj postoj k vládním opatřením proti COVID - 19",
  "values": {
    "1": "extrémně",
    "2": "mírně",
    "3": "docela",
    "4": "ani jedno<br>ani druhé",
    "5": "mírně",
    "6": "docela",
    "7": "extrémně"
  },
  "questions": [
    {
      "name": "useful",
      "left": "užitečná",
      "right": "zbytečná"
    },
    {
      "name": "efficient",
      "left": "účinná",
      "right": "neúčinná"
    },
    {
      "name": "rational",
      "left": "racionální",
      "right": "iracionální"
    },
    {
      "name": "manageable",
      "left": "zvládnutelná",
      "right": "nezvládnutelná"
    },
    {
      "name": "appropriate",
      "left": "přiměřená",
      "right": "nepřiměřená"
    },
    {
      "name": "pleasant",
      "left": "příjemná ",
      "right": "nepříjemná"
    }
  ]
}

Vyvtvoří tento dotazník:

Semantic Differential without values

Po vybrání hodnot potom vypadá dotazník takto:

Semantic Differential with values

A výše ukázaný dotazník následně uloží tyto hodnoty:

Název Hodnota
regulations_useful 27
regulations_efficient 39
regulations_rational 63
regulations_manageable 21
regulations_appropriate 44
regulations_pleasant 96

4.8 - Admin Value

Speciální otázka, která se nezobrazí tazateli, ale administrátorně do ní následně může vkládat hodnoty. Původní use case pro tuto otázku je dotazník ke kortizolu, který vyplní respondent. Poté, co laboratoř vyhodnotí vzorky, tak si administrátor otevřet respondenta a ručně tam hodnoty vloží.

{
  "name": "cortizol-morning",
  "type": "admin_value"
},
{
  "name": "cortizol-noon",
  "type": "admin_value"
},
{
  "name": "cortizol-evening",
  "type": "admin_value"
},
{
  "name": "cortizol-night",
  "type": "admin_value"
}

Parametry:

  • name - název otázky

Seznam admin hodnot v administraci respondenta

Editace konkrétní hodnoty po kliknutí na ikonu tužky

5 - Sady otázek

Popis konfiguračního souboru

Formát souboru je JSON. Podrobný úvod do formátu je zde: https://www.json.org/json-cz.html, stručný úvod potom máme zde: Úvod do jazyka JSON

5.1 - Komplexní tabulka

Komplexní dotazníková tabulka

Její definice zahrnuje otázky (Qeustion) a koomplexní odpovědi (parametr se jmenuje values).

Parametry:

  • name - interní název tabulky jak budou její hodnoty interně uloženy a následně exportován
  • type - musí být complex_question_table
  • values - pole podotázek - tj. sloupců tabulky
  • questions - pole otázek - tj. řádků tabulky

Otázka

Samotná otázka už nemá vlastní typ, ale slouží pouze jako množina pod otázek, které se zobrazují v tabulce. Podotázky jsou definované pro celou tabulku, tj. pro celou sadu otázek.

Parametry:

  • typ - viz dále
  • name - interní název otázky jak budou její hodnoty interně uloženy a následně exportován.
  • text - co uvidí respondent
  • condition - za jakých okolností se má celá otázka (tj. celý řádek v tabulce zobrazit). Např. na potrat se neptáme mužů (i když i pro ně to může být traumatická událost)
  • TODO: omit_subquestions - zatím neimplementováno, které podotázky se mají přeskočit

Podotázky

Představují sloupce v tabulce. Parametry jsou následující:

  • typ - viz dále
  • name - název otázky jak budou její hodnoty interně uloženy a následně exportován. Mají následující typy:

single_choice podotázka

Vyber jednu hodnoty z pole hodnot. Každá hodnota se zobrazuje jako sloupec v tabulce

generic podotázka

Každý sloupec může mít samostatný typ - viz výběr níže.

Veber více hodnot z pole hodnot. Kazda hodnota se zobrazuje jako jako sloupec v tabulkce. Exportovaná hodnota je složena z vybraných hodnot spojených čárkou

selector

Vyber jednu hodnotu z drop down menu

string

Textové po pro vložení komentáře. POkukd má více sloupců (tj. cols hodnot), tak jsou výsledné hodnoty spojení čárkou.

Export finálních dat

Název proměnných v exportu je konstruován takto:

NameTabulky_NázevOtázky_NazevPodotazky

tj. např. Trauma_Valka_VekZacatku: 15

Náhodné řazení otázek

Do tabulky je možné přidat parametr "shuffle": true.

Potom se náhodně zamíchají otázky a vypíšou se v náhodném pořadí. Zároveň se vytvoří ještě jedna nová proměnná, do které se uloží pořadí otázek.

Ukázka definice komplexní tabulky:

{
  "name": "trauma",
  "type": "complex_question_table",
  "values": [
    {
      "type": "generic",
      "name": "age",
      "text": "Kolik Vám bylo let, když to začalo/když se to stalo",
      "cols": [
        {
          "name": "started",
          "text": "",
          "type": "numeric",
          "min": 0,
          "max": 100
        }
      ]
    },
    {
      "type": "generic",
      "name": "age",
      "text": "Kolik let to trvalo",
      "cols": [
        {
          "name": "duration",
          "text": "",
          "type": "numeric",
          "min": 0,
          "max": 100
        }
      ]
    },
    {
      "type": "single_choice",
      "name": "frequency",
      "text": "Stalo se to",
      "cols": [
        {
          "name": "once",
          "text": "1x"
        },
        {
          "name": "more_times",
          "text": "vícekrát"
        },
        {
          "name": "often",
          "text": "často"
        }
      ]
    },
    {
      "type": "single_choice",
      "name": "fear",
      "text": "Byl tento zážitek spojen s intenzivními pocity strachu hrůzy nebo bezmoci?",
      "cols": [
        {
          "name": "yes",
          "text": "Ano"
        },
        {
          "name": "no",
          "text": "Ne"
        }
      ]
    },
    {
      "type": "single_choice",
      "name": "fear_of_death",
      "text": "Když se ta událost stala, myslel/a jste si, že vy nebo někdo jiný by mohl být zabit nebo vážně zraněn?",
      "cols": [
        {
          "name": "yes",
          "text": "Ano"
        },
        {
          "name": "no",
          "text": "Ne"
        }
      ]
    },
    {
      "type": "single_choice",
      "name": "sharing",
      "text": "Měla/a jsem s kým o tom mluvit",
      "cols": [
        {
          "name": "yes",
          "text": "Ano"
        },
        {
          "name": "no",
          "text": "Ne"
        }
      ]
    },
    {
      "type": "single_choice",
      "name": "shame",
      "text": "Bral/a jsem si to za vinu nebo jsem se za to styděl/a",
      "cols": [
        {
          "name": "yes",
          "text": "Ano"
        },
        {
          "name": "no",
          "text": "Ne"
        }
      ]
    },
    {
      "type": "generic",
      "name": "influence",
      "text": "Na stupnici 0-10: Jak moc Vás to ovlivnilo :",
      "cols": [
        {
          "name": "life",
          "text": "V dalším životě",
          "type": "selector",
          "value_list": {
            "0": "0",
            "1": "1",
            "2": "2",
            "3": "3",
            "4": "4",
            "5": "5",
            "6": "6",
            "7": "7",
            "8": "8",
            "9": "9",
            "10": "10"
          }
        },
        {
          "name": "lastyear",
          "text": "V uplynulém roce",
          "type": "selector",
          "value_list": {
            "0": "0",
            "1": "1",
            "2": "2",
            "3": "3",
            "4": "4",
            "5": "5",
            "6": "6",
            "7": "7",
            "8": "8",
            "9": "9",
            "10": "10"
          }
        }
      ]
    }
  ],
  "questions": [
    {
      "name": "valka",
      "text": "Válka"
    },
    {
      "name": "terorismus",
      "text": "Teroristický útok"
    },
    {
      "name": "prepadeni",
      "text": "Loupežné přepadení"
    }
  ]
}

5.2 - Jednoduchá tabulka

Jednoduchá tabulka

Představuje typickou dotazníkovou tabulku, kde v řádcích jsou otázky a ve sloupcích potom možné hodnoty, které uživatel vyplňuje.

Tento konfigurační soubor:

{
  "name": "komunita",
  "type": "question_table",
  "text": "Do jaké míry souhlasíte s následujícími výroky?",
  "values": {
    "1": "Úplně souhlasím",
    "2": "Spíše souhlasím",
    "3": "Spíše nesouhlasím",
    "4": "Vůbec nesouhlasím"
  },
  "questions": [
    {
      "name": "1",
      "text": "Pravidla nastavená v mé komunitě mně osobně připadají mírná."
    },
    {
      "name": "2",
      "text": "Denní řád mé komunity mi celkově připadá zcela vyhovující."
    },
    {
      "name": "3",
      "text": "Denní řád mé komunity bych hodnotil/a jako velmi flexibilní.",
    {
      "name": "4",
      "text": "V mé komunitě platí stejná pravidla pro každého člena/každou členku."
    },
    {
      "name": "5",
      "text": "Ve srovnání s jinými řeholními společenstvími bych to své hodnotil/a jako velmi volné."
    },
    {
      "name": "6",
      "text": "Žitá realita mé komunity podle mne zcela odpovídá stanovám."
    },
    {
      "name": "7",
      "text": "Žitá realita mé komunity podle mne zcela odpovídá současným výzvám papeže Františka a Kongregace pro instituty zasvěceného života a společnosti apoštolského života."
    }
  ]
}

Vytvoří následující tabulku:

Question Table

Parametry

V konfiguraci jsou klíčové následující parametry:

  • values - objekt s hodnotami pro záhlaví tabulky (tj. sloupce tabullky), kde klíče jsou hodnoty k uložení a text se zobrazí uživateli.
  • questions - jednotlivé otázky v tabulce (tj. řádky tabulky)

Každý řádek v questions může být zobrazen podmínečně pomocí parametrů conditions:


{
  "name": "7",
  "text": "Žitá realita mé komunity podle mne zcela odpovídá současným výzvám papeže Františka a Kongregace pro instituty zasvěceného života a společnosti apoštolského života."
  "conditions": [
    {
      "field": "gender",
      "value": "1"
    }
  ]
}

V tomto případě by se řádek 7 zobrazil pouze pokud by předchozí hodnota pole gender byla 1, jinak se nezobrazí.

Dále question_table kompletně podporuje lokalizaci, jak u hodnot, tak u otázek. Viz Lokalizace dotazníků

Export hodnot

Názvy exportovaných hodnot se skládají z názvu tabulky a následně názvů jednotlivých otázek (parametry name). Takže výše uvedená tabulka bude generovat hodnoty:

  • komunita1: 1
  • komunita2: 2
  • komunita3: 3
  • komunita4: 3
  • komunita5: 3
  • komunita6: 2
  • komunita6: 3

Hodnoty odpovídají screenshotu.

Náhodné řazení otázek

Do tabulky je možné přidat parametr "shuffle": true.

Potom se náhodně zamíchají otázky a vypíšou se v náhodném pořadí. Zároveň se vytvoří ještě jedna nová proměnná, do které se uloží pořadí otázek. Pro dotazník DSES potom může proměnná vypadat takto:

Název Hodnota Typ otázky Datum a čas
DSES_2 1 TableLineQuestion 2021-04-06 16:58:36 UTC
DSES_8 1 TableLineQuestion 2021-04-06 16:58:36 UTC
DSES_13 1 TableLineQuestion 2021-04-06 16:58:36 UTC
DSES_11 1 TableLineQuestion 2021-04-06 16:58:36 UTC
DSES_15 1 TableLineQuestion 2021-04-06 16:58:36 UTC
DSES_4 1 TableLineQuestion 2021-04-06 16:58:36 UTC
DSES_10 1 TableLineQuestion 2021-04-06 16:58:36 UTC
DSES_6 1 TableLineQuestion 2021-04-06 16:58:36 UTC
DSES_12 1 TableLineQuestion 2021-04-06 16:58:36 UTC
DSES_5 TableLineQuestion 2021-04-06 16:58:36 UTC
DSES_3 1 TableLineQuestion 2021-04-06 16:58:36 UTC
DSES_14 1 TableLineQuestion 2021-04-06 16:58:36 UTC
DSES_7 1 TableLineQuestion 2021-04-06 16:58:36 UTC
DSES_9 1 TableLineQuestion 2021-04-06 16:58:36 UTC
DSES_1 1 TableLineQuestion 2021-04-06 16:58:36 UTC
DSES_order DSES_1,DSES_8,DSES_3,DSES_6,DSES_7,DSES_5,DSES_13,DSES_15,DSES_11,DSES_12,DSES_4,DSES_2,DSES_9,DSES_14,
DSES_10

5.3 - Wrapper

Wrapper je jednoduchá struktura, která umožňuje zabalit další otázky. Má dvojí využití.

  1. Je možné spojit logicky dohromady sadu otázek, tak že dostanou společný prefix v exportovaném názvu
  2. Pokud potřebujeme načíst naráz z modulu více otázek, aniž by se vkládaly jednotlivě, tak se zabalí do wrapperu a potom se vkládají už společně.

Wrapper musí mít následující parametry:

  • name - název, který se použije jako prefix u názvů dalších otázek
  • type: wrapper
  • items: pole s dalšími prvky - otázkami a dalšími. Původně se tento parameter jmenoval questions, ale byl přejmenován protože název byl trošku zavádějící. Nicméně parametr question stále ještě funguje.

Příklad:

{
  "pages": [
    {
      "type": "page",
      "id": "page-onemocneni",
      "items": [
        {
          "name": "health",
          "type": "wrapper",
          "items": [
            {
              "name": "onemocneni",
              "type": "multiple_choice",
              "text": {
                "en": "Do you have a long-term illness or disability? Please tick all that apply to you:",
                "cs": "Máte dlouhotrvající onemocnění nebo postižení? Prosím označte všechny, které se na vás vztahují:",
                "de": "Leiden Sie an einer langzeitigen (chronischen) Krankheit oder Behinderung? Bitte, kreuzen Sie alles an, was Sie betrifft:"
              },
              "values": {
                "1": {
                  "en": "coronary heart disease",
                  "cs": "ischemická choroba srdce",
                  "de": "Ischämische Herzkrankheit"
                },
                "2": {
                  "en": "hypertension",
                  "cs": "hypertenze",
                  "de": "Bluthochdruck"
                },
                "3": {
                  "en": "stroke",
                  "cs": "cévní mozková příhoda / mozková mrtvice",
                  "de": "Schlaganfall"
                }
              }
            },
            {
              "name": "lekari",
              "type": "multiple_choice",
              "text": {
                "en": "Have you visited any of these specialists in the last twelve months (please do not count standard medical examinations that are recommended to all the people of your age/gender) - please mark all visited departments:",
                "cs": "Navštívili jste v uplynulých dvanácti měsících některého z těchto specialistů (nepočítejte prosím standardní lékařské prohlídky doporučené všem osobám Vašeho věku/pohlaví) – označte prosím všechna navštívená oddělení:",
                "de": "Haben Sie in den vergangenen zwölf Monaten einen dieser Spezialisten besucht? Untersuchungen, die plötzlich erforderlich sind, und nichtab einem bestimten alter empfolen werden (z.B. regelmäßige). Markieren Sie, bitte, alle besuchten Abteilungen:"
              },
              "values": {
                "1": {
                  "en": "Dermatovenerology (treatment of skin and genital diseases)",
                  "cs": "Dermatovenerologie (léčba kožních a pohlavních chorob)",
                  "de": "Dermatologie und Venerologie (Haut- und Geschlechtskrankheiten)"
                },
                "2": {
                  "en": "Department of surgery",
                  "cs": "Chirurgie",
                  "de": "Chirurgie"
                },
                "3": {
                  "en": "Cardiology (treatment of heart disease)",
                  "cs": "Kardiologie (léčba srdečních chorob)",
                  "de": "Kardiologie (Herzkrankheiten)"
                }
              }
            }
          ]
        }
      ]
    }
  ]
}

Proměnné ve finální exportu potom budou mít tuto podobu:

  • health_onemocneni
  • health_lekari

6 - Výsledky zobrazené respondentům