Files
MABEA/backend/app/schemas/mangel.py
T
patrickandClaude Sonnet 5 eb20affd5d
CI / backend-tests (push) Failing after 1m37s
CI / frontend-build (push) Successful in 18s
feat(mangel): Mangel-Ticket-System (Roadmap Phase 2)
Eigener Workflow für Schäden/Defekte, getrennt von Fehlbestand (Mengen-
Abweichung Soll/Ist). Status: neu → in_bearbeitung → ersatzteil_bestellt/
reparatur_geplant → erledigt. entitaet_typ/entitaet_id optional (Objektposition
oder Geräteinstanz), analog zum bestehenden historie.entitaet_typ-Muster,
objekt_id immer gesetzt für Dashboard-Abfragen.

Ein offener Mangel mit prioritaet=hoch macht das Objekt "nicht einsatzbereit"
(neuer Grund mangel_kritisch_offen in dashboard.einsatzbereitschaft) -
niedrige/normale Mängel blockieren nicht.

Melden/Lesen: alle Mitarbeiter+. Status ändern: Materialverantwortliche+.
Neue Seite /maengel für alle eingeloggten Nutzer (Nav-Link "Mängel").

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KC8HYvv6UkCVYheYiTw9DD
2026-09-05 13:23:38 +02:00

43 lines
1.2 KiB
Python

import uuid
from datetime import datetime
from typing import Literal
from pydantic import BaseModel, ConfigDict, model_validator
from app.models.mangel import MangelPrioritaet, MangelStatus
EntitaetTyp = Literal["objektposition", "geraet_instanz"]
class MangelCreate(BaseModel):
objekt_id: int
entitaet_typ: EntitaetTyp | None = None
entitaet_id: str | None = None
beschreibung: str
prioritaet: MangelPrioritaet = MangelPrioritaet.normal
@model_validator(mode="after")
def _entitaet_beide_oder_keins(self) -> "MangelCreate":
if (self.entitaet_typ is None) != (self.entitaet_id is None):
raise ValueError("entitaet_typ und entitaet_id müssen beide gesetzt oder beide leer sein")
return self
class MangelRead(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: uuid.UUID
objekt_id: int
entitaet_typ: str | None
entitaet_id: str | None
beschreibung: str
prioritaet: MangelPrioritaet
status: MangelStatus
gemeldet_von: int
gemeldet_am: datetime
erledigt_von: int | None
erledigt_am: datetime | None
class MangelStatusUpdate(BaseModel):
status: MangelStatus