# 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 2026** — https://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 ``` 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