'use client' import React, { useState, useEffect } from 'react' import { useParams } from 'next/navigation' interface Hazard { id: string name: string description: string component_id: string | null component_name: string | null category: string status: string severity: number exposure: number probability: number r_inherent: number risk_level: string created_at: string } interface LibraryHazard { id: string name: string description: string category: string default_severity: number default_exposure: number default_probability: number } const HAZARD_CATEGORIES = [ 'mechanical', 'electrical', 'thermal', 'noise', 'vibration', 'radiation', 'material', 'ergonomic', 'software', 'ai_specific', 'cybersecurity', 'functional_safety', 'environmental', ] const CATEGORY_LABELS: Record = { mechanical: 'Mechanisch', electrical: 'Elektrisch', thermal: 'Thermisch', noise: 'Laerm', vibration: 'Vibration', radiation: 'Strahlung', material: 'Stoffe/Materialien', ergonomic: 'Ergonomie', software: 'Software', ai_specific: 'KI-spezifisch', cybersecurity: 'Cybersecurity', functional_safety: 'Funktionale Sicherheit', environmental: 'Umgebung', } const STATUS_LABELS: Record = { identified: 'Identifiziert', assessed: 'Bewertet', mitigated: 'Gemindert', accepted: 'Akzeptiert', closed: 'Geschlossen', } function getRiskColor(level: string): string { switch (level) { case 'critical': return 'bg-red-100 text-red-700 border-red-200' case 'high': return 'bg-orange-100 text-orange-700 border-orange-200' case 'medium': return 'bg-yellow-100 text-yellow-700 border-yellow-200' case 'low': return 'bg-green-100 text-green-700 border-green-200' default: return 'bg-gray-100 text-gray-700 border-gray-200' } } function getRiskLevel(r: number): string { if (r >= 100) return 'critical' if (r >= 50) return 'high' if (r >= 20) return 'medium' return 'low' } function getRiskLevelLabel(level: string): string { switch (level) { case 'critical': return 'Kritisch' case 'high': return 'Hoch' case 'medium': return 'Mittel' case 'low': return 'Niedrig' default: return level } } function RiskBadge({ level }: { level: string }) { return ( {getRiskLevelLabel(level)} ) } interface HazardFormData { name: string description: string category: string component_id: string severity: number exposure: number probability: number } function HazardForm({ onSubmit, onCancel, }: { onSubmit: (data: HazardFormData) => void onCancel: () => void }) { const [formData, setFormData] = useState({ name: '', description: '', category: 'mechanical', component_id: '', severity: 3, exposure: 3, probability: 3, }) const rInherent = formData.severity * formData.exposure * formData.probability const riskLevel = getRiskLevel(rInherent) return (

Neue Gefaehrdung

setFormData({ ...formData, name: e.target.value })} placeholder="z.B. Quetschung durch Roboterarm" className="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent dark:bg-gray-700 dark:border-gray-600 dark:text-white" />