# Questions

Question kinds, answer keys, feedback and explanations, and the held questions Kapi's test draws from.

Every question, with its answer, feedback and explanation. Practice questions sit on pages; held questions sit only in a test's pool.

## Every question

A question. Its kind sets the keys it takes besides id, kind, prompt, situation and explanation.

- `id`: ID, required. The question's ID. Its text IDs start with it, such as q1.prompt.
- `kind`: `"choice"`, `"multi"`, `"exact"`, `"order"`, `"match"`, required. The question's kind.
- `prompt`: text ID, required. The text ID of the question.
- `situation`: text ID. The text ID of the situation it's set in, shown before the question.
- `explanation`: text ID. The text ID of why the answer is right, shown after an answer.

## Kinds

| Kind | What it asks |
| --- | --- |
| [`choice`](#choice) | One right choice. |
| [`multi`](#multi) | One or more right choices. |
| [`exact`](#exact) | A typed answer. |
| [`order`](#order) | Put items in order. |
| [`match`](#match) | Sort items into groups. |

## `choice`

One right choice.

- `choices`: list of choices, required. The choices.
- `choices[].id`: ID, required. The choice's ID.
- `choices[].text`: text ID, required. The text ID of the choice.
- `choices[].feedback`: text ID. The text ID of why this choice is right or wrong, shown after an answer.
- `answer`: ID, required. The ID of the right choice.

## `multi`

One or more right choices.

- `choices`: list of choices, required. The choices.
- `choices[].id`: ID, required. The choice's ID.
- `choices[].text`: text ID, required. The text ID of the choice.
- `choices[].feedback`: text ID. The text ID of why this choice is right or wrong, shown after an answer.
- `answer`: list of IDs, required. The IDs of every right choice.

## `exact`

A typed answer.

- `accepted`: list of texts, required. The answers Kapi accepts, as the words themselves.
- `match`: `"prose"`, `"exact"`, required. prose ignores case, accents, punctuation and extra spaces. exact keeps them all, for code and symbols.

## `order`

Put items in order.

- `items`: list of items, required. The items.
- `items[].id`: ID, required. Its ID.
- `items[].text`: text ID, required. The text ID of its words.
- `answer`: list of IDs, required. The item IDs, in the right order.

## `match`

Sort items into groups.

- `items`: list of items, required. The items to sort.
- `items[].id`: ID, required. Its ID.
- `items[].text`: text ID, required. The text ID of its words.
- `groups`: list of items, required. The groups.
- `groups[].id`: ID, required. Its ID.
- `groups[].text`: text ID, required. The text ID of its words.
- `answer`: object, required. Each item's ID, with the ID of its group.

## Choices and items

Each choice in `choices`:

- `id`: ID, required. The choice's ID.
- `text`: text ID, required. The text ID of the choice.
- `feedback`: text ID. The text ID of why this choice is right or wrong, shown after an answer.

Each item or group in `items` and `groups`:

- `id`: ID, required. Its ID.
- `text`: text ID, required. The text ID of its words.

## Practice and the test

A practice question sits on one page, in a `question` block, and shows its feedback and explanation after an answer. A held question sits only in a test's `pool`, in `assessments` in `kapi-works.json`, and Kapi's test draws from it.

- `assessments[].id`: ID, required. The test's ID.
- `assessments[].title`: text ID, required. The text ID of the test's name.
- `assessments[].pool`: list of IDs, required. The IDs of the questions the test draws from. These held questions sit on no page.
- `assessments[].suggest`: object. The test settings Kapi suggests. The company decides.
- `assessments[].suggest.draw`: whole number, required. How many questions each attempt draws, up to 50.
- `assessments[].suggest.passMark`: whole number, required. The pass mark, as a percentage.
- `assessments[].suggest.attempts`: whole number. How many attempts a person gets, up to 10.

## What Kapi checks

| Check | Severity | What Kapi says |
| --- | --- | --- |
| [`answer_key_invalid`](https://docs.kapiworks.com/build/reference/checks/answer-key-invalid) | Error | The answer key …. |
| [`explanation_missing`](https://docs.kapiworks.com/build/reference/checks/explanation-missing) | Error | This question has no explanation of why the answer is right. |
| [`feedback_missing`](https://docs.kapiworks.com/build/reference/checks/feedback-missing) | Error | Choice … has no feedback. Every choice says why it's right or wrong. |
| [`held_question_on_page`](https://docs.kapiworks.com/build/reference/checks/held-question-on-page) | Error | This question is in …'s pool, so it can't also sit on a page. Kapi's test would show it again. |
| [`held_kind_not_allowed`](https://docs.kapiworks.com/build/reference/checks/held-kind-not-allowed) | Error | Kapi's test takes choice and multi questions only. |
| [`pool_too_small`](https://docs.kapiworks.com/build/reference/checks/pool-too-small) | Error | The pool holds fewer questions than the test draws (…). |
| [`pool_small`](https://docs.kapiworks.com/build/reference/checks/pool-small) | Warning | The pool holds less than one and a half times the draw (…), so retakes repeat questions. |
| [`question_unused`](https://docs.kapiworks.com/build/reference/checks/question-unused) | Warning | No page or pool uses this question. |
| [`few_situations`](https://docs.kapiworks.com/build/reference/checks/few-situations) | Tip | … Questions set in a situation check that people can use what they learned. |
