Dashboard:
- Neuer Endpoint GET /api/stats/dashboard mit allen Kennzahlen
- Klickbare Kacheln: Vorlagen nach Typ, Ketten nach Status → navigieren zu Filterlisten
- Umsetzungsquote als horizontaler Balken mit klickbaren Segmenten
Abstimmungen:
- Stimmverhalten-Tabelle klickbar: Fraktion oder Ja/Nein/Enthaltung → filtert
- Neuer Endpoint GET /api/abstimmungen/details (?fraktion=&stimme=) mit Pagination
- Neuer Endpoint GET /api/abstimmungen/vergleich (?f1=&f2=) für Koalitionsmatrix-Drill-Down
- Koalitionsmatrix-Zellen klickbar → zeigt Abstimmungsvergleich beider Fraktionen
Fraktions-Normalisierung:
- fraktionen_mapping.py: 40+ DB-Varianten → kanonische Namen
- 'Bündnis 90 / Die Grünen' / 'Bündnis 90/Die Grünen' / 'Grüne' → 'Grüne'
- 'Die Linke' / 'Die Linke.' / 'Linke' → 'Linke'
- BfHo-Varianten, Hagen Aktiv, Einzelvertreter etc. normalisiert
- Mapping in allen Abstimmungs-Endpoints aktiv
- ist_ratsfraktion Flag in Fraktionen-Response
Closes#14
- Navigation: Hamburger-Menü mit Slide-Down auf Mobile
- Vorlagen + Ketten: Tabelle → Card-Layout auf Mobile (<md)
- Filter: vertikal gestackt auf kleinen Screens
- Suchfeld + Typeahead: volle Breite auf Mobile
- Vorlagen-Detail: Header + Sidebar responsive
- Fraktionen-Detail: Tabelle → Cards auf Mobile
- Abstimmungen: Stimmverhalten-Cards + scrollbare Koalitionsmatrix
- Touch-Targets überall ≥44px
- Keine horizontalen Scrollbars
Closes#12
- GET /api/vorlagen/suggest?q= mit FTS5 Prefix-Matching
- Debounce 300ms, Top 7 Vorschläge mit Snippet
- Keyboard-Navigation (↑↓ Enter Escape)
- Klick/Enter → direkt zur Vorlage
- Enter ohne Auswahl → normale Filtersuche
- SQLite FTS5 Virtual Table (vorlagen_fts) über Betreff, Volltext, Zusammenfassung
- Tokenizer unicode61 mit Diakritik-Entfernung
- API: FTS5 MATCH statt LIKE, LIKE als Fallback wenn kein Index
- Snippet-Highlights (<mark>) in Suchergebnissen
- Migrations-Script: scripts/migrate_fts5.py
- 22.337 Einträge indexiert, ~4.200 Treffer für 'Klimaschutz'
Closes#11
- Vorlagen + Ketten: Partei-Dropdown-Filter mit Badges (#9)
- Vorlagen-Detail: Ketten-Klassifikation mit Begründung anzeigen
- Vorlagen-Detail: Umsetzungsbewertungen mit Score + Begründung
- SPA-Routing: Catch-All für direkten URL-Zugriff
- Status-Engine: Begründungen für alle Ketten-Status generieren
- Kurze Beschlusstexte (<=5 Zeichen) nicht mehr als Beschluss werten
- POST /api/bewertung/vorlagen/{id} + /ketten/{id} für KI-Neubewertung
- Frontend: 'Neu bewerten' Button + Kommentarfeld auf beiden Detailseiten
- Job-Status-Polling mit Spinner
- ALLRIS-Rescrape vor Bewertung noch offen (#10)
Closes#9
Suche durchsucht jetzt auch den bereinigten Volltext und die Begründungen
aus KI-Bewertungen (typ=zusammenfassung). Frontend zeigt Treffer-Highlighting.
Fixes#1
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>