gwoe-antragspruefer/app/programme.py
Dotty Dotter bd591b9246 refactor(programme): WAHLPROGRAMME → programme.PROGRAMME konsolidiert (#222)
Schließt #222. Entfernt die Doppelung zwischen ``wahlprogramme.WAHLPROGRAMME``
und ``programme.PROGRAMME``. Single source of truth ist jetzt
``programme.PROGRAMME`` als Literal mit allen 287 Programmen
(Wahlprogramme + Bundes- + Landes-Grundsatzprogramme, historisch + aktuell).

Schema schmaler — Felder ohne Konsumenten entfallen:
- ``regierungsbildung`` / ``regierungsende`` → gehören zu
  ``legislaturen.REGIERUNGEN``. Verbindung Programm→Regierung läuft jetzt
  über ``legislaturen.regierung_zum_zeitpunkt(bl, datum)``.
- ``partei`` (Langform "CDU NRW") → ableitbar aus partei + bundesland.
- ``jahr`` → ableitbar aus ``gueltig_ab[:4]``.
- ``beschluss`` / ``wahl`` / ``hinweis`` → keine App-Konsumenten.

Felder im neuen Schema: id, typ, partei, bundesland, wp, gueltig_ab,
gueltig_bis, name, titel (Slogan, optional), pdf, seiten.

Daten-Migration einmalig via ``tools/build_programme_literal.py``:
- Basis: bisherige embeddings.PROGRAMME (alle 287 IDs + gueltig_ab/bis)
- titel aus WAHLPROGRAMME für die ~80 aktuellen Wahlprogramme +
  Land-Grundsatzprogramm-Slogans (ehem. _ARCHIVED_SKELETONS)
- seiten via ``fitz.open(p).page_count`` für alle 287 PDFs

Aufrufer migriert:
- app/main.py:4055 — ``aktuelles_wahlprogramm(bl, partei).pdf``
- app/wahlprogramm_check.py — ``parteien_mit_wahlprogramm(bl)``
- app/redline_utils.py — Reverse-Lookup über ``all_programme()``
- app/wahlprogramm_fetch.py (3 Stellen) — ``aktuelles_wahlprogramm()``
- tests/test_redline_parser.py — Programm-Lookup statt WAHLPROGRAMME

``wahlprogramme.py`` schrumpft auf den Such-Code: Keyword-Fallback +
PDF-Text-Loader + ein dünner ``get_wahlprogramm``-Compat-Adapter zu
``programme.aktuelles_wahlprogramm``.

Drei Helper gelöscht (keine App-Konsumenten):
``regierungsbildung_for``, ``regierungsende_for``, ``regierung_aktuell``.
Wer das Datum der Regierungsbildung will, fragt
``legislaturen.aktuelle_regierung(bl).get('von')``.

Test-Suite: 1217 grün (vorher 1244, Differenz 27 = entfernte
regierungs-Helper-Tests + obsolete WAHLPROGRAMME-Strukturtests).
2026-05-09 00:37:35 +02:00

535 lines
88 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""Zentrale Programm-Registry — alle politischen Programm-Dokumente
(Wahlprogramme, Bundes-Grundsatzprogramme, Landes-Grundsatzprogramme),
historisch und aktuell.
Single Source of Truth für:
- ``embeddings.py`` (Indexer liest die PDFs aus dieser Liste)
- ``analyzer.py`` (sucht das zum Antrag passende Wahlprogramm)
- UI (zeigt Geltungszeitraum + zugeordnete Regierung pro Programm)
Siehe ``app/legislaturen.py`` für Wahlperioden + Regierungen — Programm-
Daten beschreiben das Dokument selbst, nicht die Regierung, die aus ihm
hervorging. Die Verbindung läuft über
``legislaturen.regierung_zum_zeitpunkt(bundesland, datum)``.
"""
from __future__ import annotations
from pathlib import Path
from typing import Literal, Optional, TypedDict
# ─────────────────────────────────────────────────────────────────────────────
# Schema
# ─────────────────────────────────────────────────────────────────────────────
ProgrammTyp = Literal[
"wahlprogramm", # zur Wahl beschlossen, gilt für 1 Legislatur
"grundsatzprogramm-bund", # bundesweites Grundsatzprogramm
"grundsatzprogramm-land", # landesspezifisches Grundsatzprogramm
]
class Programm(TypedDict, total=False):
"""Single source of truth für ein politisches Programm-Dokument.
Pflichtfelder: id, typ, partei, gueltig_ab, name, pdf.
Optional: bundesland, wp, gueltig_bis, titel, seiten.
Was hier bewusst NICHT drin ist:
- ``regierungsbildung`` / ``regierungsende`` — gehört zu
``legislaturen.REGIERUNGEN``. Verbindung Programm→Regierung läuft
über ``legislaturen.regierung_zum_zeitpunkt(bl, antrag_datum)``.
- ``partei`` Langform ("CDU NRW") — ableitbar via partei + bundesland.
- ``jahr`` — ``int(gueltig_ab[:4])`` reicht.
"""
id: str # eindeutiger Schlüssel, z.B. "cdu-nrw-2022"
typ: ProgrammTyp
partei: str # kanonisch (CDU, BiW, BÜNDNIS 90/DIE GRÜNEN, …)
bundesland: Optional[str] # BL-Code; None nur bei Bundesgrundsatzprogrammen
wp: Optional[int] # Legislatur-Nummer; nur typ=wahlprogramm
gueltig_ab: str # ISO YYYY-MM-DD; bei wahl: Wahltag
gueltig_bis: Optional[str] # ISO; None = aktuell gültig
name: str # voll-qualifiziert für Citation, z.B. "CDU NRW Wahlprogramm 2022"
titel: Optional[str] # Slogan ("Machen, worauf es ankommt"); None wenn nicht erfasst
pdf: str # Dateiname in static/referenzen/
seiten: Optional[int] # PDF-Seitenzahl
REFERENZEN_PATH = Path(__file__).parent / "static" / "referenzen"
KONTEXT_PATH = Path(__file__).parent / "kontext"
# ─────────────────────────────────────────────────────────────────────────────
# Daten — alle 287 Programme (historisch + aktuell), sortiert nach
# (typ, bundesland, gueltig_ab, partei). Auto-generiert aus der bisherigen
# embeddings.PROGRAMME + WAHLPROGRAMME-Lazy-Migration via fitz für seiten.
# Generator: tools/build_programme_literal.py (siehe Commit-Historie).
# ─────────────────────────────────────────────────────────────────────────────
PROGRAMME: dict[str, Programm] = {
# ─── grundsatzprogramm-bund · BUND ───
"spd-grundsatz": {"id": "spd-grundsatz", "typ": "grundsatzprogramm-bund", "partei": "SPD", "bundesland": None, "wp": None, "gueltig_ab": "2007-10-28", "gueltig_bis": None, "name": "SPD Hamburger Programm 2007", "titel": None, "pdf": "spd-grundsatzprogramm.pdf", "seiten": 79},
"linke-grundsatz": {"id": "linke-grundsatz", "typ": "grundsatzprogramm-bund", "partei": "LINKE", "bundesland": None, "wp": None, "gueltig_ab": "2011-10-23", "gueltig_bis": None, "name": "DIE LINKE Erfurter Programm 2011", "titel": None, "pdf": "linke-grundsatzprogramm.pdf", "seiten": 58},
"fw-grundsatz": {"id": "fw-grundsatz", "typ": "grundsatzprogramm-bund", "partei": "FREIE WÄHLER", "bundesland": None, "wp": None, "gueltig_ab": "2012-02-25", "gueltig_bis": None, "name": "FREIE WÄHLER Bundesgrundsatzprogramm", "titel": None, "pdf": "fw-grundsatz.pdf", "seiten": 46},
"fdp-grundsatz": {"id": "fdp-grundsatz", "typ": "grundsatzprogramm-bund", "partei": "FDP", "bundesland": None, "wp": None, "gueltig_ab": "2012-04-22", "gueltig_bis": None, "name": "FDP Karlsruher Freiheitsthesen 2012", "titel": None, "pdf": "fdp-grundsatzprogramm.pdf", "seiten": 118},
"afd-grundsatz": {"id": "afd-grundsatz", "typ": "grundsatzprogramm-bund", "partei": "AfD", "bundesland": None, "wp": None, "gueltig_ab": "2016-05-01", "gueltig_bis": None, "name": "AfD Grundsatzprogramm 2016", "titel": None, "pdf": "afd-grundsatzprogramm.pdf", "seiten": 96},
"gruene-grundsatz": {"id": "gruene-grundsatz", "typ": "grundsatzprogramm-bund", "partei": "GRÜNE", "bundesland": None, "wp": None, "gueltig_ab": "2020-11-22", "gueltig_bis": None, "name": "Grüne Grundsatzprogramm 2020", "titel": None, "pdf": "gruene-grundsatzprogramm.pdf", "seiten": 136},
"cdu-grundsatz": {"id": "cdu-grundsatz", "typ": "grundsatzprogramm-bund", "partei": "CDU", "bundesland": None, "wp": None, "gueltig_ab": "2024-05-07", "gueltig_bis": None, "name": "CDU Grundsatzprogramm 2024", "titel": None, "pdf": "cdu-grundsatzprogramm.pdf", "seiten": 82},
# ─── grundsatzprogramm-land · BY ───
"csu-grundsatz": {"id": "csu-grundsatz", "typ": "grundsatzprogramm-land", "partei": "CSU", "bundesland": "BY", "wp": None, "gueltig_ab": "2023-05-06", "gueltig_bis": None, "name": "CSU Grundsatzprogramm 2023", "titel": "Für ein neues Miteinander — Grundsatzprogramm der CSU", "pdf": "csu-grundsatz-2023.pdf", "seiten": 55},
# ─── grundsatzprogramm-land · LSA ───
"cdu-grundsatz-lsa": {"id": "cdu-grundsatz-lsa", "typ": "grundsatzprogramm-land", "partei": "CDU", "bundesland": "LSA", "wp": None, "gueltig_ab": "2023-09-30", "gueltig_bis": None, "name": "CDU Sachsen-Anhalt Grundsatzprogramm 2023", "titel": "Sachsen-Anhalt. Unsere Verantwortung. Unsere Zukunft.", "pdf": "cdu-grundsatz-lsa-2023.pdf", "seiten": 70},
# ─── grundsatzprogramm-land · NRW ───
"cdu-grundsatz-nrw": {"id": "cdu-grundsatz-nrw", "typ": "grundsatzprogramm-land", "partei": "CDU", "bundesland": "NRW", "wp": None, "gueltig_ab": "2015-06-13", "gueltig_bis": None, "name": "CDU NRW Grundsatzprogramm 2015", "titel": "Aufstieg, Sicherheit, Perspektive — Das Nordrhein-Westfalen-Programm", "pdf": "cdu-grundsatz-nrw-2015.pdf", "seiten": 48},
# ─── grundsatzprogramm-land · SH ───
"ssw-grundsatz": {"id": "ssw-grundsatz", "typ": "grundsatzprogramm-land", "partei": "SSW", "bundesland": "SH", "wp": None, "gueltig_ab": "2016-04-16", "gueltig_bis": None, "name": "SSW Rahmenprogramm 2016", "titel": "SSW Rahmenprogramm", "pdf": "ssw-grundsatz-sh-2016.pdf", "seiten": 34},
# ─── grundsatzprogramm-land · SN ───
"cdu-grundsatz-sn": {"id": "cdu-grundsatz-sn", "typ": "grundsatzprogramm-land", "partei": "CDU", "bundesland": "SN", "wp": None, "gueltig_ab": "2023-11-20", "gueltig_bis": None, "name": "CDU Sachsen Grundsatzprogramm 2023", "titel": "Zukunftsplan für Sachsen", "pdf": "cdu-grundsatz-sn-2023.pdf", "seiten": 54},
# ─── wahlprogramm · BB ───
"afd-bb-2014": {"id": "afd-bb-2014", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "BB", "wp": 6, "gueltig_ab": "2014-09-14", "gueltig_bis": "2019-09-01", "name": "AfD BB Wahlprogramm 2014", "titel": None, "pdf": "afd-bb-2014.pdf", "seiten": 37},
"bvb-fw-bb-2014": {"id": "bvb-fw-bb-2014", "typ": "wahlprogramm", "partei": "BVB/FREIE WÄHLER", "bundesland": "BB", "wp": 6, "gueltig_ab": "2014-09-14", "gueltig_bis": "2019-09-01", "name": "BVB/FREIE WÄHLER BB Wahlprogramm 2014", "titel": None, "pdf": "bvb-fw-bb-2014.pdf", "seiten": 39},
"cdu-bb-2014": {"id": "cdu-bb-2014", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "BB", "wp": 6, "gueltig_ab": "2014-09-14", "gueltig_bis": "2019-09-01", "name": "CDU BB Wahlprogramm 2014", "titel": None, "pdf": "cdu-bb-2014.pdf", "seiten": 20},
"gruene-bb-2014": {"id": "gruene-bb-2014", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "BB", "wp": 6, "gueltig_ab": "2014-09-14", "gueltig_bis": "2019-09-01", "name": "Grüne BB Wahlprogramm 2014", "titel": None, "pdf": "gruene-bb-2014.pdf", "seiten": 150},
"linke-bb-2014": {"id": "linke-bb-2014", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "BB", "wp": 6, "gueltig_ab": "2014-09-14", "gueltig_bis": "2019-09-01", "name": "DIE LINKE BB Wahlprogramm 2014", "titel": None, "pdf": "linke-bb-2014.pdf", "seiten": 60},
"spd-bb-2014": {"id": "spd-bb-2014", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "BB", "wp": 6, "gueltig_ab": "2014-09-14", "gueltig_bis": "2019-09-01", "name": "SPD BB Wahlprogramm 2014", "titel": None, "pdf": "spd-bb-2014.pdf", "seiten": 26},
"afd-bb-2019": {"id": "afd-bb-2019", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "BB", "wp": 7, "gueltig_ab": "2019-09-01", "gueltig_bis": "2024-09-22", "name": "AfD BB Wahlprogramm 2019", "titel": None, "pdf": "afd-bb-2019.pdf", "seiten": 42},
"bvb-fw-bb-2019": {"id": "bvb-fw-bb-2019", "typ": "wahlprogramm", "partei": "BVB/FREIE WÄHLER", "bundesland": "BB", "wp": 7, "gueltig_ab": "2019-09-01", "gueltig_bis": "2024-09-22", "name": "BVB/FREIE WÄHLER BB Wahlprogramm 2019", "titel": None, "pdf": "bvb-fw-bb-2019.pdf", "seiten": 37},
"cdu-bb-2019": {"id": "cdu-bb-2019", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "BB", "wp": 7, "gueltig_ab": "2019-09-01", "gueltig_bis": "2024-09-22", "name": "CDU BB Wahlprogramm 2019", "titel": None, "pdf": "cdu-bb-2019.pdf", "seiten": 50},
"gruene-bb-2019": {"id": "gruene-bb-2019", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "BB", "wp": 7, "gueltig_ab": "2019-09-01", "gueltig_bis": "2024-09-22", "name": "Grüne BB Wahlprogramm 2019", "titel": None, "pdf": "gruene-bb-2019.pdf", "seiten": 106},
"linke-bb-2019": {"id": "linke-bb-2019", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "BB", "wp": 7, "gueltig_ab": "2019-09-01", "gueltig_bis": "2024-09-22", "name": "DIE LINKE BB Wahlprogramm 2019", "titel": None, "pdf": "linke-bb-2019.pdf", "seiten": 100},
"spd-bb-2019": {"id": "spd-bb-2019", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "BB", "wp": 7, "gueltig_ab": "2019-09-01", "gueltig_bis": "2024-09-22", "name": "SPD BB Wahlprogramm 2019", "titel": None, "pdf": "spd-bb-2019.pdf", "seiten": 47},
"afd-bb-2024": {"id": "afd-bb-2024", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "BB", "wp": 8, "gueltig_ab": "2024-09-22", "gueltig_bis": None, "name": "AfD Brandenburg Wahlprogramm 2024", "titel": None, "pdf": "afd-bb-2024.pdf", "seiten": 100},
"bsw-bb-2024": {"id": "bsw-bb-2024", "typ": "wahlprogramm", "partei": "BSW", "bundesland": "BB", "wp": 8, "gueltig_ab": "2024-09-22", "gueltig_bis": None, "name": "BSW Brandenburg Wahlprogramm 2024", "titel": None, "pdf": "bsw-bb-2024.pdf", "seiten": 50},
"cdu-bb-2024": {"id": "cdu-bb-2024", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "BB", "wp": 8, "gueltig_ab": "2024-09-22", "gueltig_bis": None, "name": "CDU Brandenburg Wahlprogramm 2024", "titel": None, "pdf": "cdu-bb-2024.pdf", "seiten": 100},
"spd-bb-2024": {"id": "spd-bb-2024", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "BB", "wp": 8, "gueltig_ab": "2024-09-22", "gueltig_bis": None, "name": "SPD Brandenburg Wahlprogramm 2024", "titel": None, "pdf": "spd-bb-2024.pdf", "seiten": 100},
# ─── wahlprogramm · BE ───
"cdu-be-2011": {"id": "cdu-be-2011", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "BE", "wp": 17, "gueltig_ab": "2011-09-18", "gueltig_bis": "2016-09-18", "name": "CDU BE Wahlprogramm 2011", "titel": None, "pdf": "cdu-be-2011.pdf", "seiten": 41},
"gruene-be-2011": {"id": "gruene-be-2011", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "BE", "wp": 17, "gueltig_ab": "2011-09-18", "gueltig_bis": "2016-09-18", "name": "Grüne BE Wahlprogramm 2011", "titel": None, "pdf": "gruene-be-2011.pdf", "seiten": 120},
"linke-be-2011": {"id": "linke-be-2011", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "BE", "wp": 17, "gueltig_ab": "2011-09-18", "gueltig_bis": "2016-09-18", "name": "DIE LINKE BE Wahlprogramm 2011", "titel": None, "pdf": "linke-be-2011.pdf", "seiten": 72},
"piraten-be-2011": {"id": "piraten-be-2011", "typ": "wahlprogramm", "partei": "PIRATEN", "bundesland": "BE", "wp": 17, "gueltig_ab": "2011-09-18", "gueltig_bis": "2016-09-18", "name": "PIRATEN BE Wahlprogramm 2011", "titel": None, "pdf": "piraten-be-2011.pdf", "seiten": 51},
"spd-be-2011": {"id": "spd-be-2011", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "BE", "wp": 17, "gueltig_ab": "2011-09-18", "gueltig_bis": "2016-09-18", "name": "SPD BE Wahlprogramm 2011", "titel": None, "pdf": "spd-be-2011.pdf", "seiten": 60},
"afd-be-2016": {"id": "afd-be-2016", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "BE", "wp": 18, "gueltig_ab": "2016-09-18", "gueltig_bis": "2021-09-26", "name": "AfD BE Wahlprogramm 2016", "titel": None, "pdf": "afd-be-2016.pdf", "seiten": 40},
"cdu-be-2016": {"id": "cdu-be-2016", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "BE", "wp": 18, "gueltig_ab": "2016-09-18", "gueltig_bis": "2021-09-26", "name": "CDU BE Wahlprogramm 2016", "titel": None, "pdf": "cdu-be-2016.pdf", "seiten": 49},
"fdp-be-2016": {"id": "fdp-be-2016", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "BE", "wp": 18, "gueltig_ab": "2016-09-18", "gueltig_bis": "2021-09-26", "name": "FDP BE Wahlprogramm 2016", "titel": None, "pdf": "fdp-be-2016.pdf", "seiten": 57},
"gruene-be-2016": {"id": "gruene-be-2016", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "BE", "wp": 18, "gueltig_ab": "2016-09-18", "gueltig_bis": "2021-09-26", "name": "Grüne BE Wahlprogramm 2016", "titel": None, "pdf": "gruene-be-2016.pdf", "seiten": 104},
"linke-be-2016": {"id": "linke-be-2016", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "BE", "wp": 18, "gueltig_ab": "2016-09-18", "gueltig_bis": "2021-09-26", "name": "DIE LINKE BE Wahlprogramm 2016", "titel": None, "pdf": "linke-be-2016.pdf", "seiten": 100},
"spd-be-2016": {"id": "spd-be-2016", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "BE", "wp": 18, "gueltig_ab": "2016-09-18", "gueltig_bis": "2021-09-26", "name": "SPD BE Wahlprogramm 2016", "titel": None, "pdf": "spd-be-2016.pdf", "seiten": 99},
"afd-be-2023": {"id": "afd-be-2023", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "BE", "wp": 19, "gueltig_ab": "2021-09-26", "gueltig_bis": None, "name": "AfD Berlin Wahlprogramm 2021", "titel": "Wahlprogramm der AfD Berlin für die Wahl des Abgeordnetenhauses am 26. September 2021", "pdf": "afd-be-2023.pdf", "seiten": 166},
"cdu-be-2023": {"id": "cdu-be-2023", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "BE", "wp": 19, "gueltig_ab": "2021-09-26", "gueltig_bis": None, "name": "CDU Berlin Wahlprogramm 2021", "titel": "Unser Berlin. Mehr geht nur gemeinsam. — Berlin-Plan der CDU Berlin 20212026", "pdf": "cdu-be-2023.pdf", "seiten": 135},
"gruene-be-2023": {"id": "gruene-be-2023", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "BE", "wp": 19, "gueltig_ab": "2021-09-26", "gueltig_bis": None, "name": "BÜNDNIS 90/DIE GRÜNEN Berlin Wahlprogramm 2021", "titel": "Unser Plan für Berlin — Landeswahlprogramm BÜNDNIS 90/DIE GRÜNEN Berlin 2021", "pdf": "gruene-be-2023.pdf", "seiten": 280},
"linke-be-2023": {"id": "linke-be-2023", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "BE", "wp": 19, "gueltig_ab": "2021-09-26", "gueltig_bis": None, "name": "DIE LINKE Berlin Wahlprogramm 2021", "titel": "rot. radikal. realistisch. — Unser Programm für die soziale Stadt", "pdf": "linke-be-2023.pdf", "seiten": 130},
"spd-be-2023": {"id": "spd-be-2023", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "BE", "wp": 19, "gueltig_ab": "2021-09-26", "gueltig_bis": None, "name": "SPD Berlin Wahlprogramm 2021", "titel": "Ganz sicher Berlin — Wahlprogramm der SPD Berlin zur Abgeordnetenhauswahl 2021", "pdf": "spd-be-2023.pdf", "seiten": 86},
# ─── wahlprogramm · BUND ───
"cdu-bund-2013": {"id": "cdu-bund-2013", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "BUND", "wp": 18, "gueltig_ab": "2013-09-22", "gueltig_bis": "2017-09-24", "name": "CDU BUND Wahlprogramm 2013", "titel": None, "pdf": "cdu-bund-2013.pdf", "seiten": 81},
"csu-bund-2013": {"id": "csu-bund-2013", "typ": "wahlprogramm", "partei": "CSU", "bundesland": "BUND", "wp": 18, "gueltig_ab": "2013-09-22", "gueltig_bis": "2017-09-24", "name": "CSU BUND Wahlprogramm 2013", "titel": None, "pdf": "csu-bund-2013.pdf", "seiten": 41},
"gruene-bund-2013": {"id": "gruene-bund-2013", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "BUND", "wp": 18, "gueltig_ab": "2013-09-22", "gueltig_bis": "2017-09-24", "name": "Grüne BUND Wahlprogramm 2013", "titel": None, "pdf": "gruene-bund-2013.pdf", "seiten": 337},
"linke-bund-2013": {"id": "linke-bund-2013", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "BUND", "wp": 18, "gueltig_ab": "2013-09-22", "gueltig_bis": "2017-09-24", "name": "DIE LINKE BUND Wahlprogramm 2013", "titel": None, "pdf": "linke-bund-2013.pdf", "seiten": 93},
"spd-bund-2013": {"id": "spd-bund-2013", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "BUND", "wp": 18, "gueltig_ab": "2013-09-22", "gueltig_bis": "2017-09-24", "name": "SPD BUND Wahlprogramm 2013", "titel": None, "pdf": "spd-bund-2013.pdf", "seiten": 120},
"afd-bund-2017": {"id": "afd-bund-2017", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "BUND", "wp": 19, "gueltig_ab": "2017-09-24", "gueltig_bis": "2021-09-26", "name": "AfD Bundestagswahlprogramm 2017", "titel": None, "pdf": "afd-bund-2017.pdf", "seiten": 76},
"cdu-bund-2017": {"id": "cdu-bund-2017", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "BUND", "wp": 19, "gueltig_ab": "2017-09-24", "gueltig_bis": "2021-09-26", "name": "CDU/CSU Wahlprogramm BTW 2017", "titel": None, "pdf": "cdu-bund-2017.pdf", "seiten": 76},
"csu-bund-2017": {"id": "csu-bund-2017", "typ": "wahlprogramm", "partei": "CSU", "bundesland": "BUND", "wp": 19, "gueltig_ab": "2017-09-24", "gueltig_bis": "2021-09-26", "name": "CSU Bayernplan 2017", "titel": None, "pdf": "csu-bund-2017.pdf", "seiten": 31},
"fdp-bund-2017": {"id": "fdp-bund-2017", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "BUND", "wp": 19, "gueltig_ab": "2017-09-24", "gueltig_bis": "2021-09-26", "name": "FDP Wahlprogramm BTW 2017", "titel": None, "pdf": "fdp-bund-2017.pdf", "seiten": 158},
"gruene-bund-2017": {"id": "gruene-bund-2017", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "BUND", "wp": 19, "gueltig_ab": "2017-09-24", "gueltig_bis": "2021-09-26", "name": "Grüne Bundestagswahlprogramm 2017", "titel": None, "pdf": "gruene-bund-2017.pdf", "seiten": 248},
"linke-bund-2017": {"id": "linke-bund-2017", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "BUND", "wp": 19, "gueltig_ab": "2017-09-24", "gueltig_bis": "2021-09-26", "name": "DIE LINKE Bundestagswahlprogramm 2017", "titel": None, "pdf": "linke-bund-2017.pdf", "seiten": 144},
"spd-bund-2017": {"id": "spd-bund-2017", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "BUND", "wp": 19, "gueltig_ab": "2017-09-24", "gueltig_bis": "2021-09-26", "name": "SPD Zukunftsprogramm BTW 2017", "titel": None, "pdf": "spd-bund-2017.pdf", "seiten": 116},
"afd-bund-2021": {"id": "afd-bund-2021", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "BUND", "wp": 20, "gueltig_ab": "2021-09-26", "gueltig_bis": "2025-02-23", "name": "AfD Bundestagswahlprogramm 2021", "titel": None, "pdf": "afd-bund-2021.pdf", "seiten": 210},
"cdu-bund-2021": {"id": "cdu-bund-2021", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "BUND", "wp": 20, "gueltig_ab": "2021-09-26", "gueltig_bis": "2025-02-23", "name": "CDU/CSU Programm fuer Stabilitaet und Erneuerung 2021", "titel": None, "pdf": "cdu-bund-2021.pdf", "seiten": 140},
"csu-bund-2021": {"id": "csu-bund-2021", "typ": "wahlprogramm", "partei": "CSU", "bundesland": "BUND", "wp": 20, "gueltig_ab": "2021-09-26", "gueltig_bis": "2025-02-23", "name": "CSU-Programm Bundestagswahl 2021", "titel": None, "pdf": "csu-bund-2021.pdf", "seiten": 18},
"fdp-bund-2021": {"id": "fdp-bund-2021", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "BUND", "wp": 20, "gueltig_ab": "2021-09-26", "gueltig_bis": "2025-02-23", "name": "FDP Wahlprogramm Bundestagswahl 2021", "titel": None, "pdf": "fdp-bund-2021.pdf", "seiten": 68},
"gruene-bund-2021": {"id": "gruene-bund-2021", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "BUND", "wp": 20, "gueltig_ab": "2021-09-26", "gueltig_bis": "2025-02-23", "name": "Gruene Bundestagswahlprogramm 2021", "titel": None, "pdf": "gruene-bund-2021.pdf", "seiten": 272},
"linke-bund-2021": {"id": "linke-bund-2021", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "BUND", "wp": 20, "gueltig_ab": "2021-09-26", "gueltig_bis": "2025-02-23", "name": "DIE LINKE Bundestagswahlprogramm 2021", "titel": None, "pdf": "linke-bund-2021.pdf", "seiten": 168},
"spd-bund-2021": {"id": "spd-bund-2021", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "BUND", "wp": 20, "gueltig_ab": "2021-09-26", "gueltig_bis": "2025-02-23", "name": "SPD Zukunftsprogramm Bundestagswahl 2021", "titel": None, "pdf": "spd-bund-2021.pdf", "seiten": 66},
"afd-bund-2025": {"id": "afd-bund-2025", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "BUND", "wp": 21, "gueltig_ab": "2025-02-23", "gueltig_bis": None, "name": "AfD Wahlprogramm 2025", "titel": "Zeit für Deutschland — AfD Bundestagswahlprogramm 2025", "pdf": "afd-bund-2025.pdf", "seiten": 177},
"bsw-bund-2025": {"id": "bsw-bund-2025", "typ": "wahlprogramm", "partei": "BSW", "bundesland": "BUND", "wp": 21, "gueltig_ab": "2025-02-23", "gueltig_bis": None, "name": "BSW Wahlprogramm 2025", "titel": "Unser Land verdient mehr — BSW Wahlprogramm BTW 2025", "pdf": "bsw-bund-2025.pdf", "seiten": 45},
"cdu-bund-2025": {"id": "cdu-bund-2025", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "BUND", "wp": 21, "gueltig_ab": "2025-02-23", "gueltig_bis": None, "name": "CDU Wahlprogramm 2025", "titel": "Politikwechsel für Deutschland — Wahlprogramm CDU/CSU BTW 2025", "pdf": "cdu-bund-2025.pdf", "seiten": 82},
"csu-bund-2025": {"id": "csu-bund-2025", "typ": "wahlprogramm", "partei": "CSU", "bundesland": "BUND", "wp": 21, "gueltig_ab": "2025-02-23", "gueltig_bis": None, "name": "CSU Wahlprogramm 2025", "titel": "Politikwechsel für Deutschland — Wahlprogramm CDU/CSU BTW 2025 (CSU)", "pdf": "csu-bund-2025.pdf", "seiten": 81},
"fdp-bund-2025": {"id": "fdp-bund-2025", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "BUND", "wp": 21, "gueltig_ab": "2025-02-23", "gueltig_bis": None, "name": "FDP Wahlprogramm 2025", "titel": "Alles lässt sich ändern — FDP Wahlprogramm BTW 2025", "pdf": "fdp-bund-2025.pdf", "seiten": 52},
"gruene-bund-2025": {"id": "gruene-bund-2025", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "BUND", "wp": 21, "gueltig_ab": "2025-02-23", "gueltig_bis": None, "name": "BÜNDNIS 90/DIE GRÜNEN Wahlprogramm 2025", "titel": "Zusammen wachsen — Regierungsprogramm BÜNDNIS 90/DIE GRÜNEN BTW 2025", "pdf": "gruene-bund-2025.pdf", "seiten": 160},
"linke-bund-2025": {"id": "linke-bund-2025", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "BUND", "wp": 21, "gueltig_ab": "2025-02-23", "gueltig_bis": None, "name": "DIE LINKE Wahlprogramm 2025", "titel": "Alle wollen regieren. Wir wollen verändern. — DIE LINKE Wahlprogramm BTW 2025", "pdf": "linke-bund-2025.pdf", "seiten": 60},
"spd-bund-2025": {"id": "spd-bund-2025", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "BUND", "wp": 21, "gueltig_ab": "2025-02-23", "gueltig_bis": None, "name": "SPD Wahlprogramm 2025", "titel": "Mehr für Dich. Besser für Deutschland. — SPD Regierungsprogramm BTW 2025", "pdf": "spd-bund-2025.pdf", "seiten": 68},
# ─── wahlprogramm · BW ───
"cdu-bw-2011": {"id": "cdu-bw-2011", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "BW", "wp": 15, "gueltig_ab": "2011-03-27", "gueltig_bis": "2016-03-13", "name": "CDU BW Wahlprogramm 2011", "titel": None, "pdf": "cdu-bw-2011.pdf", "seiten": 57},
"fdp-bw-2011": {"id": "fdp-bw-2011", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "BW", "wp": 15, "gueltig_ab": "2011-03-27", "gueltig_bis": "2016-03-13", "name": "FDP BW Wahlprogramm 2011", "titel": None, "pdf": "fdp-bw-2011.pdf", "seiten": 137},
"gruene-bw-2011": {"id": "gruene-bw-2011", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "BW", "wp": 15, "gueltig_ab": "2011-03-27", "gueltig_bis": "2016-03-13", "name": "Grüne BW Wahlprogramm 2011", "titel": None, "pdf": "gruene-bw-2011.pdf", "seiten": 241},
"spd-bw-2011": {"id": "spd-bw-2011", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "BW", "wp": 15, "gueltig_ab": "2011-03-27", "gueltig_bis": "2016-03-13", "name": "SPD BW Wahlprogramm 2011", "titel": None, "pdf": "spd-bw-2011.pdf", "seiten": 65},
"afd-bw-2016": {"id": "afd-bw-2016", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "BW", "wp": 16, "gueltig_ab": "2016-03-13", "gueltig_bis": "2021-03-14", "name": "AfD BW Wahlprogramm 2016", "titel": None, "pdf": "afd-bw-2016.pdf", "seiten": 64},
"cdu-bw-2016": {"id": "cdu-bw-2016", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "BW", "wp": 16, "gueltig_ab": "2016-03-13", "gueltig_bis": "2021-03-14", "name": "CDU BW Wahlprogramm 2016", "titel": None, "pdf": "cdu-bw-2016.pdf", "seiten": 156},
"fdp-bw-2016": {"id": "fdp-bw-2016", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "BW", "wp": 16, "gueltig_ab": "2016-03-13", "gueltig_bis": "2021-03-14", "name": "FDP BW Wahlprogramm 2016", "titel": None, "pdf": "fdp-bw-2016.pdf", "seiten": 124},
"gruene-bw-2016": {"id": "gruene-bw-2016", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "BW", "wp": 16, "gueltig_ab": "2016-03-13", "gueltig_bis": "2021-03-14", "name": "Grüne BW Wahlprogramm 2016", "titel": None, "pdf": "gruene-bw-2016.pdf", "seiten": 249},
"spd-bw-2016": {"id": "spd-bw-2016", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "BW", "wp": 16, "gueltig_ab": "2016-03-13", "gueltig_bis": "2021-03-14", "name": "SPD BW Wahlprogramm 2016", "titel": None, "pdf": "spd-bw-2016.pdf", "seiten": 41},
"afd-bw-2021": {"id": "afd-bw-2021", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "BW", "wp": 17, "gueltig_ab": "2021-03-14", "gueltig_bis": None, "name": "AfD Baden-Württemberg Wahlprogramm 2021", "titel": "AfD Baden-Württemberg Landtagswahlprogramm 2021", "pdf": "afd-bw-2021.pdf", "seiten": 100},
"cdu-bw-2021": {"id": "cdu-bw-2021", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "BW", "wp": 17, "gueltig_ab": "2021-03-14", "gueltig_bis": None, "name": "CDU Baden-Württemberg Wahlprogramm 2021", "titel": "Neue Ideen für eine neue Zeit — Regierungsprogramm der CDU Baden-Württemberg zur Landtagswahl 2021", "pdf": "cdu-bw-2021.pdf", "seiten": 100},
"fdp-bw-2021": {"id": "fdp-bw-2021", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "BW", "wp": 17, "gueltig_ab": "2021-03-14", "gueltig_bis": None, "name": "FDP Baden-Württemberg Wahlprogramm 2021", "titel": "FDP Baden-Württemberg Landtagswahlprogramm 2021", "pdf": "fdp-bw-2021.pdf", "seiten": 100},
"gruene-bw-2021": {"id": "gruene-bw-2021", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "BW", "wp": 17, "gueltig_ab": "2021-03-14", "gueltig_bis": None, "name": "BÜNDNIS 90/DIE GRÜNEN Baden-Württemberg Wahlprogramm 2021", "titel": "Wachsen wir über uns hinaus — Landtagswahlprogramm BÜNDNIS 90/DIE GRÜNEN Baden-Württemberg 2021", "pdf": "gruene-bw-2021.pdf", "seiten": 100},
"spd-bw-2021": {"id": "spd-bw-2021", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "BW", "wp": 17, "gueltig_ab": "2021-03-14", "gueltig_bis": None, "name": "SPD Baden-Württemberg Wahlprogramm 2021", "titel": "SPD Baden-Württemberg Wahlprogramm zur Landtagswahl 2021", "pdf": "spd-bw-2021.pdf", "seiten": 100},
# ─── wahlprogramm · BY ───
"csu-by-2013": {"id": "csu-by-2013", "typ": "wahlprogramm", "partei": "CSU", "bundesland": "BY", "wp": 17, "gueltig_ab": "2013-09-15", "gueltig_bis": "2018-10-14", "name": "CSU BY Wahlprogramm 2013", "titel": None, "pdf": "csu-by-2013.pdf", "seiten": 28},
"fw-by-2013": {"id": "fw-by-2013", "typ": "wahlprogramm", "partei": "FREIE WÄHLER", "bundesland": "BY", "wp": 17, "gueltig_ab": "2013-09-15", "gueltig_bis": "2018-10-14", "name": "FREIE WÄHLER BY Wahlprogramm 2013", "titel": None, "pdf": "fw-by-2013.pdf", "seiten": 67},
"gruene-by-2013": {"id": "gruene-by-2013", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "BY", "wp": 17, "gueltig_ab": "2013-09-15", "gueltig_bis": "2018-10-14", "name": "Grüne BY Wahlprogramm 2013", "titel": None, "pdf": "gruene-by-2013.pdf", "seiten": 87},
"spd-by-2013": {"id": "spd-by-2013", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "BY", "wp": 17, "gueltig_ab": "2013-09-15", "gueltig_bis": "2018-10-14", "name": "SPD BY Wahlprogramm 2013", "titel": None, "pdf": "spd-by-2013.pdf", "seiten": 150},
"afd-by-2018": {"id": "afd-by-2018", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "BY", "wp": 18, "gueltig_ab": "2018-10-14", "gueltig_bis": "2023-10-08", "name": "AfD BY Wahlprogramm 2018", "titel": None, "pdf": "afd-by-2018.pdf", "seiten": 100},
"csu-by-2018": {"id": "csu-by-2018", "typ": "wahlprogramm", "partei": "CSU", "bundesland": "BY", "wp": 18, "gueltig_ab": "2018-10-14", "gueltig_bis": "2023-10-08", "name": "CSU BY Wahlprogramm 2018", "titel": None, "pdf": "csu-by-2018.pdf", "seiten": 24},
"fdp-by-2018": {"id": "fdp-by-2018", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "BY", "wp": 18, "gueltig_ab": "2018-10-14", "gueltig_bis": "2023-10-08", "name": "FDP BY Wahlprogramm 2018", "titel": None, "pdf": "fdp-by-2018.pdf", "seiten": 78},
"fw-by-2018": {"id": "fw-by-2018", "typ": "wahlprogramm", "partei": "FREIE WÄHLER", "bundesland": "BY", "wp": 18, "gueltig_ab": "2018-10-14", "gueltig_bis": "2023-10-08", "name": "FREIE WÄHLER BY Wahlprogramm 2018", "titel": None, "pdf": "fw-by-2018.pdf", "seiten": 43},
"gruene-by-2018": {"id": "gruene-by-2018", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "BY", "wp": 18, "gueltig_ab": "2018-10-14", "gueltig_bis": "2023-10-08", "name": "Grüne BY Wahlprogramm 2018", "titel": None, "pdf": "gruene-by-2018.pdf", "seiten": 107},
"spd-by-2018": {"id": "spd-by-2018", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "BY", "wp": 18, "gueltig_ab": "2018-10-14", "gueltig_bis": "2023-10-08", "name": "SPD BY Wahlprogramm 2018", "titel": None, "pdf": "spd-by-2018.pdf", "seiten": 69},
"afd-by-2023": {"id": "afd-by-2023", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "BY", "wp": 19, "gueltig_ab": "2023-10-08", "gueltig_bis": None, "name": "AfD Bayern Wahlprogramm 2023", "titel": None, "pdf": "afd-by-2023.pdf", "seiten": 100},
"csu-by-2023": {"id": "csu-by-2023", "typ": "wahlprogramm", "partei": "CSU", "bundesland": "BY", "wp": 19, "gueltig_ab": "2023-10-08", "gueltig_bis": None, "name": "CSU Bayern Wahlprogramm 2023", "titel": "CSU Bayern Bayernplan 2023", "pdf": "csu-by-2023.pdf", "seiten": 100},
"fw-by-2023": {"id": "fw-by-2023", "typ": "wahlprogramm", "partei": "FREIE WÄHLER", "bundesland": "BY", "wp": 19, "gueltig_ab": "2023-10-08", "gueltig_bis": None, "name": "FREIE WÄHLER Bayern Wahlprogramm 2023", "titel": None, "pdf": "fw-by-2023.pdf", "seiten": 80},
"gruene-by-2023": {"id": "gruene-by-2023", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "BY", "wp": 19, "gueltig_ab": "2023-10-08", "gueltig_bis": None, "name": "BÜNDNIS 90/DIE GRÜNEN Bayern Wahlprogramm 2023", "titel": "BÜNDNIS 90/DIE GRÜNEN Bayern Regierungsprogramm 2023", "pdf": "gruene-by-2023.pdf", "seiten": 100},
"spd-by-2023": {"id": "spd-by-2023", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "BY", "wp": 19, "gueltig_ab": "2023-10-08", "gueltig_bis": None, "name": "SPD Bayern Wahlprogramm 2023", "titel": "SPD Bayern Zukunftsprogramm 2023", "pdf": "spd-by-2023.pdf", "seiten": 100},
# ─── wahlprogramm · HB ───
"afd-hb-2015": {"id": "afd-hb-2015", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "HB", "wp": 19, "gueltig_ab": "2015-05-10", "gueltig_bis": "2019-05-26", "name": "AfD HB Wahlprogramm 2015", "titel": None, "pdf": "afd-hb-2015.pdf", "seiten": 49},
"biw-hb-2015": {"id": "biw-hb-2015", "typ": "wahlprogramm", "partei": "BiW", "bundesland": "HB", "wp": 19, "gueltig_ab": "2015-05-10", "gueltig_bis": "2019-05-26", "name": "BIW Bremen HB Wahlprogramm 2015", "titel": None, "pdf": "biw-hb-2015.pdf", "seiten": 32},
"cdu-hb-2015": {"id": "cdu-hb-2015", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "HB", "wp": 19, "gueltig_ab": "2015-05-10", "gueltig_bis": "2019-05-26", "name": "CDU HB Wahlprogramm 2015", "titel": None, "pdf": "cdu-hb-2015.pdf", "seiten": 58},
"fdp-hb-2015": {"id": "fdp-hb-2015", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "HB", "wp": 19, "gueltig_ab": "2015-05-10", "gueltig_bis": "2019-05-26", "name": "FDP HB Wahlprogramm 2015", "titel": None, "pdf": "fdp-hb-2015.pdf", "seiten": 80},
"gruene-hb-2015": {"id": "gruene-hb-2015", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "HB", "wp": 19, "gueltig_ab": "2015-05-10", "gueltig_bis": "2019-05-26", "name": "Grüne HB Wahlprogramm 2015", "titel": None, "pdf": "gruene-hb-2015.pdf", "seiten": 140},
"linke-hb-2015": {"id": "linke-hb-2015", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "HB", "wp": 19, "gueltig_ab": "2015-05-10", "gueltig_bis": "2019-05-26", "name": "DIE LINKE HB Wahlprogramm 2015", "titel": None, "pdf": "linke-hb-2015.pdf", "seiten": 82},
"spd-hb-2015": {"id": "spd-hb-2015", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "HB", "wp": 19, "gueltig_ab": "2015-05-10", "gueltig_bis": "2019-05-26", "name": "SPD HB Wahlprogramm 2015", "titel": None, "pdf": "spd-hb-2015.pdf", "seiten": 67},
"afd-hb-2019": {"id": "afd-hb-2019", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "HB", "wp": 20, "gueltig_ab": "2019-05-26", "gueltig_bis": "2023-05-14", "name": "AfD HB Wahlprogramm 2019", "titel": None, "pdf": "afd-hb-2019.pdf", "seiten": 27},
"biw-hb-2019": {"id": "biw-hb-2019", "typ": "wahlprogramm", "partei": "BiW", "bundesland": "HB", "wp": 20, "gueltig_ab": "2019-05-26", "gueltig_bis": "2023-05-14", "name": "BIW Bremen Wahlprogramm 2019", "titel": None, "pdf": "biw-hb-2019.pdf", "seiten": 22},
"cdu-hb-2019": {"id": "cdu-hb-2019", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "HB", "wp": 20, "gueltig_ab": "2019-05-26", "gueltig_bis": "2023-05-14", "name": "CDU HB Wahlprogramm 2019", "titel": None, "pdf": "cdu-hb-2019.pdf", "seiten": 66},
"fdp-hb-2019": {"id": "fdp-hb-2019", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "HB", "wp": 20, "gueltig_ab": "2019-05-26", "gueltig_bis": "2023-05-14", "name": "FDP HB Wahlprogramm 2019", "titel": None, "pdf": "fdp-hb-2019.pdf", "seiten": 89},
"gruene-hb-2019": {"id": "gruene-hb-2019", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "HB", "wp": 20, "gueltig_ab": "2019-05-26", "gueltig_bis": "2023-05-14", "name": "Grüne HB Wahlprogramm 2019", "titel": None, "pdf": "gruene-hb-2019.pdf", "seiten": 190},
"linke-hb-2019": {"id": "linke-hb-2019", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "HB", "wp": 20, "gueltig_ab": "2019-05-26", "gueltig_bis": "2023-05-14", "name": "DIE LINKE HB Wahlprogramm 2019", "titel": None, "pdf": "linke-hb-2019.pdf", "seiten": 64},
"spd-hb-2019": {"id": "spd-hb-2019", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "HB", "wp": 20, "gueltig_ab": "2019-05-26", "gueltig_bis": "2023-05-14", "name": "SPD HB Wahlprogramm 2019", "titel": None, "pdf": "spd-hb-2019.pdf", "seiten": 132},
"biw-hb-2023": {"id": "biw-hb-2023", "typ": "wahlprogramm", "partei": "BiW", "bundesland": "HB", "wp": 21, "gueltig_ab": "2023-05-14", "gueltig_bis": None, "name": "BiW Bremen Wahlprogramm 2023", "titel": "BÜRGER IN WUT — Programm für die Bürgerschaftswahl 2023", "pdf": "biw-hb-2023.pdf", "seiten": 26},
"cdu-hb-2023": {"id": "cdu-hb-2023", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "HB", "wp": 21, "gueltig_ab": "2023-05-14", "gueltig_bis": None, "name": "CDU Bremen Wahlprogramm 2023", "titel": "CDU Bremen Wahlprogramm Bürgerschaftswahl 2023", "pdf": "cdu-hb-2023.pdf", "seiten": 100},
"gruene-hb-2023": {"id": "gruene-hb-2023", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "HB", "wp": 21, "gueltig_ab": "2023-05-14", "gueltig_bis": None, "name": "BÜNDNIS 90/DIE GRÜNEN Bremen Wahlprogramm 2023", "titel": None, "pdf": "gruene-hb-2023.pdf", "seiten": 100},
"linke-hb-2023": {"id": "linke-hb-2023", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "HB", "wp": 21, "gueltig_ab": "2023-05-14", "gueltig_bis": None, "name": "DIE LINKE Bremen Wahlprogramm 2023", "titel": "DIE LINKE Bremen Wahlprogramm Bürgerschaftswahl 2023", "pdf": "linke-hb-2023.pdf", "seiten": 100},
"spd-hb-2023": {"id": "spd-hb-2023", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "HB", "wp": 21, "gueltig_ab": "2023-05-14", "gueltig_bis": None, "name": "SPD Bremen Wahlprogramm 2023", "titel": "SPD Bremen Wahlprogramm Bürgerschaftswahl 2023", "pdf": "spd-hb-2023.pdf", "seiten": 100},
# ─── wahlprogramm · HE ───
"cdu-he-2013": {"id": "cdu-he-2013", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "HE", "wp": 19, "gueltig_ab": "2013-09-22", "gueltig_bis": "2019-01-18", "name": "CDU HE Wahlprogramm 2013", "titel": None, "pdf": "cdu-he-2013.pdf", "seiten": 72},
"fdp-he-2013": {"id": "fdp-he-2013", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "HE", "wp": 19, "gueltig_ab": "2013-09-22", "gueltig_bis": "2019-01-18", "name": "FDP HE Wahlprogramm 2013", "titel": None, "pdf": "fdp-he-2013.pdf", "seiten": 197},
"gruene-he-2013": {"id": "gruene-he-2013", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "HE", "wp": 19, "gueltig_ab": "2013-09-22", "gueltig_bis": "2019-01-18", "name": "Grüne HE Wahlprogramm 2013", "titel": None, "pdf": "gruene-he-2013.pdf", "seiten": 110},
"linke-he-2013": {"id": "linke-he-2013", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "HE", "wp": 19, "gueltig_ab": "2013-09-22", "gueltig_bis": "2019-01-18", "name": "DIE LINKE HE Wahlprogramm 2013", "titel": None, "pdf": "linke-he-2013.pdf", "seiten": 60},
"spd-he-2013": {"id": "spd-he-2013", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "HE", "wp": 19, "gueltig_ab": "2013-09-22", "gueltig_bis": "2019-01-18", "name": "SPD HE Wahlprogramm 2013", "titel": None, "pdf": "spd-he-2013.pdf", "seiten": 112},
"afd-he-2018": {"id": "afd-he-2018", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "HE", "wp": 20, "gueltig_ab": "2018-10-28", "gueltig_bis": "2023-10-08", "name": "AfD HE Wahlprogramm 2018", "titel": None, "pdf": "afd-he-2018.pdf", "seiten": 90},
"cdu-he-2018": {"id": "cdu-he-2018", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "HE", "wp": 20, "gueltig_ab": "2018-10-28", "gueltig_bis": "2023-10-08", "name": "CDU HE Wahlprogramm 2018", "titel": None, "pdf": "cdu-he-2018.pdf", "seiten": 132},
"fdp-he-2018": {"id": "fdp-he-2018", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "HE", "wp": 20, "gueltig_ab": "2018-10-28", "gueltig_bis": "2023-10-08", "name": "FDP HE Wahlprogramm 2018", "titel": None, "pdf": "fdp-he-2018.pdf", "seiten": 112},
"gruene-he-2018": {"id": "gruene-he-2018", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "HE", "wp": 20, "gueltig_ab": "2018-10-28", "gueltig_bis": "2023-10-08", "name": "Grüne HE Wahlprogramm 2018", "titel": None, "pdf": "gruene-he-2018.pdf", "seiten": 140},
"linke-he-2018": {"id": "linke-he-2018", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "HE", "wp": 20, "gueltig_ab": "2018-10-28", "gueltig_bis": "2023-10-08", "name": "DIE LINKE HE Wahlprogramm 2018", "titel": None, "pdf": "linke-he-2018.pdf", "seiten": 90},
"spd-he-2018": {"id": "spd-he-2018", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "HE", "wp": 20, "gueltig_ab": "2018-10-28", "gueltig_bis": "2023-10-08", "name": "SPD HE Wahlprogramm 2018", "titel": None, "pdf": "spd-he-2018.pdf", "seiten": 175},
"afd-he-2023": {"id": "afd-he-2023", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "HE", "wp": 21, "gueltig_ab": "2023-10-08", "gueltig_bis": None, "name": "AfD Hessen Wahlprogramm 2023", "titel": None, "pdf": "afd-he-2023.pdf", "seiten": 100},
"cdu-he-2023": {"id": "cdu-he-2023", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "HE", "wp": 21, "gueltig_ab": "2023-10-08", "gueltig_bis": None, "name": "CDU Hessen Wahlprogramm 2023", "titel": "CDU Hessen Regierungsprogramm 2023", "pdf": "cdu-he-2023.pdf", "seiten": 100},
"fdp-he-2023": {"id": "fdp-he-2023", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "HE", "wp": 21, "gueltig_ab": "2023-10-08", "gueltig_bis": None, "name": "FDP Hessen Wahlprogramm 2023", "titel": None, "pdf": "fdp-he-2023.pdf", "seiten": 100},
"gruene-he-2023": {"id": "gruene-he-2023", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "HE", "wp": 21, "gueltig_ab": "2023-10-08", "gueltig_bis": None, "name": "BÜNDNIS 90/DIE GRÜNEN Hessen Wahlprogramm 2023", "titel": None, "pdf": "gruene-he-2023.pdf", "seiten": 100},
"spd-he-2023": {"id": "spd-he-2023", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "HE", "wp": 21, "gueltig_ab": "2023-10-08", "gueltig_bis": None, "name": "SPD Hessen Wahlprogramm 2023", "titel": None, "pdf": "spd-he-2023.pdf", "seiten": 100},
# ─── wahlprogramm · HH ───
"afd-hh-2015": {"id": "afd-hh-2015", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "HH", "wp": 21, "gueltig_ab": "2015-02-15", "gueltig_bis": "2020-02-23", "name": "AfD HH Wahlprogramm 2015", "titel": None, "pdf": "afd-hh-2015.pdf", "seiten": 28},
"cdu-hh-2015": {"id": "cdu-hh-2015", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "HH", "wp": 21, "gueltig_ab": "2015-02-15", "gueltig_bis": "2020-02-23", "name": "CDU HH Wahlprogramm 2015", "titel": None, "pdf": "cdu-hh-2015.pdf", "seiten": 60},
"fdp-hh-2015": {"id": "fdp-hh-2015", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "HH", "wp": 21, "gueltig_ab": "2015-02-15", "gueltig_bis": "2020-02-23", "name": "FDP HH Wahlprogramm 2015", "titel": None, "pdf": "fdp-hh-2015.pdf", "seiten": 63},
"gruene-hh-2015": {"id": "gruene-hh-2015", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "HH", "wp": 21, "gueltig_ab": "2015-02-15", "gueltig_bis": "2020-02-23", "name": "Grüne HH Wahlprogramm 2015", "titel": None, "pdf": "gruene-hh-2015.pdf", "seiten": 237},
"linke-hh-2015": {"id": "linke-hh-2015", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "HH", "wp": 21, "gueltig_ab": "2015-02-15", "gueltig_bis": "2020-02-23", "name": "DIE LINKE HH Wahlprogramm 2015", "titel": None, "pdf": "linke-hh-2015.pdf", "seiten": 44},
"spd-hh-2015": {"id": "spd-hh-2015", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "HH", "wp": 21, "gueltig_ab": "2015-02-15", "gueltig_bis": "2020-02-23", "name": "SPD HH Wahlprogramm 2015", "titel": None, "pdf": "spd-hh-2015.pdf", "seiten": 70},
"afd-hh-2020": {"id": "afd-hh-2020", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "HH", "wp": 22, "gueltig_ab": "2020-02-23", "gueltig_bis": "2025-03-02", "name": "AfD HH Wahlprogramm 2020", "titel": None, "pdf": "afd-hh-2020.pdf", "seiten": 40},
"cdu-hh-2020": {"id": "cdu-hh-2020", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "HH", "wp": 22, "gueltig_ab": "2020-02-23", "gueltig_bis": "2025-03-02", "name": "CDU HH Wahlprogramm 2020", "titel": None, "pdf": "cdu-hh-2020.pdf", "seiten": 84},
"fdp-hh-2020": {"id": "fdp-hh-2020", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "HH", "wp": 22, "gueltig_ab": "2020-02-23", "gueltig_bis": "2025-03-02", "name": "FDP HH Wahlprogramm 2020", "titel": None, "pdf": "fdp-hh-2020.pdf", "seiten": 97},
"gruene-hh-2020": {"id": "gruene-hh-2020", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "HH", "wp": 22, "gueltig_ab": "2020-02-23", "gueltig_bis": "2025-03-02", "name": "Grüne HH Wahlprogramm 2020", "titel": None, "pdf": "gruene-hh-2020.pdf", "seiten": 146},
"linke-hh-2020": {"id": "linke-hh-2020", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "HH", "wp": 22, "gueltig_ab": "2020-02-23", "gueltig_bis": "2025-03-02", "name": "DIE LINKE HH Wahlprogramm 2020", "titel": None, "pdf": "linke-hh-2020.pdf", "seiten": 37},
"spd-hh-2020": {"id": "spd-hh-2020", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "HH", "wp": 22, "gueltig_ab": "2020-02-23", "gueltig_bis": "2025-03-02", "name": "SPD HH Wahlprogramm 2020", "titel": None, "pdf": "spd-hh-2020.pdf", "seiten": 90},
"afd-hh-2025": {"id": "afd-hh-2025", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "HH", "wp": 23, "gueltig_ab": "2025-03-02", "gueltig_bis": None, "name": "AfD Hamburg Wahlprogramm 2025", "titel": "AfD Hamburg Wahlprogramm Bürgerschaftswahl 2025", "pdf": "afd-hh-2025.pdf", "seiten": 100},
"cdu-hh-2025": {"id": "cdu-hh-2025", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "HH", "wp": 23, "gueltig_ab": "2025-03-02", "gueltig_bis": None, "name": "CDU Hamburg Wahlprogramm 2025", "titel": "CDU Hamburg Wahlprogramm Bürgerschaftswahl 2025", "pdf": "cdu-hh-2025.pdf", "seiten": 100},
"gruene-hh-2025": {"id": "gruene-hh-2025", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "HH", "wp": 23, "gueltig_ab": "2025-03-02", "gueltig_bis": None, "name": "BÜNDNIS 90/DIE GRÜNEN Hamburg Wahlprogramm 2025", "titel": "Gute Gründe für Grün — Regierungsprogramm BÜNDNIS 90/DIE GRÜNEN Hamburg 2025", "pdf": "gruene-hh-2025.pdf", "seiten": 100},
"linke-hh-2025": {"id": "linke-hh-2025", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "HH", "wp": 23, "gueltig_ab": "2025-03-02", "gueltig_bis": None, "name": "DIE LINKE Hamburg Wahlprogramm 2025", "titel": "DIE LINKE Hamburg Wahlprogramm Bürgerschaftswahl 2025", "pdf": "linke-hh-2025.pdf", "seiten": 100},
"spd-hh-2025": {"id": "spd-hh-2025", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "HH", "wp": 23, "gueltig_ab": "2025-03-02", "gueltig_bis": None, "name": "SPD Hamburg Wahlprogramm 2025", "titel": "SPD Hamburg Wahlprogramm Bürgerschaftswahl 2025", "pdf": "spd-hh-2025.pdf", "seiten": 100},
# ─── wahlprogramm · LSA ───
"cdu-lsa-2011": {"id": "cdu-lsa-2011", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "LSA", "wp": 6, "gueltig_ab": "2011-03-20", "gueltig_bis": "2016-04-13", "name": "CDU LSA Wahlprogramm 2011", "titel": None, "pdf": "cdu-lsa-2011.pdf", "seiten": 66},
"gruene-lsa-2011": {"id": "gruene-lsa-2011", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "LSA", "wp": 6, "gueltig_ab": "2011-03-20", "gueltig_bis": "2016-04-13", "name": "Grüne LSA Wahlprogramm 2011", "titel": None, "pdf": "gruene-lsa-2011.pdf", "seiten": 94},
"linke-lsa-2011": {"id": "linke-lsa-2011", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "LSA", "wp": 6, "gueltig_ab": "2011-03-20", "gueltig_bis": "2016-04-13", "name": "DIE LINKE LSA Wahlprogramm 2011", "titel": None, "pdf": "linke-lsa-2011.pdf", "seiten": 36},
"spd-lsa-2011": {"id": "spd-lsa-2011", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "LSA", "wp": 6, "gueltig_ab": "2011-03-20", "gueltig_bis": "2016-04-13", "name": "SPD LSA Wahlprogramm 2011", "titel": None, "pdf": "spd-lsa-2011.pdf", "seiten": 38},
"afd-lsa-2016": {"id": "afd-lsa-2016", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "LSA", "wp": 7, "gueltig_ab": "2016-03-13", "gueltig_bis": "2021-06-06", "name": "AfD LSA Wahlprogramm 2016", "titel": None, "pdf": "afd-lsa-2016.pdf", "seiten": 68},
"cdu-lsa-2016": {"id": "cdu-lsa-2016", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "LSA", "wp": 7, "gueltig_ab": "2016-03-13", "gueltig_bis": "2021-06-06", "name": "CDU LSA Wahlprogramm 2016", "titel": None, "pdf": "cdu-lsa-2016.pdf", "seiten": 64},
"fdp-lsa-2016": {"id": "fdp-lsa-2016", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "LSA", "wp": 7, "gueltig_ab": "2016-03-13", "gueltig_bis": "2021-06-06", "name": "FDP LSA Wahlprogramm 2016", "titel": None, "pdf": "fdp-lsa-2016.pdf", "seiten": 51},
"gruene-lsa-2016": {"id": "gruene-lsa-2016", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "LSA", "wp": 7, "gueltig_ab": "2016-03-13", "gueltig_bis": "2021-06-06", "name": "Grüne LSA Wahlprogramm 2016", "titel": None, "pdf": "gruene-lsa-2016.pdf", "seiten": 129},
"linke-lsa-2016": {"id": "linke-lsa-2016", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "LSA", "wp": 7, "gueltig_ab": "2016-03-13", "gueltig_bis": "2021-06-06", "name": "DIE LINKE LSA Wahlprogramm 2016", "titel": None, "pdf": "linke-lsa-2016.pdf", "seiten": 59},
"spd-lsa-2016": {"id": "spd-lsa-2016", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "LSA", "wp": 7, "gueltig_ab": "2016-03-13", "gueltig_bis": "2021-06-06", "name": "SPD LSA Wahlprogramm 2016", "titel": None, "pdf": "spd-lsa-2016.pdf", "seiten": 72},
"afd-lsa-2021": {"id": "afd-lsa-2021", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "LSA", "wp": 8, "gueltig_ab": "2021-06-06", "gueltig_bis": None, "name": "AfD Sachsen-Anhalt Wahlprogramm 2021", "titel": "Alles für unsere Heimat! Programm der AfD Sachsen-Anhalt zur Landtagswahl 2021", "pdf": "afd-lsa-2021.pdf", "seiten": 64},
"cdu-lsa-2021": {"id": "cdu-lsa-2021", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "LSA", "wp": 8, "gueltig_ab": "2021-06-06", "gueltig_bis": None, "name": "CDU Sachsen-Anhalt Wahlprogramm 2021", "titel": "Unsere Heimat. Unsere Verantwortung.", "pdf": "cdu-lsa-2021.pdf", "seiten": 82},
"fdp-lsa-2021": {"id": "fdp-lsa-2021", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "LSA", "wp": 8, "gueltig_ab": "2021-06-06", "gueltig_bis": None, "name": "FDP Sachsen-Anhalt Wahlprogramm 2021", "titel": "Wahlprogramm der FDP Sachsen-Anhalt zur Landtagswahl 2021", "pdf": "fdp-lsa-2021.pdf", "seiten": 76},
"gruene-lsa-2021": {"id": "gruene-lsa-2021", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "LSA", "wp": 8, "gueltig_ab": "2021-06-06", "gueltig_bis": None, "name": "BÜNDNIS 90/DIE GRÜNEN Sachsen-Anhalt Wahlprogramm 2021", "titel": "Verlässlich für Sachsen-Anhalt", "pdf": "gruene-lsa-2021.pdf", "seiten": 164},
"linke-lsa-2021": {"id": "linke-lsa-2021", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "LSA", "wp": 8, "gueltig_ab": "2021-06-06", "gueltig_bis": None, "name": "DIE LINKE Sachsen-Anhalt Wahlprogramm 2021", "titel": "Wahlprogramm zur Landtagswahl 2021", "pdf": "linke-lsa-2021.pdf", "seiten": 88},
"spd-lsa-2021": {"id": "spd-lsa-2021", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "LSA", "wp": 8, "gueltig_ab": "2021-06-06", "gueltig_bis": None, "name": "SPD Sachsen-Anhalt Wahlprogramm 2021", "titel": "Zusammenhalt und neue Chancen. Politik fürs ganze Land", "pdf": "spd-lsa-2021.pdf", "seiten": 77},
# ─── wahlprogramm · MV ───
"cdu-mv-2011": {"id": "cdu-mv-2011", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "MV", "wp": 6, "gueltig_ab": "2011-09-04", "gueltig_bis": "2016-10-04", "name": "CDU MV Wahlprogramm 2011", "titel": None, "pdf": "cdu-mv-2011.pdf", "seiten": 34},
"gruene-mv-2011": {"id": "gruene-mv-2011", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "MV", "wp": 6, "gueltig_ab": "2011-09-04", "gueltig_bis": "2016-10-04", "name": "Grüne MV Wahlprogramm 2011", "titel": None, "pdf": "gruene-mv-2011.pdf", "seiten": 144},
"linke-mv-2011": {"id": "linke-mv-2011", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "MV", "wp": 6, "gueltig_ab": "2011-09-04", "gueltig_bis": "2016-10-04", "name": "DIE LINKE MV Wahlprogramm 2011", "titel": None, "pdf": "linke-mv-2011.pdf", "seiten": 33},
"spd-mv-2011": {"id": "spd-mv-2011", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "MV", "wp": 6, "gueltig_ab": "2011-09-04", "gueltig_bis": "2016-10-04", "name": "SPD MV Wahlprogramm 2011", "titel": None, "pdf": "spd-mv-2011.pdf", "seiten": 50},
"afd-mv-2016": {"id": "afd-mv-2016", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "MV", "wp": 7, "gueltig_ab": "2016-09-04", "gueltig_bis": "2021-09-26", "name": "AfD MV Wahlprogramm 2016", "titel": None, "pdf": "afd-mv-2016.pdf", "seiten": 22},
"cdu-mv-2016": {"id": "cdu-mv-2016", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "MV", "wp": 7, "gueltig_ab": "2016-09-04", "gueltig_bis": "2021-09-26", "name": "CDU MV Wahlprogramm 2016", "titel": None, "pdf": "cdu-mv-2016.pdf", "seiten": 27},
"gruene-mv-2016": {"id": "gruene-mv-2016", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "MV", "wp": 7, "gueltig_ab": "2016-09-04", "gueltig_bis": "2021-09-26", "name": "Grüne MV Wahlprogramm 2016", "titel": None, "pdf": "gruene-mv-2016.pdf", "seiten": 100},
"linke-mv-2016": {"id": "linke-mv-2016", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "MV", "wp": 7, "gueltig_ab": "2016-09-04", "gueltig_bis": "2021-09-26", "name": "DIE LINKE MV Wahlprogramm 2016", "titel": None, "pdf": "linke-mv-2016.pdf", "seiten": 49},
"spd-mv-2016": {"id": "spd-mv-2016", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "MV", "wp": 7, "gueltig_ab": "2016-09-04", "gueltig_bis": "2021-09-26", "name": "SPD MV Wahlprogramm 2016", "titel": None, "pdf": "spd-mv-2016.pdf", "seiten": 48},
"afd-mv-2021": {"id": "afd-mv-2021", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "MV", "wp": 8, "gueltig_ab": "2021-09-26", "gueltig_bis": None, "name": "AfD Mecklenburg-Vorpommern Wahlprogramm 2021", "titel": "Landeswahlprogramm der AfD Mecklenburg-Vorpommern 2021", "pdf": "afd-mv-2021.pdf", "seiten": 84},
"cdu-mv-2021": {"id": "cdu-mv-2021", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "MV", "wp": 8, "gueltig_ab": "2021-09-26", "gueltig_bis": None, "name": "CDU Mecklenburg-Vorpommern Wahlprogramm 2021", "titel": "Zusammen. Den Blick nach vorn. Gemeinsam die Zukunft meistern", "pdf": "cdu-mv-2021.pdf", "seiten": 56},
"fdp-mv-2021": {"id": "fdp-mv-2021", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "MV", "wp": 8, "gueltig_ab": "2021-09-26", "gueltig_bis": None, "name": "FDP Mecklenburg-Vorpommern Wahlprogramm 2021", "titel": "Wahlprogramm der Freien Demokraten Mecklenburg-Vorpommern zur Landtagswahl 2021", "pdf": "fdp-mv-2021.pdf", "seiten": 120},
"gruene-mv-2021": {"id": "gruene-mv-2021", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "MV", "wp": 8, "gueltig_ab": "2021-09-26", "gueltig_bis": None, "name": "BÜNDNIS 90/DIE GRÜNEN Mecklenburg-Vorpommern Wahlprogramm 2021", "titel": "Für Klima, Land und ein besseres Miteinander", "pdf": "gruene-mv-2021.pdf", "seiten": 88},
"linke-mv-2021": {"id": "linke-mv-2021", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "MV", "wp": 8, "gueltig_ab": "2021-09-26", "gueltig_bis": None, "name": "DIE LINKE Mecklenburg-Vorpommern Wahlprogramm 2021", "titel": "Das ist links! — Zukunftsprogramm für Mecklenburg-Vorpommern", "pdf": "linke-mv-2021.pdf", "seiten": 82},
"spd-mv-2021": {"id": "spd-mv-2021", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "MV", "wp": 8, "gueltig_ab": "2021-09-26", "gueltig_bis": None, "name": "SPD Mecklenburg-Vorpommern Wahlprogramm 2021", "titel": "Verantwortung für heute und morgen — Regierungsprogramm 20212026", "pdf": "spd-mv-2021.pdf", "seiten": 95},
# ─── wahlprogramm · NI ───
"cdu-ni-2013": {"id": "cdu-ni-2013", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "NI", "wp": 17, "gueltig_ab": "2013-01-20", "gueltig_bis": "2017-11-14", "name": "CDU NI Wahlprogramm 2013", "titel": None, "pdf": "cdu-ni-2013.pdf", "seiten": 86},
"fdp-ni-2013": {"id": "fdp-ni-2013", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "NI", "wp": 17, "gueltig_ab": "2013-01-20", "gueltig_bis": "2017-11-14", "name": "FDP NI Wahlprogramm 2013", "titel": None, "pdf": "fdp-ni-2013.pdf", "seiten": 65},
"gruene-ni-2013": {"id": "gruene-ni-2013", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "NI", "wp": 17, "gueltig_ab": "2013-01-20", "gueltig_bis": "2017-11-14", "name": "Grüne NI Wahlprogramm 2013", "titel": None, "pdf": "gruene-ni-2013.pdf", "seiten": 92},
"spd-ni-2013": {"id": "spd-ni-2013", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "NI", "wp": 17, "gueltig_ab": "2013-01-20", "gueltig_bis": "2017-11-14", "name": "SPD NI Wahlprogramm 2013", "titel": None, "pdf": "spd-ni-2013.pdf", "seiten": 70},
"afd-ni-2017": {"id": "afd-ni-2017", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "NI", "wp": 18, "gueltig_ab": "2017-10-15", "gueltig_bis": "2022-10-09", "name": "AfD NI Wahlprogramm 2017", "titel": None, "pdf": "afd-ni-2017.pdf", "seiten": 93},
"cdu-ni-2017": {"id": "cdu-ni-2017", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "NI", "wp": 18, "gueltig_ab": "2017-10-15", "gueltig_bis": "2022-10-09", "name": "CDU NI Wahlprogramm 2017", "titel": None, "pdf": "cdu-ni-2017.pdf", "seiten": 116},
"fdp-ni-2017": {"id": "fdp-ni-2017", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "NI", "wp": 18, "gueltig_ab": "2017-10-15", "gueltig_bis": "2022-10-09", "name": "FDP NI Wahlprogramm 2017", "titel": None, "pdf": "fdp-ni-2017.pdf", "seiten": 74},
"gruene-ni-2017": {"id": "gruene-ni-2017", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "NI", "wp": 18, "gueltig_ab": "2017-10-15", "gueltig_bis": "2022-10-09", "name": "Grüne NI Wahlprogramm 2017", "titel": None, "pdf": "gruene-ni-2017.pdf", "seiten": 101},
"spd-ni-2017": {"id": "spd-ni-2017", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "NI", "wp": 18, "gueltig_ab": "2017-10-15", "gueltig_bis": "2022-10-09", "name": "SPD NI Wahlprogramm 2017", "titel": None, "pdf": "spd-ni-2017.pdf", "seiten": 154},
"afd-ni-2022": {"id": "afd-ni-2022", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "NI", "wp": 19, "gueltig_ab": "2022-10-09", "gueltig_bis": None, "name": "AfD Niedersachsen Wahlprogramm 2022", "titel": None, "pdf": "afd-ni-2022.pdf", "seiten": 100},
"cdu-ni-2022": {"id": "cdu-ni-2022", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "NI", "wp": 19, "gueltig_ab": "2022-10-09", "gueltig_bis": None, "name": "CDU Niedersachsen Wahlprogramm 2022", "titel": "CDU Niedersachsen Regierungsprogramm 2022", "pdf": "cdu-ni-2022.pdf", "seiten": 100},
"gruene-ni-2022": {"id": "gruene-ni-2022", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "NI", "wp": 19, "gueltig_ab": "2022-10-09", "gueltig_bis": None, "name": "BÜNDNIS 90/DIE GRÜNEN Niedersachsen Wahlprogramm 2022", "titel": None, "pdf": "gruene-ni-2022.pdf", "seiten": 100},
"spd-ni-2022": {"id": "spd-ni-2022", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "NI", "wp": 19, "gueltig_ab": "2022-10-09", "gueltig_bis": None, "name": "SPD Niedersachsen Wahlprogramm 2022", "titel": "SPD Niedersachsen Regierungsprogramm 2022", "pdf": "spd-ni-2022.pdf", "seiten": 100},
# ─── wahlprogramm · NRW ───
"cdu-nrw-2012": {"id": "cdu-nrw-2012", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "NRW", "wp": 16, "gueltig_ab": "2012-05-13", "gueltig_bis": "2017-06-01", "name": "CDU NRW Wahlprogramm 2012", "titel": None, "pdf": "cdu-nrw-2012.pdf", "seiten": 17},
"fdp-nrw-2012": {"id": "fdp-nrw-2012", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "NRW", "wp": 16, "gueltig_ab": "2012-05-13", "gueltig_bis": "2017-06-01", "name": "FDP NRW Wahlprogramm 2012", "titel": None, "pdf": "fdp-nrw-2012.pdf", "seiten": 6},
"gruene-nrw-2012": {"id": "gruene-nrw-2012", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "NRW", "wp": 16, "gueltig_ab": "2012-05-13", "gueltig_bis": "2017-06-01", "name": "Grüne NRW Zukunftsplan Update 2012", "titel": None, "pdf": "gruene-nrw-2012.pdf", "seiten": 52},
"piraten-nrw-2012": {"id": "piraten-nrw-2012", "typ": "wahlprogramm", "partei": "PIRATEN", "bundesland": "NRW", "wp": 16, "gueltig_ab": "2012-05-13", "gueltig_bis": "2017-06-01", "name": "PIRATEN NRW Wahlprogramm 2012", "titel": None, "pdf": "piraten-nrw-2012.pdf", "seiten": 76},
"spd-nrw-2012": {"id": "spd-nrw-2012", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "NRW", "wp": 16, "gueltig_ab": "2012-05-13", "gueltig_bis": "2017-06-01", "name": "SPD NRW Wahlprogramm 2012", "titel": None, "pdf": "spd-nrw-2012.pdf", "seiten": 22},
"afd-nrw-2017": {"id": "afd-nrw-2017", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "NRW", "wp": 17, "gueltig_ab": "2017-05-14", "gueltig_bis": "2022-05-15", "name": "AfD NRW Wahlprogramm 2017", "titel": None, "pdf": "afd-nrw-2017.pdf", "seiten": 84},
"cdu-nrw-2017": {"id": "cdu-nrw-2017", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "NRW", "wp": 17, "gueltig_ab": "2017-05-14", "gueltig_bis": "2022-05-15", "name": "CDU NRW Regierungsprogramm 2017", "titel": None, "pdf": "cdu-nrw-2017.pdf", "seiten": 120},
"fdp-nrw-2017": {"id": "fdp-nrw-2017", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "NRW", "wp": 17, "gueltig_ab": "2017-05-14", "gueltig_bis": "2022-05-15", "name": "FDP NRW Wahlprogramm 2017", "titel": None, "pdf": "fdp-nrw-2017.pdf", "seiten": 56},
"gruene-nrw-2017": {"id": "gruene-nrw-2017", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "NRW", "wp": 17, "gueltig_ab": "2017-05-14", "gueltig_bis": "2022-05-15", "name": "Grüne NRW Wahlprogramm 2017", "titel": None, "pdf": "gruene-nrw-2017.pdf", "seiten": 131},
"spd-nrw-2017": {"id": "spd-nrw-2017", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "NRW", "wp": 17, "gueltig_ab": "2017-05-14", "gueltig_bis": "2022-05-15", "name": "SPD NRW Regierungsprogramm 2017", "titel": None, "pdf": "spd-nrw-2017.pdf", "seiten": 116},
"afd-nrw-2022": {"id": "afd-nrw-2022", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "NRW", "wp": 18, "gueltig_ab": "2022-05-15", "gueltig_bis": None, "name": "AfD NRW Wahlprogramm 2022", "titel": "Wer sonst.", "pdf": "afd-nrw-2022.pdf", "seiten": 68},
"cdu-nrw-2022": {"id": "cdu-nrw-2022", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "NRW", "wp": 18, "gueltig_ab": "2022-05-15", "gueltig_bis": None, "name": "CDU NRW Wahlprogramm 2022", "titel": "Machen, worauf es ankommt", "pdf": "cdu-nrw-2022.pdf", "seiten": 109},
"fdp-nrw-2022": {"id": "fdp-nrw-2022", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "NRW", "wp": 18, "gueltig_ab": "2022-05-15", "gueltig_bis": None, "name": "FDP NRW Wahlprogramm 2022", "titel": "Nie gab es mehr zu tun", "pdf": "fdp-nrw-2022.pdf", "seiten": 96},
"gruene-nrw-2022": {"id": "gruene-nrw-2022", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "NRW", "wp": 18, "gueltig_ab": "2022-05-15", "gueltig_bis": None, "name": "BÜNDNIS 90/DIE GRÜNEN NRW Wahlprogramm 2022", "titel": "Von hier an Zukunft", "pdf": "gruene-nrw-2022.pdf", "seiten": 100},
"spd-nrw-2022": {"id": "spd-nrw-2022", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "NRW", "wp": 18, "gueltig_ab": "2022-05-15", "gueltig_bis": None, "name": "SPD NRW Wahlprogramm 2022", "titel": "Unser Land von morgen", "pdf": "spd-nrw-2022.pdf", "seiten": 116},
# ─── wahlprogramm · RP ───
"cdu-rp-2011": {"id": "cdu-rp-2011", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "RP", "wp": 16, "gueltig_ab": "2011-03-27", "gueltig_bis": "2016-05-18", "name": "CDU RP Wahlprogramm 2011", "titel": None, "pdf": "cdu-rp-2011.pdf", "seiten": 84},
"gruene-rp-2011": {"id": "gruene-rp-2011", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "RP", "wp": 16, "gueltig_ab": "2011-03-27", "gueltig_bis": "2016-05-18", "name": "Grüne RP Wahlprogramm 2011", "titel": None, "pdf": "gruene-rp-2011.pdf", "seiten": 110},
"spd-rp-2011": {"id": "spd-rp-2011", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "RP", "wp": 16, "gueltig_ab": "2011-03-27", "gueltig_bis": "2016-05-18", "name": "SPD RP Wahlprogramm 2011", "titel": None, "pdf": "spd-rp-2011.pdf", "seiten": 65},
"afd-rp-2016": {"id": "afd-rp-2016", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "RP", "wp": 17, "gueltig_ab": "2016-03-13", "gueltig_bis": "2021-03-14", "name": "AfD RP Wahlprogramm 2016", "titel": None, "pdf": "afd-rp-2016.pdf", "seiten": 17},
"cdu-rp-2016": {"id": "cdu-rp-2016", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "RP", "wp": 17, "gueltig_ab": "2016-03-13", "gueltig_bis": "2021-03-14", "name": "CDU RP Wahlprogramm 2016", "titel": None, "pdf": "cdu-rp-2016.pdf", "seiten": 102},
"fdp-rp-2016": {"id": "fdp-rp-2016", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "RP", "wp": 17, "gueltig_ab": "2016-03-13", "gueltig_bis": "2021-03-14", "name": "FDP RP Wahlprogramm 2016", "titel": None, "pdf": "fdp-rp-2016.pdf", "seiten": 84},
"gruene-rp-2016": {"id": "gruene-rp-2016", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "RP", "wp": 17, "gueltig_ab": "2016-03-13", "gueltig_bis": "2021-03-14", "name": "Grüne RP Wahlprogramm 2016", "titel": None, "pdf": "gruene-rp-2016.pdf", "seiten": 57},
"spd-rp-2016": {"id": "spd-rp-2016", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "RP", "wp": 17, "gueltig_ab": "2016-03-13", "gueltig_bis": "2021-03-14", "name": "SPD RP Wahlprogramm 2016", "titel": None, "pdf": "spd-rp-2016.pdf", "seiten": 64},
"afd-rp-2021": {"id": "afd-rp-2021", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "RP", "wp": 18, "gueltig_ab": "2021-03-14", "gueltig_bis": None, "name": "AfD Rheinland-Pfalz Wahlprogramm 2021", "titel": None, "pdf": "afd-rp-2021.pdf", "seiten": 100},
"cdu-rp-2021": {"id": "cdu-rp-2021", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "RP", "wp": 18, "gueltig_ab": "2021-03-14", "gueltig_bis": None, "name": "CDU Rheinland-Pfalz Wahlprogramm 2021", "titel": "Regierungsprogramm der CDU RLP 202126", "pdf": "cdu-rp-2021.pdf", "seiten": 100},
"fdp-rp-2021": {"id": "fdp-rp-2021", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "RP", "wp": 18, "gueltig_ab": "2021-03-14", "gueltig_bis": None, "name": "FDP Rheinland-Pfalz Wahlprogramm 2021", "titel": "FDP Rheinland-Pfalz Landtagswahlprogramm 2021", "pdf": "fdp-rp-2021.pdf", "seiten": 100},
"fw-rp-2021": {"id": "fw-rp-2021", "typ": "wahlprogramm", "partei": "FREIE WÄHLER", "bundesland": "RP", "wp": 18, "gueltig_ab": "2021-03-14", "gueltig_bis": None, "name": "FREIE WÄHLER Rheinland-Pfalz Wahlprogramm 2021", "titel": None, "pdf": "fw-rp-2021.pdf", "seiten": 80},
"gruene-rp-2021": {"id": "gruene-rp-2021", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "RP", "wp": 18, "gueltig_ab": "2021-03-14", "gueltig_bis": None, "name": "BÜNDNIS 90/DIE GRÜNEN Rheinland-Pfalz Wahlprogramm 2021", "titel": "BÜNDNIS 90/DIE GRÜNEN Rheinland-Pfalz Landtagswahlprogramm 2021", "pdf": "gruene-rp-2021.pdf", "seiten": 100},
"spd-rp-2021": {"id": "spd-rp-2021", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "RP", "wp": 18, "gueltig_ab": "2021-03-14", "gueltig_bis": None, "name": "SPD Rheinland-Pfalz Wahlprogramm 2021", "titel": "Wir mit Ihr — Regierungsprogramm der SPD Rheinland-Pfalz 20212026", "pdf": "spd-rp-2021.pdf", "seiten": 100},
# ─── wahlprogramm · SH ───
"cdu-sh-2012": {"id": "cdu-sh-2012", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "SH", "wp": 18, "gueltig_ab": "2012-05-06", "gueltig_bis": "2017-06-06", "name": "CDU SH Wahlprogramm 2012", "titel": None, "pdf": "cdu-sh-2012.pdf", "seiten": 150},
"fdp-sh-2012": {"id": "fdp-sh-2012", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "SH", "wp": 18, "gueltig_ab": "2012-05-06", "gueltig_bis": "2017-06-06", "name": "FDP SH Wahlprogramm 2012", "titel": None, "pdf": "fdp-sh-2012.pdf", "seiten": 99},
"gruene-sh-2012": {"id": "gruene-sh-2012", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "SH", "wp": 18, "gueltig_ab": "2012-05-06", "gueltig_bis": "2017-06-06", "name": "Grüne SH Wahlprogramm 2012", "titel": None, "pdf": "gruene-sh-2012.pdf", "seiten": 80},
"piraten-sh-2012": {"id": "piraten-sh-2012", "typ": "wahlprogramm", "partei": "PIRATEN", "bundesland": "SH", "wp": 18, "gueltig_ab": "2012-05-06", "gueltig_bis": "2017-06-06", "name": "PIRATEN SH Wahlprogramm 2012", "titel": None, "pdf": "piraten-sh-2012.pdf", "seiten": 80},
"spd-sh-2012": {"id": "spd-sh-2012", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "SH", "wp": 18, "gueltig_ab": "2012-05-06", "gueltig_bis": "2017-06-06", "name": "SPD SH Wahlprogramm 2012", "titel": None, "pdf": "spd-sh-2012.pdf", "seiten": 36},
"ssw-sh-2012": {"id": "ssw-sh-2012", "typ": "wahlprogramm", "partei": "SSW", "bundesland": "SH", "wp": 18, "gueltig_ab": "2012-05-06", "gueltig_bis": "2017-06-06", "name": "SSW SH Wahlprogramm 2012", "titel": None, "pdf": "ssw-sh-2012.pdf", "seiten": 84},
"afd-sh-2017": {"id": "afd-sh-2017", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "SH", "wp": 19, "gueltig_ab": "2017-05-07", "gueltig_bis": "2022-05-08", "name": "AfD SH Wahlprogramm 2017", "titel": None, "pdf": "afd-sh-2017.pdf", "seiten": 56},
"cdu-sh-2017": {"id": "cdu-sh-2017", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "SH", "wp": 19, "gueltig_ab": "2017-05-07", "gueltig_bis": "2022-05-08", "name": "CDU SH Wahlprogramm 2017", "titel": None, "pdf": "cdu-sh-2017.pdf", "seiten": 96},
"fdp-sh-2017": {"id": "fdp-sh-2017", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "SH", "wp": 19, "gueltig_ab": "2017-05-07", "gueltig_bis": "2022-05-08", "name": "FDP SH Wahlprogramm 2017", "titel": None, "pdf": "fdp-sh-2017.pdf", "seiten": 117},
"gruene-sh-2017": {"id": "gruene-sh-2017", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "SH", "wp": 19, "gueltig_ab": "2017-05-07", "gueltig_bis": "2022-05-08", "name": "Grüne SH Wahlprogramm 2017", "titel": None, "pdf": "gruene-sh-2017.pdf", "seiten": 95},
"spd-sh-2017": {"id": "spd-sh-2017", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "SH", "wp": 19, "gueltig_ab": "2017-05-07", "gueltig_bis": "2022-05-08", "name": "SPD SH Wahlprogramm 2017", "titel": None, "pdf": "spd-sh-2017.pdf", "seiten": 66},
"ssw-sh-2017": {"id": "ssw-sh-2017", "typ": "wahlprogramm", "partei": "SSW", "bundesland": "SH", "wp": 19, "gueltig_ab": "2017-05-07", "gueltig_bis": "2022-05-08", "name": "SSW SH Wahlprogramm 2017", "titel": None, "pdf": "ssw-sh-2017.pdf", "seiten": 60},
"cdu-sh-2022": {"id": "cdu-sh-2022", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "SH", "wp": 20, "gueltig_ab": "2022-05-08", "gueltig_bis": None, "name": "CDU Schleswig-Holstein Wahlprogramm 2022", "titel": None, "pdf": "cdu-sh-2022.pdf", "seiten": 100},
"fdp-sh-2022": {"id": "fdp-sh-2022", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "SH", "wp": 20, "gueltig_ab": "2022-05-08", "gueltig_bis": None, "name": "FDP Schleswig-Holstein Wahlprogramm 2022", "titel": None, "pdf": "fdp-sh-2022.pdf", "seiten": 100},
"gruene-sh-2022": {"id": "gruene-sh-2022", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "SH", "wp": 20, "gueltig_ab": "2022-05-08", "gueltig_bis": None, "name": "BÜNDNIS 90/DIE GRÜNEN Schleswig-Holstein Wahlprogramm 2022", "titel": None, "pdf": "gruene-sh-2022.pdf", "seiten": 100},
"spd-sh-2022": {"id": "spd-sh-2022", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "SH", "wp": 20, "gueltig_ab": "2022-05-08", "gueltig_bis": None, "name": "SPD Schleswig-Holstein Wahlprogramm 2022", "titel": None, "pdf": "spd-sh-2022.pdf", "seiten": 100},
"ssw-sh-2022": {"id": "ssw-sh-2022", "typ": "wahlprogramm", "partei": "SSW", "bundesland": "SH", "wp": 20, "gueltig_ab": "2022-05-08", "gueltig_bis": None, "name": "SSW Wahlprogramm 2022", "titel": "SSW Schleswig-Holstein Wahlprogramm 2022", "pdf": "ssw-sh-2022.pdf", "seiten": 80},
# ─── wahlprogramm · SL ───
"cdu-sl-2012": {"id": "cdu-sl-2012", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "SL", "wp": 15, "gueltig_ab": "2012-03-25", "gueltig_bis": "2017-05-09", "name": "CDU SL Wahlprogramm 2012", "titel": None, "pdf": "cdu-sl-2012.pdf", "seiten": 36},
"linke-sl-2012": {"id": "linke-sl-2012", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "SL", "wp": 15, "gueltig_ab": "2012-03-25", "gueltig_bis": "2017-05-09", "name": "DIE LINKE SL Wahlprogramm 2012", "titel": None, "pdf": "linke-sl-2012.pdf", "seiten": 2},
"piraten-sl-2012": {"id": "piraten-sl-2012", "typ": "wahlprogramm", "partei": "PIRATEN", "bundesland": "SL", "wp": 15, "gueltig_ab": "2012-03-25", "gueltig_bis": "2017-05-09", "name": "PIRATEN SL Wahlprogramm 2012", "titel": None, "pdf": "piraten-sl-2012.pdf", "seiten": 21},
"spd-sl-2012": {"id": "spd-sl-2012", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "SL", "wp": 15, "gueltig_ab": "2012-03-25", "gueltig_bis": "2017-05-09", "name": "SPD SL Wahlprogramm 2012", "titel": None, "pdf": "spd-sl-2012.pdf", "seiten": 40},
"afd-sl-2017": {"id": "afd-sl-2017", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "SL", "wp": 16, "gueltig_ab": "2017-03-26", "gueltig_bis": "2022-03-27", "name": "AfD SL Wahlprogramm 2017", "titel": None, "pdf": "afd-sl-2017.pdf", "seiten": 43},
"cdu-sl-2017": {"id": "cdu-sl-2017", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "SL", "wp": 16, "gueltig_ab": "2017-03-26", "gueltig_bis": "2022-03-27", "name": "CDU SL Wahlprogramm 2017", "titel": None, "pdf": "cdu-sl-2017.pdf", "seiten": 72},
"gruene-sl-2017": {"id": "gruene-sl-2017", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "SL", "wp": 16, "gueltig_ab": "2017-03-26", "gueltig_bis": "2022-03-27", "name": "Grüne SL Wahlprogramm 2017", "titel": None, "pdf": "gruene-sl-2017.pdf", "seiten": 75},
"linke-sl-2017": {"id": "linke-sl-2017", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "SL", "wp": 16, "gueltig_ab": "2017-03-26", "gueltig_bis": "2022-03-27", "name": "DIE LINKE SL Wahlprogramm 2017", "titel": None, "pdf": "linke-sl-2017.pdf", "seiten": 34},
"spd-sl-2017": {"id": "spd-sl-2017", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "SL", "wp": 16, "gueltig_ab": "2017-03-26", "gueltig_bis": "2022-03-27", "name": "SPD SL Wahlprogramm 2017", "titel": None, "pdf": "spd-sl-2017.pdf", "seiten": 41},
"afd-sl-2022": {"id": "afd-sl-2022", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "SL", "wp": 17, "gueltig_ab": "2022-03-27", "gueltig_bis": None, "name": "AfD Saarland Wahlprogramm 2022", "titel": None, "pdf": "afd-sl-2022.pdf", "seiten": 100},
"cdu-sl-2022": {"id": "cdu-sl-2022", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "SL", "wp": 17, "gueltig_ab": "2022-03-27", "gueltig_bis": None, "name": "CDU Saarland Wahlprogramm 2022", "titel": None, "pdf": "cdu-sl-2022.pdf", "seiten": 100},
"spd-sl-2022": {"id": "spd-sl-2022", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "SL", "wp": 17, "gueltig_ab": "2022-03-27", "gueltig_bis": None, "name": "SPD Saarland Wahlprogramm 2022", "titel": "SPD Saarland Regierungsprogramm 2022", "pdf": "spd-sl-2022.pdf", "seiten": 100},
# ─── wahlprogramm · SN ───
"afd-sn-2014": {"id": "afd-sn-2014", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "SN", "wp": 6, "gueltig_ab": "2014-08-31", "gueltig_bis": "2019-09-01", "name": "AfD SN Wahlprogramm 2014", "titel": None, "pdf": "afd-sn-2014.pdf", "seiten": 26},
"cdu-sn-2014": {"id": "cdu-sn-2014", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "SN", "wp": 6, "gueltig_ab": "2014-08-31", "gueltig_bis": "2019-09-01", "name": "CDU SN Wahlprogramm 2014", "titel": None, "pdf": "cdu-sn-2014.pdf", "seiten": 86},
"gruene-sn-2014": {"id": "gruene-sn-2014", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "SN", "wp": 6, "gueltig_ab": "2014-08-31", "gueltig_bis": "2019-09-01", "name": "Grüne SN Wahlprogramm 2014", "titel": None, "pdf": "gruene-sn-2014.pdf", "seiten": 149},
"linke-sn-2014": {"id": "linke-sn-2014", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "SN", "wp": 6, "gueltig_ab": "2014-08-31", "gueltig_bis": "2019-09-01", "name": "DIE LINKE SN Wahlprogramm 2014", "titel": None, "pdf": "linke-sn-2014.pdf", "seiten": 56},
"spd-sn-2014": {"id": "spd-sn-2014", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "SN", "wp": 6, "gueltig_ab": "2014-08-31", "gueltig_bis": "2019-09-01", "name": "SPD SN Wahlprogramm 2014", "titel": None, "pdf": "spd-sn-2014.pdf", "seiten": 56},
"afd-sn-2019": {"id": "afd-sn-2019", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "SN", "wp": 7, "gueltig_ab": "2019-09-01", "gueltig_bis": "2024-09-01", "name": "AfD SN Wahlprogramm 2019", "titel": None, "pdf": "afd-sn-2019.pdf", "seiten": 76},
"cdu-sn-2019": {"id": "cdu-sn-2019", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "SN", "wp": 7, "gueltig_ab": "2019-09-01", "gueltig_bis": "2024-09-01", "name": "CDU SN Wahlprogramm 2019", "titel": None, "pdf": "cdu-sn-2019.pdf", "seiten": 71},
"gruene-sn-2019": {"id": "gruene-sn-2019", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "SN", "wp": 7, "gueltig_ab": "2019-09-01", "gueltig_bis": "2024-09-01", "name": "Grüne SN Wahlprogramm 2019", "titel": None, "pdf": "gruene-sn-2019.pdf", "seiten": 86},
"linke-sn-2019": {"id": "linke-sn-2019", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "SN", "wp": 7, "gueltig_ab": "2019-09-01", "gueltig_bis": "2024-09-01", "name": "DIE LINKE SN Wahlprogramm 2019", "titel": None, "pdf": "linke-sn-2019.pdf", "seiten": 72},
"spd-sn-2019": {"id": "spd-sn-2019", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "SN", "wp": 7, "gueltig_ab": "2019-09-01", "gueltig_bis": "2024-09-01", "name": "SPD SN Wahlprogramm 2019", "titel": None, "pdf": "spd-sn-2019.pdf", "seiten": 105},
"afd-sn-2024": {"id": "afd-sn-2024", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "SN", "wp": 8, "gueltig_ab": "2024-09-01", "gueltig_bis": None, "name": "AfD Sachsen Wahlprogramm 2024", "titel": None, "pdf": "afd-sn-2024.pdf", "seiten": 100},
"bsw-sn-2024": {"id": "bsw-sn-2024", "typ": "wahlprogramm", "partei": "BSW", "bundesland": "SN", "wp": 8, "gueltig_ab": "2024-09-01", "gueltig_bis": None, "name": "BSW Sachsen Wahlprogramm 2024", "titel": None, "pdf": "bsw-sn-2024.pdf", "seiten": 50},
"cdu-sn-2024": {"id": "cdu-sn-2024", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "SN", "wp": 8, "gueltig_ab": "2024-09-01", "gueltig_bis": None, "name": "CDU Sachsen Wahlprogramm 2024", "titel": None, "pdf": "cdu-sn-2024.pdf", "seiten": 100},
"gruene-sn-2024": {"id": "gruene-sn-2024", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "SN", "wp": 8, "gueltig_ab": "2024-09-01", "gueltig_bis": None, "name": "BÜNDNIS 90/DIE GRÜNEN Sachsen Wahlprogramm 2024", "titel": None, "pdf": "gruene-sn-2024.pdf", "seiten": 100},
"linke-sn-2024": {"id": "linke-sn-2024", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "SN", "wp": 8, "gueltig_ab": "2024-09-01", "gueltig_bis": None, "name": "DIE LINKE Sachsen Wahlprogramm 2024", "titel": None, "pdf": "linke-sn-2024.pdf", "seiten": 100},
"spd-sn-2024": {"id": "spd-sn-2024", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "SN", "wp": 8, "gueltig_ab": "2024-09-01", "gueltig_bis": None, "name": "SPD Sachsen Wahlprogramm 2024", "titel": None, "pdf": "spd-sn-2024.pdf", "seiten": 100},
# ─── wahlprogramm · TH ───
"afd-th-2014": {"id": "afd-th-2014", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "TH", "wp": 6, "gueltig_ab": "2014-09-14", "gueltig_bis": "2019-10-27", "name": "AfD TH Wahlprogramm 2014", "titel": None, "pdf": "afd-th-2014.pdf", "seiten": 32},
"cdu-th-2014": {"id": "cdu-th-2014", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "TH", "wp": 6, "gueltig_ab": "2014-09-14", "gueltig_bis": "2019-10-27", "name": "CDU TH Wahlprogramm 2014", "titel": None, "pdf": "cdu-th-2014.pdf", "seiten": 82},
"fdp-th-2014": {"id": "fdp-th-2014", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "TH", "wp": 6, "gueltig_ab": "2014-09-14", "gueltig_bis": "2019-10-27", "name": "FDP TH Wahlprogramm 2014", "titel": None, "pdf": "fdp-th-2014.pdf", "seiten": 77},
"gruene-th-2014": {"id": "gruene-th-2014", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "TH", "wp": 6, "gueltig_ab": "2014-09-14", "gueltig_bis": "2019-10-27", "name": "Grüne TH Wahlprogramm 2014", "titel": None, "pdf": "gruene-th-2014.pdf", "seiten": 84},
"linke-th-2014": {"id": "linke-th-2014", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "TH", "wp": 6, "gueltig_ab": "2014-09-14", "gueltig_bis": "2019-10-27", "name": "DIE LINKE TH Wahlprogramm 2014", "titel": None, "pdf": "linke-th-2014.pdf", "seiten": 60},
"spd-th-2014": {"id": "spd-th-2014", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "TH", "wp": 6, "gueltig_ab": "2014-09-14", "gueltig_bis": "2019-10-27", "name": "SPD TH Wahlprogramm 2014", "titel": None, "pdf": "spd-th-2014.pdf", "seiten": 52},
"afd-th-2019": {"id": "afd-th-2019", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "TH", "wp": 7, "gueltig_ab": "2019-10-27", "gueltig_bis": "2024-09-01", "name": "AfD TH Wahlprogramm 2019", "titel": None, "pdf": "afd-th-2019.pdf", "seiten": 96},
"cdu-th-2019": {"id": "cdu-th-2019", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "TH", "wp": 7, "gueltig_ab": "2019-10-27", "gueltig_bis": "2024-09-01", "name": "CDU TH Wahlprogramm 2019", "titel": None, "pdf": "cdu-th-2019.pdf", "seiten": 48},
"fdp-th-2019": {"id": "fdp-th-2019", "typ": "wahlprogramm", "partei": "FDP", "bundesland": "TH", "wp": 7, "gueltig_ab": "2019-10-27", "gueltig_bis": "2024-09-01", "name": "FDP TH Wahlprogramm 2019", "titel": None, "pdf": "fdp-th-2019.pdf", "seiten": 86},
"gruene-th-2019": {"id": "gruene-th-2019", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "TH", "wp": 7, "gueltig_ab": "2019-10-27", "gueltig_bis": "2024-09-01", "name": "Grüne TH Wahlprogramm 2019", "titel": None, "pdf": "gruene-th-2019.pdf", "seiten": 83},
"linke-th-2019": {"id": "linke-th-2019", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "TH", "wp": 7, "gueltig_ab": "2019-10-27", "gueltig_bis": "2024-09-01", "name": "DIE LINKE TH Wahlprogramm 2019", "titel": None, "pdf": "linke-th-2019.pdf", "seiten": 105},
"spd-th-2019": {"id": "spd-th-2019", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "TH", "wp": 7, "gueltig_ab": "2019-10-27", "gueltig_bis": "2024-09-01", "name": "SPD TH Wahlprogramm 2019", "titel": None, "pdf": "spd-th-2019.pdf", "seiten": 32},
"afd-th-2024": {"id": "afd-th-2024", "typ": "wahlprogramm", "partei": "AfD", "bundesland": "TH", "wp": 8, "gueltig_ab": "2024-09-01", "gueltig_bis": None, "name": "AfD Thüringen Wahlprogramm 2024", "titel": "AfD Thüringen Landtagswahlprogramm 2024", "pdf": "afd-th-2024.pdf", "seiten": 100},
"bsw-th-2024": {"id": "bsw-th-2024", "typ": "wahlprogramm", "partei": "BSW", "bundesland": "TH", "wp": 8, "gueltig_ab": "2024-09-01", "gueltig_bis": None, "name": "BSW Thüringen Wahlprogramm 2024", "titel": None, "pdf": "bsw-th-2024.pdf", "seiten": 50},
"cdu-th-2024": {"id": "cdu-th-2024", "typ": "wahlprogramm", "partei": "CDU", "bundesland": "TH", "wp": 8, "gueltig_ab": "2024-09-01", "gueltig_bis": None, "name": "CDU Thüringen Wahlprogramm 2024", "titel": "Wahlprogramm der CDU Thüringen 2024", "pdf": "cdu-th-2024.pdf", "seiten": 83},
"linke-th-2024": {"id": "linke-th-2024", "typ": "wahlprogramm", "partei": "LINKE", "bundesland": "TH", "wp": 8, "gueltig_ab": "2024-09-01", "gueltig_bis": None, "name": "DIE LINKE Thüringen Wahlprogramm 2024", "titel": None, "pdf": "linke-th-2024.pdf", "seiten": 100},
"spd-th-2024": {"id": "spd-th-2024", "typ": "wahlprogramm", "partei": "SPD", "bundesland": "TH", "wp": 8, "gueltig_ab": "2024-09-01", "gueltig_bis": None, "name": "SPD Thüringen Wahlprogramm 2024", "titel": None, "pdf": "spd-th-2024.pdf", "seiten": 100},
}
# ─────────────────────────────────────────────────────────────────────────────
# Helper-API
# ─────────────────────────────────────────────────────────────────────────────
def _date_in_range(datum: str, ab: str, bis: Optional[str]) -> bool:
"""Liefert True, wenn ``datum`` (ISO) in [ab, bis) liegt."""
if datum < ab:
return False
if bis is None:
return True
return datum < bis
def get_programm(programm_id: str) -> Optional[Programm]:
"""Lookup nach ID."""
return PROGRAMME.get(programm_id)
def get_programm_by_pdf(pdf: str) -> Optional[Programm]:
"""Reverse-Lookup über pdf-Dateinamen."""
for prog in PROGRAMME.values():
if prog.get("pdf") == pdf:
return prog
return None
def aktuelles_wahlprogramm(bundesland: str, partei: str) -> Optional[Programm]:
"""Aktuell gültiges Wahlprogramm einer Partei in einem Bundesland.
Es kann nur eines aktuell sein (gueltig_bis=None und typ=wahlprogramm).
"""
for prog in PROGRAMME.values():
if (
prog.get("typ") == "wahlprogramm"
and prog.get("bundesland") == bundesland
and prog.get("partei") == partei
and prog.get("gueltig_bis") is None
):
return prog
return None
def wahlprogramm_zum_zeitpunkt(
bundesland: str, partei: str, datum: str,
) -> Optional[Programm]:
"""Welches Wahlprogramm dieser Partei galt im Bundesland am gegebenen Datum?
``datum`` ist ISO-Datum. Es wird das Programm zurückgegeben, dessen
Geltungszeitraum [gueltig_ab, gueltig_bis) das Datum enthält.
"""
for prog in PROGRAMME.values():
if (
prog.get("typ") == "wahlprogramm"
and prog.get("bundesland") == bundesland
and prog.get("partei") == partei
and _date_in_range(datum, prog["gueltig_ab"], prog.get("gueltig_bis"))
):
return prog
return None
def grundsatzprogramm_zum_zeitpunkt(
partei: str,
datum: str,
bundesland: Optional[str] = None,
) -> Optional[Programm]:
"""Welches Grundsatzprogramm der Partei galt am gegebenen Datum?
Wenn ``bundesland`` gesetzt ist, wird zuerst nach einem
Landes-Grundsatzprogramm gesucht; falls keines existiert, fällt die
Suche auf das Bundes-Grundsatzprogramm zurück.
"""
if bundesland is not None:
for prog in PROGRAMME.values():
if (
prog.get("typ") == "grundsatzprogramm-land"
and prog.get("partei") == partei
and prog.get("bundesland") == bundesland
and _date_in_range(datum, prog["gueltig_ab"], prog.get("gueltig_bis"))
):
return prog
for prog in PROGRAMME.values():
if (
prog.get("typ") == "grundsatzprogramm-bund"
and prog.get("partei") == partei
and _date_in_range(datum, prog["gueltig_ab"], prog.get("gueltig_bis"))
):
return prog
return None
def parteien_mit_wahlprogramm(bundesland: str) -> list[str]:
"""Parteien mit einem aktuell gültigen Wahlprogramm in dem Bundesland.
Reihenfolge: nach Eintrags-Reihenfolge in PROGRAMME (deterministic).
"""
seen: list[str] = []
for prog in PROGRAMME.values():
if (
prog.get("typ") == "wahlprogramm"
and prog.get("bundesland") == bundesland
and prog.get("gueltig_bis") is None
):
partei = prog["partei"]
if partei not in seen:
seen.append(partei)
return seen
def alle_versionen(bundesland: str, partei: str) -> list[Programm]:
"""Alle Wahlprogramm-Versionen dieser Partei im Bundesland, sortiert
nach ``gueltig_ab`` aufsteigend."""
versions = [
prog for prog in PROGRAMME.values()
if prog.get("typ") == "wahlprogramm"
and prog.get("bundesland") == bundesland
and prog.get("partei") == partei
]
versions.sort(key=lambda p: p["gueltig_ab"])
return versions
def all_programme() -> list[Programm]:
"""Alle eingetragenen Programme."""
return list(PROGRAMME.values())