Files
patrickandClaude Sonnet 5 27c249993a
CI / backend-tests (push) Failing after 1m53s
CI / frontend-build (push) Successful in 17s
feat(fahrzeug): Funkkenner-Feld ergänzt (BOS-Digitalfunk-Kennung)
Nutzer-Fund: funkkenner (z.B. OPTA-Nummer) fehlte in fahrzeugdetails komplett
- eigenes Feld, nicht dasselbe wie funkrufname (gesprochener Rufname vs.
formale Funk-Identifikationsnummer im Digitalfunknetz).

Migration 0018, Model/Schema/Frontend-Formular ergänzt. Auch im Kachel-
Backlog (arbeitskacheln/05_fleet.md, FLEET-002) nachgezogen.

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

102 lines
2.6 KiB
Python

import uuid
from datetime import date, datetime
from decimal import Decimal
from pydantic import BaseModel, ConfigDict
from app.models.objekt import ObjektStatus
from app.models.objektposition import ObjektpositionStatus
class ObjektCreate(BaseModel):
code: str
name: str
objekttyp_id: int
vorlage_id: int
standort_id: int
fahrzeug_id: int | None = None
class ObjektRead(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: int
code: str
name: str
objekttyp_id: int
vorlage_id: int | None
standort_id: int
status: ObjektStatus
fahrzeug_id: int | None
letzte_kontrolle_am: datetime | None = None
class ObjektUpdate(BaseModel):
fahrzeug_id: int | None = None
status: ObjektStatus | None = None
class FahrzeugdetailsUpsert(BaseModel):
kennzeichen: str | None = None
funkrufname: str | None = None
funkkenner: str | None = None
baujahr: int | None = None
kilometerstand: int | None = None
betriebsstunden: Decimal | None = None
naechste_hu: date | None = None
naechste_uvv: date | None = None
class FahrzeugdetailsRead(BaseModel):
model_config = ConfigDict(from_attributes=True)
objekt_id: int
kennzeichen: str | None
funkrufname: str | None
funkkenner: str | None
baujahr: int | None
kilometerstand: int | None
betriebsstunden: Decimal | None
naechste_hu: date | None
naechste_uvv: date | None
class ObjektDuplizierenRequest(BaseModel):
neuer_code: str
neuer_name: str
neuer_standort_id: int
class ObjektpositionRead(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: uuid.UUID
objekt_id: int
material_id: int
sollmenge_override: Decimal | None
sollmenge_effektiv: Decimal
ist_status: ObjektpositionStatus
istmenge: Decimal
seriennummer: str | None
ablaufdatum: date | None
chargennummer: str | None
code: str | None
pruefintervall_monate: int | None
class ObjektpositionUpdate(BaseModel):
sollmenge_override: Decimal | None = None
ist_status: ObjektpositionStatus | None = None
istmenge: Decimal | None = None
seriennummer: str | None = None
ablaufdatum: date | None = None
chargennummer: str | None = None
code: str | None = None
pruefintervall_monate: int | None = None
class ObjektpositionCreate(BaseModel):
"""Prompt 10 Punkt 2: zusätzliches, nicht in der Vorlage enthaltenes Material.
sollmenge_override ist hier Pflicht, da keine Vorlagenposition existiert, aus
der sich die Sollmenge dynamisch ableiten ließe."""
material_id: int
sollmenge_override: Decimal