Detaillierter Projektplan mit Teilplänen und Fragenliste

- docs/projektplan.md neu gegliedert: Arbeitsweise mit Freigaben, Zuständigkeiten,
  Meilensteine mit Abnahmekriterien, Arbeitspakete mit Status, Zeitplan, Entscheidungen
- docs/plaene/: Teilplan je Arbeitspaket (detailliert für AP0, AP1, AP2, AP3, AP5, AP11,
  AP13; grob für AP4, AP6–AP10, AP12, Optionen) und Vorlage
- docs/fragen.md: alle offenen Fragen mit Status, Empfänger und betroffenem Teilplan
- CLAUDE.md: Umsetzung nur nach freigegebenem Teilplan

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Christoph
2026-10-05 08:47:05 +02:00
co-authored by Claude Opus 5.5
parent 6aac8b0a16
commit 2143f4e955
19 changed files with 1653 additions and 212 deletions
+65
View File
@@ -0,0 +1,65 @@
# AP0 – Steuerung, Klärung, Doku
| | |
|---|---|
| Status | in Arbeit |
| Aufwand | 0,75 PW, laufend |
| Zeitraum | KW 40 – KW 4/2027 |
| Meilenstein | alle |
| Freigabe | – (laufende Aufgabe) |
## Ziel
Offene Fragen werden geklärt, Plan und Doku sind aktuell, und BauIn und ITM wissen zu jedem
Termin, wo das Projekt steht.
## Umfang
**Enthalten:**
- Fragen stellen und Antworten einpflegen
- Statusberichte und Termine mit BauIn
- Gesamtplan, Teilpläne und Doku pflegen
- Abstimmung mit ITM und Claude Design
**Nicht enthalten:** Umsetzung, die steht in den übrigen Arbeitspaketen.
## Voraussetzungen
Keine.
## Schritte
- [x] **0.1** Besprechung mit BauIn ausgewertet, API-Doku gelesen → Plan vom 02.10.
- [x] **0.2** Gesamtplan neu gegliedert, Teilpläne angelegt, Fragenliste mit Status
(`docs/fragen.md`) → dieser Stand
- [ ] **0.3** Du gibst Gesamtplan und Teilpläne frei (oder korrigierst sie) → Status in den Teilplänen
- [ ] **0.4** Fragen verschicken (du):
- Teil A an die Nachtragsbearbeitung von BauIn
- Teil B an die IT von BauIn
- Teil C an die ITM-Projektleitung
Die Dateien zum Verschicken liegen im Planungsordner. Danach steht der Status in
`docs/fragen.md` auf „gestellt“.
- [ ] **0.5** Server-Anforderungen an den ITM-Entwickler schicken (du) → Bestätigung oder Rückfragen
- [ ] **0.6** Rückmeldung an Claude Design geben (du); den neuen Stand ablegen, sobald er da ist
→ Ordner `claude-design/` im Planungsordner
- [ ] **0.7** Aufwand für den Kostenrahmen an die ITM-Projektleitung (du, bis 14.10.)
→ Zahlen aus Abschnitt 4 des Gesamtplans
- [ ] **0.8** Statusbericht für den 16.10.: Claude Code entwirft bis 14.10., du ergänzt Screenshots
→ `docs/status/2026-10-16.md`
- [ ] **0.9** Termin 16.10. durchführen (du); Antworten in `docs/fragen.md` eintragen, betroffene
Teilpläne und Datenmodell anpassen (Claude Code, KW 42–43) → aktualisierte Pläne zur Freigabe
- [ ] **0.10** Laufend:
- Teilplan spätestens eine Woche vor Start detaillieren
- Statusbericht vor jedem Freitagstermin
- Änderungsprotokoll des Gesamtplans pflegen
## Abnahmekriterien
- Alle ★-Fragen sind beantwortet oder bewusst vertagt.
- Der Plan entspricht vor jedem Termin dem tatsächlichen Stand.
## Risiken
- Antworten kommen spät. Dann mit dem Vorschlag aus der Frage weiterarbeiten und das im Plan
vermerken.
+126
View File
@@ -0,0 +1,126 @@
# AP1 – Fundament: CI, Rechte, Benutzer, Projekte, Upload, Protokoll
| | |
|---|---|
| Status | in Arbeit; Schritte ab 1.5 detailliert, warten auf Freigabe |
| Aufwand | 1,25 PW offen (mit Claude Code) |
| Zeitraum | KW 40–43 |
| Meilenstein | M1 (30.10.) |
| Freigabe | offen |
## Ziel
Benutzer melden sich an, sehen nur die Projekte, in denen sie Mitglied sind, legen Projekte mit
PFA und Verträgen an und laden LV-Pakete hoch. Jede wichtige Aktion wird protokolliert.
## Umfang
**Enthalten:**
- CI
- Rechtekonzept und Policies
- Benutzerverwaltung
- Projektverwaltung (Projekt, PFA, Verträge, Auftragnehmer, Mitglieder)
- Upload und Download im privaten Speicher, auch als ZIP
- Protokoll
- Länderstruktur
**Nicht enthalten:**
- GAEB-Import (AP5)
- Anmeldung mit dem Microsoft-Konto (erst nach Antwort B1, eigener Schritt)
- Endgültiges Design (AP13): Die Oberflächen entstehen zuerst mit TallStackUI-Standard und
werden in AP13 angepasst.
## Voraussetzungen
- Fragen: A1 (Gliederung), A25 (Rollen), B1 (Anmeldung), B4 (Ordnerstruktur für ZIP)
- D5 (Actions-Runner auf dem Synology-Gitea)
## Entscheidungen
| Nr. | Frage | Vorschlag | Entschieden |
|---|---|---|---|
| E1.1 | Projektrollen über eigene Tabelle oder Spatie-Teams? | Eigene Tabelle `projekt_mitglieder` (umgesetzt); globale Rollen über Spatie | offen |
| E1.2 | Protokoll: Paket oder eigene Tabelle? | `spatie/laravel-activitylog` (MIT, verbreitet) | offen |
| E1.3 | Neue Benutzer: Einladung per E-Mail mit Link zum Passwort setzen, oder Admin vergibt Startpasswort? | Einladung per E-Mail (Mailpit in der Entwicklung) | offen |
| E1.4 | Benutzer löschen oder nur deaktivieren? | Nur deaktivieren, damit Protokoll und Zuordnungen erhalten bleiben | offen |
| E1.5 | Darf der Administrator Projektinhalte sehen? | Nein, nur wenn er Projektmitglied ist | offen (A25) |
## Schritte
- [x] **1.1** Entwicklungsumgebung, Repository, gitleaks-Hook
- [x] **1.2** Laravel 13, Livewire 4, TallStackUI 4, Fortify (2FA, Passkeys), Spatie,
Mehrsprachigkeit
- [x] **1.3** Nicht-funktionale Grundlagen: keine externen Ressourcen (Test), `CLAUDE.md`, Tech-Stack-Doku
- [x] **1.4** Datenmodell Kern (`docs/datenmodell.md`). Umgesetzt vor Freigabe.
- [ ] **1.4a** Review mit dir: Erklärung der Tabellen, Entscheidung E1.1
- [ ] **1.4b** Anpassen nach den Antworten A1, A4, A8 und A10
- [ ] **1.5** CI in Gitea Actions:
- Runner auf dem Synology prüfen bzw. einrichten (Skript von Claude Code, du führst es aus).
- Workflow mit `composer install`, `npm run build`, Tests gegen MySQL, Pint (`--test`),
PHPStan, Proxy-Tests und gitleaks.
→ Ergebnis: Jeder Push zeigt grün oder rot.
- [ ] **1.6** Rechtekonzept `docs/rechte.md` → Ergebnis: Rechte-Matrix zur Freigabe durch dich (vorläufig bis A25):
- Rollen: global Administrator (optional Regelverantwortlicher); je Projekt Projektleiter,
Bearbeiter, Leser
- Matrix Aktion × Rolle: Projekt sehen, anlegen, bearbeiten, archivieren; Mitglieder verwalten;
Dokumente hochladen, sehen, herunterladen; vertrauliche Dokumente; Nachträge anlegen,
zuweisen, prüfen; Export; Regeln vorschlagen und freigeben; Verwaltung
- Mandantentrennung und Regeln für archivierte Projekte (nur lesen)
- [ ] **1.7** Policies und Gates nach dem Rechtekonzept:
- zentrale Abfrage „Projekte des Benutzers“
- Mandanten-Scope
- vertrauliche Dokumente nur für freigegebene Personen
→ Ergebnis: Je Aktion ein Test mit und einer ohne Berechtigung.
- [ ] **1.8** Benutzerverwaltung (Administrator):
- Liste mit Suche
- Anlegen (Einladung nach E1.3), Bearbeiten, Deaktivieren (E1.4)
- Globale Rolle, Mandant, 2FA-Status
→ Ergebnis: Verwaltung → Benutzer.
- [ ] **1.9** Projektverwaltung:
- Projektliste
- Projekt anlegen in drei Schritten wie im Claude-Design-Entwurf: Projektdaten, PFA und Verträge
mit Auftragnehmern, Mitglieder
- Bearbeiten, Archivieren (schreibgeschützt)
→ Ergebnis: Projekte → Neues Projekt.
- [ ] **1.10** Upload und Download:
- Speicher `storage/app/private/<mandant>/<projekt>/…`
- Einzel- und ZIP-Upload bis 200 MB
- Paarbildung PDF, X86, D86 nach Dateinamen; Zuordnung zu PFA und Vertrag zum Bestätigen
- Prüfung von Dateityp und Größe, Erkennung von Duplikaten (sha256)
- Download nur über eine Route mit Rechteprüfung
→ Ergebnis: LV-Paket hochladen, LVs als Datensätze mit Dokumenten.
- [ ] **1.11** Protokoll (E1.2):
- Anmeldung (Erfolg und Fehlschlag)
- Benutzer- und Rechteänderungen
- Projektänderungen
- Upload, Löschen, Herunterladen vertraulicher Dokumente
- Einstellungen und Exporte
→ Ergebnis: Verwaltung → Protokoll mit Filter.
- [ ] **1.12** Länderstruktur:
- Schnittstelle für länderspezifische Begriffe und Auswahllisten
- Umsetzung für DE, AT nur als Platzhalter
- Länderwahl nur bei mehr als einem freigeschalteten Land
## Abnahmekriterien
- Die Kriterien von M1 zu Benutzern, Projekten, Upload, Rechten und Protokoll sind erfüllt
(`docs/projektplan.md`, Abschnitt 5).
- Ein Benutzer ohne Mitgliedschaft erhält auf jeder Projekt-, Dokument- und Download-URL 403 oder 404.
- CI ist grün.
## Tests
- Feature-Tests je Aktion mit und ohne Berechtigung, auch für andere Mandanten.
- Upload: Paarbildung, zu große Datei, falscher Typ, Duplikat, ZIP mit Ordnern.
- Protokolleinträge für die genannten Ereignisse.
## Risiken
- Die Rollen ändern sich nach A25. Deshalb das Konzept zuerst schriftlich und die Policies zentral halten.
- Große ZIPs: Upload-Grenzen in PHP, Nginx und Livewire abstimmen und testen.
+67
View File
@@ -0,0 +1,67 @@
# AP2 – Meilisearch-Test
| | |
|---|---|
| Status | detailliert, wartet auf Freigabe |
| Aufwand | 0,25 PW |
| Zeitraum | Teil 1 KW 41, Teil 2 KW 46 |
| Meilenstein | M2 |
| Freigabe | offen |
## Ziel
Belegen, ob Meilisearch v1.54.2 Vektoren mit 4.096 Dimensionen schnell genug durchsucht. Danach
steht fest, wie viel RAM der Server braucht und ob die binäre Quantisierung nötig ist. Teil 2
misst die Trefferqualität mit echten Embeddings.
## Umfang
**Enthalten:**
- Teil 1: Leistung mit erzeugten Zufallsvektoren
- Teil 2: Trefferquote mit echten Vektoren und Referenzfällen
**Nicht enthalten:** Aufbau der echten Indexierung (AP4).
## Voraussetzungen
- Teil 1: keine
- Teil 2: Staging, Pilotdaten, Referenzfälle (A20), KI-API (AP3)
## Entscheidungen
| Nr. | Frage | Vorschlag | Entschieden |
|---|---|---|---|
| E2.1 | Grenzwerte für „bestanden“ | Bei 50.000 Abschnitten mit Filter auf Vertrag: Antwortzeit p95 < 300 ms, Indexierung < 30 min, RAM von Meilisearch < 8 GB | offen |
## Schritte
**Teil 1 (KW 41):**
- [ ] **2.1** Messskript (`tools/meili-test/`, nur Entwicklung):
- erzeugt N Abschnitte mit normalisierten Zufallsvektoren (4.096 Dimensionen)
- mit Filterfeldern: Mandant, Land, Projekt, Abschnitt, Vertrag, Art
- mit kurzen Texten
- [ ] **2.2** Messung ohne Quantisierung für N = 10.000 und 50.000:
- Indexierungszeit, Plattenbedarf, RAM
- Antwortzeit p50/p95 über je 100 Anfragen für reine Vektorsuche, hybride Suche, hybride
Suche mit Filter auf Vertrag bzw. Projekt
- [ ] **2.3** Dieselbe Messung mit `binaryQuantized` in einem eigenen Index
- [ ] **2.4** Bericht `docs/tests/meilisearch-teil1.md` → Ergebnis: Empfehlung zu RAM für die
Server-Anforderungen und vorläufig zur Quantisierung; bei Nichtbestehen Plan B (Qdrant) bewerten
**Teil 2 (KW 46):**
- [ ] **2.5** Messskript für Staging. Es gibt nur Kennzahlen aus, keine Inhalte:
- Recall@10 und Recall@40 der richtigen Fundstelle
- jeweils vor und nach dem Reranker
- mit und ohne Quantisierung
- [ ] **2.6** Du führst es auf Staging aus. Bericht `docs/tests/meilisearch-teil2.md` →
Ergebnis: Entscheidung zur Quantisierung und Kandidatenzahl für AP4
## Abnahmekriterien
- Beide Berichte liegen vor und enthalten eine Empfehlung.
- Die Server-Anforderungen sind bei Bedarf angepasst.
## Risiken
- Zufallsvektoren sagen nichts über die Trefferqualität. Dafür gibt es Teil 2.
- Große JSON-Mengen beim Indexieren: in Stapeln senden.
+86
View File
@@ -0,0 +1,86 @@
# AP3 – Anbindung KI-API ITM
| | |
|---|---|
| Status | in Arbeit; Schritte ab 3.2 detailliert, warten auf Freigabe |
| Aufwand | 0,5 PW offen |
| Zeitraum | KW 42 (Schnelltest, Einstellungen), KW 44 (Clients, Jobs) |
| Meilenstein | M1/M2 |
| Freigabe | offen |
## Ziel
Die Anwendung nutzt Dokumentdienst, `embed`, `rerank` und `chat` zuverlässig. Sie beachtet die
Grenzen der API und protokolliert jeden Aufruf ohne Inhalte und ohne Schlüssel. Die Schlüssel
liegen verschlüsselt in der Datenbank.
## Umfang
**Enthalten:**
- Schlüsselverwaltung, Clients, Hintergrund-Jobs, Ratenbegrenzung, Wiederholungen,
Verbrauchsprotokoll, Statusprüfung
**Nicht enthalten:**
- Indexierung (AP4)
- Prompts für die Beurteilung (AP7)
## Voraussetzungen
- C1 (Schlüssel), C4–C8 (Modelle, Grenzen); Schlüssel im Windows-Tresor, Proxy läuft (du)
- AP1 Schritt 1.7 (Rechte für Verwaltung)
## Entscheidungen
| Nr. | Frage | Vorschlag | Entschieden |
|---|---|---|---|
| E3.1 | Anteil der 120 Anfragen/min für interaktive Suche | 40/min reserviert, Rest für Hintergrund-Jobs; nach C8 anpassen | offen |
| E3.2 | Standardmodell für einfache Aufgaben | `chat-noreasoning`, `chat` nur für die Beurteilung (AP7) | offen |
## Schritte
- [x] **3.1** Schlüssel-Proxy (`tools/ki-proxy`), Sperr-Hook für Claude Code, gitleaks-Regel
- [ ] **3.2** Schnelltest über den Proxy, wenn du ihn gestartet hast. Nur Testtexte:
- Modellverzeichnis
- Dimension und Normalisierung von `embed` messen
- `rerank`
- `chat` mit Streaming
→ `docs/tests/ki-api-schnelltest.md`
- [ ] **3.3** Einstellungen KI-Schnittstelle:
- Tabelle mit verschlüsselten Feldern
- Verwaltungsmaske: Basis-URL, drei Schlüsselfelder (nur beschreibbar, Anzeige `zki_…a1b2`),
Modellnamen, „Verbindung prüfen“
- Protokolleintrag bei Änderung (ohne Wert)
- In der Entwicklung zeigt die Basis-URL auf den Proxy, die Schlüssel bleiben leer.
- [ ] **3.4** Clients:
- `Dokumentdienst` (einreichen, Status, Ergebnis Markdown/JSON)
- `Embeddings` (Stapel; Instruct-Präfix für Suchanfragen nach C4)
- `Rerank`
- `Chat` (normal und Streaming)
- [ ] **3.5** Jobs und Ausfallsicherheit:
- Ergebnisse abfragen im Abstand von 2 bis 10 s
- Job-ID gleich nach dem Einreichen speichern, keine Doppel-Einreichung nach Timeout
- Wiederholung bei 429 (Retry-After) und 5xx mit Backoff
- Ratenbegrenzer nach E3.1
- [ ] **3.6** Verbrauchsprotokoll `ki_aufrufe`: Dienst, Modell, Dauer, Status, Tokens, Bezug.
Keine Inhalte, keine Header.
- [ ] **3.7** Statusprüfung: Artisan-Befehl und Anzeige im Systemstatus (erreichbar, Antwortzeit,
Auslastung); Alarm über AP11
## Abnahmekriterien
- „Verbindung prüfen“ zeigt alle Dienste grün.
- Die Schlüssel stehen nirgends im Klartext: nicht in der DB, nicht im Log, nicht in der Antwort
der Maske.
- Ein Ausfall der API stoppt keine Seite; die Jobs laufen später weiter.
## Tests
- `Http::fake` für 200, 202, 409, 410, 404, 429, 5xx, Timeout und Streaming
- Ratenbegrenzer greift
- Log und Protokoll enthalten keinen Schlüssel
- Verwaltungsmaske nur für Administratoren
## Risiken
- Antworten von ITM fehlen (C4–C8): Werte messen (3.2) und Standardwerte konfigurierbar halten.
+70
View File
@@ -0,0 +1,70 @@
# AP4 – Indexierung und LV-Suche
| | |
|---|---|
| Status | grob geplant, Detaillierung bis KW 43 |
| Aufwand | 1,0 PW |
| Zeitraum | KW 44–46 |
| Meilenstein | M2 |
| Freigabe | offen |
## Ziel
Alle LV-Positionen und Vorbemerkungen eines Projekts sind über Stichwort und Bedeutung
durchsuchbar. Jeder sieht nur, was er sehen darf, und springt vom Treffer ins PDF. Das ist auch
die Grundlage der Vorprüfung.
## Umfang
**Enthalten:**
- Abschnitte bilden, Embeddings erzeugen
- Rohvektoren in MySQL, Index in Meilisearch, Neuaufbau aus MySQL
- Zentraler Suchdienst mit Pflichtfilter für Rechte und Suchreihenfolge
- Hybride Suche mit Reranking
- Oberfläche der LV-Suche
**Nicht enthalten:**
- Vorschläge zur Prüfung (AP6)
- Regelwerk (Phase 3)
## Voraussetzungen
- AP2 Teil 1 (Ausstattung, Quantisierung), AP3 (Clients), AP5 (LV-Elemente)
- A2 (weitere Vertragsunterlagen?), A4 (beauftragte Nachträge mit durchsuchen?), A10 (Suchreihenfolge)
## Entscheidungen (vorläufig)
| Nr. | Frage | Vorschlag |
|---|---|---|
| E4.1 | Einheit eines Abschnitts | Je Position: OZ, Kurztext und Langtext. Vorbemerkungen nach Absätzen. PDFs ohne GAEB in Abschnitten von etwa 500–1.000 Tokens |
| E4.2 | Kandidaten vor dem Reranking | 40, danach die besten 10 (nach AP2 Teil 2 anpassen) |
| E4.3 | Gewichtung Stichwort/Bedeutung | `semanticRatio` 0,6, einstellbar |
## Schritte (grob)
- [ ] **4.1** Abschnittsbildung aus `lv_elemente` und PDF-Texten
- [ ] **4.2** Embedding-Jobs:
- Stapel, Vorrang für Suchanfragen
- Rohvektor als float32-BLOB mit Modell, Dimension und Vorverarbeitungsstand
- [ ] **4.3** Meilisearch-Index:
- Filterfelder Mandant, Land, Projekt, Abschnitt, Vertrag, Auftragnehmer, LV, Art, vertraulich
- Embedder `userProvided`
- [ ] **4.4** Zentraler Suchdienst:
- Pflichtfilter aus den Rechten des Benutzers
- Suchreihenfolge Vertrag → Abschnitt → Projekt nach den Projekteinstellungen
- Reranking
- [ ] **4.5** Neuaufbau des Index aus MySQL (Artisan-Befehl)
- [ ] **4.6** Oberfläche LV-Suche:
- Bereich wählbar: Vertrag, PFA oder Projekt
- Treffer nach LV gruppiert, „Im PDF zeigen“
- [ ] **4.7** Pilot-PFA auf Staging indexieren (du); Kennzahlen zu Dauer und Kosten
## Abnahmekriterien
- Die Kriterien von M2 zur LV-Suche sind erfüllt.
- Ein Benutzer ohne Recht erhält keinen Treffer und keine Trefferzahl aus fremden Projekten oder
vertraulichen Dokumenten (Tests).
## Risiken
- Last auf der KI-API bei der Erstindexierung (C8): nachts in Stapeln laufen lassen.
+85
View File
@@ -0,0 +1,85 @@
# AP5 – GAEB-Import und PDF-Anzeige
| | |
|---|---|
| Status | detailliert, wartet auf Freigabe |
| Aufwand | 1,25 PW |
| Zeitraum | KW 41 (Test), KW 43–45 |
| Meilenstein | M1 (LV-Baum), M2 (PDF, Nachträge) |
| Freigabe | offen |
## Ziel
LVs und Nachtrags-LVs werden aus X86-Dateien eingelesen: Positionen, Vorbemerkungen und Gliederung.
Jede Position lässt sich im zugehörigen PDF an der richtigen Stelle anzeigen.
## Umfang
**Enthalten:**
- GAEB DA XML (X86) für Vertrags-LVs und Nachtrags-LVs
- LV-Baum, PDF-Anzeige mit Markierung, Zuordnung von OZ zur PDF-Seite
- Nachtrag ohne X86 über Texterkennung mit Bestätigung durch den Bearbeiter
**Nicht enthalten:**
- D86 (GAEB 90), nur falls A5 es erfordert
- Kalkulationen und Preisnachweise (Phase 2)
## Voraussetzungen
- AP1 Schritt 1.10 (Upload)
- A3 (Vorbemerkungen in X86?), A5 (Nachtrags-LV immer als X86?), A18 (anonymisierte Beispiele)
## Entscheidungen
| Nr. | Frage | Vorschlag | Entschieden |
|---|---|---|---|
| E5.1 | Parser: eigene Umsetzung oder Bibliothek? | Nach Schritt 5.1; voraussichtlich eigene Umsetzung mit `XMLReader` (wenige gepflegte PHP-Bibliotheken) | offen |
| E5.2 | PDF-Anzeige | pdf.js (`pdfjs-dist`) lokal über Vite gebündelt, kein CDN | offen |
| E5.3 | Seitenzuordnung | PDF-Text je Seite lokal mit poppler (`pdftotext`), OZ suchen; Sail-Image um poppler-utils ergänzen | offen |
## Schritte
- [ ] **5.1** GAEB-Test (KW 41):
- Öffentliche Beispieldateien suchen und deren Lizenz prüfen; dazu eine selbst erzeugte
X86-Datei nach DA XML 3.3 mit Titeln, Positionen und Vorbemerkungen
- Struktur auswerten, Bibliotheken prüfen
→ `docs/tests/gaeb-test.md` mit Vorschlag zu E5.1
- [ ] **5.2** Datenmodell `lv_elemente`:
- Felder: LV, übergeordnetes Element, Typ (Bereich, Titel, Position, Vorbemerkung, Hinweistext),
OZ, Kurztext, Langtext, Menge, Einheit, EP, GP, Sortierung, PDF-Seite
- Migration und Tests
- [ ] **5.3** Parser und Import-Job X86 → `lv_elemente`:
- Importstatus und Fehlerbericht
- Erneuter Import ersetzt den alten Stand nachvollziehbar
- [ ] **5.4** LV-Ansicht:
- Baum mit Titeln, Positionen und Vorbemerkungen
- Langtext aufklappbar, Suche im LV
- [ ] **5.5** Seitenzuordnung (E5.3): je Element die PDF-Seite ermitteln, Abweichungen protokollieren
- [ ] **5.6** PDF-Anzeige (E5.2):
- Seite, Zoom, Sprung zur Position, Markierung der Stelle
- Auslieferung nur über die Rechteprüfung
- [ ] **5.7** Nachtrags-Import:
- Nachtrags-LV als X86 → `nachtragspositionen`
- Nur PDF → Dokumentdienst (AP3) → erkannte Positionen; der Bearbeiter bestätigt sie
- [ ] **5.8** Anpassen nach den echten Beispielen (A18), sobald sie da sind
## Abnahmekriterien
- Ein Beispiel-LV wird vollständig eingelesen: Anzahl der Positionen und Summen stimmen mit der Datei überein.
- Ein Klick auf eine Position zeigt im PDF die richtige Seite mit Markierung.
- Ein Nachtrags-LV ergibt die Nachtragspositionen.
## Tests
- Parser mit erfundenen Beispieldateien: Gliederung, Langtexte, Sonderfälle wie fehlende Menge
oder Pauschalposition
- Import-Job mit Fehlerfall
- Seitenzuordnung
- Rechteprüfung der PDF-Auslieferung
## Risiken
- Erweiterungen des Kalkulationsprogramms in der X86. Echte Beispiele früh anfordern (A18);
unbekannte Elemente protokollieren statt abbrechen.
- Gescannte PDFs ohne Textebene: dann keine Seitenzuordnung, Hinweis anzeigen.
+57
View File
@@ -0,0 +1,57 @@
# AP6 – Vorprüfung Stufe 1 und Prüfmaske
| | |
|---|---|
| Status | grob geplant, Detaillierung bis KW 45 |
| Aufwand | 1,25 PW |
| Zeitraum | KW 46–47 |
| Meilenstein | M2 |
| Freigabe | offen |
## Ziel
Für jede Position eines neuen Nachtrags stehen nach kurzer Zeit die wahrscheinlichsten Fundstellen
im Vertrag fest, noch ohne Sprachmodell. Der Bearbeiter prüft sie in der Prüfmaske, korrigiert sie
und setzt das Prüfergebnis.
## Umfang
**Enthalten:**
- Datenmodell für Prüfung, Fundstellen und Feedback
- Vorprüfungs-Job je Nachtrag, KI-Sicherheit aus Signalen
- Nachtragsliste, Prüfmaske v3 (ohne Sprachmodell-Teile)
- Feedback je Aspekt, Korrektur der Fundstelle, Prüfergebnis, Verlauf
**Nicht enthalten:**
- Einschätzung, Begründung und Bezugsposition durch das Sprachmodell (AP7)
- Regeln (AP8)
## Voraussetzungen
- AP4, AP5 (Nachtrags-Import), AP13
- Prüfmaske v3 von Claude Design
- A9 (Werte des Prüfergebnisses)
## Schritte (grob)
- [ ] **6.1** Datenmodell:
- `pruefungen` je Nachtragsposition: Status, KI-Sicherheit, Prüfergebnis, Kommentar, bearbeitet von
- `fundstellen`: LV-Element, Rang, Wert, Suchbereich
- `feedback`: Aspekt, passt / passt nicht, Korrektur
- [ ] **6.2** Vorprüfungs-Job: alle Positionen suchen (AP4), reranken, Fundstellen speichern,
Nachtrag auf „vorgeprüft“ setzen, Benachrichtigung
- [ ] **6.3** KI-Sicherheit aus Signalen: Wert der besten Fundstelle, Abstand zur zweiten, Art der
Fundstelle; „Warum?“-Erklärung
- [ ] **6.4** Nachtragsliste im Projekt und Positionsspalte mit Filter
- [ ] **6.5** Prüfmaske v3 mit drei Spalten:
- Fundstellen, Prüfergebnis, Begründung (Platzhalter bis AP7)
- Original-Nachtrag, Anschreiben und Quellen als Reiter
- [ ] **6.6** Feedback und Korrektur: richtige Fundstelle wählen, selbst suchen oder „keine
Fundstelle“; Prüfergebnis; Verlauf
- [ ] **6.7** Erste Messung: richtige Fundstelle unter den ersten drei (synthetische Fälle, auf
Staging mit echten Fällen)
## Abnahmekriterien
- Die Kriterien von M2 zur Vorprüfung sind erfüllt.
- „Speichern, weiter“ funktioniert erst, wenn alle drei Aspekte bewertet sind.
+54
View File
@@ -0,0 +1,54 @@
# AP7 – Vorprüfung Stufe 2 mit Sprachmodell
| | |
|---|---|
| Status | grob geplant, Detaillierung bis KW 47 |
| Aufwand | 1,0 PW |
| Zeitraum | KW 48–49 |
| Meilenstein | M3 |
| Freigabe | offen |
## Ziel
Das Sprachmodell beurteilt je Nachtragsposition, ob die Leistung im Vertrag enthalten ist. Bei
geänderter Leistung benennt es die Bezugsposition und den Unterschied. Die Begründung verweist nur
auf Quellen, die es wirklich gibt.
## Umfang
**Enthalten:**
- Prompt-Konzept, Kontextaufbau, strukturierte Antwort mit Prüfung im Code
- Bezugsposition mit Textvergleich, Begründung mit Quellen
- Verbrauchs- und Kostenprotokoll, Bewertung mit Testfällen
**Nicht enthalten:**
- Rechtliche Einordnung (A12)
- Preisbewertung (Phase 2)
## Voraussetzungen
- AP6
- C6 (Modell, Kontext, strukturierte Ausgabe)
- A6 (Bezugsposition im Nachtrag genannt?), A12
## Schritte (grob)
- [ ] **7.1** Prompt-Konzept `docs/prompts.md`:
- Rolle und Aufgabe, Ausgabe-Schema
- Regel „nur aus den gelieferten Quellen“
- Dokumentinhalte als Daten, nicht als Anweisungen
- [ ] **7.2** Kontextaufbau: Position, beste Fundstellen, passende Vorbemerkungen, später Regeln
und Referenzfälle; Grenze der Kontextlänge
- [ ] **7.3** Aufruf und Prüfung der Antwort:
- JSON-Schema, gültige Werte, zitierte Quellen müssen existieren
- eine Wiederholung bei ungültiger Antwort, sonst Rückfall auf Stufe 1
- [ ] **7.4** Bezugsposition und Unterschied: Textvergleich im Code, Anzeige als Abweichung
- [ ] **7.5** Anzeige in der Prüfmaske:
- Einschätzung „Im Vertrag“ und Vorschlag zum Prüfergebnis
- Begründung mit anklickbaren Quellen
- [ ] **7.6** Bewertung: synthetische Testfälle lokal; echte Fälle als Kennzahlen auf Staging
## Abnahmekriterien
- Die Kriterien von M3 zur Prüfmaske sind erfüllt.
- Keine Begründung verweist auf eine Quelle, die es nicht gibt (Test).
+42
View File
@@ -0,0 +1,42 @@
# AP8 – Regeln, Referenzfälle, Freigaben
| | |
|---|---|
| Status | grob geplant, Detaillierung bis KW 48 |
| Aufwand | 0,75 PW |
| Zeitraum | KW 49–50 |
| Meilenstein | M3 |
| Freigabe | offen |
## Ziel
Aus Korrekturen werden Regeln. Sie verbessern künftige Vorschläge im passenden Geltungsbereich und
werden je nach Einstellung freigegeben. Bestätigte Fälle dienen als Referenzfälle.
## Umfang
**Enthalten:**
- Regeln mit Situation, Regel, Geltungsbereich, Status und Versionen
- Regeldialog, Freigabe-Einstellungen (Voreinstellungen), Wissensbasis-Reiter
- Referenzfälle; Kennzeichnung „zur Überprüfung“ bei mehrfacher Überstimmung
**Nicht enthalten:** Training von Modellen.
## Voraussetzungen
- AP6, AP7
- A23 (projektübergreifende Regeln?), A24 (Freigabe-Variante)
## Schritte (grob)
- [ ] **8.1** Datenmodell Regeln und Versionen; Geltungsbereich Vertrag → PFA → Projekt →
Auftraggeber → Land; nie löschen
- [ ] **8.2** Regeldialog aus der Prüfmaske: Vorformulierung, ähnliche Regeln
- [ ] **8.3** Freigabe-Einstellungen und Warteschlange „Zur Freigabe“
- [ ] **8.4** Regeln und Referenzfälle in Suche und Prompt einbeziehen; die speziellere Regel gewinnt
- [ ] **8.5** Wissensbasis: Regeln, Zur Freigabe, Referenzfälle, Allgemeine Dokumente
## Abnahmekriterien
- Eine Regel aus einer Korrektur wirkt nach der Freigabe beim nächsten passenden Fall und wird dort
als Quelle angezeigt.
+36
View File
@@ -0,0 +1,36 @@
# AP9 – Ergebnisliste und Export
| | |
|---|---|
| Status | grob geplant, Detaillierung bis KW 49 |
| Aufwand | 0,25 PW |
| Zeitraum | KW 50 |
| Meilenstein | M3 |
| Freigabe | offen |
## Ziel
Für jeden Nachtrag gibt es eine Ergebnisliste aller Positionen, die sich als Excel exportieren
und in die Bewertungsmatrix übertragen lässt.
## Umfang
**Enthalten:** Bearbeitungsstand des Nachtrags, Ergebnisliste, Excel-Export (PhpSpreadsheet),
Liste der Exporte, „Nachtrag abschließen“.
**Nicht enthalten:** Bewertungsmatrix in der DB-Vorlage und Stellungnahme (Optionen).
## Voraussetzungen
AP6, AP7; A9 (Werte), A14 (Spalten der Matrix als Orientierung).
## Schritte (grob)
- [ ] **9.1** Bearbeitungsstand eingegangen → vorgeprüft → in Prüfung → geprüft → exportiert
- [ ] **9.2** Ergebnisliste: OZ, Kurztext, Menge/Einheit, Im Vertrag, beste Fundstelle,
Prüfergebnis, Kommentar
- [ ] **9.3** Excel-Export und Exportprotokoll
## Abnahmekriterien
- Der Export eines Nachtrags enthält alle Positionen mit Prüfergebnis und Fundstelle.
@@ -0,0 +1,38 @@
# AP10 – Dashboard, Benachrichtigungen, Auswertungen
| | |
|---|---|
| Status | grob geplant, Detaillierung bis KW 46 |
| Aufwand | 0,5 PW |
| Zeitraum | KW 47 (Dashboard), KW 2/2027 (Auswertungen) |
| Meilenstein | M2, M4 |
| Freigabe | offen |
## Ziel
Jeder sieht beim Einstieg seine offenen Nachträge und wird benachrichtigt, wenn etwas fertig ist.
Die Auswertungen zeigen, wie gut die Vorschläge sind.
## Umfang
**Enthalten:**
- Dashboard (Variante 1a aus Claude Design)
- Benachrichtigungen in der Anwendung, optional per E-Mail
- Auswertungen: Trefferquote, Treffsicherheit je KI-Sicherheit, überstimmte Regeln, Prüfzeit
- Allgemeine Dokumente in den Einstellungen
## Voraussetzungen
AP6; B3 (E-Mail-Absender).
## Schritte (grob)
- [ ] **10.1** Dashboard: offene Nachträge, „vorgeprüft – bereit“, Verarbeitung, Freigaben
- [ ] **10.2** Benachrichtigungen: Vorprüfung fertig oder fehlgeschlagen, Nachtrag zugewiesen,
Regel zur Freigabe
- [ ] **10.3** Auswertungen (KW 2)
- [ ] **10.4** Allgemeine Dokumente (Einstellungen, projektübergreifend)
## Abnahmekriterien
- Die Kennzahlen der Auswertungen stimmen mit einer Nachzählung auf Testdaten überein.
+74
View File
@@ -0,0 +1,74 @@
# AP11 – Betrieb
| | |
|---|---|
| Status | in Arbeit (11a.1 erledigt); Schritte ab 11a.2 detailliert, warten auf Freigabe |
| Aufwand | 0,5 PW (wir) + 1–1,5 PW (ITM-Entwickler) |
| Zeitraum | KW 41–44 (Staging), KW 50–51 (Produktion), KW 3/2027 (Restore-Test) |
| Meilenstein | M2 (Staging), M3 (Produktion), M4 (abgesichert) |
| Freigabe | offen |
## Ziel
Staging und Produktion laufen auf den Servern von ITM, werden reproduzierbar bereitgestellt,
gesichert und überwacht. Ein Ausfall fällt auf, bevor BauIn ihn bemerkt.
## Umfang
**Enthalten:**
- **11a, wir:**
- Server-Anforderungen
- Vorlagen für Nginx, systemd und Cron
- Deploy-Skript
- Lebenszeichen- und Prüfbefehle
- Backup-Skript
- Betriebsdoku
- **11b, ITM-Entwickler:**
- Server aufsetzen, Domain und Zertifikat
- Backup-Ziel, Überwachung
- Restore-Test gemeinsam mit uns
**Nicht enthalten:** Hochverfügbarkeit, mehrere Server.
## Voraussetzungen
C10 (Ausstattung, Root-Zugang), B2 (Zugriff Internet/VPN), B3 (Domain, Mail), B5 und C10 (Backups),
C12 (wer deployt).
## Entscheidungen
| Nr. | Frage | Vorschlag | Entschieden |
|---|---|---|---|
| E11.1 | Deployment | Skript auf dem Server mit Versionsverzeichnissen (`releases/`, `current`), ausgelöst per SSH | offen |
| E11.2 | Backup-Werkzeug | restic, verschlüsselt, Ziel von ITM | offen (B5) |
| E11.3 | Alarmierung | E-Mail an dich und den ITM-Entwickler | offen |
## Schritte
- [x] **11a.1** Server-Anforderungen `docs/server-anforderungen.md`
- [ ] **11a.2** Vorlagen in `deploy/`:
- Nginx-Server-Block, systemd-Units (Worker, Meilisearch), Cron-Zeile
- Beispiel für `.env` ohne Werte
- [ ] **11a.3** Deploy-Skript nach E11.1 mit Prüfungen (Migration, Caches, Neustart der Worker),
zuerst gegen eine lokale Test-VM oder direkt auf Staging
- [ ] **11a.4** Betriebsbefehle:
- Lebenszeichen für Worker und Scheduler
- Zählung fehlgeschlagener Jobs
- Statusprüfung der KI-API (aus AP3)
- Mail bei Problemen (E11.3)
- [ ] **11b.1** Staging aufsetzen (ITM-Entwickler, KW 42–44), erstes Deployment gemeinsam
- [ ] **11a.5** Backup-Skript nach E11.2 und Betriebsdoku `docs/betrieb.md`:
- Deployment, Wiederherstellung, `APP_KEY` sicher aufbewahren
- [ ] **11b.2** Produktion aufsetzen (KW 50–51)
- [ ] **11a.6 / 11b.3** Restore-Test auf einem Ersatzsystem (KW 3), Protokoll in `docs/betrieb.md`
## Abnahmekriterien
- Ein Deployment aus dem Gitea auf Staging klappt mit einem Befehl.
- Ein absichtlich gestoppter Worker löst innerhalb von 10 Minuten eine Mail aus.
- Der Restore-Test war erfolgreich und ist dokumentiert.
## Risiken
- Antworten von ITM zu Zugang und Ausstattung kommen spät. Dann Staging per Bildschirmfreigabe
gemeinsam aufsetzen.
+40
View File
@@ -0,0 +1,40 @@
# AP12 – Pilot und Messung
| | |
|---|---|
| Status | grob geplant, Detaillierung bis KW 51 |
| Aufwand | 1,5 PW |
| Zeitraum | KW 1–2/2027 |
| Meilenstein | M4 |
| Freigabe | offen |
## Ziel
Alle Nachträge des Pilot-PFA laufen durch das System. Trefferquote und Zeitersparnis sind
gemessen, und die Vorschläge sind anhand der Ergebnisse nachgeschärft.
## Umfang
**Enthalten:**
- Messplan, Messskripte (nur Kennzahlen), Durchlauf mit BauIn
- Nachschärfen: Prompts, Gewichtung, Quantisierung, Kandidatenzahl
- Abschlussbericht
## Voraussetzungen
AP6–AP9; A20 (Referenzfälle), A21 (Erfolgskriterium); Fachexperte verfügbar.
## Schritte (grob)
- [ ] **12.1** Messplan (KW 51):
- Kennzahlen: richtige Fundstelle unter den ersten drei, Übereinstimmung des Prüfergebnisses,
Prüfzeit je Nachtrag
- Vergleich mit dem Stand vorher
- [ ] **12.2** Messskripte für Staging bzw. Produktion, ohne Inhalte
- [ ] **12.3** Durchlauf (KW 1) mit Bewertung durch den Fachexperten
- [ ] **12.4** Nachschärfen (KW 2) und erneute Messung
- [ ] **12.5** Abschlussbericht `docs/pilot-bericht.md` für M4
## Abnahmekriterien
- Die Kriterien von M4 zu den Kennzahlen sind erfüllt bzw. dokumentiert.
+78
View File
@@ -0,0 +1,78 @@
# AP13 – Designsystem aus Claude Design
| | |
|---|---|
| Status | detailliert, wartet auf Freigabe |
| Aufwand | 0,5 PW |
| Zeitraum | KW 43 |
| Meilenstein | M1 |
| Freigabe | offen |
## Ziel
Die Anwendung sieht aus wie der Prototyp von Claude Design: Farben, Schriften, Abstände,
Statussysteme, App-Rahmen. Bestehende und künftige Seiten nutzen dieselben Bausteine.
## Umfang
**Enthalten:**
- Design-Tokens mit Hell- und Dunkelmodus
- Schriften und Icons lokal
- TallStackUI anpassen
- Eigene Komponenten für die Statussysteme
- Sidebar und Topbar
- Musterseite zum Abgleich
**Nicht enthalten:** Einzelne Fachseiten; diese entstehen in ihren Arbeitspaketen mit den hier
gebauten Bausteinen.
## Voraussetzungen
Neuer Stand von Claude Design nach unserer Rückmeldung (`Rueckmeldung_an_ClaudeDesign_2026-10-02.md`).
Benötigt werden die Übergabe (Abschnitte 1–9) und die `.dc.html`-Dateien. Bisheriger Stand:
`ClaudeDesign_Stand_2026-10-02.md` im Planungsordner.
## Entscheidungen
| Nr. | Frage | Vorschlag | Entschieden |
|---|---|---|---|
| E13.1 | Schriften | League Spartan und IBM Plex über `@fontsource`-Pakete, lokal gebündelt | offen |
| E13.2 | Icons | Phosphor über das Blade-Paket `codeat3/blade-phosphor-icons` (MIT), in TallStackUI als Icon-Typ eingebunden | offen |
| E13.3 | Ablage der Entwürfe im Repository | `docs/design/` mit Übergabe und `.dc.html` (nur erfundene Daten) | offen |
## Schritte
- [ ] **13.1** Stand von Claude Design in `docs/design/` ablegen (E13.3), Unterschiede zur
Rückmeldung notieren
- [ ] **13.2** Design-Tokens als CSS-Variablen (hell und dunkel) und Tailwind-Theme
- [ ] **13.3** Schriften (E13.1) und Icons (E13.2) einbinden; `NoExternalResourcesTest` bleibt grün
- [ ] **13.4** TallStackUI anpassen: Buttons, Eingabefelder, Select, Karte, Dialog, Tabelle,
Toast, Badge (Radien, Farben, Größen)
- [ ] **13.5** Eigene Komponenten:
- KI-Sicherheit (`x-confidence`)
- Prüfergebnis-Plakette
- Regelstatus-Etikett
- Bearbeitungsstand mit 5 Punkten
- KI-Vorschlag-Pille
- Zustände leer, lädt, Fehler, kein Zugriff
- [ ] **13.6** App-Rahmen: Sidebar mit Gruppen Arbeit, Wissen, System; Topbar mit Suche,
Benachrichtigungen, Benutzer; Länderwahl nur bei mehreren Ländern
- [ ] **13.7** Musterseite „Designsystem“ (nur in der Entwicklung) und Abgleich mit dem Prototyp
per Screenshot; bestehende Seiten (Login, Einstellungen, AP1-Seiten) umstellen
## Abnahmekriterien
- Die Musterseite entspricht dem Designsystem des Prototyps in Hell und Dunkel.
- Alle Statussysteme sind ohne Farbe unterscheidbar (Symbol und Text).
- Es werden keine externen Ressourcen geladen.
## Tests
- `NoExternalResourcesTest` auf allen Seiten
- Blade-Komponenten-Tests für Status und Zustände
- Übersetzungsabdeckung
## Risiken
- Claude Design liefert spät. Dann mit dem bisherigen Stand beginnen; die Prüfmaske kommt ohnehin
erst in AP6.
+31
View File
@@ -0,0 +1,31 @@
# Optionen OP1 und OP2
| | |
|---|---|
| Status | grob geplant; Umsetzung nur nach Beauftragung und mit Vorlage |
| Aufwand | je 0,5 PW |
| Zeitraum | OP1 KW 51, OP2 KW 2/2027 (bei 35–40 h pro Woche), sonst nach M4 |
| Freigabe | offen |
## OP1 – Bewertungsmatrix in der Excel-Vorlage der DB
**Ziel:** Die Ergebnisse eines Nachtrags werden direkt in die Bewertungsmatrix der DB geschrieben.
**Voraussetzungen:** A14 (Vorlage leer und ausgefüllt, Spalten und Reiter, Makros?).
**Schritte (grob):**
- [ ] **OP1.1** Vorlage untersuchen. Bleiben die Makros erhalten, wenn PhpSpreadsheet die Datei
schreibt? Falls nicht: Werte so exportieren, dass sie sich in die Vorlage einfügen lassen.
- [ ] **OP1.2** Zuordnung Spalten ↔ Daten mit dir und BauIn abstimmen
- [ ] **OP1.3** Export und Test mit einem Beispielnachtrag
## OP2 – Stellungnahme BÜW als Word-Datei
**Ziel:** Das Deckblatt zur Bewertungsmatrix (Ansprechpartner, Bearbeiter, Nachtrag, Sachverhalt)
wird aus der Vorlage erzeugt.
**Voraussetzungen:** A15 (Vorlage, `.docx`, variable Felder).
**Schritte (grob):**
- [ ] **OP2.1** Vorlage in `.docx` mit Platzhaltern (einmalige Umwandlung)
- [ ] **OP2.2** Felder befüllen (PHPWord-TemplateProcessor), Test
+47
View File
@@ -0,0 +1,47 @@
# APx – Titel
| | |
|---|---|
| Status | grob geplant / detailliert (wartet auf Freigabe) / freigegeben / in Arbeit / erledigt |
| Aufwand | x PW (mit Claude Code) |
| Zeitraum | KW … |
| Meilenstein | M… |
| Freigabe | Datum, durch wen |
## Ziel
Ein bis drei Sätze: Was kann man danach, das vorher nicht ging?
## Umfang
**Enthalten:** …
**Nicht enthalten:** …
## Voraussetzungen
Andere Arbeitspakete, Zulieferungen, Fragen aus `docs/fragen.md` (mit ID).
## Entscheidungen
| Nr. | Frage | Vorschlag | Entschieden |
|---|---|---|---|
| Ex.1 | … | … | offen |
## Schritte
Je Schritt höchstens ein Tag, mit prüfbarem Ergebnis.
- [ ] **x.1** … → Ergebnis: …
## Abnahmekriterien
- …
## Tests
- …
## Risiken
- …