leistungsbilanz-ts/docs/print-view.md
Grovy311 94688d7a8c Add print view, board info card and document logo upload
- Seitenansicht (/projects/:projectId/print): tabular cover page, board
  overview with supply structure and power sums, one plan per board with a
  repeating title block; PDF via the browser print dialog with named @page
  rules (A4 portrait cover, A4/A3 landscape plans, page x of y).
- Distribution-board info card (board number, location, fed-from, remark)
  in the board edit dialog, persisted through the additively extended
  distribution-board.update command (migration 0008, snapshot schema 6,
  legacy subtree commands normalized).
- Global document logo upload (PNG/JPEG/SVG, max 2 MB) outside project
  revisions and snapshots.
- fed-from stays free text; the overview hierarchy and cumulated sums are
  preliminary until the feed link is modeled.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 19:31:36 +02:00

3.9 KiB
Raw Blame History

Seitenansicht und PDF-Export

Stand: erste Ausbaustufe (Beispiel zur Abstimmung). Die Seitenansicht ist rein lesend und verändert keine Projektdaten.

Aufruf

  • Projektseite → Button Seitenansicht öffnet /projects/:projectId/print in einem neuen Tab.
  • Als PDF speichern / Drucken nutzt den Druckdialog des Browsers (Ziel „Als PDF speichern“). Der Dokumenttitel Leistungsbilanz – <Projekt> wird als Dateiname vorgeschlagen.
  • Planformat schaltet die Verteilerpläne zwischen A4 quer und A3 quer um. Deckblatt bleibt A4 hoch.
  • Logo hinterlegen / ersetzen / entfernen verwaltet das Büro-Logo.

Seiten

  1. Deckblatt (A4 hoch) – tabellarisch: Projekt, Planverfasser, Dokument, Planstände (aus benannten Sicherungspunkten) und Inhalt. Angaben ohne Datenmodell erscheinen als orangefarbenes „[ergänzen]“ (Anschrift, Leistungsphase, Projektleitung, Bearbeitung).
  2. Verteilerübersicht (quer) – Versorgungsstruktur und Tabelle je Verteiler mit Stromkreisanzahl, Pinst (Anzahl × Leistung je Stück), PGeräte (mit Geräte-GZF), Verteiler-GZF, Pgl, IB und „Σ inkl. unterlagert“.
  3. Verteilerpläne (quer, je Verteiler) – Titelleiste mit Verteilernummer, Bezeichnung, Örtlichkeit, Netzart, „Gespeist von“ und Pgl; darunter Kopfkomponenten, Gruppen, Stromkreise (mehrzeilige mit Sammelzeile und eingerückten Gerätezeilen), Gruppensummen und Verteilersumme. Fehlende Kabelangaben sind als „offen“ markiert. Die Titelleiste steht im Tabellenkopf und wiederholt sich beim Drucken auf Folgeseiten.

Seitenformat, Ränder und „Seite x von y“ kommen beim Drucken aus benannten @page-Regeln (lb-portrait, lb-landscape), die die Seite zur Laufzeit einfügt. Die Bildschirmansicht zeigt Blätter in Papiergröße; die exakte Seitenaufteilung langer Verteilerpläne entsteht erst beim Drucken.

Vorläufige Punkte

  • Einspeisung / Hierarchie: fedFrom ist Freitext. Die Übersicht ordnet einen Verteiler nur dann unter, wenn der Text genau der Nummer oder Bezeichnung eines anderen Verteilers entspricht; „Σ inkl. unterlagert“ ist eine einfache Summe ohne übergeordneten GZF. Die fachliche Verknüpfung (Verteiler und/oder speisender Stromkreis) und die Summierungslogik sind offen.
  • IB ist ein symmetrischer Drehstromwert S / (√3 · U3~) mit S aus P / cos φ je Gerätezeile (fehlendes cos φ = 1) und Verteiler-GZF.
  • Corporate Design: Farben (--pd-* in src/frontend/print/print-document.css) und Schrift (Arial) sind aus Logo und kbp-Präsentationsmaterial abgeleitet und werden durch die offizielle CD-Vorgabe ersetzt. Der Büroname steht vorläufig als Konstante printOfficeName in src/frontend/print/print-document.tsx.
  • Globale Büro-Einstellung, nicht Teil von Projekten, Revisionen, Snapshots oder Projektexport.
  • Tabelle document_branding_assets (Migration 0008).
  • GET /api/document-branding → { logo: { mimeType, fileName, sizeBytes, updatedAtIso } | null }
  • GET /api/document-branding/logo → Bilddaten (404 ohne Logo), mit X-Content-Type-Options: nosniff und restriktiver CSP.
  • PUT /api/document-branding/logo mit { "fileName", "mimeType": "image/png" | "image/jpeg" | "image/svg+xml", "contentBase64" }, maximal 2 MB; der Dateiinhalt wird gegen das Format geprüft.
  • DELETE /api/document-branding/logo → 204.

Code

  • src/app/projects/[projectId]/print/page.tsx – Datenladen, Werkzeugleiste, @page-Regeln
  • src/frontend/print/print-document-model.ts – reine Berechnungen und Formatierung (Tests: tests/print-document-model.test.ts)
  • src/frontend/print/print-document.tsx – Blätter und Tabellen
  • src/frontend/print/print-document.css – Layout, auf .print-view begrenzt
  • src/frontend/components/distribution-board-info-card.tsx – Infokarte im Bearbeiten-Dialog der Verteilung