'use client' /** * Compliance Portal - Rollen-Auswahl Landing Page * * Ermoeglicht Stakeholdern die Auswahl ihrer bevorzugten Ansicht: * - Executive: Ueberblick, Trends, Ampel-Status * - Auditor: Checkliste, Sign-off, Reports * - Compliance Officer: Workflows, Anforderungsmanagement * - Entwickler: Tech-Docs, Code-Referenzen */ import { useState, useEffect } from 'react' import { useRouter } from 'next/navigation' import AdminLayout from '@/components/admin/AdminLayout' import { Language } from '@/lib/compliance-i18n' interface RoleCard { id: string title: { de: string en: string } subtitle: { de: string en: string } description: { de: string en: string } features: { de: string[] en: string[] } icon: JSX.Element href: string color: string borderColor: string } const roles: RoleCard[] = [ { id: 'executive', title: { de: 'Executive', en: 'Executive' }, subtitle: { de: 'Management-Ueberblick', en: 'Management Overview' }, description: { de: 'Strategische Compliance-Ansicht mit Ampel-Status, Trends und Top-Risiken fuer schnelle Entscheidungen.', en: 'Strategic compliance view with traffic light status, trends and top risks for quick decisions.' }, features: { de: ['Compliance-Ampel', 'Trend-Analyse', 'Top 5 Risiken', 'Deadline-Kalender'], en: ['Compliance Traffic Light', 'Trend Analysis', 'Top 5 Risks', 'Deadline Calendar'] }, icon: ( ), href: '/admin/compliance?tab=executive', color: 'from-blue-500 to-blue-600', borderColor: 'border-blue-500' }, { id: 'auditor', title: { de: 'Auditor', en: 'Auditor' }, subtitle: { de: 'Pruefungs-Checkliste', en: 'Audit Checklist' }, description: { de: 'Strukturierte Pruefungsumgebung mit Checklisten, Sign-off-Workflows und PDF-Reports fuer Auditoren.', en: 'Structured audit environment with checklists, sign-off workflows and PDF reports for auditors.' }, features: { de: ['Audit-Checkliste', 'Sign-off Workflow', 'PDF Reports', 'Digitale Signaturen'], en: ['Audit Checklist', 'Sign-off Workflow', 'PDF Reports', 'Digital Signatures'] }, icon: ( ), href: '/admin/compliance/audit-checklist', color: 'from-green-500 to-green-600', borderColor: 'border-green-500' }, { id: 'compliance-officer', title: { de: 'Compliance Officer', en: 'Compliance Officer' }, subtitle: { de: 'Vollstaendige Verwaltung', en: 'Full Management' }, description: { de: 'Umfassende Compliance-Verwaltung mit allen Anforderungen, Controls, Evidence und Risk Management.', en: 'Comprehensive compliance management with all requirements, controls, evidence and risk management.' }, features: { de: ['Anforderungs-Management', 'Control-Verwaltung', 'Evidence-Upload', 'Risk Matrix'], en: ['Requirement Management', 'Control Management', 'Evidence Upload', 'Risk Matrix'] }, icon: ( ), href: '/admin/compliance/audit-workspace', color: 'from-purple-500 to-purple-600', borderColor: 'border-purple-500' }, { id: 'developer', title: { de: 'Entwickler', en: 'Developer' }, subtitle: { de: 'Technische Details', en: 'Technical Details' }, description: { de: 'Technische Dokumentation mit Code-Referenzen, API-Spezifikationen und Architektur-Diagrammen.', en: 'Technical documentation with code references, API specifications and architecture diagrams.' }, features: { de: ['API-Dokumentation', 'Code-Referenzen', 'Datenmodell', 'Architektur'], en: ['API Documentation', 'Code References', 'Data Model', 'Architecture'] }, icon: ( ), href: '/admin/compliance?tab=technisch', color: 'from-orange-500 to-orange-600', borderColor: 'border-orange-500' } ] export default function RoleSelectPage() { const router = useRouter() const [language, setLanguage] = useState('de') const [hoveredRole, setHoveredRole] = useState(null) const [savedRole, setSavedRole] = useState(null) // Lade gespeicherte Rolle aus localStorage useEffect(() => { const stored = localStorage.getItem('compliance_preferred_role') if (stored) { setSavedRole(stored) } const storedLang = localStorage.getItem('compliance_language') as Language if (storedLang) { setLanguage(storedLang) } }, []) const handleRoleSelect = (role: RoleCard, savePreference: boolean = false) => { if (savePreference) { localStorage.setItem('compliance_preferred_role', role.id) setSavedRole(role.id) } router.push(role.href) } const clearPreference = () => { localStorage.removeItem('compliance_preferred_role') setSavedRole(null) } return (
{/* Header */}

{language === 'de' ? 'Compliance Portal' : 'Compliance Portal'}

{language === 'de' ? 'Waehlen Sie Ihre bevorzugte Ansicht' : 'Choose your preferred view'}

{/* Sprach-Toggle */}
{/* Gespeicherte Praeferenz */} {savedRole && (
{language === 'de' ? 'Bevorzugte Rolle:' : 'Preferred role:'}{' '} {roles.find(r => r.id === savedRole)?.title[language]}
)}
{/* Role Cards Grid */}
{roles.map((role) => (
setHoveredRole(role.id)} onMouseLeave={() => setHoveredRole(null)} onClick={() => handleRoleSelect(role)} > {/* Glow Effect */}
{/* Card */}
{/* Saved Badge */} {savedRole === role.id && (
{language === 'de' ? 'Bevorzugt' : 'Preferred'}
)} {/* Icon & Title */}
{role.icon}

{role.title[language]}

{role.subtitle[language]}

{/* Description */}

{role.description[language]}

{/* Features */}
{role.features[language].map((feature, idx) => (
{feature}
))}
{/* Action Buttons */}
))}
{/* Quick Links */}

{language === 'de' ? 'Schnellzugriff' : 'Quick Access'}

} /> } /> } /> } />
{/* Footer */}

BreakPilot Compliance & Audit Framework v3.0 | 19 {language === 'de' ? 'Verordnungen' : 'Regulations'} | 558 {language === 'de' ? 'Anforderungen' : 'Requirements'} | 44 Controls

) } // Quick Link Component function QuickLink({ href, label, icon }: { href: string; label: string; icon: JSX.Element }) { const router = useRouter() return ( ) }