Datenmodell Kern: Projekt, PFA, Vertrag, LV, Nachtrag, Dokument
- Mandant, Auftragnehmer, Projekt mit Suchreihenfolge, Abschnitt (PFA), Vertrag, Leistungsverzeichnis, Nachtrag (MKA nur als Bezug), Nachtragsposition, Dokument - Projektmitglieder mit Projektrolle, Freigaben für vertrauliche Dokumente - Mandant, Land und Projekt werden vom übergeordneten Datensatz übernommen; Fehlzuordnungen über Mandanten oder Projekte hinweg werden abgewiesen - Feste Morph-Map, Factories, Demodaten (Musterbahn, PFA 1–4, N14/N16/N21), Tests Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
ca09d23a78
commit
6aac8b0a16
@@ -0,0 +1,62 @@
|
||||
# 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.
|
||||
+2
-2
@@ -209,8 +209,8 @@ PDF-Anzeige mit Sprung zur Position, Massen-Upload, Suchreihenfolge über PFAs u
|
||||
- [ ] API-Schlüssel für die Entwicklung bei ITM anfordern
|
||||
- [ ] **Meilisearch-Test Teil 1** (erzeugte 4.096-dim. Vektoren, z. B. 50.000 Stück):
|
||||
Indexierungszeit, Antwortzeit mit Filtern, RAM und Platte; jeweils ohne und mit binärer Quantisierung
|
||||
- [ ] Datenmodell Kern: Mandant, Land, Projekt, PFA, Vertrag, LV, Dokument (Kategorie,
|
||||
Vertraulichkeit), Nachtrag, Nachtragsposition, Mitgliedschaften
|
||||
- [x] Datenmodell Kern: Mandant, Land, Projekt, PFA, Vertrag, LV, Dokument (Kategorie,
|
||||
Vertraulichkeit), Nachtrag, Nachtragsposition, Mitgliedschaften (`docs/datenmodell.md`, Demodaten)
|
||||
- [ ] Benutzerverwaltung, Rollen und Rechte (Spatie, ggf. Teams je Projekt)
|
||||
- [ ] GAEB-X86-Test mit öffentlichen Beispieldateien, Bibliothek auswählen
|
||||
- [ ] CI in Gitea Actions: Tests, Pint, PHPStan
|
||||
|
||||
Reference in New Issue
Block a user