# KI-BauIN – Hinweise für Claude Code KI-gestützte Prüfung von Mehrkostenanzeigen (MKA) und Nachträgen im Bahnbau. Stack und Begründungen: `docs/tech-stack.md`. Einrichtung und Adressen: `README.md`. ## Befehle (immer über Sail, PHP 8.5 im Container) ```bash ./vendor/bin/sail up -d ./vendor/bin/sail artisan test # alle Tests ./vendor/bin/sail artisan test --filter=NameDesTests # einzelner Test ./vendor/bin/sail bin pint # Code-Stil ./vendor/bin/sail bin phpstan analyse # statische Analyse, Stufe 7 ./vendor/bin/sail composer require … # Pakete nur im Container installieren npm run build # Assets (oder npm run dev) ``` Vor jedem Commit: Tests, Pint und PHPStan ohne Fehler. Der gitleaks-Hook (`.githooks`) wird nicht umgangen. ## Harte Vorgaben - **Alles lokal.** Keine Skripte, Fonts, Bilder oder APIs von fremden Hosts. Einzige Ausnahme ist später die KI-API des Kunden. `tests/Feature/NoExternalResourcesTest.php` muss grün bleiben. - `` nur mit `text` (Initialen), nie mit `model`, `gravatar` oder Bild-URL – sonst lädt TallStackUI von ui-avatars.com bzw. gravatar.com. - `` nicht verwenden (lädt Emojis von Google). - **Keine echten Kundendaten** in Code, Tests, Fixtures, Seedern, Commits oder Prompts. Nur erfundene Beispieldaten (z. B. Projekt „Musterstadt Süd“). - **Rechte bei jeder geschützten Aktion prüfen** (Policies/Gates, Spatie laravel-permission): in Controllern und Livewire-Aktionen, bei Downloads, bei Suchtreffern und bevor Inhalte an ein Sprachmodell gehen. Die Oberfläche auszublenden reicht nicht. - **Dateien privat speichern** (Disk `local`) und nur über eine Route mit Rechteprüfung ausliefern. ## Entwicklungsgrundsätze - Eingaben serverseitig validieren. - Geschäftslogik in Services (`app/Services/…`); Livewire-Komponenten steuern nur Anzeige und Interaktion. - Zusammengehörige Datenänderungen in einer Datenbanktransaktion. - Lang laufende oder wiederholbare Arbeit (Dokumentverarbeitung, Embeddings, KI-Aufrufe) als Job in der Warteschlange (`database`), mit begrenzten Wiederholungen und nachvollziehbarem Status. - Tabellen, Formulare und Navigation aus gemeinsamen Layouts und Komponenten aufbauen. - Jede fachliche Änderung mit Feature-Test. ## Konventionen - **Livewire 4, klassenbasierte Komponenten:** Klasse in `app/Livewire/…`, View in `resources/views/livewire/…`. - **UI: TallStackUI 4 mit Präfix `ts-`** (``, ``, `` …). Kurzdoku je Komponente: `vendor/tallstackui/tallstackui/.ai/components/`. Kein Flux. Toasts/Dialoge aus Livewire über `TallStackUi\Traits\Interactions` (`$this->toast()->success(…)->send()`). - **Eigene Blade-Komponenten ohne Präfix**, z. B. ``, ``, ``. - **Dark Mode** über `tallstackui_darkTheme()` am ``-Element; Speicherschlüssel `dark-theme`. - **Benennung:** Fachbegriffe deutsch (`Mehrkostenanzeige`, `LvPosition`, `Los`), technische Begriffe nach Laravel-Konvention englisch (`Controller`, `Policy`, `Job`). - **Länder DE/AT:** gemeinsamer Kern, länderspezifische Logik hinter Schnittstellen in `app/Laender/DE` bzw. `app/Laender/AT`. Fachliche Tabellen bekommen `mandant_id` und `land`. - **Mehrsprachigkeit:** Jeder sichtbare Text über `__('English source text')`, nie fest im Template. Standardsprache Deutsch, angebotene Sprachen in `config('app.available_locales')`, Sprache je Benutzer in `users.locale` (Middleware `SetLocale`). - `lang/de.json` und `lang/de/*.php` erzeugt Laravel Lang – nicht von Hand ändern. - Eigene Texte und Korrekturen gehören nach `lang/project/{locale}.json`, danach `sail artisan lang:apply-project`. Nach `sail artisan lang:update` ebenfalls `lang:apply-project`. - `TranslationCoverageTest` schlägt fehl, wenn ein Text ohne Übersetzung ist. - In Tests Texte über `__()` prüfen statt fest auf Englisch oder Deutsch. - **Tests:** Pest als Runner, Tests im PHPUnit-Klassenstil (`tests/Feature`, `tests/Unit`). Tests laufen gegen die Datenbank `testing`, nie gegen `ki_bauin`. - **Commit-Nachrichten** auf Deutsch.