'use client' /** * ComplianceResultTabs — standardisierte Ergebnis-Darstellung des * Compliance-Checks: Kopf-Boxen (erkanntes Profil + Banner) ÜBER einer * Tab-Leiste. Ein Tab je Themen-Agent (result.agent_outputs, P1: Impressum) * via AgentResultTab + ein "Alle Checks (roh)"-Tab mit der bisherigen * ChecklistView — so geht nichts verloren, während die Themen-Tabs wachsen. */ import React, { useState } from 'react' import { ChecklistView, DOC_TYPE_LABELS, type DocResult } from './ChecklistView' import { DocResultView } from './DocResultView' import { MigrationPanel } from './MigrationPanel' import { RemediationPlan } from './RemediationPlan' import { ResultSummary } from './ResultSummary' export function ComplianceResultTabs({ results }: { results: any }) { // Themen-Tabs aus der HAUPT-Engine (result.results) — nicht aus dem // v3-Agent. Jedes Dokument = ein Tab mit der genauen Pflichtangaben-Tabelle. const docs: DocResult[] = results.results || [] const tabs = docs.map((_: DocResult, i: number) => String(i)).concat('raw') const [active, setActive] = useState(tabs[0] ?? 'raw') return (
{/* Audit-Kopf: Titel + check_id + 4 KPI-Kacheln */} {/* Kopf-Boxen über den Tabs */} {results.business_profile && (
Erkanntes Geschaeftsmodell
Typ: {results.business_profile.business_type?.toUpperCase()} Branche: {results.business_profile.industry} {results.business_profile.has_online_shop && Online-Shop} {results.business_profile.is_regulated_profession && Regulierter Beruf ({results.business_profile.regulated_profession_type})}
)} {results.extracted_profile?.company_profile && Object.keys(results.extracted_profile.company_profile).length > 0 && (
Aus Dokumenten extrahiert
{results.extracted_profile.company_profile.companyName && ( Firma: {results.extracted_profile.company_profile.companyName} )} {results.extracted_profile.company_profile.legalForm && ( Rechtsform: {results.extracted_profile.company_profile.legalForm.toUpperCase()} )} {results.extracted_profile.company_profile.headquartersCity && ( Sitz: {results.extracted_profile.company_profile.headquartersZip} {results.extracted_profile.company_profile.headquartersCity} )} {results.extracted_profile.company_profile.dpoEmail && ( DSB: {results.extracted_profile.company_profile.dpoEmail} )} {results.extracted_profile.company_profile.ustIdNr && ( USt-IdNr: {results.extracted_profile.company_profile.ustIdNr} )}
{results.extracted_profile.compliance_scope_hints?.length > 0 && (
Scope-Hinweise: {results.extracted_profile.compliance_scope_hints.map((h: any, i: number) => ( {h.source} ))}
)}
)} {results.banner_result && (
0 ? 'bg-amber-50 border-amber-200' : results.banner_result.detected ? 'bg-green-50 border-green-200' : 'bg-gray-50 border-gray-200' }`}>
0 ? 'bg-amber-500' : results.banner_result.detected ? 'bg-green-500' : 'bg-gray-400' }`} /> Cookie-Banner-Check (automatisch)
{results.banner_result.detected ? ( <> Banner erkannt{results.banner_result.provider ? ` (${results.banner_result.provider})` : ''}. {results.banner_result.violations > 0 ? ` ${results.banner_result.violations} Auffaelligkeit${results.banner_result.violations !== 1 ? 'en' : ''} gefunden.` : ' Keine Auffaelligkeiten.'} ) : ( 'Kein Cookie-Banner erkannt oder Banner-Check nicht moeglich.' )}
)} {/* Tab-Leiste — ein Tab je Dokument (Haupt-Engine) + Übersicht */}
{tabs.map(t => { const tabClass = `px-3 py-1.5 text-sm font-medium border-b-2 -mb-px transition-colors flex items-center gap-1.5 ${ active === t ? 'border-purple-500 text-purple-700' : 'border-transparent text-gray-500 hover:text-gray-700' }` if (t === 'raw') { return ( ) } const doc = docs[Number(t)] const dot = doc.error ? 'bg-gray-300' : doc.scenario === 'import' ? 'bg-green-500' : doc.scenario === 'fix' ? 'bg-amber-500' : doc.scenario === 'regenerate' ? 'bg-red-500' : 'bg-gray-400' return ( ) })}
{/* Tab-Inhalt */} {active === 'raw' ? ( ) : docs[Number(active)] ? ( ) : null} {/* Abstellmaßnahmen + Ticket-Formulierung (Übergabe an anderes Team) */} {/* Check-Footer (themenübergreifend) */} {results.email_status && (
E-Mail: {results.email_status === 'sent' ? 'Gesendet' : results.email_status}
)} {results.check_id && }
) }