Adds an auditor-facing view of the IACE engine: a clickable 10-stage
pipeline flow (Grenzen-Formular → ParseNarrative → Pattern-Gates →
Relevanz → Caps → Gefährdungen → Maßnahmen → Risiko → Normen → Matrix),
plus live library counts, the data-source/license register (incl. the
DIN/Beuth + DGUV exclusions), and the norm-matching logic that reconciles
DIN/ISO/OSHA machine-type vocabulary via canonicalMachineType folding.
Backend: BuildArchitecture() with LIVE counts so the diagram can never
drift; GET /iace/architecture; collectAllNorms() extracted from
SuggestNorms as the single source of truth for the norm-library count.
Frontend: useArchitecture hook + page + new IACE nav tab.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Logic:"patternMatches: MachineType ∧ Required-Component-Tags ∧ Required-Energy-Tags ∧ Lifecycle ∧ Operational-States. Capability-Domain-Gates (dom_*) verhindern Cross-Domänen-Leaks (z. B. Schwimmbad-Muster feuert nicht für eine Presse). Default-open, wenn ein Gate-Input leer ist.",
Logic:"Nur Maßnahmen, deren Kategorie zur Gefährdung passt (isCategoryCompatible). Ohne passende Maßnahme ⇒ 0 Maßnahmen + Coverage-Gap (ehrlich, statt Unsinn).",
DataSource:"measures_library*.go",
Example:"Sharp-edge-Gefährdung ⇒ keine „Rotation vermeiden“-Maßnahme.",
Logic:"EstimateSeverity/Frequency/ProbabilityW/AvoidabilityP → R = S×(F+W+P), Band + Bereich (±1 je validierter Genauigkeit) + Konfidenz (Verletzungsmechanismus eindeutig?). W verankert am ESAW-Kontaktmodus-Ranking; eigenes Modell, KEINE Norm-Tabelle.",
DataSource:"risk_estimation.go + risk_data_sources.go (ESAW, CC BY 4.0)",
Logic:"SuggestNorms: C-Normen exakt per Maschinentyp-FAMILIE (canonicalMachineType: welding_machine→welding); B-Normen per Gefährdungskategorie/Tags; A-Normen gelten immer. Normen werden nur referenziert, Tabellen nie reproduziert.",
Logic:"BuildRiskMatrix aggregiert je Zelle; Benchmark vergleicht Tool-S/F/W/P + Fine-Kinney gegen Fachmann-GT (Übereinstimmung within±1, Rang-Konkordanz).",
DataSource:"risk_matrix.go + risk_benchmark.go",
Example:"Kistenhub vs. eigene GT: S±1 94 %, Ranking 86 %.",
},
},
Libraries:[]ArchLibrary{
{Name:"Hazard-Pattern-Bibliothek",Count:len(AllPatterns()),SourceFile:"hazard_patterns_*.go",Description:"Gefährdungsmuster mit Gates (MachineType/Tags/Energy/Lifecycle) + Szenario/Trigger/Harm/Zone."},
{Name:"Maßnahmen-Bibliothek",Count:len(GetProtectiveMeasureLibrary()),SourceFile:"measures_library*.go",Description:"Schutzmaßnahmen mit Reduktionstyp + Norm-Referenzen, kategorie-gefiltert."},
{Name:"Normen-Bibliothek (A/B/C)",Count:len(collectAllNorms()),SourceFile:"norms_library*.go",Description:"A-/B-/C-Normen mit Maschinentypen, Gefährdungskategorien und Tags."},
{Name:"Komponenten-Bibliothek",Count:len(GetComponentLibrary()),SourceFile:"component_library.go",Description:"Bauteiltypen mit Capability-Tags für das Pattern-Gating."},
{Name:"Energiequellen",Count:len(GetEnergySources()),SourceFile:"component_library.go",Description:"Energiearten (elektrisch/pneumatisch/hydraulisch …) für Energie-Gates."},
{Name:"Maschinentyp-Vokabular",Count:len(MachineTypeVocabulary()),SourceFile:"machine_types.go",Description:"Kanonische Dropdown-Maschinentypen, auf die Patterns gaten."},
{Name:"Domänen-Capability-Gates",Count:distinctDomainGates(),SourceFile:"pattern_domain_gates.go",Description:"dom_*-Tags, die domänenspezifische Muster auf ihre echte Maschine begrenzen (Leak-Schutz)."},
{Name:"Kontaktmodus-Tiers",Count:len(contactModeTable),SourceFile:"risk_estimation.go",Description:"Verletzungsmechanismen mit W/P/S-Tiers (ESAW-verankert, GT-kalibriert)."},
{Name:"Kontaktmodus-Evidenz",Count:len(contactModeEvidence),SourceFile:"risk_data_sources.go",Description:"Belegte öffentliche Statistik-Quoten (ESAW) als Zitat-/Audit-Schicht."},
},
DataSources:[]ArchDataSource{
{Name:"Eurostat ESAW (Kontaktmodus-Unfallstatistik)",License:"CC BY 4.0",Usage:"Anker für Wahrscheinlichkeits-Tiers (W) + zitierbare Quoten",Status:"verwendet"},
{Name:"UK HSE (RIDDOR)",License:"Open Government Licence v3",Usage:"Zulässige Ergänzung (Attribution)",Status:"verwendet"},
{Name:"DGUV-Statistik",License:"nur redaktionell, keine Bearbeitung",Usage:"—",Status:"ausgeschlossen"},
{Name:"DIN/Beuth/ISO/IEC Risikograph-Tabellen",License:"urheberrechtlich",Usage:"Nur als Referenz genannt, NIE reproduziert/re-implementiert",Status:"ausgeschlossen"},
},
NormMatching:[]string{
"C-Normen (maschinenspezifisch): Match nur über die kanonische Maschinentyp-FAMILIE — `canonicalMachineType` faltet das feingranulare Normen-Vokabular (455 Keys: welding_machine, band_saw, mobile_crane …) auf die 68 Dropdown-Keys. Ohne Familien-Match wird die C-Norm verworfen (kein Tag/Kategorie-Fallback → keine Fremd-Domänen-Normen).",
"B-Normen (gefährdungsspezifisch): Match über Gefährdungskategorie und Komponenten-/Energie-Tags.",
"A-Normen (Grundnormen): gelten immer (z. B. EN ISO 12100).",
"DIN/ISO/OSHA-Versöhnung: Normen tragen teils OSHA-/ISO-/DIN-nahe Maschinen-Keys; die Familien-Faltung sorgt dafür, dass z. B. eine „welding_machine“-Norm für eine „welding“-Maschine matched.",
"Lizenz-Leitplanke: Norm-Tabellen/Risikographen werden NIE reproduziert — nur Norm-Referenzen ausgegeben.",
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.