it-praxisportal/assets/ihk_tools/purdue_trainer.js
Alex Mueller b67fae4df3 feat(ihk): add complete AP2 courses for FIAE, FIDP, and FIDV (ZPA 2. Auflage)
- Added ihk_ap2_fiae (Anwendungsentwicklung: 12 modules, 4 tracks, Clean Architecture, GoF, UML 2.5, SOLID, O-Notation, 80h-Project guide)
- Added ihk_ap2_fidp (Daten- & Prozessanalyse: 12 modules, 4 tracks, BPMN 2.0, ETL/CDC, Star Schema, ML-Evaluation, interactive confusion matrix calculator, 40h-Project guide)
- Added ihk_ap2_fidv (Digitale Vernetzung: 12 modules, 4 tracks, CPS/RAMI 4.0, IO-Link, Profinet, TSN, OPC UA/MQTT, 5G Campus, IEC 62443, interactive Purdue trainer, 40h-Project guide)
- Expanded authentic question bank to 207 questions with official ZPA expectation horizons
- Registered all courses in courses_manifest.js, it_ausbildungen_manifest.js, server.py routes, and dashboard.html with button-only navigation
2026-09-14 21:49:29 +02:00

76 lines
3.9 KiB
JavaScript

/**
* Interaktiver Purdue-Referenzmodell & OT-Zonen-Trainer für FIDV
* IHK ZPA Nord-West AP2
*/
(function() {
function renderPurdueTrainer(containerId) {
const container = document.getElementById(containerId);
if (!container) return;
const items = [
{ name: "PT100 Temperaturfühler & Drucktransmitter", level: "0", hint: "Physikalischer Prozess / Sensorik & Aktorik" },
{ name: "Siemens S7-1500 SPS & Frequenzumrichter", level: "1", hint: "Basis-Steuerung (Direct Control)" },
{ name: "KTP700 HMI-Touchpanel & Bedienstation", level: "2", hint: "Bereichsbedienung & Monitoring" },
{ name: "SCADA-Server & Manufacturing Execution System (MES)", level: "3", hint: "Betriebsleitebene / Fertigungssteuerung" },
{ name: "Historian-Spiegel & Jump Host (Fernwartung)", level: "3.5", hint: "Industrial DMZ (Puffer zwischen IT und OT)" },
{ name: "SAP ERP & Active Directory der Verwaltung", level: "4", hint: "Enterprise IT / Unternehmensebene" }
];
container.innerHTML = `
<div style="background: #0f172a; border: 1px solid #334155; border-radius: 8px; padding: 20px; color: #f8fafc;">
<h4 style="color: #38bdf8; margin-top: 0; margin-bottom: 12px;">🏭 Interaktiver Purdue-Modell & OT-Zonen Trainer (FIDV)</h4>
<p style="color: #94a3b8; font-size: 0.9rem; margin-bottom: 16px;">
Ordnen Sie die Komponenten den korrekten Purdue-Ebenen nach IEC 62443 / ANSI/ISA-95 zu:
</p>
<div id="purdue_items" style="display: flex; flex-direction: column; gap: 10px; margin-bottom: 16px;">
${items.map((item, idx) => `
<div style="display: flex; justify-content: space-between; align-items: center; background: #1e293b; padding: 10px 14px; border-radius: 6px;">
<span style="font-size: 0.9rem; color: #cbd5e1;">${item.name}</span>
<select id="purdue_sel_${idx}" class="ihk-select" style="padding: 6px 10px; border-radius: 4px; background: #0f172a; color: #f8fafc; border: 1px solid #475569;">
<option value="">-- Ebene wählen --</option>
<option value="0">Level 0: Physikalischer Prozess</option>
<option value="1">Level 1: Basis-Steuerung (SPS)</option>
<option value="2">Level 2: Bereichsbedienung (HMI)</option>
<option value="3">Level 3: Leitebene (MES/SCADA)</option>
<option value="3.5">Level 3.5: Industrial DMZ (IDMZ)</option>
<option value="4">Level 4: Enterprise IT (ERP)</option>
</select>
</div>
`).join('')}
</div>
<div style="display: flex; gap: 10px; align-items: center;">
<button id="purdue_check_btn" class="ihk-btn ihk-btn-primary" style="padding: 8px 16px;">Ergebnis prüfen</button>
<span id="purdue_feedback" style="font-size: 0.9rem; font-weight: 600;"></span>
</div>
</div>
`;
document.getElementById('purdue_check_btn').addEventListener('click', () => {
let correct = 0;
items.forEach((item, idx) => {
const sel = document.getElementById(`purdue_sel_${idx}`);
if (sel.value === item.level) {
sel.style.borderColor = '#22c55e';
correct++;
} else {
sel.style.borderColor = '#ef4444';
}
});
const fb = document.getElementById('purdue_feedback');
if (correct === items.length) {
fb.style.color = '#4ade80';
fb.textContent = `🎉 Perfekt! Alle ${correct}/${items.length} Ebenen korrekt nach IEC 62443 zugeordnet.`;
} else {
fb.style.color = '#f87171';
fb.textContent = `${correct}/${items.length} richtig. Prüfen Sie die rot markierten Ebenen.`;
}
});
}
window.renderPurdueTrainer = renderPurdueTrainer;
document.addEventListener('DOMContentLoaded', () => {
if (document.getElementById('purdue-trainer-app')) {
renderPurdueTrainer('purdue-trainer-app');
}
});
})();