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.
 
 
 
motief/analysis/config.py

299 lines
15 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": "Rechts: PVV, VVD, NSC, BBB, JA21 — kabinetsbeleid, defensie en restricties",
"negative_pole": "Links: GroenLinks-PvdA, SP, PvdD, Volt, DENK — oppositie, zorg en multilateraal",
"left_pole": "Links: GroenLinks-PvdA, SP, PvdD, Volt, DENK — oppositie, zorg en multilateraal",
"right_pole": "Rechts: PVV, VVD, NSC, BBB, JA21 — kabinetsbeleid, defensie en restricties",
"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",
"left_pole": "Overige partijen: VVD, CDA, SGP, ChristenUnie, GroenLinks-PvdA, D66, Volt, BBB",
"right_pole": "PVV en FVD — soevereiniteit en anti-establishment",
"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",
"left_pole": "Marktliberaal en fiscaal conservatief: VVD, D66, CDA, SGP, BBB",
"right_pole": "Pro-verzorgingsstaat: SP, PvdD, GroenLinks-PvdA (anti-bezuinigingen)",
"flip": True,
},
4: {
"label": "NSC/BBB versus D66/CDA/JA21 (indicatief)",
"explanation": (
"Een residuele as met een brede spreiding van partijen. "
"Aan de negatieve kant staan moties waar NSC en BBB sterk op scoren. "
"Aan de positieve kant staan moties waar D66, CDA en JA21 sterk op scoren. "
"FVD en DENK scoren rond het midden — deze as scheidt hen niet van de rest. "
"Dit is geen klassieke links-rechts verdeling maar een mengeling van "
"thematische posities — het label is indicatief."
),
"positive_pole": "D66, CDA, JA21 — moties met brede steun",
"negative_pole": "NSC, BBB — moties met andere focus",
"left_pole": "NSC, BBB — moties met andere focus",
"right_pole": "D66, CDA, JA21 — moties met brede steun",
"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",
"left_pole": "Progressief-individueel: SP, VVD, GL-PvdA, PvdD, Volt — individuele rechten",
"right_pole": "Christelijk-sociaal: ChristenUnie, SGP, CDA, NSC — gemeenschap en vrijwilligers",
"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",
"left_pole": "Progressieve inclusie: SP, PvdD, D66, GL-PvdA, Volt — klimaat en diversiteit",
"right_pole": "Restrictief migratiebeleid: PVV, JA21, BBB, CDA, ChristenUnie, VVD, SGP, FVD, DENK",
"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",
"left_pole": "Ideologisch-principieel: GroenLinks-PvdA, VVD, FVD, JA21",
"right_pole": "Praktisch-bestuurlijk: ChristenUnie, Volt, SGP, DENK, SP",
"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",
"left_pole": "Zorg en toegankelijkheid: SP, DENK, PvdD, Volt — coronaonderzoek, energie, basispakket",
"right_pole": "Onderwijs en volksgezondheid: BBB, SGP, JA21 — vaccinatie, profielkeuze, woningbouw",
"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",
"left_pole": "Systeemhervorming: D66, JA21, PVV — idealistische beleidsposities",
"right_pole": "Pragmatisch-bestuurlijk: SGP, ChristenUnie, DENK, SP — concrete oplossingen",
"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",
"left_pole": "Pro-regulering: GroenLinks-PvdA, CDA, SGP — veiligheid, naleving en handhaving",
"right_pole": "Kritisch op overheidsbemoeienis: DENK, SP, PvdD — minder inspectielast en lastenverlichting",
"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",
}