package iace

// GetMandatoryNormMeasures returns protective measures that are REQUIRED
// by specific harmonized standards. These are not optional risk reductions
// but mandatory requirements that must be implemented when the referenced
// norm is applied. Deviating from these requires the manufacturer to
// independently prove equivalent safety (loss of presumption of conformity).
func GetMandatoryNormMeasures() []ProtectiveMeasureEntry {
	return []ProtectiveMeasureEntry{
		// ── Pressen (EN 692, EN 693, ISO 16092) ─────────────────────
		{ID: "MN001", ReductionType: "protective", SubType: "safety_control", Name: "Zweihandschaltung Typ IIIC", Description: "Zweihandschaltung nach EN 574 Typ IIIC fuer Pressen mit Handbeschickung.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN 692 — Sicherheit mechanische Pressen", NormReferences: []string{"EN 692", "EN 574"}},
		{ID: "MN002", ReductionType: "protective", SubType: "safety_control", Name: "Stoesselabsturzsicherung", Description: "Mechanische oder hydraulische Stoesselabsturzsicherung bei vertikalen Pressen.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN 693 — Sicherheit hydraulische Pressen", NormReferences: []string{"EN 693", "EN 692"}},
		{ID: "MN003", ReductionType: "protective", SubType: "movable_guard", Name: "Schutztuere mit Zuhaltung (Presse)", Description: "Bewegliche trennende Schutzeinrichtung mit Zuhaltung am Werkzeugeinbauraum.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN 692 — Sicherheit mechanische Pressen", NormReferences: []string{"EN 692", "ISO 14119"}},

		// ── Roboter/Cobot (ISO 10218, ISO/TS 15066) ─────────────────
		{ID: "MN004", ReductionType: "protective", SubType: "safety_control", Name: "Kraft-/Geschwindigkeitsbegrenzung Cobot", Description: "Begrenzung von Kontaktkraft und TCP-Geschwindigkeit gemaess ISO/TS 15066 Tabelle A.2.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "ISO/TS 15066 — Kraft-/Druckgrenzwerte Cobot", NormReferences: []string{"ISO/TS 15066", "ISO 10218-1"}},
		{ID: "MN005", ReductionType: "protective", SubType: "safety_control", Name: "Sicherheitsbewerteter Stopp (Roboter)", Description: "Sicherheitsbewerteter ueberwachter Stopp bei Personeneintritt in den Arbeitsraum.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "ISO 10218-1 — Geschwindigkeitsbegrenzung Roboter", NormReferences: []string{"ISO 10218-1", "ISO 10218-2"}},
		{ID: "MN006", ReductionType: "protective", SubType: "electro_sensitive", Name: "Sicherheitsscanner Cobot-Arbeitsraum", Description: "Optoelektronische Raumüberwachung fuer Geschwindigkeitsreduzierung bei Annaeherung.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "ISO 10218-2 — Kollaborativer Betrieb", NormReferences: []string{"ISO 10218-2", "IEC 61496-3"}},

		// ── Aufzuege (EN 81-20) ──────────────────────────────────────
		{ID: "MN007", ReductionType: "protective", SubType: "safety_control", Name: "Fangvorrichtung Aufzug", Description: "Mechanische Fangvorrichtung die den Fahrkorb bei Seilbruch oder Uebergeschwindigkeit stoppt.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN 81-20 — Sicherheit Aufzuege", NormReferences: []string{"EN 81-20"}},
		{ID: "MN008", ReductionType: "protective", SubType: "safety_control", Name: "Geschwindigkeitsbegrenzer Aufzug", Description: "Geschwindigkeitsbegrenzer der bei Uebergeschwindigkeit die Fangvorrichtung ausloest.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN 81-20 — Sicherheit Aufzuege", NormReferences: []string{"EN 81-20"}},
		{ID: "MN009", ReductionType: "protective", SubType: "safety_control", Name: "Puffer im Aufzugsschacht", Description: "Energieabsorbierende Puffer am Schachtboden und -decke als letzte Sicherung.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN 81-20 — Sicherheit Aufzuege", NormReferences: []string{"EN 81-20"}},

		// ── Flurfoerderzeuge (EN 1726, EN ISO 3691) ──────────────────
		{ID: "MN010", ReductionType: "protective", SubType: "safety_control", Name: "Redundante Lastaufnahme (Gabelstapler)", Description: "Zweifache Lastaufhaengung: Jede Kette/Gurt muss einzeln die volle Last tragen koennen.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN 1726-1 — Sicherheit Flurfoerderzeuge", NormReferences: []string{"EN 1726-1", "EN ISO 3691-1"}},
		{ID: "MN011", ReductionType: "protective", SubType: "safety_control", Name: "Kippschutz Gabelstapler", Description: "Standsicherheitsnachweis bei max. Nennlast und maximaler Hubhoehe.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN 1726-1 — Sicherheit Flurfoerderzeuge", NormReferences: []string{"EN 1726-1"}},

		// ── Holzbearbeitung (EN 1870, EN 848) ────────────────────────
		{ID: "MN012", ReductionType: "protective", SubType: "fixed_guard", Name: "Spaltkeil Kreissaege", Description: "Spaltkeil hinter dem Saegeblatt verhindert Rueckschlag.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN 1870-1 — Sicherheit Kreissaegen", NormReferences: []string{"EN 1870-1"}},
		{ID: "MN013", ReductionType: "protective", SubType: "fixed_guard", Name: "Saegeblattschutzhaube", Description: "Schutzhaube ueber dem nicht arbeitenden Teil des Saegeblatts.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN 1870-1 — Sicherheit Kreissaegen", NormReferences: []string{"EN 1870-1"}},

		// ── Krane (EN 15011, EN 13000) ───────────────────────────────
		{ID: "MN014", ReductionType: "protective", SubType: "safety_control", Name: "Ueberlastsicherung Kran", Description: "Automatische Lastmomentbegrenzung die Hub bei Ueberschreitung der Nennlast sperrt.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN 15011 — Sicherheit Brueckenkrane", NormReferences: []string{"EN 15011", "EN 13000"}},
		{ID: "MN015", ReductionType: "protective", SubType: "safety_control", Name: "Endschalter Kran (Hub/Fahrt)", Description: "Begrenzungsschalter fuer Hubbewegung, Katzfahrt und Kranfahrt.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN 15011 — Sicherheit Brueckenkrane", NormReferences: []string{"EN 15011"}},

		// ── Allgemein (ISO 13850, EN 60204-1) ────────────────────────
		{ID: "MN016", ReductionType: "protective", SubType: "emergency_stop", Name: "Not-Halt Kategorie 0 oder 1", Description: "Not-Halt-Einrichtung an jeder Bedienstelle, gut sichtbar und erreichbar.", HazardCategory: "safety_function", Mandatory: true, MandatoryNorm: "ISO 13850 — Not-Halt-Gestaltung", NormReferences: []string{"ISO 13850", "EN 60204-1"}},
		{ID: "MN017", ReductionType: "protective", SubType: "electrical_protection", Name: "Hauptschalter absperrbar", Description: "Hauptschalter muss in Aus-Stellung abschliessbar sein (Lockout).", HazardCategory: "electrical", Mandatory: true, MandatoryNorm: "EN 60204-1 — Trennen und Ausschalten", NormReferences: []string{"EN 60204-1"}},
		{ID: "MN018", ReductionType: "protective", SubType: "electrical_protection", Name: "Schutzleiteranschluss", Description: "Alle leitfaehigen Gehaeuseteile muessen mit dem Schutzleiter verbunden sein.", HazardCategory: "electrical", Mandatory: true, MandatoryNorm: "EN 60204-1 — Steuerstromkreise", NormReferences: []string{"EN 60204-1"}},

		// ── AGV (EN ISO 3691-4) ──────────────────────────────────────
		{ID: "MN019", ReductionType: "protective", SubType: "safety_control", Name: "Personenerkennung AGV", Description: "Sicherheitssensor (Laserscanner) zur Personenerkennung im Fahrweg des AGV.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN ISO 3691-4 — Fahrerlose Transportsysteme", NormReferences: []string{"EN ISO 3691-4"}},
		{ID: "MN020", ReductionType: "protective", SubType: "safety_control", Name: "Notbremseinrichtung AGV", Description: "Automatische Bremsung bei Hinderniserkennung, manueller Not-Halt am Fahrzeug.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN ISO 3691-4 — Fahrerlose Transportsysteme", NormReferences: []string{"EN ISO 3691-4"}},

		// ── Kettensaege (ISO 11681) ──────────────────────────────────
		{ID: "MN021", ReductionType: "protective", SubType: "safety_control", Name: "Kettenbremse (Kettensaege)", Description: "Kettenbremse die bei Rueckschlag die Kette innerhalb von 0,12s stoppt.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "ISO 11681-1 — Kettensaegen Vibrationsschutz", NormReferences: []string{"ISO 11681-1"}},

		// ── Fahrtreppen (EN 115-1) ───────────────────────────────────
		{ID: "MN022", ReductionType: "protective", SubType: "safety_control", Name: "Kammplatte Fahrtreppe", Description: "Kammplatten am Zu- und Abgang verhindern Einklemmen von Schuhwerk und Kleidung.", HazardCategory: "mechanical", Mandatory: true, MandatoryNorm: "EN 115-1 — Sicherheit Fahrtreppen", NormReferences: []string{"EN 115-1"}},

		// ── Sicherheitsfunktionen allgemein (ISO 13849-1) ────────────
		{ID: "MN023", ReductionType: "protective", SubType: "safety_control", Name: "Sicherheitsfunktion PL/SIL-konform", Description: "Jede Sicherheitsfunktion muss das per Risikograph ermittelte PL/SIL nachweislich erreichen.", HazardCategory: "safety_function", Mandatory: true, MandatoryNorm: "ISO 13849-1 — Gestaltungsleitsaetze", NormReferences: []string{"ISO 13849-1", "IEC 62061"}},

		// ── Druckgeraete (EN ISO 4126-1) ─────────────────────────────
		{ID: "MN024", ReductionType: "protective", SubType: "fluid_protection", Name: "Sicherheitsventil Druckbehaelter", Description: "Jeder Druckbehaelter muss mit einem Sicherheitsventil gegen unzulaessigen Ueberdruck gesichert sein.", HazardCategory: "pneumatic_hydraulic", Mandatory: true, MandatoryNorm: "EN ISO 4126-1 — Sicherheitsventile", NormReferences: []string{"EN ISO 4126-1"}},

		// ── Schweissen (EN 60974-1) ──────────────────────────────────
		{ID: "MN025", ReductionType: "protective", SubType: "electrical_protection", Name: "Leerlaufspannungsbegrenzung Schweissgeraet", Description: "Leerlaufspannung bei Lichtbogenhandschweissgeraeten max. 113V Spitze (AC) bzw. 113V (DC).", HazardCategory: "electrical", Mandatory: true, MandatoryNorm: "EN 60974-1 — Schweissgeraete Isolierung", NormReferences: []string{"EN 60974-1"}},
	}
}
