'use client' import React from 'react' import type { ComplianceScopeState, ScopeDecision, ComplianceDepthLevel } from '@/lib/sdk/compliance-scope-types' import { DEPTH_LEVEL_LABELS, DEPTH_LEVEL_DESCRIPTIONS, DEPTH_LEVEL_COLORS, DOCUMENT_TYPE_LABELS } from '@/lib/sdk/compliance-scope-types' interface ScopeOverviewTabProps { scopeState: ComplianceScopeState completionStats?: { total: number; answered: number; percentage: number; isComplete: boolean } onStartProfiling: () => void onReset?: () => void onGoToWizard?: () => void onGoToDecision?: () => void onGoToExport?: () => void onRefreshDecision?: () => void } export function ScopeOverviewTab({ scopeState, completionStats, onStartProfiling, onReset, onGoToWizard, onGoToDecision, onGoToExport, onRefreshDecision }: ScopeOverviewTabProps) { const { decision, answers } = scopeState const hasAnswers = answers && answers.length > 0 const getScoreColor = (score: number): string => { if (score >= 80) return 'from-red-500 to-red-600' if (score >= 60) return 'from-orange-500 to-orange-600' if (score >= 40) return 'from-yellow-500 to-yellow-600' return 'from-green-500 to-green-600' } const getScoreColorBg = (score: number): string => { if (score >= 80) return 'bg-red-100' if (score >= 60) return 'bg-orange-100' if (score >= 40) return 'bg-yellow-100' return 'bg-green-100' } const renderScoreGauge = (label: string, score: number | undefined) => { const value = score ?? 0 return (
{label} {value}/100
) } const renderLevelBadge = () => { if (!decision?.determinedLevel) { return (
?

Noch nicht bewertet

Führen Sie das Scope-Profiling durch, um Ihre Compliance-Tiefe zu bestimmen.

) } const levelColors = DEPTH_LEVEL_COLORS[decision.determinedLevel] return (
{decision.determinedLevel}

{DEPTH_LEVEL_LABELS[decision.determinedLevel]}

{DEPTH_LEVEL_DESCRIPTIONS[decision.determinedLevel]}

) } const renderActiveHardTriggers = () => { if (!decision?.triggeredHardTriggers || decision.triggeredHardTriggers.length === 0) { return null } return (

Aktive Hard-Trigger

{decision.triggeredHardTriggers.map((trigger, idx) => (

{trigger.description}

{trigger.legalReference && (

Rechtsgrundlage: {trigger.legalReference}

)} {trigger.minimumLevel && (

Mindest-Level: {trigger.minimumLevel}

)}
))}
) } const renderDocumentSummary = () => { if (!decision?.requiredDocuments) { return null } const mandatoryDocs = decision.requiredDocuments.filter((doc) => doc.requirement === 'mandatory') const optionalDocs = decision.requiredDocuments.filter((doc) => doc.requirement === 'recommended') const totalEffortHours = decision.requiredDocuments.reduce((sum, doc) => sum + (doc.estimatedEffort ?? 0), 0) return (

Dokumenten-Übersicht

{mandatoryDocs.length}
Pflichtdokumente
{optionalDocs.length}
Optional
{totalEffortHours}h
Aufwand (geschätzt)
) } const renderRiskFlagsSummary = () => { if (!decision?.riskFlags || decision.riskFlags.length === 0) { return null } const critical = decision.riskFlags.filter((rf) => rf.severity === 'critical').length const high = decision.riskFlags.filter((rf) => rf.severity === 'high').length const medium = decision.riskFlags.filter((rf) => rf.severity === 'medium').length return (

Risiko-Flags

{critical > 0 && (
Kritisch {critical}
)} {high > 0 && (
Hoch {high}
)} {medium > 0 && (
Mittel {medium}
)}
) } return (
{/* Level Badge */} {renderLevelBadge()} {/* Scores Section */} {decision && (

Score-Übersicht

{renderScoreGauge('Risiko-Score', decision.scores?.risk_score)} {renderScoreGauge('Komplexitäts-Score', decision.scores?.complexity_score)} {renderScoreGauge('Assurance-Score', decision.scores?.assurance_need)}
{renderScoreGauge('Gesamt-Score', decision.scores?.composite_score)}
)} {/* Active Hard Triggers */} {renderActiveHardTriggers()} {/* Document Summary */} {renderDocumentSummary()} {/* Risk Flags Summary */} {renderRiskFlagsSummary()} {/* CTA Section */}

{!hasAnswers ? 'Bereit für das Scope-Profiling?' : 'Ergebnis aktualisieren'}

{!hasAnswers ? 'Beantworten Sie einige Fragen zu Ihrem Unternehmen und erhalten Sie eine präzise Compliance-Bewertung.' : 'Haben sich Ihre Unternehmensparameter geändert? Aktualisieren Sie Ihre Bewertung.'}

{hasAnswers && onReset && ( )}
) }