Files
MABEA/backend/app/schemas/kontrolle.py
T
patrickandClaude Sonnet 5 0988f8d026
CI / backend-tests (push) Successful in 54s
CI / frontend-build (push) Successful in 18s
Ablauf/Charge/SN gehören zur Kontroll-Erfassung, nicht nur zur Admin-Pflege
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
2026-09-04 01:11:17 +02:00

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