# Ch 5 Practice &mdash; Q3 Revenue vs Plan &mdash; Schema

Flat CSV in `practice-ch5-revenue-plan.csv`. One row per region. The richer nested form, including the chart-state descriptions, is in `practice-ch5-revenue-plan.json`.

## Columns

| Column | Type | Description |
| --- | --- | --- |
| `region` | text | Sales region (`Americas`, `EMEA`, `APAC`, `LATAM`). |
| `revenue_m` | decimal | Actual Q3 revenue in millions of USD. |
| `plan_m` | decimal | Q3 revenue plan in millions of USD. |
| `variance_m` | decimal | `revenue_m - plan_m`. Negative means the region missed plan. |
| `variance_pct` | decimal | `variance_m / plan_m`, as a percentage to one decimal. |

## Row inventory

- 4 rows &mdash; one per region.

Total: 4 rows.

## Headline numbers

These are pinned by `practice-ch5-revenue-plan-contract.test.mjs` in the book repository. Any chart built from this data should reproduce them exactly.

| Claim | Value |
| --- | --- |
| EMEA against plan | `0.85` &mdash; exactly 85% |
| EMEA shortfall | `$1.2M` |
| Quarter revenue | `$31.7M` |
| Quarter plan | `$32.2M` |
| Quarter variance | under 2% |
| Regions beating plan | 3 of 4 |

Regional revenue sums to the quarter total, and regional plan sums to the quarter plan. Both reconciliations are tested.

## Deliberate design choices

**The aggregate has to look unremarkable.** The quarter lands within 2% of plan while EMEA misses by 15%. If the total looked alarming, a reader would investigate regardless of how the chart was drawn, and the chapter's point would evaporate. The whole lesson is that clutter is what stops someone seeing a 15% regional miss inside a quarter that reads as fine.

**Three regions beat plan, one misses.** A single outlier against a uniform background is the cleanest case for the one-accent-colour rule the decluttered version applies. Two or three misses would make the accent ambiguous.

**Values are in `$M` at the same scale as `nadia-q3-region`.** Both are revenue-by-region figures, in Chapters 5 and 7. Holding them to a comparable scale means a reader moving between the two chapters is not silently recalibrating what a big number looks like.

## What this dataset is for

Chapter 5's *Practice with us* problem. The reader is shown the chart as Copilot generated it, with every default decoration switched on, and asked to inventory each element as **encodes** / **helps read** / **neither**. The JSON records both chart states so the exercise can be checked: `chart_states.cluttered.decorations` lists what is present, and `chart_states.decluttered` describes what survives the removal pass.

This is a practice-scope dataset, not one of the fourteen character datasets. No anchor character owns it.

## License

Released for teaching use alongside *The Defensible Decision*. Use freely.
