176 lines
6.9 KiB
TypeScript
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;
|
|
}
|