'use client' import { useState } from 'react' import type { DisplayEvidence } from './EvidenceTypes' export function ReviewModal({ evidence, onClose, onSuccess }: { evidence: DisplayEvidence onClose: () => void onSuccess: () => void }) { const [confidenceLevel, setConfidenceLevel] = useState(evidence.confidenceLevel || 'E1') const [truthStatus, setTruthStatus] = useState(evidence.truthStatus || 'uploaded') const [reviewedBy, setReviewedBy] = useState('') const [submitting, setSubmitting] = useState(false) const [error, setError] = useState(null) const handleSubmit = async () => { if (!reviewedBy.trim()) { setError('Bitte E-Mail-Adresse angeben'); return } setSubmitting(true) setError(null) try { const res = await fetch(`/api/sdk/v1/compliance/evidence/${evidence.id}/review`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ confidence_level: confidenceLevel, truth_status: truthStatus, reviewed_by: reviewedBy }), }) if (!res.ok) { const err = await res.json().catch(() => ({ detail: 'Review fehlgeschlagen' })) throw new Error(typeof err.detail === 'string' ? err.detail : JSON.stringify(err.detail)) } onSuccess() } catch (err) { setError(err instanceof Error ? err.message : 'Unbekannter Fehler') } finally { setSubmitting(false) } } const confidenceLevels = [ { value: 'E0', label: 'E0 — Generiert' }, { value: 'E1', label: 'E1 — Manuell' }, { value: 'E2', label: 'E2 — Intern validiert' }, { value: 'E3', label: 'E3 — System-beobachtet' }, { value: 'E4', label: 'E4 — Extern auditiert' }, ] const truthStatuses = [ { value: 'generated', label: 'Generiert' }, { value: 'uploaded', label: 'Hochgeladen' }, { value: 'observed', label: 'Beobachtet' }, { value: 'validated', label: 'Validiert' }, { value: 'audited', label: 'Auditiert' }, ] return (
e.stopPropagation()}>

Evidence Reviewen

{evidence.name}

Aktuelles Confidence-Level: {evidence.confidenceLevel || '—'}
Aktueller Truth-Status: {evidence.truthStatus || '—'}
setReviewedBy(e.target.value)} placeholder="reviewer@unternehmen.de" className="w-full border border-gray-300 rounded-lg px-3 py-2 text-sm focus:ring-2 focus:ring-purple-500 focus:border-transparent" />
{evidence.requiresFourEyes && evidence.approvalStatus !== 'approved' && (

4-Augen-Prinzip aktiv

Dieser Nachweis erfordert eine zusaetzliche Freigabe durch einen zweiten Reviewer.

)} {error && (
{error}
)}
) }