PDF-Aufbereitung: neues Layout + alle Informationen aus v2-Detail #175

Closed
opened 2026-05-06 23:20:03 +02:00 by tobias · 2 comments
Owner

Ziel: PDF-Generator auf neues Layout heben, Inhalts-Vollständigkeit angleichen an die Web-Detail-Seite (Stand 2026-05).

Out of scope:

  • Trennblatt (Antragsteller-Übersicht/erste Seite) bleibt inhaltlich wie bisher.
  • Angehängtes Original-PDF (Anhang) bleibt inhaltlich unverändert.

Was reinkommt:

  • Stimmverhalten + Plenum-Vote-Block analog Web
  • Heuchelei-/Opportunismus-/Konsistenz-Marker
  • News-Match (sofern vorhanden)
  • Erklärung WARUM Programmtreue-Score so ist (siehe Folge-Issue „Webversion-Anpassung")

Akzeptanz:

  • PDF-Output für eine Drucksache enthält dieselben Felder wie das v2-Detail.
  • WeasyPrint rendert in <2 s für eine typische Drucksache.
  • Test-Drucksache: NRW/18/18246 (siehe Konsistenz-Issue).
**Ziel:** PDF-Generator auf neues Layout heben, Inhalts-Vollständigkeit angleichen an die Web-Detail-Seite (Stand 2026-05). **Out of scope:** - Trennblatt (Antragsteller-Übersicht/erste Seite) bleibt inhaltlich wie bisher. - Angehängtes Original-PDF (Anhang) bleibt inhaltlich unverändert. **Was reinkommt:** - Stimmverhalten + Plenum-Vote-Block analog Web - Heuchelei-/Opportunismus-/Konsistenz-Marker - News-Match (sofern vorhanden) - Erklärung WARUM Programmtreue-Score so ist (siehe Folge-Issue „Webversion-Anpassung") **Akzeptanz:** - PDF-Output für eine Drucksache enthält dieselben Felder wie das v2-Detail. - WeasyPrint rendert in <2 s für eine typische Drucksache. - Test-Drucksache: NRW/18/18246 (siehe Konsistenz-Issue).
Author
Owner

User-Vorschlag aufgegriffen: PDF-Renderer als Transformer der gleichen v2-Block-Macros — one source of truth für Web + PDF + Mobile.

Schritt 1 erledigt (commit 38e58e4)

build_matrix_html_v2() rendert die Matrix via matrix_mini-Macro aus
v2/components/matrix_mini.html. Gleiche Quelle wie die Web-View →
keine Drift mehr möglich für die Matrix-Cells.

Schritte 2–N (Refactor-Pattern)

# Schritt Aufwand
2 v2.css als Stylesheet in HTML(string=...).write_pdf(stylesheets=[...]) klein
3 Programm-Treue-Block aus antrag_detail.html als Macro extrahieren (block_programmtreue.html) mittel
4 Verbesserungsvorschläge-Block extrahieren mittel
5 Vote-Block (mit Heuchelei-/Konsistenz-Markern) extrahieren mittel
6 Score-Hero-Block (existiert schon als Macro) — direkt in PDF includen klein
7 PDF-Layout: aus inline-CSS-f-string raus, in templates/pdf/report.html (extends base_pdf.html) → linearer Stack der Block-Includes groß
8 Mobile-Layout in v2-Detail: Grid kollabiert → gleicher linearer Stack wie PDF klein

Konsistenz-Test (Phase 20)

Datenpfad-Test (tests/test_v2_pdf_consistency.py) ist geschrieben —
nutzt _row_to_detail vs. Assessment.model_validate(row) und
vergleicht Score, Empfehlung, Matrix-Cells, WP-/PP-Scores. Lokal
laufenmodulo Container-DB-Mount.

Gerichtete Folge-Session vorgeschlagen — Schritte 2-7 in einem Block
durchziehen, mit Browser-Vorschau via Playwright + DEBUG_AUTH_TOKEN.

**User-Vorschlag aufgegriffen:** PDF-Renderer als Transformer der gleichen v2-Block-Macros — one source of truth für Web + PDF + Mobile. ## Schritt 1 erledigt (commit 38e58e4) `build_matrix_html_v2()` rendert die Matrix via `matrix_mini`-Macro aus `v2/components/matrix_mini.html`. Gleiche Quelle wie die Web-View → keine Drift mehr möglich für die Matrix-Cells. ## Schritte 2–N (Refactor-Pattern) | # | Schritt | Aufwand | |---|---|---| | 2 | `v2.css` als Stylesheet in `HTML(string=...).write_pdf(stylesheets=[...])` | klein | | 3 | Programm-Treue-Block aus `antrag_detail.html` als Macro extrahieren (`block_programmtreue.html`) | mittel | | 4 | Verbesserungsvorschläge-Block extrahieren | mittel | | 5 | Vote-Block (mit Heuchelei-/Konsistenz-Markern) extrahieren | mittel | | 6 | Score-Hero-Block (existiert schon als Macro) — direkt in PDF includen | klein | | 7 | PDF-Layout: aus inline-CSS-f-string raus, in `templates/pdf/report.html` (extends `base_pdf.html`) → linearer Stack der Block-Includes | groß | | 8 | Mobile-Layout in v2-Detail: Grid kollabiert → gleicher linearer Stack wie PDF | klein | ## Konsistenz-Test (Phase 20) Datenpfad-Test (`tests/test_v2_pdf_consistency.py`) ist geschrieben — nutzt `_row_to_detail` vs. `Assessment.model_validate(row)` und vergleicht Score, Empfehlung, Matrix-Cells, WP-/PP-Scores. Lokal laufenmodulo Container-DB-Mount. **Gerichtete Folge-Session vorgeschlagen** — Schritte 2-7 in einem Block durchziehen, mit Browser-Vorschau via Playwright + DEBUG_AUTH_TOKEN.
Author
Owner

PDF auf Augenhöhe mit Web-Detail (Commit c7eab5a). Programm-Treue-Begründungen, Stimmverhalten + Plenum-Vote-Block und Konsistenz-Marker waren im PDF-Template bereits vorhanden — bei der Code-Inspektion verifiziert. Heuchelei-/Opportunismus-Marker (⚠ neben NEIN-Fraktion bei WP≥7, ! neben JA-Fraktion bei WP<3) jetzt nachgereicht, plus kompakte Legende unter dem Vote-Block. News-Match explizit out-of-scope nach User-Entscheidung. Test-Drucksache NRW/18/18246: PDF rendert in 214 KB / 11 Seiten ohne WeasyPrint-Errors.

**PDF auf Augenhöhe mit Web-Detail** (Commit c7eab5a). Programm-Treue-Begründungen, Stimmverhalten + Plenum-Vote-Block und Konsistenz-Marker waren im PDF-Template bereits vorhanden — bei der Code-Inspektion verifiziert. Heuchelei-/Opportunismus-Marker (⚠ neben NEIN-Fraktion bei WP≥7, ! neben JA-Fraktion bei WP<3) jetzt nachgereicht, plus kompakte Legende unter dem Vote-Block. News-Match explizit out-of-scope nach User-Entscheidung. Test-Drucksache NRW/18/18246: PDF rendert in 214 KB / 11 Seiten ohne WeasyPrint-Errors.
Sign in to join this conversation.
No description provided.