diff --git a/.gitignore b/.gitignore index 9ca6b48..05a5119 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,4 @@ backups/*.backup *.mp4 *.mp3 *.wav +ai-compliance-sdk/server diff --git a/admin-compliance/app/(sdk)/sdk/academy/page.tsx b/admin-compliance/app/(sdk)/sdk/academy/page.tsx new file mode 100644 index 0000000..acbc0c8 --- /dev/null +++ b/admin-compliance/app/(sdk)/sdk/academy/page.tsx @@ -0,0 +1,703 @@ +'use client' + +import React, { useState, useEffect, useMemo } from 'react' +import Link from 'next/link' +import { useSDK } from '@/lib/sdk' +import { StepHeader, STEP_EXPLANATIONS } from '@/components/sdk/StepHeader' +import { + Course, + CourseCategory, + Enrollment, + EnrollmentStatus, + AcademyStatistics, + COURSE_CATEGORY_INFO, + ENROLLMENT_STATUS_INFO, + isEnrollmentOverdue, + getDaysUntilDeadline +} from '@/lib/sdk/academy/types' +import { fetchSDKAcademyList } from '@/lib/sdk/academy/api' + +// ============================================================================= +// TYPES +// ============================================================================= + +type TabId = 'overview' | 'courses' | 'enrollments' | 'certificates' | 'settings' + +interface Tab { + id: TabId + label: string + count?: number + countColor?: string +} + +// ============================================================================= +// COMPONENTS +// ============================================================================= + +function TabNavigation({ + tabs, + activeTab, + onTabChange +}: { + tabs: Tab[] + activeTab: TabId + onTabChange: (tab: TabId) => void +}) { + return ( +
+ {course.description} +
+ + {/* Course Meta */} +{enrollment.userEmail}
+{courseName}
+ + {/* Progress Bar */} ++ Academy-Einstellungen, E-Mail-Benachrichtigungen und Kurs-Vorlagen + werden in einer spaeteren Version verfuegbar sein. +
++ Zertifikate werden automatisch nach erfolgreichem Kursabschluss generiert. + Die Zertifikatsverwaltung wird in einer spaeteren Version verfuegbar sein. +
+ {tabCounts.certificates > 0 && ( ++ {tabCounts.certificates} Zertifikat(e) vorhanden +
+ )} ++ Mitarbeiter haben Pflichtschulungen nicht fristgerecht abgeschlossen. Handeln Sie umgehend. +
++ Gemaess Art. 39 Abs. 1 lit. b DSGVO gehoert die Sensibilisierung und Schulung + der an den Verarbeitungsvorgaengen beteiligten Mitarbeiter zu den Aufgaben des + Datenschutzbeauftragten. Nachweisbare Compliance-Schulungen sind Pflicht und + sollten mindestens jaehrlich aufgefrischt werden. +
++ {selectedCategory !== 'all' + ? 'Passen Sie die Filter an oder' + : 'Es sind noch keine Kurse vorhanden.' + } +
+ {selectedCategory !== 'all' ? ( + + ) : ( + + + Ersten Kurs erstellen + + )} ++ {selectedStatus !== 'all' + ? 'Passen Sie die Filter an.' + : 'Es sind noch keine Mitarbeiter in Kurse eingeschrieben.' + } +
+ {selectedStatus !== 'all' && ( + + )} +Keine Quellen konfiguriert
+Erstellen Sie eine Crawl-Quelle um Dokumente zu scannen.
+| Datei | +Kategorie | +Konfidenz | +Groesse | +Archiv | +Aktionen | +
|---|---|---|---|---|---|
|
+ {doc.file_name}
+ {doc.source_name}
+ |
+ + + {doc.classification_corrected && ( + * + )} + | +
+ {doc.classification_confidence != null && (
+
+
+ )}
+
+
+
+
+ {(doc.classification_confidence * 100).toFixed(0)}%
+
+ |
+ {formatSize(doc.file_size_bytes)} | ++ {doc.archived ? ( + IPFS + ) : ( + - + )} + | ++ {!doc.archived && ( + + )} + | +
Kein Report vorhanden
+Fuehren Sie zuerst einen Crawl durch und generieren Sie dann einen Report.
+{gap.description}
++ Automatisches Scannen von Dateisystemen, KI-Klassifizierung, IPFS-Archivierung und Compliance Gap-Analyse. +
+{title}
++ {value} +
+