forked from jappel/leistungsbilanz-ts
Specify Revit assignment dialog and per-project socket limit
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
38019fe087
commit
85cbdbf8e0
2 changed files with 232 additions and 25 deletions
|
|
@ -124,7 +124,7 @@ Zielvertrag:
|
|||
|
||||
```ts
|
||||
interface ExternalModelConfiguration {
|
||||
schemaVersion: 1;
|
||||
schemaVersion: 2;
|
||||
layout: {
|
||||
headerRow: number;
|
||||
firstDataRow: number;
|
||||
|
|
@ -153,6 +153,19 @@ interface ExternalModelConfiguration {
|
|||
}
|
||||
```
|
||||
|
||||
Schema-Version 2 ergänzt nur das Geräteart-Merkmal `isSocket`
|
||||
(Abschnitt 6). Konfigurationen der Version 1 – auch Kopien in Importbatches,
|
||||
History-Commands und Snapshots – werden beim Lesen hochgestuft.
|
||||
|
||||
Der Steckdosen-Höchstwert je Stromkreis ist **keine** Revit-Einstellung,
|
||||
sondern eine allgemeine Projekteinstellung der Leistungsbilanz:
|
||||
`Project.maxSocketsPerCircuit` (positive ganze Zahl oder `null` = keine
|
||||
Grenze), auftraggeberabhängig und in den Projekteinstellungen gepflegt. Er
|
||||
wird über `project.update-settings` (Schema-Version 4) geändert; Versionen
|
||||
1–3 bleiben ausführbar und lassen den Wert unverändert. Snapshot-Schema 11
|
||||
und der Projekttransfer enthalten ihn; ältere Stände werden mit `null`
|
||||
hochgestuft.
|
||||
|
||||
Standardzuordnung:
|
||||
|
||||
| Schlüssel | Bedeutung | Standardspalte |
|
||||
|
|
@ -192,6 +205,13 @@ Leistung je Einheit in W, GZF, cosPhi und Kostengruppe. Jede exakte
|
|||
`Familie und Typ`-Regel verweist auf genau eine Geräteart und verwendet die
|
||||
Mengenregel `1` oder `socketCount`.
|
||||
|
||||
Jede Geräteart trägt zusätzlich das Merkmal `isSocket` („Steckdose“). Nur
|
||||
Objekte solcher Gerätearten zählen für den Steckdosen-Höchstwert je
|
||||
Stromkreis (Abschnitt 11), unabhängig von ihrer Kategorie. Beim Hochstufen
|
||||
einer Konfiguration der Version 1 und beim Anlegen im Wizard wird `isSocket`
|
||||
mit `true` vorbelegt, wenn eine Familienregel dieser Geräteart die
|
||||
Mengenregel `socketCount` verwendet; der Planer kann das Merkmal ändern.
|
||||
|
||||
Mehrere Revit-Familien dürfen auf dieselbe Geräteart zeigen. Jedes Revit-
|
||||
Objekt bleibt trotzdem einzeln über seine Worksharing-ID nachverfolgbar.
|
||||
Unbekannte Familien müssen im Importwizard zugeordnet oder über eine neue
|
||||
|
|
@ -306,33 +326,167 @@ aktuellen Row-Werte als Planungswerte und entsprechende Overrides.
|
|||
|
||||
## 11. Editor-Zuordnung und Löschen
|
||||
|
||||
Umsetzungsstand R7: Der Stromkreislisteneditor lädt die kompakte Projektliste
|
||||
gemeinsam mit dem Baum, gruppiert unzugeordnete Objekte des aktuellen
|
||||
Verteilers im Client und bietet Gruppen sowie einzelne Worksharing-IDs als
|
||||
Drag-Quelle an. Drop auf Row, Circuit und freien Gruppenbereich verwendet die
|
||||
drei persistenten Zuordnungscommands. Row-Badges zeigen die Linkzahl; Lösen
|
||||
kopiert die aktuellen Row-Planungswerte als Overrides. Row-, Circuit- und
|
||||
Gruppenlöschungen speichern die vollständigen Linkübergänge im Forward- und
|
||||
Inverse-Command. Raum- und Verteilerlöschungen prüfen externe Referenzen
|
||||
explizit.
|
||||
Stand 30.10.2026: Dieser Abschnitt ersetzt den R7-Editorbereich (rechter
|
||||
Drawer mit Gruppen-Drag direkt ins Grid). Der Drawer konnte gleichartige
|
||||
Objekte eines Raums nur gesamt oder einzeln zuordnen und kannte keinen
|
||||
Steckdosen-Höchstwert. Die drei R7-Zuordnungscommands bleiben für gespeicherte
|
||||
History-Einträge ausführbar; die Editor-UI verwendet sie nicht mehr.
|
||||
Umsetzung: Pakete R11–R14 im [Phasenplan](revit-excel-phase-14-plan.md).
|
||||
|
||||
Der rechte, überlagernde Editorbereich zeigt unzugeordnete konfliktfreie
|
||||
Objekte des aktuellen Verteilers. Gruppierungsschlüssel sind interner Raum,
|
||||
Auswahlkenner, Geräteart, Kategorie, identische Planungswerte und kompatibler
|
||||
ProjectDevice-Link. Die Anzeige nennt Summe der wirksamen Mengen und Zahl der
|
||||
externen Objekte. Gruppen sind aufklappbar; Einzel- und Mehrfachauswahl sowie
|
||||
Filter bleiben möglich.
|
||||
### 11.1 Grundsatz
|
||||
|
||||
Drag-and-drop:
|
||||
- Ein Revit-Objekt (eine Familieninstanz, z. B. eine Doppelsteckdose mit
|
||||
wirksamer Menge 2) ist unteilbar. Es ist mit höchstens einer Row verknüpft
|
||||
und gehört damit immer zu genau einem Stromkreis.
|
||||
- Aufgeteilt wird ausschließlich auf Objektebene: Die 8 Doppelsteckdosen eines
|
||||
Raums (16 wirksame Steckdosen) können auf mehrere Stromkreise verteilt
|
||||
werden, eine einzelne Doppelsteckdose nie.
|
||||
- Zugeordnet wird über den Zuordnungsdialog. Drag-and-drop findet innerhalb
|
||||
des Dialogs statt, nicht direkt aus einer Seitenleiste ins Grid.
|
||||
|
||||
- auf vorhandene Row: genau diese Row;
|
||||
- auf Circuit: neue Row mit `manualQuantity = 0`;
|
||||
- auf freien Bereich: neuer Circuit, Schutz und Row in einem Command.
|
||||
### 11.2 Zuordnungsdialog „Revit-Objekte zuordnen“
|
||||
|
||||
Neue IDs und BMK werden einmal geplant; Redo rechnet sie nicht neu. Neue Rows
|
||||
übernehmen den bestätigten Gruppenzustand und die Summe der effektiven Mengen.
|
||||
An Rows zeigt ein Hinweis die Zahl verknüpfter Revit-Objekte; einzelne Objekte
|
||||
können ausdrücklich gelöst werden.
|
||||
Öffnen:
|
||||
|
||||
- Werkzeugleiste des Editors: „Revit-Objekte zuordnen (N)“, N = Zahl der
|
||||
zuordenbaren Objekte des Verteilers;
|
||||
- Kontextmenü eines Stromkreises oder einer Row: derselbe Dialog mit
|
||||
vorausgewähltem und sichtbar markiertem Ziel.
|
||||
|
||||
Gezeigt werden vorhandene (`present`), unzugeordnete Objekte, deren
|
||||
effektiver Verteiler der aktuelle Verteiler ist. Objekte ohne Verteiler
|
||||
erscheinen nur als Hinweis „N Objekte ohne Verteiler – auf der Revit-Seite
|
||||
zuordnen“.
|
||||
|
||||
Der Dialog ist großflächig und zweigeteilt.
|
||||
|
||||
Links, Objektbereich:
|
||||
|
||||
- Baum Raum → Gruppe → Objekt. Raumknoten zeigen Nummer, Name und die Summe
|
||||
der wirksamen Steckdosen. Gruppen verwenden die Schlüssel interner Raum,
|
||||
Auswahlkenner, Geräteart, Kategorie, identische Planungswerte und
|
||||
ProjectDevice-Link und zeigen Objektzahl und Mengensumme.
|
||||
- Jede Objektzeile zeigt `Familie und Typ`, die wirksame Menge (z. B. „2ד)
|
||||
und die Worksharing-ID (gekürzt, vollständig im Tooltip).
|
||||
- Checkboxen auf allen Ebenen (Raum und Gruppe dreiwertig). Klick wählt aus,
|
||||
Strg+Klick schaltet um, Umschalt+Klick wählt einen Bereich.
|
||||
- Suche über Raum, Familie, Auswahlkenner und Worksharing-ID; Filter
|
||||
Geräteart und „nur Steckdosen“.
|
||||
- Fußzeile: „6 Objekte · 12 Steckdosen · 2 Räume“ und die Aktionen
|
||||
„Zuweisen an …“ und „Automatisch aufteilen …“.
|
||||
|
||||
Rechts, Zielbereich:
|
||||
|
||||
- Stromkreise des Verteilers nach Stromkreisgruppen, je Zeile BMK, Name und
|
||||
Belegung „6 / 8 Steckdosen“ (ohne Höchstwert nur die Zahl).
|
||||
- Aufklappbar bis auf die Rows einschließlich geplanter neuer Rows.
|
||||
- Je Gruppe ein Ablagefeld „Neuer Stromkreis“.
|
||||
- Geplante, noch nicht übernommene Zuordnungen sind farblich markiert und
|
||||
lassen sich einzeln zurücknehmen oder per Drag zurück in den Objektbereich
|
||||
legen.
|
||||
|
||||
### 11.3 Drag-and-drop und Tastatur
|
||||
|
||||
- Die aktuelle Auswahl (oder das gezogene Objekt, wenn es nicht ausgewählt
|
||||
ist) wird auf ein Ziel im Zielbereich gezogen:
|
||||
- auf eine Row: genau diese Row;
|
||||
- auf einen Stromkreis: Row-Bildung nach 11.4;
|
||||
- auf „Neuer Stromkreis“: neuer Stromkreis in dieser Gruppe, Row-Bildung
|
||||
nach 11.4.
|
||||
- Während des Ziehens sind gültige Ziele hervorgehoben. Ungültige Ziele
|
||||
(andere Kategorie) sind ausgegraut und nennen den Grund im Tooltip. Ziele,
|
||||
deren Höchstwert überschritten würde, bleiben gültig, zeigen aber die
|
||||
künftige Belegung in Warnfarbe, z. B. „10 / 8“.
|
||||
- Tastaturalternative: „Zuweisen an …“ öffnet eine Zielauswahl mit allen
|
||||
Stromkreisen und „Neuer Stromkreis in Gruppe …“.
|
||||
- Ein Drop schreibt nichts. Er erweitert den lokalen Zuordnungsplan des
|
||||
Dialogs (11.7).
|
||||
|
||||
### 11.4 Row-Bildung im Zielstromkreis
|
||||
|
||||
Die einem Stromkreis zugewiesenen Objekte werden nach den Gruppenschlüsseln
|
||||
aus 11.2 zusammengefasst; jede Teilgruppe ergibt einen Row-Vorschlag. Objekte
|
||||
aus mehreren Räumen ergeben damit mehrere Rows im selben Stromkreis.
|
||||
|
||||
- Existiert im Stromkreis eine Row mit gleichem Raum, gleicher Kategorie,
|
||||
gleichem Auswahlkenner und kompatiblem ProjectDevice-Link, wird sie als Ziel
|
||||
vorgeschlagen. Der Planer kann je Vorschlag auf „neue Row“ umstellen.
|
||||
- Neue Rows erhalten `manualQuantity = 0`, den Gruppenzustand als
|
||||
Planungswerte und die Summe der wirksamen Mengen als Anzahl.
|
||||
- Abweichende Planungswerte gegenüber einer bestehenden Row sind Konflikte
|
||||
(11.7).
|
||||
|
||||
### 11.5 Steckdosen-Höchstwert
|
||||
|
||||
- Grundlage ist die Projekteinstellung `maxSocketsPerCircuit`
|
||||
(Abschnitt 5). Im Dialog wird er angezeigt; geändert wird er in den
|
||||
Projekteinstellungen.
|
||||
- Belegung eines Stromkreises = Summe der wirksamen Mengen aller verknüpften
|
||||
und geplanten Objekte, deren Geräteart `isSocket` trägt, über alle Rows des
|
||||
Stromkreises. Manuelle Mengenanteile zählen nicht mit.
|
||||
- Der Höchstwert ist eine Warnung, keine Sperre. Eine manuelle Zuweisung über
|
||||
den Höchstwert ist erlaubt, muss aber vor der Übernahme ausdrücklich
|
||||
bestätigt werden.
|
||||
- Die automatische Aufteilung überschreitet den Höchstwert nie. Einzige
|
||||
Ausnahme ist ein Einzelobjekt, das allein größer ist; es erhält einen
|
||||
eigenen Stromkreis und wird als Überschreitung markiert.
|
||||
|
||||
### 11.6 Automatisch aufteilen
|
||||
|
||||
„Automatisch aufteilen …“ verteilt die ausgewählten Steckdosen-Objekte auf
|
||||
neue Stromkreise einer gewählten, kategoriegleichen Stromkreisgruppe.
|
||||
Nicht-Steckdosen in der Auswahl bleiben unberührt und werden genannt. Der
|
||||
Höchstwert ist mit dem Projektwert vorbelegt und für diesen Lauf änderbar;
|
||||
ohne Projektwert muss er eingegeben werden.
|
||||
|
||||
Raumweises Verfahren:
|
||||
|
||||
1. Räume nach Raumnummer (natürliche Sortierung), Objekte ohne Raum zuletzt;
|
||||
innerhalb eines Raums nach Worksharing-ID.
|
||||
2. Passt ein Raum vollständig in die Restkapazität des aktuellen neuen
|
||||
Stromkreises, kommt er dorthin.
|
||||
3. Sonst beginnt ein neuer Stromkreis, sofern der Raum vollständig in einen
|
||||
leeren Stromkreis passt.
|
||||
4. Sonst wird der Raum objektweise auf so viele neue Stromkreise verteilt wie
|
||||
nötig, ohne ein Objekt zu teilen.
|
||||
|
||||
Das Ergebnis ist ein Plan, keine Übernahme. Er erscheint im Zielbereich und
|
||||
kann per Drag-and-drop nachbearbeitet werden. Vorhandene Stromkreise werden
|
||||
nicht automatisch aufgefüllt.
|
||||
|
||||
### 11.7 Zuordnungsplan und Übernahme
|
||||
|
||||
- Der Dialog sammelt alle Zuweisungen lokal. Nichts wird geschrieben, bevor
|
||||
„Übernehmen“ bestätigt ist. Schließen mit offenem Plan fragt nach.
|
||||
- Vor der Übernahme listet eine Prüfansicht jeden Planungswert-Konflikt
|
||||
(Row, Feld, Row-Wert, Objektwert) und jede Höchstwert-Überschreitung. Beide
|
||||
verlangen eine ausdrückliche Bestätigung. Ohne Konflikte und
|
||||
Überschreitungen genügt „Übernehmen“.
|
||||
- Die Übernahme ist ein atomarer Command
|
||||
`external-object.apply-assignment-plan` mit `expectedRevision` und genau
|
||||
einem Undo-Schritt. Er enthält:
|
||||
- die vollständigen Snapshots neuer Stromkreise (stabile UUID,
|
||||
Gruppe, BMK, abgeleitete Spannung, erforderlicher Standardschutz);
|
||||
- die vollständigen Snapshots neuer Rows;
|
||||
- die erwarteten Vorher-Zustände aller betroffenen Rows und Objekte;
|
||||
- alle Link-Übergänge, die ausdrücklich bestätigten Konflikte und die
|
||||
Mengenänderungen bestehender Rows.
|
||||
- BMKs neuer Stromkreise werden beim Planen einmal vergeben: höchste
|
||||
Nummer der Gruppe + 1, + 2, … ohne Lückenfüllung. Redo rechnet sie nicht neu.
|
||||
- Die Inverse entfernt nur unverändert gebliebene erzeugte Stromkreise und
|
||||
Rows und stellt Links und Mengen exakt wieder her.
|
||||
- Bei 409 lädt der Dialog neu, prüft den Plan erneut und entfernt nicht mehr
|
||||
gültige Zuweisungen mit Hinweis; gültige bleiben erhalten.
|
||||
|
||||
### 11.8 Verknüpfte Objekte an der Row
|
||||
|
||||
- An Rows zeigt das Badge „Revit N“ die Zahl verknüpfter Objekte. Ein Klick
|
||||
öffnet eine Liste mit Worksharing-ID, Familie, Raum und wirksamer Menge.
|
||||
- In der Liste lassen sich einzelne Objekte oder alle ausdrücklich lösen.
|
||||
Gelöste Objekte erhalten die aktuellen Row-Werte als Planungswerte und
|
||||
Overrides.
|
||||
- „Anzahl“ bleibt gesperrt; „Anz. manuell“ und „Anz. Revit“ gelten wie
|
||||
bisher.
|
||||
|
||||
Wird eine Row, ein Circuit oder eine Gruppe mit verknüpften Revit-Objekten
|
||||
gelöscht, zeigt die UI vor Bestätigung:
|
||||
|
|
|
|||
|
|
@ -19,6 +19,10 @@ Der alte CSV-Plan 14.0–14.6 ist abgelöst und wird nicht fortgeschrieben.
|
|||
| R8 | abgeschlossen | Rückgabe-Excel für alle, abweichende oder ausgewählte Objekte und append-only Exportnachweis sind umgesetzt. |
|
||||
| R9 | abgeschlossen | Vollständiger Folgeimport nach exakter Worksharing-ID mit Quellentscheidungen, fehlenden Objekten, bestätigtem Löschen und persistentem Undo/Redo. |
|
||||
| R10 | abgeschlossen | Ende-zu-Ende-Kette, 5.000-Objekte-Lasttest, gebatchte Zustandspersistenz und Abschlussdokumentation. |
|
||||
| R11 | geplant | Projekteinstellung `maxSocketsPerCircuit` und Geräteart-Merkmal `isSocket` samt Hochstufung und Einstellungs-UI. |
|
||||
| R12 | geplant | Reines Planungsmodul für Row-Bildung, Belegung, Konflikte und raumweise Aufteilung. |
|
||||
| R13 | geplant | Atomarer Command `external-object.apply-assignment-plan` mit Route und exakter Inverse. |
|
||||
| R14 | geplant | Zuordnungsdialog mit Drag-and-drop und Plan, Row-Objektliste mit Einzel-Lösen, Entfernen des R7-Drawers. |
|
||||
|
||||
## R0 – Audit
|
||||
|
||||
|
|
@ -223,7 +227,56 @@ ist für alle vollständigen External-Model-Zustandspfade behoben. Messwerte und
|
|||
Abnahme stehen in [R10-Abnahme](revit-excel-r10-validation.md). Phase 14 ist
|
||||
damit abgeschlossen.
|
||||
|
||||
## Pflichtprüfungen je Paket R1–R10
|
||||
## R11–R14 – Zuordnungsdialog und Steckdosen-Höchstwert
|
||||
|
||||
Fachgrundlage: Abschnitte 5, 6 und 11 der
|
||||
[Anforderungen](revit-excel-integration-requirements.md), Stand 30.10.2026.
|
||||
Anlass: Der R7-Drawer kann gleichartige Objekte eines Raums nur gesamt oder
|
||||
einzeln zuordnen. Steckdosen müssen objektweise und unter einem
|
||||
auftraggeberabhängigen Höchstwert auf mehrere Stromkreise verteilt werden.
|
||||
|
||||
### R11 – Einstellungen
|
||||
|
||||
- Projekteinstellung `maxSocketsPerCircuit`: Migration `0018` (nullable
|
||||
Spalte), `project.update-settings` Schema-Version 4 (1–3 bleiben ausführbar
|
||||
und lassen den Wert unverändert), Snapshot-Schema 11 (1–10 mit `null`
|
||||
hochgestuft), Projekttransfer, PUT-Route und Projekteinstellungsdialog;
|
||||
- `ExternalModelConfiguration` Schema-Version 2 mit `deviceTypes[].isSocket`;
|
||||
Version 1 wird beim Lesen aus den `socketCount`-Regeln hochgestuft
|
||||
(gespeicherte Konfiguration, Importbatch-Kopien, History-Commands,
|
||||
Snapshots, Transfer);
|
||||
- Revit-Einstellungen: Merkmal „Steckdose“ je Geräteart; Wizards belegen es
|
||||
vor.
|
||||
|
||||
### R12 – Planungsmodul
|
||||
|
||||
- reines, importfreies Modul für Client und Server;
|
||||
- Row-Bildung im Zielstromkreis, Belegung je Stromkreis, Konfliktliste,
|
||||
Kategorieprüfung und raumweise Aufteilung nach Anforderung 11.6;
|
||||
- fokussierte Unit-Tests, u. a.: 8 Doppelsteckdosen bei Grenze 8 ergeben
|
||||
zwei Stromkreise mit je 4 Objekten; Räume werden nur bei Bedarf geteilt;
|
||||
ein Einzelobjekt über der Grenze erhält einen eigenen Stromkreis.
|
||||
|
||||
### R13 – Command
|
||||
|
||||
- `external-object.apply-assignment-plan` über die gemeinsame
|
||||
Project-Command-Transaktionsgrenze und
|
||||
`external-object-assignment.persistence.ts`;
|
||||
- serverseitige Neuprüfung mit dem R12-Modul; Konflikte und Überschreitungen
|
||||
nur mit ausdrücklich gelisteter Bestätigung;
|
||||
- strikte zod-Eingabe, Routentests (nicht angemeldet, fremdes Objekt,
|
||||
ungültige Eingabe), SQLite-Commit/Rollback, Undo/Redo nach Neustart.
|
||||
|
||||
### R14 – Editor-UI
|
||||
|
||||
- Zuordnungsdialog nach Anforderung 11.2–11.7 mit lokalem Plan, Drag-and-drop,
|
||||
Tastaturalternative, Prüfansicht und 409-Neuprüfung;
|
||||
- Kontextmenü-Einstieg mit vorausgewähltem Ziel;
|
||||
- Row-Badge öffnet die Objektliste mit Einzel- und Gesamt-Lösen;
|
||||
- R7-Drawer und Grid-Drop für Revit-Objekte entfernen; AGENTS.md und
|
||||
Architekturdokumentation nachziehen.
|
||||
|
||||
## Pflichtprüfungen je Paket R1–R14
|
||||
|
||||
```text
|
||||
fokussierte Tests
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue