What this pack is

5 contests, 213 people, 79 poll response rows, 1,529 result rows and 18,225 money edges, built 2026-09-03.

The cycle phase shown on every contest is computed from the election date and how well that date is known. The corpus carries its own status column; it disagrees with the derived phase on 20 of the 61 contests across all twenty-two countries, so it is carried through but never read.

Money rows and result rows are held off the site at their full grain: the staged corpus is 156 MB. What is published here is the aggregate computed once at build time, and every aggregate states the number of rows it stands for.

Everything known to be wrong or limited

licence · grain · method
  • SERVEL preliminary (resultados preliminares) mesa-level XLSX, aggregated to región (presidential) / distrito (diputados) / circunscripción senatorial (senadores). vote_share denominator = SERVEL's own 'Total Sufragios Validamente Emitidos' per constituency. Summary rows excluded as candidates; Votos Nulos/Votos en Blanco kept as bracketed party labels with blank vote_share.
  • POPULATED — SERVEL Reporte de Aportes (transaction-level donations, CLP as filed)
  • POPULATED — published Criteria (2 waves), Cadem Plaza Pública, Panel Ciudadano UDD, and AtlasIntel/Bloomberg toplines and runoff scenarios
  • The 18,225 CLP edges cover the Chamber race and the presidential runoff only. Senate and first-round presidential files are not published separately.
  • vote_share in this pack is a FRACTION of 1 (largest observed 0.698632), not a percentage. India and Nigeria file percentages; the rest file fractions.

The pack's own record

every URL fetched, every inclusion and exclusion
SOURCES.md
# Chile (chl) — Cartevoir Elections pack

Built **2026-09-03** (as_of). Schema: `/workspace/elections-ingest/SCHEMA.md`.
No Wikipedia used as `source_url` anywhere in this pack.

| file | rows |
|---|---|
| `elections.csv` | 5 |
| `people.csv` | 213 |
| `money-edges.csv` | 18225 |
| `polls.csv` | 79 |
| `results.csv` | 1529 |

## Primary sources

### Election calendar / legal basis
- **Servicio Electoral de Chile (SERVEL)** — https://www.servel.cl/ (electoral_body_url)
- **Ley 18.700, Orgánica Constitucional sobre Votaciones Populares y Escrutinios** (BCN LeyChile) —
  https://www.bcn.cl/leychile/navegar?idNorma=242302

### Roster (people.csv)
- **Cámara de Diputadas y Diputados — open-data web service** —
  https://opendata.camara.cl/camaradiputados/WServices/WSDiputado.asmx/retornarDiputadosPeriodoActual
  (official XML web service; `person_id` = official `DIPID`) → **155** diputados
- **Senado de la República** —
  https://www.senado.cl/senadoras-y-senadores/listado-de-senadoras-y-senadores → **50** senadores
- **SERVEL — Candidaturas Presidencial y Parlamentarias 2025** —
  https://www.servel.cl/candidaturas-y-programas-elecciones-presidencial-y-parlamentarias-2025/ and
  `https://www.servel.cl/wp-content/uploads/2025/11/PRELIMINARES_PRESIDENTE_DE_LA_REPUBLICA.zip`
  (official preliminary-results XLSX, `cod_candidato` column used as `person_id`) → **8** 2025 presidential candidates

### Money (money-edges.csv) — SERVEL, probed and confirmed, no invented URL
- `https://repodocgastoelectoral.blob.core.windows.net/public/Presidencial_Parlamentaria_2025/Definitivas/Reporte_Aportes_DEFINITIVAS_2025.xlsx`
  → **16,253** donation transactions (presidential 1st round + parliamentary, chl-dip-2025)
- `https://repodocgastoelectoral.blob.core.windows.net/public/Presidencial_Parlamentaria_2025/segunda_votacion/Reporte_Aportes_segunda_votacion_presidencial.xlsx`
  → **1,972** donation transactions (presidential runoff, chl-pres-2025-r2)
Both are SERVEL's official *Reporte de Aportes* (contributions register) for the 2025 cycle, reached
from SERVEL's electoral-spending publication pages. Amounts are **CLP exactly as filed**. Senate
(`chl-sen-2025`) and 1st-round-only presidential (`chl-pres-2025-r1`) itemized contribution reports
were not located as separate downloadable files at fetch time — not fabricated, simply absent from
this pull; see HANDOFF.

### Polls (polls.csv) — published toplines only, no Wikipedia
- **Criteria, "Agenda Criteria" Agosto M2** (fieldwork 12–14 Aug 2025) —
  https://www.criteria.cl/descargas/Agenda_Criteria_Agosto_2025_M2.pdf
- **Criteria, "Agenda Criteria" Agosto M4** (fieldwork 26–28 Aug 2025) —
  https://www.criteria.cl/descargas/Agenda_Criteria_Agosto_2025_M4.pdf
- **Panel Ciudadano UDD**, Seguimiento presidencial (fieldwork 14–15 Aug 2025) —
  https://panelciudadano.cl/wp-content/uploads/2025/08/PanelCiudadano_UDD-Presidencial-15_ago.pdf
- **Cadem, Plaza Pública** (published 10 Aug 2025) —
  https://cadem.cl/estudios/kast-lidera-en-primera-vuelta-con-28-1pto-jara-cae-a-26-5pts-y-matthei-vuelve-al-tercer-lugar-con-16-5pts/
- **AtlasIntel / Bloomberg** (fieldwork 10–14 Nov 2025) —
  https://atlasintel.org/poll/chile-atlas-bloomberg-poll-presidential-elections-2025-2025-10-31
Data Influye, Black&White, and CEP were checked and excluded — see HANDOFF for the reason on each.

### Results (results.csv)
- **Presidential 1st round + parliamentary, 2025-11-16** —
  https://www.servel.cl/resultados-preliminares-eleccion-presidencial-y-parlamentarias-2025/
- **Presidential runoff, 2025-12-14** —
  https://www.servel.cl/resultados-preliminares-segunda-votacion/
SERVEL mesa-level XLSX, aggregated up (see HANDOFF for grain).
HANDOFF.md
# Chile (chl) — HANDOFF

## Settled next-election call
| field | value |
|---|---|
| next national contest | **2029 general — November 2029 (month precision only)** |
| `date_confidence` | **`constitutional_due`** |
| `cycle_status` | **`sitting`** |
| `election_id` | `chl-gen-2029` |

`election_date` is deliberately **month-precision (`2029-11`)**: Ley 18.700 sets the presidential and
parliamentary election in **November** of the year before the term ends, but the exact Sunday is not
fixed until SERVEL/legal convocation. A specific day would have been invented, so it was not.

`cycle_status=sitting` — confirmed by arithmetic. The runoff was **2025-12-14**, which is **263 days**
before 2026-09-03. That is well outside the **120-day** `just_held` window, so `just_held` is wrong and
`sitting` is right. José Antonio Kast Rist took office **2026-03-11**; the legislature elected
2025-11-16 is live.

## Contests filed (5)
| election_id | date | date_confidence | cycle_status | what |
|---|---|---|---|---|
| `chl-pres-2025-r1` | 2025-11-16 | confirmed_official | sitting | presidential 1st round |
| `chl-pres-2025-r2` | 2025-12-14 | confirmed_official | sitting | presidential runoff — **Kast won** |
| `chl-dip-2025` | 2025-11-16 | confirmed_official | sitting | Cámara de Diputados (155) |
| `chl-sen-2025` | 2025-11-16 | confirmed_official | sitting | Senado (partial renewal) |
| `chl-gen-2029` | 2029-11 | constitutional_due | distant | next general |

## people.csv — 213 rows
`person_id` scheme: **official ids from three different sources, not unified**:
- Diputados (155): official `DIPID` from the Cámara's own XML web service (`opendata.camara.cl`).
- Senadores (50): a stable slug derived from the official `senado.cl` roster page (senado.cl does not
  expose a numeric id on the public listing) — SAY SO: this is a site-slug id, not a numeric official id.
- 2025 presidential candidates (8): SERVEL's own `cod_candidato` from the preliminary-results XLSX.
These three id spaces **do not overlap** and must not be cross-joined by name.
`bio_text` is empty for all 213 rows — neither camara.cl, senado.cl, nor SERVEL publish a verbatim bio
field on these pages/files, so none was authored.

## money-edges.csv is POPULATED — 18,225 rows, CLP as filed
**No URL was invented.** SERVEL's financing pages were probed and the two *Reporte de Aportes* XLSX
files were confirmed live before use (exact URLs in SOURCES.md).

This is transaction-level donation data, not aggregates:
- 16,253 rows from the definitive report (`chl-dip-2025` — presidential 1st round + parliamentary donors)
- 1,972 rows from the runoff report (`chl-pres-2025-r2`)
- `edge_type` = `donation` for all rows (SERVEL's own "aportes" label)
- `amount` is **CLP exactly as filed** — no conversion, no scaling
- `as_filed_note` preserves the source report and the row's filed attributes verbatim, including the
  legal basis for anonymous small-donor rows (Ley 19.884, "aporte menor sin publicidad")

**`person_id` is blank on all 18,225 rows.** SERVEL's aportes register keys donations to the receiving
candidate's **name string** in the XLSX, not to `DIPID` or any other roster id, and SCHEMA.md bars
name fuzzy-matching between money and roster. Rather than guess a join, `person_id` is left blank and
the recipient's name is preserved as-filed in `committee_name`. **Gap**: `chl-sen-2025` (Senate) and the
1st-round-only presidential contributions were not found as separate downloadable files at fetch time —
this money layer covers the deputies race and the runoff only, not the full 2025 cycle.

## results.csv — 1,529 rows, verified against official figures
| contest | rows | grain |
|---|---|---|
| `chl-pres-2025-r1` | 170 | región |
| `chl-pres-2025-r2` | 68 | región |
| `chl-dip-2025` | 1,152 | distrito |
| `chl-sen-2025` | 139 | circunscripción senatorial |

**Runoff verified**: Kast **7,235,213 (58.25%)** vs Jara **5,186,244 (41.75%)** on 12,421,457 valid
votes. **1st round verified**: Jara 26.75%, Kast 23.95%, Parisi 19.80%, Kaiser 13.94%, Matthei 12.44%.

Grain/denominator conventions:
- `vote_share` denominator is SERVEL's own **`Total Sufragios Validamente Emitidos`** per constituency.
- SERVEL summary rows (`Total Suma Calculada`, `Total Sufragios Validamente Emitidos`) are excluded as
  candidate rows.
- `Votos Nulos` / `Votos en Blanco` are retained as bracketed `party` labels (`[VOTOS NULOS]`,
  `[VOTOS EN BLANCO]`) with blank `candidate` and blank `vote_share`.

⚠️ These are SERVEL's **preliminary** (*resultados preliminares*) publications — that is what SERVEL
exposes in machine-readable XLSX. Definitive results come from the Tribunal Calificador de Elecciones
(TRICEL) and are PDF-only. The `source` column says *preliminares* on every row.

## polls.csv — 79 rows, 5 published surveys, 4 organizations
| poll_id | rows | org | field dates |
|---|---|---|---|
| `criteria-2025-08-m2` | 12 | Criteria | 2025-08-12 to 08-14 |
| `criteria-2025-08-m4` | 18 | Criteria | 2025-08-26 to 08-28 |
| `panel-udd-2025-08-15` | 10 | Panel Ciudadano UDD | 2025-08-14 to 08-15 |
| `cadem-plazapublica-2025-08-10` | 17 | Cadem Plaza Pública | unprinted start; publish date 2025-08-10 |
| `atlasintel-bloomberg-2025-11-14` | 22 | AtlasIntel | 2025-11-10 to 11-14 |

Each survey contributes both a first-round topline and its published two/three-way runoff scenarios
(all counted as option-rows, one row per response option, per SCHEMA). All figures were transcribed
directly from each publisher's own PDF bulletin — no figure was read off a news article or Wikipedia.
Where a publisher did not print `sample_n`, `moe`, or an exact `field_start`, those cells were left
blank rather than estimated (see individual `notes` cells for exactly what each bulletin states).

**Excluded, with reasons — do not re-add without a real table:**
- **CEP** — survey #93 (Mar–Apr 2025) was downloaded and read in full. It contains presidential
  *approval/evaluation* figures ("evaluación de personajes") but **no** "if the election were held
  today, for whom would you vote" table in the published report, so no CEP row was filed.
- **Data Influye**, **Black&White** — no downloadable, citable topline document (PDF or data page) was
  located for either house within the time available. Not fabricated, simply not filed.
- 79 rows is short of the ">=40 option-rows" floor's spirit only in that it draws from 4 of the 7 named
  houses; it already clears the >=40 floor on its own.

## Gaps / next steps
- `people.csv` incumbents = 155 diputados + 50 senadores = 205, plus 8 SERVEL-listed 2025 presidential
  candidates = 213 total.
- Deputy period dates were ambiguous in the web service (multiple `FechaInicio` values); the current
  period was selected on inspection.
- Senate is only **partially** renewed each cycle; `chl-sen-2025`'s 139 rows are that 2025 half, not
  the whole 50-seat body.
- Money layer does not yet cover Senate or 1st-round-only presidential filings (see money-edges note
  above) — a downstream consumer should not assume `money-edges.csv` is complete for all four contests.

Licences on the rows

  • SERVEL — official published data (Servicio Electoral de Chile)19,754
  • Cámara de Diputadas y Diputados de Chile — Open Data web service155
  • Senado de la República de Chile — official public listing50