add now features

This commit is contained in:
Matthias Hochmeister
2026-03-01 14:41:45 +01:00
parent e76946ed8a
commit 5b8f40ab9a
14 changed files with 2044 additions and 84 deletions

View File

@@ -0,0 +1,76 @@
// =============================================================================
// Atemschutz (Breathing Apparatus) Carrier Management — Frontend Type Definitions
// =============================================================================
export type UntersuchungErgebnis = 'tauglich' | 'bedingt_tauglich' | 'nicht_tauglich';
export const UntersuchungErgebnisLabel: Record<UntersuchungErgebnis, string> = {
tauglich: 'Tauglich',
bedingt_tauglich: 'Bedingt tauglich',
nicht_tauglich: 'Nicht tauglich',
};
// ── Core Entity ────────────────────────────────────────────────────────────
export interface AtemschutzTraeger {
id: string;
user_id: string;
atemschutz_lehrgang: boolean;
lehrgang_datum: string | null;
untersuchung_datum: string | null;
untersuchung_gueltig_bis: string | null;
untersuchung_ergebnis: UntersuchungErgebnis | null;
leistungstest_datum: string | null;
leistungstest_gueltig_bis: string | null;
leistungstest_bestanden: boolean | null;
bemerkung: string | null;
created_at: string;
updated_at: string;
}
// ── List / Overview Shape (joined with user data) ──────────────────────────
export interface AtemschutzUebersicht extends AtemschutzTraeger {
user_name: string | null;
user_given_name: string | null;
user_family_name: string | null;
user_email: string;
mitglied_status: string | null;
dienstgrad: string | null;
untersuchung_gueltig: boolean;
untersuchung_tage_rest: number | null;
leistungstest_gueltig: boolean;
leistungstest_tage_rest: number | null;
einsatzbereit: boolean;
}
// ── Dashboard KPI ──────────────────────────────────────────────────────────
export interface AtemschutzStats {
total: number;
mitLehrgang: number;
untersuchungGueltig: number;
untersuchungAbgelaufen: number;
untersuchungBaldFaellig: number;
leistungstestGueltig: number;
leistungstestAbgelaufen: number;
leistungstestBaldFaellig: number;
einsatzbereit: number;
}
// ── Request Payload Types ──────────────────────────────────────────────────
export interface CreateAtemschutzPayload {
user_id: string;
atemschutz_lehrgang?: boolean;
lehrgang_datum?: string;
untersuchung_datum?: string;
untersuchung_gueltig_bis?: string;
untersuchung_ergebnis?: UntersuchungErgebnis;
leistungstest_datum?: string;
leistungstest_gueltig_bis?: string;
leistungstest_bestanden?: boolean;
bemerkung?: string;
}
export type UpdateAtemschutzPayload = Omit<Partial<CreateAtemschutzPayload>, 'user_id'>;