From 83e32dc28913bcb11d6d85541e4c43eda89c9ae6 Mon Sep 17 00:00:00 2001 From: Benjamin Admin Date: Mon, 9 Feb 2026 07:23:16 +0100 Subject: [PATCH] feat(sdk): Add DSFA (Art. 35 DSGVO) Editor and API Client MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implements comprehensive Data Protection Impact Assessment tooling: - 5-section wizard following Art. 35 DSGVO structure - Interactive risk matrix with likelihood/impact scoring - Mitigation management linked to risks - DPO approval workflow (draft → in_review → approved/rejected) - UCCA integration for auto-triggering DSFA from assessments - Full TypeScript types and API client with 42 test cases Co-Authored-By: Claude Opus 4.5 --- admin-v2/app/(sdk)/sdk/dsfa/[id]/page.tsx | 1340 +++++++++++++++++ admin-v2/app/(sdk)/sdk/dsfa/page.tsx | 548 +++++++ admin-v2/lib/sdk/dsfa/__tests__/api.test.ts | 355 +++++ admin-v2/lib/sdk/dsfa/__tests__/types.test.ts | 255 ++++ admin-v2/lib/sdk/dsfa/api.ts | 399 +++++ admin-v2/lib/sdk/dsfa/index.ts | 8 + admin-v2/lib/sdk/dsfa/types.ts | 365 +++++ ai-compliance-sdk/docs/DEVELOPER.md | 1011 +++++++++++++ 8 files changed, 4281 insertions(+) create mode 100644 admin-v2/app/(sdk)/sdk/dsfa/[id]/page.tsx create mode 100644 admin-v2/app/(sdk)/sdk/dsfa/page.tsx create mode 100644 admin-v2/lib/sdk/dsfa/__tests__/api.test.ts create mode 100644 admin-v2/lib/sdk/dsfa/__tests__/types.test.ts create mode 100644 admin-v2/lib/sdk/dsfa/api.ts create mode 100644 admin-v2/lib/sdk/dsfa/index.ts create mode 100644 admin-v2/lib/sdk/dsfa/types.ts create mode 100644 ai-compliance-sdk/docs/DEVELOPER.md diff --git a/admin-v2/app/(sdk)/sdk/dsfa/[id]/page.tsx b/admin-v2/app/(sdk)/sdk/dsfa/[id]/page.tsx new file mode 100644 index 0000000..9f4f18a --- /dev/null +++ b/admin-v2/app/(sdk)/sdk/dsfa/[id]/page.tsx @@ -0,0 +1,1340 @@ +'use client' + +import React, { useState, useEffect, useCallback } from 'react' +import Link from 'next/link' +import { useParams, useRouter } from 'next/navigation' +import { + DSFA, + DSFARisk, + DSFAMitigation, + DSFA_SECTIONS, + DSFA_STATUS_LABELS, + DSFA_RISK_LEVEL_LABELS, + DSFA_LEGAL_BASES, + DSFA_AFFECTED_RIGHTS, + calculateRiskLevel, +} from '@/lib/sdk/dsfa/types' +import { + getDSFA, + updateDSFASection, + addDSFARisk, + removeDSFARisk, + addDSFAMitigation, + updateDSFAMitigationStatus, +} from '@/lib/sdk/dsfa/api' +import { RiskMatrix, ApprovalPanel } from '@/components/sdk/dsfa' + +// ============================================================================= +// SECTION EDITORS +// ============================================================================= + +interface SectionProps { + dsfa: DSFA + onUpdate: (data: Record) => Promise + isSubmitting: boolean +} + +// Section 1: Systematische Beschreibung (Art. 35 Abs. 7 lit. a) +function Section1Editor({ dsfa, onUpdate, isSubmitting }: SectionProps) { + const [formData, setFormData] = useState({ + processing_description: dsfa.processing_description || '', + processing_purpose: dsfa.processing_purpose || '', + data_categories: dsfa.data_categories || [], + data_subjects: dsfa.data_subjects || [], + recipients: dsfa.recipients || [], + legal_basis: dsfa.legal_basis || '', + legal_basis_details: dsfa.legal_basis_details || '', + }) + const [newCategory, setNewCategory] = useState('') + const [newSubject, setNewSubject] = useState('') + const [newRecipient, setNewRecipient] = useState('') + + const handleSave = () => { + onUpdate(formData) + } + + const addItem = (field: 'data_categories' | 'data_subjects' | 'recipients', value: string, setter: (v: string) => void) => { + if (value.trim()) { + setFormData(prev => ({ + ...prev, + [field]: [...prev[field], value.trim()] + })) + setter('') + } + } + + const removeItem = (field: 'data_categories' | 'data_subjects' | 'recipients', index: number) => { + setFormData(prev => ({ + ...prev, + [field]: prev[field].filter((_, i) => i !== index) + })) + } + + return ( +
+ {/* Processing Purpose */} +
+ +