'use client' /** * P107 — Branchen-Benchmark-Cockpit. * * Multi-Site-Vergleich auf einen Blick. Anonymize-Toggle für Big-4- * Wirtschaftspruefer-Demos. * * URL: /sdk/benchmark */ import React, { useState, useEffect } from 'react' interface Kpi { check_id: string site_label: string site_domain: string captured_at: string industry: string vendors_total: number vendors_us: number vendors_non_eu: number us_pct: number non_eu_pct: number source_breakdown: Record max_cookies_per_vendor: number avg_cookies_per_vendor: number cookies_in_browser: number cookies_detailed_count: number cookie_doc_chars: number banner_detected: boolean banner_provider: string banner_violations: number compliance_score: number | null saving_low_eur: number saving_high_eur: number data_quality_pct: number } interface Summary { n_sites: number avg_vendors: number avg_us_pct: number avg_non_eu_pct: number avg_cookies_browser: number avg_score: number max_vendors: number max_saving_high: number total_saving_low: number total_saving_high: number } const INDUSTRIES = [ { id: '', label: 'Alle Branchen' }, { id: 'automotive', label: 'Automotive (OEM)' }, { id: 'banking', label: 'Banking / Finance' }, { id: 'chemistry', label: 'Chemie / Pharma' }, { id: 'luftfahrt', label: 'Luftfahrt' }, { id: 'ecommerce', label: 'E-Commerce' }, { id: 'saas', label: 'SaaS / Software' }, ] const PRESET_GROUPS = [ { id: 'automotive_oem', label: 'Automotive OEMs', sites: 'Volkswagen,BMW,Mercedes-Benz,SEAT,AUDI' }, { id: 'automotive_supl', label: 'Automotive Zulieferer', sites: 'ZF Friedrichshafen,Robert Bosch,Continental' }, { id: 'chemie', label: 'Chemie (DAX)', sites: 'BASF,Bayer,Henkel,Linde' }, { id: 'luftfahrt', label: 'Luftfahrt', sites: 'Lufthansa,Eurowings,Condor' }, { id: 'banking', label: 'Banking (DAX)', sites: 'Deutsche Bank,Commerzbank,DZ Bank,KfW' }, ] export default function BenchmarkPage() { const [industry, setIndustry] = useState('') const [sites, setSites] = useState('') const [anonymized, setAnonymized] = useState(false) const [data, setData] = useState<{kpis: Kpi[]; summary: Summary} | null>(null) const [loading, setLoading] = useState(false) const [error, setError] = useState(null) const fetchData = async () => { setLoading(true); setError(null) try { const url = new URL('/api/compliance/admin/benchmark', window.location.origin) if (industry) url.searchParams.set('industry', industry) if (sites) url.searchParams.set('sites', sites) if (anonymized) url.searchParams.set('anonymized', 'true') const r = await fetch(url.toString()) if (!r.ok) throw new Error(`HTTP ${r.status}`) setData(await r.json()) } catch (e: any) { setError(e.message || String(e)) } finally { setLoading(false) } } useEffect(() => { fetchData() }, []) return (

Branchen-Benchmark-Cockpit

DAX-Konzern-Vergleich auf Basis aller bisher gepruefter Sites. Mit Anonymize-Toggle fuer Wirtschaftspruefer-Demos.

{/* Filter-Leiste */}
setSites(e.target.value)} placeholder="Volkswagen,BMW,Mercedes-Benz" className="w-full px-3 py-2 border rounded text-sm font-mono" />
{PRESET_GROUPS.map(p => ( ))}
{error && (
Fehler: {error}
)} {/* Summary-KPIs */} {data?.summary && (
60 ? 'warn' : 'ok'} />
)} {/* Vergleichstabelle */} {data?.kpis && data.kpis.length > 0 ? (
{data.kpis.map((k, i) => ( ))}
Site Score Vendors US% Drittland% Cookies Browser Cookie-Doc kB Banner Provider Banner-Verstöße Saving € Jahr Daten-Qualität Captured
{k.site_label}
{k.check_id}
= 80 ? 'text-green-700' : k.compliance_score >= 60 ? 'text-amber-700' : 'text-red-700' }`}> {k.compliance_score ?? '—'} {k.vendors_total} 60 ? 'text-red-700 font-semibold' : ''}`}> {k.us_pct}% 70 ? 'text-red-700' : ''}`}> {k.non_eu_pct}% {k.cookies_in_browser} {Math.round(k.cookie_doc_chars / 1000)}k {k.banner_detected ? '✓' : '✗'} {k.banner_provider || '—'} {k.banner_violations || 0} {k.saving_high_eur ? `${(k.saving_high_eur/1000).toFixed(0)}k` : '—'} = 70 ? 'text-green-700' : k.data_quality_pct >= 40 ? 'text-amber-700' : 'text-red-700' }`}> {k.data_quality_pct}% {k.captured_at?.substring(0, 16).replace('T', ' ')}
) : !loading && (
Keine Snapshots gefunden — Filter anpassen oder einen Audit-Lauf starten.
)}
Big-4-Hinweis: Mit Anonymize-Toggle koennen wir den kompletten Branchen-Cut zeigen ohne Hersteller-Namen zu nennen (z.B. "OEM 3 hat 78% US-Vendor-Anteil"). Damit ist die Daten- Hoheit bei BreakPilot und Big 4 sieht den Mehrwert ohne dass Wettbewerber-Vergleiche extern werden.
) } function Kpi({ label, value, tone = 'neutral' }: { label: string; value: any; tone?: 'ok' | 'warn' | 'bad' | 'neutral' }) { const colors: Record = { ok: 'text-green-700 bg-green-50 border-green-200', warn: 'text-amber-700 bg-amber-50 border-amber-200', bad: 'text-red-700 bg-red-50 border-red-200', neutral: 'text-gray-700 bg-white border-gray-200', } return (
{label}
{value}
) }