import { type UseCaseRow, type CorpusOverview, licenseTierBadgeClass, commercialBadgeClass, groupUseCases, } from './_helpers' const BACKEND_URL = process.env.COMPLIANCE_BACKEND_URL || 'http://backend-compliance:8002' export const dynamic = 'force-dynamic' async function getData(): Promise<{ useCases: UseCaseRow[] corpus: CorpusOverview | null }> { try { const [ucRes, corpusRes] = await Promise.all([ fetch(`${BACKEND_URL}/api/compliance/v1/controls/use-cases`, { cache: 'no-store', }), fetch(`${BACKEND_URL}/api/compliance/v1/controls/corpus`, { cache: 'no-store', }), ]) return { useCases: ucRes.ok ? await ucRes.json() : [], corpus: corpusRes.ok ? await corpusRes.json() : null, } } catch { return { useCases: [], corpus: null } } } function Stat({ label, value }: { label: string; value: string | number }) { return (
{value}
{label}
) } export default async function CoveragePage() { const { useCases, corpus } = await getData() const groups = groupUseCases(useCases) const totalRelevant = useCases.reduce((s, u) => s + u.atom_relevant, 0) const totalAtoms = useCases.reduce((s, u) => s + u.atom_total, 0) return (

Compliance-Abdeckung

Alle ableitbaren Use Cases und alle Quell-Dokumente im Korpus inkl. Lizenz — damit kein Thema und keine Quelle vergessen wird.

{corpus?.license_summary?.length ? (

Lizenz-Verteilung

{corpus.license_summary.map((l) => (
Tier {l.license_rule ?? '?'} {l.label} {l.atom_count.toLocaleString('de-DE')}
))}
) : null}

Use Cases

{groups.map((g) => (

{g.label} ({g.rows.length})

{g.rows.map((u) => ( ))}
Use Case Key relevant klassifiziert Quellen
{u.label} {u.key} {u.atom_relevant.toLocaleString('de-DE')} {u.atom_total.toLocaleString('de-DE')} {u.regulations.slice(0, 4).join(', ')}
))}

Korpus-Dokumente ({corpus?.documents.length ?? 0})

Quell-Regulierung × Lizenz-Tier × Anzahl Pflichten × gemappter Use Case.

{(corpus?.documents ?? []).map((d) => ( ))}
Dokument / Quelle Lizenz Pflichten Use Case
{d.source_regulation} Tier {d.license_rule ?? '?'} {d.atom_count.toLocaleString('de-DE')} {d.use_case ?? — ungemappt}
{corpus?.license_catalog?.length ? (

Lizenz-Katalog ({corpus.license_catalog.length} kuratierte Quellen)

Detaillierte Nutzungsrechte je kuratierter Quelle (kommerzielle Nutzung, Auslieferung im Produkt).

{corpus.license_catalog.map((c) => ( ))}
Quelle Herausgeber Lizenz kommerziell im Produkt
{c.terms_url ? ( {c.title} ) : ( c.title )} {c.publisher ?? '—'} {c.license_name ?? c.license_id ?? '—'} {c.commercial_use ?? 'unbekannt'} {c.ship_in_product ? 'ja' : 'nein'}
) : null}
) }