Final commit.
This commit is contained in:
@ -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)
|
||||
|
||||
Reference in New Issue
Block a user