diff --git a/admin-compliance/app/sdk/cra/_components/ReadinessCheck.tsx b/admin-compliance/app/sdk/cra/_components/ReadinessCheck.tsx new file mode 100644 index 00000000..f788f84b --- /dev/null +++ b/admin-compliance/app/sdk/cra/_components/ReadinessCheck.tsx @@ -0,0 +1,152 @@ +'use client' + +import { useState } from 'react' + +interface GuidelineItem { + req_id: string + title: string + category: string + annex_anchor: string + severity: string + effort_days?: number + measures: { id: string; name: string }[] +} +interface ReadinessResult { + in_scope: boolean + classification: string + rationale: string[] + conformity_path_hint: string + guideline: { code: GuidelineItem[]; process: GuidelineItem[]; document: GuidelineItem[] } + counts: { code: number; process: number; document: number } + total_effort_days: number + deadlines: { date: string; label: string }[] +} + +const CLASS_LABEL: Record = { + CRITICAL: 'Kritisch', IMPORTANT_II: 'Wichtig (Klasse II)', IMPORTANT_I: 'Wichtig (Klasse I)', + STANDARD: 'Standard', NOT_IN_SCOPE: 'Nicht im CRA-Anwendungsbereich', +} +const BUCKETS: { key: 'code' | 'process' | 'document'; label: string; hint: string }[] = [ + { key: 'code', label: 'Code / Technik', hint: 'im Produkt umzusetzen' }, + { key: 'process', label: 'Prozesse', hint: 'organisatorisch zu etablieren' }, + { key: 'document', label: 'Dokumentation', hint: 'nachzuweisen / beizulegen' }, +] + +export function ReadinessCheck({ onCreateProject }: { onCreateProject?: () => void }) { + const [intendedUse, setIntendedUse] = useState('') + const [flags, setFlags] = useState>({}) + const [result, setResult] = useState(null) + const [loading, setLoading] = useState(false) + + const toggle = (k: string) => setFlags((f) => ({ ...f, [k]: !f[k] })) + + const run = async () => { + setLoading(true) + try { + const res = await fetch('/api/v1/cra/readiness', { + method: 'POST', headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ intended_use: intendedUse, ...flags }), + }) + setResult(res.ok ? await res.json() : null) + } finally { setLoading(false) } + } + + const QUESTIONS: { k: string; label: string }[] = [ + { k: 'connected_to_internet', label: 'Hängt das Produkt am Internet (oder soll es)?' }, + { k: 'user_parameter_app', label: 'Gibt es eine App, mit der Nutzer Parameter einstellen?' }, + { k: 'remote_maintenance', label: 'Bietet ihr Fernwartung an?' }, + { k: 'has_software_updates', label: 'Hat es Software-/Firmware-Updates?' }, + { k: 'has_firmware', label: 'Enthält es Firmware (Embedded/IoT)?' }, + { k: 'processes_personal_data', label: 'Verarbeitet es personenbezogene Daten?' }, + { k: 'is_critical_infra_supplier', label: 'Wird es in kritischer Infrastruktur eingesetzt?' }, + ] + + return ( +
+

CRA-Readiness-Check

+

+ Was kommt mit dem Cyber Resilience Act auf Ihr Produkt zu? Ein paar Fragen — Sie bekommen sofort + eine auf Ihren Scope zugeschnittene Übersicht (Code, Prozesse, Dokumentation). Wir analysieren — + und setzen es mit Ihnen um. +

+ +