feat: 6 Grundsatzprogramme + Landesgrundsatzprogramme indiziert

Neu in embeddings.PROGRAMME (typ=parteiprogramm mit gueltig_ab):
- csu-grundsatz: CSU "Für ein neues Miteinander" (2023-05-06, 125 chunks)
  ersetzt das bisher indizierte CSU 2016-Programm logisch
- cdu-grundsatz-nrw: CDU NRW "Aufstieg, Sicherheit, Perspektive"
  (2015-06-13, Landesgrundsatzprogramm, 127 chunks)
- cdu-grundsatz-sn: CDU Sachsen "Zukunftsplan für Sachsen"
  (2023-11-20, Landesgrundsatzprogramm, 52 chunks)
- cdu-grundsatz-lsa: CDU Sachsen-Anhalt "Unsere Verantwortung. Unsere
  Zukunft." (2023-09-30, Landesgrundsatzprogramm, 74 chunks)
- ssw-grundsatz: SSW Rahmenprogramm (2016-04-16, Landesgrundsatzprogramm
  für Schleswig-Holstein, 65 chunks)
- fw-grundsatz: FREIE WAEHLER Bundesgrundsatzprogramm (Stand 09/2025;
  FW nicht im Bundestag, gilt fuer FW Bayern + FW RLP, 43 chunks)

programme.py:
- _migrate_from_legacy() unterscheidet jetzt grundsatzprogramm-bund
  (bundesland=None) und grundsatzprogramm-land (bundesland gesetzt).
- _ADDITIONAL_PROGRAMME-Slot vereinfacht — alle Daten leben in
  embeddings.PROGRAMME.

Auf gwoe-antragspruefer-dev indiziert (text-embedding-v4):
486 neue Chunks, 0 failed. wahlprogramm-shas.lock.json + -links.yaml
gepinnt mit allen 6 SHA-256-Hashes.

Test-Suite: 88 grün (test_legislaturen + test_wahlprogramme + test_embeddings).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dotty Dotter 2026-05-08 00:30:06 +02:00
parent 4e7f7dac25
commit a80ac17218
10 changed files with 121 additions and 13 deletions

View File

@ -277,6 +277,66 @@ PROGRAMME = {
"gueltig_ab": "2011-10-23", # Bundesparteitag Erfurt
"gueltig_bis": None,
},
# CSU Grundsatzprogramm 2023 — beschlossen 2023-05-06 in Nürnberg.
# CSU als reine Landespartei: bundesland=BY, das Programm ersetzt zugleich
# ein Bundes-Grundsatz für die Partei (CSU sitzt im Bundestag).
"csu-grundsatz": {
"name": "CSU Grundsatzprogramm 2023",
"typ": "parteiprogramm",
"partei": "CSU",
"bundesland": "BY",
"pdf": "csu-grundsatz-2023.pdf",
"gueltig_ab": "2023-05-06",
"gueltig_bis": None,
},
# Landesgrundsatzprogramme — typ=parteiprogramm mit bundesland-Feld.
"cdu-grundsatz-nrw": {
"name": "CDU NRW Grundsatzprogramm 2015",
"typ": "parteiprogramm",
"partei": "CDU",
"bundesland": "NRW",
"pdf": "cdu-grundsatz-nrw-2015.pdf",
"gueltig_ab": "2015-06-13", # 37. Landesparteitag Essen
"gueltig_bis": None,
},
"cdu-grundsatz-sn": {
"name": "CDU Sachsen Grundsatzprogramm 2023",
"typ": "parteiprogramm",
"partei": "CDU",
"bundesland": "SN",
"pdf": "cdu-grundsatz-sn-2023.pdf",
"gueltig_ab": "2023-11-20", # 38. Landesparteitag Chemnitz
"gueltig_bis": None,
},
"cdu-grundsatz-lsa": {
"name": "CDU Sachsen-Anhalt Grundsatzprogramm 2023",
"typ": "parteiprogramm",
"partei": "CDU",
"bundesland": "LSA",
"pdf": "cdu-grundsatz-lsa-2023.pdf",
"gueltig_ab": "2023-09-30", # 32. Landesparteitag Magdeburg
"gueltig_bis": None,
},
"ssw-grundsatz": {
"name": "SSW Rahmenprogramm 2016",
"typ": "parteiprogramm",
"partei": "SSW",
"bundesland": "SH",
"pdf": "ssw-grundsatz-sh-2016.pdf",
"gueltig_ab": "2016-04-16", # außerordentlicher Parteitag Harrislee
"gueltig_bis": None,
},
# FREIE WÄHLER Bundesgrundsatzprogramm — die Partei ist nicht im
# Bundestag, das Programm gilt aber bundesweit für FW-Landesverbände
# (BY in Regierung, RP in Opposition).
"fw-grundsatz": {
"name": "FREIE WÄHLER Bundesgrundsatzprogramm",
"typ": "parteiprogramm",
"partei": "FREIE WÄHLER",
"pdf": "fw-grundsatz.pdf",
"gueltig_ab": "2012-02-25", # Bundesvereinigungs-Gründung als Partei; mehrfach fortgeschrieben (Stand 09/2025)
"gueltig_bis": None,
},
# Bayern — LTW 08.10.2023, WP 19
"csu-by-2023": {"name": "CSU Bayernplan 2023", "typ": "wahlprogramm", "partei": "CSU", "bundesland": "BY", "pdf": "csu-by-2023.pdf"},
"gruene-by-2023": {"name": "Grüne Bayern Regierungsprogramm 2023", "typ": "wahlprogramm", "partei": "GRÜNE", "bundesland": "BY", "pdf": "gruene-by-2023.pdf"},

View File

@ -204,18 +204,22 @@ def _register(prog: Programm) -> None:
# ─────────────────────────────────────────────────────────────────────────────
# Zusätzliche Programme — historische Vorgänger und Landesgrundsatzprogramme,
# die nicht aus WAHLPROGRAMME/embeddings.PROGRAMME migriert werden können.
#
# PDFs werden separat beschafft und hier eingetragen sobald verfügbar.
# Einträge ohne existierende PDF-Datei können aktiv sein (z.B. für reine
# Metadaten-Anzeige), aber sie werden in der Embeddings-Indizierung
# übersprungen und ``test_every_registered_pdf_exists`` filtert sie via
# ``hinweis="pdf-pending"`` Marker aus.
# Zusätzliche Programme — Reserve für Programme, die NICHT aus
# embeddings.PROGRAMME oder WAHLPROGRAMME migriert werden können (z.B.
# zukünftig: historische Vorgänger-Wahlprogramme aus früheren Legislaturen,
# falls deren PDFs eingebunden werden ohne dass embeddings.PROGRAMME sie
# kennt).
# ─────────────────────────────────────────────────────────────────────────────
_ADDITIONAL_PROGRAMME: list[Programm] = [
_ADDITIONAL_PROGRAMME: list[Programm] = []
# Historische Skelett-Einträge (PDFs jetzt in embeddings.PROGRAMME) —
# wurden in einer früheren Iteration manuell als pdf-pending markiert,
# bevor die Beschaffung lief. Aktuelle Daten leben in embeddings.PROGRAMME
# und werden über _migrate_from_legacy() automatisch übernommen.
_ARCHIVED_SKELETONS: list[Programm] = [
# ─── CSU Bayern: aktualisiertes Grundsatzprogramm 2023 ───────────────
# "Die Ordnung 2016" (in embeddings.PROGRAMME als Bundes-Grundsatz)
# wird durch das 2023er ersetzt — wir tragen 2023 als aktuelles ein und
@ -381,19 +385,23 @@ def _migrate_from_legacy() -> None:
if pid not in PROGRAMME:
PROGRAMME[pid] = prog
# Schritt 2: Grundsatzprogramme aus embeddings.PROGRAMME
# Schritt 2: Grundsatzprogramme aus embeddings.PROGRAMME.
# typ=parteiprogramm: ohne ``bundesland`` → Bundes-Grundsatz, mit
# ``bundesland`` → Landes-Grundsatzprogramm. Beide funktional gleich,
# nur unterscheidet sich der Geltungsbereich.
for pid, info in _EMB_PROGRAMME.items():
if info.get("typ") != "parteiprogramm":
continue # Wahlprogramme schon in Schritt 1 (oder werden dort gepflegt)
continue # Wahlprogramme schon in Schritt 1
if pid in PROGRAMME:
continue
bl = info.get("bundesland")
prog2: Programm = {
"id": pid,
"titel": info.get("name", ""),
"name": info.get("name", ""),
"typ": "grundsatzprogramm-bund",
"typ": "grundsatzprogramm-land" if bl else "grundsatzprogramm-bund",
"partei": info.get("partei", ""),
"bundesland": None,
"bundesland": bl,
"beschluss": info.get("gueltig_ab"),
"wahl": None,
"wp": None,

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -82,3 +82,37 @@ BUND:
titel: "Unser Land verdient mehr — Wahlprogramm Bündnis Sahra Wagenknecht zur Bundestagswahl 2025"
jahr: 2025
sha256: "bd4640aab7c6ff214becc7e44bc6dc67539ebd80992bb39fb8853839d3a7ccda"
# Grundsatzprogramme (Bundes- und Landesebene). Recherche 2026-05-07.
# Liegen unter `app/static/referenzen/<datei>.pdf`; URLs hier zur Provenance-Doku.
GRUNDSATZ:
CSU:
- url: https://www.csu.de/common/download/CSU_Grundsatzprogramm_2023.pdf
titel: "Für ein neues Miteinander — Grundsatzprogramm der CSU"
jahr: 2023
sha256: "a2a024e40d7d0d7dd75bf133ca95486b7115b24307a445d215fc7be397626071"
CDU_NRW:
- url: https://www.cdu-kreis-soest.de/image/inhalte/file/grundsatzprogramm_cdu_nrw.pdf
titel: "Aufstieg, Sicherheit, Perspektive — Das Nordrhein-Westfalen-Programm der CDU NRW"
jahr: 2015
sha256: "379e7f33854f3fabcb1337b53e763ab58bb8962ae16ef39cf102243ddfe9db1f"
CDU_SN:
- url: https://www.cdu-sachsen.de/Dateien/zukunftsplan-fuer-sachsen/17504452
titel: "Zukunftsplan für Sachsen — Grundsatzprogramm der CDU Sachsen (38. Landesparteitag Chemnitz)"
jahr: 2023
sha256: "fe203bcad9bef4d037820eab3f8d19f3f30db4cd801576aff4ab170699409721"
CDU_LSA:
- url: https://www.cdulsa.de/sites/www.cdulsa.de/files/publikationen/grundsatzprogrammcdulsa.pdf
titel: "Sachsen-Anhalt. Unsere Verantwortung. Unsere Zukunft. — Grundsatzprogramm der CDU Sachsen-Anhalt"
jahr: 2023
sha256: "d2fc731319ececdb7dc97d34266311dcbf7f3f42c2184424bb722c7f6046e107"
SSW:
- url: https://www.ssw.de/fileadmin/user_upload/daten/allgemein/Informationsmaterial/SSWRammeprogram.pdf
titel: "Rahmenprogramm des Südschleswigschen Wählerverbandes (SSW)"
jahr: 2016
sha256: "f4530674c7898365eed391b0aef89b89760e0afa6a6e1a5f85dab0eeb797e8e5"
FW:
- url: https://wp.freiewaehler.eu/wp-content/uploads/2025/09/Grundsatzprogramm.pdf
titel: "Bundesgrundsatzprogramm der FREIEN WÄHLER"
jahr: 2025
sha256: "7b671900eea315ab2c0a396f2b1583f84d48e3b7a5ae60286ae31e4f60a1e1cd"

View File

@ -17,6 +17,9 @@
"cdu-be-2023.pdf": "813d0d08ac8ce7381e9a7b9472e0616aaf684b1632c9d4a7f4e940a33455f29a",
"cdu-bund-2025.pdf": "08f751316e731b77aa2f18090b8695d88268f2942481399f37a3a47317361795",
"cdu-bw-2021.pdf": "a92c104c456ce06d8bad6649071551e0ec0d525a1bc0bc31e9fa6a0566da4db0",
"cdu-grundsatz-lsa-2023.pdf": "d2fc731319ececdb7dc97d34266311dcbf7f3f42c2184424bb722c7f6046e107",
"cdu-grundsatz-nrw-2015.pdf": "379e7f33854f3fabcb1337b53e763ab58bb8962ae16ef39cf102243ddfe9db1f",
"cdu-grundsatz-sn-2023.pdf": "fe203bcad9bef4d037820eab3f8d19f3f30db4cd801576aff4ab170699409721",
"cdu-grundsatzprogramm.pdf": "4b4bebd40ff8d905eb3ad00975cbbf0990810c21977e2d560e3d73f2571b181d",
"cdu-hh-2025.pdf": "8d29e514b8bce5c2f3f497dc5b97f6f8ab95a7bdbf619abf258e9582d57f2dbd",
"cdu-lsa-2021.pdf": "63b6cf42ce97834d5d105fb7b8cc7fb7a2aa96928d4153bd3a5858c196ee0797",
@ -26,6 +29,7 @@
"cdu-sh-2022.pdf": "39b79a22e904b300cf1bbc25752b618195683c90c31e6b10c3bc0e8408aa6a1a",
"cdu-th-2024.pdf": "cde8d2222bd8ce04aee24883a38dab8a30f5d60cda115b8bb2f43ceffa08b730",
"csu-bund-2025.pdf": "c07fe4b65404be9b4c1b99ec9c970567a96a27b86a1154754a41e9ef31d0c04f",
"csu-grundsatz-2023.pdf": "a2a024e40d7d0d7dd75bf133ca95486b7115b24307a445d215fc7be397626071",
"fdp-bund-2025.pdf": "a549dcb318f60fdd8a257fb2e68745d1df50151f4914910e2afde20c3b0fa039",
"fdp-bw-2021.pdf": "bdcbb1b2e5748922c8347bd69ea6f81c954fd02cd220d448400f9a5a86ce914b",
"fdp-grundsatzprogramm.pdf": "9abb6570c3505271b1f43db2a8340c05b970a7934d0c1b2542403025affe2b13",
@ -34,6 +38,7 @@
"fdp-nrw-2022.pdf": "576b42a26c29ca5d8b7469d417ae709c8d0699aed5195d4ca16dd696dcff8bea",
"fdp-rp-2021.pdf": "fba792d8d43842f33ae8f0aa94b0d4e50838908c217402b4c5cb4707f958e1ae",
"fdp-sh-2022.pdf": "4c49da411bb3c8e008f4b57dd20dc005104515b56056ff746cf5403529728d09",
"fw-grundsatz.pdf": "7b671900eea315ab2c0a396f2b1583f84d48e3b7a5ae60286ae31e4f60a1e1cd",
"fw-rp-2021.pdf": "c7f26d553f24c9d9fcf1c2edb1dbe558edc1ca65af68b289a1541e77f7bbeea8",
"gruene-be-2023.pdf": "2b14a319cdcd2ca022399254ea285714f872eddd166f3f537861eeb2dc5ade80",
"gruene-bund-2025.pdf": "0d1f7530ddecadc8d98db15b2189f3ee4ddcccd9619df825703911f1aac18dda",
@ -64,6 +69,7 @@
"spd-rp-2021.pdf": "13966815b8870b30e3480673437634fb90882bf5410c652694a6579492e32707",
"spd-sh-2022.pdf": "3acd3ed6c42a0e0a8f49abd76610b536c7d5fdf13fcc4499e391bc9b1a3d0f0f",
"spd-th-2024.pdf": "dbd96a51134c8c13dabe18807fe233e9a43f45c2fefeead2ea500ecc3d63de6b",
"ssw-grundsatz-sh-2016.pdf": "f4530674c7898365eed391b0aef89b89760e0afa6a6e1a5f85dab0eeb797e8e5",
"ssw-sh-2022.pdf": "3020762a1c33a09bc51f7fa49ede1c2d5dd7574ea74ef262076e59d5e3a9a41b",
"test.pdf": "71630b3ce93b3fd91aefa095908c8070d07e0eca8ad3071c60ae7375da2e7e17"
}