diff --git a/app/embeddings.py b/app/embeddings.py index 6030f68..5d52ccc 100644 --- a/app/embeddings.py +++ b/app/embeddings.py @@ -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"}, diff --git a/app/programme.py b/app/programme.py index b430751..658b753 100644 --- a/app/programme.py +++ b/app/programme.py @@ -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, diff --git a/app/static/referenzen/cdu-grundsatz-lsa-2023.pdf b/app/static/referenzen/cdu-grundsatz-lsa-2023.pdf new file mode 100644 index 0000000..5448ee9 Binary files /dev/null and b/app/static/referenzen/cdu-grundsatz-lsa-2023.pdf differ diff --git a/app/static/referenzen/cdu-grundsatz-nrw-2015.pdf b/app/static/referenzen/cdu-grundsatz-nrw-2015.pdf new file mode 100644 index 0000000..4ebdfa6 Binary files /dev/null and b/app/static/referenzen/cdu-grundsatz-nrw-2015.pdf differ diff --git a/app/static/referenzen/cdu-grundsatz-sn-2023.pdf b/app/static/referenzen/cdu-grundsatz-sn-2023.pdf new file mode 100644 index 0000000..d80923c Binary files /dev/null and b/app/static/referenzen/cdu-grundsatz-sn-2023.pdf differ diff --git a/app/static/referenzen/csu-grundsatz-2023.pdf b/app/static/referenzen/csu-grundsatz-2023.pdf new file mode 100644 index 0000000..3fd2e44 Binary files /dev/null and b/app/static/referenzen/csu-grundsatz-2023.pdf differ diff --git a/app/static/referenzen/fw-grundsatz.pdf b/app/static/referenzen/fw-grundsatz.pdf new file mode 100644 index 0000000..e1a34aa Binary files /dev/null and b/app/static/referenzen/fw-grundsatz.pdf differ diff --git a/app/static/referenzen/ssw-grundsatz-sh-2016.pdf b/app/static/referenzen/ssw-grundsatz-sh-2016.pdf new file mode 100644 index 0000000..9690048 Binary files /dev/null and b/app/static/referenzen/ssw-grundsatz-sh-2016.pdf differ diff --git a/app/wahlprogramm-links.yaml b/app/wahlprogramm-links.yaml index de71d6e..dd0be09 100644 --- a/app/wahlprogramm-links.yaml +++ b/app/wahlprogramm-links.yaml @@ -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/.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" diff --git a/app/wahlprogramm-shas.lock.json b/app/wahlprogramm-shas.lock.json index ce534a9..dccfa84 100644 --- a/app/wahlprogramm-shas.lock.json +++ b/app/wahlprogramm-shas.lock.json @@ -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" }