Replace the Revit drawer with the assignment dialog

- RevitAssignmentDialog: objects as room/group/object with multi-select,
  filters and drag-and-drop or keyboard assignment onto rows, circuits or
  new circuits; room-wise automatic split under the socket limit; local
  plan with review of conflicts and limit overruns, one command on apply
  and re-check after a revision conflict.
- Row badge and context menu list linked objects and detach single
  objects or all; the context menu opens the dialog for a circuit.
- Remove the R7 drawer and direct grid drops; update AGENTS.md, API and
  architecture docs and mark R11-R14 complete.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Julian Appel 2026-10-30 21:39:27 +01:00
parent fd45a1caeb
commit 191455c745
12 changed files with 1885 additions and 157 deletions

View file

@ -736,6 +736,36 @@ SQLite-Blöcken. Der synthetische Abnahmetest verarbeitet 5.000 Objekte; Details
und Messwerte stehen in
[R10-Abnahme](spec/revit-excel-r10-validation.md).
## Revit-Zuordnungsdialog und Steckdosen-Höchstwert (R11–R14)
Der Stromkreislisteneditor ordnet Revit-Objekte über den Dialog
`RevitAssignmentDialog` zu (Toolbar „Revit-Objekte zuordnen“ oder Kontextmenü
eines Stromkreises). Der frühere rechte Drawer und das Ziehen direkt ins Grid
sind entfernt. Links stehen die zuordenbaren Objekte des Verteilers als Raum →
Gruppe → Objekt mit Mehrfachauswahl und Filtern, rechts die Stromkreise mit
Steckdosenbelegung. Drag-and-drop, „Zuweisen an …“ und „Automatisch aufteilen
…“ ändern nur einen lokalen Plan.
Die Planungsregeln liegen importfrei in `src/shared/revit/assignment-plan.ts`
und werden von Dialog und API gemeinsam genutzt: Zeilenbildung je Raum,
Auswahlkenner, Geräteart, Kategorie, ProjectDevice und Planungswerten,
Konfliktliste, Belegung und die raumweise Aufteilung ohne Teilung eines
Objekts. `POST /api/projects/:projectId/external-model/objects/assignment-plan`
prüft den Plan erneut (strikte zod-Eingabe), verlangt die ausdrückliche
Bestätigung von Planungswert-Konflikten und Höchstwert-Überschreitungen und
schreibt ihn als `external-object.apply-assignment-plan`: neue Stromkreise mit
einmal geplanten BMKs und Standardschutz, neue Rows, Mengenänderungen und alle
Objektlinks in einer Revision. Die history-only Inverse
`external-object.revert-assignment-plan` entfernt nur unverändert gebliebene
erzeugte Struktur.
Der Höchstwert `projects.max_sockets_per_circuit` ist eine allgemeine
Projekteinstellung (Migration `0018`, `project.update-settings` Version 4,
Snapshot-Schema 11). Welche Revit-Gerätearten als Steckdose zählen, legt
`deviceTypes[].isSocket` der Revit-Konfiguration Version 2 fest; Version 1
leitet es aus `socketCount`-Familienregeln ab
(`src/shared/revit/socket-device-types.ts`).
## Historische CSV-Unterlagen
Der vor R3 vorhandene CSV-/IfcGUID-Laufzeitpfad ist entfernt. Seine damalige