# Marking schemes

Marking is configured on each **section**, and any question can override it.
Two schemes, three numbers — that combination covers everything from a school
quiz to a JEE mock.

## standard

- Fully correct → **+correct**
- Anything else → **−negative**
- Unanswered → **0**, always. Negative marking punishes wrong answers, never silence.

## jee_partial (for multi-correct MCQs)

With `{"correct": 4, "per_correct": 1, "negative": 2}`:

| Student selects | Correct answer a,c | Marks |
| --- | --- | --- |
| a, c | all correct | **+4** |
| a | clean subset | **+1** (1 × per_correct) |
| a, b | any wrong option | **−2** |
| nothing | unanswered | **0** |

Single-correct, integer, numeric, true/false and fill-blank questions grade
full-or-negative under either scheme.

## Where marks come from

- `numeric` accepts a **tolerance**: `{"value": 9.8, "tolerance": 0.1}` —
  and alternative keys or ranges via `accepted_values` (see JSON import).
- `fill_blank` accepts any listed answer, case- and spacing-insensitive, in
  **any language** the question carries.
- `long_answer` is marked by you (or your agent) against the rubric; marks
  clamp between −negative and the question's maximum.

Published tests grade against a **frozen copy** of every question — editing
the bank later never changes how a live test scores.
