Späteres Feature: Grobe Leistungsbilanz (LPH 2/3) nach Kostengruppen als eigenes Modul mit Vergleich zur detaillierten Bilanz #7

Closed
opened 2026-09-26 12:56:29 +02:00 by Grovy311 · 2 comments
Collaborator

Ziel

In der Vor- und Entwurfsplanung (LPH 2/3) gibt es noch keine Verteilungen und Stromkreise. Trotzdem braucht man früh eine Leistungsbilanz, gegliedert nach Kostengruppen bzw. Gewerken. Jedes Gewerk trägt unter seiner Kostengruppe seine Verbraucher ein, als Stückzahl mit Einzelleistung oder als Fläche mit W/m².

Das soll in die App kommen, ohne dein Konzept zu ändern: als eigenes Modul, das nur in die Oberfläche eingebunden ist. Eine logische Verknüpfung mit Stromkreisen ist nicht nötig. Es reicht ein Vergleich: was stand in der geschätzten Bilanz, was ergibt die detaillierte Bilanz?

Vorlage (aktuelle Excel-Bilanz „Leistungsbilanz – KG400“)

Kopf: Auftraggeber, Projektbezeichnung, Projektnummer, Stand (z. B. Entwurfsplanung), Datum, Bearbeiter. Das passt zu den Deckblattfeldern aus feature/print-view.

Gruppen je Kostengruppe (DIN 276): 410 Sanitärtechnik, 420 Wärmeversorgung, 430 Lufttechnische Anlagen, 434 Kälteanlagen, 440 Starkstromanlagen, 450 Schwachstromanlagen, 460 Fördertechnik, 470 Nutzungsspezifische Anlagen, 480 Gebäudeautomation. Die Liste soll erweiterbar sein, z. B. um „Allgemein“.

Spalten je Zeile:

Spalte Inhalt
Versorgung ELT / ISP / … (Freitext oder Auswahl)
Stromkreis-Nr. optional, Freitext
Verbraucher / Fläche Bezeichnung
Anzahl / Fläche Wert + Einheit St. oder m²
Anschluss fest / Steckdose
Einzelleistung W je Stück bzw. W/m²
GLF Gleichzeitigkeitsfaktor, gern mit dem AMEV-Picker
cos φ
Nötige AV-Leistung kW = Anzahl × Einzelleistung × GLF; kVA = kW / cos φ
SV ja/nein
Nötige SV-Leistung kW / kVA, wenn SV = ja
Anmerkungen Freitext

Summen:

  • AV und SV je Kostengruppe
  • Gesamtsumme AV und SV
  • Reserveleistung in %, für AV und SV getrennt einstellbar
  • Leistung inklusive Reserve
  • Maximalstrom I = S / (√3 · U) mit der Drehstromspannung aus den Projekteinstellungen

Vorschlag Umsetzung (separates Modul)

  • Eigene Tabellen, ohne Fremdschlüssel in die Stromkreisstruktur, z. B.:
    • estimate_balances: Projekt, Stand/Leistungsphase, Datum, Reserve AV/SV %
    • estimate_groups: Kostengruppe, Titel, Sortierung, optional „bearbeitet von“ (Gewerk)
    • estimate_rows: die Spalten oben
  • Mehrere Stände je Projekt, z. B. „Vorplanung“ und „Entwurfsplanung“, damit ein Stand eingefroren und später verglichen werden kann.
  • Eigene API unter /api/projects/:projectId/estimates. Die Berechnung liegt als reine Funktion mit Tests vor, damit Seite, PDF und Vergleich dieselben Zahlen liefern.
  • Eigene Seite in der Seitenleiste, z. B. „Grobe Leistungsbilanz“. Tabellarische Erfassung im Stil der Stromkreisliste, Tastaturbedienung, Summenzeilen je KG.
  • Druck/PDF in der Seitenansicht im kbp-Design, analog zur Excel-Vorlage.
  • Optional: Import der bisherigen Excel-Vorlage.

Vergleich geschätzt ↔ detailliert

  • Pro Kostengruppe: geschätzte Leistung (AV/SV, kW/kVA) gegenüber der detaillierten Leistung, mit Differenz absolut und in %.
  • Die detaillierte Seite kommt aus den Gerätezeilen der Stromkreislisten über das vorhandene Feld Kostengruppe (circuit_device_rows.cost_group), summiert mit Geräte-GZF, zusätzlich als Gesamtwert über alle Verteilungen.
  • Gerätezeilen ohne Kostengruppe erscheinen als eigene Zeile „ohne Kostengruppe“, damit keine Leistung verloren geht.
  • Reine Leseansicht, sie ändert keine Daten.

Fragen an dich

  1. Undo/Redo und Revision: Soll das Modul an deinen Projekt-Command-Mechanismus angebunden werden (eigene Befehlstypen, Teil von Snapshot/Transfer)? Oder reicht zunächst ein eigenständiges CRUD mit optimistischer Versionsprüfung je Bilanz, das später nachgezogen wird?
  2. Soll die grobe Bilanz Teil von Projektexport und -transfer sein?
  3. Soll das Feld Kostengruppe der Gerätezeilen für den Vergleich fest auf DIN-276-Nummern (410 … 480) normiert werden, oder genügt ein Abgleich per Präfix?
  4. Brauchen wir Rechte je Gewerk („jeder trägt seine Geräte ein“), oder genügt vorerst ein Feld „bearbeitet von“ je Kostengruppe?

Abgrenzung

Keine Änderung an Stromkreislisten, Verteilungen, Befehlen oder Snapshot-Schema. Die grobe Bilanz erzeugt keine Stromkreise, und aus den Stromkreisen wird nichts in die grobe Bilanz zurückgeschrieben.

## Ziel In der Vor- und Entwurfsplanung (LPH 2/3) gibt es noch keine Verteilungen und Stromkreise. Trotzdem braucht man früh eine **Leistungsbilanz**, gegliedert nach Kostengruppen bzw. Gewerken. Jedes Gewerk trägt unter seiner Kostengruppe seine Verbraucher ein, als Stückzahl mit Einzelleistung oder als Fläche mit W/m². Das soll in die App kommen, **ohne dein Konzept zu ändern**: als eigenes Modul, das nur in die Oberfläche eingebunden ist. Eine logische Verknüpfung mit Stromkreisen ist nicht nötig. Es reicht ein **Vergleich**: was stand in der geschätzten Bilanz, was ergibt die detaillierte Bilanz? ## Vorlage (aktuelle Excel-Bilanz „Leistungsbilanz – KG400“) Kopf: Auftraggeber, Projektbezeichnung, Projektnummer, Stand (z. B. Entwurfsplanung), Datum, Bearbeiter. Das passt zu den Deckblattfeldern aus `feature/print-view`. Gruppen je Kostengruppe (DIN 276): 410 Sanitärtechnik, 420 Wärmeversorgung, 430 Lufttechnische Anlagen, 434 Kälteanlagen, 440 Starkstromanlagen, 450 Schwachstromanlagen, 460 Fördertechnik, 470 Nutzungsspezifische Anlagen, 480 Gebäudeautomation. Die Liste soll erweiterbar sein, z. B. um „Allgemein“. Spalten je Zeile: | Spalte | Inhalt | |---|---| | Versorgung | ELT / ISP / … (Freitext oder Auswahl) | | Stromkreis-Nr. | optional, Freitext | | Verbraucher / Fläche | Bezeichnung | | Anzahl / Fläche | Wert + Einheit **St.** oder **m²** | | Anschluss | fest / Steckdose | | Einzelleistung | W je Stück bzw. W/m² | | GLF | Gleichzeitigkeitsfaktor, gern mit dem AMEV-Picker | | cos φ | | | Nötige AV-Leistung | kW = Anzahl × Einzelleistung × GLF; kVA = kW / cos φ | | SV | ja/nein | | Nötige SV-Leistung | kW / kVA, wenn SV = ja | | Anmerkungen | Freitext | Summen: - AV und SV je Kostengruppe - Gesamtsumme AV und SV - Reserveleistung in %, für AV und SV getrennt einstellbar - Leistung inklusive Reserve - Maximalstrom I = S / (√3 · U) mit der Drehstromspannung aus den Projekteinstellungen ## Vorschlag Umsetzung (separates Modul) - **Eigene Tabellen**, ohne Fremdschlüssel in die Stromkreisstruktur, z. B.: - `estimate_balances`: Projekt, Stand/Leistungsphase, Datum, Reserve AV/SV % - `estimate_groups`: Kostengruppe, Titel, Sortierung, optional „bearbeitet von“ (Gewerk) - `estimate_rows`: die Spalten oben - **Mehrere Stände** je Projekt, z. B. „Vorplanung“ und „Entwurfsplanung“, damit ein Stand eingefroren und später verglichen werden kann. - **Eigene API** unter `/api/projects/:projectId/estimates`. Die Berechnung liegt als reine Funktion mit Tests vor, damit Seite, PDF und Vergleich dieselben Zahlen liefern. - **Eigene Seite** in der Seitenleiste, z. B. „Grobe Leistungsbilanz“. Tabellarische Erfassung im Stil der Stromkreisliste, Tastaturbedienung, Summenzeilen je KG. - **Druck/PDF** in der Seitenansicht im kbp-Design, analog zur Excel-Vorlage. - Optional: Import der bisherigen Excel-Vorlage. ## Vergleich geschätzt ↔ detailliert - Pro Kostengruppe: geschätzte Leistung (AV/SV, kW/kVA) gegenüber der detaillierten Leistung, mit Differenz absolut und in %. - Die detaillierte Seite kommt aus den Gerätezeilen der Stromkreislisten über das vorhandene Feld **Kostengruppe** (`circuit_device_rows.cost_group`), summiert mit Geräte-GZF, zusätzlich als Gesamtwert über alle Verteilungen. - Gerätezeilen ohne Kostengruppe erscheinen als eigene Zeile „ohne Kostengruppe“, damit keine Leistung verloren geht. - Reine Leseansicht, sie ändert keine Daten. ## Fragen an dich 1. Undo/Redo und Revision: Soll das Modul an deinen Projekt-Command-Mechanismus angebunden werden (eigene Befehlstypen, Teil von Snapshot/Transfer)? Oder reicht zunächst ein eigenständiges CRUD mit optimistischer Versionsprüfung je Bilanz, das später nachgezogen wird? 2. Soll die grobe Bilanz Teil von Projektexport und -transfer sein? 3. Soll das Feld Kostengruppe der Gerätezeilen für den Vergleich fest auf DIN-276-Nummern (410 … 480) normiert werden, oder genügt ein Abgleich per Präfix? 4. Brauchen wir Rechte je Gewerk („jeder trägt seine Geräte ein“), oder genügt vorerst ein Feld „bearbeitet von“ je Kostengruppe? ## Abgrenzung Keine Änderung an Stromkreislisten, Verteilungen, Befehlen oder Snapshot-Schema. Die grobe Bilanz erzeugt keine Stromkreise, und aus den Stromkreisen wird nichts in die grobe Bilanz zurückgeschrieben.
Author
Collaborator

Vorbereitet als Branch feature/estimate-balance (Basis feature/building-structure, enthält außerdem fix/client-id-insecure-context). Liegt bereit, falls du zustimmst.

Umsetzung entlang deines Konzepts:

  • eigene Tabellen estimate_balances/_groups/_rows (Migration 0010), keine Fremdschlüssel in die Stromkreisstruktur
  • Schreiben über Projektbefehle estimate-balance.insert/.update/.delete mit vollständigen Dokumenten (Revision, Inverse, Undo/Redo)
  • nicht in Snapshot/Transfer, das Snapshot-Schema bleibt unverändert (Frage 1/2 oben ist weiter offen)
  • Rechnung und Vergleich rein in src/shared/estimate-balance/estimate-balance.ts. Der Test rechnet das Beispiel der Excel-Vorlage exakt nach: 143,24 kW / 148,48 kVA, mit 10 % Reserve 157,56 kW / 163,33 kVA, 235,75 A.
  • Vergleich über die Kostengruppe der Gerätezeilen (längstes Präfix: 434 → 434, 431 → 430, 444 → 440), ohne Verteiler-GZF
  • UI: Seite „Grobe Leistungsbilanz“ mit Ständen (Vorlage KG 400, leer oder Kopie) und einem Editor wie die Excel-Vorlage mit Autosave, AMEV-Picker für den GLF, Summen, Reserve, Maximalstrom, Vergleichstabelle und Drucklayout A4 quer
  • Doku: docs/estimate-balance.md, AGENTS.md, API-Doku

Geprüft: alle drei tsc-Konfigurationen, npm test 479/479 auf dem Branch, 509/509 zusammen mit den übrigen offenen Branches, Produktions-Build, Migration auf einer bestehenden Datenbank, Browsertest (Anlegen, Autosave, ungültige Eingabe, Rückgängig/Wiederholen, 409-Konflikt, Vergleich). Der Branch lässt sich konfliktfrei mit allen anderen offenen Branches mergen.

Vorbereitet als Branch `feature/estimate-balance` (Basis `feature/building-structure`, enthält außerdem `fix/client-id-insecure-context`). Liegt bereit, falls du zustimmst. Umsetzung entlang deines Konzepts: - eigene Tabellen `estimate_balances/_groups/_rows` (Migration `0010`), keine Fremdschlüssel in die Stromkreisstruktur - Schreiben über Projektbefehle `estimate-balance.insert/.update/.delete` mit vollständigen Dokumenten (Revision, Inverse, Undo/Redo) - **nicht** in Snapshot/Transfer, das Snapshot-Schema bleibt unverändert (Frage 1/2 oben ist weiter offen) - Rechnung und Vergleich rein in `src/shared/estimate-balance/estimate-balance.ts`. Der Test rechnet das Beispiel der Excel-Vorlage exakt nach: 143,24 kW / 148,48 kVA, mit 10 % Reserve 157,56 kW / 163,33 kVA, 235,75 A. - Vergleich über die Kostengruppe der Gerätezeilen (längstes Präfix: 434 → 434, 431 → 430, 444 → 440), ohne Verteiler-GZF - UI: Seite „Grobe Leistungsbilanz“ mit Ständen (Vorlage KG 400, leer oder Kopie) und einem Editor wie die Excel-Vorlage mit Autosave, AMEV-Picker für den GLF, Summen, Reserve, Maximalstrom, Vergleichstabelle und Drucklayout A4 quer - Doku: `docs/estimate-balance.md`, AGENTS.md, API-Doku Geprüft: alle drei `tsc`-Konfigurationen, `npm test` 479/479 auf dem Branch, 509/509 zusammen mit den übrigen offenen Branches, Produktions-Build, Migration auf einer bestehenden Datenbank, Browsertest (Anlegen, Autosave, ungültige Eingabe, Rückgängig/Wiederholen, 409-Konflikt, Vergleich). Der Branch lässt sich konfliktfrei mit allen anderen offenen Branches mergen.
Owner

Umgesetzt und abgeschlossen

Issue #7 wurde über PR #17 vorbereitet und nach gemeinsamer Durchsicht manuell in main integriert:

Die ältere Aussage in diesem Issue, Grobbilanzen seien nicht im Projekttransfer enthalten, ist durch die abschließende Entscheidung überholt: Transferformat 2 enthält sie vollständig und remappt beim Duplizieren alle zugehörigen IDs. Logische Snapshots und Snapshot-Restore bleiben dagegen bewusst unverändert und enthalten keine Grobbilanzen.

Weitere festgehaltene Grenzen: kein Einfrieren, Vergleich zunächst nur AV-Wirkleistung in kW, Kostengruppenzuordnung per Präfix, keine Stromkreisnummer und keine Übernahme in die Detailplanung. Datenbank-Backups sichern die neuen Tabellen regulär mit.

Validierung: vollständige Suite mit 499 Tests, fokussierte Transfer-/Migrations-/Grobbilanztests sowie API-Build, Web-Produktionsbuild und TypeScript-Prüfungen erfolgreich.

## Umgesetzt und abgeschlossen Issue #7 wurde über [PR #17](https://git.jappel.io/jappel/leistungsbilanz-ts/pulls/17) vorbereitet und nach gemeinsamer Durchsicht manuell in `main` integriert: - Implementierung: [`5734876`](https://git.jappel.io/jappel/leistungsbilanz-ts/commit/5734876) - Merge in `main`: [`060a203`](https://git.jappel.io/jappel/leistungsbilanz-ts/commit/060a203) - Dokumentation: [`docs/estimate-balance.md`](https://git.jappel.io/jappel/leistungsbilanz-ts/src/branch/main/docs/estimate-balance.md) Die ältere Aussage in diesem Issue, Grobbilanzen seien nicht im Projekttransfer enthalten, ist durch die abschließende Entscheidung überholt: Transferformat 2 enthält sie vollständig und remappt beim Duplizieren alle zugehörigen IDs. Logische Snapshots und Snapshot-Restore bleiben dagegen bewusst unverändert und enthalten keine Grobbilanzen. Weitere festgehaltene Grenzen: kein Einfrieren, Vergleich zunächst nur AV-Wirkleistung in kW, Kostengruppenzuordnung per Präfix, keine Stromkreisnummer und keine Übernahme in die Detailplanung. Datenbank-Backups sichern die neuen Tabellen regulär mit. Validierung: vollständige Suite mit 499 Tests, fokussierte Transfer-/Migrations-/Grobbilanztests sowie API-Build, Web-Produktionsbuild und TypeScript-Prüfungen erfolgreich.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: jappel/leistungsbilanz-ts#7
No description provided.