'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 (
)
}
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 (
{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 (
{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 && (
Zurücksetzen
)}
{!hasAnswers ? 'Scope-Profiling starten' : 'Ergebnis aktualisieren'}
)
}