'use client' import { useState } from 'react' import { useOrgRoles } from './_hooks/useOrgRoles' import { useDocumentReviews } from './_hooks/useDocumentReviews' import { RoleCard } from './_components/RoleCard' import { ReviewList } from './_components/ReviewList' import type { RollenkonzeptTab } from './_types' const TABS: { id: RollenkonzeptTab; label: string }[] = [ { id: 'rollen', label: 'Rollen' }, { id: 'zuordnung', label: 'Zuordnung' }, { id: 'reviews', label: 'Reviews' }, ] export default function RollenkonzeptPage() { const [tab, setTab] = useState('rollen') const { roles, defaults, mapping, loading, seedRoles, updateRole, sendTestEmail } = useOrgRoles() const reviewHook = useDocumentReviews() // Merge defaults with actual roles const mergedRoles = defaults.map(d => { const actual = roles.find(r => r.role_key === d.role_key) return actual || d }) // Group mapping by role const mappingByRole: Record = {} for (const m of mapping) { if (!mappingByRole[m.role_key]) mappingByRole[m.role_key] = [] mappingByRole[m.role_key].push(m.document_type) } return (
{/* Header */}

Rollenkonzept

Weisen Sie Compliance-Rollen zu und verwalten Sie den Dokumenten-Pruefprozess.

{roles.length === 0 && !loading && ( )}
{/* Tabs */}
{TABS.map(t => ( ))}
{/* Tab: Rollen */} {tab === 'rollen' && (
{loading ? (
Lade Rollen...
) : (
{mergedRoles.map(role => ( ))}
)}
)} {/* Tab: Zuordnung */} {tab === 'zuordnung' && (

Dokument → Rollen-Zuordnung

Zeigt welche Rolle welche Dokumente zur Pruefung erhaelt. Anpassbar pro Tenant.

{Object.keys(mappingByRole).length === 0 ? (
Keine Zuordnung vorhanden. Bitte erst Standard-Rollen anlegen.
) : (
{defaults.map(d => { const docs = mappingByRole[d.role_key] || [] return (
{d.role_label} ({docs.length} Dokumente)
{docs.map(dt => ( {dt.replace(/_/g, ' ')} ))} {docs.length === 0 && ( Keine Dokumente zugeordnet )}
) })}
)}
)} {/* Tab: Reviews */} {tab === 'reviews' && ( )}
) }