diff --git a/admin-compliance/app/(sdk)/sdk/reporting/page.tsx b/admin-compliance/app/(sdk)/sdk/reporting/page.tsx new file mode 100644 index 0000000..f381f30 --- /dev/null +++ b/admin-compliance/app/(sdk)/sdk/reporting/page.tsx @@ -0,0 +1,513 @@ +'use client' + +import React, { useState, useEffect } from 'react' +import { useSDK } from '@/lib/sdk' +import { StepHeader } from '@/components/sdk/StepHeader' +import { + ExecutiveReport, + RiskLevel, + DeadlineSeverity, + RISK_LEVEL_INFO, + DEADLINE_SEVERITY_INFO, + getScoreColor, + getScoreBgColor, +} from '@/lib/sdk/reporting/types' +import { getExecutiveReport } from '@/lib/sdk/reporting/api' + +// ============================================================================= +// TYPES +// ============================================================================= + +type TabId = 'overview' | 'risks' | 'deadlines' | 'modules' | 'activity' + +interface Tab { + id: TabId + label: string +} + +// ============================================================================= +// HELPER COMPONENTS +// ============================================================================= + +function TabNavigation({ + tabs, + activeTab, + onTabChange, +}: { + tabs: Tab[] + activeTab: TabId + onTabChange: (tab: TabId) => void +}) { + return ( +
+ +
+ ) +} + +function ScoreCircle({ score }: { score: number }) { + const circumference = 2 * Math.PI * 60 + const strokeDashoffset = circumference - (score / 100) * circumference + + return ( +
+ + + = 80 ? '#22c55e' : score >= 60 ? '#eab308' : score >= 40 ? '#f97316' : '#ef4444'} + strokeWidth="8" fill="none" + strokeLinecap="round" + strokeDasharray={circumference} + strokeDashoffset={strokeDashoffset} + className="transition-all duration-1000" + /> + +
+ {score}% + Compliance +
+
+ ) +} + +function StatCard({ + label, + value, + color = 'gray', + subtitle, +}: { + label: string + value: number | string + color?: 'gray' | 'blue' | 'yellow' | 'red' | 'green' | 'purple' | 'orange' + subtitle?: string +}) { + const colorClasses: Record = { + gray: 'border-gray-200 text-gray-900', + blue: 'border-blue-200 text-blue-600', + yellow: 'border-yellow-200 text-yellow-600', + red: 'border-red-200 text-red-600', + green: 'border-green-200 text-green-600', + purple: 'border-purple-200 text-purple-600', + orange: 'border-orange-200 text-orange-600', + } + + return ( +
+
{label}
+
{value}
+ {subtitle &&
{subtitle}
} +
+ ) +} + +function RiskBadge({ level }: { level: RiskLevel }) { + const info = RISK_LEVEL_INFO[level] + return ( + + {info.label} + + ) +} + +function DeadlineBadge({ severity }: { severity: DeadlineSeverity }) { + const info = DEADLINE_SEVERITY_INFO[severity] + return ( + + {info.label} + + ) +} + +// ============================================================================= +// TAB CONTENTS +// ============================================================================= + +function OverviewTab({ report }: { report: ExecutiveReport }) { + return ( +
+ {/* Score + Key Metrics */} +
+
+ +
+ Risikolevel: + +
+
+ +
+ + = 80 ? 'green' : 'yellow'} subtitle={`${report.dsgvo.completionPercent}% vollstaendig`} /> + 0 ? 'red' : 'green'} subtitle={report.dsgvo.overdueDSRs > 0 ? `${report.dsgvo.overdueDSRs} ueberfaellig` : 'Keine ueberfaelligen'} /> + 0 ? 'red' : 'green'} subtitle={report.incidents.criticalIncidents > 0 ? `${report.incidents.criticalIncidents} kritisch` : 'Keine kritischen'} /> + = 80 ? 'green' : 'yellow'} subtitle={`${report.academy.overdueCount} ueberfaellig`} /> + +
+
+ + {/* Deadlines Summary */} + {report.upcomingDeadlines.length > 0 && ( +
+

Naechste Fristen

+
+ {report.upcomingDeadlines.slice(0, 5).map((dl, i) => ( +
+
+ +
+
{dl.description}
+
{dl.module} · {dl.type}
+
+
+
+ {dl.daysLeft <= 0 ? `${Math.abs(dl.daysLeft)} Tage ueberfaellig` : `${dl.daysLeft} Tage`} +
+
+ ))} +
+
+ )} +
+ ) +} + +function RisksTab({ report }: { report: ExecutiveReport }) { + return ( +
+ {/* Overall Risk */} +
+
+

Gesamt-Risikobewertung

+ +
+
+ 5 ? 'orange' : 'gray'} /> + 0 ? 'red' : 'green'} /> +
+
+ + {/* Per-Module Risks */} +
+

Risiken nach Modul

+
+ {report.riskOverview.moduleRisks.map((mr, i) => ( +
+
+ {mr.module} + +
+
+
+
+
+ {mr.score}% + {mr.issues} Issues +
+
+ ))} +
+
+
+ ) +} + +function DeadlinesTab({ report }: { report: ExecutiveReport }) { + return ( +
+

Alle Fristen ({report.upcomingDeadlines.length})

+ {report.upcomingDeadlines.length === 0 ? ( +

Keine bevorstehenden Fristen.

+ ) : ( +
+ + + + + + + + + + + + + {report.upcomingDeadlines.map((dl, i) => ( + + + + + + + + + ))} + +
StatusModulTypBeschreibungFaellig amVerbleibend
{dl.module}{dl.type}{dl.description}{new Date(dl.dueDate).toLocaleDateString('de-DE')} + {dl.daysLeft <= 0 ? `${Math.abs(dl.daysLeft)}d ueberfaellig` : `${dl.daysLeft}d`} +
+
+ )} +
+ ) +} + +function ModulesTab({ report }: { report: ExecutiveReport }) { + return ( +
+ {/* DSGVO Module */} +
+

DSGVO-Compliance

+
+ + = 80 ? 'green' : 'yellow'} /> + + +
+
+ + {/* Vendors */} +
+

Lieferanten-Compliance

+
+ + + 0 ? 'yellow' : 'green'} /> + 0 ? 'red' : 'green'} /> +
+
+ + {/* Incidents */} +
+

Datenschutzvorfaelle

+
+ + 0 ? 'orange' : 'green'} /> + 0 ? 'red' : 'green'} /> + 0 ? 'red' : 'green'} /> +
+
+ + {/* Whistleblower */} +
+

Hinweisgebersystem

+
+ + 0 ? 'yellow' : 'green'} /> + 0 ? 'red' : 'green'} /> + 0 ? 'red' : 'green'} /> +
+
+ + {/* Academy */} +
+

Compliance Academy

+
+ + + = 80 ? 'green' : 'yellow'} /> + 0 ? 'red' : 'green'} /> +
+
+
+ ) +} + +function ActivityTab({ report }: { report: ExecutiveReport }) { + return ( +
+

Letzte Aktivitaeten

+ {report.recentActivity.length === 0 ? ( +

Keine Aktivitaeten vorhanden.

+ ) : ( +
+ {report.recentActivity.map((entry, i) => ( +
+
+
+
{entry.description}
+
+ {entry.module} + · + {entry.action} + · + {new Date(entry.timestamp).toLocaleString('de-DE')} +
+
+
+ ))} +
+ )} +
+ ) +} + +// ============================================================================= +// MOCK DATA (used when backend is unavailable) +// ============================================================================= + +function getMockReport(): ExecutiveReport { + return { + generatedAt: new Date().toISOString(), + tenantId: 'demo', + complianceScore: 72, + dsgvo: { + processingActivities: 24, + activeProcessings: 18, + tomsImplemented: 31, + tomsPlanned: 7, + tomsTotal: 42, + completionPercent: 74, + openDSRs: 3, + overdueDSRs: 1, + dsfasCompleted: 4, + retentionPolicies: 12, + }, + vendors: { + totalVendors: 15, + activeVendors: 12, + byRiskLevel: { LOW: 8, MEDIUM: 4, HIGH: 2, CRITICAL: 1 }, + pendingReviews: 3, + expiredContracts: 1, + }, + incidents: { + totalIncidents: 7, + openIncidents: 2, + criticalIncidents: 0, + notificationsPending: 0, + avgResolutionHours: 48.5, + }, + whistleblower: { + totalReports: 4, + openReports: 1, + overdueAcknowledgments: 0, + overdueFeedbacks: 0, + avgResolutionDays: 21.3, + }, + academy: { + totalCourses: 5, + totalEnrollments: 47, + completionRate: 68.5, + overdueCount: 4, + avgCompletionDays: 14.2, + }, + riskOverview: { + overallLevel: 'MEDIUM', + moduleRisks: [ + { module: 'DSGVO', level: 'MEDIUM', score: 74, issues: 8 }, + { module: 'Lieferanten', level: 'HIGH', score: 55, issues: 5 }, + { module: 'Vorfaelle', level: 'LOW', score: 85, issues: 2 }, + { module: 'Hinweisgeberschutz', level: 'LOW', score: 90, issues: 1 }, + { module: 'Schulungen', level: 'MEDIUM', score: 68, issues: 4 }, + ], + openFindings: 12, + criticalFindings: 2, + }, + upcomingDeadlines: [ + { module: 'DSGVO', type: 'Betroffenenanfrage', description: 'Auskunftsersuchen Max Mustermann', dueDate: new Date(Date.now() + 2 * 86400000).toISOString(), daysLeft: 2, severity: 'URGENT' }, + { module: 'Lieferanten', type: 'Vertragspruefung', description: 'AWS AVV-Erneuerung', dueDate: new Date(Date.now() + 14 * 86400000).toISOString(), daysLeft: 14, severity: 'WARNING' }, + { module: 'Schulungen', type: 'Pflichtschulung', description: 'DSGVO-Jahresschulung Q1 2026', dueDate: new Date(Date.now() + 30 * 86400000).toISOString(), daysLeft: 30, severity: 'INFO' }, + { module: 'Vorfaelle', type: 'Aufsichtsbehoerde', description: 'Meldung Datenpanne #7 an LfDI', dueDate: new Date(Date.now() - 1 * 86400000).toISOString(), daysLeft: -1, severity: 'OVERDUE' }, + ], + recentActivity: [ + { timestamp: new Date(Date.now() - 3600000).toISOString(), module: 'Academy', action: 'completed', description: 'IT-Sicherheitsschulung von Anna Mueller abgeschlossen' }, + { timestamp: new Date(Date.now() - 7200000).toISOString(), module: 'Incidents', action: 'created', description: 'Neuer Vorfall: USB-Stick mit Kundendaten verloren' }, + { timestamp: new Date(Date.now() - 86400000).toISOString(), module: 'DSGVO', action: 'updated', description: 'TOM IT-05 (Firewall-Policy) als umgesetzt markiert' }, + { timestamp: new Date(Date.now() - 172800000).toISOString(), module: 'Vendors', action: 'reviewed', description: 'Lieferanten-Assessment: Mailchimp abgeschlossen' }, + ], + } +} + +// ============================================================================= +// MAIN COMPONENT +// ============================================================================= + +export default function ReportingPage() { + const { state } = useSDK() + const [activeTab, setActiveTab] = useState('overview') + const [report, setReport] = useState(null) + const [loading, setLoading] = useState(true) + const [error, setError] = useState(null) + + useEffect(() => { + let cancelled = false + + async function loadReport() { + setLoading(true) + setError(null) + try { + const data = await getExecutiveReport() + if (!cancelled) setReport(data) + } catch (err) { + console.warn('Backend nicht erreichbar, verwende Demo-Daten:', err) + if (!cancelled) setReport(getMockReport()) + } finally { + if (!cancelled) setLoading(false) + } + } + + loadReport() + return () => { cancelled = true } + }, []) + + const tabs: Tab[] = [ + { id: 'overview', label: 'Uebersicht' }, + { id: 'risks', label: 'Risiken' }, + { id: 'deadlines', label: 'Fristen' }, + { id: 'modules', label: 'Module' }, + { id: 'activity', label: 'Aktivitaeten' }, + ] + + return ( +
+ + + + + {loading ? ( +
+
+ Bericht wird generiert... +
+ ) : report ? ( + <> + {/* Generated timestamp */} +
+ Generiert: {new Date(report.generatedAt).toLocaleString('de-DE')} +
+ + {activeTab === 'overview' && } + {activeTab === 'risks' && } + {activeTab === 'deadlines' && } + {activeTab === 'modules' && } + {activeTab === 'activity' && } + + ) : ( +
+

Bericht konnte nicht geladen werden.

+ {error &&

{error}

} +
+ )} +
+ ) +} diff --git a/admin-compliance/components/sdk/SDKPipelineSidebar/SDKPipelineSidebar.tsx b/admin-compliance/components/sdk/SDKPipelineSidebar/SDKPipelineSidebar.tsx index e28d85d..ff97f9d 100644 --- a/admin-compliance/components/sdk/SDKPipelineSidebar/SDKPipelineSidebar.tsx +++ b/admin-compliance/components/sdk/SDKPipelineSidebar/SDKPipelineSidebar.tsx @@ -311,10 +311,8 @@ function SidebarContent({ onNavigate }: SidebarContentProps) { { href: '/sdk/academy', label: 'Academy', icon: '🎓' }, { href: '/sdk/whistleblower', label: 'Whistleblower', icon: '📢' }, { href: '/sdk/incidents', label: 'Incidents', icon: '🚨' }, - { href: '/sdk/dsb-portal', label: 'DSB Portal', icon: '👤' }, + { href: '/sdk/reporting', label: 'Reporting', icon: '📈' }, { href: '/sdk/industry-templates', label: 'Branchenvorlagen', icon: '🏢' }, - { href: '/sdk/multi-tenant', label: 'Multi-Tenant', icon: '👥' }, - { href: '/sdk/sso', label: 'SSO', icon: '🔑' }, { href: '/sdk/document-crawler', label: 'Doc Crawler', icon: '📄' }, { href: '/sdk/advisory-board', label: 'Beirat', icon: '💬' }, ].map(mod => ( diff --git a/admin-compliance/components/sdk/Sidebar/SDKSidebar.tsx b/admin-compliance/components/sdk/Sidebar/SDKSidebar.tsx index 531388e..dd8f7e3 100644 --- a/admin-compliance/components/sdk/Sidebar/SDKSidebar.tsx +++ b/admin-compliance/components/sdk/Sidebar/SDKSidebar.tsx @@ -550,15 +550,15 @@ export function SDKSidebar({ collapsed = false, onCollapsedChange }: SDKSidebarP collapsed={collapsed} /> + d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z" /> } - label="DSB Portal" - isActive={pathname === '/sdk/dsb-portal'} + label="Reporting" + isActive={pathname === '/sdk/reporting'} collapsed={collapsed} /> - - - - } - label="Multi-Tenant" - isActive={pathname === '/sdk/multi-tenant'} - collapsed={collapsed} - /> - - - - } - label="SSO" - isActive={pathname === '/sdk/sso'} - collapsed={collapsed} - /> (path: string): Promise { + const res = await fetch(`${BASE_URL}${path}`, { + headers: { + 'Content-Type': 'application/json', + 'X-Tenant-ID': typeof window !== 'undefined' + ? (localStorage.getItem('bp-tenant-id') || 'default') + : 'default', + }, + }) + + if (!res.ok) { + const error = await res.json().catch(() => ({ error: res.statusText })) + throw new Error(error.error || `API Error: ${res.status}`) + } + + return res.json() +} + +/** + * Vollstaendigen Executive Report abrufen + * GET /sdk/v1/reporting/executive + */ +export async function getExecutiveReport(): Promise { + return apiFetch('/executive') +} + +/** + * Nur den Compliance-Score abrufen (leichtgewichtig) + * GET /sdk/v1/reporting/score + */ +export async function getComplianceScore(): Promise { + return apiFetch('/score') +} + +/** + * Bevorstehende Fristen abrufen + * GET /sdk/v1/reporting/deadlines + */ +export async function getUpcomingDeadlines(): Promise<{ deadlines: Deadline[]; total: number }> { + return apiFetch<{ deadlines: Deadline[]; total: number }>('/deadlines') +} + +/** + * Risikouebersicht abrufen + * GET /sdk/v1/reporting/risks + */ +export async function getRiskOverview(): Promise { + return apiFetch('/risks') +} diff --git a/admin-compliance/lib/sdk/reporting/index.ts b/admin-compliance/lib/sdk/reporting/index.ts new file mode 100644 index 0000000..bcb2b00 --- /dev/null +++ b/admin-compliance/lib/sdk/reporting/index.ts @@ -0,0 +1,2 @@ +export * from './types' +export * from './api' diff --git a/admin-compliance/lib/sdk/reporting/types.ts b/admin-compliance/lib/sdk/reporting/types.ts new file mode 100644 index 0000000..ac09e22 --- /dev/null +++ b/admin-compliance/lib/sdk/reporting/types.ts @@ -0,0 +1,168 @@ +/** + * Reporting Module Types + * + * TypeScript definitions for the Executive Reporting module. + * Provides compliance KPIs, risk overview, deadlines, and activity tracking + * for top management and compliance officers. + */ + +// ============================================================================= +// RISK LEVELS +// ============================================================================= + +export type RiskLevel = 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL' +export type DeadlineSeverity = 'INFO' | 'WARNING' | 'URGENT' | 'OVERDUE' + +export const RISK_LEVEL_INFO: Record = { + LOW: { label: 'Niedrig', color: 'text-green-700', bgColor: 'bg-green-100', borderColor: 'border-green-200' }, + MEDIUM: { label: 'Mittel', color: 'text-yellow-700', bgColor: 'bg-yellow-100', borderColor: 'border-yellow-200' }, + HIGH: { label: 'Hoch', color: 'text-orange-700', bgColor: 'bg-orange-100', borderColor: 'border-orange-200' }, + CRITICAL: { label: 'Kritisch', color: 'text-red-700', bgColor: 'bg-red-100', borderColor: 'border-red-200' }, +} + +export const DEADLINE_SEVERITY_INFO: Record = { + INFO: { label: 'Info', color: 'text-blue-700', bgColor: 'bg-blue-100' }, + WARNING: { label: 'Warnung', color: 'text-yellow-700', bgColor: 'bg-yellow-100' }, + URGENT: { label: 'Dringend', color: 'text-orange-700', bgColor: 'bg-orange-100' }, + OVERDUE: { label: 'Ueberfaellig', color: 'text-red-700', bgColor: 'bg-red-100' }, +} + +// ============================================================================= +// MODULE SUMMARIES +// ============================================================================= + +export interface DSGVOSummary { + processingActivities: number + activeProcessings: number + tomsImplemented: number + tomsPlanned: number + tomsTotal: number + completionPercent: number + openDSRs: number + overdueDSRs: number + dsfasCompleted: number + retentionPolicies: number +} + +export interface VendorSummary { + totalVendors: number + activeVendors: number + byRiskLevel: Record + pendingReviews: number + expiredContracts: number +} + +export interface IncidentSummary { + totalIncidents: number + openIncidents: number + criticalIncidents: number + notificationsPending: number + avgResolutionHours: number +} + +export interface WhistleblowerSummary { + totalReports: number + openReports: number + overdueAcknowledgments: number + overdueFeedbacks: number + avgResolutionDays: number +} + +export interface AcademySummary { + totalCourses: number + totalEnrollments: number + completionRate: number + overdueCount: number + avgCompletionDays: number +} + +// ============================================================================= +// RISK & DEADLINES +// ============================================================================= + +export interface ModuleRisk { + module: string + level: RiskLevel + score: number + issues: number +} + +export interface RiskOverview { + overallLevel: RiskLevel + moduleRisks: ModuleRisk[] + openFindings: number + criticalFindings: number +} + +export interface Deadline { + module: string + type: string + description: string + dueDate: string + daysLeft: number + severity: DeadlineSeverity +} + +export interface ActivityEntry { + timestamp: string + module: string + action: string + description: string + userId?: string +} + +// ============================================================================= +// EXECUTIVE REPORT (Main Response) +// ============================================================================= + +export interface ExecutiveReport { + generatedAt: string + tenantId: string + complianceScore: number + + dsgvo: DSGVOSummary + vendors: VendorSummary + incidents: IncidentSummary + whistleblower: WhistleblowerSummary + academy: AcademySummary + + riskOverview: RiskOverview + upcomingDeadlines: Deadline[] + recentActivity: ActivityEntry[] +} + +// ============================================================================= +// COMPACT SCORE RESPONSE +// ============================================================================= + +export interface ComplianceScoreResponse { + complianceScore: number + riskLevel: RiskLevel + generatedAt: string +} + +// ============================================================================= +// HELPER FUNCTIONS +// ============================================================================= + +export function getRiskLevelInfo(level: RiskLevel) { + return RISK_LEVEL_INFO[level] +} + +export function getDeadlineSeverityInfo(severity: DeadlineSeverity) { + return DEADLINE_SEVERITY_INFO[severity] +} + +export function getScoreColor(score: number): string { + if (score >= 80) return 'text-green-600' + if (score >= 60) return 'text-yellow-600' + if (score >= 40) return 'text-orange-600' + return 'text-red-600' +} + +export function getScoreBgColor(score: number): string { + if (score >= 80) return 'bg-green-500' + if (score >= 60) return 'bg-yellow-500' + if (score >= 40) return 'bg-orange-500' + return 'bg-red-500' +} diff --git a/docs-src/index.md b/docs-src/index.md index 401148e..ccec2c3 100644 --- a/docs-src/index.md +++ b/docs-src/index.md @@ -4,8 +4,6 @@ Willkommen zur Dokumentation des **BreakPilot Compliance**-Stacks (Team B: DSGVO ## Drei-Projekt-Architektur -BreakPilot besteht aus drei unabhaengigen Projekten: - | Projekt | Beschreibung | Docs | |---------|-------------|------| | **breakpilot-core** | Shared Infrastructure (DB, Cache, Vault, Nginx) | Port 8009 | @@ -30,24 +28,38 @@ Compliance haengt von Core ab (PostgreSQL, Valkey, Vault, Qdrant, MinIO, Embeddi --- -## SDK-Module +## SDK-Module (Kundenbereich) -Das AI Compliance SDK implementiert folgende DSGVO-Module: +Module die Compliance-Kunden im SDK sehen und nutzen: -| Modul | Beschreibung | -|-------|--------------| -| **TOM** | Technisch-Organisatorische Massnahmen | -| **DSFA** | Datenschutz-Folgenabschaetzung | -| **VVT** | Verzeichnis von Verarbeitungstaetigkeiten | -| **Loeschfristen** | Loeschfristen-Verwaltung | -| **AI Act Compliance** | KI-Verordnung Konformitaet | -| **Consent Management** | Einwilligungs-Verwaltung | -| **DSR** | Betroffenenrechte (Art. 15-21 DSGVO) | -| **Academy** | Datenschutz-Schulungen | -| **Whistleblower** | Hinweisgebersystem (HinSchG) | -| **Incidents** | Datenschutz-Vorfaelle | -| **Vendors** | Auftragsverarbeiter-Management | -| **Reporting** | Compliance-Berichte | +| Modul | Beschreibung | Frontend | +|-------|--------------|----------| +| **TOM** | Technisch-Organisatorische Massnahmen | /sdk/tom | +| **DSFA** | Datenschutz-Folgenabschaetzung | /sdk/dsfa | +| **VVT** | Verzeichnis von Verarbeitungstaetigkeiten | /sdk/vvt | +| **Loeschfristen** | Loeschfristen-Verwaltung | /sdk/loeschfristen | +| **AI Act Compliance** | KI-Verordnung Konformitaet | /sdk/ai-act | +| **Consent Management** | Einwilligungs-Verwaltung | /sdk/einwilligungen | +| **DSR** | Betroffenenrechte (Art. 15-21 DSGVO) | /sdk/dsr | +| **Academy** | Datenschutz-Schulungen mit PDF-Zertifikaten | /sdk/academy | +| **Whistleblower** | Hinweisgebersystem (HinSchG) | /sdk/whistleblower | +| **Incidents** | Datenschutz-Vorfaelle (Art. 33/34 DSGVO) | /sdk/incidents | +| **Vendors** | Auftragsverarbeiter-Management | /sdk/vendor-compliance | +| **Reporting** | Compliance-Berichte fuer Top Management | /sdk/reporting | +| **Industry Templates** | Branchenvorlagen (E-Commerce, Gesundheit, etc.) | /sdk/industry-templates | +| **Document Crawler** | Automatisches Crawling von Rechtstexten | /sdk/document-crawler | +| **Advisory Board** | KI-Compliance-Beirat | /sdk/advisory-board | + +## Admin-Module (Plattform-Verwaltung) + +Interne Tools fuer die BreakPilot-Plattformverwaltung: + +| Modul | Beschreibung | Frontend | +|-------|--------------|----------| +| **Katalogverwaltung** | SDK-Kataloge & Auswahltabellen | /dashboard/catalog-manager | +| **Mandantenverwaltung** | B2B-Kundenverwaltung & Mandanten | /dashboard/multi-tenant | +| **SSO-Konfiguration** | Single Sign-On & Authentifizierung | /dashboard/sso | +| **DSB Portal** | Datenschutzbeauftragter-Arbeitsbereich | /dashboard/dsb-portal | --- @@ -72,6 +84,21 @@ Das AI Compliance SDK implementiert folgende DSGVO-Module: | https://macmini:3007/sdk/academy | Academy | | https://macmini:3007/sdk/whistleblower | Whistleblower | | https://macmini:3007/sdk/incidents | Incidents | +| https://macmini:3007/sdk/reporting | Reporting | +| https://macmini:3007/sdk/vendor-compliance | Vendor Compliance | +| https://macmini:3007/sdk/industry-templates | Branchenvorlagen | +| https://macmini:3007/sdk/document-crawler | Document Crawler | +| https://macmini:3007/sdk/advisory-board | Advisory Board | + +### Admin-Module (Dashboard) + +| URL | Modul | +|-----|-------| +| https://macmini:3007/dashboard | Dashboard | +| https://macmini:3007/dashboard/catalog-manager | Katalogverwaltung | +| https://macmini:3007/dashboard/multi-tenant | Mandantenverwaltung | +| https://macmini:3007/dashboard/sso | SSO-Konfiguration | +| https://macmini:3007/dashboard/dsb-portal | DSB Portal | --- @@ -104,6 +131,12 @@ Compliance-Services nutzen folgende Core-Infrastruktur: - [Academy](services/sdk-modules/academy.md) - [Whistleblower](services/sdk-modules/whistleblower.md) - [Incidents](services/sdk-modules/incidents.md) + - [Reporting](services/sdk-modules/reporting.md) + - [Vendors](services/sdk-modules/vendors.md) + - [Industry Templates](services/sdk-modules/industry-templates.md) + - [Document Crawler](services/sdk-modules/document-crawler.md) + - [Advisory Board](services/sdk-modules/advisory-board.md) + - [DSB Portal](services/sdk-modules/dsb-portal.md) ## Entwicklung diff --git a/docs-src/services/sdk-modules/academy.md b/docs-src/services/sdk-modules/academy.md index b570cf1..7e68056 100644 --- a/docs-src/services/sdk-modules/academy.md +++ b/docs-src/services/sdk-modules/academy.md @@ -5,9 +5,23 @@ Das Academy-Modul ermoeglicht die Verwaltung von Datenschutz-Schulungen und -Zer ## Features - **Kursverwaltung** — DSGVO-, KI- und branchenspezifische Schulungskurse erstellen und verwalten -- **Modulare Struktur** — Kurse bestehen aus Modulen mit Lektionen und Quizzes -- **Teilnehmer-Tracking** — Fortschritt, Abschlussquoten und Zertifikatsverwaltung -- **Compliance-Nachweis** — Automatische Generierung von Schulungsnachweisen fuer Audits +- **KI-Kursgenerierung** — Automatische Generierung von Schulungsinhalten ueber Claude API mit RAG-Kontext +- **Modulare Struktur** — Kurse bestehen aus Lektionen (Text, Video, Quiz) in konfigurierbarer Reihenfolge +- **Quiz-Auswertung** — Serverseitige Auswertung von Multiple-Choice-Quizfragen mit Bestehensgrenze +- **Teilnehmer-Tracking** — Fortschritt, Abschlussquoten und Fristenueberwachung +- **PDF-Zertifikate** — Automatische Generierung von Schulungszertifikaten als PDF (Name, Kurs, Datum, Score, Gueltigkeit) +- **Video-Generierung** — Optional: KI-generierte Schulungsvideos mit ElevenLabs (TTS) und HeyGen (Avatar) +- **Compliance-Nachweis** — Zertifikate als Audit-Nachweis gemaess Art. 5 Abs. 2 DSGVO + +## Rechtsgrundlage + +| Vorschrift | Anforderung | +|-----------|-------------| +| DSGVO Art. 39 Abs. 1 lit. b | DSB muss Schulung und Sensibilisierung ueberwachen | +| DSGVO Art. 5 Abs. 2 | Rechenschaftspflicht — Schulungen dokumentieren und nachweisen | +| EU AI Act Art. 4 | AI-Literacy-Schulung fuer KI-Nutzer ab 2026 | +| HinSchG | Schulung zu Meldewegen und Hinweisgeberschutz | +| NIS2 | Cybersecurity-Schulungen fuer kritische Infrastruktur | ## API Endpoints @@ -17,14 +31,18 @@ Alle unter `/api/v1/academy/`, benoetigen `X-Tenant-ID` Header. |--------|----------|-------------| | GET | `/courses` | Kurse auflisten | | POST | `/courses` | Neuen Kurs erstellen | -| GET | `/courses/{id}` | Kursdetails | +| GET | `/courses/{id}` | Kursdetails mit Lektionen | | PUT | `/courses/{id}` | Kurs aktualisieren | | DELETE | `/courses/{id}` | Kurs loeschen | -| GET | `/courses/{id}/modules` | Module eines Kurses | -| POST | `/courses/{id}/enroll` | Teilnehmer einschreiben | +| GET | `/statistics` | Dashboard-Statistiken | | GET | `/enrollments` | Einschreibungen auflisten | -| POST | `/enrollments/{id}/complete` | Modul als abgeschlossen markieren | -| GET | `/certificates` | Zertifikate auflisten | +| POST | `/enrollments` | Mitarbeiter einschreiben | +| PUT | `/enrollments/{id}/progress` | Fortschritt aktualisieren | +| POST | `/enrollments/{id}/complete` | Kurs abschliessen | +| POST | `/lessons/{id}/quiz` | Quiz-Antworten einreichen | +| POST | `/enrollments/{id}/certificate` | PDF-Zertifikat generieren | +| GET | `/certificates/{id}` | Zertifikat-Details | +| GET | `/certificates/{id}/pdf` | PDF herunterladen | ## Frontend @@ -32,4 +50,4 @@ Seite unter `/sdk/academy` mit Kursuebersicht, Modulverwaltung und Teilnehmer-Tr ## Datenbank -Migration `008_academy_schema.sql` erstellt Tabellen fuer Kurse, Module, Einschreibungen und Zertifikate. +Migration `008_academy_schema.sql` erstellt Tabellen fuer Kurse, Lektionen, Quizfragen, Einschreibungen, Lektionsfortschritt und Zertifikate. diff --git a/docs-src/services/sdk-modules/advisory-board.md b/docs-src/services/sdk-modules/advisory-board.md new file mode 100644 index 0000000..3cba667 --- /dev/null +++ b/docs-src/services/sdk-modules/advisory-board.md @@ -0,0 +1,18 @@ +# Compliance-Beirat — Advisory Board + +Virtueller Compliance-Beirat mit KI-Experten fuer Einschaetzungen zu komplexen Fragestellungen. + +## Features + +- **Expertengremium** — Simulierte Experten aus Datenschutzrecht, IT-Sicherheit, KI-Ethik und Branchenregulierung +- **Konsultationen** — Strukturierte Fragestellungen mit mehrseitiger Analyse +- **Dokumentation** — Beratungsergebnisse als Nachweis fuer Audits speicherbar +- **Kontextbezogen** — Beirat beruecksichtigt Unternehmensprofil, Branche und bestehende Compliance-Daten + +## Frontend + +Seite unter `/sdk/advisory-board` mit Chat-Interface und Experten-Auswahl. Dokumentation unter `/sdk/advisory-board/documentation`. + +## Hinweis + +Der KI-Beirat ersetzt keine professionelle Rechtsberatung. Bei kritischen Entscheidungen sollte stets ein Fachanwalt hinzugezogen werden. diff --git a/docs-src/services/sdk-modules/document-crawler.md b/docs-src/services/sdk-modules/document-crawler.md new file mode 100644 index 0000000..22aee3c --- /dev/null +++ b/docs-src/services/sdk-modules/document-crawler.md @@ -0,0 +1,32 @@ +# Document Crawler — Dokumentenanalyse + +Automatische Erfassung und Analyse von Compliance-Dokumenten auf Webseiten und in Dateisystemen. + +## Features + +- **Web-Crawling** — Automatisches Scannen von Webseiten nach Datenschutzerklaerungen, Impressum und Cookie-Bannern +- **Dokumentenanalyse** — KI-gestuetzte Pruefung auf Vollstaendigkeit und Aktualitaet +- **DSGVO-Check** — Automatische Pruefung gegen Pflichtangaben (Art. 13/14 DSGVO) +- **Monitoring** — Regelmaessige Ueberpruefung mit Benachrichtigung bei Aenderungen +- **Quellen-Verwaltung** — Konfigurierbare Crawl-Ziele und Zeitplaene + +## API Endpoints + +Alle unter `/api/v1/crawler/`, benoetigen `X-Tenant-ID` Header. + +| Method | Endpoint | Beschreibung | +|--------|----------|-------------| +| GET | `/jobs` | Crawl-Jobs auflisten | +| POST | `/jobs` | Neuen Crawl-Job starten | +| GET | `/jobs/{id}` | Job-Status | +| GET | `/results` | Crawl-Ergebnisse | +| GET | `/results/{id}` | Einzelnes Ergebnis | +| POST | `/results/{id}/analyze` | KI-Analyse starten | + +## Frontend + +Seite unter `/sdk/document-crawler` mit Job-Verwaltung, Ergebnis-Uebersicht und Analyse-Detail. + +## Datenbank + +Migration in der AI Compliance SDK erstellt Tabellen fuer Crawl-Jobs, Ergebnisse und Analysen. diff --git a/docs-src/services/sdk-modules/dsb-portal.md b/docs-src/services/sdk-modules/dsb-portal.md new file mode 100644 index 0000000..f006286 --- /dev/null +++ b/docs-src/services/sdk-modules/dsb-portal.md @@ -0,0 +1,34 @@ +# DSB Portal — Datenschutzbeauftragter + +Zentraler Arbeitsbereich fuer den Datenschutzbeauftragten (DSB) gemaess Art. 37-39 DSGVO. + +## Features + +- **Aufgabenuebersicht** — Offene Aufgaben, faellige Pruefungen und Beratungsanfragen +- **Beratungsprotokolle** — Dokumentation aller Beratungstaetigkeiten fuer die Rechenschaftspflicht +- **Taetigkeitsberichte** — Automatische Generierung strukturierter Berichte +- **Schulungsuebersicht** — Status der Mitarbeiterschulungen (verknuepft mit Academy) +- **Compliance-Dashboard** — Aktuelle Risiken, offene Vorfaelle und DSR-Anfragen + +## API Endpoints + +Alle unter `/api/v1/dsb/`, benoetigen `X-Tenant-ID` Header. + +| Method | Endpoint | Beschreibung | +|--------|----------|-------------| +| GET | `/tasks` | Offene Aufgaben auflisten | +| POST | `/tasks` | Neue Aufgabe erstellen | +| PUT | `/tasks/{id}` | Aufgabe aktualisieren | +| GET | `/consultations` | Beratungsprotokolle auflisten | +| POST | `/consultations` | Neues Beratungsprotokoll | +| GET | `/reports` | Taetigkeitsberichte auflisten | +| POST | `/reports/generate` | Taetigkeitsbericht generieren | +| GET | `/dashboard` | Dashboard-Metriken | + +## Frontend + +Seite unter `/sdk/dsb-portal` mit Aufgaben-Board, Beratungsprotokoll-Editor und Dashboard-Widgets. + +## Datenbank + +Migration in der AI Compliance SDK erstellt Tabellen fuer DSB-Aufgaben, Beratungsprotokolle und Berichte. diff --git a/docs-src/services/sdk-modules/industry-templates.md b/docs-src/services/sdk-modules/industry-templates.md new file mode 100644 index 0000000..c957d2d --- /dev/null +++ b/docs-src/services/sdk-modules/industry-templates.md @@ -0,0 +1,29 @@ +# Branchenvorlagen — Industry Templates + +Vorkonfigurierte Compliance-Pakete fuer verschiedene Branchen. + +## Features + +- **Branchenauswahl** — Vordefinierte Templates fuer Gesundheitswesen, Finanzwesen, E-Commerce, SaaS, Bildung u.a. +- **Automatische Konfiguration** — Templates befuellen VVT, TOMs, Risiko-Matrix und Loeschfristen branchenspezifisch +- **Regulierungserkennung** — Automatische Identifikation relevanter Regulierungen je Branche +- **Anpassbar** — Templates als Ausgangsbasis, individuell erweiterbar + +## API Endpoints + +Alle unter `/api/v1/industry/`, benoetigen `X-Tenant-ID` Header. + +| Method | Endpoint | Beschreibung | +|--------|----------|-------------| +| GET | `/templates` | Verfuegbare Branchenvorlagen auflisten | +| GET | `/templates/{id}` | Vorlagendetails | +| POST | `/templates/{id}/apply` | Vorlage auf Tenant anwenden | +| GET | `/regulations` | Branchenspezifische Regulierungen | + +## Frontend + +Seite unter `/sdk/industry-templates` mit Branchenauswahl-Karten und Vorschau der enthaltenen Konfiguration. + +## Datenbank + +Templates werden als JSON-Konfigurationsdateien im Backend verwaltet, nicht in der Datenbank. diff --git a/docs-src/services/sdk-modules/reporting.md b/docs-src/services/sdk-modules/reporting.md new file mode 100644 index 0000000..8ed1c45 --- /dev/null +++ b/docs-src/services/sdk-modules/reporting.md @@ -0,0 +1,52 @@ +# Reporting — Management-Berichte + +Das Reporting-Modul liefert aggregierte Compliance-KPIs und Berichte fuer das Top Management. + +## Features + +- **Executive Dashboard** — Compliance-Score, Risikobewertung und Fristenuebersicht auf einen Blick +- **Modul-Aggregation** — Daten aus DSGVO, Lieferanten, Vorfaelle, Hinweisgebersystem und Schulungen +- **Risikobewertung** — Gesamt-Risikolevel und Aufschluesselung nach Modulen +- **Fristenverwaltung** — Moduluebergreifende Fristen mit Severity (Info, Warnung, Dringend, Ueberfaellig) +- **Aktivitaetsprotokoll** — Letzte Compliance-Aktivitaeten ueber alle Module + +## Rechtsgrundlage + +- **Art. 5 Abs. 2 DSGVO** — Rechenschaftspflicht: Compliance muss dokumentiert und nachgewiesen werden +- **Art. 24 DSGVO** — Verantwortung des Verantwortlichen: geeignete Massnahmen nachweisen +- **Art. 39 DSGVO** — Taetigkeitsbericht des DSB basiert auf diesen Daten + +## API Endpoints + +Alle unter `/api/v1/reporting/`, benoetigen `X-Tenant-ID` Header. + +| Method | Endpoint | Beschreibung | +|--------|----------|-------------| +| GET | `/executive` | Vollstaendiger Executive Report | +| GET | `/score` | Nur Compliance-Score (leichtgewichtig) | +| GET | `/deadlines` | Bevorstehende Fristen | +| GET | `/risks` | Risikouebersicht | + +## Frontend + +Seite unter `/sdk/reporting` mit: + +- Compliance-Score-Kreis (0-100%) +- KPI-Karten (Verarbeitungen, TOMs, DSRs, Vorfaelle, Schulungsrate, Lieferanten) +- Risikotabelle nach Modulen +- Fristenliste mit Severity-Badges +- Modul-Detail-Ansichten (DSGVO, Vendors, Incidents, Whistleblower, Academy) +- Aktivitaetsprotokoll + +## Datenmodell + +Der Executive Report aggregiert Daten aus allen Modulen: + +- `DSGVOSummary` — Verarbeitungen, TOMs, DSRs, DSFAs, Loeschfristen +- `VendorSummary` — Lieferanten nach Risiko, ausstehende Pruefungen +- `IncidentSummary` — Offene/kritische Vorfaelle, Benachrichtigungen +- `WhistleblowerSummary` — Meldungen, ueberfaellige Fristen +- `AcademySummary` — Kurse, Einschreibungen, Abschlussrate +- `RiskOverview` — Gesamt-Risikolevel, Findings nach Modul +- `Deadline[]` — Moduluebergreifende Fristen +- `ActivityEntry[]` — Letzte Aktivitaeten diff --git a/docs-src/services/sdk-modules/vendors.md b/docs-src/services/sdk-modules/vendors.md new file mode 100644 index 0000000..201a80a --- /dev/null +++ b/docs-src/services/sdk-modules/vendors.md @@ -0,0 +1,34 @@ +# Vendors — Auftragsverarbeiter-Management + +Verwaltung von Auftragsverarbeitern und Unterauftragsverarbeitern gemaess Art. 28 DSGVO. + +## Features + +- **Vendor-Verzeichnis** — Zentrale Uebersicht aller Auftragsverarbeiter +- **Risikobewertung** — Automatische Risikoeinstufung basierend auf Datenkategorien und Drittlandtransfers +- **Vertragsmanagement** — AVV-Pruefung mit KI-gestuetzter Klauselanalyse +- **TOM-Abgleich** — Vergleich der Lieferanten-TOMs mit eigenen Anforderungen +- **Audit-Trail** — Dokumentation aller Pruefungen und Aenderungen + +## API Endpoints + +Alle unter `/api/v1/vendors/`, benoetigen `X-Tenant-ID` Header. + +| Method | Endpoint | Beschreibung | +|--------|----------|-------------| +| GET | `/vendors` | Vendors auflisten | +| POST | `/vendors` | Neuen Vendor anlegen | +| GET | `/vendors/{id}` | Vendor-Details | +| PUT | `/vendors/{id}` | Vendor aktualisieren | +| DELETE | `/vendors/{id}` | Vendor loeschen | +| POST | `/vendors/{id}/assess` | Risikobewertung durchfuehren | +| GET | `/vendors/{id}/contracts` | Vertraege auflisten | +| POST | `/vendors/{id}/contracts` | AVV hochladen | + +## Frontend + +Seite unter `/sdk/vendor-compliance` mit Vendor-Tabelle, Risiko-Matrix und Vertragsmanagement. + +## Datenbank + +Migration in der AI Compliance SDK erstellt Tabellen fuer Vendors, Risikobewertungen, Vertraege und AVV-Klauseln. diff --git a/mkdocs.yml b/mkdocs.yml index 97ec9b3..158c98f 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -68,6 +68,12 @@ nav: - Academy: services/sdk-modules/academy.md - Whistleblower: services/sdk-modules/whistleblower.md - Incidents: services/sdk-modules/incidents.md + - Reporting: services/sdk-modules/reporting.md + - Vendors: services/sdk-modules/vendors.md + - Industry Templates: services/sdk-modules/industry-templates.md + - Document Crawler: services/sdk-modules/document-crawler.md + - Advisory Board: services/sdk-modules/advisory-board.md + - DSB Portal: services/sdk-modules/dsb-portal.md - Entwicklung: - Testing: development/testing.md - Dokumentation: development/documentation.md