'use client' import React, { useState, useEffect, useCallback } from 'react' import { useRouter } from 'next/navigation' import Link from 'next/link' import { useSDK } from '@/lib/sdk' import { StepHeader, STEP_EXPLANATIONS } from '@/components/sdk/StepHeader' import { DSFACard } from '@/components/sdk/dsfa' import { DSFA, DSFAStatus, DSFA_STATUS_LABELS, DSFA_RISK_LEVEL_LABELS, } from '@/lib/sdk/dsfa/types' import { listDSFAs, deleteDSFA, exportDSFAAsJSON, getDSFAStats, createDSFAFromAssessment, getDSFAByAssessment, } from '@/lib/sdk/dsfa/api' // ============================================================================= // UCCA TRIGGER WARNING COMPONENT // ============================================================================= interface UCCATriggerWarningProps { assessmentId: string triggeredRules: string[] existingDsfaId?: string onCreateDSFA: () => void } function UCCATriggerWarning({ assessmentId, triggeredRules, existingDsfaId, onCreateDSFA, }: UCCATriggerWarningProps) { if (existingDsfaId) { return (

DSFA bereits erstellt

Fuer dieses Assessment wurde bereits eine DSFA angelegt.

DSFA oeffnen
) } return (

DSFA erforderlich

Das UCCA-Assessment hat folgende Trigger ausgeloest:

{triggeredRules.map(rule => ( {rule} ))}
) } // ============================================================================= // GENERATOR WIZARD COMPONENT // ============================================================================= function GeneratorWizard({ onClose, onCreated }: { onClose: () => void; onCreated: (dsfa: DSFA) => void }) { const [step, setStep] = useState(1) const [formData, setFormData] = useState({ name: '', description: '', processingPurpose: '', dataCategories: [] as string[], legalBasis: '', }) const [isSubmitting, setIsSubmitting] = useState(false) const DATA_CATEGORIES = [ 'Kontaktdaten', 'Identifikationsdaten', 'Finanzdaten', 'Gesundheitsdaten', 'Standortdaten', 'Nutzungsdaten', 'Biometrische Daten', 'Daten Minderjaehriger', ] const LEGAL_BASES = [ { value: 'consent', label: 'Einwilligung (Art. 6 Abs. 1 lit. a)' }, { value: 'contract', label: 'Vertrag (Art. 6 Abs. 1 lit. b)' }, { value: 'legal_obligation', label: 'Rechtliche Verpflichtung (Art. 6 Abs. 1 lit. c)' }, { value: 'legitimate_interest', label: 'Berechtigtes Interesse (Art. 6 Abs. 1 lit. f)' }, ] const handleCategoryToggle = (cat: string) => { setFormData(prev => ({ ...prev, dataCategories: prev.dataCategories.includes(cat) ? prev.dataCategories.filter(c => c !== cat) : [...prev.dataCategories, cat], })) } const handleSubmit = async () => { setIsSubmitting(true) try { // For standalone DSFA, we use the regular create endpoint const response = await fetch('/api/sdk/v1/dsgvo/dsfas', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: formData.name, description: formData.description, processing_purpose: formData.processingPurpose, data_categories: formData.dataCategories, legal_basis: formData.legalBasis, status: 'draft', }), }) if (response.ok) { const dsfa = await response.json() onCreated(dsfa) onClose() } } catch (error) { console.error('Failed to create DSFA:', error) } finally { setIsSubmitting(false) } } return (

Neue Standalone-DSFA erstellen

{/* Progress Steps */}
{[1, 2, 3].map(s => (
{s < step ? ( ) : s}
{s < 3 &&
} ))}
{/* Step Content */}
{step === 1 && (
setFormData(prev => ({ ...prev, name: e.target.value }))} placeholder="z.B. DSFA - Mitarbeiter-Monitoring" className="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500" />