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

269 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": "Fiscaal-economisch beleid versus sociaal welzijn en internationale rechten",
"explanation": (
"Deze as scheidt fiscaal-economisch beleid van sociaal welzijn en internationale solidariteit. "
"Aan de positieve kant staan moties over dijkvervanging, medische bijscholing, gaswinning op land, "
"landbouwsubsidies en fiscale verlichting. "
"Aan de negatieve kant staan moties over huurprijsbeheersing, boycot van defensiebedrijven, "
"beëindiging van militaire verdragen, antipersoneelslandmijnen en zorgbuurthuizen. "
"Deze as weerspiegelt de spanning tussen financieel-economische prioriteiten en sociaal-internationaal beleid."
),
"positive_pole": "Fiscaal-economisch: dijkvervanging, landbouwsubsidies, gaswinning, fiscale verlichting",
"negative_pole": "Sociaal welzijn en internationale rechten: huurbeheersing, defensieboycot, zorg, landmijnverbod",
"flip": False,
},
2: {
"label": "Nationalistische versus multilateralistische oriëntatie",
"explanation": (
"Deze as meet een onafhankelijke culturele dimensie: nationalistisch-populistisch "
"tegenover kosmopolitisch-mainstream. Aan de positieve kant staan PVV en FVD. "
"Aan de negatieve kant staan Volt, GroenLinks-PvdA, DENK en SP. "
"Deze as is onafhankelijk van links-rechts (as 1) en scheidt partijen "
"op hun houding tegenover nationale identiteit, EU-samenwerking en de "
"etnisch-culturele dimensie."
),
"positive_pole": "Nationalistisch/populistisch — PVV, FVD: nationale identiteit en soevereiniteit",
"negative_pole": "Kosmopolitisch/mainstream — Volt, GL-PvdA, DENK, SP: EU en internationale samenwerking",
"flip": False,
},
3: {
"label": "Verzorgingsstaat versus defensie en nationale veiligheid",
"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": "Actieve internationale betrokkenheid versus terughoudendheid",
"explanation": (
"Deze as scheidt actieve internationale betrokkenheid van terughoudendheid of terugtrekking. "
"Aan de positieve kant staan moties over bilaterale en Europese samenwerking: partnerschappen met Australië, "
"actieve vaderbetrokkenheid, kennisuitwisseling en coördinatie via internationale gremia. "
"Aan de negatieve kant staan moties over verlaten van de WHO, beperking van migratiesaldo, "
"gezinsbeleid en asielrestricties. "
"Deze as is indicatief — de spreiding van partijen is breed."
),
"positive_pole": "Actieve internationale betrokkenheid: bilaterale samenwerking, kennisuitwisseling, multilaterale coördinatie",
"negative_pole": "Terughoudendheid en restricties: WHO-verlating, migratielimieten, binnenlands gericht beleid",
"flip": False,
},
5: {
"label": "Pragmatische financiële ondersteuning versus progressieve individuele rechten",
"explanation": (
"Deze as scheidt pragmatische financiële en structurele ondersteuning van progressieve individuele rechten. "
"Aan de positieve kant staan moties over een vrijgesteld minimumbudget voor infrastructurele werken, "
"maatschappelijke diensttijd voor kwetsbare jongeren, verkorting van de WW alleen met concrete "
"ondersteuningsmaatregelen, en vrijwaring van kindertoeslagen. "
"Aan de negatieve kant staan moties over erkenning van meerouderschap, "
"wettelijke kwaliteitseisen aan zwemlessen, een nationaal coördinator tegen buitenlandse beïnvloeding, "
"en vastlegging van abortusrecht in het EU-Handvest. "
"Deze as weerspiegelt de spanning tussen financiële prikkels en individuele rechtenbescherming."
),
"positive_pole": "Pragmatische financiële ondersteuning: budgetvrijwaring, diensttijd, WW-hervorming, kindertoeslagen",
"negative_pole": "Progressieve individuele rechten: meerouderschap, abortusrecht, zwemveiligheid, buitenlandse beïnvloeding",
"flip": False,
},
6: {
"label": "Fossiele brandstoffen en financiële prikkels versus klimaatbeleid en internationale rechten",
"explanation": (
"Deze as scheidt fossiele brandstoffen en financiële marktprikkels van klimaatbeleid en internationale rechten. "
"Aan de positieve kant staan moties over lng-capaciteit als alternatief voor gaswinning, "
"kernenergie als volwaardig onderdeel van energiebeleid, vermogenswinstbelasting en beperkte "
"overheidsuitgaven. "
"Aan de negatieve kant staan moties over het uitsluiten van de fossiele industrie van klimaatconferenties, "
"veroordeling van aanvallen op Libanon, sancties tegen internationale conflicten, "
"en structureel overleg met moslimgemeenschappen. "
"Deze as weerspiegelt de spanning tussen economisch-fiscale prioriteiten en klimaat/internationale solidariteit."
),
"positive_pole": "Fossiel en financieel: lng-capaciteit, kernenergie, vermogenswinstbelasting, bezuinigingen",
"negative_pole": "Klimaat en internationale rechten: fossiele industrie uitsluiten, sancties, Libanon, gemeenschappen",
"flip": False,
},
7: {
"label": "Praktisch-bestuurlijk versus idealistisch-proceduraal",
"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": "Europese defensiesamenwerking versus binnenlands sociaaleconomisch beleid",
"explanation": (
"Deze as scheidt Europese defensiesamenwerking van binnenlands sociaaleconomisch beleid. "
"Aan de positieve kant staan moties over militaire mobiliteit in EU- en NAVO-verband, "
"een Europees onderzoeksinstituut voor defensie, en concrete stappen voor 35% defensie-uitgaven. "
"Aan de negatieve kant staan moties over toeslagenaffaire-herstel, ontslagrecht, "
"coronastrategie en bestuurlijke instructieregels. "
"Deze as is indicatief — de spreiding van partijen is breed en de thematische diversiteit is groot."
),
"positive_pole": "Europese defensiesamenwerking: NAVO-militaire mobiliteit, Europees defensie-instituut, defensie-uitgaven",
"negative_pole": "Binnenlands beleid: toeslagen, ontslagrecht, coronastrategie, administratieve lasten",
"flip": False,
},
9: {
"label": "Concreet-bestuurlijke versus systemische hervorming",
"explanation": (
"Deze as scheidt concreet-bestuurlijke oplossingen van systemische hervorming. "
"Aan de positieve kant staan moties over naleving van financiële verhoudingswetten voor gemeenten, "
"beperking van arbeidsmigratie, een nieuwe tandartsopleiding in Rotterdam, "
"en oplossingen voor milieuproblemen op Bonaire. "
"Aan de negatieve kant staan moties over een moratorium op geitenstallen, "
"een verbod op gokadvertenties, gronden voor voorlopige hechtenis, "
"een leegstandbelasting en end-to-end-encryptie. "
"Deze as is indicatief — de scores zijn smal en ideologisch divers."
),
"positive_pole": "Concreet-bestuurlijk: financiële verhoudingswet, arbeidsmigratie, tandartsopleiding, Bonaire",
"negative_pole": "Systemische hervorming: geitenstallen-moratorium, gokverbod, leegstandbelasting, encryptie",
"flip": False,
},
10: {
"label": "Bescherming van burgers versus overheidsregulering",
"explanation": (
"Deze as scheidt bescherming van burgers van overheidsregulering en handhaving. "
"Aan de positieve kant staan moties over minder tijdsintensieve schoolinspecties, "
"het recht van toeslagenouders op hun persoonlijk dossier, behoud van tegemoetkomingen "
"voor arbeidsongeschikten, integratie die geldt voor nieuwkomers (niet voor Nederlanders), "
"en verlaging van de leeftijdsdrempel voor kindgesprekken. "
"Aan de negatieve kant staan moties over een aangifteplicht voor scholen bij "
"veiligheidsincidenten, rookverboden in auto's met kinderen, "
"braakliggende landbouwgrond en verhoogd beloningsgeld voor tipgevers. "
"Deze as is indicatief — de scores zijn smal en de partijcombinaties divers."
),
"positive_pole": "Bescherming van burgers: minder inspecties, toegang tot dossiers, behoud toeslagen, kindleeftijd",
"negative_pole": "Overheidsregulering: aangifteplicht scholen, rookverbod, braakliggende grond, tipgeversbeloning",
"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",
}