Commit Graph

12 Commits

Author SHA1 Message Date
Dotty Dotter
c6291a285a feat: Globale Filter (Ratsperiode + Parteien) seitenübergreifend (#15)
Layout:
- Sticky Filter-Bar unter Navigation auf ALLEN Seiten
- Ratsperioden als Multi-Select Toggle-Buttons
- Parteien-Buttons mit Parteifarben aus DB
- Reset-Button bei aktiven Filtern

Backend:
- Shared utility tracker/core/perioden.py (Perioden-Mapping + Filter-Helper)
- GET /api/vorlagen: periode + parteien Parameter
- GET /api/ketten: periode + parteien Parameter
- GET /api/stats/dashboard: periode + parteien Parameter
- GET /api/fraktionen/{kuerzel}/dashboard: periode Parameter

Frontend:
- Shared reactive state (filters.svelte.ts) mit Svelte 5 Runes
- $effect() in allen Seiten reagiert auf Filteränderungen
- Dashboard, Vorlagen, Ketten, Abstimmungen, Fraktionen nutzen globale Filter
- Filter-Bar aus Abstimmungen entfernt (jetzt im Layout)

Closes #15
2026-04-01 14:58:10 +02:00
Dotty Dotter
7358aa1b61 feat: Globale Multi-Select Filter (Ratsperiode + Parteien) auf Abstimmungen
- Filter-Bar oben: Ratsperioden (2004-2030) + Parteien als Toggle-Buttons
- Multi-Select: Mehrere Perioden/Parteien gleichzeitig wählbar
- Filter wirken auf Stimmverhalten-Tabelle UND Koalitionsmatrix
- Backend: periode= und parteien= Query-Parameter auf /fraktionen + /koalitionsmatrix
- Fraktions-Normalisierung: Mapping für 40+ DB-Varianten
- Gestapelte Balken (grün/rot/gelb) statt nur grün
- Filter bleiben beim Scrollen aktiv, Reset-Button wenn Filter gesetzt
2026-04-01 14:46:57 +02:00
Dotty Dotter
ea3e5cd329 feat: Intuitivere Bedienung — klickbare Stats + Abstimmungs-Filter + Fraktions-Normalisierung (#14)
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
2026-04-01 14:32:06 +02:00
Dotty Dotter
31b1e1bd7e feat: Responsive Layout für Mobile (#12)
- 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
2026-04-01 14:21:06 +02:00
Dotty Dotter
401cd3acb0 fix: 43 verwaiste Suffix-Vorlagen in Ketten zusammengeführt
- fix_orphan_chains.py: Findet Suffix-Dokumente (z.B. 0010/2025-1) ohne Kette
- Matcht automatisch mit Basis-Vorlage (0010/2025) → erstellt Kette
- 43 neue Ketten, 5 bestehende erweitert, 3 übersprungen (Basis fehlt)
- Status-Engine auf alle neuen Ketten angewendet
- Beispiel: Rüggeweg 0010/2025 + 0010/2025-1 → Kette 6313
2026-04-01 14:07:01 +02:00
Dotty Dotter
77371fafc9 feat: Typeahead-Vorschläge bei Volltextsuche (#11)
- 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
2026-04-01 13:52:51 +02:00
Dotty Dotter
2ab8046b78 feat: FTS5 Volltextsuche mit Snippet-Highlighting (#11)
- 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
2026-04-01 13:17:27 +02:00
Dotty Dotter
1801f8f7fd chore: restore-db.sh für Restic/Hetzner + Production-Server Restore 2026-04-01 13:02:46 +02:00
Dotty Dotter
9d8a73e2a9 feat: Parteien-Filter, Klassifikation, Umsetzungsbewertung, KI-Neubewertung
- 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
2026-04-01 10:36:22 +02:00
Dotty Dotter
14d4be5d67 feat: Erweitere Volltextsuche über volltext_clean und KI-Zusammenfassungen
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>
2026-03-31 16:46:49 +02:00
Dotty Dotter
aa9e5699f0 fix: Remove DB files from tracking, update .gitignore 2026-03-30 16:38:05 +02:00
Dotty Dotter
17606ab237 feat: Initial commit — Antragstracker Hagen
Vollständige Pipeline zur Analyse kommunaler Vorlagen aus ALLRIS:
- OParl-Import: 20.149 Vorlagen
- PDF-Extraktion: 10.045 Volltexte (adaptives Throttling)
- KI-Zusammenfassungen: 10.026 via Qwen Plus (parallelisiert)
- Beratungsfolge-Scraper: Beschlusstexte + Wortprotokolle
- Abstimmungs-Analyse mit Koalitionsmatrix
- Georeferenzierung (Nominatim)

Stack: FastAPI + SvelteKit + SQLite
Deployment: Docker + Traefik auf VServer

Daten (DB, Logs) nicht im Repo — siehe Restic-Backup.
Repo-Setup: scripts/setup.sh für Neuaufbau aus OParl-API.
2026-03-30 16:37:58 +02:00