Files
dashboard/backend/src/models/vehicle.model.ts
Matthias Hochmeister 1e478479be rework vehicle handling
2026-02-28 13:57:41 +01:00

160 lines
6.1 KiB
TypeScript

// =============================================================================
// 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, string> = {
[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;
}