/** * RisksBlock Component * E5.S3: Actieve risico's */ import { ShieldAlert, AlertTriangle, Info } from 'lucide-react'; import type { RiskAssessment } from '@/lib/types/overdracht'; interface RisksBlockProps { risks: RiskAssessment[]; } function getRiskLevelConfig(level: string): { label: string; bgColor: string; textColor: string; borderColor: string; icon: React.ReactNode; } { switch (level) { case 'zeer_hoog': return { label: 'Zeer hoog', bgColor: 'bg-red-100', textColor: 'text-red-700', borderColor: 'border-red-400', icon: , }; case 'hoog': return { label: 'Hoog', bgColor: 'bg-orange-100', textColor: 'text-orange-700', borderColor: 'border-orange-400', icon: , }; case 'gemiddeld': return { label: 'Gemiddeld', bgColor: 'bg-amber-100', textColor: 'text-amber-700', borderColor: 'border-amber-400', icon: , }; case 'laag': default: return { label: 'Laag', bgColor: 'bg-green-100', textColor: 'text-green-700', borderColor: 'border-green-400', icon: , }; } } function getRiskTypeLabel(type: string): string { const types: Record = { valrisico: 'Valrisico', decubitus: 'Decubitus', ondervoeding: 'Ondervoeding', delier: 'Delier', infectie: 'Infectie', suiciderisico: 'Suïciderisico', agressie: 'Agressie', weglopen: 'Weglopen', }; return types[type] || type; } export function RisksBlock({ risks }: RisksBlockProps) { // Sort risks by level (highest first) const sortedRisks = [...risks].sort((a, b) => { const order = ['zeer_hoog', 'hoog', 'gemiddeld', 'laag']; return order.indexOf(a.risk_level) - order.indexOf(b.risk_level); }); const highRiskCount = risks.filter( r => r.risk_level === 'hoog' || r.risk_level === 'zeer_hoog' ).length; return (
{/* Header */}

Risico's

{risks.length} actieve risico's

{highRiskCount > 0 && ( {highRiskCount} hoog risico )}
{/* Content */} {sortedRisks.length === 0 ? (

Geen actieve risico's geregistreerd

) : (
{sortedRisks.map((risk) => { const config = getRiskLevelConfig(risk.risk_level); return (
{/* Risk header */}
{config.icon} {getRiskTypeLabel(risk.risk_type)}
{config.label}
{/* Rationale if available */} {risk.rationale && (

{risk.rationale}

)}
); })}
)}
); }