# Question bank reference

[`../question-bank.json`](../question-bank.json) has top-level fields `version`, `unitConvention`, `scope`, and `questions`. It currently declares version 1, 16 original questions, 16 parameterized retries, and expert review pending. Amounts are generally in $ millions unless stated; rates are decimals.

## Question record

Each record has the same fields:

- `id`, `topic`, `title`, `prompt`: stable identifier and candidate-facing scenario.
- `assumptions`: constraints needed for the calculation.
- `parameters`: original numeric inputs; `retry` contains replacement inputs for the same task.
- `formulas`: reference calculation expressions keyed by answer field.
- `expected`, `retryExpected`: numeric answer maps, keyed by result field.
- `workedSolution`: short calculation/reasoning steps.
- `misconceptions`: objects with `claim` and `followup` prompts.
- `followups`, `followupAnswerGuide`: prompts and guidance for a human discussion.
- `level`: practice difficulty label.
- `numericBridges`: optional named intermediate calculation references.
- `provenance`: source note; the bank describes scenarios and wording as original fictional material, not copied from course questions.
- `reviewStatus`: current review note. It currently says formula-tested and expert review pending.

Topics currently represented: accounting (4), DCF (3), valuation (2), mergers (2), LBO (2), comparables (1), financial institutions (1), and real estate (1). This is a demo bank, not evidence of comprehensive coverage.

## Grading semantics

`gradeAnswer` in [`../grade-answer.mjs`](../grade-answer.mjs) takes `{question_id, attempt, answers, concept_choice?}`. Unknown question IDs, attempts, answer objects, or answer field names are invalid. It compares only supplied numeric fields and returns each field's `provided`, `expected`, `matches`, and diagnostic explanation, plus unanswered expected fields. Missing values are not inferred.

The optional concept check reports a match only when `concept_choice === 0`; its explanation comes from the corresponding concept prompt data in `practice-engine.js`. This is only an explicit selection check. It does not grade free-text explanation, spoken reasoning, transcription quality, or interview performance.
