12 KiB
Kontext für die Revit-Anforderungsplanung
Zweck dieser Datei
Diese Datei ist eine kompakte Übergabe an ein anderes LLM. Sie soll dabei helfen, gemeinsam mit dem Anwender die fachlichen und technischen Anforderungen für einen zukünftigen Revit-Datenaustausch zu klären.
Die Revit-Schnittstelle ist noch nicht implementiert. Das LLM soll zunächst den tatsächlichen Arbeitsablauf erfragen, Unklarheiten sichtbar machen und daraus eine neue, überprüfbare Arbeitsanweisung erstellen. Es soll weder ein Dateiformat noch ein Datenbankschema oder eine UI ungefragt festlegen.
Produkt und fachliches Modell
Leistungsbilanz ist eine Webanwendung für die elektrische Ausführungsplanung. Ihr Kern ist ein tabellenähnlicher Stromkreislisten-Editor für Verteilungen.
Das unterstützte Laufzeitmodell ist:
Project
├── Floor
│ └── Room
├── ProjectDevice
└── DistributionBoard
└── CircuitList
└── CircuitSection
└── Circuit
└── CircuitDeviceRow
Wichtige fachliche Grenzen:
- Ein
Circuitist nicht dasselbe wie eine Gerätezeile. - Ein Stromkreis kann null, eine oder mehrere
CircuitDeviceRowenthalten. - BMK (
equipmentIdentifier), Schutz- und Kabeldaten gehören zum Stromkreis. - Menge, Einzelleistung, Gleichzeitigkeitsfaktor, cosPhi, Raum, Kostengruppe und Kategorie gehören zur Gerätezeile.
- Ein
ProjectDeviceist eine wiederverwendbare, projektbezogene Vorlage. - Eine Gerätezeile kann mit einem Projektgerät verknüpft sein, behält aber lokale Werte und ausdrücklich erfasste Abweichungen.
- Änderungen eines Projektgeräts überschreiben verknüpfte Zeilen niemals automatisch. Eine Synchronisierung benötigt Vorschau und Benutzerauswahl.
- Manuelle, nicht mit einem Projektgerät verknüpfte Gerätezeilen sind regulär erlaubt.
- Bestehende BMKs und stabile UUIDs dürfen nicht automatisch verändert werden.
- Neunummerierung ist immer eine ausdrückliche Benutzeraktion.
IFCGUIDdarf nicht als BMK oder als Ersatz für eine interne UUID verwendet werden.
Für einen späteren Revit-Austausch besonders relevante Daten sind:
- Projekt: Name, interne/externe Projektnummer, Bauherr, Beschreibung, Projektspannungen.
- Geschoss und Raum: interne UUID, Name beziehungsweise Raumnummer und Raumname.
- Verteilung: interne UUID, Name, Etage, Netzart und Gleichzeitigkeitsfaktor.
- Stromkreis: interne UUID, BMK, Anzeigename, Bereich, Schutz-, Kabel-, Spannungs-, Steuerungs-, Status- und Bemerkungsdaten.
- Gerätezeile: interne UUID, optionale Projektgeräteverknüpfung, Name, Anzeigename, Phasenart, Anschlussart, Kostengruppe, Kategorie, Geschoss, Raum, Menge, Einzelleistung, Gleichzeitigkeitsfaktor, cosPhi und Bemerkung.
- Projektgerät: interne UUID sowie die wiederverwendbaren Gerätewerte.
Die Phasenart ist fachlich 1-phasig oder 3-phasig. Die Spannung wird daraus
und aus den Projekteinstellungen abgeleitet; freie Sonderspannungen sind im
aktuellen Produkt nicht vorgesehen.
Aktuelle technische Architektur
- Frontend: Next.js App Router, React und TypeScript unter
src/appundsrc/frontend. - API: Express und Zod unter
src/server. - Fachregeln und typisierte Commands:
src/domain. - Persistenz: SQLite, Drizzle und Repository-Adapter unter
src/db. - Laufzeitkomposition konkreter Repositories:
src/server/composition. - Lokaler Betrieb: Browser/Next.js auf Port 3001, Express-API auf Port 3000,
SQLite-Datei unter
data/leistungsbilanz.db. - Docker Compose wird für die lokale Entwicklung unterstützt.
- PostgreSQL und Mehrbenutzerbetrieb sind noch nicht umgesetzt.
Der zentrale Editor liegt unter:
src/app/projects/[projectId]/circuit-lists/[circuitListId]/tree-edit/page.tsx
src/frontend/components/circuit-tree-editor.tsx
Frontend-Aktionen werden als validierte API-Commands ausgeführt. Fachregeln
liegen in Domain-Services; konkrete SQLite-Zugriffe bleiben in
Persistenzadaptern. Neue Revit-Fachlogik darf deshalb nicht direkt von
better-sqlite3, React-Komponenten oder globalen Datenbankinstanzen abhängen.
Revisionen, Undo/Redo und Sicherungspunkte
Alle normalen projektbezogenen Änderungen laufen über eine gemeinsame Command- und Transaktionsgrenze:
Fachänderung + inverses Kommando + Revision + Undo/Redo-Übergang
Diese Bestandteile werden atomar geschrieben oder vollständig zurückgerollt.
Jedes Projekt besitzt eine monoton steigende currentRevision. Schreibbefehle
geben die erwartete Revision mit, damit veraltete Clients keine neueren
Änderungen überschreiben.
Undo/Redo ist projektweit persistent und funktioniert nach Reload oder Anwendungsneustart. Zusätzlich gibt es:
- eine unveränderliche Revisions-Timeline;
- benannte und automatische logische Projektsnapshots;
- wiederherstellbare Snapshots mit Prüfsumme;
- einen portablen, versionierten JSON-Projekttransfer.
Ein angewendeter Revit-Import muss später dieselbe Integritätsgrenze verwenden: Die bestätigten Änderungen sollen als ein nachvollziehbarer Projekt-Command beziehungsweise als ein fachlich definierter Änderungssatz atomar, revisioniert und rückgängig machbar sein.
Klare Abgrenzung zum vorhandenen JSON-Projekttransfer
Der vorhandene JSON-Export/-Import überträgt den vollständigen internen Projektzustand. Er dient Sicherung, Wiederherstellung und Duplizierung eines Projekts innerhalb von Leistungsbilanz.
Dieser Projekttransfer ist kein Revit-Austauschformat. Er enthält interne Strukturen und UUIDs und soll nicht ohne bewusste Entscheidung als Grundlage für CSV-Dateien oder Revit-Parameter verwendet werden.
Der zukünftige Revit-Workflow soll dagegen externe Modellobjekte anhand stabiler externer Identitäten wiedererkennen, ausgewählte Planungswerte zuordnen und Ergebnisse so exportieren, dass Revit sie wieder den richtigen Objekten zuweisen kann.
Bereits vereinbarte Leitplanken für den externen Modellaustausch
Diese Punkte gelten als Architekturvorgaben, noch nicht als fertiges Implementierungsdesign:
- Ein Import schreibt niemals ungeprüft direkt in Stromkreise oder Gerätezeilen.
- Eingelesene Daten landen zuerst in einem Staging-/Vorschaubereich.
- Vor der Übernahme werden neue, geänderte, fehlende, doppelte und widersprüchliche Objekte angezeigt.
- Wiederholte Importe müssen Objekte deterministisch anhand der externen Quelle und einer stabilen Identität, voraussichtlich IFCGUID, erkennen.
- Die Eindeutigkeit einer IFCGUID ist mindestens auf Projekt und externe Modellquelle begrenzt; die genaue Quellendefinition ist noch zu klären.
- Importierte Quellwerte und lokal in Leistungsbilanz geplante Werte müssen unterscheidbar bleiben.
- Lokale Planungswerte dürfen niemals still überschrieben werden.
- Verknüpfungen zwischen externen Objekten und internen Fachobjekten müssen ausdrücklich modelliert werden.
- Fehlende oder widersprüchliche Identitäten werden gemeldet und niemals automatisch einem anderen Objekt zugeordnet.
- Ein Export bewahrt IFCGUID und erforderliche Quellidentitäten, damit Revit die Werte deterministisch zurückschreiben kann.
- Ein Export bezieht sich auf eine bekannte Projektrevision.
- Große Datenmengen allein erzwingen noch keinen Wechsel von SQLite zu PostgreSQL. PostgreSQL wird relevant bei Mehrbenutzerbetrieb, zentralem Serverbetrieb oder unabhängigen Hintergrundjobs.
Als mögliche, aber noch nicht beschlossene Konzepte wurden bisher genannt:
ExternalModelSourceExternalImportBatchExternalModelObjectExternalObjectLinkExternalParameterMappingExternalExportBatch
Diese Namen beschreiben Verantwortlichkeiten. Das andere LLM darf sie hinterfragen und verbessern, soll sie aber nicht als bereits vorhandene Tabellen behandeln.
Auftrag an das andere LLM
Erarbeite die Anforderungen dialogorientiert mit dem Anwender. Beginne mit dem realen Ablauf in Revit und kläre danach schrittweise mindestens:
- Welche Revit-Objekte beziehungsweise Kategorien werden exportiert?
- Wie entsteht die Ausgangsdatei in Revit und wie sieht sie technisch aus (CSV-Dialekt, Trennzeichen, Encoding, Dezimalformat, Kopfzeilen, Revit-Versionen)?
- Welche Identitäten stehen zur Verfügung: IFCGUID, Revit
ElementId, Typ-ID, Modell-/Dateikennung oder weitere Schlüssel? - Wie werden Hauptmodell, Teilmodelle, verknüpfte Modelle, Modellkopien und aktualisierte Revit-Dateien unterschieden?
- Welche Parameter kommen aus Revit und welche Werte werden ausschließlich in Leistungsbilanz geplant?
- Welche internen Ziele können externe Objekte erhalten: Projektgerät, Gerätezeile, Stromkreis, Raum, Verteilung oder weitere Entitäten?
- Werden externe Objekte einzeln oder gesammelt einem Stromkreis, Projektgerät, Raum oder einer Verteilung zugeordnet?
- Welche Werte sollen nach Revit zurückgeschrieben werden, in welchen Einheiten und unter welchen Revit-Parameternamen?
- Muss die ursprüngliche Datei einschließlich unbekannter Spalten, Zeilenreihenfolge und Formatierung erhalten werden, oder darf eine neue Rückgabedatei erzeugt werden?
- Wie sollen Spalten-/Parametermappings erstellt, gespeichert, wiederverwendet und zwischen Projekten geteilt werden?
- Was gilt bei erneutem Import für neue, geänderte, gelöschte, verschobene, doppelte oder nicht mehr sichtbare Revit-Objekte?
- Wer gewinnt bei Konflikten zwischen neuem Revit-Wert und lokaler Änderung? Welche Konflikte dürfen automatisch gelöst werden und welche benötigen eine Auswahl?
- Welche Vorschau, Filter, Sammelaktionen und Bestätigungen benötigt der Anwender vor der Übernahme?
- Welche fachlichen Validierungen und Pflichtfelder müssen eine Übernahme verhindern oder nur eine Warnung erzeugen?
- Welche Dateigrößen, Objektzahlen und Laufzeiten sind realistisch?
- Müssen Import und Export synchron im Browser laufen oder werden später Hintergrundjobs benötigt?
- Welche Informationen müssen für Nachvollziehbarkeit, Undo/Redo, Versionshistorie und Support gespeichert werden?
- Welche konkreten End-to-End-Beispiele und Fehlerfälle dienen als Abnahmekriterien?
Stelle Rückfragen in kleinen, zusammenhängenden Blöcken. Unterscheide in deinen Notizen ausdrücklich:
- vom Anwender bestätigte Anforderungen;
- sinnvolle Vorschläge;
- offene Entscheidungen;
- technische Folgerungen;
- bewusst nicht betrachtete spätere Ausbaustufen.
Erwartetes Ergebnis der Anforderungsrunde
Erstelle am Ende eine neue Arbeitsanweisung für das implementierende LLM. Sie soll mindestens enthalten:
- Ziel, Umfang und ausdrücklich ausgeschlossene Funktionen;
- vollständigen Anwenderworkflow für Erstimport, Zuordnung, Folgeimport und Rückexport;
- vereinbartes Dateiformat mit einem anonymisierten Beispiel;
- Feld- und Einheitenmapping einschließlich Richtung und Datenhoheit;
- Identitäts-, Matching- und Quellmodell;
- Regeln für neue, geänderte, fehlende und doppelte Objekte;
- Konflikt-, Validierungs- und Freigaberegeln;
- UI-Ablauf für Staging, Vorschau, Zuordnung und Bestätigung;
- Anforderungen an Revision, Atomarität, Undo/Redo und Audit;
- vorgeschlagene Modul- und Persistenzgrenzen, ohne bestehende Architekturregeln zu umgehen;
- schrittweise Implementierungsphasen mit überprüfbaren Abnahmekriterien;
- offene Punkte, die vor dem jeweiligen Implementierungsschritt geklärt werden müssen.
Die Arbeitsanweisung soll noch keinen Code enthalten. Sie muss klar markieren, welche Entscheidungen der Anwender tatsächlich getroffen hat und welche Teile nur Architekturvorschläge des LLM sind.
Weiterführende Projektdokumente
AGENTS.md– verbindliche Domänen- und Implementierungsregelndocs/current-architecture.md– vollständiger aktueller Laufzeit- und Command-Pfaddocs/project-history-and-external-model-architecture.md– bisherige Zukunftsrichtung für Versionierung, externes Modell und PostgreSQLdocs/spec/01-domain-context.md– fachlicher Kontextdocs/spec/03-data-model-concept.md– Datenmodellkonzeptdocs/spec/05-linked-devices-and-sync.md– Regeln für Projektgeräte und kontrollierte Synchronisierungdocs/spec/07-implementation-phases-todo.md– Roadmap, insbesondere Phase 13docs/circuit-list-editor-known-limitations.md– noch nicht implementierte Funktionen