Files
dashboard/backend/src/models/equipment.model.ts
Matthias Hochmeister e2be29c712 refine vehicle freatures
2026-02-28 17:19:18 +01:00

176 lines
6.9 KiB
TypeScript

// =============================================================================
// Equipment Management — Domain Model
// =============================================================================
// ── Enums ─────────────────────────────────────────────────────────────────────
export enum AusruestungStatus {
Einsatzbereit = 'einsatzbereit',
Beschaedigt = 'beschaedigt',
InWartung = 'in_wartung',
AusserDienst = 'ausser_dienst',
}
export const AusruestungStatusLabel: Record<AusruestungStatus, string> = {
[AusruestungStatus.Einsatzbereit]: 'Einsatzbereit',
[AusruestungStatus.Beschaedigt]: 'Beschädigt',
[AusruestungStatus.InWartung]: 'In Wartung',
[AusruestungStatus.AusserDienst]: 'Außer Dienst',
};
export type AusruestungWartungslogArt = 'Prüfung' | 'Reparatur' | 'Sonstiges';
// ── Lookup Entity ─────────────────────────────────────────────────────────────
export interface AusruestungKategorie {
id: string;
name: string;
kurzname: string;
sortierung: number;
}
// ── Core Entity ───────────────────────────────────────────────────────────────
export interface Ausruestung {
id: string;
bezeichnung: string;
kategorie_id: string;
seriennummer: string | null;
inventarnummer: string | null;
hersteller: string | null;
baujahr: number | null;
status: AusruestungStatus;
status_bemerkung: string | null;
ist_wichtig: boolean;
fahrzeug_id: string | null;
standort: string;
pruef_intervall_monate: number | null;
letzte_pruefung_am: Date | null;
naechste_pruefung_am: Date | null;
bemerkung: string | null;
deleted_at: Date | null;
created_at: Date;
updated_at: Date;
}
// ── List Item (Grid / Card view) ──────────────────────────────────────────────
export interface AusruestungListItem {
id: string;
bezeichnung: string;
kategorie_id: string;
seriennummer: string | null;
inventarnummer: string | null;
hersteller: string | null;
baujahr: number | null;
status: AusruestungStatus;
status_bemerkung: string | null;
ist_wichtig: boolean;
fahrzeug_id: string | null;
standort: string;
pruef_intervall_monate: number | null;
letzte_pruefung_am: Date | null;
naechste_pruefung_am: Date | null;
bemerkung: string | null;
created_at: Date;
updated_at: Date;
kategorie_name: string;
kategorie_kurzname: string;
fahrzeug_bezeichnung: string | null;
fahrzeug_kurzname: string | null;
pruefung_tage_bis_faelligkeit: number | null;
}
// ── Detail View ───────────────────────────────────────────────────────────────
export interface AusruestungDetail extends AusruestungListItem {
wartungslog: AusruestungWartungslog[];
}
// ── Wartungslog Entity ────────────────────────────────────────────────────────
export interface AusruestungWartungslog {
id: string;
ausruestung_id: string;
datum: Date;
art: AusruestungWartungslogArt;
beschreibung: string;
ergebnis: string | null;
kosten: number | null;
pruefende_stelle: string | null;
dokument_url: string | null;
erfasst_von: string | null;
created_at: Date;
}
// ── Dashboard KPI ─────────────────────────────────────────────────────────────
export interface EquipmentStats {
total: number;
einsatzbereit: number;
beschaedigt: number;
inWartung: number;
ausserDienst: number;
inspectionsDue: number;
inspectionsOverdue: number;
wichtigNichtBereit: number;
}
// ── Vehicle Equipment Warning ─────────────────────────────────────────────────
export interface VehicleEquipmentWarning {
fahrzeug_id: string;
ausruestung_id: string;
bezeichnung: string;
status: AusruestungStatus;
kategorie_name: string;
}
// ── Create / Update DTOs ──────────────────────────────────────────────────────
export interface CreateAusruestungData {
bezeichnung: string;
kategorie_id: string;
seriennummer?: string;
inventarnummer?: string;
hersteller?: string;
baujahr?: number;
status?: AusruestungStatus;
status_bemerkung?: string;
ist_wichtig?: boolean;
fahrzeug_id?: string;
standort?: string;
pruef_intervall_monate?: number;
letzte_pruefung_am?: string;
naechste_pruefung_am?: string;
bemerkung?: string;
}
export interface UpdateAusruestungData {
bezeichnung?: string;
kategorie_id?: string;
seriennummer?: string | null;
inventarnummer?: string | null;
hersteller?: string | null;
baujahr?: number | null;
status?: AusruestungStatus;
status_bemerkung?: string | null;
ist_wichtig?: boolean;
fahrzeug_id?: string | null;
standort?: string;
pruef_intervall_monate?: number | null;
letzte_pruefung_am?: string | null;
naechste_pruefung_am?: string | null;
bemerkung?: string | null;
}
export interface CreateAusruestungWartungslogData {
datum: string;
art: AusruestungWartungslogArt;
beschreibung: string;
ergebnis?: string;
kosten?: number;
pruefende_stelle?: string;
dokument_url?: string;
}