Files
MABEA/arbeitskacheln/10_maintenance.md
T
patrickandClaude Sonnet 5 2a4d391711
CI / backend-tests (push) Failing after 2m4s
CI / frontend-build (push) Successful in 18s
feat(maintenance): MAINT-Epic (Wartungspläne/-aufträge, Werkstatt) + Akte-Redesign
Neues Wartungskonzept: Wartungsplan+Position+Intervall (zeit/km/
Betriebsstunden, kombinierbar - fällig sobald ein Kriterium erreicht
ist), Wartungsauftrag mit intern/externer Werkstatt, Status offen/
in_arbeit/erledigt, Kosten, Historie, Dokument-Anhang. Ad-hoc-Aufträge
ohne Plan möglich (z.B. kleinere Reparatur). Admin-Tab "Wartungspläne".

Objektakte-Redesign (Epic 21, Nutzer-Feedback "wirkt nicht modern"):
CSS-Grid statt Karten-Stapel, einspaltig mobil, zweispaltig ab 900px;
Fahrzeug-Objekte zeigen Wartung/Fahrzeugdaten prominent, Geräte/
Rucksäcke die Beladung. Dabei gefundene Lücke: Beladung (Soll/Ist je
Position) fehlte in der Akte komplett, nur über eine laufende
Kontrolle sichtbar - jetzt eigene Karte.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-06 23:17:39 +02:00

151 lines
6.6 KiB
Markdown

# Epic 10 — Maintenance
Details zu MAINT-001 … MAINT-006 (vollständig).
---
## MAINT-001 — Wartungspläne
- **Ziel:** Definierte Wartungsvorgaben je AssetType/Asset.
- **Beschreibung:** Wartungsplan-Stammdaten mit Bezug zu AssetType, Liste vorgesehener
Wartungsarten (z.B. „Ölwechsel", „Filterwechsel").
- **Benutzerwert:** Standardisierte Wartungsvorgaben statt Herstellerhandbuch jedes Mal
nachschlagen.
- **Abhängigkeiten:** ASSET-002
- **Datenmodell:** `wartungsplan` (id, asset_type_id, name), `wartungsplan_position`
(plan_id, wartungsart, beschreibung)
- **Backend:** CRUD
- **Frontend:** Verwaltung
- **Mobile:** Anzeige
- **QR-Code/Seriennummer/Inventarnummer:** nein
- **Akte:** Wartungsbereich
- **Rechte:** Materialwart/Administrator
- **Audit:** Änderung geloggt
- **Akzeptanzkriterien:** Wartungsplan mit mehreren Positionen anlegen.
- **Tests:** CRUD-Test.
- **DoD:** umgesetzt (2026-09-06). `wartungsplan`/`wartungsplan_position` je
Objekttyp, `POST/GET /wartungsplaene`, Admin-Tab "Wartungspläne".
## MAINT-002 — Wartungsintervalle
- **Ziel:** Wann eine Wartungsposition fällig wird (zeit-, km- oder
betriebsstundenabhängig).
- **Beschreibung:** Intervall-Typ (Zeit/km/Betriebsstunden) + Wert, nutzt ASSET-009 für
den Zähler-Abgleich.
- **Benutzerwert:** Automatische Fälligkeitsberechnung statt Herstellervorgabe manuell im
Kopf behalten.
- **Abhängigkeiten:** MAINT-001, ASSET-009
- **Datenmodell:** `wartungsintervall` (wartungsplan_position_id, typ:
zeit/km/betriebsstunden, wert)
- **Backend:** Fälligkeitsberechnung, kombiniert ggf. mehrere Kriterien („je nachdem was
zuerst eintritt")
- **Frontend:** Intervall-Einstellung
- **Mobile:** Anzeige
- **QR-Code/Seriennummer/Inventarnummer:** nein
- **Akte:** Wartungsbereich
- **Rechte:** Materialwart/Administrator
- **Audit:** Änderung geloggt
- **Akzeptanzkriterien:** alle drei Intervall-Typen einzeln und kombiniert korrekt
berechnet.
- **Tests:** Berechnungstest je Typ + Kombinationstest („je nachdem was zuerst
eintritt").
- **DoD:** umgesetzt (2026-09-06), abgewandelt: `wartungsintervall` (zeit/km/
betriebsstunden je Position, mehrere kombinierbar). Statt eines eigenen
Zähler-Abgleich-Konzepts (ASSET-009 existiert in MABEA nicht) werden die
bereits vorhandenen `Fahrzeugdetails.kilometerstand`/`betriebsstunden`
genutzt — für Geräte ohne Fahrzeugdetails wirkt nur das Zeit-Intervall.
`GET /objekte/{id}/faellige-wartungen` berechnet je Position, welches
Kriterium zuerst eintritt; nie durchgeführt gilt immer als fällig. Getestet:
alle drei Typen einzeln + Kombination ("km vor Zeit fällig").
## MAINT-003 — Wartungsauftrag
- **Ziel:** Konkrete Durchführung einer fälligen Wartung beauftragen/nachverfolgen.
- **Beschreibung:** Auftrag mit Status (offen/in Arbeit/erledigt), zugeordnet zu
Wartungsplan-Position + Asset.
- **Benutzerwert:** Werkstattauftrag nachvollziehbar statt Zettelwirtschaft.
- **Abhängigkeiten:** MAINT-002
- **Datenmodell:** `wartungsauftrag` (id, asset_id, wartungsplan_position_id, status,
erstellt_am, erledigt_am, durchgefuehrt_von)
- **Backend:** CRUD + Statuswechsel
- **Frontend:** Auftragsliste/-formular
- **Mobile:** Statuswechsel im Feld
- **QR-Code:** Scan Asset zeigt offene Aufträge
- **Seriennummer/Inventarnummer:** nein
- **Akte:** Wartungsbereich
- **Rechte:** Materialwart/Administrator erstellt, Werkstatt/Fahrzeugwart erledigt
- **Audit:** Statuswechsel geloggt
- **Akzeptanzkriterien:** Auftrag anlegen, Status durchlaufen bis erledigt.
- **Tests:** Statuswechsel-Test.
- **DoD:** umgesetzt (2026-09-06). `wartungsauftrag` (Objekt + optional
Geräte-Instanz + optional Wartungsplan-Position — auch ad-hoc ohne Plan,
z.B. "kleinere Reparatur"), Status offen/in_arbeit/erledigt, **werkstatt_intern
+ werkstatt_name** (beantwortet die Nutzerfrage nach externer Werkstatt),
Kosten optional. Zyklus offen→in_arbeit→erledigt getestet, inkl. ad-hoc-
Auftrag ohne Plan.
## MAINT-004 — Wartungshistorie
- **Ziel:** Nachvollziehen, welche Wartungen wann durchgeführt wurden.
- **Beschreibung:** Liste erledigter Wartungsaufträge je Asset.
- **Benutzerwert:** Wartungsnachweis (auch für Garantie/Weiterverkauf relevant).
- **Abhängigkeiten:** MAINT-003, FOUND-006
- **Datenmodell:** keins neu (aus MAINT-003-Daten)
- **Backend:** Abfrage je Asset
- **Frontend:** Anzeige in der Akte
- **Mobile:** Anzeige
- **QR-Code/Seriennummer/Inventarnummer:** nein
- **Akte:** Historien-/Wartungsbereich
- **Rechte:** wie Lese-Recht
- **Audit:** zeigt Audit-relevante Daten
- **Akzeptanzkriterien:** chronologische Liste korrekt.
- **Tests:** Anzeigetest.
- **DoD:** umgesetzt (2026-09-06). Kein neuer Endpunkt nötig -
`GET /wartungsauftraege?objekt_id=` liefert offene+erledigte, Akte zeigt
beide getrennt in der neuen "Wartung"-Sektion.
## MAINT-005 — Ersatzteile/Kosten (P3)
- **Ziel:** Welche Teile/Kosten bei einer Wartung angefallen sind.
- **Beschreibung:** Ersatzteilliste + Kostenfeld je Wartungsauftrag.
- **Benutzerwert:** Kostenübersicht/Budgetplanung.
- **Abhängigkeiten:** MAINT-003
- **Datenmodell:** `wartungsauftrag_teil` (auftrag_id, bezeichnung, menge, kosten)
- **Backend:** CRUD
- **Frontend:** Positionsliste im Auftrag
- **Mobile:** Erfassung
- **QR-Code/Seriennummer/Inventarnummer:** nein
- **Akte:** Wartungsbereich
- **Rechte:** Materialwart/Administrator
- **Audit:** Änderung geloggt
- **Akzeptanzkriterien:** Teile/Kosten erfassen, Summe korrekt.
- **Tests:** Summen-Test.
- **DoD:** **P3 — kann zurückgestellt werden**, kein MVP-Bestandteil.
## MAINT-006 — Wartungsdokument-Anbindung
- **Ziel:** Wartungsbericht/Rechnung an den Auftrag anhängen.
- **Beschreibung:** Nutzt DOC-001, `entitaet_typ=wartungsauftrag`.
- **Benutzerwert:** Beleg griffbereit.
- **Abhängigkeiten:** MAINT-003, DOC-001
- **Datenmodell:** keins neu
- **Backend:** keins zusätzlich
- **Frontend:** Dokumente-Panel am Auftrag
- **Mobile:** Anzeige
- **QR-Code/Seriennummer/Inventarnummer:** nein
- **Akte:** Wartungsbereich
- **Rechte:** wie DOC-001
- **Audit:** wie DOC-001
- **Akzeptanzkriterien:** Dokument anhängen.
- **Tests:** Integrationstest.
- **DoD:** umgesetzt (2026-09-06). `entitaet_typ=wartungsauftrag` zur Whitelist
ergänzt, `DokumentePanel` in der Wartung-Sektion der Akte je Auftrag.
---
**MABEA-Ist-Stand-Abgleich (aktualisiert 2026-09-06):** MAINT-001..004+006
vollständig umgesetzt — echtes Wartungskonzept existiert jetzt (Wartungspläne,
Intervalle, Werkstattaufträge intern/extern, Historie, Dokument-Anhang).
MAINT-005 (Ersatzteile/Kosten-Detailliste) bleibt bewusst zurückgestellt (P3) —
Kosten als einzelnes Feld am Auftrag reicht für den MVP.