Unit costs, media rate cards and entity registries, per country, every value sourced
# reference-data
**Unit costs, media rate cards and entity registries, per country, every value
sourced.**
This is where counts become money. It is also the most attackable part of the
project: an estimate is only as defensible as the price it multiplies by, and the
first serious challenge to any figure Mapomo publishes will be aimed here.
Organised by country directory. The country is data, never code, and this
repository is the largest expression of that rule.
```
countries/
SN/ Senegal
meta.yaml currency, administrative levels, campaign period
unit-costs/
outdoor.yaml
broadcast.yaml
rally.yaml
sources/ archived source documents and their hashes
NG/ Nigeria first deployment, January 2027
meta.yaml two elections, campaign windows, field scope
unit-costs/ one field value, the rest declared gaps
sources/ what is needed and who can get it
ZA/ South Africa, the calibration country
GH/ KE/ CD/
```
## The rule that governs this repository
**Every value carries its source.** What document, issued by whom, dated when,
obtained how. Unsourced values are not provisional, they are rejected. A number
whose origin cannot be traced cannot be defended, and an estimate that cannot be
defended does more damage than no estimate.
This is enforced in review, in the pull request template, and in CI:
`tools/validate.py` converts every entry to the contract shape, validates it
against `unit-cost.schema.json` v0.1.0, and rejects an entry with no source.
## Structure of an entry
Entries conform to
`unit-cost.schema.json`.
Every entry has:
* a **price**, with its currency and the date it is expressed in
* a **range**, because real markets are not one number and an estimate built on a
single figure understates its own uncertainty
* a **validity window**, because campaign-period prices are frequently not
list prices
* a **scope**: region, urban or rural, tier. A national average that hides …