Karte 14 Schritt 2 (Admin-Teil) + Frontend für Anhänger-Kopplung
CI / backend-tests (push) Failing after 1m21s
CI / frontend-build (push) Successful in 22s

Backend: geraet_instanz-CRUD (Liste/Anlegen/Status ändern inkl. optionalem
Fehlbestand pro Gerät/Löschen), pruefintervall_monate in Objektposition-
Schemas verdrahtet (Prüfdatum -> naechste_pruefung wird automatisch
berechnet, Monatsrechnung ohne neue Dependency).

Frontend: GeraeteInstanzenListe ersetzt das Einzel-SN-Feld im Admin-Portal
(ObjektPositionenPanel) durch eine Instanz-Liste mit Status/Prüfdatum/
Bemerkung je Exemplar - löst das Karte-14-Kernproblem (mehrere Geräte pro
Position). ObjektSection: Anhänger-Kopplung bei Anlage und nachträglich
änderbar.

Kontroll-Erfassung (PositionCard/KontrollPage) bleibt unverändert - die
komplett neue Erfassungs-UI für geraet_sn (Umsetzungsschritt 4, Karte 14)
ist bewusst nicht Teil dieses Commits.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
This commit is contained in:
2026-09-04 20:55:09 +02:00
co-authored by Claude Sonnet 5
parent eff9fe4956
commit 6934276e8a
14 changed files with 685 additions and 7 deletions
+31
View File
@@ -0,0 +1,31 @@
import uuid
from datetime import date
from pydantic import BaseModel, ConfigDict
from app.models.geraet_instanz import GeraetStatus
class GeraetInstanzCreate(BaseModel):
seriennummer: str
class GeraetInstanzRead(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: uuid.UUID
objektposition_id: uuid.UUID
seriennummer: str
pruefdatum: date | None
naechste_pruefung: date | None
status: GeraetStatus
bemerkung: str | None
class GeraetInstanzStatusUpdate(BaseModel):
status: GeraetStatus
pruefdatum: date | None = None
bemerkung: str | None = None
# Karte 14: "pro Gerät entscheidbar" - defekt/in_reparatur kann optional
# einen Fehlbestand erzeugen (nutzt bestehende Fehlbestand-Infrastruktur),
# muss aber nicht (z.B. Ersatzgerät bereits vorhanden).
erzeuge_fehlbestand: bool = False
+2
View File
@@ -52,6 +52,7 @@ class ObjektpositionRead(BaseModel):
ablaufdatum: date | None
chargennummer: str | None
code: str | None
pruefintervall_monate: int | None
class ObjektpositionUpdate(BaseModel):
@@ -62,6 +63,7 @@ class ObjektpositionUpdate(BaseModel):
ablaufdatum: date | None = None
chargennummer: str | None = None
code: str | None = None
pruefintervall_monate: int | None = None
class ObjektpositionCreate(BaseModel):