You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
280 lines
13 KiB
280 lines
13 KiB
"""Configuration constants for the parliamentary explorer.
|
|
|
|
This module contains all constant definitions used across the explorer.
|
|
It is intentionally free of Streamlit and DuckDB dependencies.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Dict
|
|
|
|
__all__ = [
|
|
"PARTY_COLOURS",
|
|
"SVD_THEMES",
|
|
"KNOWN_MAJOR_PARTIES",
|
|
"CURRENT_PARLIAMENT_PARTIES",
|
|
"_PARTY_NORMALIZE",
|
|
"CANONICAL_RIGHT",
|
|
"CANONICAL_LEFT",
|
|
]
|
|
|
|
CANONICAL_RIGHT: frozenset[str] = frozenset(
|
|
{
|
|
"PVV",
|
|
"FVD",
|
|
"JA21",
|
|
"SGP",
|
|
}
|
|
)
|
|
|
|
CANONICAL_LEFT: frozenset[str] = frozenset(
|
|
{
|
|
"SP",
|
|
"PvdA",
|
|
"GL",
|
|
"GroenLinks",
|
|
"GroenLinks-PvdA",
|
|
"DENK",
|
|
"PvdD",
|
|
"Volt",
|
|
}
|
|
)
|
|
|
|
PARTY_COLOURS: Dict[str, str] = {
|
|
"VVD": "#1E73BE",
|
|
"PVV": "#002366",
|
|
"D66": "#00A36C",
|
|
"CDA": "#4CAF50",
|
|
"SP": "#E53935",
|
|
"PvdA": "#D32F2F",
|
|
"GroenLinks": "#388E3C",
|
|
"GroenLinks-PvdA": "#2E7D32",
|
|
"CU": "#0288D1",
|
|
"SGP": "#F4511E",
|
|
"PvdD": "#43A047",
|
|
"FVD": "#6A1B9A",
|
|
"JA21": "#7B1FA2",
|
|
"BBB": "#8D6E63",
|
|
"NSC": "#FF8F00",
|
|
"Nieuw Sociaal Contract": "#FF8F00",
|
|
"DENK": "#00897B",
|
|
"50PLUS": "#7E57C2",
|
|
"Volt": "#572AB7",
|
|
"ChristenUnie": "#0288D1",
|
|
"Unknown": "#9E9E9E",
|
|
}
|
|
|
|
SVD_THEMES: dict[int, dict[str, str]] = {
|
|
1: {
|
|
"label": "Rechts kabinetsbeleid versus links oppositiebeleid",
|
|
"explanation": (
|
|
"Deze as scheidt het rechts kabinetsbeleid van links oppositiebeleid. "
|
|
"Aan de positieve kant staan moties die passen bij het kabinetsbeleid: "
|
|
"Eurofighter Typhoons, defensie-uitgaven naar 3% bbp, F-35 reservedelen, "
|
|
"marine-steun aan Rode Zee en asielrestricties. "
|
|
"PVV, VVD, NSC en BBB scoren sterk positief. "
|
|
"Aan de negatieve kant staan moties uit de oppositie: "
|
|
"zorgbuurthuizen voor ouderen, boycot van Israël, sancties, en internationale "
|
|
"klimaatsamenwerking. GroenLinks-PvdA, SP, PvdD en Volt scoren negatief. "
|
|
"Deze as weerspiegelt de coalitie-oppositie dynamiek."
|
|
),
|
|
"positive_pole": "Kabinetsbeleid: PVV, VVD, NSC, BBB, JA21 — defensie en restricties",
|
|
"negative_pole": "Oppositiebeleid: GroenLinks-PvdA, SP, PvdD, Volt, DENK — zorg en multilateraal",
|
|
"flip": False,
|
|
},
|
|
2: {
|
|
"label": "PVV/FVD-populisme versus mainstream-partijen",
|
|
"explanation": (
|
|
"Deze as scheidt het PVV/FVD-populisme van het overige parliament. "
|
|
"Alleen PVV en FVD scoren positief; alle andere partijen scoren negatief. "
|
|
"Positieve moties: Syriërs terugsturen, geen geld aan Jordanië, tijdelijke "
|
|
"bescherming Oekraïne beëindigen, uitstappen uit WHO en klimaatakkoorden. "
|
|
"Negatieve moties: digitale toegankelijkheid Caribisch Nederland, ethiekprogramma "
|
|
"Defensie, zorg voor slachtoffers bombardement Hawija, internationale klimaatsamenwerking. "
|
|
"Dit is geen links-rechts verdeling maar een populistisch vs. mainstream onderscheid."
|
|
),
|
|
"positive_pole": "PVV en FVD — soevereiniteit en anti-establishment",
|
|
"negative_pole": "Overige partijen: VVD, CDA, SGP, ChristenUnie, GroenLinks-PvdA, D66, Volt, BBB",
|
|
"flip": False,
|
|
},
|
|
3: {
|
|
"label": "Verzorgingsstaat versus bezuinigingen en marktwerking",
|
|
"explanation": (
|
|
"Deze as weerspiegelt de spanning tussen staatsingrijpen en marktliberalisme, "
|
|
"aangescherpt door de kabinetscrisis van 2025. Aan de positieve kant staan moties "
|
|
"die bezuinigingen op zorg en het gemeentefonds willen terugdraaien, winstuitkeringen "
|
|
"in de zorg verbieden en publieke controle over ziekenhuisfusies eisen. SP, PvdD, "
|
|
"GroenLinks-PvdA stemmen hier gelijk — ondanks hun tegengestelde PC1-posities. "
|
|
"Aan de negatieve kant staan moties "
|
|
"over marktwerking in de zorg, fiscale bedrijfsopvolgingsfaciliteiten (VVD), "
|
|
"doorgaan met besturen ondanks de kabinetscrisis (VVD/BBB) en defensie-"
|
|
"uitgaven van 3,5% bbp."
|
|
),
|
|
"positive_pole": "Pro-verzorgingsstaat: SP, PvdD, GroenLinks-PvdA (anti-bezuinigingen)",
|
|
"negative_pole": "Marktliberaal en fiscaal conservatief: VVD, D66, CDA, SGP, BBB",
|
|
"flip": True,
|
|
},
|
|
4: {
|
|
"label": "Mainstreampartijen versus FVD/DENK-oppositie",
|
|
"explanation": (
|
|
"Deze as scheidt het mainstream parliament van FVD en DENK. "
|
|
"Aan de positieve kant stemmen vrijwel alle partijen voor dezelfde moties: "
|
|
"openbare toiletten, vaderbetrokkenheid bij opvoeding, internationale "
|
|
"samenwerking met Australië en Canada, en long covid-expertise. "
|
|
"D66, CDA, VVD, PVV, GL-PvdA, SP, Volt en 50PLUS stemmen allemaal samen. "
|
|
"Aan de negatieve kant stemmen alleen FVD en DENK voor — zij nemen "
|
|
"regelmatig gepolariseerde posities die afwijken van het mainstream."
|
|
),
|
|
"positive_pole": "Mainstreampartijen: D66, CDA, VVD, PVV, GL-PvdA, SP, Volt, 50PLUS — breedgedragen moties",
|
|
"negative_pole": "FVD en DENK: oppositieposities buiten de mainstream",
|
|
"flip": True,
|
|
},
|
|
5: {
|
|
"label": "Christelijk-sociaal en gemeenschapswaarden versus progressieve individuele rechten",
|
|
"explanation": (
|
|
"Deze as scheidt christelijk-sociale partijen van progressieve partijen op het "
|
|
"vlak van gemeenschapswaarden. Aan de positieve kant staan moties over "
|
|
"schuldhulpverlening via vrijwilligersorganisaties, maatschappelijke "
|
|
"diensttijd voor jongeren, gastouderopvang en financiële prikkels voor scholieren. "
|
|
"ChristenUnie, SGP, CDA en NSC voeren hier de toon; ook D66 en FVD scoren positief. "
|
|
"Aan de negatieve kant staan moties over wettelijke erkenning van meerouderschap, "
|
|
"abortusrecht in het EU-Handvest, armoedebeleid en sociaal-maatschappelijke thema's. "
|
|
"SP, VVD, GL-PvdA, PvdD en Volt scoren negatief."
|
|
),
|
|
"positive_pole": "Christelijk-sociaal: ChristenUnie, SGP, CDA, NSC — gemeenschap en vrijwilligers",
|
|
"negative_pole": "Progressief-individueel: SP, VVD, GL-PvdA, PvdD, Volt — individuele rechten",
|
|
"flip": False,
|
|
},
|
|
6: {
|
|
"label": "Migratie en cultuur versus klimaat en progressieve inclusie",
|
|
"explanation": (
|
|
"Deze as combineert migratie- en culturele posities. Aan de positieve kant staan "
|
|
"moties over asielrestricties, nationale cultuur en identiteit, en beperkte "
|
|
"immigratie. PVV, JA21, BBB, CDA, ChristenUnie, VVD, SGP, FVD en DENK scoren positief. "
|
|
"Aan de negatieve kant staan moties over klimaatmaatregelen, progressieve "
|
|
"inclusie, discriminatiebestrijding en internationale samenwerking. "
|
|
"SP, PvdD, D66, GL-PvdA en Volt scoren negatief. "
|
|
"De as scheidt partijen met restrictief migratiebeleid van partijen met "
|
|
"progressief-inclusief beleid."
|
|
),
|
|
"positive_pole": "Restrictief migratiebeleid: PVV, JA21, BBB, CDA, ChristenUnie, VVD, SGP, FVD, DENK",
|
|
"negative_pole": "Progressieve inclusie: SP, PvdD, D66, GL-PvdA, Volt — klimaat en diversiteit",
|
|
"flip": False,
|
|
},
|
|
7: {
|
|
"label": "Bestuurlijk pragmatisme en implementatie (indicatief)",
|
|
"explanation": (
|
|
"Een residuele as die overwegend beleidsdossiers uit 2024 (vorige parlementaire "
|
|
"periode) omvat. De scores zijn smal (max ~11 punten) en de partijcombinaties "
|
|
"ideologisch divers — dit label is indicatief. Aan de positieve kant staan "
|
|
"pragmatische bestuursmoties: een compleet kostenoverzicht van producten van eigen "
|
|
"bodem, papieren schoolboeken voor basisvaardigheden, een invoeringstoets voor het "
|
|
"minimumloon en de A2-snelwegplanning. ChristenUnie, Volt, DENK en SP scoren "
|
|
"positief. Aan de negatieve kant staan meer ideologisch geladen moties: een "
|
|
"landelijk stookverbod (PvdD), het strafbaar stellen van verbranding van religieuze "
|
|
"geschriften (DENK), chroom-6 schadevergoedingen en tegenhouden van nieuwe "
|
|
"gaswinning. GroenLinks-PvdA, VVD, FVD en JA21 scoren negatief."
|
|
),
|
|
"positive_pole": "Praktisch-bestuurlijk: ChristenUnie, Volt, SGP, DENK, SP",
|
|
"negative_pole": "Ideologisch-principieel: GroenLinks-PvdA, VVD, FVD, JA21",
|
|
"flip": True,
|
|
},
|
|
8: {
|
|
"label": "Vaccinatiebeleid, onderwijs en regionale huisvesting (indicatief)",
|
|
"explanation": (
|
|
"Een residuele as die overwegend thematisch diverse moties uit 2024-2025 vangt. "
|
|
"Aan de positieve kant staan moties over vaccinatiegraad-verlaging voor kinderen, "
|
|
"een VWO-profiel kunst en cultuur, stages voor mbo-studenten in het buitenland, "
|
|
"en woningbouw voor jongeren in kleine kernen. BBB, SGP en JA21 scoren positief. "
|
|
"Aan de negatieve kant staan moties over het instellen van een vaccinatiecommissie, "
|
|
"heropening van het coronaoversterfte-onderzoek, regionale energiestrategieën "
|
|
"en toegankelijkheid van het basispakket. SP, DENK en PvdD scoren sterk negatief. "
|
|
"Deze as combineert onderwijs- en volksgezondheidsposities met regionale "
|
|
"huisvestingsprioriteiten — het label is indicatief."
|
|
),
|
|
"positive_pole": "Onderwijs en volksgezondheid: BBB, SGP, JA21 — vaccinatie, profielkeuze, woningbouw",
|
|
"negative_pole": "Zorg en toegankelijkheid: SP, DENK, PvdD, Volt — coronaonderzoek, energie, basispakket",
|
|
"flip": False,
|
|
},
|
|
9: {
|
|
"label": "Pragmatische probleemoplossing versus systeemhervorming (indicatief)",
|
|
"explanation": (
|
|
"Deze as scheidt pragmatische, concrete probleemoplossing van idealistische "
|
|
"systeemhervorming. Aan de positieve kant staan moties over naleving van de "
|
|
"Financiële-verhoudingswet voor gemeenten, beperking van arbeidsmigratie, "
|
|
"een nieuwe tandartsopleiding in Rotterdam, een actieplan tegen misbruik van "
|
|
"hallucinerende geneesmiddelen en oplossingen voor milieuproblemen op Bonaire. "
|
|
"SGP en ChristenUnie scoren sterk positief; ook DENK en SP. Aan de negatieve kant "
|
|
"staan moties over een moratorium op geitenstallen, een verbod op gokadvertenties, "
|
|
"verduidelijking van gronden voor voorlopige hechtenis, een leegstandbelasting "
|
|
"en end-to-end-encryptie. D66, JA21 en PVV scoren negatief. "
|
|
"Deze as is indicatief — de scores zijn smal en ideologisch divers."
|
|
),
|
|
"positive_pole": "Pragmatisch-bestuurlijk: SGP, ChristenUnie, DENK, SP — concrete oplossingen",
|
|
"negative_pole": "Systeemhervorming: D66, JA21, PVV — idealistische beleidsposities",
|
|
"flip": True,
|
|
},
|
|
10: {
|
|
"label": "Kritisch op overheidsbemoeienis versus pro-regulering (indicatief)",
|
|
"explanation": (
|
|
"Deze as scheidt partijen die kritisch staan tegenover overheidsbemoeienis van "
|
|
"partijen die strikte regulering en handhaving steunen. Aan de positieve kant "
|
|
"staan moties over minder tijdsintensieve schoolinspecties, het recht van "
|
|
"toeslagenouders op hun persoonlijk dossier, behoud van tegemoetkomingen voor "
|
|
"arbeidsongeschikten en verlaging van de leeftijdsdrempel voor kindgesprekken. "
|
|
"DENK, SP en PvdD scoren positief. Aan de negatieve kant staan moties over "
|
|
"een aangifteplicht voor scholen bij veiligheidsincidenten, een rookverbod in "
|
|
"auto's met kinderen, braakliggende landbouwgrond en verhoogd beloningsgeld "
|
|
"voor tipgevers. GroenLinks-PvdA scoort opvallend sterk negatief. "
|
|
"Deze as is indicatief — de scores zijn smal en de partijcombinaties divers."
|
|
),
|
|
"positive_pole": "Kritisch op overheidsbemoeienis: DENK, SP, PvdD — minder inspectielast en lastenverlichting",
|
|
"negative_pole": "Pro-regulering: GroenLinks-PvdA, CDA, SGP — veiligheid, naleving en handhaving",
|
|
"flip": True,
|
|
},
|
|
}
|
|
|
|
KNOWN_MAJOR_PARTIES = [
|
|
"VVD",
|
|
"PVV",
|
|
"D66",
|
|
"GroenLinks-PvdA",
|
|
"GroenLinks",
|
|
"PvdA",
|
|
"CDA",
|
|
"SP",
|
|
"NSC",
|
|
"CU",
|
|
"BBB",
|
|
]
|
|
|
|
CURRENT_PARLIAMENT_PARTIES: frozenset[str] = frozenset(
|
|
{
|
|
"PVV",
|
|
"VVD",
|
|
"NSC",
|
|
"BBB",
|
|
"D66",
|
|
"GroenLinks-PvdA",
|
|
"CDA",
|
|
"SP",
|
|
"ChristenUnie",
|
|
"SGP",
|
|
"Volt",
|
|
"DENK",
|
|
"PvdD",
|
|
"JA21",
|
|
"FVD",
|
|
}
|
|
)
|
|
|
|
_PARTY_NORMALIZE: dict[str, str] = {
|
|
"Nieuw Sociaal Contract": "NSC",
|
|
"CU": "ChristenUnie",
|
|
"GL": "GroenLinks-PvdA",
|
|
"GroenLinks": "GroenLinks-PvdA",
|
|
"PvdA": "GroenLinks-PvdA",
|
|
"Gündoğan": "Volt",
|
|
"Lid Keijzer": "BBB",
|
|
"Groep Markuszower": "PVV",
|
|
}
|
|
|