← Bibliothek EQUILIBRIUM equilibrium-system.com

KRISTALL DES BAUWESENS

KRISTALL DES BAUWESENS

Unten ist eine Analyse des Aufbaus als Knoten-, Röber- und Kristallsystem. Dies ist ein praktisches Modell, wenn wir die Industrie nicht nur in eine Reihe von Prozessen verwandeln wollen, sondern in eine verwaltete semantische, digitale und organisatorische Architektur.

Grundlogik des Modells

Knoten sind die Punkte der Konzentration von Funktionen, Ressourcen, Entscheidungen, Daten und Verantwortung.

Die Rippen sind die Verbindungen zwischen den Knoten: die Ströme von Materialien, Geld, Dokumenten, Befehlen, Technologien, Menschen und Kontrolle.

Ein Kristall ist eine ganzheitliche Struktur, in der alle Knoten und Rippen nicht chaotisch gesammelt werden, sondern nach den Gesetzen der Symmetrie, Hierarchie, Transparenz und Entwicklung.

Mit anderen Worten:

Der Bau als Graf

Die Bauindustrie ist nicht eine Kette, sondern ein mehrschichtiger Graph.

Es hat:

Zwischen den Rippen bilden sich:

Bauknoten

Knoten der Idee. Es ist der Anfang eines jeden Objekts.

Schlüsselknoten:

Ihre Funktion:

Die Antwort auf die Frage bilden: was bauen wir, warum bauen wir, für wen bauen wir, mit welchen Mitteln und in welcher Logik des Territoriums.

Regulierungsknoten. Ohne sie ist das System nicht legitim.

Dazu gehören:

Ihre Funktion:

Gewährleistung von Zulässigkeit, Sicherheit, Konformität und rechtlichem Rahmen.

Baugruppen

Das sind die Geburtsknoten der Form.

Dazu gehören:

Ihre Funktion:

Übersetzen Sie die Idee in ein genaues System von Lösungen, Zeichnungen, Parametern, Volumen und Einschränkungen.

Ressourcen- und Versorgungsknoten

Ohne sie wird das Objekt nicht materialisiert.

Dazu gehören:

Ihre Funktion:

Bauen Sie alles, was Sie in Umfang, Zeit, Qualität und Preis benötigen.

Produktionsknoten

Es ist das Zentrum der physischen Verkörperung.

Dazu gehören

Ihre Aufgabe ist es, das Objekt in der Realität zu sammeln.

Finanzknoten

Ein Gebäude ohne Finanzrahmen verwandelt sich schnell in Chaos.

Knoten:

Ihre Funktion:

Gewährleistung der Stabilität des Cashflows und der Vorhersehbarkeit der Ausführung.

Betriebseinheiten

In der Tat wird das Objekt nicht für den Bau gebaut, sondern für das Leben nach dem Bau.

Knoten:

Ihre Funktion:

Das Errichtete in ein funktionierendes Umfeld verwandeln.

Knoten der digitalen Umwelt. Das ist der Kern der zukünftigen Industrie.

Knoten:

Ihre Funktion: das System transparent, steuerbar und prädiktiv zu machen.

Bau-Röber

Nun, die Hauptsache ist, dass Knoten ohne Rippen nur tote Punkte sind.

Sinnliche Rippen

Verknüpfen:

Das beantwortet die Frage, warum gerade dieser Bau ein Recht darauf hat.

Rechtliche Rahmenbedingungen

Verknüpfen:

Das sind die Grenzen der Legitimität.

Informationsrippen

Verknüpfen:

Das sind die Datenrippen.

Finanz rippen

Verknüpfen:

Das sind die Rippen des Wertes und des Vertrauens.

Materielle Rippen

Verknüpfen:

Es sind die Rippen der physischen Inkarnation.

Führungsrippen

Verknüpfen:

Es sind die Rippen der Koordination.

Qualität Rippen. Verknüpfen:

Das sind die Rippen der Sicherheit.

RUBRA Feedback

Verknüpfen:

Das sind die Rippen der Evolution.

Kristallbau

Die Frage ist: Was ist ein Kristall?

Der Kristall ist nicht nur ein Netz. Es ist ein harmonisch organisiertes mehrschichtiges System, in dem jeder Knoten einen Ort, eine Funktion, einen Grad an Kommunikation und ein Maß an Verantwortung hat.

Im Kristallbau sind das:

ein einheitliches raumdigitales Modell der Branche, in dem:

Geometrie des Kristallbaus

Wir werden den Kristall mindestens in 7 Facetten zerlegen.

Rand 1. Bedeutung

Was und warum gebaut wird.

Rand 2. Raum

In welchem Land, in welchem Kontext.

Rand 3. Recht

Auf welcher Grundlage und nach welchen Regeln.

Rand 4. Ressourcen

Von wem, auf was und was gebaut wird.

Rand 5. Produktion

Wie genau das Objekt in Etappen zusammengebaut wird.

Rand 6. Geld, mit welchem Geld und mit welcher Nachhaltigkeit.

Rand 7. Lebenszyklus

Wie das Objekt nach der Eingabe lebt. Wenn Sie einen digitalen Kern hinzufügen, erhalten Sie einen Kristall der 8-Ebene, in dem die digitale Umgebung alle anderen Facetten verbindet.

Kristallkern

Jedes Kristallsystem muss einen Kern haben.

Für den Bau eines solchen Kerns sollte sein:

Ein einziger digitaler Betreiber von Bauleistungen

Es ersetzt nicht alle Teilnehmer, sondern wird:

Er ist es, der die Industrie aus einem einzigen Teilnehmersatz in einen einzigen Baukristall verwandelt.

Kristallbau-Formel

Kristallbau = Knoten × Röbra × Regeln × Daten × Zeit

Wo:

Praktische Knotenarchitektur

Kontur A. Der Staat

Knoten:

B-Kontur. Entwicklung und Bestellung

Knoten:

Der C-Ring. Projektierung

Knoten:

Der Kreis D. Produktion

Knoten:

Der Kreis E. Betrieb

Knoten:

Kontur F. Digitale Plattform

Knoten:

Welche Rippen sind die kritischsten

Wenn man hart spricht, bricht die Industrie meistens nicht wegen des Fehlens von Knoten, sondern wegen der schlechten Rippen zusammen.

Die problematischsten Rippen sind normalerweise:

Das heißt, die Hauptaufgabe der Reform besteht nicht nur darin, neue Knoten zu schaffen, sondern die Rippen neu zu sammeln.

Kristall durch den Lebenszyklus des Objekts

Man kann sich ein Objekt als kleinen Kristall vorstellen:

Initiieren. Idee, Bedürfnis, Standort, Modell.

Design-Konzept, Berechnungen, BIM, Schätzungen.

Abstimmung. Prüfung, Genehmigungen, Verbindungen.

Bauen. Lieferung, Arbeit, Kontrolle, Akte.

Eingabe. Inspektionen, Dokumentation, Start.

Betrieb Überwachung, Wartung, Feedback.

Transformation

Rekonstruktion, Modernisierung, Wiederverwendung von Daten. Das ist der Kristall des Lebenszyklus.

In der Sprache der Metaarchitektur

Dann kann man es so formulieren:

Knoten sind Organe des Baukörpers. Die Rippen sind seine Gefäße, Nerven und Kanäle. Der Kristall ist sein Skelett, seine Form, sein Genom und das Gesetz der inneren Harmonie. Ohne Knoten gibt es keine Funktion. Ohne Rippen keine Koordination. Ohne Kristall keine Ganzheit.

Management-Ausgabe

Für das Konzept des Einheitlichen Digitalen Baudienstleisters bedeutet dies: Der Betreiber darf nicht als Website, nicht als Service-Suite oder als Marktplatz im engeren Sinne gebaut werden, sondern als:

Kristall-Plattform-Industrie, wo:

Das Portal soll zeigen können:

Fertige Formulierung für die Aufnahme in das Konzept

Sie können Folgendes einfügen:

Die Bauindustrie wird als ein kristallines Netzwerksystem betrachtet, das aus Knoten, Rippen und einem integrierten digitalen Kern besteht. Knoten repräsentieren die Teilnehmer, Ressourcen, Funktionen und Phasen des Lebenszyklus eines Objekts. Die Rippen spiegeln die materiellen, finanziellen, informativen, rechtlichen und verwaltungstechnischen Verbindungen zwischen ihnen wider. Der Kristall der Branche wird als ganzheitliche Architektur gebildet, in der alle Elemente miteinander verbunden, standardisiert, transparent und in Echtzeit verwaltet werden. Auf dieser Grundlage wird ein einheitlicher digitaler Betreiber von Baudienstleistungen als Systemintegrator geschaffen, der die Koordination, Rückverfolgbarkeit und evolutionäre Entwicklung des Baukomplexes gewährleistet.

Die stärkste Version dieses Modells

Wenn Sie die Idee durchziehen, können Sie 3 des Produktes tun:

Es ist nicht nur eine Beschreibung, sondern eine Grundlage für:



Tabelle: Knoten - Rippen - Funktionen - Digitale Dienstleistungen

1. Kontur: Konzeption und Initiierung

Knoten

RÖBRA (Verbindungen)

Funktion

Digitale Dienstleistungen

Der Auftraggeber

↔ Investor, ↔ Planer

Aufgabe erstellen

LK des Kunden, TZ-Konstrukteur

Investor

↔ Bank, ↔ Projektentwickler

Finanzierung

Finmodell, ROI-Rechner

Grundstück

↔ Kataster, ↔ Stadtentwicklungsplan

Räumliche Basis

Geoanalyse, GIS

Das Konzept

↔ Planung

Idee des Objekts

Konzepterstellung, AI-Nachfrageanalyse

Der Staat

↔ Strategie, ↔ Region

Entwicklungsprioritäten

Programmregister, nationale Projekte

2. Kontur: Regulierung

Knoten

Röbra

Funktion

Digitale Dienstleistungen

Normative Basis

↔ Projekt

Regeln

Normenbasis (GIS), Auto-Check

Prüfung

↔ Planer

Überprüfung

Digitale Expertise

Berechtigungen

↔ Objekt

Legalisierung

EMS (einheitliches Genehmigungssystem)

Aufsichtsbehörden

↔ Bau

Überwachung

Online-Kontrolle, Checklisten

Kataster

↔ Grundstück

Berücksichtigung

Integration mit Rosnestr

3. Umriss: Design

Knoten

Röbra

Funktion

Digitale Dienstleistungen

Architekt

↔ Auftraggeber

Bild

BIM/TIM

Generalplaner

↔ Auftragnehmer

Koordination

CDE (einheitliche Datenumgebung)

Ingenieurwesen

↔ Netzwerke

Technische Lösungen

Berechnungsmodule

Kostenschätzung

↔ Finanzen

Kosten

AutoSmet

BIM-Modell

↔ Bau

Digitaler Zwilling

Lager BIM

4. Kontur: Ressourcen und Versorgung

Knoten

Röbra

Funktion

Digitale Dienstleistungen

Lieferanten

↔ Bau

Materialien

Marketplace

Hersteller

↔ Logistik

Produktion

Produktkatalog

Lagerhallen

↔ Standort

Lagerung

WMS

Logistik

↔ Objekt

Lieferung

Trekking

Technik

↔ Auftragnehmer

Mechanisierung

Technisches Rechnungswesen

5. Kontur: Bau

Knoten

Röbra

Funktion

Digitale Dienstleistungen

Generalunternehmer

↔ Auftraggeber

Verwaltung

ERP Baustellen

Subunternehmer

↔ Generalunternehmer

Arbeit

Register der Auftragnehmer

Der Platz

↔ Ressourcen

Ausführung

Bauleiter

Kontrolle

↔ Qualität

Überprüfung

Mobile Überwachung

Zeitplan

↔ Tatsache

Zeitrahmen

Plan-Tatsache Analytik

6. Kontur: Finanzen

Knoten

Röbra

Funktion

Digitale Dienstleistungen

Die Bank

↔ Projekt

Finanzierung

Projektfinanzierung

Finanzministerium

↔ Auftragsvergabe

Zahlungen

Das Treasury Modul

Escrow

↔ Objekt

Sicherheit

Escrow-Konten

Verträge

↔ Teilnehmende

Verpflichtungen

Intelligente Verträge

Versicherung

↔ Risiken

Schutz

Risk management

7. Kontur: Betrieb

Knoten

Röbra

Funktion

Digitale Dienstleistungen

CC

↔ Objekt

Verwaltung

Betriebssystem

Benutzer

↔ Verwaltungsgesellschaft

Rückmeldung

Mobile Anwendung

Ressourcenversorgung

↔ Objekt

Versorgungsunternehmen

IoT Buchhaltung

Überwachung

↔ System

Kontrolle

Sensoren, IoT

Reparaturen

↔ Verschleiß

Unterstützung

Reparaturplan

8. Kontur: Digitaler Kern (Kristall)

Knoten

Röbra

Funktion

Digitale Dienstleistungen

Einheitliche Plattform

↔ alle Knoten

Integration

Das Portal

Objektregister

↔ Lebenszyklus

Berücksichtigung

Objekt-ID

Teilnehmerregistrierung

↔ Markt

Transparenz

Bewertung

Digitaler Reisepass

↔ Objekt

Daten

Der Pass des Objekts

AI-Analysen

↔ Daten

Vorhersage

Prädiktive Analytik

Marketplace

↔ Ressourcen

Angebote

Handelsplattform

Wie wird man zum Kristall

Das Wichtigste ist nicht nur die Tabelle, sondern die Logik:

Jeder Knoten — digitalisiert → hat ein Profil, Daten, Geschichte

Jede Kante ist transparent → sichtbar ist:

  • Wer mit wem verbunden ist
  • unter welchen Bedingungen
  • Mit welchem Ergebnis

Das gesamte System wird in Echtzeit beobachtet

→ ist bereits ein Betriebssystem für den Bau

Eine wichtige Management-Schlussfolgerung

Jetzt die Branche:

  • Es gibt Knoten.
  • Die Rippen sind chaotisch
  • Der Kristall fehlt

Unser Modell macht:

  • Knoten → strukturiert
  • Kanten → kontrollierbar
  • Kristall → steuerbar

Was es in der Praxis bringt

Die “Black Box” verschwindet → sichtbar, wo das Geld, wo die Materialien, wo die Verzögerung

Die Korruption sinkt stark →, weil die Rippen transparent sind

Beschleunigter Bau → keine Lücken zwischen den Knoten

Die Vorhersage erscheint → System sieht Probleme, bevor sie auftraten

Nächster Schritt (empfohlen)

Schema (visueller Kristall) - wie das System wirklich aussieht

Plattformarchitektur - Module, API, Rollen

MVP Portal — zumindest:

  • Registrierung der Teilnehmer
  • marktplatz
  • Digitaler Pass des Objekts

KRISTALL BAU

(Industrie-Metaarchitektur)

Das Wesen des Kristalls. Der Kristall ist kein Schema. Es ist ein lebendiges, selbstorganisiertes System, in dem:

  • Jedes Element hat seinen Platz,
  • Jede Verbindung macht Sinn,
  • Jeder Vorgang hinterlässt einen digitalen Fußabdruck,
  • Das ganze System entwickelt sich durch Feedback.

Im Bauwesen bedeutet dies: Die Industrie wird als ein einziger Organismus geführt, nicht als ein zersplitterter Markt.

Kristallgeometrie

Stell dir einen Kristall als ein Polyeder mit einem Kern und Schichten vor.

KERN. Ein digitaler Bauträger. Funktionen:

  • Integration aller Komponenten,
  • Datenspeicherung,
  • Koordination von Prozessen,
  • Analyse und Prognose,
  • Transparenzkontrolle.

INNERE SCHICHT (7 Facetten). Dies sind die Strukturfelder des Kristalls:

Bedeutung

  • Warum wir bauen
  • Wer braucht das

Der Raum

  • wo wir bauen
  • Kontext des Territoriums

Recht

  • Regeln und Vorschriften

Ressourcen

  • Materialien, Technik, Menschen

Produktion

  • Bauprozesse

Finanzen

  • Geld und Berechnungen

Lebenszyklus

  • Betrieb und Entwicklung

Äußere Schicht (Umgebung)

  • Der Staat
  • Markt
  • Gesellschaft
  • Ökologie
  • Technologie

Das ist etwas, mit dem der Kristall ständig interagiert.

Kristallgitter (Schlüsselidee)

Der Kristall hält sich nicht an die Knoten, sondern an das Gitter der Verbindungen.

Die wichtigsten Arten von Rippen:

  • ? Informationen
  • ? Finanzielle
  • .. material
  • ? Rechtliches
  • ? Verwaltung
  • ? Rückmeldungen

Wenn mindestens eine Art von Bindung schwach ist, beginnt der Kristall zu brechen.

Kristallachse (Steuerung)

Der Kristall hat 3 Hauptachsen:

Zeitachse

Idee → Projekt → Gebäude → betrieb → Transformation

Hier sind die Daten

Jede Aktion wird aufgezeichnet und ist verfügbar

HAFTUNGSACHSE

Jede Entscheidung hat einen Autor. - Dies sind die drei Säulen der Transparenz.

Fraktale Struktur

Das stärkste: Jedes Objekt ist ein kleiner Kristall

Und es wiederholt die Struktur der gesamten Branche vollständig. Ich meine:

  • Haus = Kristall
  • Bezirk = Kristall
  • Stadt = Kristall
  • Land = Kristall

Dies ermöglicht Skalierbarkeit ohne Verlust der Steuerbarkeit.

Digitales Kristalldoppel. In der Plattform sieht es so aus: Jedes Objekt hat:

  • ID
  • Digitaler Reisepass
  • BIM-Modell
  • Geschichte der Entscheidungen
  • Finanzspur
  • Status in Echtzeit

Das verwandelt die Konstruktion aus einem Prozess in ein beobachtbares System.

Verhalten des Kristalls. Der Kristall muss wissen:

1. Selbstdiagnose

  • Wo Verzögerungen
  • Wo die Risiken
  • Wo die Brüche

2. Selbstanpassung

  • Umverteilung von Ressourcen
  • Änderung der Zeitpläne

3. Selbststudium

  • Analyse vergangener Projekte
  • Verbesserung der Zukunft

Die größten Mängel der aktuellen Branche

Kein Kristall - es gibt Chaos

  • Knoten sind nicht verbunden
  • Die Daten sind verstreut
  • Entscheidungen sind undurchsichtig
  • Verantwortung verschwimmen
  • Geld geht verloren
  • Fristen "schwimmen"

Es ist kein Problem der Menschen, es ist ein Problem des Mangels an Struktur.

Was macht der Kristall

Verbindet alles mit dem System

  • Projekt ↔ Bau
  • Geld ↔ Arbeiten
  • Normen ↔ Fakten
  • Betrieb ↔ Planung

macht die Branche steuerbar

Du siehst:

  • Wo ist das Problem
  • Wer antwortet
  • Was tun?

. gibt eine Prognose. Das System beginnt zu sagen: “Dieses Objekt wird in 3 Monaten kollabieren”

Plattform-Architektur (Kristall-Skelett)

Modul 1. Registrierung

  • Objekte
  • Teilnehmer
  • Ressourcen

Modul 2. Marketplace

  • materialien
  • Vertragspartner
  • Technik

Modul 3. Projektmanagement

  • Zeitrahmen
  • Aufgaben
  • Kontrolle

Modul 4. Finanzen

  • Zahlungen
  • Kostenvoranschlag
  • Kontrolle

Modul 5. BIM/Digitales Doppeltes

  • Objektmodell

Modul 6. Analytik und KI

  • Vorhersage
  • Risiken
  • Optimierung

Kristallformel

Kann als Grundprinzip festgelegt werden: Kristallbau (Knoten × Röbra) + Daten + Zeit + Verantwortung

Das Wichtigste (ohne Illusionen)

Wenn Sie die Branche wirklich verändern wollen, müssen Sie

Kein weiteres Portal

Nicht nur Marketplace

Hier ist die Formulierung der Ebene der Strategie:

Der Baukristall ist eine integrierte digitale und organisatorische Architektur der Branche, die auf der Strukturierung von Knoten, der Standardisierung von Verbindungen und der Bildung eines einzigen digitalen Kerns basiert. Dieses Modell bietet Transparenz, Kontrolle und evolutionäre Entwicklung des Baukomplexes in allen Phasen des Lebenszyklus von Objekten.



? VISUELLES SYSTEM

KRISTALL DES BAUWESENS

Zentrale Struktur (Kern)

In der Mitte des Kristalls:

EINZELNER DIGITALE BETRIEB

Er ist kein Marktteilnehmer, sondern ein Umfeld der Koordination. Innerhalb des Kerns:

  • Immobilienregister
  • Registrierung der Teilnehmer
  • Digitale Pässe
  • BIM/Zwillinge
  • AI-Analysen

Es ist das Gehirn des Systems.

Erste Runde: 7 Kristallkanten

Um den Kern herum - 7 Schlüsselmodule (als Blütenblätter / Ränder):

1. SINN

  • Bedürfnisse
  • Strategie
  • Entwicklungsszenarien

2. RAUM

  • Land
  • Geoanalyse
  • Masterplan

3. RECHT

  • Normen
  • Berechtigungen
  • Prüfung

4. RESSOURCEN

  • materialien
  • Technik
  • Bilderrahmen

5. PRODUKTION

  • Bauen
  • Vertragspartner
  • Prozesse

6. FINANZEN

  • Investitionen
  • Zahlungen
  • Kontrolle

7. LEBENSZYKLUS

  • Dienstleistungen
  • Dienstleistungen
  • Rückmeldungen

Die zweite Runde - Knoten

Jede Seite ist in Knoten unterteilt: Beispiel:

Die Grenze der "Produktion"

  • Generalunternehmer
  • Subunternehmer
  • Platz
  • Kontrolle
  • Zeitplan

Die Grenze der Finanzen

  • Bank
  • Schatzkammer
  • Verträge
  • Versicherung

Visuell ist es ein Cluster innerhalb jeder Facette

Ryobra (das Wichtigste)

Jetzt der Schlüsselteil des Schemas:

Alle KNOCHEN SIND ZWISCHEN IHNEN VERBUNDEN

Linientypen (kann visuell unterschieden werden):

  • durchgezogene → materielle Ströme
  • gestrichelte Linie → Daten
  • doppelte → Finanzen
  • rote → Risiken
  • grüne → Rückkopplung

Das macht das Schema zu einem Live-Netzwerk und nicht zu einer Hierarchie.

Kristallachse 

Durch die Mitte führen 3 Achsen:

Zeit für die Idee → Projekt → Die Baustelle → Betrieb

Hier sind die Daten. Alle Knoten sind mit dem digitalen Kernel verbunden

Hier ist die Verantwortung Jeder Knoten hat einen Besitzer

Außenschale

Außerhalb des Kristalls - Kontext:

  • Der Staat
  • Markt
  • Gesellschaft
  • Ökologie
  • Technologie

Dies kann als Kugel um den Kristall dargestellt werden.

Wie es im Idealfall aussieht (Wörter)

Stell dir vor:

  • in der Mitte - der leuchtende Kern
  • symmetrische Segmente
  • innerhalb der Segmente - Knoten
  • zwischen ihnen - ein dichtes Netzwerk von Verbindungen
  • Das alles pulsiert mit Daten.

Es ist kein Schema mehr, es ist ein Betriebsmodell der Branche

Vereinfachtes Schema (für das Dokument)

Sie können Folgendes einfügen:

                [BETRIEB]

                      ▲

                      |

[RESSOURCE] , [NACHRICHTEN / DIGITALE BETRIEBSARBEITER] , , [Finanzen]

      ▲                ▲                 ▲

      |                |                 |

[RAUM] [DATEN / AI] [PRODUKTION]

      ▲                                  ▲

      |                                  |

      (Recht) .


Wie man dieses Schema benutzt

Für den Staat - das Managementmodell der Branche

Für Investoren: Transparenz

Für IT - Plattformarchitektur

Für Präsentationen - ein starkes visuelles Bild

INTERAKTIVE KRISTALLKARTE

(Plattformschnittstelle)

Hauptbildschirm (Core View). Das ist keine Liste oder Tabelle. Es ist eine lebendige Kristallkarte.

Auf dem Bildschirm

  • Zentrum → Kern (Operator)
  • ringsherum → 7 Facetten
  • innerhalb → Knoten
  • dazwischen → Kanten (Verbindungen)

Der Benutzer sieht das gesamte System auf einmal

Anzeigemodi (Schlüsselchip)

Ein und derselbe Kristall wechselt:

 Modus 1 — Objekt

Zeigt:

  • ein Bauprojekt
  • Alle Verbindungen um ihn herum

Modus 2 — Territorium

  • Stadt / Region
  • Alle Baustellen

Modus 3 — Branche

  • Das ganze System des Landes

Interoperabilität (UX)

Klicken Sie auf den Knoten:

  • Wer ist
  • bewertung
  • Projekte
  • Kontakte

Klick auf die Kante:

  • Vertrag
  • Betrag
  • Zeitrahmen
  • Status

Klicken Sie auf das Objekt:

  • BIM
  • Finanzen
  • Zeitplan
  • Risiken

Farblogik

Das Interface “sprechen”:

  • Die Norm
  • ? Risiko
  • .. das Problem
  • ? Daten
  • ? Finanzen

Kontrollleiste rechts (Control Panel)

  • Filter (Region, Objekttyp)
  • Umschalten der Modi
  • Analytik
  • Warnungen

Untere Leiste (Timeline)

Schieberegler Zeit: , können Sie “scrollen”

  • wie es war
  • wie es ist
  • Vorhersage

Der Hauptwert der Schnittstelle

Das ist nicht UI.

Dies ist: ? Betriebskarte der Branche in Echtzeit

TECHNISCHE ARCHITEKTUR (TZ)

Allgemeine Architektur

Typ: Microservices + Data Platform + Digital Twin

Hauptmodule

Core Platform

  • Autorisierung
  • Rollen
  • API-Gateway

Registrierung

Objektregister

  • ID
  • Status
  • Geo
  • Bühne

Teilnehmerregistrierung

  • Unternehmen
  • Bewertungen
  • Geschichte

 Digital Twin (BIM)

  • Lagerung von Modellen
  • version
  • Anbindung an Etappen

Graph Engine (SCHLÜSSELMODULE)

Das Herz des Systems. Speichert:

  • Nodes
  • rippen
  • Kontakte

? Technologien:

  • Neo4j / TigerGraph

Project Management

  • Aufgaben
  • Zeitrahmen
  • Abhängigkeiten

Finanzmodul

  • Verträge
  • Zahlungen
  • Kontrolle

Marketplace

  • materialien
  • Vertragspartner
  • Technik

AI / Analytik

  • Zeitvorhersagen
  • Risikoerkennung
  • Optimierung

Monitoring (IoT)

  • Sensoren
  • Bauen
  • Dienstleistungen

Datentypen

Knoten:

  • Objekt
  • Teilnehmer
  • Ressource
  • Dokument

Rippen:

  • Vertrag
  • Lieferung
  • Aufgabe
  • Zahlung

API (Beispiel)

Erhalten Sie den Objektgraphen

GET /api/object/{id}/graph

Mitglied werden: GET /api/company/{id}/relations

Risiken eingehen: GET /api/object/{id}/risks

Benutzerrollen

  • Der Staat
  • Investor
  • Auftraggeber
  • Auftragnehmer
  • Kontrolle
  • Bürger

Datenströme

1. BIM → Graph

2. Finanzen → Graph

3. IoT → Monitoring

4. Benutzer → UI , Alles passt zu Graph Engine

🔷 2.7. Ohne was das System nicht funktioniert

Wenn es keine Graph Engine gibt, gibt es keinen Kristall.

Wenn es keine Objekt-ID gibt, ist es chaotisch.

Ohne digitalen Pass keine Transparenz


DIE SCHLÜSSELIDEE 

Wir bauen nicht:

  • Webseite
  • marktplatz
  • CRM

Du baust:

Graph-based Operating System für den Bau


MVP BAU-KRISTALL

(Erste funktionierende Version des Systems)

Ziel MVP . Es ist nicht notwendig, den gesamten Kristall sofort zu bauen. Ziel MVP: Zeigen Sie, dass das System "die Baustelle als Graph sieht". Das heißt, MVP muss in der Lage sein:

  • Objekt erstellen
  • Teilnehmer verbinden
  • Verbindungen zeigen
  • Status anzeigen
  • Problem identifizieren

Wenn nicht, ist alles andere sinnlos.

Was ist in MVP enthalten (mindestens)

Objektregister

  • Objekt-ID
  • Adresse / Geo
  • Bühne (Projekt / Bau / Betrieb)
  • Grundparameter

Teilnehmerregistrierung

  • Unternehmen
  • Rollen (Auftraggeber, Auftragnehmer usw.)
  • Bewertung (bisher einfach)

Graph Engine (Kernel) - Das Wichtigste. Speichert:

  • Wer mit wem verbunden ist
  • Welche Verträge
  • Welche Rollen

Visuelle Karte (UI)

  • Knoten = Kreise
  • Verbindungen = Linien
  • Klick → Information

Der einfachste Status des Objekts

  • .. normal
  • ? Risiko
  • .. das Problem


Basisanalysen

  • Verzug
  • Überlastung des Auftragnehmers
  • Fehlende Kommunikation

Architektur MVP

Einfach:

[Frontend]

     ↓

[API Gateway]

     ↓

-------------------------

|   Core Backend        |

|-----------------------|

| Objects Service       |

| Companies Service     |

| Graph Service         |

| Auth Service          |

-------------------------

     ↓

[Databases]

- PostgreSQL

- Graph DB (Neo4j)

Technologiestapel (optimal)

Backend ?Node.js (NestJS) oder ?Python (FastAPI). Warum:

  • schnell
  • flexibel
  • einfach zu skalieren

Frontend + Next.js. Plus:

  • Schnelle Entwicklung
  • SSR
  • Benutzerfreundliche UI

Grafische Visualisierung (SCHLÜSSEL)

?Cytoscape.js oder ?D3.js. Wenn Sie einen einfacheren Start wünschen: React Flow

Graph Database , Neo4j (erforderlich). Es ist das Herz des Kristalls.

Haupt-DB - PostgreSQL

API

  • REST (auf MVP ist genug)
  • später → GraphQL

Hosting , Schnellstart:

  • Vercel (frontend)
  • Railway / Render (backend)
  • Neo4j Aura (graph)

Auth0 / Firebase Auth oder einfach JWT am Start

Datenmodell (vereinfacht)

Knoten:

Object

  • id
  • name
  • status
  • location

Company

  • id
  • name
  • role

Rüschen: RELATION

  • type (contract / supplier / control)
  • start_date
  • status

Ein Beispiel für die Logik von Graph

[Objekt]

   |

   ?---(Vertrag)---> [Genauftragnehmer]

   |

   ?---(Finanzierung)---> [Bank]

   |

   ?---(Kontrolle)---> [Überwachung]

Das ist der minimale Kristall.

MVP Schnittstelle (was sein sollte)

Hauptschirm:

  • Graf (Mitte)
  • Symbolleiste rechts:
    • Knotenliste
    • Filter

Bei Klick:

Objekt:

  • Status
  • Teilnehmer
  • Risiken

Unternehmen:

  • Projekte
  • Kontakte

Entwicklungsplan (echte)

Woche 1–2

  • Architektur
  • Basen
  • API

Woche 3–4

  • Graph Engine
  • Kontakte

Woche 5–6

  • UI + Visualisierung

Woche 7–8

  • Test
  • Starten

Nach 2 Monaten haben Sie bereits ein System

Minimaler Befehl

  • 1 backend
  • 1 frontend
  • 1 fullstack (oder CTO)
  • 1 Designer (optional)

Wo man normalerweise kaputt geht

Fehler 1

machen CRM anstelle des Graphen

Fehler 2

Kein normales Datenmodell

Fehler 3

überlastung MVP

Fehler 4

Sie versuchen es sofort mit "Gosloven"

Der Schlüssel zum Erfolg: Erst der Graf, dann der Rest. Wenn Sie:

  • Es gibt Knoten
  • Es gibt Verbindungen
  • Es gibt ein Visual

Du hast bereits einen Kristall.

Was Sie am Ausgang erhalten MVP

  • Live-Bauplan
  • Transparente Kommunikation
  • Erste Ebene der Kontrolle
  • Demonstration für Investoren / Staat

Nach MVP: hinzufügen: Finanzen, BIM, marktplatz

Wenn wir: , jetzt starten MVP der 6–8 Wochen - wir überholen alle, die Strategien schreiben.

Datenbankstruktur

Die Logik ist einfach: PostgreSQL speichert Verzeichnisse, Objektkarten, Benutzer, Dokumente, Ereignisse. Neo4j speichert den Linkgraphen selbst: wer mit wem verbunden ist, nach welcher Art von Verbindung, in welchem Status.

PostgreSQL: Haupttabellen

Tabelle Benutzer. Benutzer des Systems.

Feld

Typ

Zweck

id

UUID PK

Kennung

email

varchar unique

Impressum

password_hash

varchar

Passwort Hash

full_name

varchar

FIO

phone

varchar

Telefon

status

varchar

active / blocked / invited

created_at

timestamp

Erstellungsdatum

updated_at

timestamp

Datum der Aktualisierung

Roles-TabelleUU Zugriffsrollen.

Feld

Typ

id

UUID PK

code

varchar unique

name

varchar

Beispiele:

Tabelle user_roles. Benutzer und Rollen.

Feld

Typ

id

UUID PK

user_id

UUID FK -> users.id

role_id

UUID FK -> roles.id

created_at

timestamp

Tabelle companies. Marktteilnehmer.

Feld

Typ

Zweck

id

UUID PK

Unternehmens-ID

name

varchar

Name

short_name

varchar

Kurzname

inn

varchar

INN

ogrn

varchar

OGRN

company_type

varchar

customer / contractor / supplier / bank / regulator

rating

numeric(3,2)

Bewertung

status

varchar

active / inactive

website

varchar

Webseite

created_at

timestamp

Erstellungsdatum

updated_at

timestamp

Datum der Aktualisierung

Tabelle company_users. Nutzer an das Unternehmen binden.

Feld

Typ

id

UUID PK

company_id

UUID FK -> companies.id

user_id

UUID FK -> users.id

position

varchar

is_primary

boolean

created_at

timestamp

Tabelle Regionen. Verzeichnis der Regionen.

Feld

Typ

id

UUID PK

code

varchar unique

name

varchar

Tabelle locations. Adressen und Koordinaten.

Feld

Typ

id

UUID PK

region_id

UUID FK -> regions.id

address

text

lat

numeric(10,7)

lon

numeric(10,7)

cadastral_number

varchar

created_at

timestamp

Tabelle der Projekte. Karte der Baustelle.

Feld

Typ

Zweck

id

UUID PK

Objekt-ID

code

varchar unique

Interne Nummer

name

varchar

Name

description

text

Beschreibung

project_type

varchar

residential / industrial / infrastructure

lifecycle_stage

varchar

concept / design / construction / operation

status

varchar

normal / risk / problem / archived

location_id

UUID FK -> locations.id

Standort

customer_company_id

UUID FK -> companies.id

Der Auftraggeber

start_date

date

Geplanter Start

end_date

date

Geplante Fertigstellung

planned_budget

numeric(18,2)

Geplantes Budget

actual_budget

numeric(18,2)

Fakt

created_at

timestamp

Erstellungsdatum

updated_at

timestamp

Datum der Aktualisierung

Tabelle project_stages. Phasen des Projekts.

Feld

Typ

id

UUID PK

project_id

UUID FK -> projects.id

stage_code

varchar

stage_name

varchar

planned_start

date

planned_end

date

actual_start

date

actual_end

date

status

varchar

created_at

timestamp

Tabelle contracts. Verträge innerhalb des Systems.

Feld

Typ

id

UUID PK

project_id

UUID FK -> projects.id

contract_number

varchar

contract_type

varchar

customer_company_id

UUID FK -> companies.id

contractor_company_id

UUID FK -> companies.id

amount

numeric(18,2)

currency

varchar

date_start

date

date_end

date

status

varchar

created_at

timestamp

updated_at

timestamp

Tabelle documents. Projektdokumente.

Feld

Typ

id

UUID PK

project_id

UUID FK -> projects.id

company_id

UUID FK -> companies.id null

contract_id

UUID FK -> contracts.id null

doc_type

varchar

title

varchar

file_url

text

version

integer

issued_at

date

status

varchar

created_by

UUID FK -> users.id

created_at

timestamp

Risks Risks Tabelle nach Objekt.

Feld

Typ

id

UUID PK

project_id

UUID FK -> projects.id

related_company_id

UUID FK -> companies.id null

related_stage_id

UUID FK -> project_stages.id null

risk_type

varchar

severity

varchar

probability

varchar

description

text

status

varchar

detected_at

timestamp

resolved_at

timestamp null

Tabelle der Ereignisse. Ereignisband.

Feld

Typ

id

UUID PK

project_id

UUID FK -> projects.id null

company_id

UUID FK -> companies.id null

user_id

UUID FK -> users.id null

event_type

varchar

event_payload

jsonb

created_at

timestamp

Tabelle project_metrics. Metriken zum Projekt.

Feld

Typ

id

UUID PK

project_id

UUID FK -> projects.id

metric_date

date

progress_percent

numeric(5,2)

cost_variance

numeric(18,2)

schedule_variance_days

integer

open_risks_count

integer

created_at

timestamp

Postleitzahlen PostgreSQL

Minimal erforderlich:

Neo4j: Graf Modell

In der Spalte speichern wir die Entitäten als Knoten und Beziehungen als Rippen.

Knoten. Hauptetiketten:

Verbindliche Eigenschaften des Knotens. Für die Einheitlichkeit:

Arten von Rippen Neo4j. Hauptbeziehungen

Eigenschaften der Rippen

Zum Beispiel bei PARTICIPATES_IN:

Bei HAS_CONTRACT:

Bei HAS_RISK:

Beispiel Graf

(Company: Customer) -[:PARTICIPATES_IN {role:"customer"}]-> (Project)

(Company: GeneralContractor) -[:PARTICIPATES_IN {role:"general_contractor"}]-> (Project)

(Project) -[:HAS_CONTRACT]-> (Contract)

(Company: Customer) -[:CUSTOMER_IN]-> (Contract)

(Company: GeneralContractor) -[:CONTRACTOR_IN]-> (Contract)

(Project) -[:HAS_STAGE]-> (Stage: Construction)

(Project) -[:HAS_RISK {severity:"high"}]-> (Risk)

(Project) -[:LOCATED_AT]-> (Location)


Architektur API

Für MVP genug REST API v1.Später können Sie GraphQL für komplexe Graphen-Bildschirme hinzufügen.

Allgemeine Regeln API

Grundpräfix

/api/v1

Format

{

  "data": {},

  "meta": {},

  "error": null

}

Fehler

{

  "data": null,

  "meta": {},

  "error": {

    "code": "PROJECT_NOT_FOUND",

    "message": "Project not found"

  }


Autorisierung: Bearer <token>


Auth API. POST /auth/login. Eingang.

Request

{

  "email": "user@example.com",

  "password": "secret"

}

Response

{

  "data": {

    "accessToken": "jwt",

    "refreshToken": "jwt",

    "user": {

      "id": "uuid",

      "fullName": "Ivan Petrov",

      "email": "user@example.com",

      "roles": ["customer"]

    }

  },

  "meta": {},

  "error": null

}

POST /auth/refresh. Token-Update.

GET /auth/me. Das Profil des aktuellen Benutzers.

API Unternehmen

GET /companies. Liste der Unternehmen. Einstellungen:

POST /companies. Eine Firma gründen.

Request

{

  "name": "StroyGrad" GmbH,

  "shortName": "Baugrad",

  "inn": "1234567890",

  "ogrn": "1234567890123",

  "companyType": "contractor",

  "website": "https://example.com"

}

GET /companies/{id}. Firmenkarte.

PATCH /companies/{id}. Firma zu erneuern.


GET /companies/{id}/projects. Projekte der Firma.

GET /companies/{id}/relations. Die Verbindungen der Firma im Grafen.

Response

{

  "data": {

    "nodes": [

      { "id": "c1", "type": "company", "name": "StroyGrad LLC" },

      { "id": "p1", "type": "project", "name": "LCD Nord" }

    ],

    "edges": [

      {

        "from": "c1",

        "to": "p1",

        "type": "PARTICIPATES_IN",

        "role": "contractor",

        "status": "active"

      }

    ]

  },

  "meta": {},

  "error": null

}

API Projekte

GET /projekte. Liste der Projekte. Filter:

POST /projekte. Projekt erstellen.

Request

{

  "name": "Nördlicher LCD",

  "description": "Multifunktionale Wohnanlage",

  "projectType": "residential",

  "lifecycleStage": "design",

  "status": "normal",

  "location": {

    "regionId": "uuid",

    "Address": "St. Petersburg, ...",

    "lat": 59.93,

    "lon": 30.31,

    "cadastralNumber": "78:00:0000000:1234"

  },

  "customerCompanyId": "uuid",

  "startDate": "2026-04-01",

  "endDate": "2028-10-31",

  "plannedBudget": 2500000000

}

GET /projects/{id}Projektkarte.

PATCH /projekts/{id}. Projekt aktualisieren.

GET /projects/{id}/graph. Hauptendpoint MVP. Gibt Knoten und Kanten des Objekts zurück.

Response

{

  "data": {

    "project": {

      "id": "uuid",

      "name": "Nördlicher LCD",

      "status": "risk",

      "lifecycleStage": "construction"

    },

    "nodes": [

      { "id": "p1", "type": "project", "name": "LCD Nord", "status": "risk" },

      { "id": "c1", "type": "company", "name": "Kundenentwicklung", "status": "active" },

      { "id": "c2", "type": "company", "name": "GenReihenfolge 1", "status": "active" },

      { "id": "r1", "type": "risk", "name": "Terminverfall", "status": "open" }

    ],

    "edges": [

      { "from": "c1", "to": "p1", "type": "PARTICIPATES_IN", "role": "customer", "status": "active" },

      { "from": "c2", "to": "p1", "type": "PARTICIPATES_IN", "role": "general_contractor", "status": "active" },

      { "from": "p1", "to": "r1", "type": "HAS_RISK", "severity": "high" }

    ]

  },

  "meta": {},

  "error": null

}

GET /projekts/{id}/timeline. Band von Veränderungen und Ereignissen.

GET /projects/{id}/metrics. Projektmetriken.

GET /projects/{id}/risks. Risikoliste.

POST /projects/{id}/risks. Risiken eingehen.

GET /projects/{id}/documents. Projektdokumente.

POST /projects/{id}/documents. Dokument herunterladen.

GET /projects/{id}/companies. Projektteilnehmer.

POST /projects/{id}/companies. Teilnehmer zum Projekt hinzufügen.

Request

{

  "companyId": "uuid",

  "role": "supplier",

  "startDate": "2026-05-01",

  "status": "active"

}

API Projektphasen

GET /projekts/{id}/stages. Liste der Etappen.

POST /projekts/{id}/stages. Erstellen Sie eine Phase.

PATCH /projects/{id}/stages/{stageId}. Phase aktualisieren.

API Verträge

GET /verträge. Liste der Verträge. Filter:

POST /verträge. Einen Vertrag erstellen.

Request

{

  "projectId": "uuid",

  "contractNumber": "C-2026-001",

  "contractType": "general_contract",

  "customerCompanyId": "uuid",

  "contractorCompanyId": "uuid",

  "amount": 1500000000,

  "currency": "RUB",

  "dateStart": "2026-04-10",

  "dateEnd": "2027-12-20",

  "status": "active"

}

GET /vertrage/{id}. Vertragskarte.

PATCH /vertrage/{id}. Den Vertrag erneuern.

API Risiken

GET /risks. Allgemeine Liste der Risiken. Filter:

POST /risks. Risiken eingehen.

PATCH /risks/{id}. Risiko ändern.

POST /risks/{id}/resolve. Risiko absichern.

API Dokumente

GET /documents/{id}. Metadaten des Dokuments.

GET /documents/{id}/download Datei herunterladen.

API Graf. Es ist ein separater Service, weil es das Herz des Systems ist.

GET /graph/projects/{id}

Graf des Projekts.

GET /graph/companies/{id}

Graf der Firma.

POST /graph/query

Such- oder analytische Anfrage an den Grafen. Für MVP ist es besser, die Template-Abfragen zu beschränken, anstatt einen willkürlichen Cypher zu geben.

Request

{

  "queryType": "project_neighbors",

  "entityId": "uuid",

  "depth": 2

}

GET /graph/search. Suche nach Entitäten in der Spalte:

API Analysten

GET /analytics/dashboard

Zusammenfassungen:

GET /analytics/projects/status-summary

Übersicht über den Projektstatus.

GET /analytics/companies/top-contractors

Top-Auftragnehmer nach Anzahl der Projekte.

GET /analytics/risks/hotspots

Wo die meisten Risiken.

API Ereignisse

GET /events

Ereignisprotokoll. Filter:

Aufteilung in Dienstleistungen. Für MVP genügen 5 Dienste.

auth-service

directory-service

project-service

graph-service

analytics-service

PostgreSQL- und Neo4j-Synchronisierung

Das ist ein wichtiger Punkt. Die Quelle der Wahrheit für Karten ist PostgreSQL. Die Quelle der Wahrheit für Kommunikation und Umwege ist Neo4j.

Annäherung. Nach dem Erstellen/Aktualisieren einer Entität in PostgreSQL:

Beispiele für Ereignisse:

Minimum DTO

CreateProjectDto

{

  "name": "string",

  "description": "string",

  "projectType": "residential",

  "lifecycleStage": "design",

  "status": "normal",

  "customerCompanyId": "uuid",

  "startDate": "2026-04-01",

  "endDate": "2027-12-31",

  "plannedBudget": 1000000

}

AddCompanyToProjectDto

{

  "companyId": "uuid",

  "role": "contractor",

  "startDate": "2026-04-01",

  "endDate": null,

  "status": "active"

}

CreateRiskDto

{

  "projectId": "uuid",

  "relatedCompanyId": "uuid",

  "riskType": "deadline_delay",

  "severity": "high",

  "probability": "medium",

  "description": "Rückstand von 21 Tag"

}

Was Sie in der ersten Version unbedingt tun sollten

Ohne dies ist MVP leer:

Unbedingt

Kann verschoben werden

Direkte empfohlene Stapel unter diesem Schema

Backend

Frontend

Infra


Struktur des Repositorys

/crystal-construction

  /apps

    /api-gateway

    /auth-service

    /directory-service

    /project-service

    /graph-service

    /analytics-service

    /web-client

  /packages

    /shared-types

    /shared-utils

    /ui

  /infra

    /docker

    /nginx

    /db

  /docs

    openapi.yaml

    database-schema.md

    graph-model.md

Die richtige Reihenfolge der Montage

MVP muss antworten auf 4 Frage:

Wenn API und DB dies geben, hast du bereits den Arbeitskern des Kristallbaus.





1. OpenAPI-Entwurf

Unten ist eine verkürzte, aber Arbeitsrahmen Spezifikationen OpenAPI 3.1 für MVP.

openapi: 3.1.0

info:

  title: Crystal Construction API

  version: 1.0.0

  Beschreibung: API MVP Plattform "Kristallbau"


servers:

  - url: https://api.crystal-construction.local/api/v1


tags:

  - name: Auth

  - name: Companies

  - name: Projects

  - name: Contracts

  - name: Risks

  - name: Graph

  - name: Analytics


paths:

  /auth/login:

    post:

      tags: [Auth]

      summary: Benutzeranmeldung

      requestBody:

        required: true

        content:

          application/json:

            schema:

              $ref: '#/components/schemas/LoginRequest'

      responses:

        '200':

          Beschreibung: Erfolgreicher Login

          content:

            application/json:

              schema:

                $ref: '#/components/schemas/AuthResponse'


  /auth/me:

    get:

      tags: [Auth]

      summary: Aktuelles Benutzerprofil

      security:

        - bearerAuth: []

      responses:

        '200':

          Beschreibung: Benutzerprofil

          content:

            application/json:

              schema:

                $ref: '#/components/schemas/UserProfileResponse'


  /companies:

    get:

      tags: [Companies]

      summary: Liste der Unternehmen

      security:

        - bearerAuth: []

      parameters:

        - in: query

          name: search

          schema: { type: string }

        - in: query

          name: companyType

          schema: { type: string }

        - in: query

          name: status

          schema: { type: string }

        - in: query

          name: page

          schema: { type: integer, minimum: 1, default: 1 }

        - in: query

          name: limit

          schema: { type: integer, minimum: 1, maximum: 100, default: 20 }

      responses:

        '200':

          Beschreibung: Liste der Unternehmen

          content:

            application/json:

              schema:

                $ref: '#/components/schemas/CompanyListResponse'


    post:

      tags: [Companies]

      summary: Ein Unternehmen gründen

      security:

        - bearerAuth: []

      requestBody:

        required: true

        content:

          application/json:

            schema:

              $ref: '#/components/schemas/CreateCompanyRequest'

      responses:

        '201':

          Description: Das Unternehmen gegründet

          content:

            application/json:

              schema:

                $ref: '#/components/schemas/CompanyResponse'


  /companies/{id}:

    get:

      tags: [Companies]

      summary: Firmenkarte

      security:

        - bearerAuth: []

      parameters:

        - $ref: '#/components/parameters/IdPath'

      responses:

        '200':

          Beschreibung: Unternehmensdaten

          content:

            application/json:

              schema:

                $ref: '#/components/schemas/CompanyResponse'


    patch:

      tags: [Companies]

      summary: Aktualisieren Sie Ihr Unternehmen

      security:

        - bearerAuth: []

      parameters:

        - $ref: '#/components/parameters/IdPath'

      requestBody:

        required: true

        content:

          application/json:

            schema:

              $ref: '#/components/schemas/UpdateCompanyRequest'

      responses:

        '200':

          Beschreibung: Das Unternehmen wurde aktualisiert

          content:

            application/json:

              schema:

                $ref: '#/components/schemas/CompanyResponse'


  /companies/{id}/relations:

    get:

      tags: [Graph]

      summary: Firmenverbindungsgraph

      security:

        - bearerAuth: []

      parameters:

        - $ref: '#/components/parameters/IdPath'

        - in: query

          name: depth

          schema: { type: integer, minimum: 1, maximum: 3, default: 1 }

      responses:

        '200':

          Beschreibung: Graf der Firma

          content:

            application/json:

              schema:

                $ref: '#/components/schemas/GraphResponse'


  /projects:

    get:

      tags: [Projects]

      summary: Liste der Projekte

      security:

        - bearerAuth: []

      parameters:

        - in: query

          name: status

          schema: { type: string }

        - in: query

          name: lifecycleStage

          schema: { type: string }

        - in: query

          name: regionId

          schema: { type: string, format: uuid }

        - in: query

          name: customerCompanyId

          schema: { type: string, format: uuid }

        - in: query

          name: search

          schema: { type: string }

        - in: query

          name: page

          schema: { type: integer, default: 1 }

        - in: query

          name: limit

          schema: { type: integer, default: 20 }

      responses:

        '200':

          Beschreibung: Projektliste

          content:

            application/json:

              schema:

                $ref: '#/components/schemas/ProjectListResponse'


    post:

      tags: [Projects]

      summary: Projekt erstellen

      security:

        - bearerAuth: []

      requestBody:

        required: true

        content:

          application/json:

            schema:

              $ref: '#/components/schemas/CreateProjectRequest'

      responses:

        '201':

          Beschreibung: Projekt erstellt

          content:

            application/json:

              schema:

                $ref: '#/components/schemas/ProjectResponse'


  /projects/{id}:

    get:

      tags: [Projects]

      summary: Projektkarte

      security:

        - bearerAuth: []

      parameters:

        - $ref: '#/components/parameters/IdPath'

      responses:

        '200':

          Beschreibung: Projektdaten

          content:

            application/json:

              schema:

                $ref: '#/components/schemas/ProjectResponse'


    patch:

      tags: [Projects]

      summary: Projekt aktualisieren

      security:

        - bearerAuth: []

      parameters:

        - $ref: '#/components/parameters/IdPath'

      requestBody:

        required: true

        content:

          application/json:

            schema:

              $ref: '#/components/schemas/UpdateProjectRequest'

      responses:

        '200':

          Beschreibung: Projekt wurde aktualisiert

          content:

            application/json:

              schema:

                $ref: '#/components/schemas/ProjectResponse'


  /projects/{id}/graph:

    get:

      tags: [Graph]

      summary: Projektgraph

      security:

        - bearerAuth: []

      parameters:

        - $ref: '#/components/parameters/IdPath'

        - in: query

          name: depth

          schema: { type: integer, minimum: 1, maximum: 3, default: 2 }

      responses:

        '200':

          Beschreibung: Projektgraph

          content:

            application/json:

              schema:

                $ref: '#/components/schemas/ProjectGraphResponse'


  /projects/{id}/companies:

    post:

      tags: [Projects]

      summary: Fügen Sie einen Teilnehmer zum Projekt hinzu

      security:

        - bearerAuth: []

      parameters:

        - $ref: '#/components/parameters/IdPath'

      requestBody:

        required: true

        content:

          application/json:

            schema:

              $ref: '#/components/schemas/AddCompanyToProjectRequest'

      responses:

        '201':

          Beschreibung: Mitglied hinzugefügt

          content:

            application/json:

              schema:

                $ref: '#/components/schemas/OperationResponse'


  /contracts:

    get:

      tags: [Contracts]

      summary: Liste der Verträge

      security:

        - bearerAuth: []

      parameters:

        - in: query

          name: projectId

          schema: { type: string, format: uuid }

        - in: query

          name: customerCompanyId

          schema: { type: string, format: uuid }

        - in: query

          name: contractorCompanyId

          schema: { type: string, format: uuid }

        - in: query

          name: status

          schema: { type: string }

      responses:

        '200':

          Beschreibung: Vertragsliste

          content:

            application/json:

              schema:

                $ref: '#/components/schemas/ContractListResponse'


    post:

      tags: [Contracts]

      summary: Einen Vertrag erstellen

      security:

        - bearerAuth: []

      requestBody:

        required: true

        content:

          application/json:

            schema:

              $ref: '#/components/schemas/CreateContractRequest'

      responses:

        '201':

          Description: Vertrag erstellt

          content:

            application/json:

              schema:

                $ref: '#/components/schemas/ContractResponse'


  /risks:

    get:

      tags: [Risks]

      summary: Liste der Risiken

      security:

        - bearerAuth: []

      parameters:

        - in: query

          name: projectId

          schema: { type: string, format: uuid }

        - in: query

          name: severity

          schema: { type: string }

        - in: query

          name: status

          schema: { type: string }

      responses:

        '200':

          Beschreibung: Risikoliste

          content:

            application/json:

              schema:

                $ref: '#/components/schemas/RiskListResponse'


    post:

      tags: [Risks]

      summary: Risiko schaffen

      security:

        - bearerAuth: []

      requestBody:

        required: true

        content:

          application/json:

            schema:

              $ref: '#/components/schemas/CreateRiskRequest'

      responses:

        '201':

          Beschreibung: Das Risiko ist geschaffen

          content:

            application/json:

              schema:

                $ref: '#/components/schemas/RiskResponse'


  /risks/{id}/resolve:

    post:

      tags: [Risks]

      Summary: Schließen Risiko

      security:

        - bearerAuth: []

      parameters:

        - $ref: '#/components/parameters/IdPath'

      responses:

        '200':

          Beschreibung: Das Risiko ist gebannt

          content:

            application/json:

              schema:

                $ref: '#/components/schemas/RiskResponse'


  /analytics/dashboard:

    get:

      tags: [Analytics]

      summary: Dashboard MVP

      security:

        - bearerAuth: []

      responses:

        '200':

          Beschreibung: Analytik

          content:

            application/json:

              schema:

                $ref: '#/components/schemas/DashboardResponse'


components:

  securitySchemes:

    bearerAuth:

      type: http

      scheme: bearer

      bearerFormat: JWT


  parameters:

    IdPath:

      in: path

      name: id

      required: true

      schema:

        type: string

        format: uuid


  schemas:

    ApiError:

      type: object

      properties:

        code: { type: string }

        message: { type: string }

      required: [code, message]


    LoginRequest:

      type: object

      properties:

        email: { type: string, format: email }

        password: { type: string }

      required: [email, password]


    AuthUser:

      type: object

      properties:

        id: { type: string, format: uuid }

        fullName: { type: string }

        email: { type: string, format: email }

        roles:

          type: array

          items: { type: string }

      required: [id, fullName, email, roles]


    AuthResponse:

      type: object

      properties:

        data:

          type: object

          properties:

            accessToken: { type: string }

            refreshToken: { type: string }

            user:

              $ref: '#/components/schemas/AuthUser'

        meta: { type: object }

        error:

          oneOf:

            - $ref: '#/components/schemas/ApiError'

            - { type: 'null' }


    UserProfileResponse:

      type: object

      properties:

        data:

          $ref: '#/components/schemas/AuthUser'

        meta: { type: object }

        error:

          oneOf:

            - $ref: '#/components/schemas/ApiError'

            - { type: 'null' }


    Company:

      type: object

      properties:

        id: { type: string, format: uuid }

        name: { type: string }

        shortName: { type: string }

        inn: { type: string }

        ogrn: { type: string }

        companyType: { type: string }

        rating: { type: number }

        status: { type: string }

        website: { type: string, nullable: true }

      required: [id, name, companyType, status]


    CreateCompanyRequest:

      type: object

      properties:

        name: { type: string }

        shortName: { type: string }

        inn: { type: string }

        ogrn: { type: string }

        companyType: { type: string }

        website: { type: string }

      required: [name, inn, ogrn, companyType]


    UpdateCompanyRequest:

      type: object

      properties:

        name: { type: string }

        shortName: { type: string }

        companyType: { type: string }

        rating: { type: number }

        status: { type: string }

        website: { type: string }


    CompanyResponse:

      type: object

      properties:

        data:

          $ref: '#/components/schemas/Company'

        meta: { type: object }

        error:

          oneOf:

            - $ref: '#/components/schemas/ApiError'

            - { type: 'null' }


    CompanyListResponse:

      type: object

      properties:

        data:

          type: array

          items:

            $ref: '#/components/schemas/Company'

        meta:

          type: object

          properties:

            page: { type: integer }

            limit: { type: integer }

            total: { type: integer }

        error:

          oneOf:

            - $ref: '#/components/schemas/ApiError'

            - { type: 'null' }


    LocationInput:

      type: object

      properties:

        regionId: { type: string, format: uuid }

        address: { type: string }

        lat: { type: number }

        lon: { type: number }

        cadastralNumber: { type: string }

      required: [regionId, address]


    Project:

      type: object

      properties:

        id: { type: string, format: uuid }

        code: { type: string }

        name: { type: string }

        description: { type: string, nullable: true }

        projectType: { type: string }

        lifecycleStage: { type: string }

        status: { type: string }

        customerCompanyId: { type: string, format: uuid }

        startDate: { type: string, format: date, nullable: true }

        endDate: { type: string, format: date, nullable: true }

        plannedBudget: { type: number, nullable: true }

        actualBudget: { type: number, nullable: true }

      required: [id, name, projectType, lifecycleStage, status]


    CreateProjectRequest:

      type: object

      properties:

        name: { type: string }

        description: { type: string }

        projectType: { type: string }

        lifecycleStage: { type: string }

        status: { type: string }

        location:

          $ref: '#/components/schemas/LocationInput'

        customerCompanyId: { type: string, format: uuid }

        startDate: { type: string, format: date }

        endDate: { type: string, format: date }

        plannedBudget: { type: number }

      required:

        - name

        - projectType

        - lifecycleStage

        - status

        - location

        - customerCompanyId


    UpdateProjectRequest:

      type: object

      properties:

        name: { type: string }

        description: { type: string }

        lifecycleStage: { type: string }

        status: { type: string }

        actualBudget: { type: number }

        endDate: { type: string, format: date }


    ProjectResponse:

      type: object

      properties:

        data:

          $ref: '#/components/schemas/Project'

        meta: { type: object }

        error:

          oneOf:

            - $ref: '#/components/schemas/ApiError'

            - { type: 'null' }


    ProjectListResponse:

      type: object

      properties:

        data:

          type: array

          items:

            $ref: '#/components/schemas/Project'

        meta:

          type: object

          properties:

            page: { type: integer }

            limit: { type: integer }

            total: { type: integer }

        error:

          oneOf:

            - $ref: '#/components/schemas/ApiError'

            - { type: 'null' }


    GraphNode:

      type: object

      properties:

        id: { type: string }

        type: { type: string }

        name: { type: string }

        status: { type: string, nullable: true }

        metadata:

          type: object

          additionalProperties: true

      required: [id, type, name]


    GraphEdge:

      type: object

      properties:

        from: { type: string }

        to: { type: string }

        type: { type: string }

        role: { type: string, nullable: true }

        status: { type: string, nullable: true }

        metadata:

          type: object

          additionalProperties: true

      required: [from, to, type]


    GraphResponse:

      type: object

      properties:

        data:

          type: object

          properties:

            nodes:

              type: array

              items: { $ref: '#/components/schemas/GraphNode' }

            edges:

              type: array

              items: { $ref: '#/components/schemas/GraphEdge' }

        meta: { type: object }

        error:

          oneOf:

            - $ref: '#/components/schemas/ApiError'

            - { type: 'null' }


    ProjectGraphResponse:

      type: object

      properties:

        data:

          type: object

          properties:

            project:

              $ref: '#/components/schemas/Project'

            nodes:

              type: array

              items: { $ref: '#/components/schemas/GraphNode' }

            edges:

              type: array

              items: { $ref: '#/components/schemas/GraphEdge' }

        meta: { type: object }

        error:

          oneOf:

            - $ref: '#/components/schemas/ApiError'

            - { type: 'null' }


    CreateContractRequest:

      type: object

      properties:

        projectId: { type: string, format: uuid }

        contractNumber: { type: string }

        contractType: { type: string }

        customerCompanyId: { type: string, format: uuid }

        contractorCompanyId: { type: string, format: uuid }

        amount: { type: number }

        currency: { type: string }

        dateStart: { type: string, format: date }

        dateEnd: { type: string, format: date }

        status: { type: string }

      required:

        - projectId

        - contractNumber

        - contractType

        - customerCompanyId

        - contractorCompanyId

        - amount

        - currency

        - status


    Contract:

      type: object

      properties:

        id: { type: string, format: uuid }

        projectId: { type: string, format: uuid }

        contractNumber: { type: string }

        contractType: { type: string }

        customerCompanyId: { type: string, format: uuid }

        contractorCompanyId: { type: string, format: uuid }

        amount: { type: number }

        currency: { type: string }

        status: { type: string }

      required: [id, projectId, contractNumber, contractType, amount, currency, status]


    ContractResponse:

      type: object

      properties:

        data:

          $ref: '#/components/schemas/Contract'

        meta: { type: object }

        error:

          oneOf:

            - $ref: '#/components/schemas/ApiError'

            - { type: 'null' }


    ContractListResponse:

      type: object

      properties:

        data:

          type: array

          items: { $ref: '#/components/schemas/Contract' }

        meta: { type: object }

        error:

          oneOf:

            - $ref: '#/components/schemas/ApiError'

            - { type: 'null' }


    CreateRiskRequest:

      type: object

      properties:

        projectId: { type: string, format: uuid }

        relatedCompanyId: { type: string, format: uuid, nullable: true }

        riskType: { type: string }

        severity: { type: string }

        probability: { type: string }

        description: { type: string }

      required: [projectId, riskType, severity, probability, description]


    Risk:

      type: object

      properties:

        id: { type: string, format: uuid }

        projectId: { type: string, format: uuid }

        relatedCompanyId: { type: string, format