# 2023 parliamentary votes on the proposed Senate map

**Municipal estimate — not observed district results or a forecast.**

Real results: [RIK results viewer](https://www.rik.parlament.gov.rs/542645/rezultati/), checked against [the final report](https://www.rik.parlament.gov.rs/vest/sr/564488/51-sednica-republicke-izborne-komisije.php). The cached feed is dated 09.01.2024 20:21:00; it includes the December 30 and January 2 reruns.

## Hypothetical first-past-the-post seats

| Electoral list | Estimated seats |
|---|---:|
| SNS coalition | 229 |
| Serbia Against Violence | 31 |
| Shaip Kamberi list | 3 |
| SVM / VMSZ | 2 |
| SDA Sandžaka | 1 |

Every list competes separately, including lists below the actual parliamentary threshold. The largest estimated vote total wins one senator. This does not reproduce Serbia’s actual proportional allocation.

## Allocation and limitations

For each municipality and each list: **seat votes = official municipal votes × (municipal census residents in seat ÷ total municipal census residents)**. Sum contributions when a seat includes several municipalities. Census weights retain full precision; fractional votes are model outputs. Shares use valid list votes, excluding invalid ballots.

All 168 census municipalities have matching official identifiers. Belgrade and Niš city municipalities are separate sources. Seats within the same municipality inherit the same voting shares: this cannot distinguish Ledine from the blocks, the two Danube banks within Palilula, or Bor town from its surrounding villages. Population weights also assume constant votes per resident within each municipality; they do not constitute an adult-electorate or turnout model.

The polling-station selector was inspected, but contains voting-place names without catchment polygons. No votes were assigned to a district merely because a voting building lies there. A finer reconstruction needs verified 2023 polling catchments (or address ranges) and their results. Current local differences and marginal-seat counts should not be interpreted as measured.

Uniform voting and votes per resident within each municipality. No polling catchments, tactical voting, candidate effects or future swing model. Within-municipality urban/rural and neighbourhood differences are unresolved. These are illustrative seat estimates, not observed district results or forecasts.

## Reconciliation

- Official national valid votes: 3,710,978.
- Allocated across the 266 seats: 3,650,059.
- Excluded Kosovo electorate: 23,079 valid votes.
- Excluded Prisons: 6,651 valid votes.
- Excluded Overseas: 31,189 valid votes.
- Excluded categories are kept separate because residence-to-seat links are unavailable; Kosovo also lies outside this census-seat map.
- Every electoral list reconciles exactly from municipalities to regions and from all regions to the final national report. Allocation preserves every municipal list total to numerical precision.

## Files and reproduction

- `election_2023_municipal_votes.csv`: actual source counts for all 18 lists.
- `election_2023_allocation_weights.csv`: full-precision census allocation fractions.
- `election_2023_seat_estimates.csv`: estimated votes and shares for every seat/list.
- `data/elections_2023/`: unmodified API responses, identifiers and SHA-256 manifest.

Run `.venv/bin/python download_elections.py`, `.venv/bin/python model_elections.py`, then `MPLCONFIGDIR=/tmp/serbia-matplotlib .venv/bin/python build_presentation.py --html-only`.
