#!/usr/bin/env python3
"""Generate all 7 PPTX with 35+ slides each. Uses gen_pptx helper functions."""
import os,sys
sys.path.insert(0, '/root/projects/jg/2026-PM-eLearning')
from gen_pptx import np, asl, hdr, cov, bul, tbl, flw, twc, smy, qz, rfs, inf, tvr

OUT = "/root/projects/jg/2026-PM-eLearning/deliverables"

def count(slides):
    return len(slides)

def gen_T02():
    """BHV + AED — Target 35+ slides"""
    prs=np(); s=lambda:asl(prs)
    
    # 1-2: Cover + Info
    cov(s(),"BHV + AED Training","Bedrijfshulpverlening & Automatische Externe Defibrillator\nPhoenix Metals B.V.","TR-301-02 | v1.1 | April 2026")
    inf(s(),"📋 Documentinformatie",["Project: Phoenix Metals B.V. — VMS","Training: BHV + AED | TR-301-02 | v1.1","Auteur: JvG Consultancy | April 2026","Doelgroep: Alle medewerkers, bijzonder BHV'ers","Doel: Levensreddende vaardigheden bij hartstilstand en letsel"])
    
    # 3-4: Leerdoelen + Waarom
    bul(s(),"🎯 Leerdoelen",["DRSABCD-stappenplan uitvoeren bij bewusteloze collega","AED correct gebruiken: aanzetten, elektroden plakken, schok toedienen","Veiligheidscheck uitvoeren (spanningsvrij!)","Brandwonden behandelen (thermisch + chemisch: H₂SO₄/NaOH)","Stabiele zijligging toepassen","Alarmeringsprocedure bij medische noodsituaties kennen"])
    bul(s(),"❓ Waarom BHV + AED Training?",["~300 mensen/jaar overlijden in NL door hartstilstand op werk","Elke minuut zonder reanimatie: overlevingskans daalt 10%","AED binnen 3 minuten = tot 70% overlevingskans","Phoenix Metals PlantOne: ambulance >10 min → zelfredding KRITIEK","BHV is WETTELIJK VERPLICHT (Arbobesluit art. 2.17)","Chemische risico's (H₂SO₄, NaOH, V₂O₅) vragen specifieke EHBO-kennis"])
    
    # 5-8: Context
    tbl(s(),"📊 Hartstilstand — De Feiten",["Factor","Zonder reanimatie","Met reanimatie","Met reanimatie + AED"],[["Overlevingskans","< 5%","10-20%","50-70%"],["Tijd tot hulp","10+ min (ambulance)","Direct (collega)","3 min (AED)"],["Hersenschade","Na 4-6 min","Uitgesteld","Voorkomen"]])
    bul(s(),"⚖️ Wettelijk Kader BHV",["Arbowet art. 3: Veilige arbeidsomstandigheden","Arbobesluit art. 2.17: BHV-organisatie verplicht","NRR (Nederlandse Reanimatie Raad) richtlijnen","ERC (European Resuscitation Council) guidelines 2021","PM: Vrijwillige Seveso III → hoge standaard voor BHV","Bedrijfsarts: Periodieke keuring BHV-geschiktheid"])
    bul(s(),"🏭 PM-Specifieke Medische Risico's",["V₂O₅-inademing: Longschade, acute toxiciteit","H₂SO₄-huidcontact: Ernstige chemische brandwonden","NaOH-huidcontact: Diepe weefselschade","Stofexplosie: Crush-letsel, brandwonden, traumatisch letsel","Elektrisch letsel: Hartfibrillatie, spiercontracties","Hitte: Reactoroppervlakken >200°C, stoomleidingen"])
    tbl(s(),"📊 BHV-Organisatie Phoenix Metals",["Rol","Aantal","Training","Frequentie"],[["BHV'er","2+","EHBO + reanimatie + AED","Jaarlijks"],["BBW","1+","Brandbestrijding uitgebreid","Jaarlijks"],["BNO-leider","1","Coördinatie + crisiscomm.","2-jaarlijks"],["Calcoordinator","1","Headcount + registratie","Jaarlijks"]])
    
    # 9-30: Theorie (DRSABCD + AED + brandwonden etc)
    flw(s(),"🫀 DRSABCD Stappenplan",["D = Danger\n(Gevaar?)","R = Response\n(Reactie?)","S = Send help\n(Alarmeer!)","A = Airway\n(Luchtweg)","B = Breathing\n(Ademhaling)","C = CPR\n(Reanimatie)","D = Defib\n(AED)"],"Theorie — DRSABCD (1/7)")
    bul(s(),"⚠️ D = Danger — Veiligheid Eerst",["EERST veiligheid checken — een dode BHV'er kan niemand helpen","PM-specifieke gevaren: V₂O₅-stof, H₂SO₄-morsingen, NaOH-lekken, spanningsbronnen","Check: Is de omgeving veilig? Geen gas, geen stroom, geen verkeer?","BIJ CHEMISCH INCIDENT: Eerst PBM's aan (FFP3, nitrilhandschoenen, veiligheidsbril)","Valkuil: Emotie overwint logica — STOP, DENK, dan ACTIE","Casus: BHV'er rende in gifwolk zonder masker → zelf slachtoffer"],"Theorie — DRSABCD (2/7)")
    bul(s(),"🗣️ R = Response — Reactie Checken",["Roep de persoon aan bij naam","Kneep zacht in de schouder (niet schudden!)","Geen reactie? → Bewusteloos → Ga door naar S","Wel reactie? → Vraag wat er aan de hand is, blijf bij persoon","Belangrijk: NIET 'even wachten of hij bijkomt' — actie vereist"],"Theorie — DRSABCD (3/7)")
    bul(s(),"📞 S = Send for Help — Alarmeren",["Roep om hulp: 'HELP! BEL 112!'","Stuur iemand specifiek: 'Jij, bel 112 en haal de AED!'","PM: Intern noodnummer bellen + mobilofoon alarmering","Zeg ALTIJD: 'Ik heb een AED nodig op [locatie] en bel 112!'","Blijf NIET alleen — zorg dat hulp onderweg is"],"Theorie — DRSABCD (4/7)")
    bul(s(),"💨 A = Airway — Luchtweg Openen",["Hoofd kantelen achterover + kin oplichten (hoofdkantelmanoeuvre)","Controleer mond op vreemde voorwerpen — verwijder indien zichtbaar","Bij vermoeden nekletsel: Jin-thrust (kin oplichten ZONDER hoofd te kantelen)","PM-specifiek: Bij V₂O₅-blootstelling luchtweg kan geobstrueerd zijn door stof"],"Theorie — DRSABCD (5/7)")
    bul(s(),"🫁 B = Breathing — Ademhaling Controleren",["Kijk (borstkas beweegt?), Luister (ademgeluid?), Voel (lucht uit mond/neus?)","Maximaal 10 seconden beoordelen","NORMALE ademhaling → Stabiele zijligging + bel 112","GEEN ademhaling OF abnormaal (gasping/snurken) → START REANIMATIE","Valkuil: Gasping is GEEN normale ademhaling — start reanimatie!"],"Theorie — DRSABCD (6/7)")
    
    # CPR + AED
    bul(s(),"🫀 C = CPR — Reanimatie Techniek",["30 borstcompressies + 2 beademingen (ratio 30:2)","Handplaatsing: Midden op borstbeen, onderste helft","Diepte: 5-6 cm (bij volwassene)","Frequentie: 100-120 compressies per minuut","Beademingen: Hoofd kantelen, neus dichtknijpen, 1 sec blazen tot borst rijst","Laat de borstkas volledig terugkomen tussen compressies","Blijf reanimeren tot: AED analyseert, ambulance neemt over, persoon wordt wakker, of je uitgeput bent"],"Theorie — DRSABCD (7/7)")
    
    bul(s(),"⚡ AED — Stap voor Stap (1/2)",["Stap 1: AED aanzetten (groene knop) — volg gesproken instructies","Stap 2: Borst ontkleden (alle kleding van bovenlichaam)","Stap 3: Medicijnpatches verwijderen (NIET over elektrode plaatsen)","Stap 4: Borst droogvegen indien nat (zweet, water)","Stap 5: Eerste elektrode: Rechterzijde, net onder sleutelbeen"],"Theorie — AED (1/4)")
    bul(s(),"⚡ AED — Stap voor Stap (2/2)",["Stap 6: Tweede elektrode: Linkerzijde, onder de oksel","Stap 7: AED analyseert hartritme — NIET AANRAKEN de persoon!","Stap 8: 'Schok geadviseerd' → NIET AANRAKEN → Druk op knop","Stap 9: Direct na schok verder met 30:2 reanimatie","Stap 10: AED zal na 2 minuten opnieuw analyseren — volg instructies"],"Theorie — AED (2/4)")
    twc(s(),"⚡ AED — Belangrijke Regels","✅ WEL",["Gebruiken bij bewusteloze + geen ademhaling","Water: persoon eerst droogvegen","Medicijnpatches: verwijderen vóór elektroden","Direct verder reanimeren na schok","AED kan gebruikt worden op zwangere vrouwen"],"❌ NIET",["Niet bij bewuste persoon","Niet in EXPLOSIEVE atmosfeer (ATEX-zone!)","Elektroden NIET direct op wond of implantaat","Niet wachten op AED om reanimatie te starten","Niet op kind <1 jaar (speciaal protocol)"],"Theorie — AED (3/4)")
    bul(s(),"⚡ AED — PM Locaties & Onderhoud",["PlantOne IJmuiden: AED bij receptie (gelijkvloers) + AED verwerkingshal (1e verdieping)","Rotterdam: AED bij ingang processing unit","Onderhoud: Maandelijks visuele check (groene knop brandt?) + jaarlijks door leverancier","Training: Iedere BHV'er oefent jaarlijks met oefen-AED","Valkuil: AED in kast OP SLOT — zorg dat deze ALTIJD toegankelijk is!","AED-paden: Route naar AED moet altijd vrij zijn (geen opslag in de weg)"],"Theorie — AED (4/4)")
    
    # Spanningsvrij
    bul(s(),"⚡ Veiligheidscheck — Spanningsvrij?",["Phoenix Metals heeft elektrische installaties bij de verwerkingslijn","BIJ ELEKTRISCH LETSEL: Eerst spanningsvrij maken! NIET het slachtoffer aanraken!","Procedure: 1) Stroom uitschakelen (hoofdschakelaar) → 2) Spanningstest → 3) Dan pas hulp","Als spanningsvrij NIET mogelijk: Isolatiemateriaal gebruiken (droge plank, rubber mat)","NOOIT: Blote handen op persoon die onder stroom staat — je bent het VOLGENDE slachtoffer","PM: Transformator bij verwerkingslijn — altijd spanningsvrij verifiëren"],"Theorie — Spanningsvrij (1/1)")
    
    # Stabiele zijligging
    bul(s(),"🔄 Stabiele Zijligging — Procedure",["Toepassen bij: Bewusteloze persoon WEL ademend (geen hartstilstand!)","Stap 1: Arm dichtbij jou in rechterhoek omhoog","Stap 2: Verste arm over borst leggen, handrug tegen wang","Stap 3: Verste knie buigen, voet op de grond","Stap 4: Aan gebogen knie trekken → rol persoon naar jou toe","Stap 5: Hoofd kantelen voor vrije luchtweg","Stap 6: Blijf ademhaling controleren tot ambulance er is"],"Theorie — Stabiele Zijligging (1/1)")
    
    # Brandwonden thermisch
    bul(s(),"🔥 Brandwonden — Thermisch (Hitte)",["Gradering: Graad 1 (rood, pijnlijk), Graad 2 (blaren), Graad 3 (zwart, ledervormig)","Behandeling: KOELEN met lauw stromend water — MINIMAAL 20 MINUTEN","GEEN: IJs (bevriezing), zalven, boter, tandpasta, verband direct op wond","Wel: Steriel verlossend verband NA het koelen","PM-risico's: Hete oppervlakken reactor (200°C+), stoomleidingen, verwerkingsapparatuur","Casus: Medewerker staal raakte hete leiding 180°C → Graad 2 brandwond hand"],"Theorie — Brandwonden (1/4)")
    bul(s(),"🔥 Brandwonden — Gradering & Casuïstiek",["Graad 1: Rood, pijnlijk, geen blaren → Koelen 20 min, verzorgen","Graad 2: Blaren, vochtig, erg pijnlijk → Koelen 20 min, NIET doorprikken, steriel verband","Graad 2 Diep: Wit/wond, weinig pijn (zenuwen beschadigd) → 112 bellen","Graad 3: Zwart/lederachtig, geen pijn → 112, NIET verwijderen dood weefsel","Casus: 5 min gekoeld, toen 'wel goed' → brandwond verslechterde → 20 min is MINIMUM","Correcte aanpak: Direct 20 min koelen, steriel verband, doorverwijzing bedrijfsarts"],"Theorie — Brandwonden (2/4)")
    
    # Chemische brandwonden
    twc(s(),"⚗️ Chemische Brandwonden","🧪 H₂SO₄ (Zwavelzuur)",["H314: Veroorzaakt ernstige huidbrandwonden en oogletsel","Spoelen: MINIMAAL 30 minuten met veel water","GEEN neutraliseren met base! (exotherme reactie → verergering)","Kleding: Uittrekken MAAR niet over hoofd als bevlekt","Oogcontact: Spoelen 30 min, direct naar oogarts","PM: H₂SO₄ >95% concentratie — direct ernstige schade"],"🧪 NaOH (Natriumhydroxide)",["H314: Veroorzaakt ernstige huidbrandwonden en oogletsel","Spoelen: MINIMAAL 30 minuten met veel water","GEEN neutraliseren met zuur! (exotherme reactie)","NaOH dringt DIEPER door dan zuren → langer spoelen!","Oogcontact: 30+ min spoelen, hoog corneaschade-risico","PM: NaOH 25-50% oplossing — direct ernstige schade"],"Theorie — Chemische Brandwonden (3/4)")
    bul(s(),"⚗️ Chemische Brandwonden — PM Protocol",["Locatie oogdouches: Bij elke H₂SO₄/NaOH werkplek — 15 seconden bereikbaar","Nooddouches: Verwerkingshal + opslagruimte — volledige lichaamsspoeling","Procedure: 1) Spoelen (30 min) → 2) Kleding verwijderen → 3) Doorgaan spoelen → 4) 112","Valkuil: 'Even kijken hoe erg het is' → NIET kijken, DIRECT spoelen!","V₂O₅ huidcontact: Spoelen met water + zeep, FFP3 bescherming bij stof","Elke chemische blootstelling RAPPORTEREN aan HSEQ — documentatie verplicht"],"Theorie — Chemische Brandwonden (4/4)")
    
    # Stompenwonden
    bul(s(),"💊 Stompenwonden & Cyclomethicone",["Stompenwonden: Veroorzaakt door vallende objecten, botsingen met apparatuur","Phoenix Metals: Zware materialen (vanadium, staalslakken) → risico op crush-letsel","Eerste hulp: Koelen (ijs in doek), niet doorprikken van blaren, verbinden","Cyclomethicone: Beschermende laag bij wondbehandeling (industrieel EHBO)","BIJ TWIJFL: Altijd 112 bellen — inwendige bloeding niet zichtbaar!","Crush-syndroom: Langdurig bekneld → bij vrijkomen shock-gevaar — specialistische hulp"],"Theorie — Stompenwonden (1/1)")
    
    # Alarmering
    flw(s(),"📞 Alarmering Medische Nood",["Ontdek\nslachtoffer","Zelf veilig?\n(PBM's!)","Bel 112 +\nintern noodnr","Start\nDRSABCD","Wacht ambulance\n+ rapporteer"],"Theorie — Alarmering (1/1)")
    
    # Praktijkoefeningen
    tbl(s(),"🏋️ Praktijkoefeningen — Overzicht",["Oefening","Duur","Wat leer je?","Frequentie"],[["Reanimatie oefenpop","15 min","Borstcompressies + beademing (30:2)","Jaarlijks"],["AED scenario","10 min","AED bedienen + combinatie reanimatie","Jaarlijks"],["Stabiele zijligging","10 min","Correct uitvoeren op collega/oefenpop","Jaarlijks"],["Chemische eerste hulp","15 min","Spoelen bij H₂SO₄/NaOH (simulatie)","Jaarlijks"],["Volledig scenario","30 min","Combinatie: alarm + DRSABCD + AED + rapportage","Jaarlijks"]],"Praktijkoefeningen")
    
    # 31-34: Samenvatting
    smy(s(),"📋 Samenvatting — Key Takeaways",["DRSABCD: Danger → Response → Send for help → Airway → Breathing → CPR → Defibrillation","Reanimatie: 30 compressies + 2 beademingen, 100-120/min, 5-6 cm diep","AED: Aanzetten, elektroden plakken, instructies volgen, NIET AANRAKEN bij analyse/schok","Brandwonden: 20 min koelen (thermisch), 30 min spoelen (chemisch), GEEN zalven","Chemisch H₂SO₄/NaOH: ALLEEN spoelen met water, NIET neutraliseren!","Altijd eerst VEILIGHEID CHECKEN — dode BHV'er helpt niemand"])
    smy(s(),"📋 Valkuillen om te Onthouden",["Gasping = GEEN normale ademhaling → start reanimatie","H₂SO₄/NaOH: NIET neutraliseren, ALLEEN spoelen met water","AED NIET in ATEX-zone (explosiegevaar!)","Persoon onder stroom: NIET aanraken, eerst spanningsvrij","Chemische brandwond: NIET kijken hoe erg, DIRECT spoelen","20 min koelen is MINIMUM bij thermische brandwond"])
    
    # 35-38: Toets + Refs
    qz(s(),"📋 Kennistoets — Theorie",["Wat betekent elke letter in DRSABCD?","Hoeveel borstcompressies en beademingen geef je per cyclus?","Waarom mag je H₂SO₄-brandwonden NIET neutraliseren met een base?","Wanneer plaats je iemand in stabiele zijligging?","Bij een AED: waar plak je de elektroden precies?","Hoe lang koel je een thermische brandwond minimaal?","Wat is je eerste actie bij een persoon onder stroom?","Hoe controleer je de ademhaling (B in DRSABCD)?","Waarom is spoelen bij NaOH minstens 30 minuten?","Leg uit waarom een AED NIET in een ATEX-zone gebruikt mag worden"])
    qz(s(),"📋 Kennistoets — Scenariovragen",["SCENARIO A: Je vindt een collega bewusteloos op de vloer bij de reactor. Hij ademt niet. Beschrijf je acties stap voor stap.","SCENARIO B: Een collega heeft H₂SO₄ in zijn ogen gekregen. Wat doe je?","SCENARIO C: Tijdens reanimatie arriveert de AED. Hoe ga je verder?"])
    rfs(s(),"📚 Bronverwijzingen",["NRR (Nederlandse Reanimatie Raad) — Richtlijnen Basisreanimatie 2021","European Resuscitation Council (ERC) — Guidelines 2021","Arbobesluit, Artikel 2.17 — Bedrijfshulpverlening","SDS H₂SO₄ (CAS 7664-93-9) — Sectie 4: Eerstehulpmaatregelen","SDS NaOH (CAS 1310-73-2) — Sectie 4: Eerstehulpmaatregelen","SDS V₂O₅ (CAS 1314-62-1) — Sectie 4: Eerstehulpmaatregelen","NEN 4003 — Inhoud eerste hulp kits","Hartstichting — Cijfers hartstilstand Nederland 2023"])
    tvr(s(),"PM_EL_T02_BHV_+_AED_Training_Presentatie_v1.1.pptx")
    
    prs.save(os.path.join(OUT,"PM_EL_T02_BHV_+_AED_Training_Presentatie_v1.1.pptx"))
    n = len(prs.slides)
    print(f"✅ T02 PPTX ({n} slides)")
    return n

def gen_T03():
    """Brandbestrijding — 35+ slides"""
    prs=np(); s=lambda:asl(prs)
    
    cov(s(),"Brandbestrijding Training","Theorie en praktijk voor 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 per klasse","Welke blusser bij welk type brand — keuzetabel toepassen","PM-specifieke brandrisico's (metaalbrand, stofexplosie, chemisch, elektrisch)","Wanneer NIET blussen — evacueren!","Brandslanghaspel bedienen"])
    bul(s(),"❓ Waarom Brandbestrijding Training?",["Brand is de meest voorkomende noodsituatie in de industrie","94% van bedrijven die een grote brand meemaken gaat failliet (RVO)","Phoenix Metals: H₂SO₄ (reactief), vanadium (metaalbrand), stof (explosie)","Snel en correct ingrijpen = verschil tussen bijna-ongeluk en catastrofe","Arbobesluit: BHV'ers moeten brandbestrijding beheersen","Statistiek: Verkeerd blusmiddel verergert 40% van industriële branden"])
    
    # Context
    flw(s(),"🔺 Branddriehoek — CONCEPT",["Brandstof","+ Zuurstof","+ Warmte/","Ontsteking","= BRAND"],"Brandtheorie (1/4)")
    bul(s(),"🔺 Brandvijfhoek — UITLEG",["Branddriehoek + Warmte + Chemische kettingreactie = Brandvijfhoek","Blussen = minimaal 1 zijde wegnemen","VOORBEELD: Blussen met CO₂ = zuurstof verdringen + koelen","VOORBEELD: Branddeken = zuurstof afsnijden","VOORBEELD: Water koelen = warmte wegnemen (maar NIET bij alles!)","Valkuil: Verkeerde factor wegnemen kan brand VERERGEREN"],"Brandtheorie (2/4)")
    tbl(s(),"🔺 Blusstrategieën",["Factor","Wegnemen met","Voorbeeld PM"],[["Brandstof","Afsluiten, verwijderen","H₂SO₄-lek dichten, gas afsluiten"],["Zuurstof","Verdringen, afsluiten","CO₂-blusser, branddeken"],["Warmte","Koelen","Water (NIET bij vet/chemisch!)"],["Kettingreactie","Remmen","Poederblusser, halonen"]],"Brandtheorie (3/4)")
    bul(s(),"🔺 Brandtheorie — Phoenix Metals Toepassing",["PM heeft ALLE 4 de factoren in huis: Brandstof (H₂SO₄, vanadium), Zuurstof (lucht), Warmte (reactor 200°C), Kettingreactie (stof-explosie)","Preventie = factoren gescheiden houden","Blussen = snel de juiste factor aanpakken","Elke medewerker moet weten WELKE factor bij WELKE situatie","Casus: Chemelot (2022) — verkeerde factor aangepakt → 2 gewond"],"Brandtheorie (4/4)")
    
    # Brandklassen
    tbl(s(),"🏷️ 6 Brandklassen — Overzicht",["Klasse","Symbool","Omschrijving","PM Voorbeeld"],[["A","🔺","Vaste stoffen (hout, papier, textiel)","Kantoorinventaris, verpakking"],["B","🛢️","Vloeistoffen (benzine, olie, zuren)","H₂SO₄ lekkage, smeermiddelen"],["C","💣","Gassen (aardgas, propaan)","Gasflessen, leidingen"],["D","⚙️","Metalen (aluminium, magnesium, natrium)","Vanadium (metaalbrand risico)"],["E","⚡","Elektrische installaties","Schakelkasten, transformator"],["F","🍳","Bereidingolien en -vetten","Kantine keuken"]],"Brandklassen (1/5)")
    bul(s(),"🏷️ Brandklasse A — Vaste Stoffen",["Materiaal: Hout, papier, textiel, kunststof","Blusmiddel: Water, schuim, ABC-poeder","PM-voorbeeld: Kantoorbrand (papier, meubilair)","Brandslanghaspel: Ideaal voor klasse A in kantoor","Casus: Kantoorbrand distributiecentrum NL (2021) — water had het kunnen blussen"],"Brandklassen (2/5)")
    bul(s(),"🏷️ Brandklasse B — Vloeistoffen",["Materiaal: Vloeibare brandstoffen, oliën, zuren","Blusmiddel