'use client' import { useMemo } from 'react' import Link from 'next/link' import { useVendorCompliance, getRiskLevelFromScore, getRiskLevelColor, generateRiskMatrix, SEVERITY_DEFINITIONS, countFindingsBySeverity, } from '@/lib/sdk/vendor-compliance' export default function RisksPage() { const { vendors, findings, riskOverview, isLoading } = useVendorCompliance() const riskMatrix = useMemo(() => generateRiskMatrix(), []) const findingsBySeverity = useMemo(() => { return countFindingsBySeverity(findings) }, [findings]) const openFindings = useMemo(() => { return findings.filter((f) => f.status === 'OPEN' || f.status === 'IN_PROGRESS') }, [findings]) const highRiskVendors = useMemo(() => { return vendors.filter((v) => v.residualRiskScore >= 60) }, [vendors]) if (isLoading) { return (
Übersicht über Vendor-Risiken und offene Findings
| {[1, 2, 3, 4, 5].map((impact) => ( | {impact} | ))}
|---|---|
| {likelihood} | {[1, 2, 3, 4, 5].map((impact) => { const cell = riskMatrix[likelihood - 1]?.[impact - 1] const colors = cell ? getRiskLevelColor(cell.level) : { bg: '', text: '' } const vendorCount = vendors.filter((v) => { const vLikelihood = Math.ceil(v.residualRiskScore / 20) const vImpact = Math.ceil(v.inherentRiskScore / 20) return vLikelihood === likelihood && vImpact === impact }).length return (
{vendorCount > 0 ? vendorCount : '-'}
|
)
})}
{def.responseTime.de}
{vendor.name}
{vendor.serviceDescription}
Residual Risk
{vendor.residualRiskScore}%
{finding.title.de}
{finding.description.de}
{vendor && (Vendor: {vendor.name}
)}{title}
{value} {suffix}