gwoe-antragspruefer/app
Dotty Dotter 1350fc7f52 feat: Scorecard Portrait — Claude-Design 1:1 übernommen (1080×1350)
User hat eine Design-Vorgabe als ZIP geliefert (GWÖ Antrag Score Card.zip,
Claude Design Output, Stand 2026-05-07). Komplett anderes Konzept als
mein vorheriges Layout — nicht eine 5×5-Matrix als Datenviz, sondern eine
editorial-magazin-mässige Card mit klaren Modulen.

Übernommen 1:1:
- Inter + JetBrains Mono via Google Fonts
- 3-Zonen-Grid: Header 88px / Body / Footer 96px
- Paper-BG #f5f1ea, Ink #1a1a1a, GWÖ-Grün gedeckt #0a5d3f
- Header-Strip: Brand-Dot + 'GWÖ-Antragsprüfer' / 'Matrix 2.0' / 'NRW · WP18'
- Topline: Drs.-ID + Antragsteller-Pill (Partei-Farbpunkt)
- H1 Antragstitel 78pt, weight 800, line-height 0.95
- Lede: 1-Satz-Zusammenfassung, max 180 Zeichen
- Score-Block: 320px breite gruene Kachel mit 9.0/10 + 'Empfehlung' kicker
  + Verdict-Text + 3 Schwerpunkt-Chips (Code + Wert-kurz + Symbol)
- Fraktions-Grid: bis zu 5 Spalten, pro Fraktion Name + WP-Bar + Score
  + Vote-Label (Ja ✓ / Nein ✗); weak-Klasse (rot) bei Score<5 oder Nein
- Decision-Bar: invertiert schwarz, Beschluss-Text mit ✓/✗-Akzent
- Footer: URL + /antrag/-Pfad + CC BY 4.0 + QR-Pattern

Datenaggregation in main.py erweitert:
- matrix_chips: Top-3 positive Felder (rating > 0) mit Code+Wert+Symbol
- fraktionen_bars: aus wahlprogramm_scores + plenum_votes-Lookup
  (WP-Bar + Vote-Label pro Fraktion)
- beschluss: aus erstem plenum_vote (ergebnis + Mehrheits-Verhältnis)
- wahlperiode: via wahlperioden.wahlperiode_for(datum, BL)

Routing:
- /v2/scorecard?format=portrait → scorecard_portrait.html (NEU)
- /v2/scorecard?format=square|og → scorecard.html (alt, unveraendert)
- /api/assessment/scorecard.png?format=portrait nutzt ebenfalls das neue
  Portrait-Template fuer die PNG-Generierung.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 13:55:16 +02:00
..
adapters fix(#170): JSON-Parse-Fehler im PM-Generator (unescaped Newlines) 2026-05-06 01:53:29 +02:00
kontext Activate LSA: Wahlprogramme + ingest + frontend (#2) 2026-04-07 22:12:32 +02:00
ports fix(#170): JSON-Parse-Fehler im PM-Generator (unescaped Newlines) 2026-05-06 01:53:29 +02:00
protokoll_parsers feat(#149): BB-Parser produktiv — Brandenburger Plenarprotokolle (Status-Only) 2026-04-29 02:04:21 +02:00
repositories refactor(#136): DDD-Lightweight Tag 1-4 (Ports, Adapter, Repositories, Domain-Verhalten) 2026-04-25 20:55:16 +02:00
routers Initial commit: GWÖ-Antragsprüfer v1.0 2026-03-28 22:30:24 +01:00
static fix: News — alle Items anzeigen, nur Summary-Absatz clampen (4 Zeilen) 2026-05-07 12:53:42 +02:00
templates feat: Scorecard Portrait — Claude-Design 1:1 übernommen (1080×1350) 2026-05-07 13:55:16 +02:00
__init__.py Initial commit: GWÖ-Antragsprüfer v1.0 2026-03-28 22:30:24 +01:00
abgeordnetenwatch.py feat(#106,#135,#128): Monitoring + abgeordnetenwatch + Wahlprogramm-Check 2026-04-25 20:55:16 +02:00
analyzer.py feat(#145): LLM-Prompts auf /methodik als Transparenz-Block 2026-04-28 01:50:25 +02:00
auswertungen.py feat(#189 Phase 10.2): Empfehlungs-Konsistenz-Drilldown analog zu Heuchelei 2026-05-06 17:11:34 +02:00
auth.py feat(Phase 11b): Bypass-DB-Logging + Auto-Rotation-Skript 2026-05-06 23:31:51 +02:00
bundeslaender.py #31/#34/#35: BY, NI, SL auf aktiv=True — alle 17 Parlamente jetzt im UI 2026-04-10 17:43:32 +02:00
clustering.py feat: 16 BL-Adapter, Drucksache-Typen, Mail-Digest, Clustering, Redline-Parser 2026-04-25 20:54:50 +02:00
config.py feat(feedback): konfigurierbare Issue-Labels via GITEA_FEEDBACK_LABELS 2026-04-28 01:31:25 +02:00
database.py feat(Phase 11b): Bypass-DB-Logging + Auto-Rotation-Skript 2026-05-06 23:31:51 +02:00
drucksache_typen.py feat(#6 Phase 11): Bundesrats-Drucksachen erkennen + markieren + ablehnen 2026-05-06 23:29:12 +02:00
embeddings.py fix: Citation-Binding partei-skopiert (Cross-Partei-Misattribution gestoppt) 2026-05-07 11:51:03 +02:00
ingest_votes.py feat(#148): BUND-Parser produktiv — Bundestags-XML-Plenarprotokolle 2026-04-28 23:21:39 +02:00
mail.py feat: 16 BL-Adapter, Drucksache-Typen, Mail-Digest, Clustering, Redline-Parser 2026-04-25 20:54:50 +02:00
main.py feat: Scorecard Portrait — Claude-Design 1:1 übernommen (1080×1350) 2026-05-07 13:55:16 +02:00
marker.py feat: Opportunismus-Marker bei JA-Stimmen mit WP-Score < 3 2026-05-06 15:48:06 +02:00
models.py refactor(#136): DDD-Lightweight Tag 1-4 (Ports, Adapter, Repositories, Domain-Verhalten) 2026-04-25 20:55:16 +02:00
monitoring.py feat(#106,#135,#128): Monitoring + abgeordnetenwatch + Wahlprogramm-Check 2026-04-25 20:55:16 +02:00
news_aggregator.py feat: Stand-Dashboard, Score-Histogram, PM-Markdown, Live-Polling, Cluster-Indicator 2026-05-06 02:49:06 +02:00
og_card.py feat(#139,#129,#138,#141): v2-Frontend (ECOnGOOD-CD), Login-Modal, Auto-DL, OG-Cards 2026-04-25 20:55:57 +02:00
parlamente.py feat(#6 Phase 11): Bundesrats-Drucksachen erkennen + markieren + ablehnen 2026-05-06 23:29:12 +02:00
parteien.py Phase J: SN EDAS-XML-Adapter (#26/#38) — Sachsen aktiv via XML-Export 2026-04-09 14:39:03 +02:00
pm_render.py refactor + tests: marker.py + pm_render.py mit 56 Unit-Tests 2026-05-06 15:44:12 +02:00
presse_generator.py feat(Phase 18): PM-Prompt verschaerft + Auto-Re-Generate bei zu kurzem Output 2026-05-06 23:47:42 +02:00
queue.py feat(#139,#129,#138,#141): v2-Frontend (ECOnGOOD-CD), Login-Modal, Auto-DL, OG-Cards 2026-04-25 20:55:57 +02:00
redline_utils.py fix: PDF-Link mit #page=N-Hash — Browser-PDF-Viewer landet jetzt direkt auf der richtigen Seite 2026-04-25 22:09:46 +02:00
reindex_embeddings.py feat: 16 BL-Adapter, Drucksache-Typen, Mail-Digest, Clustering, Redline-Parser 2026-04-25 20:54:50 +02:00
report.py feat: PDF-Generierung auf v3-Layout, Werkstatt-Link im Admin, Share nur bei Login 2026-05-07 13:48:19 +02:00
sync_abgeordnetenwatch.py feat(#106,#135,#128): Monitoring + abgeordnetenwatch + Wahlprogramm-Check 2026-04-25 20:55:16 +02:00
themen_matching.py feat: Stand-Dashboard, Score-Histogram, PM-Markdown, Live-Polling, Cluster-Indicator 2026-05-06 02:49:06 +02:00
validators.py fix: Validator akzeptiert Bundesrats-3-Komponenten-Drucksachen 2026-05-06 23:30:29 +02:00
wahlperioden.py Phase C: Auswertungen-Dashboard #58 + CSV-Export #45 (Roadmap #59) 2026-04-09 11:25:57 +02:00
wahlprogramm_check.py feat(#106,#135,#128): Monitoring + abgeordnetenwatch + Wahlprogramm-Check 2026-04-25 20:55:16 +02:00
wahlprogramm_fetch.py feat(#138): SHA-Lock-File schuetzt vor stillem PDF-Tausch 2026-04-28 01:58:42 +02:00
wahlprogramm-links.yaml feat(#139,#129,#138,#141): v2-Frontend (ECOnGOOD-CD), Login-Modal, Auto-DL, OG-Cards 2026-04-25 20:55:57 +02:00
wahlprogramm-shas.lock.json feat(#138): SHA-Lock-File schuetzt vor stillem PDF-Tausch 2026-04-28 01:58:42 +02:00
wahlprogramme.py Add 30 Wahlprogramme für TH/BB/HH/SH/BW/RP (#37, #39, #40, #32, #41, #42) 2026-04-09 08:03:11 +02:00