# KI-BauIN – Datenmodell (Kern) Stand: 5. Oktober 2026. Grundlage für Phase 1. Später ergänzt werden LV-Positionen und Vorbemerkungen (GAEB-Import, AP5), Prüfung, Feedback und Regeln (AP6–AP8) sowie die Einstellungen der KI-Schnittstelle (AP3). ## Übersicht ```mermaid erDiagram MANDANT ||--o{ PROJEKT : hat MANDANT ||--o{ AUFTRAGNEHMER : hat MANDANT ||--o{ USER : hat PROJEKT ||--o{ ABSCHNITT : "gliedert sich in (PFA)" ABSCHNITT ||--o{ VERTRAG : enthält AUFTRAGNEHMER ||--o{ VERTRAG : "ist Partner von" VERTRAG ||--o{ LEISTUNGSVERZEICHNIS : "hat (oft 20–35)" VERTRAG ||--o{ NACHTRAG : "erhält" NACHTRAG ||--o{ NACHTRAGSPOSITION : hat PROJEKT ||--o{ DOKUMENT : "enthält" LEISTUNGSVERZEICHNIS ||--o{ DOKUMENT : "X86, D86, PDF" NACHTRAG ||--o{ DOKUMENT : "Nachtrags-LV, Anschreiben, Anlagen" PROJEKT }o--o{ USER : "Mitglieder mit Projektrolle" DOKUMENT }o--o{ USER : "Freigaben (vertraulich)" ``` | Modell | Tabelle | Inhalt | |---|---|---| | `Mandant` | `mandanten` | Kunde der Anwendung (im Pilot nur BauIn) | | `Projekt` | `projekte` | z. B. „Elektrifizierung Musterbahn“; Auftraggeber, Vertragsgrundlage, Status, Suchreihenfolge | | `Abschnitt` | `abschnitte` | PFA bzw. Abschnitt; die Bezeichnung „PFA“ steht am Projekt (`abschnitt_bezeichnung`) | | `Auftragnehmer` | `auftragnehmer` | Firma oder ARGE; kann in mehreren PFAs Verträge haben | | `Vertrag` | `vertraege` | Auftrag an einen Auftragnehmer in einem Abschnitt, z. B. „Gleisbau“ | | `Leistungsverzeichnis` | `leistungsverzeichnisse` | ein LV des Vertrags; Dateien als Dokumente, Importstatus | | `Nachtrag` | `nachtraege` | Nr., Eingang, Betreff, MKA-Bezug (Liste), Status, zugewiesen an | | `Nachtragsposition` | `nachtragspositionen` | OZ, Kurztext, Langtext, Menge, Einheit, EP (nur Information) | | `Dokument` | `dokumente` | hochgeladene Datei; gehört zu Projekt und optional zu LV, Nachtrag usw.; vertraulich ja/nein | Pivot-Tabellen: `projekt_mitglieder` (Benutzer, Projekt, Projektrolle) und `dokument_freigaben` (vertrauliche Dokumente für benannte Personen). ## Festlegungen - **Mandant, Land und Projekt an jedem Fachdatensatz.** `mandant_id` und `land` stehen an allen Fachtabellen; `projekt_id` an allem unterhalb des Projekts. Die Werte werden beim Speichern vom übergeordneten Datensatz übernommen (`App\Models\Concerns\ErbtZuordnung`). Ein Datensatz, der auf einen Datensatz eines anderen Mandanten, Landes oder Projekts zeigt, wird abgewiesen. Das gilt auch für Vertrag und Auftragnehmer. - **Rollen:** Globale Rollen (Administrator, Regelverantwortlicher) über Spatie laravel-permission. Projektrollen (Projektleiter, Bearbeiter, Leser) in `projekt_mitglieder`, weil sie je Projekt verschieden sind. Der Teams-Modus von Spatie bleibt aus. - **MKA nur als Bezug:** `nachtraege.mka_bezug` ist eine Liste von Nummern (Fragenkatalog A8). - **Dokumente polymorph:** `dokumentable` zeigt auf LV, Nachtrag oder Vertrag; `projekt_id` bleibt für die Rechteprüfung immer gesetzt. Ohne Projekt ist es ein allgemeines Dokument (Einstellungen). Die Morph-Namen sind fest (`projekt`, `vertrag`, `leistungsverzeichnis`, `nachtrag`, `user`), damit Klassennamen nicht in der Datenbank stehen. - **Löschen:** Fachdaten werden nicht kaskadierend gelöscht; ein Projekt mit Abschnitten lässt sich nicht löschen, sondern wird archiviert. Ausnahmen: Nachtragspositionen hängen am Nachtrag, Pivot-Einträge an ihren beiden Seiten. - **Suchreihenfolge je Projekt (vorläufig, Fragenkatalog A10):** andere Verträge im selben Abschnitt einbeziehen = nein, andere Abschnitte = ja, nur gleicher Auftragnehmer = nein. - **Beträge** als Dezimalzahlen (Menge 15,3, EP 15,2); Preise sind in Phase 1 nur Information.