#!/usr/bin/env python3
"""Generate Batch 2 PPTX v1.1 — T08-T14 for Phoenix Metals eLearning."""

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, MSO_ANCHOR
from pptx.enum.shapes import MSO_SHAPE
import os

# Constants
PRIMARY = RGBColor(0x00, 0x33, 0x66)
TEXT_DARK = RGBColor(0x1F, 0x29, 0x37)
WHITE = RGBColor(0xFF, 0xFF, 0xFF)
BORDER = RGBColor(0xE5, 0xE7, 0xEB)
ROW_ALT = RGBColor(0xF3, 0xF4, 0xF6)
ACCENT_RED = RGBColor(0xDC, 0x26, 0x26)
ACCENT_GREEN = RGBColor(0x16, 0xA3, 0x4A)
ACCENT_ORANGE = RGBColor(0xF5, 0x9E, 0x0B)

LOGO_PATH = "/root/projects/jg/assets/branding/jvg-logo-white-medium.png"
OUT_DIR = "/root/projects/jg/2026-PM-eLearning/deliverables"
FOOTER_TEXT = "JvG Consultancy | Safety • Governance • Advisory | © 2026"

SLIDE_WIDTH = Inches(13.333)
SLIDE_HEIGHT = Inches(7.5)

def set_slide_bg(slide, color):
    bg = slide.background
    fill = bg.fill
    fill.solid()
    fill.fore_color.rgb = color

def add_header_bar(slide):
    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()
    return shape

def add_header_text(slide, text):
    add_header_bar(slide)
    txBox = slide.shapes.add_textbox(Inches(0.5), Inches(0.1), Inches(12), Inches(0.6))
    tf = txBox.text_frame
    p = tf.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))
    tf = txBox.text_frame
    p = tf.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 add_content_text(slide, text, left=0.7, top=1.1, width=11.5, height=5.5, size=16, bold=False):
    txBox = slide.shapes.add_textbox(Inches(left), Inches(top), Inches(width), Inches(height))
    tf = txBox.text_frame
    tf.word_wrap = True
    lines = text.split('\n')
    for i, line in enumerate(lines):
        if i == 0:
            p = tf.paragraphs[0]
        else:
            p = tf.add_paragraph()
        p.text = line
        p.font.size = Pt(size)
        p.font.color.rgb = TEXT_DARK
        p.font.name = "Calibri"
        p.font.bold = bold
        p.space_after = Pt(4)
    return tf

def add_bullet_slide(slide, title, bullets, icon=""):
    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)

def add_table(slide, headers, rows, top=1.2):
    ncols = len(headers)
    nrows = len(rows) + 1
    left = Inches(0.7)
    width = Inches(11.5)
    row_h = Inches(0.45)
    height = row_h * nrows
    table_shape = slide.shapes.add_table(nrows, ncols, left, Inches(top), width, height)
    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_cover(prs, title, code, version="1.1"):
    slide = prs.slides.add_slide(prs.slide_layouts[6])  # blank
    set_slide_bg(slide, PRIMARY)
    # Title
    txBox = slide.shapes.add_textbox(Inches(1), Inches(1.5), Inches(11), Inches(2))
    tf = txBox.text_frame
    p = tf.paragraphs[0]
    p.text = title
    p.font.size = Pt(36)
    p.font.color.rgb = WHITE
    p.font.bold = True
    p.font.name = "Calibri"
    # Subtitle
    txBox2 = slide.shapes.add_textbox(Inches(1), Inches(3.8), Inches(11), Inches(1.5))
    tf2 = txBox2.text_frame
    lines = [f"Phoenix Metals B.V. — eLearning Training",
             f"Trainingcode: {code}  |  Versie: {version}  |  Datum: 29 april 2026",
             f"Auteur: JvG Consultancy  |  Status: Goedgekeurd"]
    for i, line in enumerate(lines):
        p = tf2.paragraphs[0] if i == 0 else tf2.add_paragraph()
        p.text = line
        p.font.size = Pt(16)
        p.font.color.rgb = RGBColor(0xCC, 0xDD, 0xEE)
        p.font.name = "Calibri"
        p.space_after = Pt(4)
    # Logo
    if os.path.exists(LOGO_PATH):
        slide.shapes.add_picture(LOGO_PATH, Inches(10.5), Inches(5.5), Inches(1.8), Inches(1.6))

def make_docinfo(prs, title, code, doelgroep, doc_type="Presentatie"):
    slide = prs.slides.add_slide(prs.slide_layouts[6])
    add_header_text(slide, "📋  Documentinformatie")
    add_footer(slide)
    add_table(slide,
        ["Veld", "Waarde"],
        [["Project", "Phoenix Metals B.V. — eLearning Programma"],
         ["Training", title],
         ["Code", code],
         ["Versie", "1.1"],
         ["Datum", "29 april 2026"],
         ["Auteur", "JvG Consultancy"],
         ["Doelgroep", doelgroep],
         ["Type", doc_type],
         ["Status", "Goedgekeurd"]],
        top=1.2)

def make_slide(prs, title, bullets, icon=""):
    slide = prs.slides.add_slide(prs.slide_layouts[6])
    add_bullet_slide(slide, title, bullets, icon)
    return slide

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

# ============================================================
# T08: Statische Elektriciteit
# ============================================================
def gen_T08():
    prs = Presentation()
    prs.slide_width = SLIDE_WIDTH
    prs.slide_height = SLIDE_HEIGHT
    code = "TR-302-04"
    title = "Statische Elektriciteit"
    doelgroep = "Operatoren, technici, HSE"

    make_cover(prs, title, code)
    make_docinfo(prs, title, code, doelgroep)

    # Leerdoelen
    make_slide(prs, "Leerdoelen", [
        "Je kunt uitleggen hoe statische elektriciteit ontstaat bij industriële processen",
        "Je herkent de gevaren van statische ontlading als ontstekingsbron bij stofexplosies",
        "Je kunt de juiste aardings- en equipotentiaalmaatregelen benoemen",
        "Je kent de eisen voor antistatische kleding en ATEX-apparatuur",
        "Je kunt een bindingscontrole uitvoeren bij Phoenix Metals",
        "Je kent de Phoenix Metals-specifieke risico's bij vanadiumverwerking en stoftransport"
    ], icon="🎯")

    make_slide(prs, "Waarom deze training?", [
        "Statische ontlading is een van de meest onderschatte ontstekingsbronnen in de procesindustrie",
        "Bij stoftransport van V₂O₅ en staalslakkenmeel is het explosierisico aanzienlijk",
        "Seveso III-inrichtingen vereisen specifieke maatregelen tegen elektrostatische ontlading",
        "Een enkele vonk kan een stofexplosie veroorzaken met fatale gevolgen",
        "In 2023 waren statische ontladingen de oorzaak van ~15% van alle stofexplosies in de EU"
    ], icon="⚠️")

    # Context
    make_slide(prs, "Wetgevingskader", [
        "ATEX 137/1999/EG — Veiligheid op het werk in explosiegevaarlijke atmosferen",
        "ATEX 114/2014/EU — Apparatuur voor explosiegevaarlijke ruimten",
        "Arbobesluit artikelen 3.4e en 3.5 — Explosieve atmosferen",
        "NPR 7910 — Risico-inventarisatie en -evaluatie explosiegevaar (RI&E-E)",
        "IEC 60079-32-1 — Elektrostatische gevaren, richtlijnen",
        "EN 13463-1 — Niet-elektrische apparatuur voor explosiegevaarlijke ruimten",
        "PGS 15 — Opslag gevaarlijke stoffen (van toepassing bij Phoenix Metals)"
    ], icon="📋")

    make_slide(prs, "Statistieken en incidenten", [
        "~200 stofexplosies per jaar in Europa, waarvan ~15% door statische ontlading",
        "Gemiddeld 10 dodelijke slachtoffers per jaar in de EU door stofexplosies",
        "Metaalpoeders (zoals vanadium) behoren tot de hoogste explosieklassen (Kst > 300)",
        "De meeste incidenten hadden voorkomen kunnen worden met adequate aarding",
        "Imperial Sugar (2008, VS): 14 doden door stofexplosie — statische ontlading als oorzaak"
    ], icon="📊")

    # Theorie
    make_slide(prs, "CONCEPT: Wat is statische elektriciteit?", [
        "Ophoping van elektrische lading op het oppervlak van een materiaal",
        "Ontstaat door wrijving, scheiding of stroming van materialen (tribo-elektrisch effect)",
        "Elektronen worden overgedragen tussen materialen met verschillende elektronenaffiniteit",
        "Het resultaat: één materiaal wordt positief geladen, het andere negatief",
        "De lading blijft 'steken' tot een ontlading plaatsvindt (vonk, borstelontlading, etc.)"
    ], icon="⚡")

    make_slide(prs, "UITLEG: Het tribo-elektrisch effect", [
        "Wrijving tussen twee materialen veroorzaakt elektronoverdracht",
        "De tribo-elektrische reeks rangschikt materialen naar hun neiging om elektronen af te staan of op te nemen",
        "Voorbeelden: kunststof tegen metaal, poeder door buizen, vloeistof door slangen",
        "Contact en scheiding (niet alleen wrijving) is voldoende voor ladingsopbouw",
        "Groter oppervlak + hogere snelheid = meer ladingsopbouw"
    ], icon="📖")

    make_slide(prs, "VOORBEELD: Statische lading bij Phoenix Metals", [
        "V₂O₅-poeder transport door pneumatische leidingen → sterke ladingsopbouw",
        "Staalslakkenmeel op transportbanden → wrijving tegen rubber bekleding",
        "Filterinstallaties: poeder langs filterzakken → lading op filtermateriaal",
        "Vultorens: stortpoeder neerdaalt → lading door wrijving met lucht",
        "Big-bag vullen/ledigen → ladingsopbouw op kunststof big-bag"
    ], icon="🔥")

    make_slide(prs, "VALKUIL: Veelgemaakte fouten", [
        "Aarding vergeten bij gebruik van niet-geleidende slangen/buizen",
        "Aanname dat kunststof containers 'veilig' zijn (ze zijn juist gevaarlijk!)",
        "Geen equipotentiaalverbinding tussen verschillende metalen onderdelen",
        "Antistatische kleding dragen maar niet op de juiste manier aarden",
        "Gekozen materialen niet compatibel met ATEX-zone"
    ], icon="❌")

    make_slide(prs, "Soorten statische ontlading", [
        "Vonkontlading (spark) — tussen twee geleiders, hoge energie",
        "Borstelontlading (brush) — tussen geleider en niet-geleider, matige energie",
        "Propagating brush discharge — hoge energie, zeer gevaarlijk bij coatings/films",
        "Korona-ontlading — laag energieniveau, maar kan brandbare gassen ontsteken",
        "Cone discharge — bij vullen van silo's met poeder, relevant voor Phoenix Metals!"
    ], icon="⚡")

    make_table_slide(prs, "Energie van ontladingstypen", ["Type ontlading", "Typisch energieniveau", "Ontstekingsrisico"], [
        ["Vonkontlading", "> 1 mJ tot > 1000 mJ", "Zeer hoog — ontsteekt gassen én stof"],
        ["Borstelontlading", "~1-4 mJ", "Matig — ontsteekt gassen, stof soms"],
        ["Propagating brush", "> 10 mJ", "Zeer hoog"],
        ["Korona-ontlading", "< 1 mJ", "Laag — soms gasontsteking"],
        ["Cone discharge", "~1-10 mJ", "Hoog bij stof in silo's"]
    ], icon="📊")

    make_slide(prs, "Gevaren bij stofexplosies", [
        "Statische vonk kan brandbaar stof wolk doen ontbranden",
        "Minimale ontstekingsenergie (MIE) voor metaalpoeders kan < 1 mJ zijn",
        "V₂O₅-stof: fijn verdeeld, potentieel explosief bij voldoende concentratie",
        "Secundaire explosies: primaire explosie werkt stof op → kettingreactie",
        "Drukopbouw in gesloten ruimten → structurele schade, dakverlies"
    ], icon="☠️")

    make_slide(prs, "Aarding en equipotentiaal — Basisprincipes", [
        "Aarding: alle geleidende delen verbinden met aarde (R < 10 Ω)",
        "Equipotentiaal: alle metalen delen op hetzelfde potentiaal (geen spanningsverschil)",
        "Alle metalen buizen, leidingen, trechters, silo's MOETEN geaard zijn",
        "Cross-bonding tussen flenzen bij niet-geleidende afdichtingen",
        "Weerstandsmeting vereist: periodieke controle met mega-ohmmeter"
    ], icon="🛡️")

    make_slide(prs, "Aarding — Praktische uitvoering", [
        "1. Identificeer alle geleidende onderdelen in het proces",
        "2. Verbind elk onderdeel met de dichtstbijzijnde aardingsrail",
        "3. Gebruik geaarde flexibele kabels (minimaal 4 mm² Cu)",
        "4. Controleer verbindingen visueel vóór elke shift",
        "5. Meet aardingsweerstand periodiek (maximaal elke 6 maanden)",
        "6. Documenteer alle metingen in het aardingslogboek"
    ], icon="🔧")

    make_slide(prs, "Antistatische kleding — Eisen", [
        "EN 1149-5: Beschermende kleding — elektrostatische eigenschappen",
        "Kleding MOET antistatisch zijn in ATEX-zones",
        "Geen synthetische materialen die ladingsopbouw bevorderen",
        "Katoen of speciaal antistatisch materiaal (koolstofvezel-gemengd)",
        "Kleding MOET geaard zijn via antistatische schoenen of polsband",
        "Wasvoorschriften volgen — sommige wasmiddelen verwijderen antistatische coating"
    ], icon="👕")

    make_table_slide(prs, "Antistatische middelen overzicht", ["Middel", "Standaard", "Toepassing"], [
        ["Antistatische kleding", "EN 1149-5", "ATEX zones 1/2/21/22"],
        ["Antistatische schoenen", "EN ISO 20345 A", "Algemene procesvloer"],
        ["Geaarde polsband", "EN 61340-5-1", "Elektronica / fijn poeder"],
        ["Antistatische vloer", "EN 61340-5-1", "Explosiegevaarlijke ruimten"],
        ["Antistatische big-bags", "IEC 61340-4-4", "Poedertransport/opslag"]
    ], icon="📋")

    make_slide(prs, "ATEX-apparatuur — Categorieën", [
        "Categorie 1 (Zone 0/20) — Zeer hoog veiligheidsniveau, 2x redundant",
        "Categorie 2 (Zone 1/21) — Hoog veiligheidsniveau, geschikt voor Phoenix Metals",
        "Categorie 3 (Zone 2/22) — Normaal veiligheidsniveau",
        "Alle apparatuur MOET gemarkeerd zijn met CE + ATEX-symbool (εx in hexagon)",
        "Controleer het explosiebeveiligingsdocument (EBD) van Phoenix Metals"
    ], icon="🔴")

    make_slide(prs, "ATEX-zones bij Phoenix Metals", [
        "Zone 20: Binnenin silo's, menginstallaties (voortdurend stofwolk)",
        "Zone 21: Rond vul/openingen, filterinstallaties (af en toe stofwolk)",
        "Zone 22: Opslagruimten, transportbanden (zelden stofwolk, kortdurend)",
        "Buitengebied: over het algemeen niet-ATEX, behalve bij stofuitlaatpunten",
        "De zonekaart is opgenomen in het Explosiebeveiligingsdocument (EBD)"
    ], icon="🗺️")

    make_slide(prs, "Bindingscontrole — Wat en hoe?", [
        "Binding = aardingscontrole van alle geleidende verbindingen",
        "Visuele controle: kabels intact, verbindingen vast, geen corrosie",
        "Meetcontrole: weerstand < 1 Ω tussen flenzen, < 10 Ω naar aarde",
        "Frequentie: dagelijks visueel, maandelijks gemeten, 6-maandelijks uitgebreid",
        "Documentatie:_bindingsformulier invullen en ondertekenen",
        "BIJ AFWIJKING: direct rapporteren, installatie stilleggen tot herstel"
    ], icon="📋")

    make_table_slide(prs, "Bindingscontrole checklist", ["Controlepunt", "Methode", "Criteria", "Frequentie"], [
        ["Aardingskabels visueel", "Inspectie", "Geen breuk, corrosie of losse verbindingen", "Dagelijks"],
        ["Flensverbindingen", "Weerstandsmeting", "R < 1 Ω tussen flenzen", "Maandelijks"],
        ["Aarding naar rail", "Weerstandsmeting", "R < 10 Ω", "Maandelijks"],
        ["Antistatische vloer", "Weerstandsmeting", "10⁵ – 10⁸ Ω", "6-maandelijks"],
        ["Big-bag aarding", "Visueel + meet", "Klemverbinding intact, R < 10⁶ Ω", "Per gebruik"]
    ], icon="✅")

    make_slide(prs, "Phoenix Metals: Risico's bij vanadiumverwerking", [
        "V₂O₅-poeder is fijn en droog — ideaal voor ladingsopbouw tijdens transport",
        "Pneumatisch transport door buizen: extreme ladingsopbouw",
        "Stort van poeder in silo's: cone discharge risico",
        "Filterinstallaties: ladingsopbouw op filterzakken",
        "Big-bag handling: niet-geleidende materialen verhogen risico",
        "H₂SO₄-lekkage in combinatie met statische vonk = dubbel risico"
    ], icon="⚠️")

    make_slide(prs, "Phoenix Metals: Stoftransport risico's", [
        "Transportbanden: poeder op rubber band → wrijving → lading",
        "Schroeftransporteurs: poeder wrijving tegen behuizing",
        "Pneumatisch transport: hoogste risico door hoge snelheid + wrijving",
        "Elevators: emmers wrijving + neerwaartse poederstroom",
        "Overlooppunten: stofwolkvorming + statische lading"
    ], icon="🔥")

    make_slide(prs, "Praktische maatregelen — Overzicht", [
        "1. Alle metalen onderdelen aarden en equipotentiaal verbinden",
        "2. Alleen ATEX-gecertificeerde apparatuur gebruiken in ATEX-zones",
        "3. Antistatische kleding dragen in alle procesgebieden",
        "4. Periodieke bindingscontrole uitvoeren en documenteren",
        "5. Niet-geleidende materialen vervangen door geleidend alternatief",
        "6. Luchtvochtigheid controleren (≥ 50% verlaagt statisch risico)",
        "7. Ionisatoren toepassen waar aarding niet mogelijk is",
        "8. Training en bewustwording: elke medewerker kent de risico's"
    ], icon="🛡️")

    make_slide(prs, "Niet-geleidende materialen — Wat vermijden?", [
        "❌ Kunststof buizen en slangen (tenzij antistatisch gecertificeerd)",
        "❌ Gewone rubber transportbanden (geen antistatische versie)",
        "❌ Nylon of polyester big-bags (geen Type C met aarding)",
        "❌ Plastic trechters en gietbekkens",
        "❌ Teflon afdichtingen zonder equipotentiaalverbinding",
        "✅ Vervang door: antistatische varianten, geaard metaal, Type C big-bags"
    ], icon="🔧")

    make_slide(prs, "Luchtvochtigheid en statische lading", [
        "Lage luchtvochtigheid (< 30%) verhoogt het risico op statische lading aanzienlijk",
        "Bij RH < 30% ladingsopbouw 10-100x sneller",
        "Doel: relatieve luchtvochtigheid ≥ 50% in procesgebieden",
        "Wintermaanden: extra aandacht — verwarmde lucht droogt uit",
        "Phoenix Metals: luchtbevochtigers overwegen in stofverwerkingsgebieden",
        "Monitoring: hygrometers op strategische punten, alarm bij RH < 40%"
    ], icon="💧")

    make_slide(prs, "Ionisatoren — Toepassing en beperkingen", [
        "Ionisatoren neutraliseren lading op niet-geleidende oppervlakken",
        "Toepassing: waar aarding niet mogelijk (kunststof onderdelen, monitorschermen)",
        "Niet als vervanging van aarding — alleen als aanvulling",
        "Vereisen periodiek onderhoud: emitternaalden reinigen",
        "Niet geschikt als primaire maatregel in ATEX-zone 20/21"
    ], icon="🔧")

    make_slide(prs, "Rol van de operator", [
        "Je bent de eerste verdedigingslijn tegen statische incidenten",
        "Controleer aarding en binding VÓÓR elke shift start",
        "Rapporteer afwijkingen onmiddellijk — neem geen risico's",
        "Draag altijd antistatische kleding en schoenen in procesgebieden",
        "Gebruik alleen goedgekeurde apparatuur (ATEX-markering controleren)",
        "Ken de ATEX-zone-indeling van jouw werkplek"
    ], icon="👷")

    make_slide(prs, "Samenvatting — Key Takeaways (1/2)", [
        "✅ Statische elektriciteit ontstaat door wrijving/scheiding van materialen",
        "✅ Vonkontlading is een krachtige ontstekingsbron voor stofexplosies",
        "✅ Aarding en equipotentiaal zijn de primaire beheersmaatregelen",
        "✅ Alle geleidende onderdelen MOETEN geaard zijn (R < 10 Ω)"
    ], icon="📋")

    make_slide(prs, "Samenvatting — Key Takeaways (2/2)", [
        "✅ Antistatische kleding is VERPLICHT in ATEX-zones",
        "✅ Bindingscontrole: dagelijks visueel, maandelijks gemeten",
        "✅ V₂O₅-poedertransport = hoog risico op ladingsopbouw",
        "✅ Ken jouw ATEX-zone en de bijbehorende eisen",
        "✅ Bij twijfel: STOP en raadpleeg je HSE-adviseur"
    ], icon="📋")

    # Bronverwijzingen
    make_slide(prs, "Bronverwijzingen", [
        "[1] ATEX 137/1999/EG — Veiligheid op het werk in explosiegevaarlijke atmosferen",
        "[2] ATEX 114/2014/EU — Apparatuur voor explosiegevaarlijke ruimten",
        "[3] IEC 60079-32-1:2013 — Electrostatic hazards, guidance",
        "[4] NPR 7910:2019 — Risico-inventarisatie explosiegevaar",
        "[5] EN 1149-5:2008 — Beschermende kleding, elektrostatische eigenschappen",
        "[6] PGS 15:2025 — Opslag gevaarlijke stoffen",
        "[7] CSB — Imperial Sugar Company dust fire and explosion investigation (2008)",
        "[8] Arbowet/Arbobesluit — Art. 3.4e en 3.5 explosieve atmosferen",
        "[9] EN 13463-1:2009 — Niet-elektrische apparatuur voor explosiegevaarlijke ruimten",
        "[10] IEC 61340-4-4 — Electrostatics — Standard test methods for specific applications"
    ], icon="📚")

    path = os.path.join(OUT_DIR, "PM_EL_T08_Statische_Elektriciteit_Presentatie_v1.1.pptx")
    prs.save(path)
    print(f"✅ Saved: {path} ({len(prs.slides)} slides)")

# ============================================================
# T09: Stofexplosiebewustzijn
# ============================================================
def gen_T09():
    prs = Presentation()
    prs.slide_width = SLIDE_WIDTH
    prs.slide_height = SLIDE_HEIGHT
    code = "TR-302-05"
    title = "Stofexplosiebewustzijn"
    doelgroep = "Alle medewerkers"

    make_cover(prs, title, code)
    make_docinfo(prs, title, code, doelgroep)

    make_slide(prs, "Leerdoelen", [
        "Je kunt de 5 elementen van een stofexplosie benoemen (de stofexplosie-pentagon)",
        "Je begrijpt het verschil tussen Kst-klassen St-1, St-2 en St-3",
        "Je kent de ATEX-zones 20, 21 en 22 en de bijbehorende eisen",
        "Je herkent ontstekingsbronnen in de werkplek",
        "Je kent het reinigingsprotocol (geen bezems!) en preventiemaatregelen",
        "Je kunt de Phoenix Metals zonekaart interpreteren"
    ], icon="🎯")

    make_slide(prs, "Waarom deze training?", [
        "Stofexplosies zijn verantwoordelijk voor ernstige incidenten in de procesindustrie",
        "Metaalpoeders (zoals vanadium, aluminium, magnesium) zijn bijzonder explosief",
        "Veel medewerkers zijn zich niet bewust van de risico's van 'onschuldig' stof",
        "Phoenix Metals werkt met V₂O₅-poeder en staalslakkenmeel — beide stofvormig",
        "Seveso III verplicht expliciete stofexplosie-risicobeoordeling en -beheersing"
    ], icon="⚠️")

    make_slide(prs, "Wetgeving en normen", [
        "ATEX 137/1999/EG — Bescherming werknemers tegen explosiegevaar",
        "ATEX 114/2014/EU — Apparatuur in explosiegevaarlijke zones",
        "Arbobesluit art. 3.4e — Explosieve atmosferen RI&E",
        "NPR 7910 — RI&E explosiegevaar",
        "EN 14491 — Stofexplosieventiëring (venting)",
        "EN 15089 — Explosie-isolatiesystemen",
        "NFPA 652 — Standard on the Fundamentals of Combustible Dust (referentie)"
    ], icon="📋")

    make_slide(prs, "Statistieken", [
        "Europa: ~200 stofexplosies/jaar met gemiddeld 10 doden en 50 gewonden",
        "Debu: 15-20% van alle industriële explosies betreft stofexplosies",
        "Meest getroffen sectoren: hout/meubel, voeding, metaal, chemie",
        "70% van de bedrijven is zich onvoldoende bewust van stofexplosierisico's",
        "Metaalpoeders: hoogste letaliteit per incident (~30% dodelijk)"
    ], icon="📊")

    # Pentagon
    make_slide(prs, "CONCEPT: De Stofexplosie-Pentagon (5 Elementen)", [
        "1. Brandbaar stof — voldoende fijn verdeeld (< 500 μm)",
        "2. Zuurstof — atmosferische concentratie (21% is voldoende)",
        "3. Verspreiding — stof in wolkvorm (niet opgehoopt)",
        "4. Ingrenzing — in een gesloten of semi-gesloten ruimte",
        "5. Ontstekingsbron — vonk, hete oppervlak, statische ontlading, etc.",
        "ALS alle 5 aanwezig zijn → EXPLOSIE mogelijk!"
    ], icon="🔥")

    make_slide(prs, "UITLEG: Element 1 — Brandbaar stof", [
        "Niet elk stof is brandbaar — maar veel meer dan je denkt!",
        "Brandbaar: organisch stof (meel, hout, suiker), metaalpoeders, sommige kunststoffen",
        "Belangrijk: de deeltjesgrootte bepaalt de explosiviteit",
        "Fijnere deeltjes → groter oppervlak → lagere ontstekingsenergie",
        "Phoenix Metals: V₂O₅-poeder en staalslakkenmeel zijn potentieel brandbaar"
    ], icon="📖")

    make_slide(prs, "VOORBEELD: Brandbare stoffen bij Phoenix Metals", [
        "V₂O₅-poeder — fijn, droog, metaalpoeder-achtig gedrag",
        "Staalslakkenmeel — ijzerhoudend, fijn verdeeld",
        "Filterstof — mengsel van fijn metaalstof, hoog brandbaarheidsrisico",
        "Stofafzetting op constructies — kan secundaire explosie veroorzaken",
        "Ook: verpakingsmateriaal, reinigingsdoeken in stofrijke omgeving"
    ], icon="⚠️")

    make_slide(prs, "VALKUIL: 'Het is maar stof...'", [
        "❌ 'Een beetje stof kan geen kwaad' — ONJUIST: 1 mm stoflaag is al voldoend",
        "❌ 'Ons stof is niet brandbaar' — LAAT TESTEN, niet aannemen!",
        "❌ 'Alleen dikke stoflagen zijn gevaarlijk' — dunne laag opgewoeld = wolk",
        "❌ 'We hebben geen gesloten ruimtes' — semi-gesloten ruimtes ook riskant",
        "❌ 'We hebben geen ontstekingsbronnen' — statische elektriciteit is overal"
    ], icon="❌")

    make_slide(prs, "Element 2: Zuurstof", [
        "Atmosferische lucht bevat 21% O₂ — ruim voldoende",
        "Verlaagde zuurstof (< 10%) voorkomt explosie (stikstof inertiseren)",
        "Let op: zuurstofverrijking (door lekkage) verhoogt risico dramatisch",
        "Phoenix Metals gebruikt H₂SO₄ — reactie kan waterstofgas produceren = extra risico"
    ], icon="💨")

    make_slide(prs, "Element 3: Verspreiding (stofwolk)", [
        "Stof moet in wolkvorm zweven om te exploderen",
        "Concentratiebereik: tussen LEL (Lower Explosive Limit) en UEL",
        "Typisch: 20-60 g/m³ voor organische stoffen",
        "Metaalpoeders: soms al bij 10 g/m³ explosief!",
        "Hoe ontstaat een wolk: stortbewegingen, schoonmaken, luchtstromen, primaire explosie"
    ], icon="🌪️")

    make_slide(prs, "Element 4: Ingrenzing", [
        "Gesloten ruimtes: silo's, mengers, filters, transportbuizen",
        "Semi-gesloten: gebouwen, galerijen, overkappingen",
        "Zelfs open gebouwen kunnen voldoende ingrenzing bieden",
        "Drukopbouw bij explosie: tot 10 bar in gesloten volumes",
        "Ventiëring (ventpanels) reduceert druk, maar voorkomt niet de explosie"
    ], icon="🏠")

    make_slide(prs, "Element 5: Ontstekingsbronnen", [
        "⚠️ Statische elektriciteit — vonkontlading (meest onderschat!)",
        "🔥 Hete oppervlakken — > ontstekingstemperatuur van stof",
        "⚡ Mechanische vonken — metaal-op-metaal wrijving, mechanisch falen",
        "💡 Elektrische apparatuur — kortsluiting, defecte verbindingen",
        "🔧 Lassen/snijden — open vuur, vonken (ALTIJD vergunning vereist!)",
        "🔫 Zelfontbranding — opgehoopt stof warmt op (thermische decompositie)"
    ], icon="⚡")

    # Kst-waarden
    make_slide(prs, "Kst-waarden — Definitie", [
        "Kst = index voor stofexplosie-hevigheid (bar·m/s)",
        "Bepaald in een gesloten testvat (20L of 1m³ Hartmann-buis)",
        "Hogere Kst = heviger explosie, meer schade",
        "Kst hangt af van: deeltjesgrootte, vochtgehalte, concentratie",
        "Essentieel voor het ontwerpen van ventiëring en isolatie"
    ], icon="📈")

    make_table_slide(prs, "Kst-klassen en eigenschappen", ["Klasse", "Kst (bar·m/s)", "Omschrijving", "Voorbeelden"], [
        ["St-1", "> 0 tot 200", "Zwakke explosie", "Kolenstof, suiker, melkpoeder, zwavel"],
        ["St-2", "> 200 tot 300", "Sterke explosie", "Houtmeel, cellulose, sommige kunstharsen"],
        ["St-3", "> 300", "Zeer sterke explosie", "Aluminium, magnesium, titanium, sommige metaalpoeders"]
    ], icon="📊")

    make_slide(prs, "Kst en Phoenix Metals", [
        "V₂O₅-poeder: Kst-waarde moet getest worden — verwacht St-1 tot St-2",
        "Staalslakkenmeel: ijzerhoudend poeder, potentieel St-1",
        "Mengingen: onbekende mengsels kunnen anders gedragen dan individuele componenten",
        "ACTIE: Laat Kst-bepaling uitvoeren door erkend laboratorium (bijv. TNO)",
        "Resultaten verwerken in Explosiebeveiligingsdocument (EBD)"
    ], icon="🔥")

    # ATEX zones
    make_slide(prs, "ATEX-zones voor stof — Definitie", [
        "Zone 20: Voortdurend of langdurig explosieve stofatmosfeer (> 1000 uur/jaar)",
        "Zone 21: Af en toe explosieve stofatmosfeer (10-1000 uur/jaar)",
        "Zone 22: Zelden en kortdurend explosieve stofatmosfeer (< 10 uur/jaar)",
        "Niet-gezoneerd gebied: geen stofexplosiegevaar verwacht",
        "Zone-indeling is gebaseerd op frequentie EN duur van stofwolk"
    ], icon="🗺️")

    make_table_slide(prs, "ATEX-zones Phoenix Metals (indicatief)", ["Locatie", "Zone", "Reden"], [
        ["Binnen silo's V₂O₅", "Zone 20", "Voortdurend stofwolk bij vullen/lossen"],
        ["Filterinstallatie", "Zone 21", "Stofwolk bij reiniging/vervanging filters"],
        ["Rond vulopeningen", "Zone 21", "Stofemissie bij vullen big-bags"],
        ["Transportbandgebied", "Zone 22", "Zelden stofwolk, alleen bij storing"],
        ["Opslagruimte (droog)", "Zone 22", "Stofafzetting, zelden wolk"],
        ["Kantoor/controlekamer", "Niet-gezoneerd", "Geen stofbronnen"]
    ], icon="🗺️")

    make_slide(prs, "Ontstekingsbronnen — Inventarisatie", [
        "Mechanisch: wrijving, impact, oververhitting lagers",
        "Elektrisch: kortsluiting, vonkvorming, defecte apparatuur",
        "Statisch: ontlading door poedertransport (zie T08)",
        "Thermisch: hete oppervlakken, drogers, verhitting",
        "Chemisch: exotherme reacties, zelfontbranding opgehoopt stof",
        "Extern: lassen, slijpen, roken, voertuigen"
    ], icon="⚡")

    # Preventie
    make_slide(prs, "Preventie — Overzicht maatregelen", [
        "1. Bronbeheersing: voorkom stofemissie (afdekken, afzuiging)",
        "2. LEV (Lokale Afzuiging): stof direct bij de bron afvangen",
        "3. Ventiëring: ventpanels op silo's en filters (EN 14491)",
        "4. Explosie-isolatie: voorkom voortplanting naar andere apparaten (EN 15089)",
        "5. Reiniging: systematisch, met goedgekeurde middelen (GEEN BEZEMS!)",
        "6. Explosie-proof apparatuur: ATEX-gecertificeerd in ATEX-zones",
        "7. Inertiseren: stikstof blankettering waar mogelijk"
    ], icon="🛡️")

    make_slide(prs, "LEV — Lokale Afzuiging", [
        "Essentiële eerste lijn van verdediging tegen stofexplosie",
        "Afzuigkappen bij alle stofbronnen: vulpunten, overlooppunten, transportbanden",
        "Minimale opvangsnelheid: 0.5-2.0 m/s afhankelijk van stofsoort",
        "Filterinstallatie met explosieventiëring",
        "Regelmatig onderhoud: filterwissel, lekkagecontrole, debietmeting",
        "LEV-LOG bijhouden: controles, metingen, onderhoud"
    ], icon="💨")

    make_slide(prs, "Ventiëring en isolatie", [
        "Ventiëring (venting): gerichte drukontlasting bij explosie",
        "Ventpanels op silo's, filters, mengers — ontwerpslagdruk = Kst-afhankelijk",
        "EN 14491: berekeningsmethode voor venting-oppervlak",
        "Isolatie: voorkom dat explosie zich voortplant via leidingen",
        "Methoden: rotary valves, slam shut kleppen, chemische isolatie, snelsluitende kleppen",
        "EN 15089: eisen voor explosie-isolatiesystemen"
    ], icon="🔧")

    make_slide(prs, "⚠️ REINIGINGSPROTOCOL — GEEN BEZEMS!", [
        "🚫 NOOIT bezems gebruiken — wuift stof op → stofwolk → explosiegevaar!",
        "✅ GOEDGEKEURDE methoden:",
        "   • Industriezuiger (ATEX-gecertificeerd, stofklasse M of H)",
        "   • Vochtig doekje voor oppervlaktes",
        "   • Central stofzuigsysteem met explosiebeveiliging",
        "   • Perslucht ALLEEN met gerichte blaasmond EN adequate afzuiging",
        "Reinigingsfrequentie: dagelijks stofafzetting verwijderen",
        "Richtlijn: maximaal 1 mm stoflaag op elk oppervlak"
    ], icon="🧹")

    make_slide(prs, "Reinigingsprotocol — Stappenplan", [
        "1. Controleer ATEX-zone van het reinigingsgebied",
        "2. Gebruik ALLEEN ATEX-gecertificeerd reinigingsmateriaal",
        "3. Begin bij de hoogste punten, werk naar beneden",
        "4. Zuig stof op, NIET wegblazen",
        "5. Afvoeren in gesloten, geaarde containers",
        "6. Na reiniging: visuele controle of alle stof verwijderd is",
        "7. Reinigingslogboek invullen (datum, uitvoerder, gebied)"
    ], icon="📋")

    make_slide(prs, "Explosion-proof apparatuur", [
        "Alle apparatuur in ATEX-zones MOET gecertificeerd zijn",
        "CE-markering + ATEX-symbool (εx in zeshoek)",
        "Categorie-overzicht: Cat 1 (Zone 20), Cat 2 (Zone 21), Cat 3 (Zone 22)",
        "Belangrijk: ook niet-elektrische apparatuur valt onder ATEX!",
        "Voorbeelden: ATEX-vacuümkamer, ATEX-verlichting, ATEX-motoren",
        "Onderhoud: alleen door bevoegd persoon, volgens fabrikantvoorschrift"
    ], icon="🔋")

    make_slide(prs, "Secundaire explosies — Het kettingreactiegevaar", [
        "Primaire explosie: stofwolk in apparatuur explodeert",
        "Drukgolf werpt AFGEZET stof op muren/vloeren/plafonds op",
        "Opgeworpen stof vormt NIEUWE stofwolk → SECUNDAIRE explosie",
        "Secundaire explosie is vaak GROTER en GEVAARLIJKER dan de primaire",
        "Dit is waarom reiniging en stofvrij houden ZO belangrijk is!",
        "Phoenix Metals: 1 mm stoflaag op constructies = potentieel dodelijk"
    ], icon="💥")

    make_slide(prs, "Rol van elke medewerker", [
        "Ken de ATEX-zones van jouw werkplek",
        "Rapporteer stofophoping onmiddellijk",
        "Reinig volgens protocol — nooit met bezem!",
        "Gebruik alleen ATEX-apparatuur in gezoneerde gebieden",
        "Ken de ontstekingsbronnen in jouw werkomgeving",
        "Bij stofwolk: verlaat het gebied, meld bij HSE"
    ], icon="👷")

    make_slide(prs, "Samenvatting — Key Takeaways (1/2)", [
        "✅ 5 elementen: brandbaar stof + zuurstof + verspreiding + ingrenzing + ontstekingsbron",
        "✅ Kst-klassen: St-1 (zwak), St-2 (sterk), St-3 (zeer sterk)",
        "✅ ATEX-zones: 20 (voortdurend), 21 (af en toe), 22 (zelden)",
        "✅ Secundaire explosies zijn vaak dodelijker dan primaire"
    ], icon="📋")

    make_slide(prs, "Samenvatting — Key Takeaways (2/2)", [
        "✅ NOOIT bezems gebruiken — ALTIJD ATEX-gecertificeerd reinigingsmateriaal",
        "✅ Maximaal 1 mm stoflaag op oppervlakken",
        "✅ V₂O₅ en staalslakkenmeel zijn potentieel explosief — laat testen!",
        "✅ Preventie = combinatie van LEV, ventiëring, isolatie en reiniging",
        "✅ Bij twijfel: STOP en raadpleeg HSE"
    ], icon="📋")

    make_slide(prs, "Bronverwijzingen", [
        "[1] ATEX 137/1999/EG — Veiligheidswerknemers explosiegevaarlijke atmosferen",
        "[2] ATEX 114/2014/EU — Apparatuur explosiegevaarlijke zones",
        "[3] EN 14491:2012 — Dust explosion venting",
        "[4] EN 15089:2009 — Explosion isolation systems",
        "[5] NPR 7910:2019 — RI&E explosiegevaar",
        "[6] NFPA 652 — Fundamentals of combustible dust",
        "[7] VDI 3673 — Pressure venting of dust explosions",
        "[8] IEC 60079-10-2 — Classification of areas — combustible dust",
        "[9] Arbobesluit art. 3.4e — Explosieve atmosferen",
        "[10] EN 12779 — Safety of woodworking machines — dust extraction"
    ], icon="📚")

    path = os.path.join(OUT_DIR, "PM_EL_T09_Stofexplosiebewustzijn_Presentatie_v1.1.pptx")
    prs.save(path)
    print(f"✅ Saved: {path} ({len(prs.slides)} slides)")

# ============================================================
# T10: REACH/CLP Bewustzijn
# ============================================================
def gen_T10():
    prs = Presentation()
    prs.slide_width = SLIDE_WIDTH
    prs.slide_height = SLIDE_HEIGHT
    code = "TR-302-06"
    title = "REACH/CLP Bewustzijn"
    doelgroep = "Alle medewerkers"

    make_cover(prs, title, code)
    make_docinfo(prs, title, code, doelgroep)

    make_slide(prs, "Leerdoelen", [
        "Je kunt het verschil uitleggen tussen REACH en CLP",
        "Je kent de 9 GHS-gevaarspictogrammen en hun betekenis",
        "Je kunt H- en P-zinnen lezen en interpreteren",
        "Je kent de structuur van een Safety Data Sheet (SDS/VEB)",
        "Je begrijpt waarom V₂O₅ een SVHC-candidate is",
        "Je kent de classificatie van Phoenix Metals-stoffen"
    ], icon="🎯")

    make_slide(prs, "Waarom deze training?", [
        "REACH en CLP bepalen hoe we omgaan met gevaarlijke stoffen",
        "Elke medewerker moet etiketten en SDS kunnen lezen",
        "V₂O₅ is een SVHC-candidate — dit heeft consequenties voor Phoenix Metals",
        "Niet-naleving = boetes tot € 50.000 per overtreding",
        "Seveso III-inrichtingen hebben extra REACH/CLP-verplichtingen"
    ], icon="⚠️")

    make_slide(prs, "Wetgeving — REACH", [
        "REACH = Registration, Evaluation, Authorisation and restriction of Chemicals",
        "Verordening (EG) nr. 1907/2006, in werking sinds 2007",
        "Doel: bescherming mens en milieu tegen chemische risico's",
        "Van toepassing op ALLE chemische stoffen (meer dan 1 ton/jaar)",
        "Fabrikanten/importeurs MOETEN stoffen registreren bij ECHA",
        "Seveso-bedrijven moeten REACH-compliance aantonen"
    ], icon="📋")

    make_slide(prs, "REACH — De 4 pijlers", [
        "1. REGISTRATIE — Stof dossiër indienen bij ECHA (> 1 ton/jaar)",
        "2. EVALUATIE — ECHA beoordeelt dossiers en stoffen",
        "3. AUTORISATIE — SVHC-stoffen mogen alleen met toestemming",
        "4. RESTRICTIE — Bepaalde stoffen zijn verboden of beperkt",
        "Phoenix Metals moet aantonen dat alle stoffen geregistreerd zijn",
        "V₂O₅ op SVHC-candidate list → autorisatieverplichting mogelijk"
    ], icon="🏛️")

    make_slide(prs, "CLP — Classificatie en Etikettering", [
        "CLP = Classification, Labelling and Packaging",
        "Verordening (EG) nr. 1272/2008",
        "Implementeert GHS (Globally Harmonised System) in de EU",
        "Vervangt de oude CPP-richtlijn (symbool Xn, Xi, etc.)",
        "Verplicht voor ALLE gevaarlijke stoffen en mengsels",
        "Herkenbaar aan de rode ruitvormige pictogrammen"
    ], icon="🏷️")

    make_slide(prs, "CONCEPT: De 9 GHS-pictogrammen", [
        "☠️ GHS05 — Bijtend (H₂SO₄, NaOH)",
        "⚕️ GHS08 — Gezondheidsgevaar (V₂O₅ — Repr. 1B, Carc. 2)",
        "🔥 GHS02 — Licht ontvlambaar",
        "💥 GHS01 — Explosief",
        "🔴 GHS03 — Oxyderend",
        "⛽ GHS04 — Gas onder druk",
        "☠️ GHS06 — Giftig",
        "🌊 GHS09 — Milieugevaar",
        "⚠️ GHS07 — Irriterend / schadelijk"
    ], icon="🔷")

    make_table_slide(prs, "GHS-pictogrammen — Details", ["Pictogram", "Code", "Betekenis", "Phoenix Metals toepassing"], [
        ["☠️ Doodshood + gekruiste botten", "GHS06", "Giftig (acuut)", "—"],
        ["⚕️ Ster met uitstekende punten", "GHS08", "Gezondheidsgevaar", "V₂O₅ (Repr. 1B, Carc. 2)"],
        ["🔥 Vlam", "GHS02", "Licht ontvlambaar", "—"],
        ["💥 Ontploffende bom", "GHS01", "Explosief", "—"],
        ["🔴 Vlam boven cirkel", "GHS03", "Oxyderend", "—"],
        ["⛽ Gasfles", "GHS04", "Gas onder druk", "—"],
        ["☠️ Corrosie", "GHS05", "Bijtend", "H₂SO₄, NaOH"],
        ["🌊 Boom + vis", "GHS09", "Milieugevaar", "H₂SO₄ (indirect)"],
        ["⚠️ Uitroepteken", "GHS07", "Irriterend/schadelijk", "Al₂(SO₄)₃"]
    ], icon="📋")

    make_slide(prs, "H-zinnen — Hazard Statements", [
        "H-zinnen beschrijven het gevaar van een stof in standaardzinnen",
        "Indeling: H2xx (explosief/ontvlambaar), H3xx (gezondheid), H4xx (milieu)",
        "Voorbeeld V₂O₅:",
        "  H360Df — Kan het ongeboren kind schaden. Schadelijk via de huid.",
        "  H351 — Vermoedelijk kankerverwekkend",
        "  H302 — Schadelijk bij inslikken",
        "  H332 — Schadelijk bij inademing"
    ], icon="📖")

    make_slide(prs, "P-zinnen — Precautionary Statements", [
        "P-zinnen geven veiligheidsmaatregelen aan",
        "Indeling: P1xx (algemeen), P2xx (preventie), P3xx (reactie), P4xx (opslag), P5xx (verwijdering)",
        "Voorbeeld V₂O₅:",
        "  P201 — Voorkom blootstelling voordat u deze instructies heeft gelezen",
        "  P280 — Draag beschermende handschoenen/kleding/oogbescherming",
        "  P308+P313 — Bij blootstelling of mogelijke blootstelling: raadpleeg een arts",
        "  P261 — Inademing van stof vermeiden"
    ], icon="🛡️")

    make_slide(prs, "VOORBEELD: Etiket lezen — V₂O₅", [
        "Productnaam: Vanadium(V)oxide",
        "Pictogrammen: GHS05 (bijtend) + GHS08 (gezondheidsgevaar)",
        "Signaalwoord: GEVAAR",
        "H-zinnen: H360Df, H351, H302, H332, H318, H335",
        "P-zinnen: P201, P260, P280, P308+P313, P305+P351+P338",
        "EUH-zin: EUH071 — Werkt corrosief op de luchtwegen"
    ], icon="🏷️")

    make_slide(prs, "SDS/VEB — Structuur (16 secties)", [
        "1. Identificatie van de stof/het mengsel",
        "2. Gevaarsidentificatie",
        "3. Samenstelling/informatie over bestanddelen",
        "4. Eerste-hulpmaatregelen",
        "5. Brandbestrijdingsmaatregelen",
        "6. Maatregelen bij accidentele lozing",
        "7. Hantering en opslag",
        "8. Maatregelen ter beheersing van blootstelling / persoonlijke bescherming"
    ], icon="📄")

    make_slide(prs, "SDS/VEB — Structuur (vervolg)", [
        "9. Fysische en chemische eigenschappen",
        "10. Stabiliteit en reactiviteit",
        "11. Toxicologische informatie",
        "12. Ecologische informatie",
        "13. Instructies voor verwijdering",
        "14. Informatie met betrekking tot het vervoer",
        "15. Wettelijk verplichte informatie",
        "16. Overige informatie"
    ], icon="📄")

    make_slide(prs, "SDS — Welke secties zijn het belangrijkst?", [
        "Voor operatoren: secties 2 (gevaren), 4 (EHBO), 7 (hantering), 8 (PBM's)",
        "Voor HSE: secties 2, 3, 8, 9, 10, 11 (volledig risicobeeld)",
        "Voor logistiek: secties 7, 13, 14 (opslag, verwijdering, vervoer)",
        "SDS MOET actueel zijn — controleer datum op document",
        "SDS MOET toegankelijk zijn voor alle medewerkers (digitaal + fysiek)",
        "Phoenix Metals: SDS voor V₂O₅, H₂SO₄, NaOH, Al₂(SO₄)₃ beschikbaar in veiligheidsmap"
    ], icon="🔍")

    make_slide(prs, "SVHC — Substances of Very High Concern", [
        "SVHC = stoffen met de meest ernstige effecten (kankerverwekkend, mutageen, reprotoxisch, etc.)",
        "Opgenomen op de ECHA Candidate List",
        "Fabrikanten/importeurs MOETEN SVHC-informatie verstrekken",
        "Autorisatie kan vereist zijn (REACH Titel VII)",
        "V₂O₅ is op de SVHC-candidate list wegens Repr. 1B!",
        "Dit betekent: extra verplichtingen voor Phoenix Metals"
    ], icon="☠️")

    make_slide(prs, "V₂O₅ als SVHC — Consequenties", [
        "Autorisatieverplichting kan van kracht worden (Annex XIV)",
        "Informatieplicht aan afnemers (Art. 33 REACH)",
        "Verplichte blootstellingsbeheersing (extra streng)",
        "Substitutie-overweging: is er een minder gevaarlijk alternatief?",
        "Seveso III: V₂O₅ als gevaarlijke stof → lagere drempelwaarden",
        "MD Stijn van Zelst moet autorisatie aanvragen bij ECHA indien van kracht"
    ], icon="⚠️")

    make_table_slide(prs, "Phoenix Metals — Stoffen classificatie", ["Stof", "CLP-classificatie", "Pictogrammen", "Belangrijkste H-zinnen"], [
        ["V₂O₅", "Repr. 1B, Carc. 2, Acute Tox. 4, Eye Dam. 1, STOT SE 3", "GHS05 + GHS08", "H360Df, H351, H302, H332, H318"],
        ["H₂SO₄", "Skin Corr. 1A", "GHS05", "H314"],
        ["NaOH", "Skin Corr. 1A", "GHS05", "H314, H290"],
        ["Al₂(SO₄)₃", "Eye Irrit. 2, STOT SE 3", "GHS07", "H319, H335"]
    ], icon="📋")

    make_slide(prs, "Autorisatieverplichtingen — Praktijk", [
        "Als V₂O₅ op Annex XIV wordt geplaatst: autorisatie nodig VOORDAT gebruikt mag worden",
        "Aanvraag bij ECHA met analyse van alternatieven en socio-economische impact",
        "Phoenix Metals moet aantonen dat risico's adequaat beheerst worden",
        "Deadline: uiterlijk 18 maanden voor sunset date aanvragen",
        "Zonder autorisatie: gebruik VERBODEN na sunset date",
        "Monitor de ECHA-website voor updates"
    ], icon="🏛️")

    make_slide(prs, "Etikettering in de praktijk", [
        "Elke container MOET voorzien zijn van een etiket met:",
        "  • Productnaam",
        "  • Pictogrammen (ruitvormig, rood kader, witte achtergrond)",
        "  • Signaalwoord (GEVAAR of WAARSCHUWING)",
        "  • H-zinnen",
        "  • P-zinnen",
        "  • Contactgegevens leverancier",
        "ZELFGEKOCHTE etiketten toegestaan mits conform CLP"
    ], icon="🏷️")

    make_slide(prs, "VALKUIL: Veelgemaakte fouten", [
        "❌ SDS niet actueel — controleer altijd de revisiedatum",
        "❌ Etiketten niet leesbaar — vervang bij slijtage/vervuild",
        "❌ Overgepakte stoffen niet opnieuw etiketteren",
        "❌ H- en P-zinnen niet begrijpen — vraag uitleg aan HSE!",
        "❌ SVHC-verplichtingen negeren — V₂O₅ is op de candidate list!"
    ], icon="❌")

    make_slide(prs, "Rol van de medewerker", [
        "Lees ETIKETTEN voordat je met een stof werkt",
        "Raadpleeg de SDS bij twijfel over gevaren of maatregelen",
        "Rapporteer ontbrekende of onleesbare etiketten",
        "Volg de P-zinnen op (PBM's, ventilatie, etc.)",
        "Ken de specifieke gevaren van V₂O₅, H₂SO₄, NaOH",
        "Bewaar stoffen conform de SDS-voorschriften (sectie 7)"
    ], icon="👷")

    make_slide(prs, "Samenvatting — Key Takeaways (1/2)", [
        "✅ REACH = registratie/evaluatie/autorisatie van chemische stoffen",
        "✅ CLP = classificatie, etikettering en verpakking (GHS in EU)",
        "✅ 9 GHS-pictogrammen: leer ze herkennen!",
        "✅ H-zinnen = gevaren, P-zinnen = voorzorgsmaatregelen"
    ], icon="📋")

    make_slide(prs, "Samenvatting — Key Takeaways (2/2)", [
        "✅ SDS (16 secties) — belangrijkste: secties 2, 4, 7, 8",
        "✅ V₂O₅ is SVHC-candidate (Repr. 1B) → autorisatieverplichting mogelijk",
        "✅ Phoenix Metals stoffen: V₂O₅, H₂SO₄, NaOH, Al₂(SO₄)₃ — allen gevaarlijk",
        "✅ Altijd etiket lezen VOORDAT je met een stof werkt"
    ], icon="📋")

    make_slide(prs, "Bronverwijzingen", [
        "[1] REACH Verordening (EG) nr. 1907/2006",
        "[2] CLP Verordening (EG) nr. 1272/2008",
        "[3] ECHA — https://echa.europa.eu/nl",
        "[4] ECHA Candidate List — SVHC-stoffen",
        "[5] GHS (VN) — Globally Harmonised System, 10th revised edition",
        "[6] SER — Grenswaardenlijst gevaarlijke stoffen (publiek)",
        "[7] Arbowet/Arbobesluit — Titel 3, afdeling 5 (gevaarlijke stoffen)",
        "[8] SDS V₂O₅ — leverancier (actueel exemplaar in veiligheidsmap)",
        "[9] Seveso III Richtlijn 2012/18/EU",
        "[10] EU-OSHA — https://osha.europa.eu/nl"
    ], icon="📚")

    path = os.path.join(OUT_DIR, "PM_EL_T10_REACH_CLP_Bewustzijn_Presentatie_v1.1.pptx")
    prs.save(path)
    print(f"✅ Saved: {path} ({len(prs.slides)} slides)")

# ============================================================
# T11: Permit to Work (TRA, LOTO, LMRA)
# ============================================================
def gen_T11():
    prs = Presentation()
    prs.slide_width = SLIDE_WIDTH
    prs.slide_height = SLIDE_HEIGHT
    code = "TR-303-02"
    title = "Permit to Work (TRA, LOTO, LMRA)"
    doelgroep = "Alle behalve Office Staff"

    make_cover(prs, title, code)
    make_docinfo(prs, title, code, doelgroep)

    make_slide(prs, "Leerdoelen", [
        "Je kunt het Permit to Work (PtW) systeem uitleggen en correct toepassen",
        "Je kunt een TRA-formulier stap-voor-stap invullen",
        "Je kent de LOTO 8-stappenprocedure en kunt deze uitvoeren",
        "Je voert een LMRA uit met de 5 standaardvragen",
        "Je begrijpt de hiërarchie van beheersmaatregelen",
        "Je kent de rollen (aanvrager, goedkeurder, uitvoerder) in het PtW-proces"
    ], icon="🎯")

    make_slide(prs, "Waarom deze training?", [
        "PtW is het fundamentele veiligheidssysteem voor risicovolle werkzaamheden",
        "De meeste ernstige incidenten ontstaan bij werkzaamheden ZONDER geldig vergunning",
        "TRA, LOTO en LMRA zijn de drie pijlers die samen het risico beheersen",
        "Seveso III vereist formele systemen voor risicovolle werkzaamheden",
        "Phoenix Metals: vanadiumverwerking met giftige en bijtende stoffen = hoog risico"
    ], icon="⚠️")

    make_slide(prs, "Wetgeving", [
        "Arbowet art. 3 — Algemene plicht tot zorg voor veiligheid",
        "Arbobesluit art. 3.5 — Explosieve atmosferen (LOTO bij onderhoud)",
        "Arbobesluit art. 7.4a — Voorkoming van ongevallen met gevaarlijke stoffen",
        "Seveso III — Vereist formele systemen voor risicovolle werkzaamheden",
        "NEN-EN-ISO 45001 — Systeemnorm voor arbeidsomstandigheden",
        " Bedrijfsvoorschriften Phoenix Metals — VR-400 serie (PtW/TRA/LOTO)"
    ], icon="📋")

    make_slide(prs, "CONCEPT: Wat is Permit to Work?", [
        "Formeel document dat toestemming geeft voor specifieke risicovolle werkzaamheden",
        "Bevat: beschrijving werk, locatie, risico's, maatregelen, geldigheidsduur",
        "Vereist handtekeningen: aanvrager, goedkeurder, uitvoerder",
        "Niemand mag werken ZONDER geldig PtW voor risicovolle taken",
        "PtW is GEEN vrijbrief — het is een beheersmaatregel"
    ], icon="📄")

    make_slide(prs, "UITLEG: Wanneer is PtW vereist?", [
        "Hete werkzaamheden (lassen, slijpen, snijden)",
        "Werkzaamheden in besloten ruimten",
        "Werkzaamheden op hoogte (> 2,5 meter)",
        "Onderhoud aan procesinstallaties (met gevaarlijke stoffen)",
        "Grondwerkzaamheden (kabels/leidingen)",
        "Elektrisch werk aan hoogspanning",
        "Werken met chemische stoffen (V₂O₅, H₂SO₄, NaOH)"
    ], icon="📋")

    make_slide(prs, "VOORBEELD: PtW bij Phoenix Metals", [
        "Onderhoud aan de V₂O₅-reactor → PtW + LOTO + TRA",
        "Filterwissel in stoffilter → PtW + stofexplosie-TRA",
        "Lassen aan leidingwerk → PtW + hete werkzaamheden + brandwacht",
        "Inspectie in silo → PtW + besloten ruimte + gasmeting",
        "Reparatie transportband → PtW + LOTO + mechanische vergrendeling"
    ], icon="🔧")

    make_slide(prs, "VALKUIL: Veelgemaakte fouten bij PtW", [
        "❌ PtW achteraf invullen ('als het al af is...')",
        "❌ PtW te algemeen formulieren ('onderhoud installatie')",
        "❌ PtW laten verlopen zonder verlenging of afsluiting",
        "❌ Aanpassingen aan werkzaamheden zonder PtW-update",
        "❌ PtW doorschuiven naar volgende shift zonder overdracht",
        "❌ Werken buiten de scope van het PtW"
    ], icon="❌")

    make_slide(prs, "PtW Rollen — Aanvrager, Goedkeurder, Uitvoerder", [
        "AANVRAGER: initieert PtW, beschrijft werkzaamheden, identificeert risico's",
        "GOEDKEURDER: beoordeelt risico's, controleert maatregelen, geeft toestemming",
        "UITVOERDER: voert werkzaamheden uit volgens PtW, houdt zich aan voorwaarden",
        "BELANGRIJK: deze rollen mogen NIET door dezelfde persoon worden vervuld",
        " Vier-ogen-principe: aanvrager en goedkeurder zijn verschillende personen"
    ], icon="👥")

    # TRA
    make_slide(prs, "TRA — Task Risk Analysis", [
        "TRA = gestructureerde risicoanalyse VÓÓR de start van werkzaamheden",
        "Systematisch identificeren van gevaren en beheersmaatregelen",
        "Altijd verplicht bij risicovolle werkzaamheden (in combinatie met PtW)",
        "Laatste-check principe: ook als er al een RI&E is, altijd eigen TRA",
        "TRA is een TEAM-oefening — niet alleen de aanvrager"
    ], icon="🔍")

    make_slide(prs, "TRA — Stap-voor-stap", [
        "STAP 1: Beschrijf de werkzaamheden (wat, waar, wanneer, wie)",
        "STAP 2: Identificeer de gevaren (wat kan er misgaan?)",
        "STAP 3: Beoordeel het risico (kans × effect = risicoscore)",
        "STAP 4: Bepaal beheersmaatregelen (hiërarchie toepassen!)",
        "STAP 5: Communiceer aan alle betrokkenen (toolbox meeting)",
        "STAP 6: Implementeer maatregelen VÓÓR start",
        "STAP 7: Monitor tijdens uitvoering (LMRA!)",
        "STAP 8: Evaluatie na afronding (lessen voor volgende keer)"
    ], icon="📋")

    make_slide(prs, "TRA — Risicomatrix", [
        "KANS: 1 (onwaarschijnlijk) tot 5 (waarschijnlijk)",
        "EFFECT: 1 (verwaarloosbaar) tot 5 (catastrofaal)",
        "RISICO = KANS × EFFECT",
        "Laag (1-6): werk kan starten met standaardmaatregelen",
        "Medium (7-12): aanvullende maatregelen vereist, goedkeuring leidinggevende",
        "Hoog (13-19): werk MAG NIET starten — aanvullende maatregelen + MT-goedkeuring",
        "Zeer hoog (20-25): STOP — werkverbod tot risico op acceptabel niveau"
    ], icon="📊")

    make_table_slide(prs, "Risicomatrix — Visualisatie", ["Kans ↓ / Effect →", "1 Verwaarloosbaar", "2 Gering", "3 Gemiddeld", "4 Ernstig", "5 Catastrofaal"], [
        ["5 Waarschijnlijk", "5M", "10H", "15H", "20Z", "25Z"],
        ["4 Waarschijnlijk", "4L", "8M", "12H", "16H", "20Z"],
        ["3 Soms", "3L", "6M", "9M", "12H", "15H"],
        ["2 Onwaarschijnlijk", "2L", "4L", "6M", "8M", "10H"],
        ["1 Zeldzaam", "1L", "2L", "3L", "4L", "5M"]
    ], icon="📊")

    make_slide(prs, "Hiërarchie van beheersmaatregelen", [
        "1. ELIMINATIE — Haal het gevaar weg (bestaat de taak wel nodig?)",
        "2. SUBSTITUTIE — Vervang door minder gevaarlijk alternatief",
        "3. TECHNISCHE MAATREGELEN — Ventilatie, afscherming, LEV",
        "4. ORGANISATORISCHE MAATREGELEN — Procedures, taakrotatie, signalering",
        "5. PBM's — Laatste middel! (helm, bril, handschoenen, adembescherming)",
        "ALTIJD van boven naar beneden toepassen — PBM's zijn NOOIT de eerste keuze"
    ], icon="🛡️")

    # LOTO
    make_slide(prs, "LOTO — Lock Out / Tag Out", [
        "LOTO = procedure om installaties energievrij te maken en te vergrendelen",
        "Doel: voorkom ongewilde opstart tijdens onderhoudswerkzaamheden",
        "Alle energiebronnen: elektrisch, hydraulisch, pneumatisch, thermisch, chemisch",
        "ALTIJD verplicht bij onderhoud aan procesinstallaties",
        "Elke medewerker hangt ZIJN eigen slot op de vergrendeling"
    ], icon="🔒")

    make_slide(prs, "LOTO — 8-stappen procedure", [
        "STAP 1: Identificeer alle energiebronnen",
        "STAP 2: Informeer alle betrokkenen (operator, onderhoud, leidinggevende)",
        "STAP 3: Sluit de installatie af (normale shutdown-procedure)",
        "STAP 4: Isoleer alle energiebronnen (schakelaars uit, kleppen dicht, etc.)",
        "STAP 5: Plaats eigen slot en tag op elk isatiepunt",
        "STAP 6: Verifieer energievrij — PROEF_START! (proberen op te starten)",
        "STAP 7: Voer werkzaamheden uit",
        "STAP 8: Verwijder slot en tag — ALLEEN door eigenaar! — start op"
    ], icon="📋")

    make_slide(prs, "LOTO — Belangrijke regels", [
        "ELKE medewerker die werkt = ELKE medewerker hangt een slot",
        "Eén persoon = één slot per isatiepunt",
        "Slot VERWIJDEREN = ALLEEN door de eigenaar (nooit door een collega!)",
        "Tags: naam, datum, reden, afdeling",
        "Groeps-LOTO: LOTO-box met meerdere sloten + supervisie",
        "Bij shift-overdracht: LOTO-formeel overdragen, NIET laten hangen"
    ], icon="⚠️")

    make_slide(prs, "LOTO — Energiebronnen bij Phoenix Metals", [
        "Elektrisch: motoren, pompen, besturingssystemen",
        "Hydraulisch: persen, kleppen, cylinders",
        "Pneumatisch: perslucht, transport, sturing",
        "Thermisch: hete leidingen, reactoren, H₂SO₄-circuits",
        "Chemisch: V₂O₅-poeder, H₂SO₄, NaOH in leidingen/tanks",
        "Mechanisch: opgeslagen energie (veren, tegengewichten, transportbanden)",
        "Zwaartekracht: hangende lasten, poeder in silo's"
    ], icon="⚡")

    # LMRA
    make_slide(prs, "LMRA — Last Minute Risk Assessment", [
        "LMRA = laatste check VÓÓR de start van de werkzaamheden",
        "Uitgevoerd door de UITVOERDER op de WERKPLEK",
        "Beantwoord 5 vragen — bij één 'NEE': STOP en herbeoordeel",
        "LMRA is PERSOONLIJK — je beoordeelt JOUW veiligheid",
        "Elke shift, elke taak, elke keer opnieuw"
    ], icon="✅")

    make_slide(prs, "LMRA — De 5 vragen", [
        "1. Ben ik fysiek en mentaal in staat om dit werk veilig uit te voeren?",
        "2. Heb ik de juiste gereedschappen, materialen en PBM's?",
        "3. Is de werkplek veilig ingericht (afzetting, signalering, ventilatie)?",
        "4. Ken ik de procedure en de risico's van deze taak?",
        "5. Zijn de afspraken met collega's en leidinggevende duidelijk?"
    ], icon="❓")

    make_slide(prs, "LMRA — Wanneer uitvoeren?", [
        "✅ Voor elke nieuwe taak",
        "✅ Bij start van elke shift",
        "✅ Na wijziging van werkplek of werkzaamheden",
        "✅ Na pauze of onderbreking",
        "✅ Bij wijzigende omstandigheden (weer, storing, nieuw team)",
        "❌ NOOIT overslaan — zelfs niet bij 'routine'-werkzaamheden"
    ], icon="⏰")

    # Combinatie
    make_slide(prs, "PtW + TRA + LOTO + LMRA — De complete keten", [
        "PtW → formele toestemming en kader",
        "TRA → gestructureerde risicoanalyse met maatregelen",
        "LOTO → energievrij maken en vergrendelen",
        "LMRA → laatste persoonlijke check op de werkplek",
        "ALLE stappen vereist voor risicovolle werkzaamheden",
        "Geen stap overslaan — elke stap heeft een unieke bijdrage"
    ], icon="🔗")

    make_table_slide(prs, "PtW + TRA + LOTO + LMRA — Wanneer wat?", ["Situatie", "PtW", "TRA", "LOTO", "LMRA"], [
        ["Risicovol onderhoud", "✅", "✅", "✅", "✅"],
        ["Hete werkzaamheden", "✅", "✅", "—", "✅"],
        ["Besloten ruimte", "✅", "✅", "✅", "✅"],
        ["Routine-inspectie", "—", "—", "—", "✅"],
        ["Werken op hoogte", "✅", "✅", "—", "✅"],
        ["Chemisch werk", "✅", "✅", "✅", "✅"]
    ], icon="📋")

    make_slide(prs, "Phoenix Metals — Specifieke werkzaamheden", [
        "V₂O₅-reactor onderhoud → PtW + TRA (giftig, bijtend) + LOTO (chemisch, elektrisch) + LMRA",
        "H₂SO₄-leiding reparatie → PtW + TRA (bijtend) + LOTO (chemisch) + LMRA",
        "Filterwissel → PtW + TRA (stofexplosie) + LOTO (pneumatisch) + LMRA",
        "Silo-inspectie → PtW + TRA (besloten ruimte, stof) + LOTO (mechanisch) + LMRA",
        "Transportband reparatie → PtW + TRA (mechanisch) + LOTO (elektrisch, mechanisch) + LMRA"
    ], icon="🔧")

    make_slide(prs, "Elektrisch LOTO — Specifieke aandachtspunten", [
        "Altijd een bevoegd elektrisch persoon (BEP) betrekken",
        "Hoofdschakelaar vergrendelen + taggen",
        "Spanningvrij meten na uitschakelen (5-punts meting)",
        "Aardingsschakelaar plaatsen bij hoogspanning",
        "Documentatie: LOTO-formulier met schema van isatiepunten"
    ], icon="⚡")

    make_slide(prs, "Chemisch LOTO — Specifieke aandachtspunten", [
        "Leidingen spoelen/ontluchten vóór opening",
        "Dubbele afschakeling (twee kleppen in serie + tussentap)",
        "Blind flensen plaatsen bij open leidingen",
        "Gasmeting uitvoeren vóór betreding (O₂, H₂S, VL's)",
        "V₂O₅-poeder: volledig leegloop + reiniging + afzuiging"
    ], icon="☠️")

    make_slide(prs, "Samenvatting — Key Takeaways (1/2)", [
        "✅ PtW = formele toestemming voor risicovolle werkzaamheden",
        "✅ TRA = gestructureerde risicoanalyse in 8 stappen",
        "✅ LOTO = energievrij maken + vergrendelen (8-stappen)",
        "✅ LMRA = 5 persoonlijke vragen, ALTIJD, ELKE taak"
    ], icon="📋")

    make_slide(prs, "Samenvatting — Key Takeaways (2/2)", [
        "✅ Hiërarchie beheersmaatregelen: eliminatie → substitutie → technisch → organisatorisch → PBM",
        "✅ Drie rollen: aanvrager, goedkeurder, uitvoerder (nooit dezelfde persoon!)",
        "✅ Bij Phoenix Metals: ALLE stoffen zijn gevaarlijk — ALTIJD TRA+LOTO",
        "✅ LMRA bij twijfel? STOP! — Je mag ALTIJD weigeren onveilig werk"
    ], icon="📋")

    make_slide(prs, "Bronverwijzingen", [
        "[1] Arbowet art. 3 — Algemene zorgplicht",
        "[2] Arbobesluit art. 3.5 — Explosieve atmosferen",
        "[3] Seveso III Richtlijn 2012/18/EU — Safety Management System",
        "[4] NEN-EN-ISO 45001:2018 — Arbeidsomstandigheden managementsysteem",
        "[5] OSHA 29 CFR 1910.147 — The control of hazardous energy (LOTO referentie)",
        "[6] NEN-EN 14986 — Veiligheid van machines (energie-isolatie)",
        "[7] NEN 3140 — Bedrijfsvoering van elektrische installaties",
        "[8] ISSA — Guidelines on Permit to Work systems",
        "[9] UK HSE — Safe maintenance: Permit to Work (referentie)",
        "[10] Bedrijfsvoorschriften Phoenix Metals — VR-400 serie"
    ], icon="📚")

    path = os.path.join(OUT_DIR, "PM_EL_T11_Permit_to_Work_Presentatie_v1.1.pptx")
    prs.save(path)
    print(f"✅ Saved: {path} ({len(prs.slides)} slides)")

# ============================================================
# T12: PBM Beleid en Gebruik
# ============================================================
def gen_T12():
    prs = Presentation()
    prs.slide_width = SLIDE_WIDTH
    prs.slide_height = SLIDE_HEIGHT
    code = "TR-303-04"
    title = "PBM Beleid en Gebruik"
    doelgroep = "Alle medewerkers"

    make_cover(prs, title, code)
    make_docinfo(prs, title, code, doelgroep)

    make_slide(prs, "Leerdoelen", [
        "Je begrijpt waarom PBM's het LAATSTE middel zijn, niet het eerste",
        "Je kent de verschillende soorten PBM's en hun normen",
        "Je kunt PBM's correct aantrekken en uittrekken (aantrekwisselprocedure)",
        "Je kent de PBM-matrix per taak bij Phoenix Metals",
        "Je weet welke PBM's vereist zijn bij V₂O₅ en H₂SO₄/NaOH blootstelling",
        "Je kunt de conditie van PBM's beoordelen en weet wanneer vervanging nodig is"
    ], icon="🎯")

    make_slide(prs, "Waarom deze training?", [
        "PBM's beschermen je als alle andere maatregelen falen of niet volstaan",
        "Onjuist gebruik van PBM's geeft een vals gevoel van veiligheid",
        "V₂O₅ is reprotoxisch (1B) en mogelijk kankerverwekkend — FFP3 is VERPLICHT",
        "H₂SO₄ en NaOH zijn bijtend — verkeerde handschoenen = ernstige brandwonden",
        "Phoenix Metals (Seveso III) eist een formeel PBM-beleid"
    ], icon="⚠️")

    make_slide(prs, "Wetgeving en normen", [
        "Arbowet art. 3 — Zorgplicht werkgever, medewewerkplicht werknemer",
        "Arbobesluit titel 3 afdeling 6 — PBM's algemene bepalingen",
        "Arbobesluit art. 3.6a — Beoordeling en keuze PBM's",
        "EU-richtlijn 89/656/EEG — Minimale voorschriften PBM-gebruik",
        "EN-normen per PBM-type (EN 166, EN 374, EN 14387, etc.)",
        "PGS 15 — Specifieke PBM-eisen bij opslag gevaarlijke stoffen"
    ], icon="📋")

    make_slide(prs, "CONCEPT: PBM-hiërarchie — Het laatste middel", [
        "PBM's zijn stap 5 in de hiërarchie van beheersmaatregelen",
        "1. Eliminatie → 2. Substitutie → 3. Technisch → 4. Organisatorisch → 5. PBM's",
        "PBM's worden ALTIJD gebruikt in combinatie met andere maatregelen",
        "NOOIT alleen op PBM's vertrouwen — ze falen bij verkeerd gebruik",
        "Phoenix Metals: LEV + afgesloten processen + PBM's = gecombineerde beheersing"
    ], icon="🛡️")

    make_slide(prs, "UITLEG: Soorten PBM's — Overzicht", [
        "1. Veiligheidsbril (oogbescherming) — EN 166",
        "2. Veiligheidsschoenen (voetbescherming) — EN ISO 20345",
        "3. Handschoenen (handbescherming) — EN 374/388",
        "4. Gehoorbescherming — EN 352",
        "5. Adembescherming — EN 14387 (halfmasker) / EN 149 (FFP)",
        "6. Beschermende kleding — EN 13034 / EN 14605",
        "7. Gezichtsbeschermer — EN 166 (faceshield)",
        "8. Valbeveiliging — EN 361/358 (indien werken op hoogte)"
    ], icon="📋")

    make_table_slide(prs, "PBM-normen en toepassingen", ["PBM", "Norm", "Beschermt tegen", "Kenmerken"], [
        ["Veiligheidsbril", "EN 166", "Spatten, stof, deeltjes", "Min. impact B (120 m/s), anti-condens"],
        ["Veiligheidsschoenen", "EN ISO 20345", "Vallende objecten, doorboring, slip", "S3 = staalneus + antistatisch + oleofiel"],
        ["Handschoenen (chemisch)", "EN 374", "Chemische stoffen", "Type A/B/C afhankelijk van penetratietijd"],
        ["Handschoenen (mechanisch)", "EN 388", "Snijden, schuren, perforatie", "Levels 1-5 per risicotype"],
        ["Gehoorbescherming", "EN 352", "Geluidsniveau > 80 dB(A)", "Oordoppen of kappen, SNR-waarde"],
        ["FFP3 masker", "EN 149", "Fijn stof, V₂O₅", "99% filtratie, eenmalig gebruik"],
        ["Halfmasker + filter", "EN 14387", "Gassen, dampen, deeltjes", "Herbruikbaar, filters vervangen"],
        ["Beschermende kleding", "EN 13034", "Chemisch spatten (type 6)", "Beperkt spatbestendig"]
    ], icon="📋")

    make_slide(prs, "VOORBEELD: Veiligheidsbril — EN 166", [
        "VERPLICHT in alle Phoenix Metals procesgebieden",
        "Beschermt tegen: spatten, stof, deeltjes, vloeistoffen",
        "Minimaal classificatie B (medium impact, 120 m/s)",
        "Met zijbescherming (verstevigd frame of afgesloten model)",
        "Anti-condens coating aanbevolen bij temperatuurverschillen",
        "Vervangen bij: krassen, breuk, troebel zicht, verouderd materiaal"
    ], icon="👓")

    make_slide(prs, "VOORBEELD: Veiligheidsschoenen — EN ISO 20345", [
        "VERPLICHT in alle Phoenix Metals gebieden (behalve kantoor)",
        "Minimaal S3: staalneus + antistatisch + oleofiele zool + doorboringresistent",
        "S4/S5: kunststof overschoen (volledig gesloten) voor natte omgevingen",
        "Antistatische zool VERPLICHT in ATEX-zones",
        "Vervangen bij: versleten profiel, beschadigde neus, losse zool",
        "Poeder dat in schoenen binnendringt → aparte overzchoenen overwegen"
    ], icon="👢")

    make_slide(prs, "Handschoenen — EN 374 (chemisch) en EN 388 (mechanisch)", [
        "EN 374 Type A: bescherming tegen ≥ 6 chemicaliën (langste penetratietijd)",
        "EN 374 Type B: bescherming tegen ≥ 3 chemicaliën",
        "EN 374 Type C: bescherming tegen ≥ 1 chemicalie (minimaal)",
        "EN 388: snijweerstand (1-5), schuurweerstand (1-4), perforatie (1-4)",
        "V₂O₅: nitril handschoenen (EN 374 Type A) — bestendig tegen oxidatoren",
        "H₂SO₄/NaOH: butyl of neopreen handschoenen — zuur/base bestendig"
    ], icon="🧤")

    make_slide(prs, "Gehoorbescherming — EN 352", [
        "VERPLICHT bij blootstelling > 85 dB(A) dagelijks (Arbobesluit)",
        "Oordoppen (EN 352-2): lichtgewicht, SNR 20-35 dB",
        "Gehoorkappen (EN 352-3): hogere demping, SNR 25-35 dB",
        "Phoenix Metals: transportbanden, mengers, pompen > 85 dB",
        "Gehoorverlies is ONHERROEPELIJK — bescherm wat je hebt!",
        "Pas op: overbescherming vermindert waakzaamheid (alarmen niet horen)"
    ], icon="👂")

    make_slide(prs, "Adembescherming — FFP3 en halfmaskers", [
        "FFP3 (EN 149): 99% filtratie deeltjes — VERPLICHT bij V₂O₅ blootstelling",
        "FFP2: 94% filtratie — onvoldoende voor V₂O₅!",
        "Halfmasker (EN 14387): herbruikbaar + verwisselbare filters",
        "P3-filter (deeltjes) voor V₂O₅-stof",
        "ABEK-filter (gassen) voor H₂SO₄-dampen",
        "Masker MOET goed passend zijn — baard/grote bril = lek!"
    ], icon="😷")

    make_slide(prs, "VALKUIL: Veelgemaakte fouten bij PBM's", [
        "❌ FFP2 gebruiken bij V₂O₅ — onvoldoende! FFP3 VERPLICHT",
        "❌ Latex handschoenen bij H₂SO₄ — niet bestendig! Nitril/butyl nodig",
        "❌ Masker met baard dragen — lekt langs de rand! Scheren of volgelaatsmasker",
        "❌ Handschoenen niet vervangen na contaminatie — doordrenking!",
        "❌ Beschermende kleding niet sluiten — open rits = open deur voor spatten"
    ], icon="❌")

    make_slide(prs, "Beschermende kleding — EN 13034", [
        "Type 6: beperkte bescherming tegen vloeibare chemische spatten",
        "Type 4: bescherming tegen vloeistofsproeiers (bij H₂SO₄/NaOH werk)",
        "Type 5: bescherming tegen vaste deeltjes (bij V₂O₅-poeder)",
        "Overall met lange mouwen, capuchon, elastische polsen en enkels",
        "Sluit alle ritsen en drukknopen — geen open huid blootstellen",
        "Na gebruik: reinigen of vervangen, NIET opnieuw gebruiken indien besmet"
    ], icon="👕")

    make_slide(prs, "Correct aantrekken — Aantrekwisselprocedure", [
        "VOLGORDE AANTREKKEN (buiten naar binnen):",
        "1. Beschermende kleding / overall",
        "2. Veiligheidsschoenen",
        "3. Veiligheidsbril",
        "4. Adembescherming (FFP3/halfmasker)",
        "5. Handschoenen (OVER de mouwen van de overall!)"
    ], icon="🔧")

    make_slide(prs, "Correct uittrekken — Afleggen zonder contaminatie", [
        "VOLGORDE UITTREKKEN (meest besmet eerst):",
        "1. Handschoenen (binnenstebuiten afstropen — huid NIET raken!)",
        "2. Adembescherming (achterhoofdband, NIET aan de voorkant pakken)",
        "3. Veiligheidsbril (aan de poten, NIET aan de glazen)",
        "4. Beschermende kleding (binnenstebuiten afstropen)",
        "5. Veiligheidsschoenen (indien besmet: overzchoenen apart afleggen)",
        "Handen wassen NA het uittrekken!"
    ], icon="🧤")

    make_slide(prs, "PBM-matrix per taak — Phoenix Metals", [
        "V₂O₅-poeder hantering: FFP3 + nitril handschoenen + overall Type 5 + veiligheidsbril",
        "H₂SO₄ hantering: gezichtsbeschermer + butyl handschoenen + overall Type 4 + veiligheidsschoenen S5",
        "NaOH hantering: gezichtsbeschermer + neopreen handschoenen + overall Type 4",
        "Algemeen procesgebied: veiligheidsbril + veiligheidsschoenen S3 + gehoorbescherming (> 85 dB)",
        "Onderhoud: + FFP3 (indien stof) + mechanische handschoenen EN 388",
        "Laboratorium: veiligheidsbril + nitril handschoenen + labjas"
    ], icon="📋")

    make_table_slide(prs, "PBM-matrix — Stoffen-specifiek", ["Stof", "Adembescherming", "Handschoenen", "Oogbescherming", "Kleding"], [
        ["V₂O₅", "FFP3 (EN 149)", "Nitril (EN 374-A)", "Bril EN 166", "Overall Type 5"],
        ["H₂SO₄", "— (indien damp: A-filter)", "Butyl (EN 374-A)", "Faceshield", "Overall Type 4"],
        ["NaOH", "—", "Neopreen (EN 374-A)", "Faceshield", "Overall Type 4"],
        ["Al₂(SO₄)₃", "FFP2 bij stof", "Nitril (EN 374)", "Bril EN 166", "Overall Type 6"]
    ], icon="📋")

    make_slide(prs, "PBM-onderhoud en vervanging", [
        "Inspecteer PBM's VÓÓR elk gebruik (scheuren, gaten, veroudering)",
        "FFP-maskers: eenmalig — NIET hergebruiken (max 8 uur gebruik)",
        "Halfmaskers: reinigen na gebruik, filters vervangen volgens indicatie",
        "Handschoenen: vervangen bij: penetratie, verkleuring, stijfheid, gaten",
        "Veiligheidsbril: reinigen met zachte doek, geen krassen maken",
        "Schoenen: controleren op versleten profiel, beschadigde neus"
    ], icon="🔧")

    make_slide(prs, "PBM-opslag", [
        "Bewaar PBM's op een schone, droge plaats",
        "Gescheiden opslag: schoon vs. gebruikt",
        "Adembescherming in afgesloten verpakking (geen contaminatie)",
        "Chemische handschoenen: donker, koel, uit de buurt van heat bronnen",
        "Beschermende kleding: opgehangen of netjes opgevouwen",
        "NOOIT PBM's in de buurt van chemische stoffen opslaan"
    ], icon="🏠")

    make_slide(prs, "Samenvatting — Key Takeaways (1/2)", [
        "✅ PBM's zijn het LAATSTE middel — altijd gecombineerd met andere maatregelen",
        "✅ V₂O₅ = FFP3 + nitril + overall Type 5 (geen uitzonderingen!)",
        "✅ H₂SO₄/NaOH = zuur/base bestendige handschoenen + gezichtsbeschermer"
    ], icon="📋")

    make_slide(prs, "Samenvatting — Key Takeaways (2/2)", [
        "✅ Correct aantrekken en uittrekken = voorkom secundaire blootstelling",
        "✅ Inspecteer PBM's voor elk gebruik — vervang bij twijfel",
        "✅ Ken de PBM-matrix voor jouw taak",
        "✅ Vraag om PBM's als ze ontbreken — het is JOUW recht en plicht"
    ], icon="📋")

    make_slide(prs, "Bronverwijzingen", [
        "[1] Arbowet art. 3 — Zorgplicht werkgever",
        "[2] Arbobesluit titel 3, afdeling 6 — PBM's",
        "[3] EU-richtlijn 89/656/EEG — Minimale voorschriften PBM-gebruik",
        "[4] EN 166:2002 — Oogbescherming",
        "[5] EN ISO 20345:2022 — Veiligheidsschoenen",
        "[6] EN 374 — Handschoenen tegen chemische stoffen",
        "[7] EN 388 — Handschoenen tegen mechanische risico's",
        "[8] EN 149:2001+A1:2009 — FFP-maskers",
        "[9] EN 14387:2004+A1:2008 — Gasfilter/halfmaskers",
        "[10] EN 13034 — Beschermende kleding (Type 6)"
    ], icon="📚")

    path = os.path.join(OUT_DIR, "PM_EL_T12_PBM_Beleid_en_Gebruik_Presentatie_v1.1.pptx")
    prs.save(path)
    print(f"✅ Saved: {path} ({len(prs.slides)} slides)")

# ============================================================
# T13: Safety Observation Process
# ============================================================
def gen_T13():
    prs = Presentation()
    prs.slide_width = SLIDE_WIDTH
    prs.slide_height = SLIDE_HEIGHT
    code = "TR-303-03"
    title = "Safety Observation Process"
    doelgroep = "MT, HSE, leidinggevenden"

    make_cover(prs, title, code)
    make_docinfo(prs, title, code, doelgroep)

    make_slide(prs, "Leerdoelen", [
        "Je kunt het verschil uitleggen tussen safety observation en inspectie",
        "Je herkent unsafe acts en unsafe conditions in de praktijk",
        "Je past de STOP-Look-Think-Act methode toe",
        "Je kunt effectief feedback geven (positief én corrigerend)",
        "Je kent het registratie- en analyseproces voor observaties",
        "Je begrijpt de no-blame cultuur en kunt deze uitdragen"
    ], icon="🎯")

    make_slide(prs, "Waarom deze training?", [
        "Safety observations zijn de meest effectieve methode om incidenten te voorkomen",
        "Voor elke dodelijke ongeval zijn er ~300 near-misses en ~30.000 unsafe acts",
        "De HEINRICHT-piramide: investeer in de basis = voorkom de top",
        "Seveso III vereist actieve monitoring van veiligheidsprestaties",
        "Phoenix Metals wil een proactieve veiligheidscultuur — observaties zijn de motor"
    ], icon="⚠️")

    make_slide(prs, "Wetgeving en kader", [
        "Arbowet art. 3 — Zorgplicht werkgever + medewerkingplicht werknemer",
        "Seveso III — Safety Management System vereist actieve monitoring",
        "ISO 45001 §9.1 — Monitoring, meting, analyse en evaluatie",
        "IOGP (Oil & Gas Producers) — Safety Observation Guidelines",
        "DuPont — Safety Training Observation Program (STOP) — referentie",
        "Bedrijfsvoorschriften Phoenix Metals — VR-500 serie (Observaties)"
    ], icon="📋")

    make_slide(prs, "CONCEPT: Safety Observation vs Inspectie", [
        "INSPECTIE: controle op naleving van regels, voorschriften, procedures",
        "  → Focus: wat is er fout? (compliance-gedreven)",
        "  → Voorbeeld: controle of brandblussers gekeurd zijn",
        "OBSERVATIE: kijken naar GEDRAG van medewerkers in hun werkomgeving",
        "  → Focus: wat gaat goed, wat kan beter? (gedragsgedreven)",
        "  → Voorbeeld: observeren hoe een operator PBM's aantrekt",
        "Observaties zijn NIET bedoeld om te straffen — maar om te LEREN"
    ], icon="👁️")

    make_slide(prs, "UITLEG: Unsafe Acts vs Unsafe Conditions", [
        "UNSAFE ACT: onveilig GEDRAG door een persoon",
        "  → Voorbeelden: PBM's niet dragen, procedure niet volgen, afkortingen nemen",
        "UNSAFE CONDITION: onveilige TOESTAND in de werkomgeving",
        "  → Voorbeelden: lekkage, ontbrekende afscherming, defecte apparatuur",
        "Verhouding: ~88% van alle incidenten wordt veroorzaakt door unsafe acts",
        "Daarom: focus op GEDRAG via observaties = grootste impact"
    ], icon="🔍")

    make_slide(prs, "VOORBEELD: Unsafe Acts bij Phoenix Metals", [
        "FFP2 dragen in plaats van FFP3 bij V₂O₅ hantering",
        "Handschoenen niet vervangen na contaminatie",
        "Aarding niet controleren voor start werkzaamheden",
        "LOTO-slagen overslaan bij 'klein' onderhoud",
        "Reinigen met bezem in plaats van ATEX-gecertificeerde zuiger",
        "Werken zonder geldig PtW",
        "Pauze nemen in ATEX-zone zonder toestemming"
    ], icon="⚠️")

    make_slide(prs, "VOORBEELD: Unsafe Conditions bij Phoenix Metals", [
        "Stofafzetting > 1 mm op constructies",
        "Ontbrekende of onleesbare etiketten op containers",
        "Defecte aardingskabels",
        "Ontbrekende ventilatie (LEV defect)",
        "Geblokkeerde vluchtroutes",
        "Verlopen brandblussers",
        "Lekkage H₂SO₄-leiding"
    ], icon="🔥")

    make_slide(prs, "VALKUIL: Veelgemaakte fouten bij observaties", [
        "❌ Observatie = controleren/betrappen (straffen)",
        "❌ Alleen negatieve observaties registreren (veilig gedrag ook!)",
        "❌ Observatie-formulier invullen ZONDER met de persoon te praten",
        "❌ Te weinig observaties uitvoeren (teken aan de muur)",
        "❌ Observaties alleen door HSE laten doen (IEMANDS verantwoordelijkheid!)",
        "❌ Geen follow-up op geregistreerde observaties"
    ], icon="❌")

    make_slide(prs, "STOP — Look, Think, Act", [
        "S = STOP — Neem de tijd, pauzeer je eigen taken",
        "T = THINK — Wat zie je? Wat is het verwachte gedrag? Wat is het werkelijke gedrag?",
        "O = OBSERVE — Kijk naar de TAAK, de PERSOON, de OMGEVING",
        "P = PROCEED — Neem actie: praat, registreer, volg op",
        "DuPont STOP-programma: bewezen effectief in procesindustrie",
        "Minimaal 2 observaties per leidinggevende per week"
    ], icon="🛑")

    make_slide(prs, "Observatiegebieden — De 7 categorieën", [
        "1. PBM-gebruik — correct type, correcte pasvorm, correct gebruik",
        "2. Positie van personen —vallen, strikken, beknelling, ergonomie",
        "3. Gereedschappen en apparatuur — conditie, correct gebruik",
        "4. Procedures en volgorde — wordt de procedure gevolgd?",
        "5. Huiselijkheid (housekeeping) — orde, netheid, toegankelijkheid",
        "6. Lichaamsmechanica — tillen, buigen, repetitieve bewegingen",
        "7. Algemene omgeving — verlichting, geluid, temperatuur, ventilatie"
    ], icon="👁️")

    make_slide(prs, "Feedback geven — Positief", [
        "Positieve feedback = minstens zo belangrijk als corrigerende feedback!",
        "Versterkt gewenst gedrag (gedrag dat beloond wordt, wordt herhaald)",
        "Concrete, specifieke feedback: niet 'goed bezig' maar 'ik zie dat je FFP3 draagt bij V₂O₅, prima!'",
        "Direct geven (niet dagen later)",
        "Publiek of privé? Afhankelijk van cultuur — publiek kan motiveren",
        "Doel: 70% positieve observaties, 30% corrigerende (positieve ratio!)"
    ], icon="👍")

    make_slide(prs, "Feedback geven — Corrigerend", [
        "ALTIJD in een no-blame context: 'Ik zie dat... kan ik je helpen?'",
        "Focus op GEDRAG, niet op de PERSOON",
        "Stel vragen: 'Waarom doe je het op deze manier?' (begrijp de context)",
        "Samen oplossing zoeken: 'Wat kunnen we doen om dit veiliger te maken?'",
        "Spreek af wat verandert en wanneer",
        "NOOIT: schreeuwen, belachelijk maken, straffen voor melding"
    ], icon="💬")

    make_slide(prs, "Registratie — Safety Observation Card", [
        "Elke observatie wordt geregistreerd op een observation card (papier of digitaal)",
        "Velden: datum, tijd, locatie, observator, categorie, beschrijving, actie",
        "Positief én corrigerend — beide registreren!",
        "Anoniem invullen indien gewenst (bij gevoelige observaties)",
        "Inleveren bij HSE of digitaal via het veiligheidsplatform",
        "Target: minimaal 10 observaties per 100 werknemers per week"
    ], icon="📋")

    make_slide(prs, "Trending en analyse", [
        "Alle observaties worden maandelijks geanalyseerd door HSE",
        "Trending: welke categorieën komen het meest voor?",
        "Hotspots: op welke locaties/afdelingen de meeste observaties?",
        "Seizoensgebonden patronen: meer observaties in winter? Na vakanties?",
        "Vergelijking met incidentdata: dalen incidenten als observaties stijgen?",
        "Rapportage naar MT in maandelijks HSE-overleg"
    ], icon="📊")

    make_slide(prs, "Koppeling aan KPI's", [
        "Observatiegraad: aantal observaties per medewerker per maand (target: ≥ 2)",
        "Positieve ratio: % positieve observaties (target: ≥ 70%)",
        "Sluitingspercentage: % afgehandelde observaties binnen 14 dagen (target: ≥ 90%)",
        "Correlatie met TRIR: dalen incidenten als observaties stijgen?",
        "Feedback-kwaliteit: zijn de observaties specifiek en actiegericht?",
        "MT-zichtbaarheid: hoeveel observaties worden door MT-leden gedaan?"
    ], icon="📈")

    make_slide(prs, "No-blame cultuur — Essentie", [
        "Medewerkers die onveilige situaties melden = HELDEN, niet verraders",
        "Focus op SYSTEEMFALEN, niet op persoonlijke schuld",
        "Als iemand een unsafe act vertoont: vraag WAAROM, niet wie de schuldige is",
        "Straffen voor melden = einde van de observatiecultuur",
        "James Reason: 'We can't change the human condition, but we can change the conditions under which humans work'",
        "Just Culture: eerlijke, open cultuur met duidelijke grenzen"
    ], icon="🤝")

    make_slide(prs, "Just Culture — Gedragskeuzemodel", [
        "1. OPZETTELIJK gedrag → disiplinaire actie (bewust onveilig gedrag)",
        "2. ROEKELLOOS gedrag → disiplinaire actie (bewust risico genomen)",
        "3. NIET-NALEEFBAARHEID → coaching (onwetendheid, onvermogen)",
        "4. MENSELIJKE FOUT → systeemverbetering (Iedereen maakt fouten)",
        "Phoenix Metals: de grens ligt bij opzettelijk en roekeloos gedrag",
        "Medewerkers die incidenten/observaties melden = altijd beschermd"
    ], icon="⚖️")

    make_slide(prs, "Voorbeelden uit de metaalindustrie", [
        "Corus (Tata Steel) IJmuiden: STOP-programma met 500+ observaties/maand",
        "ArcelorMittal: gedragsobservatieprogramma reduceerde TRIR met 40%",
        "Shell: 'Hearts & Minds' programma — observaties als kerninstrument",
        "Dow Chemical: behavioral-based safety observaties > 10.000/jaar",
        "Common factor: MT-betrokkenheid en no-blame cultuur = succesfactoren"
    ], icon="🏭")

    make_slide(prs, "MT-rol in het observatieproces", [
        "MT-leden MOETEN zelf observaties uitvoeren (voorbeeldgedrag!)",
        "Minimaal 1 observatie per MT-lid per week",
        "Zichtbaarheid: MT op de vloer = signaal dat veiligheid serieus is",
        "Maandelijks veiligheidsoverleg: observatietrends bespreken",
        "Beloning: beste observateurs erkennen (publiekelijk!)",
        "Investering: middelen beschikbaar stellen voor verbeteracties"
    ], icon="👔")

    make_slide(prs, "Observatiecyclus — Plan-Do-Check-Act", [
        "PLAN: Bepaal focusgebied (bijv. PBM-gebruik in Q2)",
        "DO: Voer observaties uit (minimaal 2/week per leidinggevende)",
        "CHECK: Analyseer resultaten (maandelijks trending)",
        "ACT: Implementeer verbeteringen, pas focus aan",
        "Herhaal → continue verbetercyclus",
        "Phoenix Metals: integratie in ISO 45001 management review"
    ], icon="🔄")

    make_slide(prs, "Samenvatting — Key Takeaways (1/2)", [
        "✅ Observatie ≠ inspectie: focus op gedrag, niet alleen compliance",
        "✅ Unsafe acts (88%) > unsafe conditions — focus op gedrag!",
        "✅ STOP-methode: Stop, Think, Observe, Proceed",
        "✅ 70/30 regel: minstens 70% positieve feedback"
    ], icon="📋")

    make_slide(prs, "Samenvatting — Key Takeaways (2/2)", [
        "✅ No-blame cultuur: melden = helpen, niet verraden",
        "✅ Just Culture: onderscheid tussen opzettelijk, roekeloos en menselijke fout",
        "✅ MT moet het VOORBEELD geven: zelf observeren, zichtbaar op de vloer",
        "✅ Observaties koppelen aan KPI's en trending voor continue verbetering"
    ], icon="📋")

    make_slide(prs, "Bronverwijzingen", [
        "[1] Arbowet art. 3 — Zorgplicht en medewerkingplicht",
        "[2] Seveso III Richtlijn 2012/18/EU — SMS en monitoring",
        "[3] ISO 45001:2018 §9.1 — Monitoring en evaluatie",
        "[4] IOGP Report 435 — Safety Observation Guidelines",
        "[5] DuPont — Safety Training Observation Program (STOP)",
        "[6] James Reason — 'Managing the Risks of Organizational Accidents' (1997)",
        "[7] Heinrich — Industrial Accident Prevention (1931, piramide)",
        "[8] Shell — Hearts & Minds safety culture programme",
        "[9] NEN-EN-ISO 45001 — Managementsysteem arbeidsomstandigheden",
        "[10] Sidney Dekker — 'Just Culture: Restoring Trust and Accountability' (2024)"
    ], icon="📚")

    path = os.path.join(OUT_DIR, "PM_EL_T13_Safety_Observation_Process_Presentatie_v1.1.pptx")
    prs.save(path)
    print(f"✅ Saved: {path} ({len(prs.slides)} slides)")

# ============================================================
# T14: Alcohol & Drugs Zero Tolerance
# ============================================================
def gen_T14():
    prs = Presentation()
    prs.slide_width = SLIDE_WIDTH
    prs.slide_height = SLIDE_HEIGHT
    code = "TR-303-05"
    title = "Alcohol & Drugs Zero Tolerance"
    doelgroep = "Alle medewerkers"

    make_cover(prs, title, code)
    make_docinfo(prs, title, code, doelgroep)

    make_slide(prs, "Leerdoelen", [
        "Je kent het zero-tolerance beleid van Phoenix Metals ten aanzien van alcohol en drugs",
        "Je begrijpt de effecten van alcohol en drugs op het reactievermogen",
        "Je kent de risico's van gebruik in de procesindustrie",
        "Je weet wanneer en hoe testing plaatsvindt",
        "Je kent de consequenties bij overtreding",
        "Je weet welke hulpverlening beschikbaar is bij problematisch gebruik"
    ], icon="🎯")

    make_slide(prs, "Waarom deze training?", [
        "Alcohol en drugs verminderen het oordeelsvermogen en reactievermogen",
        "In de procesindustrie kan één fout fataal zijn — voor jou EN je collega's",
        "Seveso III-inrichtingen hebben een verhoogde zorgplicht",
        "V₂O₅, H₂SO₄, NaOH — werken met deze stoffen vereist 100% focus",
        "Zero tolerance = geen uitzonderingen, geen grijze gebieden"
    ], icon="⚠️")

    make_slide(prs, "Wetgeving", [
        "Arbowet art. 3 — Zorgplicht werkgever + medewerkingplicht werknemer",
        "Arbowet art. 11 — Verbod op werken onder invloed",
        "Arbobesluit — specifieke bepalingen per risicovolle taak",
        "Wegenverkeerswet — alcohol/drugs in het verkeer (referentie)",
        "Opiumwet — verboden middelen en strafbaarstelling",
        "Seveso III — adequaat functioneren van personeel vereist"
    ], icon="📋")

    make_slide(prs, "Statistieken", [
        "~20% van alle industriële incidenten heeft alcohol of drugs als bijdragende factor",
        "Medewerkers onder invloed hebben 3-4x hoger risico op een ongeval",
        "Hangover (kater) vermindert reactievermogen met 20-30%",
        "Cannabis: tot 24 uur na gebruik verstoord de concentratie en het geheugen",
        "In de petrochemie was 12% van fatale incidenten gerelateerd aan middelengebruik"
    ], icon="📊")

    make_slide(prs, "CONCEPT: Zero-Tolerance Beleid Phoenix Metals", [
        "DEFINITIE: Geen enkel spoor van alcohol of drugs in het bloed tijdens werk",
        "Geldt voor: ALLE medewerkers, ALLE functies, ALLE locaties",
        "Geldt OOK voor: uitzendkrachten, aannemers, bezoekers in procesgebieden",
        "Inclusief: voorschriften die het rijgedrag beïnvloeden (slaapmiddelen, pijnstillers)",
        "Geen tolerantie = geen uitzonderingen = geen discussie",
        "Overtreding = direct schorsing + onderzoek"
    ], icon="🚫")

    make_slide(prs, "UITLEG: Wat valt onder het beleid?", [
        "Alcohol: alle dranken met > 0.5% alcohol",
        "Illegale drugs: cannabis, cocaine, amfetaminen, XTC, heroïne, etc.",
        "Voorgeschreven medicatie: als deze het rijgedrag beïnvloedt",
        "Nieuw psychoactieve stoffen (NPS): designer drugs, kruidenmixen",
        "Slaapmiddelen: diazepam, temazepam, zolpidem (ook op recept!)",
        "Pijnstillers: opioïden (oxycodon, fentanyl, morfine)"
    ], icon="💊")

    make_slide(prs, "VOORBEELD: Effecten op het reactievermogen", [
        "ALCOHOL (0.5‰): 10-15% tragere reactietijd, verstoord oordeel",
        "ALCOHOL (1.0‰): 25-35% tragere reactietijd, dubbel zoveel fouten",
        "CANNABIS: vertraagde reactie, verstoord tijdsbesef, verminderde concentratie",
        "COCAÏNE: overschatting van eigen kunnen, impulsiviteit, agressie",
        "AMFETAMINES: onrust, concentratieverlies na uitwerking, slaaptekort",
        "KATER: tot 30% verminderd reactievermogen, zelfs na 0.0‰ bloedspiegel"
    ], icon="🧠")

    make_slide(prs, "VALKUIL: Veelgemaakte fouten", [
        "❌ 'Een biertje na het werk kan geen kwaad' — morgen nog steeds in je bloed!",
        "❌ 'Cannabis is legaal' — NIET op het werk! Zero tolerance geldt",
        "❌ 'Ik voel niks van die pil' — effect op reactievermogen is meetbaar!",
        "❌ 'Ik heb een recept' — informeer HSE, laat beoordelen of je veilig kunt werken",
        "❌ 'Alleen op kantoor, niet in het proces' — zero tolerance geldt OVERAL"
    ], icon="❌")

    make_slide(prs, "Risico's in de procesindustrie", [
        "Werken met giftige stoffen (V₂O₅) — 1 fout = blootstelling",
        "Werken met bijtende stoffen (H₂SO₄, NaOH) — 1 fout = brandwonden",
        "Stofexplosiegevaar — 1 vonk = catastrofe",
        "LOTO-procedures — 1 slachtoffer = machinaal ongeluk",
        "Rijden met heftrucks — 1 botsing = letsel of erger",
        "Werken op hoogte — 1 duizeling = val",
        "Samenwerken — jouw fout kan een COLLEGA deren!"
    ], icon="☠️")

    make_slide(prs, "Soorten middelen — Alcohol", [
        "Meest gebruikte middel in Nederland (83% van de bevolking drinkt)",
        "Effect: remt het centrale zenuwstelsel, vermindert remmingen en reactie",
        "Halveringstijd: ~1 uur per glas (1 standaardglas = 10 g alcohol)",
        "Na een avondje uit: tot 12 uur na de laatste drank meetbaar",
        "Kater: hoofdpijn, vermoeidheid, concentratieverlies — ook zonder bloedspiegel",
        "Interactie met V₂O₅: leverbelasting verdubbeld!"
    ], icon="🍺")

    make_slide(prs, "Soorten middelen — Cannabis", [
        "Meest gebruikte illegale drug in Nederland",
        "Actieve stof: THC — verstoort het kortetermijngeheugen en reactievermogen",
        "THC is tot 4 weken aantoonbaar in urine (chronisch gebruik)",
        "Effect op rijvaardigheid: tot 8 uur na gebruik",
        "Combinatie met alcohol: versterkt elkaars negatieve effecten",
        "Phoenix Metals: ook CBD-olie valt onder het beleid (THC-gehalte mogelijk)"
    ], icon="🌿")

    make_slide(prs, "Soorten middelen — Harddrugs", [
        "Cocaïne: stimulant, korte werking (1-2 uur), agressie en onvoorspelbaar gedrag",
        "Amfetaminen/speed: oppeppend, nawerking = extreme vermoeidheid",
        "XTC/MDMA: entactogeen, verstoord thermo-regulatie en oordeel",
        "GHB: verdovend, levensgevaarlijk bij overdosering",
        "Heroïne: sterk verslavend, volledige desinteresse en verdoofdheid",
        "Ketamine: dissociatief, volledige vervreemding van de realiteit"
    ], icon="💀")

    make_slide(prs, "Soorten middelen — Medicatie", [
        "Opioïde pijnstillers: oxycodon, tramadol, fentanyl — vermoeidheid, duizeligheid",
        "Benzodiazepinen: diazepam, temazepam — sedatie, verstoord evenwicht",
        "Slaapmiddelen: zolpidem, zopiclon — nawerking overdag",
        "Antihistaminica: sommige veroorzaken slaperigheid",
        "Antidepressiva: soms bijwerkingen (duizeligheid, tremor)",
        "REGEL: meld medicatie aan HSE → beoordeling of veilig werken mogelijk is"
    ], icon="💊")

    make_table_slide(prs, "Middelen en detectietijden (indicatief)", ["Middel", "Detectie in bloed", "Detectie in urine", "Detectie in speeksel"], [
        ["Alcohol", "Tot 12 uur", "Tot 24 uur (EtG)", "Tot 12 uur"],
        ["Cannabis (incidenteel)", "Tot 12 uur", "Tot 7 dagen", "Tot 24 uur"],
        ["Cannabis (chronisch)", "Tot 24 uur", "Tot 30 dagen", "Tot 48 uur"],
        ["Cocaïne", "Tot 12 uur", "Tot 4 dagen", "Tot 48 uur"],
        ["Amfetaminen", "Tot 24 uur", "Tot 4 dagen", "Tot 48 uur"],
        ["Opioïden", "Tot 24 uur", "Tot 4 dagen", "Tot 48 uur"],
        ["Benzodiazepinen", "Tot 48 uur", "Tot 14 dagen", "Tot 48 uur"]
    ], icon="📊")

    make_slide(prs, "Testing — Wanneer?", [
        "PRE-EMPLOYMENT: standaard bij aanname (na akkoord kandidaat)",
        "BIJ VERMOEDEN: als er redenen zijn om gebruik te vermoeden",
        "  → Gedragsverandering, geur, rode ogen, slurred speech",
        "POST-INCIDENT: na elk incident met letsel of materiële schade",
        "RANDOM: steekproefsgewijs (anoniem, niet-gericht)",
        "TERUGKEER: na positieve test en voltooide hulpverleningstraject"
    ], icon="🔬")

    make_slide(prs, "Testing — Hoe?", [
        "Speekseltest: snelle screening (5-10 minuten), indicatief",
        "Urinetest: bevestiging na positieve speekseltest",
        "Bloedtest: bij twijfel of juridische procedure",
        "Alcoholtest: blaastest (breathalyzer), direct resultaat",
        "Procedure: ALTijd met getuige, resultaat direct gecommuniceerd",
        "Positieve test: bevestigingstest in laboratorium (Gecertificeerd)"
    ], icon="🧪")

    make_slide(prs, "Consequenties bij overtreding", [
        "POSITIEVE TEST (eerste keer):",
        "  → Directe schorsing (met behoud van salaris, wettelijk minimum)",
        "  → Verwijzing naar hulpverleningstraject",
        "  → Bij voltooiing: terugkeer mogelijk onder voorwaarden",
        "POSITIEVE TEST (tweede keer):",
        "  → Ontslag op staande voet (op basis van arbeidsovereenkomst)",
        "WEIGERING TEST:",
        "  → Gelijkgesteld aan een positieve test",
        "ILLEGALE MIDDELEN OP HET WERK:",
        "  → Direct ontslag + aangifte bij politie"
    ], icon="⚖️")

    make_slide(prs, "Hulpverlening — Wat is beschikbaar?", [
        "Bedrijfsmaatschappelijk werk (via arbodienst)",
        "Anoniem spreekuur: via bedrijfsarts of vertrouwenspersoon",
        "Verwijs naar: Jellinek, Tactus, Novadic-Kentron (verslavingszorg)",
        "Hulpvraag wordt NIET gedeeld met leidinggevende (beroepsgeheim!)",
        "Zelfmelding VOORDAT je getest wordt = geen sanctie, wel hulp",
        "Phoenix Metals steunt medewerkers die hulp zoeken — dat is de no-blame aanpak"
    ], icon="🤝")

    make_slide(prs, "Zelfmelding — Hoe werkt het?", [
        "Je meldt ZELF bij de bedrijfsarts of HSE dat je een probleem hebt",
        "Dit kan ALTIJD — ook VOORDAT er een test is",
        "De bedrijfsarts begeleidt je naar hulpverlening",
        "Je leidinggevende wordt NIET geïnformeerd over de inhoud (privacy)",
        "Wel: je kunt tijdelijk ander werk toegewezen krijgen (veiligheid!)",
        "Na succesvol traject: terugkeer in eigen functie, geen consequenties"
    ], icon="📞")

    make_slide(prs, "Casuïstiek — Voorbeeld 1", [
        "Situatie: Operator meldt zich ziek op maandag na een feestje",
        "Dinsdag: hervatting werk, maar collega merkt trage reacties op",
        "Observatie: leidinggevende spreekt aan, vermoeden van kater/invloed",
        "Actie: breathalyzer-test — 0.3‰ (onder wettelijke grens, maar boven bedrijfsgrens)",
        "Resultaat: schorsing 1 dag, verwijzing naar bedrijfsarts, coaching",
        "Les: ZERO tolerance betekent 0.0‰ — ook na een 'klein feestje'"
    ], icon="📋")

    make_slide(prs, "Casuïstiek — Voorbeeld 2", [
        "Situatie: Monteur betrokken bij incident met H₂SO₄-lekkage",
        "Post-incident testing: positief op cannabis (THC in urine)",
        "Onderzoek: monteur rookte in het weekend, 3 dagen voor incident",
        "Resultaat: schorsing, hulpverleningstraject, terugkeer na 3 maanden",
        "Les: cannabis is tot lang na gebruik aantoonbaar en beïnvloedt veilig werken",
        "Belangrijk: post-incident testing is STANDAARD — geen uitzondering"
    ], icon="📋")

    make_slide(prs, "Rol van de medewerker", [
        "Zorg dat je 100% fit bent als je komt werken",
        "Meld medicatie aan HSE — laat beoordelen of je veilig kunt werken",
        "Steun collega's die hulp zoeken — geen oordeel",
        "Rapporteer vermoedens van gebruik bij collega's (anoniem mogelijk)",
        "Ken het beleid en de consequenties",
        "Vraag om hulp als je zelf worstelt — er is ALTIJD een uitweg"
    ], icon="👷")

    make_slide(prs, "Rol van de leidinggevende", [
        "Wees alert op signalen van gebruik (gedragsveranderingen)",
        "Spreek aan bij vermoeden — niet wegkijken!",
        "Bied hulp aan, niet straffen (bij eerste keer / zelfmelding)",
        "Zorg voor een open cultuur waarin problemen bespreekbaar zijn",
        "Documenteer observaties en acties",
        "Volg de procedure: vermoeden → test → consequentie/hulp"
    ], icon="👔")

    make_slide(prs, "Samenvatting — Key Takeaways (1/2)", [
        "✅ Zero tolerance = 0.0‰ alcohol, geen drugs, geen beïnvloede medicatie",
        "✅ Alcohol/drugs vermindert reactievermogen met 10-35% — fataal in procesindustrie",
        "✅ Testing: pre-employment, bij vermoeden, post-incident, random"
    ], icon="📋")

    make_slide(prs, "Samenvatting — Key Takeaways (2/2)", [
        "✅ Overtreding = schorsing + hulpverlening (1e keer) of ontslag (2e keer)",
        "✅ Zelfmelding = geen sanctie, wel hulp — meld VOORDAT je getest wordt",
        "✅ Hulpverlening is beschikbaar en vertrouwelijk",
        "✅ Jouw veiligheid en die van je collega's is het belangrijkst"
    ], icon="📋")

    make_slide(prs, "Bronverwijzingen", [
        "[1] Arbowet art. 3 en 11 — Zorgplicht en verbod werken onder invloed",
        "[2] Opiumwet — Strafbarestelling drugs",
        "[3] Seveso III Richtlijn 2012/18/EU — Competentie personeel",
        "[4] Trimbos-instituut — Factsheets alcohol en drugs",
        "[5] TNO — Effecten van middelen op cognitief functioneren",
        "[6] Jellinek — Verslavingszorg Nederland",
        "[7] IOGP — Drug and alcohol testing in the oil and gas industry",
        "[8] NEN-EN-ISO 45001 — Competentie en bewustzijn",
        "[9] European Workplace Drug Testing Society (EWDTS) — Guidelines",
        "[10] Rivm — Nationale Drug Monitor (jaarrapport)"
    ], icon="📚")

    path = os.path.join(OUT_DIR, "PM_EL_T14_Alcohol_Drugs_Zero_Tolerance_Presentatie_v1.1.pptx")
    prs.save(path)
    print(f"✅ Saved: {path} ({len(prs.slides)} slides)")

# ============================================================
# Main
# ============================================================
if __name__ == "__main__":
    os.makedirs(OUT_DIR, exist_ok=True)
    print("=== Batch 2 PPTX Generation — T08-T14 v1.1 ===")
    gen_T08()
    gen_T09()
    gen_T10()
    gen_T11()
    gen_T12()
    gen_T13()
    gen_T14()
    print("=== ALLE 7 PPTX bestanden gegenereerd ===")
