---
title: Questions
description: The five question types, their criteria, and the answer each returns.
icon: list-checks
---

`questions` is a map from an id to a question. Ids are letters, digits, underscores and spaces, starting with
a letter or underscore. Each question has a `type`, `instructions`, and type-specific `criteria`.

Choose the type of answer your application needs: a decision, an ordered rating, a calculated quantity
or a date.

| Type | Asks for | `criteria` | Answer |
|---|---|---|---|
| `noul` | Is this true? | optional `{ "true": …, "false": … }` | `noul`, a probability 0 to 1 |
| `choice` | One of a set | option name → description, 2 to 255 options | `choice`, `confidence`, `probabilities` |
| `score` | A level on an ordered scale | ordered array of 2 to 10 levels | `score`, `level`, `confidence`, `probabilities` |
| `number` | A computed quantity | optional `{ "unit": …, "range": … }` | `number`, `confidence` |
| `date` | A computed date | none | `date`, `confidence` |

`options` is accepted as an alias for choice criteria and `levels` for score criteria, as in Jev.

## Instructions and criteria

`instructions` describes the decision, including the policy conditions the generated rules must implement. It can be a string, an object or a list; structured content is
kept as canonical JSON text. Criteria describe each answer value in the words of your policy.

```json
{
  "is_urgent": {
    "type": "noul",
    "instructions": "Does this ticket need priority review?",
    "criteria": {
      "true": "An ongoing issue is blocking normal business operations.",
      "false": "A general question or a non-blocking request."
    }
  },
  "owner": {
    "type": "choice",
    "instructions": "Which team should own it?",
    "criteria": { "payments": "money movement", "platform": "outages and errors", "other": "anything else" }
  },
  "severity": {
    "type": "score",
    "instructions": "How severe is it?",
    "criteria": ["low", "medium", "high"]
  },
  "credit_days": {
    "type": "number",
    "instructions": "For how many days should service credit apply?",
    "criteria": { "unit": "days", "range": "[0..365]" }
  },
  "respond_by": {
    "type": "date",
    "instructions": "By when must the customer receive an answer?"
  }
}
```

The `range` of a number question is a condition, such as `[0..1000]` or `> 0`.

## How a question becomes a decision

For every question there is exactly one decision in the model with the same name, typed by the question kind:
a `noul` is a boolean decision, a `choice` is a decision typed by its options, a `score` by its ordered levels,
a `number` and a `date` by their type. The generator may add intermediate decisions; it may not add outputs you
did not ask for.

## Answers

This illustrative response shows the fields for each type; it is not a recorded execution of the questions
above. Number and date outcomes require explicit policy rules, such as a credit period and response window.

```json
{
  "answers": {
    "is_urgent": { "type": "noul", "noul": 0.98 },
    "owner": { "type": "choice", "choice": "platform", "confidence": 1.0, "probabilities": { "platform": 1.0 } },
    "severity": { "type": "score", "score": 2.0, "level": "high", "confidence": 1.0, "probabilities": { "2": 1.0 } },
    "credit_days": { "type": "number", "number": 14, "confidence": 1.0 },
    "respond_by": { "type": "date", "date": "2026-10-18", "confidence": 1.0 }
  }
}
```

When every input is given as matching structured data, every answer is certain and the probabilities collapse
to one value. When the reader had to extract an input, the
reader's uncertainty propagates through execution; answers may carry probability mass on more than
one outcome. An input probability does not necessarily equal an answer's confidence. See
[Determinism and confidence](/docs/concepts/determinism-and-confidence).
