import uuid from datetime import date, datetime from decimal import Decimal from pydantic import BaseModel, ConfigDict from app.models.kontrolle import KontrollStatus class KontrolleCreate(BaseModel): uebernehmen: bool = False class KontrolleRead(BaseModel): model_config = ConfigDict(from_attributes=True) id: uuid.UUID objekt_id: int benutzer_id: int status: KontrollStatus gestartet_am: datetime beendet_am: datetime | None abbruch_grund: str | None class KontrollpositionInput(BaseModel): istmenge: Decimal # Nutzer-Vorgabe: Ablauf/Charge/SN gehören zur Erfassung während der # Kontrolle dazu, wie die Menge - werden hier optional mitgegeben und auf # der Objektposition gespeichert (Vier-Kernbegriffe bleiben unberührt: # nur Objektposition.istmenge darf ausschließlich Nachfüllung ändern, # diese drei Felder sind unabhängig davon). ablaufdatum: date | None = None chargennummer: str | None = None seriennummer: str | None = None class KontrollpositionRead(BaseModel): model_config = ConfigDict(from_attributes=True) id: uuid.UUID kontrolle_id: uuid.UUID material_id: int sollmenge_snapshot: Decimal istmenge_erfasst: Decimal abweichung: bool fehlbestand_id: uuid.UUID | None = None class KontrolleAbbrechenRequest(BaseModel): grund: str | None = None class KontrolleFortschritt(BaseModel): kontrolle: KontrolleRead positionen: list[KontrollpositionRead] anzahl_positionen_gesamt: int anzahl_positionen_erfasst: int