'use client' import React from 'react' import { DSFA, SDM_GOALS } from '@/lib/sdk/dsfa/types' import type { SDMGoal } from '@/lib/sdk/dsfa/types' import { RISK_CATALOG } from '@/lib/sdk/dsfa/risk-catalog' import { MITIGATION_LIBRARY } from '@/lib/sdk/dsfa/mitigation-library' export function SDMCoverageOverview({ dsfa }: { dsfa: DSFA }) { const goals = Object.keys(SDM_GOALS) as SDMGoal[] const goalCoverage = goals.map(goal => { const catalogRisks = RISK_CATALOG.filter(r => r.sdmGoal === goal) const catalogMitigations = MITIGATION_LIBRARY.filter(m => m.sdmGoals.includes(goal)) const matchedRisks = catalogRisks.filter(cr => dsfa.risks?.some(r => r.description?.includes(cr.title)) ).length const matchedMitigations = catalogMitigations.filter(cm => dsfa.mitigations?.some(m => m.description?.includes(cm.title)) ).length const hasRisks = matchedRisks > 0 || dsfa.risks?.some(r => { const cat = r.category if (goal === 'vertraulichkeit' && cat === 'confidentiality') return true if (goal === 'integritaet' && cat === 'integrity') return true if (goal === 'verfuegbarkeit' && cat === 'availability') return true if (goal === 'nichtverkettung' && cat === 'rights_freedoms') return true return false }) const coverage = matchedMitigations > 0 ? 'covered' : hasRisks ? 'gaps' : 'no_data' return { goal, info: SDM_GOALS[goal], matchedRisks, matchedMitigations, coverage, } }) return (

SDM-Abdeckung (Gewaehrleistungsziele)

Uebersicht ueber die Abdeckung der 7 Gewaehrleistungsziele des Standard-Datenschutzmodells.

{goalCoverage.map(({ goal, info, matchedRisks, matchedMitigations, coverage }) => (
{coverage === 'covered' ? '\u2713' : coverage === 'gaps' ? '!' : '\u2013'}
{info.name}
{matchedRisks}R / {matchedMitigations}M
))}
Abgedeckt Luecken Keine Daten R = Risiken, M = Massnahmen
) }