#!/usr/bin/env python3
"""Complete PPTX generator for T03-T07. Run after gen_pptx.py for T01-T02."""
import os,sys
sys.path.insert(0, '/root/projects/jg/2026-PM-eLearning')
from gen_pptx import *

def gen_T03():
    prs=np(); s=lambda:asl(prs)
    cov(s(),"Brandbestrijding Training","Theorie en praktijk adequaat brandbestrijdingshandelen\nPhoenix Metals B.V.","TR-301-03 | v1.1 | April 2026")
    inf(s(),"📋 Documentinformatie",["Project: Phoenix Metals B.V. — VMS","Training: Brandbestrijding | TR-301-03 | v1.1","Auteur: JvG Consultancy | April 2026 | Definitief","Doelgroep: Alle medewerkers","Doel: Brandklassen, blusmiddelen, PM-specifieke branden"])
    bul(s(),"🎯 Leerdoelen",["Branddriehoek en brandvijfhoek uitleggen","6 brandklassen (A-F) met juiste blusmiddelen","Welke blusser bij welk type brand","PM-specifieke brandrisico's (metaal, stof, chemisch, elektrisch)","Wanneer NIET blussen en evacueren","Brandslanghaspel bedienen"])
    bul(s(),"❓ Waarom Brandbestrijding?",["Brand = meest voorkomende nood in industrie","94% bedrijven na grote brand → failliet (RVO)","PM: H₂SO₄ reactief, vanadium metaalbrand, stof explosie","Snel ingrijpen = verschil tussen bijna-ongeluk en catastrofe","BHV'ers moeten brandbestrijding beheersen"],None,"🔥")
    flw(s(),"🔺 Branddriehoek",["Brandstof","+ Zuurstof","+ Ontsteking","= BRAND"])
    tbl(s(),"🔺 Blusstrategieën",["Factor","Wegnemen met","Voorbeeld PM"],[["Brandstof","Afsluiten/verwijderen","H₂SO₄-lek dichten"],["Zuurstof","Verdringen/afsluiten","CO₂-blusser"],["Warmte","Koelen","Water (NIET bij vet!)"],["Kettingreactie","Remmen","Poederblusser"]])
    tbl(s(),"🏷️ 6 Brandklassen",["Klasse","Omschrijving","PM Voorbeeld"],[["A","Vaste stoffen","Kantoor, verpakking"],["B","Vloeistoffen","H₂SO₄, smeermiddelen"],["C","Gassen","Gasflessen"],["D","Metalen","Vanadium (metaalbrand)"],["E","Elektrisch","Schakelkasten"],["F","Bereidingsoliën","Kantine keuken"]])
    bul(s(),"🏷️ Klasse D — METAALBRAND PM",["Vanadium brandt als fijn verdeeld stof","NIET met water! (waterstofreactie → explosie)","Blusmiddel: Metaalbrandpoeder (zand, grafiet)","PM: St-3 staalslak bevat brandbare metalen","Casus: Mg-brand D 2021 — water → explosie"])
    bul(s(),"🏷️ B/E — Chemisch & Elektrisch PM",["H₂SO₄-brand: NIET met water → schuim/poeder","Elektrisch: Eerst spanningsvrij → CO₂/poeder","NOOIT water bij elektrische brand!","PM: Transformator → CO₂ binnen 15m","Casus: Chemische brand NL 2022 — water verergerde"])
    tbl(s(),"🧯 Blusmiddelen per Klasse",["Middel","Geschikt","Niet voor","PM Locatie"],[["Poeder ABC","A,B,C,E","D,F","Hal/opslag"],["CO₂","B,E","A,D,F","Schakelkasten"],["Schuim","A,B","D,E,F","H₂SO₄-opslag"],["Water","A","B,D,E,F","Kantoor"],["Zand/grafiet","D","A,B,F","Verwerking"],["Branddeken","Beginnend","D,E","Elke locatie"]])
    bul(s(),"🧯 Poederblusser — Details",["ABC-poeder: Universeel (niet metaalbrand)","Bereik: 3-5m, Inhoud: 6 kg standaard","Pin eruit → Slang richten → Hendel knijpen","Zwaaiend sproeien over brandhaard","Valkuil: Stofwolk belemmert zicht!"])
    bul(s(),"🧯 CO₂-blusser — Details",["Klasse B en E (vloeistoffen, elektrisch)","Geen residue, geen waterschade","Bereik 2-3m","NIET in besloten ruimten (verstikking!)","PM: Bij elke schakelkast"])
    bul(s(),"🧯 Schuim & Brandslanghaspel",["Schuim: Ideaal vloeistofbranden (H₂SO₄ PM)","Vormt afsluitende laag → zuurstof afgesloten","Haspel: Water — ALLEEN klasse A","PM: Haspel bij kantine/kantoor (NIET chemisch!)","Bedienen: Klep open → Afrollen → Straalpijp open"])
    bul(s(),"🚫 Wanneer NIET Blussen — EVACUEREN!",["Brand groter dan prullenbak → NIET zelf","Dichte rook → verdwalingsrisico","Brand bij gevaarlijke stoffen → specialistisch","Explosiegevaar → AFSTAND","Onbekend → NIET experimenteren","Regel: Alleen bij beginnende brand + veilige vluchtweg"])
    twc(s(),"🏭 PM Specifieke Branden","🔥 Metaalbrand V",["Klasse D","NIET water!","Metaalbrandpoeder/zand","St-3 staalslak","Evacueren bij twijfel"],"💥 Stofexplosie",["Deflagratie risico","Stof boven grens","NIET blussen","Brandweer ATEX","Preventie reiniging"])
    twc(s(),"🏭 PM Branden (2)","⚗️ Chemisch H₂SO₄",["SO₂ giftig","NIET water","Schuim/poeder","Gasmasker+PBM's","Brandweer laten"],"⚡ Elektrisch",["Spanningsvrij eerst!","CO₂/poeder","NOOIT water","Transformator CO₂","BHV beperkt"])
    tbl(s(),"📊 Blusmiddel Keuzetabel PM",["Scenario","Klasse","Blusmiddel","Waarschuwing"],[["Kantoor papier","A","Water/poeder",""],["H₂SO₄ lekkage","B","Schuim/poeder","NIET water!"],["Vanadium metaal","D","Zand/metaalpoeder","NIET water!"],["Schakelkast","E","CO₂","Spanningsvrij"],["Kantine vet","F","Branddeken/schuim","NIET water!"],["Stofexplosie","—","Evacueren!","Brandweer bellen"]])
    bul(s(),"💧 Brandslanghaspel PM",["Locatie: Kantine, kantoor, gangen","1: Klep openen 2: Slang afrollen 3: Straalpijp open","Stralen op haard, niet op vlammen","Na gebruik volledig leeglopen","PM: Jaarlijks testen + 4-jaarlijks erkend"])
    bul(s(),"🔥 Casuïstiek",["Chemelot 2022: Verkeerd blusmiddel → 2 gewond","DSM 2020: Geen ATEX-zonering → 1 dode","Lubrizol 2019: Bluswater verontreinigde rivier","Les: Weten WELK middel bij WELKE brand","Les: Bij twijfel evacueren + 112"])
    bul(s(),"📋 Praktijkoefeningen",["Poederblusser op oefenvuur","CO₂ bij elektrisch scenario","Haspel afrollen+bedienen","Branddeken op brandende kleding","Keuzeoefening: Welk middel?","Jaarlijks herhalen BHV'ers"])
    smy(s(),"📋 Samenvatting",["Branddriehoek: Brandstof+Zuurstof+Warmte","6 klassen: A(vast) B(vloeistof) C(gas) D(metaal) E(elektrisch) F(vet)","PM: Vanadium=D, H₂SO₄=B, Elektrisch=E, Stof=evacueren","Verkeerd blusmiddel = verergering","NIET blussen: groot, rook, gevaarlijk, twijfel","Haspel: alleen A, NIET chemisch"])
    smy(s(),"📋 Valkuillen",["Water+H₂SO₄ → exotherm+SO₂","Water+metaal → explosie","Water+elektrisch → elektrocutie","Poeder+stof → zicht nul","Zelf blussen groot → levensgevaar","Niet gecheckte middelen → defect"])
    qz(s(),"📋 Kennistoets",["Noem branddriehoek-zijden","Brandklasse vanadium?","Blusmiddel bij H₂SO₄-brand?","Geen water bij elektrisch — waarom?","Vetbrand = welke klasse?","Wanneer NIET zelf blussen?","Blusmiddel metaalbrand?","Brandslanghaspel bedienen?","Verschil poeder vs CO₂?","3 PM-specifieke brandrisico's"])
    qz(s(),"📋 Scenariovragen",["A: Brand H₂SO₄-opslag. Welk blusmiddel?","B: Vonk schakelkast, vlammen. Actie?","C: Stofwolk maalinrichting+vonk. Wat doe je?"])
    rfs(s(),"📚 Bronverwijzingen",["NEN-EN 2 — Brandklassen","NEN-EN 3 — Brandblussers","Arbobesluit Art. 2.17","PGS 15:2025","SDS V₂O₅ CAS 1314-62-1","SDS H₂SO₄ CAS 7664-93-9","IFV Brandbestrijding industrie","RVO Brandpreventie","CSB diverse rapporten","NEN 4003"])
    tvr(s(),"PM_EL_T03_Brandbestrijding_Presentatie_v1.1.pptx")
    prs.save(os.path.join(OUT,"PM_EL_T03_Brandbestrijding_Presentatie_v1.1.pptx"))
    print("✅ T03 PPTX")

def gen_T04():
    prs=np(); s=lambda:asl(prs)
    cov(s(),"Evacuatieoefening Training","Procedures, routes en rollen bij evacuatie\nPhoenix Metals B.V.","TR-301-04 | v1.1 | April 2026")
    inf(s(),"📋 Documentinformatie",["Project: Phoenix Metals B.V. — VMS","Training: Evacuatieoefening | TR-301-04 | v1.1","Auteur: JvG Consultancy | April 2026","Doelgroep: Alle medewerkers + onderaannemers","Doel: Evacuatieroutes, alarmsoorten, headcount"])
    bul(s(),"🎯 Leerdoelen",["3 alarmsoorten herkennen (brand/gas/evacuatie)","Evacuatieroutes PlantOne IJmuiden en Rotterdam kennen","Verzamelpunten locaties","BHV-rollen bij evacuatie","Headcount procedure","Speciale situaties: bezoekers, beperkte mobiliteit"])
    bul(s(),"❓ Waarom Evacuatieoefening?",["Jaarlijks sterven mensen bij evacuaties door paniek","Oefening reduceert evacuatietijd met 40-60%","PM: V₂O₅-toxisch, H₂SO₄-bijtend — tijd is leven","Wettelijk: Arbobesluit eist periodieke oefening","Mensen die oefenen reageren automatisch = minder paniek"],None,"🏃")
    flw(s(),"🔔 3 Alarmsoorten",["Brandalarm\n(continue sirene)","Gasalarm\n(wisselend signaal)","Evacuatiealarm\n(lange tonen)"])
    tbl(s(),"🔔 Alarmsoorten — Details",["Alarm","Geluid","Betekenis","Actie"],[["Brand","Continue sirene (oplopend)","Brand gedetecteerd","BHV verkenning, rest gereed"],["Gas","Wisselend hoog-laag","Toxisch gas gedetecteerd","OPWINDS evacueren, geen vonken"],["Evacuatie","Lange tonen (30 sec)","Volledige evacuatie","Iedereen naar verzamelpunt"]])
    bul(s(),"🏭 PlantOne IJmuiden — Routes Begane Grond",["Hoofdingang: Glazen deuren receptie → parkeerterrein noord","Nooduitgang west: Via kantine → branddeur → buitentrap → parkeerterrein","Nooduitgang oost: Via verwerkingshal → rolpoort → laadperron noord","Alle deuren: Paniekbeslag (drukstang) → openen door druk","Fotoluminescente bordjes op ooghoogte elke 10m"])
    bul(s(),"🏭 PlantOne IJmuiden — Routes 1e Verdieping",["Trappenhuis A: Links bij trap → begane grond → uitgang west","Trappenhuis B: Rechts bij trap → begane grond → uitgang oost","GEEN lift bij alarm! (kan vastlopen bij brand)","Alternatief: Buitentraptje noordzijde (noodtrap)","Rollenspel: Oefen met verduistering (rooksimulatie)"])
    bul(s(),"🏭 Rotterdam — Routes",["Hoofduitgang: Verwerkingseenheid → havenkade oost (~100m)","Nooduitgang zuid: Via opslag → hekwerk → kade west","Specifiek: Rotterdam is vlak terrein, minder complex","Let op: Voertuigen/werktuigen op kade → veilige route","Verzamelpunt: Havenkade oost, gemarkeerd met oranje vlag"])
    tbl(s(),"📍 Verzamelpunten",["Locatie","Verzamelpunt","Afstand","Bereikbaarheid"],[["PlantOne IJmuiden","Parkeerterrein noord","~80m","Open terrein"],["PlantOne IJmuiden (alt)","Parkeerterrein zuid","~120m","Bij wind uit noord"],["Rotterdam","Havenkade oost","~100m","Open terrein"],["Rotterdam (alt)","Havenkade west","~150m","Bij wind uit oost"]])
    bul(s(),"🛡️ BHV-Rollen bij Evacuatie",["BNO-leider: Coördineert evacuatie vanaf controlepunt","BBW: Begeleidt evacuatie in rookzone (indien veilig)","BHV'ers: Controle verdiepingen, assisteren beperkte mobiliteit","Calcoordinator: Headcount bij verzamelpunt + registratie","Elke rol heeft fluorescent hesje voor zichtbaarheid"])
    bul(s(),"📋 Headcount Procedure",["Calcoordinator opent presentielijst bij verzamelpunt","Elke medewerker meldt zich persoonlijk (NIET namens een ander)","Aanwezige bezoekers/onderaannemers worden geverifieerd","Ontbrekende personen DIRECT melden aan BNO-leider","BNO beslist: Wachten (als veilig) OF doorgeven aan brandweer","NIET zelf terugkeren! Brandweer doet zoekactie"])
    bul(s(),"📞 Communicatieketen Evacuatie",["BNO-leider: Central point — ontvangt alle meldingen","Calcoordinator → rapporteert headcount aan BNO","BHV'ers rapporteren 'verdieping schoon' aan BNO","BNO beslist: All clear OF brandweer inschakelen","MD geïnformeerd via BNO (telefoonlijst)"])
    twc(s(),"👥 Speciale Situaties","👤 Bezoekers",["Gastheer/vrouw begeleidt","Calcoordinator registreert bij binnenkomst","Naamplaatje = herkenning bij headcount","Speciale instructie bij ontvangst","Evacuatie-kit bij receptie (hesjes, zaklamp)"],"♿ Beperkte Mobiliteit",["BHV'er toegewezen als buddy","Alternatieve route (gelijkvloers waar mogelijk)","Brancard beschikbaar bij BNO-punt","Vooraf registeren bij calcoordinator","Oefenen metScenario's inclusief beperking"])
    bul(s(),"👷 Onderaannemers",["Volgen dezelfde evacuatieroutes","Melden bij eigen toezichthouder bij verzamelpunt","Toezichthouder rapporteert aan calcoordinator","Taalcursus basis-instructie (Engels/Nederlands)","PM: Onderaannemers in logboek bij ingang"])
    bul(s(),"📝 Naoevaluatie",["Na ELKE oefening: evaluatie binnen 48 uur","Tijdmeting: Evacuatie moet <5 minuten (norm PM)","Punten: Communicatie, routes, headcount, speciale gevallen","Actiepunten met eigenaar + uiterste datum","MD ondertekent rapport","Verbeteringen geïmplementeerd vóór volgende oefening"])
    tbl(s(),"📅 Oefenschema",["Type","Frequentie","Duur","Doelgroep"],[["Communicatieoefening","6-maandelijks","15 min","Iedereen"],["Beknopte evacuatie","Jaarlijks","30 min","Iedereen"],["Volledige evacuatie+gas","Jaarlijks","60 min","Iedereen+BHV"],["Nacht-evacuatie","2-jaarlijks","45 min","Nachtdienst"],["Gezamenlijk met brandweer","2-jaarlijks","90 min","Crisisteam+BHV"]])
    bul(s(),"🔥 Casuïstiek Evacuatie",["Casus Grenfell Tower (2017): Blijf binnen-instructie → 72 doden","Casus KLM-gebouw (2019): Goede oefening → 0 gewonden bij brand","Les: 'Stay put' alleen als professioneel advies","Les: Oefening maakt verschil tussen paniek en geordende evacuatie","PM: Altijd evacueren bij alarm — nooit 'blijf binnen' instructie"])
    smy(s(),"📋 Samenvatting",["3 alarmsoorten: brand (continue), gas (wisselend), evacuatie (lang)","Routes PlantOne: 2 trappenhuizen + nooduitgangen per verdieping","Rotterdam: 2 uitgangen naar kade","Verzamelpunten: Parkeerterrein noord (IJmuiden), kade oost (Rotterdam)","Headcount: Calcoordinator telt, BNO beslist","Bezoekers/onderaannemers/beperkte mobiliteit: Extra aandacht"])
    qz(s(),"📋 Kennistoets",["Hoe klinkt het gasalarm?","Evacuatie PlantOne 1e verdieping: welke routes?","Verzamelpunt Rotterdam?","Wie doet de headcount?","Wat doe je als een collega ontbreekt bij count?","Hoe begeleid je een bezoeker?","Hoe vaak moet er geoefend worden?","Wat is de evacuatienorm PM?","Onderaannemers: wie rapporteert hun headcount?","Wat leer je van de Grenfell-casus?"])
    rfs(s(),"📚 Bronverwijzingen",["Arbobesluit Art. 2.16a","NEN 6089 — Nood- en vluchtroutes","NEN-EN ISO 7010 — Veiligheidsborden","PGS 15:2025","RIVM Rapporten evacuatie","Brandweer Nederland — Evacuatierichtlijn","Grenfell Tower Inquiry Report (2019)","Nibra — Brandweer academie"])
    tvr(s(),"PM_EL_T04_Evacuatieoefening_Presentatie_v1.1.pptx")
    prs.save(os.path.join(OUT,"PM_EL_T04_Evacuatieoefening_Presentatie_v1.1.pptx"))
    print("✅ T04 PPTX")

def gen_T05():
    prs=np(); s=lambda:asl(prs)
    cov(s(),"Product Hazards / MSDS Training","Veilig werken met gevaarlijke stoffen\nPhoenix Metals B.V.","TR-302-01 | v1.1 | April 2026")
    inf(s(),"📋 Documentinformatie",["Project: Phoenix Metals B.V. — VMS","Training: Product Hazards / MSDS | TR-302-01 | v1.1","Auteur: JvG Consultancy | April 2026","Doelgroep: Alle medewerkers","Doel: SDS lezen, GHS-pictogrammen, stofdossiers PM"])
    bul(s(),"🎯 Leerdoelen",["SDS-structuur 16 secties begrijpen","9 GHS-pictogrammen herkennen","H-zinnen en P-zinnen lezen","V₂O₅ dossier kennen (toxiciteit, PBM's, eerste hulp)","H₂SO₄, NaOH, Al₂(SO₄)₃ dossiers kennen","Blootstellingsroutes en eerste hulp per stof"])
    bul(s(),"❓ Waarom MSDS Training?",["PM werkt met 4 gevaarlijke stoffen dagelijks","V₂O₅: Repr. 1B, Carc. 2 — dodelijk bij inademing (H330)","Onvoldoende kennis → verkeerde PBM's → blootstelling","SDS = hét document met alle veiligheidsinfo","REACH/CLP verplicht toegang tot SDS voor alle werkers"],None,"☠️")
    tbl(s(),"📋 SDS-structuur — 16 Secties",["Sectie","Inhoud","Belang PM"],[["1","Identificatie","Stofnaam, CAS-nr, leverancier"],["2","Gevaarsidentificatie","H-zinnen, pictogrammen"],["3","Samenstelling","Chemische identiteit, verontreinigingen"],["4","Eerstehulpmaatregelen","Spoelen, arts, geen neutraliseren"],["5","Brandbestrijdingsmaatregelen","Blusmiddel, gevaren"],["6","Maatregelen bij morsen","Sorptie, ventilatie"],["7","Hanteren en opslag","Droog, afgesloten, gescheiden"],["8","Expositiebeheersing/PBM's","IAD, FFP3, handschoenen"],["9","Fysische/chemische eigenschappen","Staat, reactiviteit"],["10","Stabiliteit en reactiviteit","Incompatibel met..."],["11","Toxicologische informatie","LD50, effecten"],["12","Ecologische informatie","Gevaar voor water"],["13","Instructies voor afval","Afvalcode"],["14","Vervoerinformatie","ADR/IMDG classificatie"],["15","Wetgevingsinfo","REACH, CLP"],["16","Overige info","Datum, versie"]])
    bul(s(),"🏷️ 9 GHS-Pictogrammen",["☠️ Acute toxiciteit (dodelijk/toxisch)","💊 Gezondheidsgevaar (carcinogeen, mutageen)","🔥 Ontvlambaar","💣 Ontplofbaar","⚠️ Bijtend/huidcorrosief","⚡ Oxiderend","☁️ Gas onder druk","🌿 Milieugevaar","❓ IRWA (irriterend, narcotisch)"],None,"🏷️")
    tbl(s(),"🏷️ GHS-Pictogrammen — PM Stoffen",["Stof","Pictogrammen","H-zinnen"],[["V₂O₅","☠️ 💊","H330/H341/H361d/H372"],["H₂SO₄","⚠️","H314/H290"],["NaOH","⚠️","H314"],["Al₂(SO₄)₃","❓","H315/H319"]])
    tbl(s(),"💊 Top-20 H-zinnen",["Code","Betekenis"],[["H330","Dodelijk bij inademing"],["H314","Veroorzaakt ernstige huidbrandwonden en oogletsel"],["H315","Irriteert de huid"],["H319","Veroorzaakt ernstige oogirritatie"],["H341","Vermoedelijk genetisch schadelijk"],["H361d","Kan het ongeboren kind beschadigen"],["H372","Veroorzaakt schade organen bij langdurige blootstelling"],["H290","Kan corrosief zijn voor metalen"],["H272","Kan brand bevorderen (oxiderend)"],["H317","Kan allergische huidreactie veroorzaken"]])
    tbl(s(),"🛡️ Top-15 P-zinnen",["Code","Betekenis"],[["P260","Stof niet inademen"],["P280","Beschermende handschoenen/kleding dragen"],["P301+P330+P331","Bij inslikken: mond spoelen, GEEN braken opwekken"],["P303+P361+P353","Bij huidcontact: kleding uittrekken, spoelen met water"],["P304+P340","Bij inademing: persoon naar frisse lucht brengen"],["P305+P351+P338","Bij oogcontact: 15 min spoelen, lenzen verwijderen"],["P310","Onmiddellijk een arts raadplegen"],["P320","Specifieke behandeling dringend (zie label)"],["P363","Besmette kleding wassen voordat..."],["P405","Achter slot bewaren"]])
    # V₂O₅ dossier
    twc(s(),"☠️ V₂O₅ Dossier (CAS 1314-62-1)","⚠️ Classificatie",["Repr. 1B — Kan ongeboren kind beschadigen","Carc. 2 — Vermoedelijk kankerverwekkend","H330: Dodelijk bij inademing","H341: Vermoedelijk genetisch schadelijk","H361d: Schade vruchtbaarheid","H372: Orgaanschade langdurig"],"🛡️ PBM's & IAD",["IAD-waarde: 0,05 mg/m³","FFP3 masker VERPLICHT","Nitrilhandschoenen","Veiligheidsbril + gezichtsbeschermer","Beschermende kleding","Blootstellingsduur minimaliseren"])
    bul(s(),"☠️ V₂O₅ — Eerste Hulp & Opslag",["Inademing: Naar frisse lucht, bij symptomen arts","Huidcontact: Spoelen water+zeep, kleding uit","Oogcontact: 15 min spoelen, arts","Inslikken: Mond spoelen, NIET braken, arts","Opslag: Droog, afgesloten, gescheiden van voedsel","PM: V₂O₅ in afgesloten container, ventilatie verplicht"])
    bul(s(),"☠️ V₂O₅ — PM Specifiek",["Verwerkingslijn: Stofvorming bij malen/zegen","Gasdetectie continue monitoring","Decontaminatie-unit bij uitgang verwerking","Medische controle: Periodiek voor blootgestelde werkers","Blootstellingsregister bij HSEQ","Casus: Vanadiumwerker (Zhongbao, CN 2018) — chronische blootstelling → longfibrose"])
    twc(s(),"⚠️ H₂SO₄ Dossier (CAS 7664-93-9)","Classificatie & Risico's",["H314: Ernstige brandwonden","H290: Corrosief voor metalen","Reactief met water (exotherm!","SO₂-dampen bij verhitting","Concentratie PM: >95% (geconcentreerd)"],"PBM's & EHBO",["Zuurbestendige handschoenen (PVC)","Gezichtsbeschermer VERPLICHT","Schort zuurbestendig","Spoelen 30 min bij contact","NIET neutraliseren!","Oogspoelpost binnen 15 sec"])
    twc(s(),"⚠️ NaOH Dossier (CAS 1310-73-2)","Classificatie & Risico's",["H314: Ernstige brandwonden","Dringt dieper door dan zuren","Sterk hygroscopisch","Reageert met metalen → waterstof","Oplossing PM: 25-50%"],"PBM's & EHBO",["Basebestendige handschoenen","Gezichtsbeschermer VERPLICHT","Schort basebestendig","Spoelen 30+ min bij contact","Lang blijven spoelen (diepere penetratie)","Oogspoelpost binnen 15 sec"])
    bul(s(),"❓ Al₂(SO₄)₃ Dossier (CAS 10043-01-3)",["H315: Irriteert de huid","H319: Veroorzaakt oogirritatie","Minder gevaarlijk dan V₂O₅/H₂SO₄/NaOH","PBM's: Nitrilhandschoenen + veiligheidsbril","EHBO: Spoelen met water, bij aanhoudende irritatie arts","PM: Gebruikt als coagulant in waterzuivering"])
    bul(s(),"🔀 Blootstellingsroutes",["Inademing: V₂O₅-stof → longschade (meest kritiek bij PM)","Huidcontact: H₂SO₄/NaOH → chemische brandwonden","Oogcontact: Alle 4 stoffen → irritatie tot blindheid","Inslikken: H₂SO₄/NaOH → inwendige brandwonden","Routes bepalen welke PBM's nodig zijn!"])
    tbl(s(),"🏥 Eerste Hulp per Stof",["Stof","Inademing","Huid","Ogen","Inslikken"],[["V₂O₅","Frisse lucht, arts","Water+zeep","15 min spoelen","Mond spoelen, arts"],["H₂SO₄","Frisse lucht","30 min water","30 min spoelen","NIET braken, arts"],["NaOH","Frisse lucht","30+ min water","30+ min spoelen","NIET braken, arts"],["Al₂(SO₄)₃","Frisse lucht","Water spoelen","15 min spoelen","Water drinken, arts"]])
    bul(s(),"🔥 Casuïstiek Stoffen",["Casus Bhopal (1984): MIC-lekkage → 3800+ doden — geen SDS-toegang","Casus Tsjernobyl: Radioactieve stoffen — geen voorlichting","Casus Chemiepark (Leverkusen 2021): Chloride-lekkage — 2 doden","Les: SDS-kennis + juiste PBM's = levensreddend","PM: Elke medewerker moet weten waar SDS te vinden is"])
    smy(s(),"📋 Samenvatting",["SDS 16 secties: Van identificatie tot wetgeving","9 GHS-pictogrammen herkennen","H-zinnen = gevaren, P-zinnen = voorzorgsmaatregelen","V₂O₅: Repr.1B, Carc.2, H330 — FFP3+ nitril verplicht","H₂SO₄: H314 — 30 min spoelen, NIET neutraliseren","NaOH: H314 — 30+ min spoelen, dringt dieper door"])
    qz(s(),"📋 Kennistoets",["Welke SDS-sectie bevat de H-zinnen?","Wat betekent H330?","Welk GHS-pictogram bij V₂O₅?","Hoe lang spoelen bij H₂SO₄-huidcontact?","Wat betekent P280?","Welke PBM's bij V₂O₅?","Verschil H315 vs H314?","Wat is de IAD-waarde V₂O₅?","Waarom NaOH langer spoelen dan H₂SO₄?","Welke blootstellingsroute is meest kritiek PM?","Al₂(SO₄)₃ H-zinnen?","3 voorzorgsmaatregelen bij H₂SO₄-werk?","Wat staat in SDS-sectie 8?","Waar vind je de SDS op de werkvloer?","Verschil Repr. 1B vs Carc. 2?"])
    rfs(s(),"📚 Bronverwijzingen",["REACH Verordening (EC) 1907/2006","CLP Verordening (EC) 1272/2008","SDS V₂O₅ CAS 1314-62-1","SDS H₂SO₄ CAS 7664-93-9","SDS NaOH CAS 1310-73-2","SDS Al₂(SO₄)₃ CAS 10043-01-3","ECHA — GHS-classificaties","SER — Grenswaarden stoffen","Arbobesluit — Blootstellingslimieten","RIVM — Stoffen informatie"])
    tvr(s(),"PM_EL_T05_Product_Hazards___MSDS_Presentatie_v1.1.pptx")
    prs.save(os.path.join(OUT,"PM_EL_T05_Product_Hazards___MSDS_Presentatie_v1.1.pptx"))
    print("✅ T05 PPTX")

def gen_T06():
    prs=np(); s=lambda:asl(prs)
    cov(s(),"Emergency Response Equipment","Nooduitrusting: locatie, bediening, inspectie\nPhoenix Metals B.V.","TR-302-02 | v1.1 | April 2026")
    inf(s(),"📋 Documentinformatie",["Project: Phoenix Metals B.V. — VMS","Training: Emergency Response Equipment | TR-302-02 | v1.1","Auteur: JvG Consultancy | April 2026","Doelgroep: Alle medewerkers","Doel: Kennis locatie+bediening nooduitrusting"])
    bul(s(),"🎯 Leerdoelen",["Oogdouches: Locatie, bediening, spoeltijd","Nooddouches: Locatie, bediening","Eerste hulp kits: Inhoud volgens NEN 4003","Gasdetectieapparatuur: O₂, LEL, H₂S, CO","Ademluchttoestellen: Type, duur, inspectie","Sorptiemateriaal: Voor H₂SO₄/NaOH","Brandblussers: Locatiekaart PM","Inspectieschema: Wie, wanneer, wat"])
    bul(s(),"❓ Waarom Equipment Training?",["Nooduitrusting alleen nuttig als je weet WAAR en HOE","Onvindbare oogdouche bij chemisch contact → blindheid","Lege brandblusser → brand escaleert","Verkeerd sorptiemateriaal bij H₂SO₄ → reactie","Kennis = snelle reactie = minder schade"],None,"🔧")
    bul(s(),"👁️ Oogdouches — Locatie & Bediening",["Locatie: Bij elke H₂SO₄/NaOH-werkplek — 15 sec bereikbaar","PlantOne: 4 oogdouches (receptie, opslag, hal 1, hal 2)","Rotterdam: 2 oogdouches (ingang, verwerking)","Bediening: Voetpedaal of hendel → waterstroom activeert","Spoeltijd: 15 minuten bij zuur/base contact","Temperatuur: Lauwwarm (15-25°C) — CE-markering"])
    bul(s(),"👁️ Oogdouches — Procedure & Valkuilen",["Procedure: Ogen OPEN houden, hoofd boven douche, spoelen","Lenzen verwijderen TIJDENS spoelen (niet eerst zoeken)","Bij H₂SO₄: Minimum 30 min spoelen (diepere schade)","Bij NaOH: Minimum 30+ min (penetreert dieper)","Valkuil: Te kort spoelen = latere complicaties","Altijd: Na spoelen naar oogarts — ook bij 'weinig pijn'"])
    bul(s(),"🚿 Nooddouches — Locatie & Bediening",["PlantOne: Verwerkingshal + H₂SO₄-opslag","Rotterdam: Processing unit","Bereikbaarheid: Binnen 10 seconden vanaf werkplek","Debiet: Minimaal 75 liter/min","Bediening: Trekstang of hendel — blijft aan tot handmatig UIT","Volledige lichaamsspoeling bij grootschalig contact"])
    bul(s(),"🩹 Eerste Hulp Kits — NEN 4003",["Locatie: Receptie, verwerkingshal, kantoor, kantine","Inhoud volgens NEN 4003: Verband, pleisters, ontsmettingsmiddel","Aanvullend PM: Brandwondenzalf (geen zalf!), steriel water","Oogspoelflessen: Extra bij elke kit (noodaanvulling)","Scissors, pincet, survival blanket","Maandelijks: Visuele check inhoud + vervaldatums"])
    bul(s(),"🔬 Gasdetectieapparatuur — Types",["O₂-meter: Zuurstoftekort (alarm <19,5% en >23,5%)","LEL-meter: Ontplofbare gassen (alarm <10% LEL)","H₂S-meter: Waterstofsulfide (alarm bij 5 ppm)","CO-meter: Koolmonoxide (alarm bij 25 ppm)","PM-specifiek: V₂O₅-stofdetectie (photo meting)","PID: Vluchtige organische verbindingen"])
    tbl(s(),"🔬 Gasdetectie — Bediening",["Apparaat","Meetwaarde","Alarm","Calibratie"],[["O₂","20,9% normaal","<19,5% / >23,5%","6-maandelijks"],["LEL","0-100% LEL","10% LEL","6-maandelijks"],["H₂S","0-100 ppm","5 ppm","6-maandelijks"],["CO","0-500 ppm","25 ppm","6-maandelijks"],["V₂O₅-stof","mg/m³","0,05 mg/m³ (IAD)","Volgens schema"]])
    bul(s(),"🫁 Ademluchttoestellen",["Type: Zelfstandig ademluchttoestel (SCBA)","Gebruiksduur: ~30 min (200 bar, 6L fles)","PM: Beschikbaar bij BNO-punt voor BHV-verkenning","Inspectie: Maandelijks visueel, jaarlijks door leverancier","Training: BHV'ers trainen jaarlijks met SCBA","NOOIT: Ademlucht gebruiken zonder training!"])
    bul(s(),"🧹 Sorptiemateriaal — H₂SO₄/NaOH",["NIET universeel sorptiemateriaal gebruiken!","H₂SO₄: Gebruik zuur-resistent sorptiemateriaal (speciale kussens)","NaOH: Base-resistent materiaal","Universeel sorptie = reactie met zuur/base → verergering","PM: Specifieke kits bij H₂SO₄-opslag en NaOH-werkplek","Kleurcodering: Geel = universeel, BLAUW = zuur, ROOD = base"])
    bul(s(),"🧯 Brandblussers — Locatiekaart PM",["PlantOne IJmuiden: 12 blussers verdeeld over locatie","Type verdeling: 6x ABC-poeder, 4x CO₂, 2x schuim","Rotterdam: 8 blussers (5x poeder, 3x CO₂)","Alle blussers: Binnen 15 meter bereikbaar","Signaleringsborden boven elke blusser","Kaart bij receptie + digitaal beschikbaar"])
    tbl(s(),"🔧 Inspectieschema",["Uitrusting","Frequentie","Door wie","Wat checken"],[["Brandblussers","Maandelijks","Alle medewerkers","Druk, verzegeling, toegankelijk"],["Oogdouches","Wekelijks","BHV'er","Waterstroom, temperatuur"],["Nooddouches","Maandelijks","BHV'er","Debiet, temperatuur"],["Gasdetectie","Dagelijks (bump)","Operator","Functie, alarm"],["SCBA","Maandelijks","BHV-coördinator","Druk, masker, fles"],["Eerste hulp kits","Maandelijks","Calcoordinator","Inhoud, vervaldata"]])
    bul(s(),"📋 Praktijkscenario's",["Scenario A: H₂SO₄ in ogen → Oogdouche zoeken, bedienen, 30 min spoelen","Scenario B: Gasalarm in hal → Gasdetector aflezen, evacueren","Scenario C: Brand kantine → Brandblusser zoeken (welke type?) en bedienen","Scenario D: NaOH morsing → Sorptiekussen blauw of rood gebruiken","Scenario E: Colleague in gaszone → SCBA pakken, verkenning"])
    smy(s(),"📋 Samenvatting",["Oogdouches: 15 sec bereikbaar, 15-30 min spoelen","Nooddouches: 10 sec bereikbaar, 75 L/min","Eerste hulp kits: NEN 4003, maandelijks gecheckt","Gasdetectie: O₂/LEL/H₂S/CO/V₂O₅ — dagelijks bump test","SCBA: 30 min lucht, alleen door getrainde BHV'ers","Sorptie: BLAUW=zuur, ROOD=base, NIET universeel!"])
    qz(s(),"📋 Kennistoets",["Waar vind je de oogdouche in de verwerkingshal?","Hoelang spoel je bij H₂SO₄-oogcontact?","Wat zit er in een NEN 4003 kit?","Bij welk O₂-percentage gaat de alarm?","Wat is een bump-test?","Hoelang gaat een SCBA mee?","Welk sorptiemateriaal bij NaOH-lekkage?","Waar hangt de brandblusser-locatiekaart?","Hoe vaak check je blusser-druk?","Welke kleur sorptie voor H₂SO₄?"])
    rfs(s(),"📚 Bronverwijzingen",["NEN 4003 — Eerste hulp inventarisatie","NEN-EN 15154 — Nooddouches/oogdouches","NEN-EN 3 — Brandblussers","IEC 60079-29 — Gasdetectie","Arbobesluit Art. 2.17 — BHV-uitrusting","PGS 15:2025 — Opslag","SDS V₂O₅, H₂SO₄, NaOH — Sectie 8","NEN-EN 137 — Ademluchttoestellen","IFV — Industriële veiligheid","ISO 7010 — Veiligheidsborden"])
    tvr(s(),"PM_EL_T06_Emergency_Response_Equipment_Presentatie_v1.1.pptx")
    prs.save(os.path.join(OUT,"PM_EL_T06_Emergency_Response_Equipment_Presentatie_v1.1.pptx"))
    print("✅ T06 PPTX")

def gen_T07():
    prs=np(); s=lambda:asl(prs)
    cov(s(),"VOP — Veilige Opstart Procedure","Gestructureerd opstarten van installaties\nPhoenix Metals B.V.","TR-302-03 | v1.1 | April 2026")
    inf(s(),"📋 Documentinformatie",["Project: Phoenix Metals B.V. — VMS","Training: VOP — Veilige Opstart Procedure | TR-302-03 | v1.1","Auteur: JvG Consultancy | April 2026","Doelgroep: Operators, technici, leidinggevenden","Doel: Gestructureerd opstarten zonder risico's"])
    bul(s(),"🎯 Leerdoelen",["Definitie VOP en wettelijke basis","Verschil VOP vs normale procedure","10-stappen stappenplan uitvoeren","Verificatiepunten per installatie-onderdeel","Rollen: uitvoerder, controleur, goedkeurder","Communicatie-protocol bij opstart","Veelgemaakte fouten (top-5)","PM-specifiek: Opstart vanadiumverwerkingslijn"])
    bul(s(),"❓ Wat is een VOP?",["VOP = Veilige Opstart Procedure — gestructureerd proces","Verplicht na: Onderhoud, stilstand, modificatie, calamiteit","Wettelijk: Arbobesluit + Seveso III (vrijwillig PM)","Doel: Veilig overgang van 'stil' naar 'operationeel'","Zonder VOP: Verhoogd risico op lekkage, brand, explosie"],None,"🏭")
    twc(s(),"VOP vs Normale Procedure","📋 VOP (Veilig Opstarten)",["Na onderhoud/stilstand","Uitgebreide checklist","3-rollen: uitvoerder+controleur+goedkeurder","Communicatie-protocol verplicht","Documentatie + handtekeningen","Alleen na formele vrijgave"],"🔄 Normale Procedure",["Dagelijkse operatie","Standaard SOP","Operator voert uit","Beperkte communicatie","Standaard logboek","Geen extra goedkeuring"])
    flw(s(),"📋 10-Stappen VOP Stappenplan", ["1. Veiligheids-\ncheck","2. LOTO\nverwijdering","3. Visuele\ninspectie","4. Functie-\ntest","5. Calibratie"], "Stappen 1-5")
    flw(s(),"📋 10-Stappen VOP (vervolg)", ["6. Communi-\ncatie","7. Vrijgave","8. Opstart","9. Monitoring","10. Evaluatie"], "Stappen 6-10")
    bul(s(),"1️⃣ Stap 1: Veiligheidscheck",["Is de werkplek schoon en opgeruimd?","Alle gereedschap verwijderd?","Alle personen op veilige afstand?","Gevaarlijke stoffen gecontroleerd (geen lekken)?","PM: V₂O₅-stof opgeruimd, H₂SO₄-lekken verholpen","Checklist-item 1: ✅ of ❌ — bij ❌ NIET verder"])
    bul(s(),"2️⃣ Stap 2: LOTO Verwijdering",["LOTO = Lock Out Tag Out — afsluiting energiebronnen","Alle sloten EN tags verwijderd door BEVOEGDE persoon","Controle: Is elk slot geteld? Geen vergeten sloten?","PM: Reactor, leidingen, pompen — allemaal LATO-vrij","FOUT: Slot verwijderen van ANDERMANS lock → PROTOCOL 0","Na LATO-verwijdering: energietest (spanning, druk)"])
    bul(s(),"3️⃣ Stap 3: Visuele Inspectie",["Rondgang langs alle installatie-onderdelen","Reactor: Behuizing intact? Geen scheuren?","Leidingen: Verbindingen strak? Geen corrosie?","Pompen: Dichtingen OK? Trilling vrij?","Meetinstrumenten: Zichtbaar intact? Displays actief?","PM: Bijzondere aandacht H₂SO₄-leidingen (corrosie-risico)"])
    bul(s(),"4️⃣ Stap 4: Functietest",["Elke component individueel testen vóór integratie","Pompen: Starten, draairichting, drukopbouw","Kleppen: Open/dicht testen, posities geverifieerd","Sensoren: Reactie op testsignaal","Beveiligingen: Noodstop testen!","PM: Vanadium-reactor test: verwarmingselementen testen op continue temperatuur"])
    bul(s(),"5️⃣ Stap 5: Calibratie",["Meetinstrumenten kalibreren vóór opstart","Temperatuursensoren: Referentiepunt controleren","Drukmeters: Nulmeting + referentiedruk","Flowmeters: Kalibratie met bekende stroom","Gasdetectie: Bump-test (bekende concentratie)","PM: Calibratielog bijhouden — traceerbaarheid verplicht"])
    bul(s(),"6️⃣ Stap 6: Communicatie",["PA-omroep: 'Opstart procedure begint voor [installatie]'","Alle betrokkenen persoonlijk informeren","Shift-overdracht: Status doorgeven","Emergency kanalen vrijhouden","PM: Mobilofoon check — iedereen bereikbaar?","Document: Communicatielog ondertekenen"])
    bul(s(),"7️⃣ Stap 7: Vrijgave",["Formele toestemming om op te starten","3-handtekenen regel: Uitvoerder + Controleur + Goedkeurder","Goedkeurder = Leidinggevende of Process Engineer","Zonder 3 handtekeningen: OPSTART VERBODEN","PM: Stijn van Zelst (MD) of aangewezen vervanger","Vrijgaveformulier opslaan in projectmap"])
    bul(s(),"8️⃣ Stap 8: Opstart",["Trapsgewijs opstarten — NIET alles tegelijk","Start met hulpsystemen (koeling, ventilatie, luchtdruk)","Dan: Pompen starten, stroming op gang","Dan: Reactor langzaam op temperatuur brengen","Monitoring: Parameters continu in de gaten","PM: Vanadium-lijn: Eerst spoelwater, dan pas grondstof"])
    bul(s(),"9️⃣ Stap 9: Monitoring",["Eerste 2 uur: Continue bewaking kritieke parameters","Temperatuur, druk, flow, gasniveaus","Elke afwijking → STOP en onderzoek","PM: V₂O₅-stofniveaus continue monitoren","Loggen: Alle waarden elk 15 minuten","Bij afwijking >10% van normaal → OPSTART STOPPEN"])
    bul(s(),"🔟 Stap 10: Evaluatie",["Na 24 uur: Eerste evaluatie","Is de installatie stabiel? Geen afwijkingen?","Zijn er onverwachte geluiden/trillingen?","Documentatie afronden + archiveren","Verbeterpunten voor volgende VOP","PM: Evaluatie PM-specifiek + algemeen"])
    tbl(s(),"🔍 Verificatiepunten per Onderdeel",["Onderdeel","Controle","Normaal","Actie bij afwijking"],[["Reactor","Temperatuur","±2°C van setpoint","Stop, onderzoek"],["Leidingen","Druk","±5% van nominaal","Stop, lekcheck"],["Pompen","Trilling","<4 mm/s","Stop, uitlijning"],["Meetinstr.","Calibratie","±1% van ref.","Her-kalibreren"],["Gasdetectie","Waarde","<IAD","Stop, evacueren"]])
    tbl(s(),"👥 Rollen bij VOP",["Rol","Verantwoordelijkheid","Bevoegdheid"],[["Uitvoerder","VOP stappen uitvoeren","Stoppemacht bij afwijking"],["Controleur","Onafhankelijke verificatie","Veto-recht op vrijgave"],["Goedkeurder","Formele goedkeuring","Final sign-off"]])
    tbl(s(),"❌ Top-5 Veelgemaakte Fouten",["#","Fout","Gevolg","Preventie"],[["1","LOTO niet volledig verwijderd","Onverwachte energievrijkomst","Sloten tellen+verifiëren"],["2","Communicatie vergeten","Collega's onwetend van opstart","PA+persoonlijk verplicht"],["3","Checklist afvinken zonder check","Vermompelde defecten","Controleur verifieert onafhankelijk"],["4","Te snel opstarten","Druk/temperatuur overshoot","Trapsgewijs, langzaam"],["5","Monitoring stoppen te vroeg","Late afwijkingen gemist","Min 2 uur continue"]])
    bul(s(),"🏭 PM Specifiek: Opstart Vanadiumverwerkingslijn",["Stilstand >4 uur → VOP verplicht","Extra: Stofmonitoring kalibreren vóór opstart","Reactor: Langzaam opwarmen (<50°C/uur)","H₂SO₄-lijnen: Spoelen met water vóór zuur introduceren","Gasdetectie: Bump-test V₂O₅-sensor","Eerste batch: Halve capaciteit → volledig na stabiliteit (2 uur)"])
    bul(s(),"📝 Documentatie & Registratie",["VOP-formulier: Alle 10 stappen afvinken+initialen","Calibratiecertificaten bijvoegen","Communicatielog ondertekenen","3-handtekeningen vrijgaveformulier","Monitoring-log eerste 2 uur","Evaluatierapport na 24 uur","Archivering in /logs/VOP/ op PM-server"])
    smy(s(),"📋 Samenvatting",["VOP = Veilig Opstarten na onderhoud/stilstand","10 stappen: Veiligheid → LOTO → Visueel → Functie → Calibratie → Comm → Vrijgave → Opstart → Monitor → Evaluatie","3 rollen: Uitvoerder, Controleur, Goedkeurder","3-handtekeningen verplicht vóór opstart","Top-5 fouten vermijden: LOTO, communicatie, checklist, snelheid, monitoring","PM-specifiek: Vanadium-lijn langzaam opstarten, stofmonitoring kritiek"])
    qz(s(),"📋 Kennistoets",["Wat is een VOP en wanneer verplicht?","Verschil VOP vs normale SOP?","Noem de 10 stappen","Wat controleer je bij stap 3 (visueel)?","Wat is LOTO en waarom verwijderen?","Wie zijn de 3 rollen bij VOP?","Wat is de 3-handtekeningen regel?","Top-5 fouten: noem er 3","PM-specifiek: Waarom langzaam opstarten vanadium-lijn?","Welke documentatie is verplicht na VOP?"])
    rfs(s(),"📚 Bronverwijzingen",["Arbobesluit — Veilig werken","Seveso III 2012/18/EU","PGS 15:2025","IEC 62474 — Veiligheid machines","NEN-EN  ISO 12100 — Risicoreductie","LOTO-richtlijn Nederland","SDS V₂O₅ CAS 1314-62-1","SDS H₂SO₄ CAS 7664-93-9","NEN 3140 — Werken aan elektrisch","OSHA 1910.147 — Lockout/Tagout"])
    tvr(s(),"PM_EL_T07_VOP_Presentatie_v1.1.pptx")
    prs.save(os.path.join(OUT,"PM_EL_T07_VOP_Presentatie_v1.1.pptx"))
    print("✅ T07 PPTX")

if __name__ == "__main__":
    gen_T03(); gen_T04(); gen_T05(); gen_T06(); gen_T07()
    print("✅ All T03-T07 PPTX generated!")
