#!/usr/bin/env python3
"""Add extra slides to T08-T14 to meet 35+ slide minimum."""

from pptx import Presentation
from pptx.util import Inches, Pt, Emu, Cm
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN
from pptx.enum.shapes import MSO_SHAPE
import os, copy

PRIMARY = RGBColor(0x00, 0x33, 0x66)
TEXT_DARK = RGBColor(0x1F, 0x29, 0x37)
WHITE = RGBColor(0xFF, 0xFF, 0xFF)
ROW_ALT = RGBColor(0xF3, 0xF4, 0xF6)
SLIDE_WIDTH = Inches(13.333)
SLIDE_HEIGHT = Inches(7.5)
FOOTER_TEXT = "JvG Consultancy | Safety • Governance • Advisory | © 2026"
OUT_DIR = "/root/projects/jg/2026-PM-eLearning/deliverables"

def add_header_text(slide, text):
    shape = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, 0, 0, SLIDE_WIDTH, Inches(0.8))
    shape.fill.solid()
    shape.fill.fore_color.rgb = PRIMARY
    shape.line.fill.background()
    txBox = slide.shapes.add_textbox(Inches(0.5), Inches(0.1), Inches(12), Inches(0.6))
    p = txBox.text_frame.paragraphs[0]
    p.text = text
    p.font.size = Pt(24)
    p.font.color.rgb = WHITE
    p.font.bold = True
    p.font.name = "Calibri"

def add_footer(slide):
    txBox = slide.shapes.add_textbox(Inches(0.5), Inches(7.0), Inches(12), Inches(0.4))
    p = txBox.text_frame.paragraphs[0]
    p.text = FOOTER_TEXT
    p.font.size = Pt(9)
    p.font.color.rgb = RGBColor(0x9C, 0xA3, 0xAF)
    p.font.name = "Calibri"
    p.alignment = PP_ALIGN.CENTER

def make_bullet_slide(prs, title, bullets, icon=""):
    slide = prs.slides.add_slide(prs.slide_layouts[6])
    add_header_text(slide, f"{icon}  {title}" if icon else title)
    add_footer(slide)
    txBox = slide.shapes.add_textbox(Inches(0.7), Inches(1.1), Inches(11.5), Inches(5.5))
    tf = txBox.text_frame
    tf.word_wrap = True
    for i, bullet in enumerate(bullets):
        p = tf.paragraphs[0] if i == 0 else tf.add_paragraph()
        p.text = f"• {bullet}"
        p.font.size = Pt(16)
        p.font.color.rgb = TEXT_DARK
        p.font.name = "Calibri"
        p.space_after = Pt(6)
    return slide

def add_table(slide, headers, rows, top=1.2):
    ncols = len(headers)
    nrows = len(rows) + 1
    table_shape = slide.shapes.add_table(nrows, ncols, Inches(0.7), Inches(top), Inches(11.5), Inches(0.45) * nrows)
    table = table_shape.table
    for j, h in enumerate(headers):
        cell = table.cell(0, j)
        cell.text = h
        for p in cell.text_frame.paragraphs:
            p.font.size = Pt(13); p.font.bold = True; p.font.color.rgb = WHITE; p.font.name = "Calibri"
        cell.fill.solid(); cell.fill.fore_color.rgb = PRIMARY
    for i, row in enumerate(rows):
        for j, val in enumerate(row):
            cell = table.cell(i+1, j)
            cell.text = str(val)
            for p in cell.text_frame.paragraphs:
                p.font.size = Pt(12); p.font.color.rgb = TEXT_DARK; p.font.name = "Calibri"
            if i % 2 == 1:
                cell.fill.solid(); cell.fill.fore_color.rgb = ROW_ALT

def make_table_slide(prs, title, headers, rows, icon=""):
    slide = prs.slides.add_slide(prs.slide_layouts[6])
    add_header_text(slide, f"{icon}  {title}" if icon else title)
    add_footer(slide)
    add_table(slide, headers, rows)
    return slide

# ============================================================
def extend_T08():
    """T08 has 31, need 4+ more"""
    path = os.path.join(OUT_DIR, "PM_EL_T08_Statische_Elektriciteit_Presentatie_v1.1.pptx")
    prs = Presentation(path)
    
    make_bullet_slide(prs, "Statische lading bij vloeistofhantering", [
        "Vloeistoffen door slangen/pompen → ladingsopbouw (vooral niet-geleidende vloeistoffen)",
        "H₂SO₄ en NaOH oplossingen: ladingsopbouw bij pompen door kunststof leidingen",
        "Maatregel: alle slang- en leidingsystemen geaard bij Phoenix Metals",
        "Stroomsnelheid beperken (< 1 m/s bij tankwagen vullen)",
        "Minimale oplaadtijd: 30 seconden wachten na vullen voordat metingen"
    ], icon="💧")
    
    make_bullet_slide(prs, "Inspectie en onderhoud — Frequentie", [
        "Dagelijks: visuele controle aardingskabels en verbindingen",
        "Wekelijks: controle antistatische eigenschappen kleding en schoenen",
        "Maandelijks: weerstandsmetingen equipotentiaalverbindingen",
        "Kwartaallijks: uitgebreide audit aardingssysteem door HSE",
        "Halfjaarlijks: volledige aardingscampagne met externe keuring",
        "Jaarlijks: herkeuring ATEX-apparatuur conform norm"
    ], icon="📅")

    make_bullet_slide(prs, "Wat te doen bij vermoeden van statische ontlading?", [
        "1. STOP alle werkzaamheden onmiddellijk",
        "2. Verlaat het gebied via de dichtstbijzijnde uitgang",
        "3. Meld bij de centrale meldpost (nummer op noodkaart)",
        "4. Vermijd het gebruik van mobiele telefoons in ATEX-zones",
        "5. Wacht op toestemming van HSE voordat werkzaamheden hervat worden",
        "6. Incidents formeel registreren in het incidentenmanagementsysteem"
    ], icon="🚨")

    make_bullet_slide(prs, "Documentatie en registratie", [
        "Aardingslogboek: alle metingen en controles vastleggen",
        "Bindingsformulier: per shift invullen en ondertekenen",
        "ATEX-apparatuurregister: alle apparaten met keuringsdata",
        "Incidentspecifieke rapportage bij elke statische ontlading",
        "Jaarlijks: evaluatie aardingssysteem in HSE-managementreview",
        "Archivering: alle documenten minimaal 5 jaar bewaren"
    ], icon="📋")

    # Insert before last 2 slides (references)
    # Actually just append - references are already there at end
    prs.save(path)
    print(f"✅ T08 extended: {len(prs.slides)} slides")

def extend_T09():
    """T09 has 31, need 9+ more"""
    path = os.path.join(OUT_DIR, "PM_EL_T09_Stofexplosiebewustzijn_Presentatie_v1.1.pptx")
    prs = Presentation(path)

    make_bullet_slide(prs, "Stofeigenschappen die explosiviteit bepalen", [
        "Deeltjesgrootte: < 500 μm brandbaar, < 100 μm sterk explosief",
        "Vochtgehalte: vochtig stof is moeilijker te ontsteken (> 15% vocht = veiliger)",
        "Vorm: vlakke, schilferige deeltjes zijn makkelijker te ontsteken dan ronde",
        "Concentratie: optimale explosie-concentratie afhankelijk van stofsoort",
        "Minimale ontstekingsenergie (MIE): lage MIE = gevoeliger voor vonken",
        "Minimale ontstekingstemperatuur (MIT): hete oppervlakken als bron"
    ], icon="🔬")

    make_bullet_slide(prs, "Minimale ontstekingsenergie (MIE)", [
        "MIE = minimale energie nodig om een stofwolk te ontsteken",
        "Gemeten in millijoules (mJ)",
        "Suiker: MIE ≈ 10-100 mJ (relatief hoog)",
        "Houtmeel: MIE ≈ 7-50 mJ",
        "Aluminium poeder: MIE < 1 mJ (extreem gevoelig!)",
        "V₂O₅: MIE moet getest worden — belangrijk voor Phoenix Metals",
        "Statische vonk: tot 1000 mJ → kan ALLE stoffen ontsteken"
    ], icon="⚡")

    make_bullet_slide(prs, "Stoflagen — Het onderschatte gevaar", [
        "1 mm stoflaag op 100 m² vloer = ca. 100 kg stof",
        "Als dit wordt opgewerveld: concentratie > LEL = explosief!",
        "Secundaire explosie: primaire explosie werkt stoflaag op",
        "Norm: maximaal 1/16 inch (1,6 mm) volgens NFPA 652",
        "Phoenix Metals richtlijn: maximaal 1 mm — strenger dan norm",
        "Ophopingsplekken: leidingen, balken, richels, kabelgoten — kritieke punten!"
    ], icon="📏")

    make_bullet_slide(prs, "Inertiseren — Stikstof blankettering", [
        "Principe: zuurstof verlagen tot < 10% door stikstof toevoegen",
        "Toepassing: silo's, reactoren, opslagtanks",
        "Voordelen: elimineert zuurstof = geen explosie mogelijk",
        "Nadelen: verstikkingsrisico! O₂-monitoring VERPLICHT bij inertiseren",
        "Phoenix Metals: overwegen bij V₂O₅-silo's als preventieve maatregel",
        "Procedure: alleen door getraind personeel met gasdetectie"
    ], icon="💨")

    make_bullet_slide(prs, "Explosiebeveiligingsdocument (EBD)", [
        "VERPLICHT voor elke Seveso III-inrichting",
        "Bevat: zone-indeling, ontstekingsbronnenanalyse, beheersmaatregelen",
        "Onderdeel van het Veiligheidsbeheerssysteem (VBS)",
        "Moet actueel zijn: actualisatie bij elke wijziging (MoC!)",
        "Verantwoordelijke: HSE-afdeling, goedgekeurd door Directie",
        "Phoenix Metals: EBD beschikbaar voor inzage door alle medewerkers"
    ], icon="📄")

    make_bullet_slide(prs, "Stofexplosie-mythen ontkracht", [
        "❌ 'Ons stof is niet brandbaar' → Laat testen! Veronderstellingen doden",
        "❌ 'Stof kan alleen exploderen in een gesloten vat' → Ook in gebouwen!",
        "❌ 'Een stofexplosie is altijd luid en zichtbaar' → Sommige smolderende processen",
        "❌ 'Zonder zichtbare stofwolk is er geen gevaar' → Onzichtbare deeltjes tellen mee",
        "❌ 'We hebben al jaren geen probleem' → Totdat het wél gebeurt",
        "✅ Laat testen, volg procedures, houd het schoon!"
    ], icon="🔍")

    make_bullet_slide(prs, "Wat te doen bij een stofexplosie?", [
        "1. Verlaat onmiddellijk het gebied via de dichtstbijzijnde vluchtroute",
        "2. Gebruik GEEN liften — neem de trap",
        "3. Meld bij de centrale meldpost (alarmknop indrukken)",
        "4. Verzamel op het verzamelpunt",
        "5. Bel 112 bij gewonden of brand",
        "6. Geef eerste hulp indien mogelijk en veilig",
        "7. NOOIT terugkeren zonder toestemming van de noodcoördinator"
    ], icon="🚨")

    make_bullet_slide(prs, "Continue verbetering — Jouw rol", [
        "Meld stofophoping direct bij je leidinggevende of HSE",
        "Volg het reinigingsprotocol — consequent, elke dag",
        "Doe suggesties voor verbetering van stofbeheersing",
        "Participeer in toolbox meetings over stofexplosiebewustzijn",
        "Ken de EBD en de zone-indeling van jouw werkplek",
        "Samen zorgen we voor een stofvrije en veilige werkplek!"
    ], icon="👷")

    make_table_slide(prs, "Explosieparameters — Referentiewaarden", ["Parameter", "Symbool", "Eenheid", "Relevantie"], [
        ["Kst-waarde", "Kst", "bar·m/s", "Bepaalt explosieklasse en venting-ontwerp"],
        ["Max. explosiedruk", "Pmax", "bar", "Ontwerpdruk apparatuur en ventiëring"],
        ["Min. ontstekingsenergie", "MIE", "mJ", "Ontstekingsbronnen beheersen"],
        ["Min. ontstekingstemperatuur", "MIT", "°C", "Hete oppervlakken beheersen"],
        ["LEL (onderste exp. limiet)", "LEL", "g/m³", "Minimale concentratie voor explosie"],
        ["Zelfontbrandingstemperatuur", "SIT", "°C", "Stoflaag-temperatuur beheersen"],
        ["Max. drukstijgingssnelheid", "(dP/dt)max", "bar/s", "Venting-capaciteit bepalen"]
    ], icon="📊")

    make_bullet_slide(prs, "Praktijktest — Zelftest vragen", [
        "1. Noem de 5 elementen van de stofexplosie-pentagon",
        "2. Wat is het verschil tussen St-1, St-2 en St-3?",
        "3. Welke ATEX-zone heeft de hoogste frequentie van stofwolken?",
        "4. Waarom mag je GEEN bezems gebruiken voor reiniging?",
        "5. Wat is het maximale toegestane stoflaag op constructies?",
        "6. Noem 3 ontstekingsbronnen in jouw werkomgeving",
        "7. Wat betekent 'secundaire explosie' en waarom is die gevaarlijker?"
    ], icon="❓")

    prs.save(path)
    print(f"✅ T09 extended: {len(prs.slides)} slides")

def extend_T10():
    """T10 has 25, need 10+ more"""
    path = os.path.join(OUT_DIR, "PM_EL_T10_REACH_CLP_Bewustzijn_Presentatie_v1.1.pptx")
    prs = Presentation(path)

    make_bullet_slide(prs, "REACH — Registratie in detail", [
        "Alle stoffen > 1 ton/jaar moeten geregistreerd zijn bij ECHA",
        "Registratiedossier bevat: identiteit, classificatie, gebruik, blootstellingsscenario's",
        "Joint submissions: meerdere registranten delen data (SIEF = Substance Information Exchange Forum)",
        "Phoenix Metals is downstream user — koopt geregistreerde stoffen in",
        "Verplichting: leverancier moet SDS en veiligheidsinformatie verstrekken",
        "Bij twijfel: check ECHA-website (echa.europa.eu) of neem contact op met leverancier"
    ], icon="📝")

    make_bullet_slide(prs, "REACH — Evaluatie en restricties", [
        "Evaluatie: ECHA beoordeelt dossiers op volledigheid en juistheid",
        "Substance evaluation: verdachte stoffen nader onderzocht (rollend programma)",
        "Restricties (Annex XVII): verbod of beperking op gebruik van bepaalde stoffen",
        "Voorbeelden: asbest (volledig verboden), chroom VI (beperkt), lood in verf (verboden)",
        "Phoenix Metals: controleer of gebruikte stoffen onder restricties vallen",
        "HSE houdt een restricties-register bij"
    ], icon="🔍")

    make_bullet_slide(prs, "CLP — Signaalwoorden", [
        "GEVAAR: voor ernstige gevaren (dodelijk, kankerverwekkend, bijtend)",
        "WAARSCHUWING: voor minder ernstige gevaren (irriterend, schadelijk)",
        "Slechts één signaalwoord per product (het ernstigste prevaleert)",
        "V₂O₅: GEVAAR (wege Repr. 1B en Eye Dam. 1)",
        "H₂SO₄: GEVAAR (wege Skin Corr. 1A)",
        "Al₂(SO₄)₃: WAARSCHUWING (wege Eye Irrit. 2)"
    ], icon="⚠️")

    make_bullet_slide(prs, "CLP — Etikettering in de praktijk", [
        "Verplicht op alle verpakkingen van gevaarlijke stoffen",
        "Minimale lettergrootte: 1,2 mm (verpakking ≤ 3 liter), 2 mm (> 3 liter)",
        "Pictogrammen: minimaal 1/20 van het etiketoppervlak",
        "H- en P-zinnen: volledig uitgeschreven, niet afkorten",
        "NUT: naam en adres van de verantwoordelijke marktdeelnemer",
        "Phoenix Metals: controleer bij ontvangst of etiketten compleet en leesbaar zijn"
    ], icon="🏷️")

    make_bullet_slide(prs, "SDS — Sectie 8 in detail (Blootstellingsbeheersing)", [
        "Beschrijft: grenswaarden (OEL's), blootstellingscontrole, PBM's",
        "Nationale grenswaarden: SER-lijst (Nederland), bron: SER.nl",
        "V₂O₅: MAC-waarde 0,05 mg/m³ (als V) — zeer lage grens!",
        "H₂SO₄: MAC-waarde 0,1 mg/m³ (indrukbaar aerosol)",
        "NaOH: geen specifieke MAC, maar algemeen irritatieniveau",
        "PBM-specificatie: exacte beschrijving van type, materiaal en norm"
    ], icon="🔬")

    make_bullet_slide(prs, "SDS — Sectie 4 in detail (Eerste hulp)", [
        "V₂O₅ inademing: verplaatsen naar frisse lucht, bij klachten arts raadplegen",
        "V₂O₅ huidcontact: afspoelen met veel water, besmette kleding uittrekken",
        "V₂O₅ oogcontact: 15 minuten spoelen met water, oogarts raadplegen",
        "H₂SO₄ huid: minimaal 15 min. spoelen, NIET neutraliseren, direct arts",
        "H₂SO₄ ogen: 15 min. spoelen, direct oogarts",
        "NaOH inslikken: NIET braken, mond spoelen, arts bellen"
    ], icon="🏥")

    make_bullet_slide(prs, "Substitutie — De REACH-route", [
        "REACH moedigt substitutie aan: vervang gevaarlijke stoffen door veiligere alternatieven",
        "Voor SVHC's: analyse van alternatieven VERPLICHT bij autorisatie-aanvraag",
        "Phoenix Metals: is er een alternatief voor V₂O₅ in het proces?",
        "Realiteit: vanadiumverwerking is de core business — volledige substitutie onwaarschijnlijk",
        "Maar: optimalisatie van het proces (minder blootstelling, emissie, afval) is altijd mogelijk",
        "HSE: houdt ontwikkelingen in de gaten via ECHA en brancheorganisaties"
    ], icon="🔄")

    make_bullet_slide(prs, "REACH/CLP en Seveso III — Koppeling", [
        "Seveso III gebruikt CLP-classificatie om drempelwaarden te bepalen",
        "V₂O₅ (Repr. 1B): valt onder Seveso categorie 'Giftig' (lage drempelwaarde)",
        "H₂SO₄ (Skin Corr. 1A): valt onder 'Bijtende stoffen'",
        "Gecombineerde drempelwaarde bepaling: alle Seveso-stoffen samen geteld",
        "Phoenix Metals: PlantOne IJmuiden en Rotterdam beide Seveso III",
        "REACH-compliance is een voorwaarde voor Seveso III compliance"
    ], icon="🏛️")

    make_bullet_slide(prs, "Communicatieplicht — Art. 33 REACH", [
        "Als een product > 0,1% SVHC bevat: INFORMATIEPPLICHT aan professionele afnemers",
        "Minimum: naam van de SVHC-stof, veilig gebruiksinformatie",
        "Binnen 45 dagen: informatie verstrekken aan consumenten op verzoek",
        "Phoenix Metals als producent: moet informatie verstrekken aan afnemers",
        "Phoenix Metals als afnemer: moet informatie ontvangen van leveranciers",
        "ECHA SCIP-database: informatie over SVHC's in artikelen"
    ], icon="📢")

    make_bullet_slide(prs, "Praktijktest — Zelftest vragen", [
        "1. Wat betekent REACH en wat is het doel?",
        "2. Hoeveel GHS-pictogrammen zijn er en hoe zien ze eruit?",
        "3. Wat is het verschil tussen H-zinnen en P-zinnen?",
        "4. Waarom is V₂O₅ een SVHC?",
        "5. Noem de 16 secties van een SDS",
        "6. Welke stof bij Phoenix Metals is geclassificeerd als Repr. 1B?",
        "7. Wat is het signaalwoord op een etiket met Skin Corr. 1A?"
    ], icon="❓")

    prs.save(path)
    print(f"✅ T10 extended: {len(prs.slides)} slides")

def extend_T11():
    """T11 has 30, need 10+ more"""
    path = os.path.join(OUT_DIR, "PM_EL_T11_Permit_to_Work_Presentatie_v1.1.pptx")
    prs = Presentation(path)

    make_bullet_slide(prs, "PtW — Soorten vergunningen", [
        "Algemene werkvergunning: standaard risicovolle werkzaamheden",
        "Hete werkzaamheden vergunning: lassen, slijpen, snijden (brandpreventie)",
        "Besloten ruimte vergunning: betreding van besloten ruimtes",
        "Elektrische werkvergunning: hoogspanning en laagspanning",
        "Graafvergunning: grondwerkzaamheden (kabels, leidingen)",
        "Complex PtW: combinatie van bovenstaande (bijv. onderhoud reactor)"
    ], icon="📋")

    make_bullet_slide(prs, "PtW — Levenscyclus", [
        "1. AANVRAAG: initiator vult PtW-formulier in",
        "2. BEoordeling: goedkeurder beoordeelt risico's en maatregelen",
        "3. GOEDKEURING: handtekening goedkeurder (na akkoord)",
        "4. COMMUNICATIE: toolbox meeting met alle uitvoerders",
        "5. UITVOERING: werkzaamheden starten volgens PtW",
        "6. MONITORING: tussentijdse checks (LMRA, supervisie)",
        "7. AFSLUITING: werkzaamheden klaar, PtW formeel gesloten",
        "8. EVALUATIE: lessen voor volgende keer"
    ], icon="🔄")

    make_bullet_slide(prs, "PtW — Verlenging en wijziging", [
        "PtW heeft een maximale geldigheidsduur (meestal 1 shift of 8 uur)",
        "Verlenging: goedekeuring vereist vóór afloop, NIET achteraf",
        "Wijziging in scope: NIEUW PtW vereist als werkzaamheden veranderen",
        "Shift-overdracht: formeel overdragen met nieuwe handtekeningen",
        "NOOIT een PtW laten verlopen zonder afsluiting of verlenging",
        "Weigereingsrecht: goedkeurder MAG weigeren bij onvoldoende maatregelen"
    ], icon="⏰")

    make_bullet_slide(prs, "TRA — Gevarenidentificatie checklist", [
        "✅ Fysieke gevaren: vallen, struikelen, slaan, snijden, beknelling",
        "✅ Chemische gevaren: blootstelling V₂O₅, H₂SO₄, NaOH, stofexplosie",
        "✅ Elektrische gevaren: spanning, statische elektriciteit",
        "✅ Thermische gevaren: hete oppervlakken, brand, koude",
        "✅ Mechanische gevaren: roterende delen, druk, vacuüm",
        "✅ Ergonomische gevaren: tillen, ongunstige werkhouding",
        "✅ Omgevingsfactoren: lawaai, trillingen, straling, weer"
    ], icon="🔍")

    make_bullet_slide(prs, "TRA — Tools en hulpmiddelen", [
        "TRA-formulier Phoenix Metals (digitaal via veiligheidsplatform)",
        "What-if methode: 'Wat als dit misgaat?' per werkstap",
        "Checklist gevaren per type (fysiek, chemisch, elektrisch, etc.)",
        "HI-waarden (Hazard Index) voor objectieve risicoscores",
        "Bow-tie analyse voor complexe risico's (bijv. stofexplosie)",
        "Historische data: eerdere incidenten en near-misses bij dezelfde taak"
    ], icon="🔧")

    make_bullet_slide(prs, "LOTO — Uitzonderingen en speciale situaties", [
        "Groeps-LOTO: meerdere medewerkers aan één installatie",
        "  → LOTO-box: alle individuele sloten in een box met één hoofdslo",
        "  → Supervisie: verantwoordelijke bewaart het hoofdslo",
        "Complex LOTO: meerdere energiebronnen, meerdere installatie-onderdelen",
        "  → LOTO-plan: schema met alle isolatiepunten",
        "Shift-overdracht LOTO: formeel overdragen met documentatie",
        "NOOIT: LOTO van een collega verwijderen (ALTIJD eigenaar!)"
    ], icon="🔐")

    make_bullet_slide(prs, "LOTO — Apparatuur en middelen", [
        "Persoonlijke sloten: uniek per medewerker, genummerd, 1 sleutel",
        "Tags: naam, datum, reden, contactgegeven",
        "Multi-lock hasp: stelt meerdere sloten toe op één isolatiepunt",
        "LOTO-box: voor groeps-LOTO met maximaal 12 sloten",
        "Blind flensen: voor chemische isolatie (tussen dubbele kleppen)",
        "Lockout-klemmen: voor elektrische schakelaars en zekeringen",
        "Statusbord: overzicht van alle actieve LOTO's per installatie"
    ], icon="🔧")

    make_bullet_slide(prs, "LMRA — Psychologische veiligheid", [
        "LMRA werkt ALLEEN in een cultuur van psychologische veiligheid",
        "Medewerkers moeten 'NEE' durven zeggen zonder angst voor repercussies",
        "Leidinggevende reactie bij 'NEE': 'Dank dat je het aangeeft, wat hebben we nodig?'",
        "NOOIT: 'We doen het toch', 'We hebben geen tijd', 'Ach, het valt wel mee'",
        "Stopwerkbevoegdheid: ELKE medewerker mag onveilig werk STOPPEN",
        "Phoenix Metals: no-blame cultuur = randvoorwaarde voor succes"
    ], icon="🤝")

    make_bullet_slide(prs, "Stopwerkbevoegdheid — Iedereen mag STOP zeggen", [
        "DEFINITIE: elke medewerker heeft het recht om onveilig werk te stoppen",
        "Gebaseerd op: Arbowet medewerkingsplicht + ISO 45001",
        "Procedure: observeer gevaar → spreek aan → stop werkzaamheden → meld",
        "Geen consequenties voor het gebruiken van stopwerkbevoegdheid",
        "Wel: rapportage en follow-up door leidinggevende en HSE",
        "Phoenix Metals: 'If in doubt, STOP!' — het is jouw recht en plicht"
    ], icon="🛑")

    make_bullet_slide(prs, "PtW bij aannemers — Extra aandachtspunten", [
        "Aannemers MOETEN instructie krijgen over Phoenix Metals PtW-systeem",
        "Geldige VCA* of VCA** vereist voor alle aannemers",
        "Aannemer-LOTO: eigen sloten of Phoenix Metals-sloten (afspraken!)",
        "Begeleiding: Phoenix Metals-buddy bij alle aannemerswerkzaamheden",
        "Taak: toezicht op naleving PtW door aannemers = verantwoordelijkheid opdrachtgever",
        "Evaluatie: na afloop beoordeling van aannemer-veiligheidsprestaties"
    ], icon="👷")

    make_bullet_slide(prs, "Praktijktest — Zelftest vragen", [
        "1. Noem de 3 rollen in het PtW-proces en hun verantwoordelijkheden",
        "2. Wat zijn de 8 stappen van de LOTO-procedure?",
        "3. Wat zijn de 5 LMRA-vragen?",
        "4. Wanneer is een TRA verplicht?",
        "5. Wat is de hiërarchie van beheersmaatregelen (boven naar beneden)?",
        "6. Mag je een collega's LOTO-slot verwijderen? Waarom (niet)?",
        "7. Wat doe je als je bij een LMRA één keer 'NEE' antwoordt?"
    ], icon="❓")

    prs.save(path)
    print(f"✅ T11 extended: {len(prs.slides)} slides")

def extend_T12():
    """T12 has 24, need 11+ more"""
    path = os.path.join(OUT_DIR, "PM_EL_T12_PBM_Beleid_en_Gebruik_Presentatie_v1.1.pptx")
    prs = Presentation(path)

    make_bullet_slide(prs, "Wetgeving — Detail Arbobesluit PBM's", [
        "Art. 3.6a: werkgever beoordeelt welke PBM's nodig zijn",
        "Art. 3.6b: werkgever stelt PBM's kosteloos ter beschikking",
        "Art. 3.6c: werknemer is VERPLICHT om PBM's correct te gebruiken",
        "Art. 3.6d: werkgever zorgt voor onderhoud en vervanging",
        "Art. 3.6e: voorlichting en instructie over PBM-gebruik",
        "Bij overtreding: both werkgever (levering) en werknemer (gebruik) kunnen worden beboet"
    ], icon="📋")

    make_bullet_slide(prs, "CE-markering op PBM's — Wat betekent het?", [
        "CE-markering = product voldoet aan EU-veiligheidseisen",
        "PBM's vallen onder de EU-PBM-verordening (EU) 2016/425",
        "Categorie I: eenvoudig ontwerp (zelfcertificering toegestaan)",
        "Categorie II: medium risico (notified body betrokken)",
        "Categorie III: complex/hoog risico (notified body + jaarlijkse audit)",
        "ALTIJD controleren: CE + type-certificaat + gebruiksaanwijzing"
    ], icon="🏛️")

    make_bullet_slide(prs, "Gezichtsbeschermer — Faceshield", [
        "EN 166 classificatie: minimaal type 3 (vloeistofspatten) of 9 (gesmolten metaal)",
        "VERPLICHT bij: H₂SO₄, NaOH hantering ( bovenop veiligheidsbril!)",
        "Nadeel: beperkt zichtdoorlatendheid — belangrijk bij nauwkeurig werk",
        "Vervanging: bij krassen, troebelheid, beschadiging frame",
        "Gebruik: faceshield OPZETTEN na werkzaamheden (NIET op het voorhoofd dragen)",
        "Phoenix Metals: gezichtsbeschermer standaard bij H₂SO₄-pompen en NaOH-dosing"
    ], icon="🥽")

    make_bullet_slide(prs, "Adembescherming — Pasvorm en lekdichtheid", [
        "Halfmasker MOET goed aansluiten op het gezicht",
        "Baard/stoppels = lek! — gladgeschoren gezicht VERPLICHT bij maskergebruik",
        "Neponderzoek (fit test): jaarlijks verplicht voor halfmasker-gebruikers",
        "Positieve druktest: hand over uitlaatklep → masker bolt op = goed",
        "Negatieve druktest: hand over inlaat → masker zuigt aan = goed",
        "FFP-maskers: niet herbruikbaar — na 8 uur of bij verzadiging vervangen"
    ], icon="😷")

    make_bullet_slide(prs, "Adembescherming — Filterkeuze", [
        "P1/P2/P3: deeltjesfilters (stof, rook, nevel)",
        "P1 = 80%, P2 = 94%, P3 = 99,95% filtratie",
        "V₂O₅: ALTIJD P3 (of FFP3) — géén uitzonderingen",
        "A/B/E/K: gasfilters",
        "A = organische gassen/dampen, B = anorganische gassen",
        "E = zure gassen (H₂SO₄-dampen!), K = ammonia en aminen",
        "Combinatiefilters: A2P3 = zowel gassen als deeltjes"
    ], icon="🔧")

    make_bullet_slide(prs, "Handschoenen — Specifieke keuze per stof", [
        "V₂O₅ (vast poeder): nitril (EN 374), 0,3 mm minimaal, wegwerp",
        "V₂O₅ (oplossing): nitril of butyl, 0,5 mm, langere mouw",
        "H₂SO₄ geconcentreerd: butyl of neopreen, 0,7 mm, min. 30 min doorbraaktijd",
        "H₂SO₄ verdund: nitril of PVC, 0,4 mm",
        "NaOH: neopreen of nitril, 0,5 mm",
        "Al₂(SO₄)₃: nitril, 0,3 mm (standaard lab handschoen)",
        "ALTIJD: penetratietijd checken in leveranciergegevens!"
    ], icon="🧤")

    make_bullet_slide(prs, "Valbeveiliging — EN 361/358", [
        "VERPLICHT bij werken op hoogte > 2,5 meter zonder permanente bescherming",
        "Harnas (EN 361): volledig lichaamsharnas met rugbevestiging",
        "Valstopapparaat (EN 362): blokkeert de val binnen centimeters",
        "Lifeline/systeem (EN 355): energy absorber reduceert valkracht",
        "Ankerpunt: minimaal 10 kN (1000 kg) draagvermogen",
        "Inspectie: vóór elk gebruik, jaarlijks formele keuring door bevoegd persoon"
    ], icon="🧗")

    make_bullet_slide(prs, "PBM's bij specifieke taken — Phoenix Metals", [
        "Monstername V₂O₅: FFP3 + nitril + veiligheidsbril + overall",
        "Reiniging filterinstallatie: FFP3 + nitril + veiligheidsbril + overall Type 5 + gezichtsbeschermer",
        "H₂SO₅ bijvullen: butyl handschoenen + gezichtsbeschermer + overall Type 4 + veiligheidsschoenen S5",
        "NaOH doseren: neopreen handschoenen + gezichtsbeschermer + overall Type 4",
        "Laboratorium werk: veiligheidsbril + nitril + labjas + FFP2 (indien stof)",
        "Heftruck besturen: veiligheidsschoenen + veiligheidsbril (geen FFP op de truck!)"
    ], icon="📋")

    make_bullet_slide(prs, "PBM-tekorten en noodmaatregelen", [
        "Bij PBM-tekort: werkzaamheden STOPPEN — veiligheid gaat altijd voor",
        "Alternatieven mogen ALLEEN als ze dezelfde of betere bescherming bieden",
        "NOOIT inferieure PBM's accepteren 'omdat er niets anders is'",
        "Noodinkoop: HSE heeft een lijst met alternatieve leveranciers",
        "Communicatie: bij tekort direct HSE informeren — zij regelen vervanging",
        "Voorkomen: PBM-voorraad minimaal 2 weken buffer aanhouden"
    ], icon="⚠️")

    make_bullet_slide(prs, "PBM-training en familiarisatie", [
        "Nieuwe medewerkers: PBM-training bij introductie (Company Induction)",
        "Jaarlijkse hertraining: PBM-gebruik en onderhoud",
        "Praktijkoefening: aantrekken en uittrekken onder supervisie",
        "Fit-test: jaarlijks voor adembescherming",
        "VCA: PBM-kennis onderdeel van het examen",
        "Phoenix Metals: PBM-training gecombineerd met taak-specifieke training (TR-302/303 serie)"
    ], icon="🎓")

    make_bullet_slide(prs, "Praktijktest — Zelftest vragen", [
        "1. Waarom zijn PBM's het LAATSTE middel in de hiërarchie?",
        "2. Welk FFP-niveau is VERPLICHT bij V₂O₅-blootstelling?",
        "3. Welke handschoenen zijn geschikt voor H₂SO₄?",
        "4. Wat is de juiste volgorde voor het aantrekken van PBM's?",
        "5. Hoe verwijder je besmette handschoenen zonder huidcontact?",
        "6. Welke norm geldt voor veiligheidsschoenen?",
        "7. Wanneer moet een FFP-masker worden vervangen?"
    ], icon="❓")

    prs.save(path)
    print(f"✅ T12 extended: {len(prs.slides)} slides")

def extend_T13():
    """T13 has 25, need 10+ more"""
    path = os.path.join(OUT_DIR, "PM_EL_T13_Safety_Observation_Process_Presentatie_v1.1.pptx")
    prs = Presentation(path)

    make_bullet_slide(prs, "Heinrich-piramide — De basis", [
        "1 DODELIJK ONGEVAL",
        "30 MELDBARE ONGEVALLEN (met letsel)",
        "300 NEAR-MISSES (zonder letsel, maar potentieel gevaarlijk)",
        "3.000 UNSAFE ACTS (gedrag dat tot een incident KAN leiden)",
        "300.000 OBSERVATIEKANSEN = KANSEN OM TE LEREN EN TE VERBETEREN",
        "Investeer in de basis (observaties) = voorkom de top (dodelijke ongevallen)",
        "Phoenix Metals doel: 10+ observaties per week per 100 medewerkers"
    ], icon="🔺")

    make_bullet_slide(prs, "Observatie voorbereiding — Voordat je de vloer opgaat", [
        "1. Bepaal het observatiegebied en de focus (bijv. PBM's, LOTO, reiniging)",
        "2. Ken de relevante procedures en standaarden",
        "3. Bereid je voor: observation card/tablet, pen, PBM's zelf!",
        "4. Zorg voor een open houding — je komt om te LEREN, niet om te STRAFFEN",
        "5. Plan voldoende tijd (minimaal 15-30 minuten per observatie)",
        "6. Informeer het team dat je observaties uitvoert (geen verrassing!)"
    ], icon="📅")

    make_bullet_slide(prs, "Observatie uitvoeren — Tijdens de observatie", [
        "1. Nader langzaam — geen verstoring van het werk",
        "2. Observeer 5-10 minuten voordat je actie onderneemt",
        "3. Let op: taak, persoon, omgeving, gereedschap, procedure",
        "4. Noteer ZOWEL positieve als corrigerende observaties",
        "5. Spreek de persoon aan — stel vragen, luister actief",
        "6. Geef concrete, specifieke feedback",
        "7. Bedank de persoon voor zijn/haar tijd en medewerking"
    ], icon="👁️")

    make_bullet_slide(prs, "Observatie na afloop — Follow-up", [
        "1. Vul de observation card volledig in (direct na de observatie!)",
        "2. Noteer: datum, tijd, locatie, categorie, beschrijving, actie",
        "3. Lever de kaart in bij HSE of registreer digitaal",
        "4. Indien corrigerende actie nodig: afspraken maken en opvolgen",
        "5. Controleer na 1 week: is de actie uitgevoerd?",
        "6. Deel positieve observaties in teamvergaderingen (good practice!)"
    ], icon="✅")

    make_bullet_slide(prs, "Veilige en onveilige gedragingen — Taxonomie", [
        "VEILIG GEDRAG: volgt procedures, draagt PBM's, communiceert, rapporteert",
        "AT-RISK GEDRAG: kleine afwijkingen, kortere route, routine-overschatting",
        "ONVEILIG GEDRAG: bewust negeren van procedures, risico's nemen",
        "Meeste observaties vallen in de 'at-risk' categorie — dit is waar de winst zit!",
        "At-risk → veilig = culturale verschuiving = langdurige impact",
        "Phoenix Metals: focus op at-risk gedragingen, niet wachten tot het onveilig is"
    ], icon="📊")

    make_bullet_slide(prs, "Barrières voor observatiecultuur — En hoe ze te doorbreken", [
        "Barrière: 'Geen tijd' → Oplossing: plan observaties in de agenda",
        "Barrière: 'Collega's vinden het vervelend' → Oplossing: uitleggen WAAROM, positieve benadering",
        "Barrière: 'Ik weet niet wat ik moet observeren' → Oplossing: observatiekaart gebruiken",
        "Barrière: 'Het leidt toch tot niets' → Oplossing: toon resultaten, deel successen",
        "Barrière: 'Straks word ik gestraft' → Oplossing: no-blame expliciet maken en LEREN",
        "Sleutel: MT-betrokkenheid en zichtbaarheid op de vloer"
    ], icon="🚧")

    make_bullet_slide(prs, "Leading vs Lagging indicators", [
        "LEADING (proactief): aantal observaties, aantal toolbox meetings, training-uren",
        "  → Voorspellen toekomstige veiligheidsprestaties",
        "LAGGING (reactief): TRIR, AFIR, aantal ongevallen, ziektedagen",
        "  → Meten wat al is gebeurd",
        "Observaties zijn LEADING indicators: ze meten wat je DOET om veiligheid te bevorderen",
        "Phoenix Metals KPI's: observatiegraad (leading) gekoppeld aan TRIR (lagging)",
        "Doel: dalende TRIR door stijgende observatiegraad"
    ], icon="📈")

    make_bullet_slide(prs, "Observaties en MoC — De verbinding", [
        "Bij Management of Change (MoC): verhoogde observatiefrequentie!",
        "Nieuwe procedure? → observeer of deze correct wordt gevolgd",
        "Nieuwe apparatuur? → observeer of medewerkers correct omgaan met de risico's",
        "Nieuwe medewerkers? → observeer of zij de procedures begrijpen",
        "Na incidenten? → observeer of corrigerende maatregelen werken",
        "Observaties = de verbindende factor in het veiligheidsmanagementsysteem"
    ], icon="🔗")

    make_bullet_slide(prs, "Digitale observatie-tools", [
        "Phoenix Metals: digitaal observatieplatform (via veiligheidsmanagementsysteem)",
        "Voordelen: real-time data, automatische trending, dashboarding",
        "Mobiele app: observaties direct op de vloer registreren",
        "Foto-functie: visuele ondersteuning van observaties (met toestemming!)",
        "Automatische rapportages: maandelijkse trending naar MT",
        "Data-privacy: observaties zijn anoniem verwerkt (GDPR-compliant)"
    ], icon="📱")

    make_bullet_slide(prs, "Safety culture ladder — Niveaus", [
        "Niveau 1: PATHOLOGISCH — 'We geven niets om veiligheid'",
        "Niveau 2: REACTIEF — 'We nemen actie NA een incident'",
        "Niveau 3: BEREKENEND — 'We hebben systemen, maar volgen ze niet altijd'",
        "Niveau 4: PROACTIEF — 'We zoeken actief naar verbetering' ← PHOENIX METALS DOEL",
        "Niveau 5: GENEREREND — 'Veiligheid zit in ons DNA, we leren van alles'",
        "Observaties zijn het voertuig om van niveau 3 naar 4 en 5 te komen"
    ], icon="🪜")

    make_bullet_slide(prs, "Praktijktest — Zelftest vragen", [
        "1. Wat is het verschil tussen een observatie en een inspectie?",
        "2. Noem de 5 vragen van de STOP-methode",
        "3. Waarom is de positieve ratio (70/30) belangrijk?",
        "4. Wat is een unsafe act en wat is een unsafe condition?",
        "5. Hoe geef je effectieve corrigerende feedback?",
        "6. Wat is de Heinrich-piramide en wat betekent deze voor observaties?",
        "7. Wat is het verschil tussen leading en lagging indicators?"
    ], icon="❓")

    prs.save(path)
    print(f"✅ T13 extended: {len(prs.slides)} slides")

def extend_T14():
    """T14 has 28, need 7+ more"""
    path = os.path.join(OUT_DIR, "PM_EL_T14_Alcohol_Drugs_Zero_Tolerance_Presentatie_v1.1.pptx")
    prs = Presentation(path)

    make_bullet_slide(prs, "Alcohol en het lichaam — Hoe werkt het?", [
        "Alcohol wordt opgenomen via maag en dunne darm (20% via maag, 80% via darm)",
        "Bereikt de hersenen binnen 5 minuten",
        "Maximale bloedspiegel na 30-90 minuten",
        "Afbraak: uitsluitend door de lever, met constante snelheid (~1 glas/uur)",
        "Koffie, koude douche, bewegen: versnellen NIET de afbraak!",
        "Enige oplossing: TIJD — gemiddeld 1 uur per standaardglas"
    ], icon="🧬")

    make_bullet_slide(prs, "Cannabis en het lichaam — Hoe werkt het?", [
        "THC bindt aan cannabinoïde-receptoren in de hersenen",
        "Effecten: euforie, ontspanning, maar ook: vertraagde reactie, geheugenverlies, paranoia",
        "Rookt: effect binnen minuten, piek na 15-30 minuten, werkingsduur 2-4 uur",
        "Eet (edibles): effect na 1-2 uur, werkingsduur tot 8 uur",
        "THC hoopt zich op in vetweefsel: dagen tot weken aantoonbaar",
        "Chronisch gebruik: cumulatieve effecten op cognitie en motivatie"
    ], icon="🌿")

    make_bullet_slide(prs, "Nieuwe psychoactieve stoffen (NPS)", [
        "Ook wel 'designer drugs' of 'smart drugs' genoemd",
        "Chemisch gemodificeerde versies van bestaande drugs",
        "Vaak verkocht als 'badzout', 'luchverfrisser', 'onderzoekschemicaliën'",
        "Onvoorspelbare effecten — nooit getest op mensen!",
        "Voorbeelden: synthetische cannabinoïden (Spice), cathinones (meow-meow)",
        "Phoenix Metals beleid: NPS vallen VOLLEDIG onder het zero-tolerance beleid"
    ], icon="⚗️")

    make_bullet_slide(prs, "Medicatie en veilig werken — Praktische regels", [
        "MELD medicatiegebruik aan de bedrijfsarts (NIET aan de leidinggevende!)",
        "De bedrijfsarts beoordeelt of je veilig kunt werken met de medicatie",
        "Mogelijke aanpassingen: andere taak, kortere shift, thuiswerk",
        "Privacy: de leidinggevende wordt alleen geïnformeerd over 'kan/niet kan werken'",
        "NOOIT zelf beslissen: 'Ik voel niks, dus ik kan werken' — laat het beoordelen",
        "Oude medicatie: check bijsluiter voor bijwerkingen (duizeligheid, slaperigheid)"
    ], icon="💊")

    make_bullet_slide(prs, "Pre-employment screening", [
        "Standaard drugstest bij aanname (na akkoord van de kandidaat)",
        "Speeksel- of urinetest, afhankelijk van beleid",
        "Positieve test = geen aanname (geen arbeidsovereenkomst)",
        "Verklaring: kandidaat tekent informed consent vooraf",
        "Geldigheidsduur: resultaat geldig voor 1 jaar (bij jaarcontract)",
        "Phoenix Metals: pre-employment testing is onderdeel van het VBS-element 'Bevoegdheid'"
    ], icon="📋")

    make_bullet_slide(prs, "Random testing — Hoe werkt het?", [
        "Steekproefsgewijs: willekeurige selectie van medewerkers",
        "Frequentie: minimaal 2x per jaar, maximaal 4x per jaar",
        "Anoniem: geen gerichte testen (geen discriminatie!)",
        "Percentage: 10-25% van het personeel per testronde",
        "Procedure: direct na aankondiging testen (geen tijd om 'schoon' te worden)",
        "Weigering = positieve test = consequenties"
    ], icon="🎲")

    make_bullet_slide(prs, "Arbeidsrechtelijke aspecten", [
        "Zero-tolerance beleid moet opgenomen zijn in arbeidsovereenkomst of bedrijfsreglement",
        "Medewerker moet het beleid hebben geaccepteerd (handtekening bij indiensttreding)",
        "Ontslag bij tweede overtreding: moet juridisch houdbaar zijn (at-groot-beleid)",
        "Zelfmelding: mag NIET leiden tot ontslag (stimuleert hulpvraag)",
        "Privacy: testresultaten zijn medische gegevens (AVG/GDPR van toepassing)",
        "Advies: raadpleeg altijd arbeidsjurist bij complexe gevallen"
    ], icon="⚖️")

    make_bullet_slide(prs, "Casuïstiek — Voorbeeld 3: Voorgeschreven medicatie", [
        "Situatie: Operator krijgt oxycodon voorgeschreven na tandheelkundige ingreep",
        "De operator meldt zich ziek en blijft thuis",
        "Na 3 dagen meldt hij zich beter, maar gebruikt nog steeds oxycodon",
        "Tijdens random test: positief op opioïden",
        "Oordeel: operator had medicatie MOETEN melden bij bedrijfsarts",
        "Uitspraak: coaching en verwijzing bedrijfsarts (eerste keer, geen opzet)"
    ], icon="📋")

    make_bullet_slide(prs, "Casuïstiek — Voorbeeld 4: Het vrijdagmiddag-biertje", [
        "Situatie: Vrijdagmiddag, het team gaat na het werk een biertje drinken",
        "Eén medewerker heeft zaterdagochtend een vroege shift (06:00)",
        "Hij drinkt 4 biertjes (uit tot 23:00)",
        "Zaterdag 06:00: bloedspiegel schatting ≈ 0,0-0,2‰ (technisch onder limiet)",
        "MAAR: kater-effect = vermoeidheid, concentratieverlies, trage reactie",
        "Les: alcohol tot 4 uur vóór de shift = onverantwoord, ook als de bloedspiegel 0,0 is"
    ], icon="📋")

    make_bullet_slide(prs, "Ondersteuning en preventie — Phoenix Metals aanpak", [
        "Voorlichting: jaarlijkse training alcohol & drugs (deze training!)",
        "EAP (Employee Assistance Programme): anoniem hulplijn 24/7",
        "Bedrijfsarts: spreekuur wekelijks, vertrouwelijk",
        "Team meetings: open discussie over middelengebruik (taboes doorbreken)",
        "Leidinggevenden: getraind in signalen herkennen en gesprekstechnieken",
        "Samenwerking: regionaal verslavingszorg-netwerk voor snelle doorverwijzing"
    ], icon="🤝")

    make_bullet_slide(prs, "Praktijktest — Zelftest vragen", [
        "1. Wat is het zero-tolerance beleid van Phoenix Metals?",
        "2. Hoeveel glazen alcohol kan de lever per uur afbreken?",
        "3. Welke 3 soorten testing kent Phoenix Metals?",
        "4. Wat zijn de consequenties bij een positieve test (eerste keer)?",
        "5. Hoe werkt zelfmelding en wat zijn de voordelen?",
        "6. Welke hulpverlening is beschikbaar?",
        "7. Waarom is een kater ook een veiligheidsrisico?"
    ], icon="❓")

    prs.save(path)
    print(f"✅ T14 extended: {len(prs.slides)} slides")

# Run all extensions
extend_T08()
extend_T09()
extend_T10()
extend_T11()
extend_T12()
extend_T13()
extend_T14()
print("\n=== ALLE EXTENSIES VOLTOOID ===")
