leistungsbilanz-ts/docs/print-view.md

7.2 KiB
Raw Blame History

Seitenansicht und PDF-Export

Die Seitenansicht ist rein lesend und verändert keine Projektdaten. Die Aktionen für Büroangaben und Logo speichern dagegen globale Einstellungen. Projekt- und Verteilerangaben werden in den jeweiligen Bearbeitungsdialogen über Projektbefehle mit Undo/Redo gepflegt.

Beim Laden werden alle Stromkreislisten in einer projektweiten Abfrage gelesen; deren Projektrevision und ein abschließend erneut gelesener Projektstand werden verglichen. Ändert sich das Projekt währenddessen, wird statt eines gemischten Datenstands eine Aufforderung zum Neuladen angezeigt. Eine bereits geladene Seitenansicht aktualisiert sich nicht automatisch bei späteren Änderungen in einem anderen Tab.

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.
  • Büroangaben pflegt Büroname und Büroanschrift (Planverfasser, für alle Projekte).
  • 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. Leere Angaben erscheinen als orangefarbenes „[ergänzen]“.
  2. Verteilerübersicht (quer) – Versorgungsstruktur und Tabelle je Verteiler mit Stromkreisanzahl, Pinst (Anzahl × Leistung je Stück, nur lokale Geräte), Leistung vor Verteiler-GZF einschließlich gespeister Unterverteilungen, Verteiler-GZF, Pgl einschließlich Unterverteilungen und IB. Die Hierarchie folgt den logischen IDs.
  3. Verteilerpläne (quer, je Verteiler) – Titelleiste mit Verteilernummer, Bezeichnung, Örtlichkeit, Netzart, „Gespeist von“ und Pgl; darunter Kopfkomponenten, Gruppen, Stromkreise (reine 1:1-Einspeiseabgänge kompakt in einer Zeile; sonst mehrzeilig mit Sammelzeile, eingerückten Gerätezeilen und schreibgeschützten Unterverteilungszeilen), 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.

Berechnung und offene Punkte

  • Einspeisung / Hierarchie: feedingDistributionBoardId bestimmt die Hierarchie. Ist zusätzlich feedingCircuitId gesetzt, fließt die Leistung der Unterverteilung nach deren eigenem Verteiler-GZF als virtuelle Last in genau diesen Abgang ein. Ketten werden rekursiv berechnet; mehrere Unterverteilungen an einem Abgang sind erlaubt. Ohne Abgang bleibt es bei der Hierarchie ohne Leistungsaufschlag. fedFrom bezeichnet nur externe Quellen oder ergänzende Hinweise.
  • Keine Doppelzählung: Die Abgangs- und Verteilersummen enthalten die Unterverteilungsleistung bereits. Deshalb gibt es keine zusätzliche Spalte „Σ inkl. unterlagert“. Die Summenzeile verwendet für hierarchische Leistungen nur Wurzelverteilungen; Pinst summiert weiterhin die lokalen Geräte.
  • IB: S entsteht aus Σ(P / cos φ) für Geräte und den wirksamen cos φ der Unterverteilungen, jeweils mit dem fachlich zugehörigen GZF. Bei einem 1-phasigen speisenden Abgang gilt I = S / U1~, sonst I = S / (√3 · U3~). Für externe oder nur bis zur Verteilung bekannte Einspeisungen bleibt die bisherige Darstellung als symmetrischer Drehstromwert bestehen.
  • 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, falls diese abweicht.
  • Planstände: Die Spalte „Bearbeitung“ zeigt für jeden Planstand die aktuelle Bearbeitung aus den Projekteinstellungen, weil Sicherungspunkte (noch) keinen Bearbeiter speichern.

Datenquellen des Deckblatts

Feld Quelle
Bauvorhaben, Bauherr, Projektnummern, Beschreibung Projekteinstellungen
Anschrift Bauvorhaben, Leistungsphase, Projektleitung, Bearbeitung Projekteinstellungen → Abschnitt „Deckblatt“ (siteAddress, workStage, projectLead, projectEditor)
Büro, Anschrift Büro Seitenansicht → „Büroangaben“ (global)
Stand, Datenstand, Anzahl Verteiler, Inhalt automatisch
Planstände benannte Sicherungspunkte

Die vier Projektfelder laufen über project.update-settings (Schema-Version 3, Migration 0008) und sind Teil von Snapshot-Schema 6 und Projektexport. Im PUT /api/projects/:projectId sind sie optional; fehlende Felder behalten ihren Wert.

Büroangaben

  • Tabelle document_branding_settings (Schlüssel/Wert, Migration 0008), global wie das Logo.
  • GET /api/document-branding liefert zusätzlich office: { officeName, officeAddress }.
  • PUT /api/document-branding/office mit { "officeName", "officeAddress" } (max. 200 / 500 Zeichen, leerer Text = nicht gesetzt).
  • Globale Büro-Einstellung, nicht Teil von Projekten, Revisionen, Snapshots oder Projektexport.
  • Tabelle document_branding_assets (Migration 0007).
  • 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

Bestehende Datenbanken

Vor dem Anwenden der additiven Migrationen einschließlich 0012 eine verifizierte Datenbanksicherung mit npm run db:backup erstellen. Die neuen Projekt- und Verteilerfelder bleiben bei bestehenden Datensätzen zunächst leer (null). Snapshot-Schema 10 enthält den aktuellen Projektzustand; die in Schema 9 eingeführten Einspeisungsverweise werden in den unterstützten Versionen 1–8 mit leeren Verweisen hochgestuft. Restore und Projektkopie erhalten beziehungsweise remappen die neuen Angaben. Globale Büroangaben und Logo gehören zur Datenbanksicherung, nicht zum logischen Projektsnapshot oder Projekttransfer.