Fehlende Wahlprogramme automatisch erkennen und beschaffen #128

Closed
opened 2026-04-12 15:21:39 +02:00 by tobias · 1 comment
Owner

Kontext

Wenn ein Antrag einer Partei bewertet wird, für die im jeweiligen Bundesland noch kein Wahl-/Parteiprogramm indexiert ist, fehlen die Programm-Zitate in der Bewertung. Das macht die Wahlprogramm-Treue-Analyse unvollständig.

Ziel

Automatische Erkennung + Beschaffung fehlender Wahlprogramme:

  1. Beim Analysieren: prüfe ob für jede Fraktion des Antrags ein Wahlprogramm im aktuellen BL existiert
  2. Wenn nicht: logge eine Warnung UND versuche das Programm automatisch zu beschaffen:
    • abgeordnetenwatch.de hat PDFs für viele Parteien/BL
    • Partei-Websites
    • Bundeszentrale für politische Bildung
  3. Wenn gefunden: herunterladen nach app/static/referenzen/, in PROGRAMME-Dict registrieren, indexieren

Akzeptanzkriterien

  • check_missing_programmes(bundesland, fraktionen) → Liste fehlender Programme
  • Warnung im Assessment-Ergebnis wenn Programme fehlen
  • Auto-Download-Versuch für fehlende Programme (mit Logging)
  • UI zeigt an wenn Wahlprogramm-Treue unvollständig weil Programm fehlt
## Kontext Wenn ein Antrag einer Partei bewertet wird, für die im jeweiligen Bundesland noch kein Wahl-/Parteiprogramm indexiert ist, fehlen die Programm-Zitate in der Bewertung. Das macht die Wahlprogramm-Treue-Analyse unvollständig. ## Ziel Automatische Erkennung + Beschaffung fehlender Wahlprogramme: 1. **Beim Analysieren**: prüfe ob für jede Fraktion des Antrags ein Wahlprogramm im aktuellen BL existiert 2. **Wenn nicht**: logge eine Warnung UND versuche das Programm automatisch zu beschaffen: - abgeordnetenwatch.de hat PDFs für viele Parteien/BL - Partei-Websites - Bundeszentrale für politische Bildung 3. **Wenn gefunden**: herunterladen nach `app/static/referenzen/`, in `PROGRAMME`-Dict registrieren, indexieren ## Akzeptanzkriterien - [ ] `check_missing_programmes(bundesland, fraktionen)` → Liste fehlender Programme - [ ] Warnung im Assessment-Ergebnis wenn Programme fehlen - [ ] Auto-Download-Versuch für fehlende Programme (mit Logging) - [ ] UI zeigt an wenn Wahlprogramm-Treue unvollständig weil Programm fehlt
Author
Owner

Umgesetzt + deployed.

Was live ist

  • Neues Modul app/wahlprogramm_check.pycheck_missing_programmes(bundesland, fraktionen) prüft gegen WAHLPROGRAMME-Registry, gibt Liste der Fraktionen ohne indexiertes Wahlprogramm zurück. Basis: BUNDESLAENDER[bl].landtagsfraktionen (vollständige Soll-Liste, nicht nur Antrags-Fraktionen)
  • Modell-Feld fehlende_programme: list[str] auf Assessment (alias fehlendeProgramme)
  • DB-Migration — ALTER TABLE assessments ADD COLUMN fehlende_programme TEXT (verifiziert auf Prod: Schema enthält Spalte, 71 bestehende Assessments intakt)
  • Analyzer-Hook — nach LLM-Call wird das Feld gesetzt; bei Fund zusätzlich Warning ins Log
  • UI — Hinweis-Box oberhalb der Programmtreue-Sektion in der Detail-View, erscheint nur wenn Fraktionen ungepflegt sind
  • Tests — 7 neue Tests in tests/test_wahlprogramm_check.py (Unit-Suite: 284→291 passed)

Auto-Download bewusst ausgeklammert

Grund: vergangene Erfahrung (CDU BE 2023 → 2026-Entwurf stiller Tausch bei abgeordnetenwatch) zeigt, dass Quell-Seiten PDFs ersetzen, ohne dass URLs wechseln. Ein Auto-Indexer würde das unbemerkt einschleusen.

Vorschlag für Folge-Issue #128b (kann ich anlegen, wenn du es willst):

Admin-Seite oder CLI-Skript, das Ergebnisse von check_missing_programmes() aggregiert und pro fehlendem Eintrag Kandidaten-URL aus kuratierter wahlprogramm-links.yaml zeigt. Maintainer bestätigt manuell → Skript lädt → prüft SHA-256 gegen gespeicherten Fingerprint → trägt in WAHLPROGRAMME ein. Kein Auto-Trigger, kein Cron.

Schließe dieses Issue (Core-Detection erledigt). Sag Bescheid, wenn der Follow-up als eigenes Issue angelegt werden soll.

Umgesetzt + deployed. ## Was live ist - **Neues Modul `app/wahlprogramm_check.py`** — `check_missing_programmes(bundesland, fraktionen)` prüft gegen `WAHLPROGRAMME`-Registry, gibt Liste der Fraktionen ohne indexiertes Wahlprogramm zurück. Basis: `BUNDESLAENDER[bl].landtagsfraktionen` (vollständige Soll-Liste, nicht nur Antrags-Fraktionen) - **Modell-Feld** `fehlende_programme: list[str]` auf `Assessment` (alias `fehlendeProgramme`) - **DB-Migration** — ALTER TABLE `assessments ADD COLUMN fehlende_programme TEXT` (verifiziert auf Prod: Schema enthält Spalte, 71 bestehende Assessments intakt) - **Analyzer-Hook** — nach LLM-Call wird das Feld gesetzt; bei Fund zusätzlich Warning ins Log - **UI** — Hinweis-Box oberhalb der Programmtreue-Sektion in der Detail-View, erscheint nur wenn Fraktionen ungepflegt sind - **Tests** — 7 neue Tests in `tests/test_wahlprogramm_check.py` (Unit-Suite: 284→291 passed) ## Auto-Download bewusst ausgeklammert Grund: vergangene Erfahrung (CDU BE 2023 → 2026-Entwurf stiller Tausch bei abgeordnetenwatch) zeigt, dass Quell-Seiten PDFs ersetzen, ohne dass URLs wechseln. Ein Auto-Indexer würde das unbemerkt einschleusen. **Vorschlag für Folge-Issue #128b** (kann ich anlegen, wenn du es willst): > Admin-Seite oder CLI-Skript, das Ergebnisse von `check_missing_programmes()` aggregiert und pro fehlendem Eintrag Kandidaten-URL aus kuratierter `wahlprogramm-links.yaml` zeigt. Maintainer bestätigt manuell → Skript lädt → prüft SHA-256 gegen gespeicherten Fingerprint → trägt in `WAHLPROGRAMME` ein. Kein Auto-Trigger, kein Cron. Schließe dieses Issue (Core-Detection erledigt). Sag Bescheid, wenn der Follow-up als eigenes Issue angelegt werden soll.
Sign in to join this conversation.
No description provided.