'use client' import { useState } from 'react' import { useArchitecture, type ArchStage } from './_hooks/useArchitecture' export default function ArchitekturPage() { const { data, loading } = useArchitecture() const [open, setOpen] = useState('grenzen') if (loading) { return
Lade Engine-Architektur…
} if (!data) { return
Architektur konnte nicht geladen werden.
} return (

Architektur & Datenfluss

Nachvollziehbar für Auditoren: woher jede Information stammt und{' '} wie die Risikobeurteilung zustande kommt — jede Station, jedes Gate, jede Bibliothek und Datenquelle, in Reihenfolge. Die Zahlen sind live aus der laufenden Engine.

{/* Pipeline flow */}

Deterministische Pipeline

{data.stages.map((s, i) => ( setOpen(open === s.id ? null : s.id)} /> ))}
{/* Libraries */}

Wissensbasen (Live-Bestand)

{data.libraries.map((l) => (
{l.name} {l.count.toLocaleString('de-DE')}

{l.description}

{l.source_file}
))}
{/* Norm matching */}

Normen-Matching (DIN / ISO / OSHA)

    {data.norm_matching.map((n, i) => (
  • ))}
{/* Data sources & licenses */}

Datenquellen & Lizenzen

{data.data_sources.map((d) => ( ))}
Quelle Lizenz Nutzung Status
{d.name} {d.license} {d.usage} {d.status}
{data.evidence.length > 0 && (

Belegte Kontaktmodus-Quoten (ESAW):{' '} {data.evidence.map((e) => `${e.label} ${e.stat}`).join(' · ')} — {data.evidence[0]?.attribution}.

)}
) } function StageRow({ stage, last, open, onToggle, }: { stage: ArchStage last: boolean open: boolean onToggle: () => void }) { return (
{!last &&
}
) } function Field({ label, value, mono }: { label: string; value: string; mono?: boolean }) { return (
{label}
{value}
) } // Renders `inline code` (single backticks) as — the norm-matching bullets // use backticks for function/identifier names. function inlineCode(text: string): string { const escaped = text.replace(/&/g, '&').replace(//g, '>') return escaped.replace(/`([^`]+)`/g, '$1') }