160 lines
6.1 KiB
TypeScript
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;
|
|
}
|