Historische Wahl- und Grundsatzprogramme indizieren — Bewertung relativ zum Antragsdatum #186

Closed
opened 2026-05-07 10:58:27 +02:00 by tobias · 1 comment
Owner

Problem

Die GWÖ-Bewertung „passt der Antrag zum Wahlprogramm der Fraktion?" verwendet heute zwingend das aktuelle Wahlprogramm jeder Partei (z.B. NRW CDU 2022 für alle CDU-Anträge in NRW). Das ist sachlich falsch für Anträge aus älteren Wahlperioden:

  • Ein NRW-CDU-Antrag aus 2018 (17. WP) sollte gegen das CDU-NRW-Programm 2017 bewertet werden, nicht gegen das von 2022 (18. WP).
  • Ein Bundestagsantrag der SPD aus 2019 sollte gegen das SPD-Bundestagsprogramm 2017 bewertet werden, nicht gegen das von 2025.
  • Bei Grundsatzprogrammen analog: das aktuelle Hamburger Programm (SPD) ist von 2007, davor 1989. Anträge vor 2007 müssten gegen 1989 bewertet werden.

Zitat aus ~/.claude/projects/-Users-dotty-...gwoe.../memory/feedback_legislaturprogramme.md: „Programm der jeweiligen WP verwenden, keine neueren Entwürfe als Ersatz" — Prinzip ist also gesetzt, aber operativ noch nicht umgesetzt.

Aufgabe

  1. Sammlung historischer Programme: Wahlprogramme + Grundsatzprogramme aller großen Parteien (CDU, SPD, GRÜNE, FDP, LINKE, AfD) für jede Wahlperiode in den 16 Bundesländern + Bundestag, soweit beschaffbar.
    • Historische Programme oft nur als Sekundärquellen verfügbar (Parteiarchive, Wikipedia, Wikisource, archive.org). Recherche pro Partei × WP.
    • Mindest-Tiefe: zwei Wahlperioden zurück (für aktuelle Antrags-DB ausreichend).
  2. Indizierung im bestehenden Embedding-System (app/embeddings.py):
    • Schema-Erweiterung: pro Programm-Eintrag gueltig_von + gueltig_bis (Datumsbereich) statt nur Wahlperiode.
    • Embedding-Reindex der neuen Dokumente (model = aktiver EMBEDDING_MODEL_WRITE).
  3. Bewertungs-Pfad anpassen: in analyzer.py / qwen_bewerter.py beim Match Antrag → Wahlprogramm das datum-Feld der Drucksache nutzen, um das passende Programm pro Partei zu wählen (Lookup nach gueltig_von ≤ datum ≤ gueltig_bis).
  4. Fallback bei fehlenden historischen Programmen: wenn für (Partei, Datum) kein Programm existiert, dokumentieren via fehlende_programme-Feld (heute schon vorhanden) statt stillschweigend das aktuelle nehmen.

Aufwand (AI-Zeit)

  • Recherche pro Programm-Datei: kurz pro Datei × ~50-80 Dateien = mehrere Stunden
  • Schema-Migration: kurz
  • Indizierung: mittel (Re-Embed dauert)
  • Bewertungs-Pfad-Anpassung + Tests: mittel

Hängt zusammen mit

  • Bestehende app/wahlperioden.pywahlperiode_for(datum, bl) ist die Lookup-Funktion, die schon korrekt die historische WP zum Antragsdatum liefert. Dieses Issue erweitert die Lücke vom „WP korrekt bestimmt" zu „passendes Programm aus der WP geladen".
  • Embedding-Modell-Migration (#123) — sollte abgeschlossen sein bevor man großen Reindex anstößt; Stand heute v4 aktiv.
  • ADR 0001 (Citation-Binding) — Zitat-Match-Algorithmus muss mit historischen Programmen genauso wie heute funktionieren, weil Zitate auf Chunk-IDs binden.

Out of Scope

  • Programme von Splitter- oder Regionalparteien (BÜNDNIS Deutschland, Volt etc.) — separate Frage.
  • Fortlaufender Auto-Refresh bei neuen Wahlprogramm-Releases — manuell wie heute reicht.
## Problem Die GWÖ-Bewertung „passt der Antrag zum Wahlprogramm der Fraktion?" verwendet heute zwingend das **aktuelle** Wahlprogramm jeder Partei (z.B. NRW CDU 2022 für alle CDU-Anträge in NRW). Das ist sachlich falsch für Anträge aus älteren Wahlperioden: - Ein NRW-CDU-Antrag aus 2018 (17. WP) sollte gegen das CDU-NRW-Programm 2017 bewertet werden, **nicht** gegen das von 2022 (18. WP). - Ein Bundestagsantrag der SPD aus 2019 sollte gegen das SPD-Bundestagsprogramm 2017 bewertet werden, nicht gegen das von 2025. - Bei Grundsatzprogrammen analog: das aktuelle Hamburger Programm (SPD) ist von 2007, davor 1989. Anträge vor 2007 müssten gegen 1989 bewertet werden. Zitat aus `~/.claude/projects/-Users-dotty-...gwoe.../memory/feedback_legislaturprogramme.md`: *„Programm der jeweiligen WP verwenden, keine neueren Entwürfe als Ersatz"* — Prinzip ist also gesetzt, aber operativ noch nicht umgesetzt. ## Aufgabe 1. **Sammlung historischer Programme**: Wahlprogramme + Grundsatzprogramme aller großen Parteien (CDU, SPD, GRÜNE, FDP, LINKE, AfD) für jede Wahlperiode in den 16 Bundesländern + Bundestag, soweit beschaffbar. - Historische Programme oft nur als Sekundärquellen verfügbar (Parteiarchive, Wikipedia, Wikisource, archive.org). Recherche pro Partei × WP. - Mindest-Tiefe: zwei Wahlperioden zurück (für aktuelle Antrags-DB ausreichend). 2. **Indizierung im bestehenden Embedding-System** (`app/embeddings.py`): - Schema-Erweiterung: pro Programm-Eintrag `gueltig_von` + `gueltig_bis` (Datumsbereich) statt nur Wahlperiode. - Embedding-Reindex der neuen Dokumente (model = aktiver `EMBEDDING_MODEL_WRITE`). 3. **Bewertungs-Pfad anpassen**: in `analyzer.py` / `qwen_bewerter.py` beim Match `Antrag → Wahlprogramm` das `datum`-Feld der Drucksache nutzen, um das **passende** Programm pro Partei zu wählen (Lookup nach `gueltig_von ≤ datum ≤ gueltig_bis`). 4. **Fallback bei fehlenden historischen Programmen**: wenn für `(Partei, Datum)` kein Programm existiert, dokumentieren via `fehlende_programme`-Feld (heute schon vorhanden) statt stillschweigend das aktuelle nehmen. ## Aufwand (AI-Zeit) - Recherche pro Programm-Datei: kurz pro Datei × ~50-80 Dateien = mehrere Stunden - Schema-Migration: kurz - Indizierung: mittel (Re-Embed dauert) - Bewertungs-Pfad-Anpassung + Tests: mittel ## Hängt zusammen mit - Bestehende `app/wahlperioden.py` — `wahlperiode_for(datum, bl)` ist die Lookup-Funktion, die schon korrekt die historische WP zum Antragsdatum liefert. Dieses Issue erweitert die Lücke vom „WP korrekt bestimmt" zu „passendes Programm aus der WP geladen". - Embedding-Modell-Migration (#123) — sollte abgeschlossen sein bevor man großen Reindex anstößt; Stand heute v4 aktiv. - ADR 0001 (Citation-Binding) — Zitat-Match-Algorithmus muss mit historischen Programmen genauso wie heute funktionieren, weil Zitate auf Chunk-IDs binden. ## Out of Scope - Programme von Splitter- oder Regionalparteien (BÜNDNIS Deutschland, Volt etc.) — separate Frage. - Fortlaufender Auto-Refresh bei neuen Wahlprogramm-Releases — manuell wie heute reicht.
Author
Owner

Effektiv erledigt — nur nicht zugemacht. Block 2.4/2.5: 287 historische Programme indiziert (Commit 18ea326). analyzer.analyze_antrag(datum=...) filtert die Embedding-Suche zeitpunkt-korrekt durch das datum-Argument bis hinunter in find_relevant_chunks (Commit 7d507f8). Volltextsuche /api/quellen/search filtert ebenfalls auf das Antragsdatum. Akzeptanzkriterien erfüllt.

**Effektiv erledigt — nur nicht zugemacht.** Block 2.4/2.5: 287 historische Programme indiziert (Commit 18ea326). `analyzer.analyze_antrag(datum=...)` filtert die Embedding-Suche zeitpunkt-korrekt durch das `datum`-Argument bis hinunter in `find_relevant_chunks` (Commit 7d507f8). Volltextsuche `/api/quellen/search` filtert ebenfalls auf das Antragsdatum. Akzeptanzkriterien erfüllt.
Sign in to join this conversation.
No description provided.