'use client' import React, { useState, useCallback } from 'react' import { useRouter } from 'next/navigation' import { useSDK } from '@/lib/sdk' import { StepHeader, STEP_EXPLANATIONS } from '@/components/sdk/StepHeader' import { DocumentUploadSection, type UploadedDocument } from '@/components/sdk' // ============================================================================= // TYPES // ============================================================================= interface ProcessingActivity { id: string name: string description: string purpose: string legalBasis: string dataCategories: string[] dataSubjects: string[] recipients: string[] thirdCountryTransfers: boolean retentionPeriod: string toms: string[] status: 'active' | 'draft' | 'archived' lastUpdated: Date responsible: string } // ============================================================================= // MOCK DATA // ============================================================================= const mockActivities: ProcessingActivity[] = [ { id: 'vvt-1', name: 'Personalverwaltung', description: 'Verarbeitung von Mitarbeiterdaten fuer HR-Zwecke', purpose: 'Durchfuehrung des Beschaeftigungsverhaeltnisses', legalBasis: 'Art. 6 Abs. 1 lit. b, Art. 88 DSGVO i.V.m. BDSG', dataCategories: ['Stammdaten', 'Kontaktdaten', 'Gehaltsdaten', 'Bankverbindung'], dataSubjects: ['Mitarbeiter', 'Bewerber'], recipients: ['Lohnbuero', 'Finanzamt', 'Sozialversicherungstraeger'], thirdCountryTransfers: false, retentionPeriod: '10 Jahre nach Ende des Beschaeftigungsverhaeltnisses', toms: ['Zugriffskontrolle', 'Verschluesselung', 'Protokollierung'], status: 'active', lastUpdated: new Date('2024-01-15'), responsible: 'HR-Abteilung', }, { id: 'vvt-2', name: 'Kundenverwaltung (CRM)', description: 'Verwaltung von Kundenbeziehungen und Vertriebsaktivitaeten', purpose: 'Vertragserfuellung und Kundenbetreuung', legalBasis: 'Art. 6 Abs. 1 lit. b DSGVO', dataCategories: ['Kontaktdaten', 'Kaufhistorie', 'Kommunikationsverlauf'], dataSubjects: ['Kunden', 'Interessenten'], recipients: ['Vertrieb', 'Kundenservice'], thirdCountryTransfers: true, retentionPeriod: '3 Jahre nach letzter Interaktion', toms: ['Zugriffskontrolle', 'Backups', 'Verschluesselung'], status: 'active', lastUpdated: new Date('2024-01-10'), responsible: 'Vertriebsleitung', }, { id: 'vvt-3', name: 'Newsletter-Marketing', description: 'Versand von Marketing-E-Mails und Newslettern', purpose: 'Direktmarketing und Kundenbindung', legalBasis: 'Art. 6 Abs. 1 lit. a DSGVO (Einwilligung)', dataCategories: ['E-Mail-Adresse', 'Name', 'Interaktionsdaten'], dataSubjects: ['Newsletter-Abonnenten'], recipients: ['Marketing-Abteilung', 'E-Mail-Dienstleister'], thirdCountryTransfers: true, retentionPeriod: 'Bis zum Widerruf der Einwilligung', toms: ['Double-Opt-In', 'Abmeldelink', 'Protokollierung'], status: 'active', lastUpdated: new Date('2024-01-20'), responsible: 'Marketing', }, { id: 'vvt-4', name: 'KI-gestuetztes Recruiting', description: 'Automatisierte Vorauswahl von Bewerbungen', purpose: 'Effiziente Bewerberauswahl', legalBasis: 'Art. 6 Abs. 1 lit. b, Art. 22 Abs. 2 lit. a DSGVO', dataCategories: ['Bewerbungsunterlagen', 'Qualifikationen', 'Berufserfahrung'], dataSubjects: ['Bewerber'], recipients: ['HR-Abteilung', 'Fachabteilungen'], thirdCountryTransfers: false, retentionPeriod: '6 Monate nach Absage', toms: ['Menschliche Aufsicht', 'Erklaerbarkeit', 'Bias-Pruefung'], status: 'draft', lastUpdated: new Date('2024-01-22'), responsible: 'HR-Abteilung', }, { id: 'vvt-5', name: 'Website-Analyse', description: 'Analyse des Nutzerverhaltens auf der Website', purpose: 'Verbesserung der Website und Nutzererfahrung', legalBasis: 'Art. 6 Abs. 1 lit. a DSGVO (Einwilligung via Cookie-Banner)', dataCategories: ['IP-Adresse', 'Seitenaufrufe', 'Verweildauer', 'Geraetedaten'], dataSubjects: ['Website-Besucher'], recipients: ['Marketing', 'Webentwicklung'], thirdCountryTransfers: true, retentionPeriod: '14 Monate', toms: ['IP-Anonymisierung', 'Cookie-Einwilligung', 'Opt-Out'], status: 'active', lastUpdated: new Date('2024-01-05'), responsible: 'Webmaster', }, ] // ============================================================================= // COMPONENTS // ============================================================================= function ActivityCard({ activity }: { activity: ProcessingActivity }) { const statusColors = { active: 'bg-green-100 text-green-700', draft: 'bg-yellow-100 text-yellow-700', archived: 'bg-gray-100 text-gray-500', } const statusLabels = { active: 'Aktiv', draft: 'Entwurf', archived: 'Archiviert', } return (
{statusLabels[activity.status]} {activity.thirdCountryTransfers && ( Drittlandtransfer )}

{activity.name}

{activity.description}

Zweck: {activity.purpose}
Rechtsgrundlage: {activity.legalBasis}
Aufbewahrung: {activity.retentionPeriod}
Datenkategorien:
{activity.dataCategories.map(cat => ( {cat} ))}
Betroffene:
{activity.dataSubjects.map(subj => ( {subj} ))}
Verantwortlich: {activity.responsible} | Aktualisiert: {activity.lastUpdated.toLocaleDateString('de-DE')}
) } // ============================================================================= // MAIN PAGE // ============================================================================= export default function VVTPage() { const router = useRouter() const { state } = useSDK() const [activities] = useState(mockActivities) const [filter, setFilter] = useState('all') const [searchQuery, setSearchQuery] = useState('') // Handle uploaded document const handleDocumentProcessed = useCallback((doc: UploadedDocument) => { console.log('[VVT Page] Document processed:', doc) }, []) // Open document in workflow editor const handleOpenInEditor = useCallback((doc: UploadedDocument) => { router.push(`/compliance/workflow?documentType=vvt&documentId=${doc.id}&mode=change`) }, [router]) const filteredActivities = activities.filter(activity => { const matchesFilter = filter === 'all' || activity.status === filter const matchesSearch = searchQuery === '' || activity.name.toLowerCase().includes(searchQuery.toLowerCase()) || activity.purpose.toLowerCase().includes(searchQuery.toLowerCase()) return matchesFilter && matchesSearch }) const activeCount = activities.filter(a => a.status === 'active').length const thirdCountryCount = activities.filter(a => a.thirdCountryTransfers).length const totalDataCategories = [...new Set(activities.flatMap(a => a.dataCategories))].length const stepInfo = STEP_EXPLANATIONS['vvt'] return (
{/* Step Header */}
{/* Document Upload Section */} {/* Stats */}
Verarbeitungen
{activities.length}
Aktiv
{activeCount}
Mit Drittlandtransfer
{thirdCountryCount}
Datenkategorien
{totalDataCategories}
{/* Search and Filter */}
setSearchQuery(e.target.value)} placeholder="Verarbeitungen durchsuchen..." className="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent" />
{['all', 'active', 'draft', 'archived'].map(f => ( ))}
{/* Activities List */}
{filteredActivities.map(activity => ( ))}
{filteredActivities.length === 0 && (

Keine Verarbeitungen gefunden

Passen Sie die Suche oder den Filter an.

)}
) }