Opið, JSON-byggt snið til að skilgreina kannanir og eyðublöð. Notað af [YourOpinion.is](https://youropinion.is) og frjálst öllum til innleiðingar.

**Núverandi útgáfa:** `1.0`

## Einfölduð Markdown-útgáfa

Einnig er í boði einfaldað innflutningsferli byggt á Markdown, hannað sérstaklega fyrir gervigreindarfulltrúa. Þetta ferli notar „Rich Markdown“ afbrigði til að skilgreina spurningar, valmöguleika og síðuskil með venjulegu textasniði. Í stað þess að smíða flókið JSON-fyrirbæri útbýr gervigreindin skipulagðan Markdown-streng og kódar hann í einn smellanlegan hlekk. Með því að smella á hlekkinn endurbyggist könnunin samstundis í vafranum.

- **[Einfölduð Markdown-útgáfa](./survey-import-link)**

## Sækja forskrift

- **[JSON skema](https://youropinion.is/json-schema/1.0)** - Vélilesin sniðskilgreining
- **[Markdown](./survey-format.md)** - Mannlesin skjölun (hagrætt fyrir stór málalíkön)

## Inngangur

Opið könnunarsnið býður upp á staðlaða leið til að skilgreina kannanir, spurningalista og eyðublöð sem JSON-hluti. Þetta snið gerir eftirfarandi kleift:

- **Færanleiki** - Flytja kannanir á milli mismunandi kerfa og verkfæra
- **Útgáfustýring** - Fylgjast með breytingum á könnunum með hefðbundnum samanburðarverkfærum (diff tools)
- **Forritunarleg sköpun** - Búa til kannanir á gangvirkan hátt úr kóða
- **Samhæfni við stór málalíkön** - Gervigreindaraðstoðarmenn geta auðveldlega búið til og breytt könnunum

## Grunnhugtök

### Söfn (Síður)

Könnunum er skipt upp í **söfn**, sem virka sem síður eða hlutar. Hver könnun verður að innihalda að minnsta kosti eitt safn.

### Einingar

Einstakir íhlutir innan safns, svo sem:

- Spurningar (textainnsláttur, fjölval, matskvarðar o.s.frv.)
- Efniskubbar (Markdown texti, myndir)
- Flæðistýringareiningar (skilyrt rökfræði, síðustökk)

### Eignir (Assets)

Endurnýtanlegir íhlutir sem hægt er að vísa í úr mörgum spurningum:

- Valkostalistar (fyrir valspurningar)
- Matskvarðar
- Sameiginlegar auðlindir

## Uppbygging skjals

Könnun er táknuð sem JSON-hlutur með þessari uppbyggingu:

```json
{
    "$schema": "https://youropinion.is/json-schema/1.0",
    "$readme": "https://youropinion.is/docs/survey-format.md",
    "collections": {
        "collection-id-1": {
            "name": "Nafn safns",
            "elements": {
                "element-id-1": {
                    "type": "Markdown",
                    "data": {
                        /* Gögn sem eiga við einingu */
                    }
                }
            },
            "displayOrder": ["element-id-1"]
        }
    },
    "displayOrder": ["collection-id-1"],
    "assets": {
        "asset-id-1": {
            "type": "options",
            "data": {
                /* Gögn sem eiga við eign */
            }
        }
    }
}
```

### Eiginleikar á efsta stigi

#### `$schema` (valfrjálst)

Vefslóð á JSON skema skilgreiningu fyrir staðfestingu:

```json
"$schema": "https://youropinion.is/json-schema/1.0"
```

#### `$readme` (valfrjálst)

Vefslóð á mannlesna skjölun:

```json
"$readme": "https://youropinion.is/docs/survey-format.md"
```

#### `collections` (áskilið)

Hlutur sem inniheldur síður/hluta könnunarinnar. Hver lykill er einstakt auðkenni safns:

```json
"collections": {
    "welcome": {
        "name": "Opnunarsíða",
        "elements": { /* ... */ },
        "displayOrder": ["intro", "consent"]
    },
    "questions": {
        "name": "Aðalspurningar",
        "elements": { /* ... */ },
        "displayOrder": ["q1", "q2", "q3"]
    }
}
```

**Eiginleikar safns:**

- **`name`** (strengur, valfrjálst) - Mannlesið nafn á safni (ekki sýnt notendum, notað til viðmiðunar)
- **`condition`** (hlutur, valfrjálst) - Skilyrt rökfræði til að ákvarða hvort sýna eigi þetta safn (sjá kaflann [Skilyrt rökfræði](#skilyrt-rökfræði))
- **`elements`** (hlutur) - Inniheldur einingar fyrir þetta safn. Hver lykill er einstakt auðkenni einingar
- **`displayOrder`** (fylki) - Fylki af auðkennum eininga sem skilgreinir birtingarröð

**Mikilvægt:** `displayOrder` fylkið virkar bæði sem sía og raðari:

- Aðeins einingar sem skráðar eru í `displayOrder` verða sýndar
- Einingar sem ekki eru í `displayOrder` eru áfram í skilgreiningunni en eru faldar
- Ef auðkenni einingar sem ekki er til er sett í fylkið mun það valda villu

#### `displayOrder` (áskilið)

Fylki sem tilgreinir röð safna:

```json
"displayOrder": ["welcome", "questions", "thank-you"]
```

Sömu síunarreglur gilda: aðeins söfn sem eru skráð hér verða sýnd.

#### `assets` (valfrjálst)

Endurnýtanlegir íhlutir sem vísað er í úr mörgum einingum. Eignir (assets) draga úr tvítekningu og gera viðhald kannana auðveldara.

**Tegundir eigna:**

1.  **`options`** - Endurnýtanlegir valkostalistar fyrir SelectOne/SelectMany spurningar
2.  **`ordinal-scale`** - Endurnýtanlegir merktir kvarðar fyrir OrdinalScale spurningar
3.  **`interval-scale`** - Endurnýtanlegir tölulegir kvarðar fyrir IntervalScale spurningar

**Dæmi - Valkostaeign:**

```json
"assets": {
    "color-options": {
        "type": "options",
        "name": "Litavalkostir",
        "data": {
            "options": {
                "red": { "label": "Rauður" },
                "blue": { "label": "Blár" },
                "green": { "label": "Grænn" },
                "yellow": { "label": "Gulur" }
            },
            "displayOrder": ["red", "blue", "green", "yellow"]
        }
    },
    "satisfaction-scale": {
        "type": "ordinal-scale",
        "name": "Hefðbundinn ánægjukvarði",
        "data": {
            "labels": {
                "1": "Mjög óánægð(ur)",
                "2": "Óánægð(ur)",
                "3": "Hlutlaus",
                "4": "Ánægð(ur)",
                "5": "Mjög ánægð(ur)"
            }
        }
    },
    "nps-scale": {
        "type": "interval-scale",
        "name": "NPS-kvarði (Net Promoter Score)",
        "data": {
            "start": 0,
            "end": 10,
            "labels": {
                "start": "Ólíklegt",
                "end": "Mjög líklegt"
            }
        }
    }
}
```

**Allar tegundir eigna krefjast:**

- **`type`** - Tegund eignar: `"options"`, `"ordinal-scale"` eða `"interval-scale"`
- **`name`** - Mannlesið nafn fyrir skjölun
- **`data`** - Gagnagrind sem er sértæk fyrir tegundina

Hægt er að vísa í eignir með JSON tilvísunum (sjá kafla um JSON tilvísanir).

---

## Tegundir eininga

Einingar eru byggingareiningar könnunarinnar. Hver eining hefur `type` og `data` eiginleika. Allar einingar geta valfrjálst innihaldið `extensions` hlut fyrir sérsniðin lýsigögn (ekki notað af hefðbundnum birtingarvélum).

**Tiltækar tegundir eininga:**

| Tegund          | Flokkur  | Lýsing                                                              |
| --------------- | -------- | ------------------------------------------------------------------- |
| `Markdown`      | Efni     | Birta sniðinn texta og efni                                         |
| `FlowControl`   | Stýring  | Skilyrt rökfræði og flakk                                           |
| `String`        | Spurning | Textainnsláttur (ein eða fleiri línur)                              |
| `OpenList`      | Spurning | Listi af textafærslum sem notandi bætir við                         |
| `Number`        | Spurning | Talnainnsláttur                                                     |
| `Date`          | Spurning | Dagsetningaval                                                      |
| `Boolean`       | Spurning | Já/Nei gátreitur                                                    |
| `SelectOne`     | Spurning | Einn valkostur úr lista (valhnappar)                                |
| `SelectMany`    | Spurning | Margir valkostir úr lista (gátreitir)                               |
| `Ranking`       | Spurning | Raða mörgum valkostum eftir mikilvægi eða forgangi                  |
| `IntervalScale` | Spurning | Tölulegur matskvarði (t.d. 0-10 fyrir NPS, 1-5 fyrir ánægju)        |
| `OrdinalScale`  | Spurning | Matskvarði með merktum gildum (t.d. Mjög ósammála til Mjög sammála) |
| `Payment`       | Spurning | Greiðsluvinnslueining                                               |

### Efniseiningar

#### Markdown

Birtir sniðinn texta, fyrirsagnir, lista og annað efni með Markdown málskipan.

```json
{
    "type": "Markdown",
    "data": {
        "markdown": "# Velkomin(n)!\n\nÞakka þér fyrir að taka þátt í könnuninni okkar.\n\n- Vinsamlegast svaraðu af heiðarleika\n- Öll svör eru nafnlaus"
    }
}
```

**Studdur Markdown:**

- Fyrirsagnir (`#`, `##`, `###`)
- Listar (raðaðir og óraðaðir)
- Feitletrað (`**texti**`) og skáletrað (`*texti*`)
- Tenglar (`[texti](slóð)`)
- Kóðablokkir

#### FlowControl

Stýrir flæði könnunar með skilyrtri rökfræði og flakki.

```json
{
    "type": "FlowControl",
    "data": {
        "condition": {
            /* Valfrjálst - Sjá kafla um skilyrta rökfræði */
        },
        "action": {
            "type": "survey-finish" // Valkostir: "survey-finish" eða "page-finish"
        }
    }
}
```

**Tegundir aðgerða:**

- `survey-finish` - Ljúka könnuninni strax
- `page-finish` - Ljúka núverandi síðu og fara á þá næstu

Fyrir nánari upplýsingar um uppbyggingu skilyrða og dæmi, sjá kaflann [Skilyrt rökfræði](#skilyrt-rökfræði) hér að neðan.

---

### Tegundir spurninga

Allar spurningar deila þessum sameiginlegu eiginleikum:

```json
{
    "type": "QuestionType",
    "data": {
        "label": "Spurningartextinn þinn hér",
        "required": "yes", // Valfrjálst: "yes", "no", eða "suggested" (sjálfgefið er "no")
        "markdown": "Hjálpartexti" // Valfrjálst: viðbótar samhengi á Markdown formi
    }
}
```

**Sameiginlegir eiginleikar:**

- `label` (strengur, áskilið) - Spurningartextinn sem birtist notendum
- `required` (strengur, valfrjálst) - Hvort svar sé áskilið: `"yes"`, `"no"`, eða `"suggested"` (birtist sem valkvætt en er mælt með)
- `markdown` (strengur, valfrjálst) - Viðbótar hjálpartexti eða lýsing á Markdown formi
- `defaultValue` (hvað sem er, valfrjálst) - Forgildisgildi fyrir spurninguna

#### String

Textainnsláttur fyrir eina eða fleiri línur.

```json
{
    "type": "String",
    "data": {
        "label": "Hvað heitir þú?",
        "placeholder": "Sláðu inn fullt nafn", // Valfrjálst
        "multiline": false, // Valfrjálst: true fyrir textasvæði
        "required": "yes"
    }
}
```

#### OpenList

Margir textainnslættir sem listi. Notendur geta bætt við atriðum einu í einu.

```json
{
    "type": "OpenList",
    "data": {
        "label": "Teldu upp helstu forgangsatriði",
        "multiline": false, // Valfrjálst: true fyrir málsgreinainnslátt
        "minItems": 1, // Valfrjálst: lágmarksfjöldi atriða
        "maxItems": 5, // Valfrjálst: hámarksfjöldi atriða
        "required": "yes"
    }
}
```

**Eiginleikar:**

- `multiline` (boolean, valfrjálst) - Ef true, er hvert atriði málsgrein (textasvæði). Ef false (sjálfgefið), er hvert atriði ein lína
- `minItems` (tala, valfrjálst) - Lágmarksfjöldi atriða sem þarf
- `maxItems` (tala, valfrjálst) - Hámarksfjöldi leyfilegra atriða

#### Number

Talnainnsláttur með valfrjálsri gildisprófun.

```json
{
    "type": "Number",
    "data": {
        "label": "Hversu margir starfsmenn?",
        "min": 1, // Valfrjálst: lágmarksgildi
        "max": 1000, // Valfrjálst: hámarksgildi
        "step": 1, // Valfrjálst: þrepastærð (sjálfgefið: 1)
        "required": "yes"
    }
}
```

**Eiginleikar:**

- `min` (tala, valfrjálst) - Lágmarksgildi
- `max` (tala, valfrjálst) - Hámarksgildi
- `step` (tala, valfrjálst) - Þrepastærð fyrir gildisprófun innsláttar (sjálfgefið: 1)

#### Date

Dagsetningarval með valfrjálsri nákvæmni og lágmarks/hámarks takmörkunum.

```json
{
    "type": "Date",
    "data": {
        "label": "Hvenær gekkst þú til liðs við okkur?",
        "required": "suggested",
        "accuracy": "day", // Valfrjálst: "day", "month", eða "year" (sjálfgefið: "day")
        "min": "2020-01-01", // Valfrjálst: fyrsta valanlega dagsetning
        "max": "2025-12-31" // Valfrjálst: síðasta valanlega dagsetning
    }
}
```

**Eiginleikar:**

- `accuracy` (strengur, valfrjálst) - Nákvæmni dagsetningar:
    - `"day"` - Fullt dagsetningarval með dagatali (sjálfgefið)
    - `"month"` - Val á mánuði og ári úr fellilista
    - `"year"` - Val á ári eingöngu úr fellilista
- `min` (strengur, valfrjálst) - Fyrsta valanlega dagsetning. Getur verið:
    - ISO dagsetningarstrengur (t.d. `"2020-01-01"`)
    - Afstæður tímastrengur (t.d. `"+ 3 months"`, `"now"`, `"- 1 year"`)
- `max` (strengur, valfrjálst) - Síðasta valanlega dagsetning. Sömu sniðmöguleikar og `min`.

#### Boolean

Já/Nei gátreitur. Sjálfgefið gildi er `false` (ómerkt).

```json
{
    "type": "Boolean",
    "data": {
        "label": "Skilmálar",
        "description": "Ég samþykki skilmálana" // Birtist við hliðina á gátreitnum
    }
}
```

#### SelectOne

Fjölvalsspurning (valhnappar) - notendur velja einn valkost.

```json
{
    "type": "SelectOne",
    "data": {
        "label": "Hver er uppáhaldsliturinn þinn?",
        "required": "yes",
        "options": {
            "options": {
                "red": { "label": "Rauður" },
                "blue": { "label": "Blár" },
                "green": { "label": "Grænn" }
            },
            "displayOrder": ["red", "blue", "green"]
        }
    }
}
```

**Notkun tilvísana í eignir:**

```json
{
    "type": "SelectOne",
    "data": {
        "label": "Veldu lit",
        "options": { "$ref": "#/assets/color-options/data" }
    }
}
```

#### SelectMany

Fjölvalsspurning (gátreitir) - notendur geta valið marga valkosti.

```json
{
    "type": "SelectMany",
    "data": {
        "label": "Hvaða stýrikerfi notar þú?",
        "required": "yes",
        "options": {
            "options": {
                "windows": { "label": "Windows" },
                "macos": { "label": "macOS" },
                "linux": { "label": "Linux" }
            },
            "displayOrder": ["windows", "macos", "linux"]
        },
        "other": true, // Valfrjálst: bæta við „Annað“ valkosti með textainnslætti
        "minSelections": 1, // Valfrjálst: lágmarksfjöldi valkosta sem krafist er
        "maxSelections": 3 // Valfrjálst: hámarksfjöldi valkosta sem leyfður er
    }
}
```

#### Ranking

Raðaðu mörgum valkostum eftir mikilvægi, forgangi eða eignum. Notendur gefa hverjum valkosti stig, oftast með samanburðaraðferðum eins og MaxDiff, parakönnun (pairwise comparison), draga-og-sleppa flokkun (drag-and-drop) eða fjárhagsáætlun (budget allocation).

```json
{
    "type": "Ranking",
    "data": {
        "label": "Raðaðu þessum eiginleikum eftir mikilvægi",
        "required": "yes",
        "options": {
            "options": {
                "performance": { "label": "Hraði og afköst" },
                "design": { "label": "Hreinleg hönnun" },
                "price": { "label": "Hagstætt verð" },
                "support": { "label": "Þjónustuver allan sólarhringinn" }
            },
            "displayOrder": ["performance", "design", "price", "support"]
        }
    }
}
```

#### IntervalScale

Tölulegur matskvarði með skilgreindu bili (t.d. 0-10 fyrir NPS, 1-5 fyrir ánægju). Algengt að nota fyrir:

- Net Promoter Score (NPS): 0-10 kvarði
- Ánægjumælingar: 1-5 eða 1-7 kvarði
- Líkinda spurningar: 0-10 kvarði

```json
{
    "type": "IntervalScale",
    "data": {
        "label": "Hversu líklegt er að þú myndir mæla með okkur við vin?",
        "required": "yes",
        "scale": {
            "start": 0, // Byrjunargildi kvarðans
            "end": 10, // Endagildi kvarðans
            "labels": {
                // Merkingar fyrir upphafs- og endapunkta (áskilið)
                "start": "Alls ekki líklegt",
                "end": "Einstaklega líklegt"
            }
        }
    }
}
```

**Algeng notkun:**

```json
// Net Promoter Score (NPS)
{
    "type": "IntervalScale",
    "data": {
        "label": "Hversu líklegt er að þú myndir mæla með okkur?",
        "scale": {
            "start": 0,
            "end": 10,
            "labels": {
                "start": "Ólíklegt",
                "end": "Mjög líklegt"
            }
        }
    }
}

// 5-stiga ánægjukvarði
{
    "type": "IntervalScale",
    "data": {
        "label": "Hversu ánægð(ur) ert þú með þjónustu okkar?",
        "scale": {
            "start": 1,
            "end": 5,
            "labels": {
                "start": "Mjög óánægð(ur)",
                "end": "Mjög ánægð(ur)"
            }
        }
    }
}
```

**Birting:** Sýnir láréttan kvarða með smellanlegum tölum. Merkingar birtast fyrir neðan upphafs- og endapunkta.

#### OrdinalScale

Matskvarði með merkingum þar sem hver punktur hefur sérsniðna merkingu. Tilvalið fyrir:

- Likert-kvarða með sérstöku orðalagi fyrir hvern punkt
- Samþykkiskvarða (Mjög ósammála → Mjög sammála)
- Tíðniskvarða (Aldrei → Alltaf)
- Sérsniðna matskvarða með merkingarbærum gildum

```json
{
    "type": "OrdinalScale",
    "data": {
        "label": "Hversu ánægð(ur) ert þú með stöðu þína?",
        "required": "yes",
        "scale": {
            "labels": {
                "1": "Mjög óánægð(ur)",
                "2": "Óánægð(ur)",
                "3": "Hlutlaus",
                "4": "Ánægð(ur)",
                "5": "Mjög ánægð(ur)"
            }
        }
    }
}
```

**Algeng notkun:**

```json
// Likert samþykkiskvarði
{
    "type": "OrdinalScale",
    "data": {
        "label": "Varan stóðst væntingar mínar",
        "scale": {
            "labels": {
                "1": "Mjög ósammála",
                "2": "Ósammála",
                "3": "Hvorki sammála né ósammála",
                "4": "Sammála",
                "5": "Mjög sammála"
            }
        }
    }
}

// Tíðniskvarði
{
    "type": "OrdinalScale",
    "data": {
        "label": "Hversu oft notar þú vöruna okkar?",
        "scale": {
            "labels": {
                "1": "Aldrei",
                "2": "Sjaldan",
                "3": "Stundum",
                "4": "Oft",
                "5": "Alltaf"
            }
        }
    }
}
```

**Birting:** Sýnir merkta hnappa eða valkosti. Hver merking er sýnd í heild sinni, sem gerir kvarðann auðskiljanlegan.

**IntervalScale vs OrdinalScale:**

- Notaðu **IntervalScale** (jafnbilakvarða) þegar tölurnar sjálfar hafa merkingu (0-10, 1-5)
- Notaðu **OrdinalScale** (raðkvarða) þegar þú þarft sérsniðnar merkingar fyrir hvern punkt
- IntervalScale er fyrirferðarminni; OrdinalScale er lýsingarmeiri

#### Payment

Safna greiðsluupplýsingum og vinna færslur. Samþættist við greiðsluþjónustur sem eru uppsettar í stillingum könnunarinnar.

```json
{
    "type": "Payment",
    "data": {
        "label": "Greiðsla",
        "required": "yes",
        "amount": {
            "value": 29.99,
            "currency": "USD"
        },
        "captureMethod": "automatic" // Valfrjálst: "immediate", "manual", eða "automatic"
    }
}
```

**Eiginleikar:**

- `amount` (hlutur, áskilið) - Greiðsluupphæð með `value` (tala) og `currency` (3-stafa kóði, t.d. "USD", "EUR", "ISK")
- `captureMethod` (strengur, valfrjálst) - Hvenær á að gjaldfæra (innheimta) greiðslu:
    - `"immediate"` - Gjaldfæra strax þegar könnun er send inn
    - `"manual"` - Krefst handvirkrar gjaldfærslu í gegnum greiðslustjórnborðið þitt
    - `"automatic"` - Gjaldfæra sjálfkrafa þegar könnun er lokið (sjálfgefið)

**Athugið:** Greiðsluvinnsla krefst þess að greiðsluþjónusta sé uppsett í stillingum rásarinnar þinnar. Studdir gjaldmiðlar og greiðslumátar fara eftir uppsetningu þjónustuveitanda þíns.

---

## JSON tilvísanir

Draga úr tvítekningu með því að vísa í endurnýtanlega íhluti. Tilvísanir nota þetta snið:

```json
{ "$ref": "[<location>]#<path>" }
```

- **`location`** - Vefslóð að upprunaskjali (tómt = núverandi skjal)
- **`path`** - Slóð frá rót skjalsins með `/` sem aðgreiningu

**Dæmi - Innbyggð tvítekning:**

```json
{
    "question-1": {
        "type": "SelectOne",
        "data": {
            "label": "Uppáhaldslitur?",
            "options": {
                "options": {
                    "red": { "label": "Rauður" },
                    "blue": { "label": "Blár" }
                },
                "displayOrder": ["red", "blue"]
            }
        }
    },
    "question-2": {
        "type": "SelectOne",
        "data": {
            "label": "Minnst uppáhalds litur?",
            "options": {
                "options": {
                    "red": { "label": "Rauður" },
                    "blue": { "label": "Blár" }
                },
                "displayOrder": ["red", "blue"]
            }
        }
    }
}
```

**Betra - Notkun eigna (assets):**

```json
{
    "collections": {
        "main": {
            "elements": {
                "question-1": {
                    "type": "SelectOne",
                    "data": {
                        "label": "Uppáhaldslitur?",
                        "options": { "$ref": "#/assets/colors/data" }
                    }
                },
                "question-2": {
                    "type": "SelectOne",
                    "data": {
                        "label": "Minnst uppáhalds litur?",
                        "options": { "$ref": "#/assets/colors/data" }
                    }
                }
            },
            "displayOrder": ["question-1", "question-2"]
        }
    },
    "assets": {
        "colors": {
            "type": "options",
            "data": {
                "options": {
                    "red": { "label": "Rauður" },
                    "blue": { "label": "Blár" }
                },
                "displayOrder": ["red", "blue"]
            }
        }
    }
}
```

**Kostir:**

- Einn sannleiksgjafi (Single source of truth)
- Auðveldara viðhald
- Betri samanburður í útgáfustýringu
- Minni skráarstærð

---

## Skilyrt rökfræði

Skilyrt rökfræði gerir þér kleift að búa til gangvirkar kannanir sem aðlagast svörum notenda. Hægt er að nota skilyrði á tvo vegu:

### 1. Skilyrði á stigi safns

Sýna eða fela heilar síður byggt á skilyrðum. Ef skilyrði safns er metið sem `false` er allri síðunni sleppt og keyrsla heldur áfram í næsta safn.

```json
{
    "collections": {
        "follow-up": {
            "name": "Eftirfylgnispurningar",
            "condition": {
                "type": "condition",
                "fact": "questions/nps-score",
                "operator": "lt",
                "compare": { "value": 7 }
            },
            "elements": {
                /* ... */
            },
            "displayOrder": ["question-1"]
        }
    }
}
```

Í þessu dæmi er „eftirfylgni“ síðan aðeins sýnd ef NPS einkunnin er lægri en 7.

### 2. FlowControl einingar

Stýra flæði könnunar innan síðu með `FlowControl` einingum. Þegar skilyrði er metið sem `true` er tilgreind aðgerð framkvæmd.

**Tiltækar aðgerðir:**

- **`survey-finish`** - Ljúka könnuninni strax (sleppa öllum eftirstandandi síðum)
- **`page-finish`** - Ljúka núverandi síðu og fara á þá næstu (sleppa eftirstandandi einingum á núverandi síðu)

```json
{
    "type": "FlowControl",
    "data": {
        "condition": {
            "type": "condition",
            "fact": "questions/satisfaction",
            "operator": "eq",
            "compare": { "value": "very-satisfied" }
        },
        "action": {
            "type": "page-finish"
        }
    }
}
```

**Athugið:** Ef ekkert `condition` er tilgreint er aðgerðin alltaf framkvæmd þegar komið er að einingunni.

### Uppbygging skilyrða

Skilyrði eru skilgreind sem tvíundartré með tveimur tegundum hnúta:

#### 1. Samanburðarskilyrði

Bera saman staðreynd (svar úr könnun) við gildi eða aðra staðreynd.

```json
{
    "type": "condition",
    "fact": "questions/age",
    "operator": "gt",
    "compare": { "value": 18 }
}
```

**Eiginleikar:**

- **`type`** - Alltaf `"condition"` fyrir samanburð
- **`fact`** (strengur) - Tilvísun í einingu á sniðinu 'safn-auðkenni/eining-auðkenni' til að lesa gildið úr
- **`operator`** (strengur) - Samanburðarvirki (sjá virkja hér að neðan)
- **`compare`** (hlutur, valfrjálst) - Við hvað á að bera saman:
    - `{ "value": <any> }` - Bera saman við fast gildi
    - `{ "fact": "<safn-auðkenni/eining-auðkenni>" }` - Bera saman við gildi annarrar einingar
    - Ekki áskilið fyrir virkja eins og `"exists"` eða `"true"`
- **`not`** (boolean, valfrjálst) - Snúa niðurstöðunni við (sjálfgefið: `false`)

**Studdar virkjar eftir tegund einingar:**

**Number, IntervalScale, OrdinalScale, Date:**

- `"eq"` - Jafnt og
- `"gt"` - Stærra en
- `"gte"` - Stærra en eða jafnt og
- `"lt"` - Minna en
- `"lte"` - Minna en eða jafnt og
- `"exists"` - Hefur gildi (þarf ekki `compare`)

**String:**

- `"eq"` - Jafnt og
- `"contains"` - Strengur inniheldur gildi
- `"exists"` - Hefur gildi (þarf ekki `compare`)

**Boolean:**

- `"true"` - Gildi er satt (þarf ekki `compare`)
- `"exists"` - Hefur gildi (þarf ekki `compare`)

**SelectOne:**

- `"eq"` - Jafnt og tiltekinn valkostur
- `"in"` - Er einn af mörgum valkostum (samanburðargildi ætti að vera á SelectMany formi)
- `"exists"` - Hefur gildi (þarf ekki `compare`)

**SelectMany:**

- `"eq"` - Samsvarar nákvæmlega mengi valkosta
- `"exists"` - Hefur að minnsta kosti eitt gildi (þarf ekki `compare`)

#### 2. Keðjuskilyrði

Sameina mörg skilyrði með rökfræðilegum virkjum.

```json
{
    "type": "all",
    "items": [
        {
            "type": "condition",
            "fact": "questions/age",
            "operator": "gt",
            "compare": { "value": 18 }
        },
        {
            "type": "condition",
            "fact": "questions/country",
            "operator": "eq",
            "compare": { "value": "US" }
        }
    ]
}
```

**Eiginleikar:**

- **`type`** - Rökfræðilegur virki:
    - `"all"` - Öll skilyrði verða að vera sönn (AND rökfræði)
    - `"any"` - Að minnsta kosti eitt skilyrði verður að vera satt (OR rökfræði)
- **`items`** (fylki) - Fylki af skilyrðum (geta verið samanburðir eða innfelldar keðjur)
- **`not`** (boolean, valfrjálst) - Snúa við niðurstöðu allrar keðjunnar
- **`name`** (strengur, valfrjálst) - Mannlesanleg merking fyrir skjölun

### Dæmi

#### Sleppa könnun fyrir ánægða viðskiptavini

```json
{
    "type": "FlowControl",
    "data": {
        "condition": {
            "type": "condition",
            "fact": "questions/nps",
            "operator": "gte",
            "compare": { "value": 9 }
        },
        "action": {
            "type": "survey-finish"
        }
    }
}
```

#### Sýna síðu aðeins fyrir ákveðinn aldurshóp

```json
{
    "collections": {
        "teen-questions": {
            "name": "Spurningar fyrir unglinga",
            "condition": {
                "type": "all",
                "items": [
                    {
                        "type": "condition",
                        "fact": "questions/age",
                        "operator": "gte",
                        "compare": { "value": 13 }
                    },
                    {
                        "type": "condition",
                        "fact": "questions/age",
                        "operator": "lt",
                        "compare": { "value": 20 }
                    }
                ]
            },
            "elements": {
                /* ... */
            }
        }
    }
}
```

#### Flókin innfelld skilyrði

```json
{
    "type": "any",
    "name": "Premium notendur eða stórnotendur",
    "items": [
        {
            "type": "condition",
            "fact": "questions/membership",
            "operator": "eq",
            "compare": { "value": "premium" }
        },
        {
            "type": "all",
            "items": [
                {
                    "type": "condition",
                    "fact": "questions/total-spent",
                    "operator": "gt",
                    "compare": { "value": 1000 }
                },
                {
                    "type": "condition",
                    "fact": "questions/active-months",
                    "operator": "gte",
                    "compare": { "value": 6 }
                }
            ]
        }
    ]
}
```

#### Bera saman tvær staðreyndir

```json
{
    "type": "condition",
    "fact": "questions/current-salary",
    "operator": "gt",
    "compare": { "fact": "questions/desired-salary" }
}
```

#### Notkun á `not` eiginleikanum

```json
{
    "type": "condition",
    "fact": "questions/email-consent",
    "operator": "true",
    "not": true // Snýr niðurstöðunni við: satt þegar email-consent er EKKI satt
}
```

## Útgáfusaga

| Útgáfa | Dagsetning | Breytingar             |
| ------ | ---------- | ---------------------- |
| 1.0    | 2025-11-15 | Greiðslueining         |
| 0.5    | 2025-01-24 | Fyrsta opinbera útgáfa |