Final commit.

This commit is contained in:
Dennis Nemec
2026-06-01 17:12:28 +02:00
parent 3ecbc82885
commit a9bf8ecdd1
385 changed files with 29081 additions and 12089 deletions

View File

@ -150,6 +150,41 @@ Smoke: Login → `loadTourOfToday()` → Tour kommt durch.
Smoke: Tab-Navigation funktioniert, jeder Tab lädt ohne Crash.
### Phase G — Delivery-Lifecycle-Audit-Log (offen)
**Status:** geplant, noch nicht begonnen. Aus der Diskussion zur
Wiederherstellung abgebrochener Lieferungen (Phase C+D-4): heute
gehen `state_reason`-Begründungen beim `resume` verloren, weil das
Feld direkt an der `deliveries`-Zeile lebt und beim Wiederherstellen
genullt wird. Item-Aktionen sind sauber auditierbar (`scan_audit`,
append-only) — Delivery-Lifecycle ist es nicht.
**Scope:**
1. Neue Tabelle `delivery_audit` analog zu `scan_audit`:
- `id`, `delivery_id`, `client_action_id` (UUID UNIQUE — Idempotenz)
- `action` (`hold`|`resume`|`cancel`|`complete`)
- `previous_state`, `resulting_state`
- `reason` (Pflicht bei `hold` / `cancel`)
- `actor_personalnummer`, `actor_car_id?`
- `client_acted_at`, `server_recorded_at`
- denormalisierter ERP-Bezug: `erp_belegart_id`, `erp_belegnummer`
2. Backend: Audit-Insert in jedem `apply_action`-Pfad
(`delivery_repository.rs`). Request-DTOs bekommen Pflichtfelder
`clientActionId` + `clientActedAt`.
3. OpenAPI + Dart-Client neu generieren.
4. App-Bloc: UUID + Timestamp pro Lifecycle-Event mitsenden
(Helper-Funktion analog zur Scan-Pipeline, dort sitzt das Pattern
schon im `TourBloc`).
5. **Optional, zweiter Schritt:** `GET /deliveries/{id}/audit`
plus UI-Anzeige der Historie. Sinnvollste Stelle: im
„Wiederherstellen"-Dialog vom Cancel-Recovery zeigen wir den
ursprünglichen Eintrag („Wurde am … durch … abgebrochen mit
Grund: …"), damit der Fahrer eine bewusste Entscheidung trifft.
**Out of Scope dieser Phase:**
- `assignCar`-Audit (andere Geste, kein Reason, eigene Sub-Phase).
- Notizen-Audit (Notes sind schon append-only — separate Aktivität).
### Phase F — Smoke des kompletten Flows
Manuell durchklicken:
1. Login (Keycloak)