Objekttyp.ist_zugfahrzeug (Migration 0011) grenzt die Fahrzeug-Zuordnung serverseitig auf tatsächliche Zugfahrzeuge ein (422 bei Verstoß), Frontend filtert die Fahrzeug-Dropdowns entsprechend. Neue Dashboard-Endpunkte /dashboard/einsatzbereitschaft und /dashboard/prueftermine plus DashboardPage mit drei Kacheln (Einsatzbereitschaft, Prüftermine, Ablaufdaten). Aktive Mindermengen-Genehmigung zählt als "eingeschränkt einsatzbereit", nicht als voll einsatzbereit (U2/Karte 08). Neue FehlbestandListePage: Fehlbestände eigenständig nachfüllen/Mindermenge genehmigen, ohne komplette Kontrolle des Objekts zu starten (Backend existierte bereits, nur das Frontend fehlte). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC8HYvv6UkCVYheYiTw9DD
52 lines
1.1 KiB
Python
52 lines
1.1 KiB
Python
import uuid
|
|
from datetime import date
|
|
|
|
from pydantic import BaseModel
|
|
|
|
from app.models.geraet_instanz import GeraetStatus
|
|
|
|
|
|
class KennzahlenRead(BaseModel):
|
|
anzahl_offener_fehlbestaende: int
|
|
anzahl_genehmigter_mindermengen: int
|
|
anzahl_kuerzlich_erledigter_fehlbestaende: int
|
|
anzahl_bevorstehender_ablaufdaten: int
|
|
anzahl_problematischer_objekte: int
|
|
anzahl_objekte_gesamt: int
|
|
|
|
|
|
class AblaufdatumRead(BaseModel):
|
|
objekt_id: int
|
|
material_id: int
|
|
ablaufdatum: date
|
|
verbleibende_tage: int
|
|
status: str
|
|
|
|
|
|
class ObjektMangelRead(BaseModel):
|
|
objekt_id: int
|
|
code: str
|
|
name: str
|
|
gruende: list[str]
|
|
|
|
|
|
class EinsatzbereitschaftRead(BaseModel):
|
|
einsatzbereit: int
|
|
eingeschraenkt_einsatzbereit: int
|
|
nicht_einsatzbereit: int
|
|
gesamt: int
|
|
details: list[ObjektMangelRead]
|
|
|
|
|
|
class PrueftermineintragRead(BaseModel):
|
|
geraet_instanz_id: uuid.UUID
|
|
objekt_id: int
|
|
objektposition_id: uuid.UUID
|
|
material_id: int
|
|
material_name: str
|
|
seriennummer: str
|
|
geraet_status: GeraetStatus
|
|
naechste_pruefung: date
|
|
verbleibende_tage: int
|
|
status: str
|