// ============================================================================= // Vehicle Fleet Management — Domain Model // ============================================================================= // ── Enums ───────────────────────────────────────────────────────────────────── export enum FahrzeugStatus { Einsatzbereit = 'einsatzbereit', AusserDienstWartung = 'ausser_dienst_wartung', AusserDienstSchaden = 'ausser_dienst_schaden', InLehrgang = 'in_lehrgang', } export const FahrzeugStatusLabel: Record = { [FahrzeugStatus.Einsatzbereit]: 'Einsatzbereit', [FahrzeugStatus.AusserDienstWartung]: 'Außer Dienst (Wartung)', [FahrzeugStatus.AusserDienstSchaden]: 'Außer Dienst (Schaden)', [FahrzeugStatus.InLehrgang]: 'In Lehrgang', }; export type WartungslogArt = | '§57a Prüfung' | 'Service' | 'Sonstiges'; // ── Core Entities ───────────────────────────────────────────────────────────── export interface Fahrzeug { id: string; bezeichnung: string; kurzname: string | null; amtliches_kennzeichen: string | null; fahrgestellnummer: string | null; baujahr: number | null; hersteller: string | null; typ_schluessel: string | null; besatzung_soll: string | null; status: FahrzeugStatus; status_bemerkung: string | null; standort: string; bild_url: string | null; paragraph57a_faellig_am: Date | null; naechste_wartung_am: Date | null; created_at: Date; updated_at: Date; } export interface FahrzeugWartungslog { id: string; fahrzeug_id: string; datum: Date; art: WartungslogArt | null; beschreibung: string; km_stand: number | null; kraftstoff_liter: number | null; kosten: number | null; externe_werkstatt: string | null; erfasst_von: string | null; created_at: Date; } // ── List Item (Grid / Card view) ────────────────────────────────────────────── export interface FahrzeugListItem { id: string; bezeichnung: string; kurzname: string | null; amtliches_kennzeichen: string | null; baujahr: number | null; hersteller: string | null; besatzung_soll: string | null; status: FahrzeugStatus; status_bemerkung: string | null; bild_url: string | null; paragraph57a_faellig_am: Date | null; paragraph57a_tage_bis_faelligkeit: number | null; naechste_wartung_am: Date | null; wartung_tage_bis_faelligkeit: number | null; naechste_pruefung_tage: number | null; } // ── Detail View ─────────────────────────────────────────────────────────────── export interface FahrzeugDetail extends Fahrzeug { paragraph57a_tage_bis_faelligkeit: number | null; wartung_tage_bis_faelligkeit: number | null; naechste_pruefung_tage: number | null; wartungslog: FahrzeugWartungslog[]; } // ── Dashboard KPI ───────────────────────────────────────────────────────────── export interface VehicleStats { total: number; einsatzbereit: number; ausserDienst: number; inLehrgang: number; inspectionsDue: number; inspectionsOverdue: number; } // ── Inspection Alert ────────────────────────────────────────────────────────── export type InspectionAlertType = '57a' | 'wartung'; export interface InspectionAlert { fahrzeugId: string; bezeichnung: string; kurzname: string | null; type: InspectionAlertType; faelligAm: Date; tage: number; } // ── Create / Update DTOs ────────────────────────────────────────────────────── export interface CreateFahrzeugData { bezeichnung: string; kurzname?: string; amtliches_kennzeichen?: string; fahrgestellnummer?: string; baujahr?: number; hersteller?: string; typ_schluessel?: string; besatzung_soll?: string; status?: FahrzeugStatus; status_bemerkung?: string; standort?: string; bild_url?: string; paragraph57a_faellig_am?: string; naechste_wartung_am?: string; } export interface UpdateFahrzeugData { bezeichnung?: string; kurzname?: string | null; amtliches_kennzeichen?: string | null; fahrgestellnummer?: string | null; baujahr?: number | null; hersteller?: string | null; typ_schluessel?: string | null; besatzung_soll?: string | null; status?: FahrzeugStatus; status_bemerkung?: string | null; standort?: string; bild_url?: string | null; paragraph57a_faellig_am?: string | null; naechste_wartung_am?: string | null; } export interface CreateWartungslogData { datum: string; art?: WartungslogArt; beschreibung: string; km_stand?: number; kraftstoff_liter?: number; kosten?: number; externe_werkstatt?: string; }