# Data dictionary

**All records are fictional.** Keep the raw files unchanged and build your analysis separately. `rules.json` defines the population and assumptions. Blank, zero and unknown are not interchangeable.

## opportunities.csv

One exported opportunity snapshot. A later row supersedes an earlier one only after the reporting cutoff and tied-row rules are applied.

| Field | Meaning |
|---|---|
| `export_row` | Export label, not an opportunity identity. Ignore this field when deciding whether two otherwise identical business records are retries. |
| `opportunity_id` | Persistent deal identity. Multiple deals can belong to one account. |
| `account_id` | Persistent fictional customer identity; not the deduplication key for opportunities. |
| `snapshot_at` | Timezone-aware record version time. Information after as_of is unavailable to the dated report. |
| `amount` | Nominal opportunity value in the currency column; not contracted revenue or cash. |
| `currency` | ISO-style currency label; the exercise admits USD only. |
| `stage` | Join key to stage_rules.csv. An unmapped value is an exception, not probability zero. |
| `expected_close` | Planned close date, YYYY-MM-DD. An expectation is not a guaranteed sale. |
| `last_activity` | Last recorded activity date. Older than the stated threshold creates a review flag, not automatic loss. |

## stage_rules.csv

One stipulated stage rule.

| Field | Meaning |
|---|---|
| `stage` | Exact stage name used in the opportunity export. |
| `probability` | Assumed numeric weight from 0 to 1; it has not been empirically calibrated. |
| `is_open` | Literal true/false. Apply to the latest eligible version only. |
