Nutzer-Vorgabe: "Ablauf/Charge/SN gehört mit zu den Kontrollen wie auch die
Menge". PUT .../positionen/{material_id} akzeptiert jetzt optional
ablaufdatum/chargennummer/seriennummer und schreibt sie auf die
Objektposition (Vier-Kernbegriffe bleiben unberührt: nur diese drei Felder,
niemals istmenge - das bleibt exklusiv Nachfüllung vorbehalten). Offline-
Queue und PositionCard erweitert: Felder erscheinen nur passend zum
Materialtyp (ablauf_charge -> Datum+Charge, geraet_sn -> SN). Admin-Panel
(ObjektPositionenPanel) bleibt zusätzlich für nachträgliche Korrekturen.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L85hmKbvX7Cqkq47KnQhFt
57 lines
1.5 KiB
Python
57 lines
1.5 KiB
Python
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
|