SPB Git forge

spb/qc26

Public
10commits 1branches 0releases
2.8 MBsize
maindefault branch
17 days agolast push
Python 51.6% TypeScript 46.7% CSS 1.7%
ZIP tar.gz
NameLast commitUpdated
deploy QC26 2.0.0 — au-delà des sondages + refonte visuelle 17 days ago
engine QC26 2.0.0 — au-delà des sondages + refonte visuelle 17 days ago
web Web : refonte mobile-first — cartes à la place des tableaux,... 17 days ago
.gitignore QC26 v1.0.0 — moteur (DGEQ, sondages, documents, modèle, live) + site... 18 days ago
CLAUDE.md QC26 2.0.0 — au-delà des sondages + refonte visuelle 17 days ago
README.md QC26 2.0.0 — au-delà des sondages + refonte visuelle 17 days ago
README.md source

# QC26 — Québec 2026. Comprendre. Prévoir. Suivre.

Plateforme indépendante de données, d'analyse et de prévision consacrée à l'élection générale québécoise du 5 octobre 2026https://www.qc26.ca

QC26 n'appuie aucun parti. Aucune donnée sans provenance, aucune projection sans incertitude, aucune position politique sans source, aucun résultat live inventé.

# Architecture

text
engine/                    Python 3.12 · FastAPI · SQLAlchemy (SQLite, portable PostgreSQL) · numpy/scipy
  qc26/config.py           paramètres (élection, modèle, connecteurs) — préfixe QC26_
  qc26/parties.py          registre des partis (couleurs, correspondances DGEQ)
  qc26/regions.py          classification des 127 circonscriptions par région
  qc26/db.py               schéma complet (provenance, versions, audit)
  qc26/ingest/official.py  Élections Québec : circonscriptions 2026, géométrie, électeurs, partis/chefs, candidatures,
                           résultats 2018-2022, transposition 2022 → carte 2026 (sections de vote)
  qc26/ingest/polls_bootstrap.py  amorçage de l'historique des sondages depuis 2022 (index tiers, remplacé par les PDF)
  qc26/connectors/polls/   pipeline documentaire : URL → SHA-256 → archive → texte/tableaux → extraction LLM → validation
  qc26/connectors/parties/ documents officiels des partis : découverte (Firecrawl), versionnement, propositions (page + citation), diff
  qc26/model/              agrégation (poids, effets maison, Kalman), circonscriptions (swing proportionnel), Monte Carlo, runs versionnés
  qc26/compass/            48 énoncés · positions dérivées des propositions officielles · appariement
  qc26/live/               flux officiel du soir du vote (validation/quarantaine, événements, SSE), simulation 2022, nowcast
  qc26/api/                API publique (/api/*) + backoffice (/api/admin/*, Bearer)
  qc26/scheduler.py        veille sondages (15 min), documents (2 h), DGEQ (4 h), recalcul quotidien, flux live (60 s)
web/                       Next.js 16 · React 19 · Tailwind v4 · SVG maison (graphiques, carte d3-geo)
  src/lib/parties.ts       registre web (logos officiels dans public/parties/*/ + source.json)
  src/components/          design system (ui, party, charts, map, shell, live, compass…)
  src/app/                 pages : accueil, prévision, sondages(+inspector), carte, circonscriptions, boussole, partis, enjeux,
                           documents, méthodologie/changelog, live, model-vs-reality, replay, statut, admin
deploy/qc26.manifest.json  manifeste maclustr-dispatch (M1M32:~/dispatch/apps/qc26.json)

# Démarrage local

bash
cd engine && uv venv --python 3.12 .venv && uv pip install --python .venv/bin/python -e ".[dev]"
cp .env.example .env   # QC26_ANTHROPIC_API_KEY, QC26_FIRECRAWL_API_KEY, QC26_ADMIN_TOKEN
.venv/bin/python -m uvicorn qc26.main:app --port 8201     # bootstrap automatique si la base est vide
cd ../web && pnpm install && QC26_ENGINE_URL=http://127.0.0.1:8201 pnpm dev

Le premier démarrage sur base vide télécharge les données officielles, amorce l'historique des sondages et publie un premier run. La vérification des documents originaux (PDF) et l'analyse des documents des partis se font ensuite par le planificateur (ou POST /api/admin/polls/verify, POST /api/admin/documents/sync).

# Faits structurants

  • 127 circonscriptions, majorité à 64 (carte 2026 : Bellefeuille et Marie-Lacoste-Gérin-Lajoie ajoutées). Le seuil est dérivé de la liste officielle, jamais codé.
  • La transposition 2022 → 2026 par sections de vote reproduit exactement les chiffres publiés lors de la refonte (CAQ 93 · PLQ 20 · QS 11 · PQ 3).
  • Chez Élections Québec, « PCQ » désigne le Parti communiste ; le Parti conservateur est « PCOQ » (géré dans parties.py).

# Production

Déployé par mld (passerelle M1M32) : mld stage <dir> qc26mld deploy qc26. Deux processus PM2 (qc26-engine :8201, qc26-web :8200) + qc26-ngrok (www.qc26.ca → 8200). Le web réécrit /api/* vers le moteur.

# Modèle 2.0 (2026-09-07) — au-delà des sondages

Quatre familles de signaux indépendants, archivés avec leur provenance et publiés séparément (/signaux, summary.components) : marchés de prédiction Polymarket (repondération des simulations, poids 30 %), fondamentaux (satisfaction du gouvernement → prior sur le parti sortant, poids décroissant vers 0 le jour du vote), momentum borné (prime au chef, attention Wikipédia, ton de presse classé par LLM), élections partielles depuis 2022 (excès de swing local). La vue « sondages seuls » reste publiée. Refonte visuelle « Editorial Data Intelligence » : thème clair/sombre, Fraunces + Inter + JetBrains Mono, gaufre des 127 sièges, tendance interactive.