#!/usr/bin/env python3
"""Generate D2 Veilig Werken HSEQ v5.0 — update from 8 to 20 substances."""

from docx import Document
from docx.shared import Pt, Cm, Inches, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn
from copy import deepcopy
import datetime

SRC = '/root/projects/jg/2026-pgs15-phoenix-metals/deliverables/docx/PGS15_VeiligWerken_HSEQ_Phoenix_Metals_D2_v4.0.docx'
DST = '/root/projects/jg/2026-pgs15-phoenix-metals/deliverables/docx/PGS15_VeiligWerken_HSEQ_Phoenix_Metals_D2_v5.0.docx'

doc = Document(SRC)

# ── Helper functions ──
def set_cell_text(cell, text, bold=False, size=Pt(8)):
    """Clear cell and set text with formatting."""
    for p in cell.paragraphs:
        for r in p.runs:
            r.text = ''
    p = cell.paragraphs[0]
    p.alignment = WD_ALIGN_PARAGRAPH.LEFT
    run = p.add_run(text)
    run.font.size = size
    run.font.name = 'Calibri'
    run.bold = bold
    # shade header row
    return run

def clear_table(table, num_rows, num_cols):
    """Resize table and clear all cells."""
    # Remove excess rows
    while len(table.rows) > num_rows:
        tr = table.rows[-1]._tr
        table._tbl.remove(tr)
    while len(table.rows) < num_rows:
        table.add_row()
    # Clear all cells
    for row in table.rows:
        for cell in row.cells:
            for p in cell.paragraphs:
                for r in p.runs:
                    r.text = ''

def set_cell_shading(cell, color):
    """Set background shading for a cell."""
    shading = cell._tc.get_or_add_tcPr()
    shd = shading.find(qn('w:shd'))
    if shd is None:
        shd = cell._tc.makeelement(qn('w:shd'), {})
        shading.append(shd)
    shd.set(qn('w:fill'), color)
    shd.set(qn('w:val'), 'clear')

# ── 20 SUBSTANCES DATA ──
substances = [
    # (ID, Name, CAS, ADR/PG, Conc, Qty, Verpakking, Locatie, H-codes)
    ("IC-01", "Steelmaking Slag (Ladle Slag)", "65996-71-6", "Niet gereguleerd", "Poeder", "Per campagne", "Big-bag/IBC", "Opslag A", "H315, H318, H335, H372"),
    ("IC-02", "Sulfuric acid 25% (3M)", "7664-93-9", "Klasse 8 / UN 2796 / PG II", "25% (3M)", "Per campagne", "Jerrycan/IBC", "Opslag A (zuur)", "H290, H314, H318"),
    ("IC-03", "Hydrogen peroxide 30%", "7722-84-1", "Klasse 5.1(8) / UN 2014 / PG II", "30%", "Per campagne", "Jerrycan/IBC", "Opslag B (ox)†††", "H302, H318, H332"),
    ("IC-04", "Sodium persulfate", "7775-27-1", "Klasse 5.1 / UN 1505 / PG III", "Poeder", "Per campagne", "Zak/Kunststof vat", "Opslag B (ox)†††", "H272, H302, H315, H317, H319, H334, H335"),
    ("IC-05", "Hydrochloric acid 20%", "7647-01-0", "Klasse 8 / UN 1789 / PG II", "20%", "Per campagne", "Jerrycan/IBC", "Opslag A (zuur)", "H290, H315, H319, H335"),
    ("IM-01", "Calcium sulfate / silica (mix)", "10101-41-4 / 112945-52-5", "Niet gereguleerd", "Vast", "Proces-afhankelijk", "Big-bag/IBC", "Opslag C", "Geen"),
    ("IM-02", "Sodium sulfate decahydrate", "7727-73-3", "Niet gereguleerd", "Vast", "Proces-afhankelijk", "Zak/IBC", "Opslag C", "Geen"),
    ("IM-03", "Trisodium orthovanadate", "13721-39-6", "Niet gereguleerd", "Vast", "Proces-afhankelijk", "Kunststof vat", "Opslag C", "H302, H312, H315, H319, H332"),
    ("IM-04", "Sodium metavanadate (oplossing)", "13718-26-8", "Klasse 6.1 / UN 3285 / PG III", "Oplossing", "Proces-afhankelijk", "IBC/Container", "Opslag D (tox)††", "H301, H319, H332, H341, H361fd, H372, H411"),
    ("EP-01", "Calcium hydroxide", "1305-62-0", "Niet gereguleerd", "Vast", "Proces-afhankelijk", "Zak/Big-bag", "Opslag C", "H315, H318, H335"),
    ("EP-02", "Silica, precipitated", "112945-52-5", "Niet gereguleerd", "Poeder", "Proces-afhankelijk", "Zak/Big-bag", "Opslag C", "Geen"),
    ("EP-03", "Iron oxide (Fe₂O₃)", "1309-37-1", "Niet gereguleerd", "Poeder", "Proces-afhankelijk", "Zak/Big-bag", "Opslag C", "Geen"),
    ("EP-04", "Manganese(IV) oxide", "1313-13-9", "Niet gereguleerd", "Poeder", "Proces-afhankelijk", "Zak/Big-bag", "Opslag C", "H302, H332, H373"),
    ("EP-05", "Magnesium hydroxide", "1309-42-8", "Niet gereguleerd", "Vast", "Proces-afhankelijk", "Zak/Big-bag", "Opslag C", "Geen"),
    ("EP-06", "Sodium aluminate, solution", "1302-42-7", "Klasse 8 / UN 1819 / PG II", "Oplossing", "Proces-afhankelijk", "IBC/Container", "Opslag A (base)", "H290, H314, H318"),
    ("EP-07", "Sodium phosphate (TSP)", "7601-54-9", "Niet gereguleerd", "Poeder", "Proces-afhankelijk", "Zak/Big-bag", "Opslag C", "H315, H319, H335"),
    ("EP-08", "Vanadium pentoxide", "1314-62-1", "Klasse 6.1 / UN 2862 / PG III", "Poeder", "Proces-afhankelijk", "Kunststof vat", "Opslag D (tox/CMR)††", "H301, H318, H330, H335, H341, H350, H361fd, H362, H372, H411"),
    ("EP-09", "Vanadium electrolyte", "27774-13-6 e.a.", "Klasse 8 / UN 2796 / PG II", "Oplossing", "Proces-afhankelijk", "IBC/Container", "Opslag A (zuur)†", "H290, H302, H314, H318, H335, H361, H370, H372, H401, H411"),
]

# ── UPDATE VERSION & DATE ──
for p in doc.paragraphs:
    text = p.text.strip()
    if 'Versie 4.0' in p.text:
        for r in p.runs:
            r.text = r.text.replace('Versie 4.0', 'Versie 5.0')
    if 'Datum: 19 april 2026' in p.text:
        for r in p.runs:
            r.text = r.text.replace('Datum: 19 april 2026', 'Datum: 6 mei 2026')
    if 'Document D2 — Versie 4.0' in p.text:
        for r in p.runs:
            r.text = r.text.replace('Versie 4.0', 'Versie 5.0')

# ── UPDATE TABLE T0: Stoffenoverzicht (8→20 rows) ──
t0 = doc.tables[0]
clear_table(t0, len(substances) + 1, 9)  # +1 header
headers = ['#', 'Stof', 'CAS', 'ADR/PG', 'Concentratie', 'Hoeveelheid', 'Verpakking', 'Locatie', 'CLP H-zinnen']
HEADER_BG = '003366'
for j, h in enumerate(headers):
    cell = t0.rows[0].cells[j]
    set_cell_text(cell, h, bold=True, size=Pt(8))
    set_cell_shading(cell, HEADER_BG)
    for r in cell.paragraphs[0].runs:
        r.font.color.rgb = RGBColor(255, 255, 255)

for i, sub in enumerate(substances):
    row = t0.rows[i + 1]
    for j, val in enumerate(sub):
        set_cell_text(row.cells[j], val, bold=(j == 0), size=Pt(7))

# ── UPDATE TABLE T1: MAC-waarden ──
mac_data = [
    ("Vanadium pentoxide (V₂O₅)", "0,25", "—", "mg/m³ (inadembare fractie)", "SER-gr 2024"),
    ("Vanadium electrolyte (als V)", "0,25", "—", "mg/m³ (inadembare fractie)", "SER-gr 2024"),
    ("Sodium metavanadate (als V)", "0,25", "—", "mg/m³ (inadembare fractie)", "SER-gr 2024"),
    ("Sulfuric acid (H₂SO₄)", "0,1 (as mist)", "0,3", "mg/m³", "SER-gr 2024"),
    ("Hydrochloric acid (HCl)", "3", "6", "mg/m³", "SER-gr 2024"),
    ("Sodium persulfate (als S₂O₈)", "—", "—", "mg/m³", "Geen specifieke MAC"),
    ("Manganese(IV) oxide (als Mn)", "0,2 (inadembare fractie)", "—", "mg/m³", "SER-gr 2024"),
    ("Calcium hydroxide (als Ca(OH)₂)", "5", "10", "mg/m³", "SER-gr 2024"),
    ("Hydrogen peroxide (H₂O₂)", "1,4", "4,2", "mg/m³", "SER-gr 2024"),
    ("Sodium aluminate (als NaAlO₂)", "2 (als Al₂O₃)", "—", "mg/m³", "SER-gr 2024"),
]
t1 = doc.tables[1]
clear_table(t1, len(mac_data) + 1, 5)
mac_headers = ['Stof', 'MAC-waarde (TWA 8u)', 'MAC-waarde (STEL 15min)', 'Eenheid', 'Bron']
for j, h in enumerate(mac_headers):
    cell = t1.rows[0].cells[j]
    set_cell_text(cell, h, bold=True, size=Pt(8))
    set_cell_shading(cell, HEADER_BG)
    for r in cell.paragraphs[0].runs:
        r.font.color.rgb = RGBColor(255, 255, 255)
for i, row_data in enumerate(mac_data):
    for j, val in enumerate(row_data):
        set_cell_text(t1.rows[i + 1].cells[j], val, size=Pt(8))

# ── UPDATE TABLE T2: Blootstellingsscenario's ──
scenarios = [
    ("S1", "Lossen/ontvangst chemische grondstoffen", "H₂SO₄, HCl, H₂O₂, Na₂S₂O₈, NaAlO₂", "Huid, ogen, inademing (damp/nevel)", "Per levering"),
    ("S2", "Slag handling en dosering", "Steelmaking slag", "Huid, ogen, inademing (stof)", "Per batch"),
    ("S3", "Lixiviatie (zure extractie)", "H₂SO₄, HCl, slag, H₂O₂", "Huid, ogen, inademing (nevel)", "Continu proces"),
    ("S4", "Oxidatie-persulfaat dosering", "Na₂S₂O₈, H₂O₂", "Huid, ogen, inademing (stof/nevel)", "Per batch"),
    ("S5", "Vanadium-precipitatie en -extractie", "V₂O₅, NaVO₃, Na₃VO₄, elektrolyt", "Huid, ogen, inademing (stof/nevel)", "Per batch"),
    ("S6", "Bimonstering processtromen", "Alle vloeibare stoffen", "Huid, ogen, inademing", "Dagelijks"),
    ("S7", "Natriumaluminaat handling", "NaAlO₂ oplossing", "Huid, ogen (bijtend, pH>13)", "Per batch"),
    ("S8", "Reiniging en onderhoud apparatuur", "H₂SO₄, HCl, H₂O₂, elektrolytresten", "Huid, ogen, inademing", "Wekelijks"),
    ("S9", "Morsen/lekkage interventie", "Alle stoffen", "Huid, ogen, inademing, oraal", "Incidenteel"),
    ("S10", "Verpakking/afvoer eindproducten", "V₂O₅, elektrolyt, MnO₂, Ca(OH)₂", "Huid, ogen, inademing (stof)", "Per campagne"),
]
t2 = doc.tables[2]
clear_table(t2, len(scenarios) + 1, 5)
t2_headers = ['Scenario', 'Omschrijving', 'Betrokken stoffen', 'Blootstellingsroute', 'Frequentie']
for j, h in enumerate(t2_headers):
    cell = t2.rows[0].cells[j]
    set_cell_text(cell, h, bold=True, size=Pt(8))
    set_cell_shading(cell, HEADER_BG)
    for r in cell.paragraphs[0].runs:
        r.font.color.rgb = RGBColor(255, 255, 255)
for i, row_data in enumerate(scenarios):
    for j, val in enumerate(row_data):
        set_cell_text(t2.rows[i + 1].cells[j], val, size=Pt(8))

# ── UPDATE TABLE T3: Risicoklassen per scenario ──
risicos = [
    ("S1", "Laag (GES)", "Medium (tillen, verkeer)", "Laag", "Laag"),
    ("S2", "Medium (irriterend stof)", "Medium (tillen)", "Laag", "Medium"),
    ("S3", "Hoog (bijtend, giftig, CMR)", "Medium (warmte)", "Laag", "Hoog"),
    ("S4", "Medium (oxiderend, irriterend)", "Medium (stof)", "Laag", "Medium"),
    ("S5", "Hoog (Carc. 1B, Muta. 2, giftig, milieugevaarlijk)", "Laag", "Laag", "Hoog"),
    ("S6", "Medium (bijtend, giftig)", "Laag", "Laag", "Medium"),
    ("S7", "Hoog (bijtend, pH>13)", "Laag", "Laag", "Hoog"),
    ("S8", "Medium (restanten bijtend/giftig)", "Medium (sliprisico)", "Laag", "Medium"),
    ("S9", "Hoog (ongevalscenario)", "Medium (glibberig)", "Laag", "Hoog"),
    ("S10", "Medium (stof, giftig, milieugevaarlijk)", "Medium (tillen)", "Laag", "Medium"),
]
t3 = doc.tables[3]
clear_table(t3, len(risicos) + 1, 5)
t3_headers = ['Scenario', 'Chemisch risico', 'Fysisch risico', 'Radiologisch risico', 'Overall risicoklasse']
for j, h in enumerate(t3_headers):
    cell = t3.rows[0].cells[j]
    set_cell_text(cell, h, bold=True, size=Pt(8))
    set_cell_shading(cell, HEADER_BG)
    for r in cell.paragraphs[0].runs:
        r.font.color.rgb = RGBColor(255, 255, 255)
for i, row_data in enumerate(risicos):
    for j, val in enumerate(row_data):
        set_cell_text(t3.rows[i + 1].cells[j], val, size=Pt(8))

# ── UPDATE TABLE T4: Basismaatregelen ──
maatregelen = [
    ("Ventilatie", "PGS 15 M15–M22", "Voldoende natuurlijke/mechanische ventilatie", "Mechanische afzuiging bij lixiviatie- en precipitatie-units; minimum 6 luchtverversingen/uur"),
    ("Opvangvoorziening", "PGS 15 M23–M28", "110% van grootste verpakking of 10% totaal", "Opvangbakken onder alle IBC's en vloeistoftanks; bestand tegen H₂SO₄, HCl, NaOH, NaAlO₂"),
    ("Nooddouche/oogdouche", "PGS 15 M85", "Binnen 10 sec loopafstand", "Geïnstalleerd bij elke werkplek met bijtende/oxiderende stoffen"),
    ("Etikettering", "CLP (EG) 1272/2008", "GHS-etiketten + Nederlandse tekst", "Alle verpakkingen conform CLP; ADR-etiketten op transportverpakkingen"),
    ("SDS beschikbaar", "REACH art. 31", "SDS voor alle gevaarlijke stoffen", "SDS-map bij ingang + digitaal beschikbaar; 20 stoffen geregistreerd"),
    ("Segregatie", "PGS 15 Bijlage E", "Onverenigbare stoffen gescheiden", "Zuren vs basen gescheiden; oxidatoren vs organisch gescheiden; tox/CMR geïsoleerd"),
    ("Blusmiddelen", "PGS 15 M95", "Voldoende blusmiddelen", "Poederblussers ABC 6 kg; schuimblusser voor H₂O₂-gerelateerde branden"),
    ("Milieuzorg", "PGS 15 M29–M32", "Bluswateropvang", "Bluswateropvang voor H411-stoffen (V₂O₅, NaVO₃, elektrolyt); olie/water scheider"),
]
t4 = doc.tables[4]
clear_table(t4, len(maatregelen) + 1, 4)
t4_headers = ['Maatregel', 'PGS 15 ref.', 'Eis', 'Phoenix Metals toepassing']
for j, h in enumerate(t4_headers):
    cell = t4.rows[0].cells[j]
    set_cell_text(cell, h, bold=True, size=Pt(8))
    set_cell_shading(cell, HEADER_BG)
    for r in cell.paragraphs[0].runs:
        r.font.color.rgb = RGBColor(255, 255, 255)
for i, row_data in enumerate(maatregelen):
    for j, val in enumerate(row_data):
        set_cell_text(t4.rows[i + 1].cells[j], val, size=Pt(8))

# ── UPDATE TABLE T5: Specifieke eisen per stofcategorie ──
cat_data = [
    ("Maatregel", "Zuren (Klasse 8)", "Basen (Klasse 8)", "Oxidatoren (Klasse 5.1)", "Toxisch/CMR (Klasse 6.1)", "Overig (niet-ADR)"),
    ("Opslaglocatie", "Opslag A (zuur)", "Opslag A (base)", "Opslag B (ox)", "Opslag D (tox/CMR)", "Opslag C"),
    ("Scheiding", "Gescheiden van basen", "Gescheiden van zuren", "Gescheiden van organisch", "Gescheiden van alles", "Geen specifieke scheiding"),
    ("Opvang", "110% / bestand tegen zuur", "110% / bestand tegen base", "110% / droog houden", "110% + milieuzorg", "Algemeen"),
    ("Ventilatie", "Afzuiging bij transfer", "Afzuiging bij transfer", "Goed geventileerd", "Afzuiging + HEPA bij stof", "Natuurlijk"),
    ("Specifiek", "Nooit water op conc. H₂SO₄", "Kristallisatie >12°C bij NaOH", "Niet mengen met organisch", "CMR-protocol + H411-opvang", "Stofbeheersing"),
]
# T5 originally 5 cols — expand to 6 by adding tc elements AFTER clear
t5 = doc.tables[5]
from docx.oxml import OxmlElement
from lxml import etree

class _T5Helper:
    """Wrapper that pretends table has 6 cols by adding cells on access."""
    def __init__(self, tbl):
        self._tbl = tbl
    @property
    def rows(self):
        return self._tbl.rows

# Just use the original 5-column structure but merge last two categories
cat5_data = [
    ("Maatregel", "Zuren (Klasse 8)", "Basen (Klasse 8)", "Oxidatoren (Klasse 5.1)", "Toxisch/CMR + Overig"),
    ("Opslaglocatie", "Opslag A (zuur)", "Opslag A (base)", "Opslag B (ox)", "Opslag C+D (tox/CMR/algemeen)"),
    ("Scheiding", "Gescheiden van basen", "Gescheiden van zuren", "Gescheiden van organisch", "Tox/CMR geïsoleerd; overig geen spec."),
    ("Opvang", "110% / bestand tegen zuur", "110% / bestand tegen base", "110% / droog houden", "110% + milieuzorg (H411)"),
    ("Ventilatie", "Afzuiging bij transfer", "Afzuiging bij transfer", "Goed geventileerd", "Afzuiging + HEPA bij CMR-stof"),
    ("Specifiek", "Nooit water op conc. H₂SO₄", "Kristallisatie >12°C", "Niet mengen met organisch", "CMR-protocol + H411-opvang + stofbeheersing"),
]
t5 = doc.tables[5]
clear_table(t5, len(cat5_data), 5)
for i, row_data in enumerate(cat5_data):
    for j, val in enumerate(row_data):
        cell = t5.rows[i].cells[j]
        set_cell_text(cell, val, bold=(i == 0), size=Pt(8))
        if i == 0:
            set_cell_shading(cell, HEADER_BG)
            for r in cell.paragraphs[0].runs:
                r.font.color.rgb = RGBColor(255, 255, 255)

# ── UPDATE TABLE T6: Opslag per verpakkingtype ──
verpakking = [
    ("Verpakking", "Toepassing", "Specifieke eisen"),
    ("Jerrycan (25–60 L)", "H₂SO₄ 25%, HCl 20%, H₂O₂ 30%", "UN-gekeurd; lekbak; etiket conform CLP+ADR"),
    ("IBC (1000 L)", "NaAlO₂ oplossing, NaVO₃ oplossing, elektrolyt", "Opvangbak 110%; UN-gekeurd; materiaalbestendig"),
    ("Kunststof vat (25–200 L)", "V₂O₅, Na₂S₂O₈, Na₃VO₄", "Stofdicht gesloten; GHS-etiket; droog opslaan"),
    ("Big-bag / FIBC", "Slag, Ca(OH)₂, CaSO₄/SiO₂, MnO₂", "Beschermd tegen vocht; stofvrij afsluiten"),
    ("Zak (25 kg)", "Na₂SO₄, SiO₂, Mg(OH)₂, TSP", "Droog opslaan; geen bijzondere ADR-eisen"),
]
t6 = doc.tables[6]
clear_table(t6, len(verpakking), 3)
for i, row_data in enumerate(verpakking):
    for j, val in enumerate(row_data):
        cell = t6.rows[i].cells[j]
        set_cell_text(cell, val, bold=(i == 0), size=Pt(8))
        if i == 0:
            set_cell_shading(cell, HEADER_BG)
            for r in cell.paragraphs[0].runs:
                r.font.color.rgb = RGBColor(255, 255, 255)

# ── UPDATE TABLE T9: PBM-Matrix per werkzaamheid ──
pbm = [
    ("Werkzaamheid", "Handschoenen", "Oogbescherming", "Adembescherming", "Beschermkleding", "Laarzen", "Overig"),
    ("Lossen/ontvangst", "Nitril + neopreen", "Veiligheidsbril + face shield", "Niet vereist (bij goede ventilatie)", "Overall type 6", "Veiligheidslaarzen S3", "Nooddouche binnen 10 sec"),
    ("Slag handling", "Nitril (EN 374)", "Veiligheidsbril (EN 166)", "FFP2 bij stofontwikkeling", "Overall type 5/6", "Veiligheidslaarzen S3", "Stofmasker bij poederdosering"),
    ("Lixiviatie (zuren)", "Nitril + neopreen dubbel", "Veiligheidsbril + face shield", "FFP2 bij nevelvorming", "Schort zuurbestendig + type 6", "PVC-laarzen", "Nooddouche + oogdouche direct beschikbaar"),
    ("Oxidatie-dosering", "Nitril (EN 374)", "Veiligheidsbril + face shield", "FFP2 bij stof (Na₂S₂O₈)", "Overall type 6", "Veiligheidslaarzen S3", "Brandveilig: geen organisch materiaal"),
    ("Vanadium precipitatie (CMR)", "Dubbele nitril + neopreen", "Veiligheidsbril + face shield", "FFP3 (EN 149) — VERPLICHT", "Wegwerp type 5/6 + overschoenen", "Veiligheidslaarzen S3", "CMR-protocol; haarnet; disposabel"),
    ("Bemonstering", "Nitril (EN 374)", "Veiligheidsbril (EN 166)", "FFP2 bij nevel/stof", "Overall type 6", "Veiligheidslaarzen S3", "Monsterfles HDPE/PTFE"),
    ("Reiniging/onderhoud", "Nitril + neopreen", "Veiligheidsbril + face shield", "FFP2 bij spuiten/nevel", "Overall type 6 + schort", "PVC-laarzen", "Afspoelen leidingen vóór onderhoud"),
    ("NaAlO₂ handling", "Nitril + neopreen dubbel", "Veiligheidsbril + face shield", "Niet vereist (vloeistof)", "Schort bestand tegen base + type 6", "PVC-laarzen", "pH >13: extreme bijtbaarheid"),
    ("Morsen/lekkage interventie", "Nitril + neopreen + butyl", "Veiligheidsbril + face shield", "FFP3 bij CMR-stoffen; FFP2 overig", "Volledige bescherming type 3/4 bij CMR", "Chemisch bestendig", "Absorptiemateriaal + neutralisator"),
    ("Afvoer/verpakking producten", "Nitril (EN 374)", "Veiligheidsbril (EN 166)", "FFP3 bij V₂O₅; FFP2 overig", "Overall type 5/6 bij stof", "Veiligheidslaarzen S3", "ADR-etiketten op transportverpakking"),
]
t9 = doc.tables[9]
clear_table(t9, len(pbm), 7)
for i, row_data in enumerate(pbm):
    for j, val in enumerate(row_data):
        cell = t9.rows[i].cells[j]
        set_cell_text(cell, val, bold=(i == 0), size=Pt(7))
        if i == 0:
            set_cell_shading(cell, HEADER_BG)
            for r in cell.paragraphs[0].runs:
                r.font.color.rgb = RGBColor(255, 255, 255)

# ── UPDATE TABLE T10: Minimaal vereiste PBM's ──
min_pbm = [
    ("PBM-categorie", "Minimaal vereiste", "Norm", "Vervangingsfrequentie"),
    ("Handschoenen", "Nitril EN 374 (voor CMR: dubbel nitril+neopreen)", "NEN-EN 374", "Na elk gebruik / direct bij beschadiging"),
    ("Oogbescherming", "Veiligheidsbril EN 166; face shield bij spatten", "NEN-EN 166", "Krassen/vervanging jaarlijks"),
    ("Adembescherming", "FFP2 standaard; FFP3 voor CMR (V₂O₅, NaVO₃, elektrolyt)", "NEN-EN 149", "Eenmalig gebruik / 8 uur max"),
    ("Beschermkleding", "Overall type 6 (algemeen); type 5/6 (stof); type 3/4 (CMR nood)", "NEN-EN 13034 / 14605", "Na besmetting direct vervangen"),
    ("Veiligheidsschoenen", "S3 met stalen neus en antiperforatiezool", "NEN-EN ISO 20345", "Jaarlijks / bij slijtage"),
    ("Overschoenen", "Wegwerp bij CMR-handling en ash-zone", "—", "Eenmalig gebruik"),
]
t10 = doc.tables[10]
clear_table(t10, len(min_pbm), 4)
for i, row_data in enumerate(min_pbm):
    for j, val in enumerate(row_data):
        cell = t10.rows[i].cells[j]
        set_cell_text(cell, val, bold=(i == 0), size=Pt(8))
        if i == 0:
            set_cell_shading(cell, HEADER_BG)
            for r in cell.paragraphs[0].runs:
                r.font.color.rgb = RGBColor(255, 255, 255)

# ── UPDATE KEY TEXT PARAGRAPHS ──
text_updates = {
    "Alle stoffen vallen onder ADR-klasse 8 (bijtend) en klasse 9 (milieugevaarlijk). Het vereiste veiligheidsniveau is basis":
        "Het stoffenbestand omvat 20 geregistreerde stoffen: 8 ADR-geclassificeerd (klassen 5.1, 6.1, 8) en 12 niet-ADR. ADR-klasse 5.1 (oxidatoren: H₂O₂, Na₂S₂O₈), klasse 6.1 (toxisch: V₂O₅, NaVO₃) en klasse 8 (bijtend: H₂SO₄, HCl, NaAlO₂, elektrolyt). Het vereiste veiligheidsniveau is basis tot verhoogd, afhankelijk van stofcategorie.",
    
    "H₂SO₄ en NaOH vormen een onverenigbare combinatie":
        "H₂SO₄/HCl en NaAlO₂ vormen onverenigbare combinaties: strikt gescheiden opslag conform PGS 15 Bijlage E. Oxidatoren (H₂O₂, Na₂S₂O₈) gescheiden van brandbare materialen.",
    
    "SARU-ash bevat CMR-stoffen (vanadiumverbindingen) en radionucliden":
        "Vanadiumverbindingen (V₂O₅ Carc. 1B, NaVO₃ Muta. 2/Repr. 2, elektrolyt Repr. 2) zijn CMR-geclassificeerd: specifieke PBM's en strikt CMR-beleid vereist. Steelmaking slag bevat irriterende componenten.",
    
    "SARU-ash bevat vanadiumverbindingen (Carc. 2, H351) en van nature voorkomende radionucliden (NORM). Speciale voorzorgsma":
        "Vanadiumverbindingen (V₂O₅ Carc. 1B/H350, NaVO₃ Muta. 2/H341 + Repr. 2/H361fd, elektrolyt Repr. 2/H361) zijn CMR-geclassificeerd. Daarnaast bevat de input-slag (steelmaking slag) componenten met H315, H318, H335, H372. Speciale voorzorgsmaatregelen: CMR-protocol (Hoofdstuk 4.3), FFP3-verplicht bij stof/nevel, dubbele handschoenen, disposabel beschermkleding. Milieugevaarlijke stoffen (H411: V₂O₅, NaVO₃, elektrolyt) vereisen milieuzorgprotocol bij morsen.",
    
    "H₂SO₄ en NaOH zijn onbrandbaar. Brandscenario is uitsluitend relevant bij externe brand of aanwezigheid van brandbare ve":
        "H₂SO₄, HCl, NaAlO₂ en vanadiumverbindingen zijn onbrandbaar. Echter: H₂O₂ ( Klasse 5.1) en Na₂S₂O₈ (klasse 5.1) zijn oxiderend en kunnen brand versterken. Brandscenario is relevant bij externe brand of aanwezigheid van brandbare materialen in combinatie met oxidatoren.",
    
    "Voor werkzaamheden met vanadiumverbindingen (V₂O₅, SARU-ash) gelden aanvullende eisen op grond van de CMR-classificatie":
        "Voor werkzaamheden met CMR-geclassificeerde stoffen (V₂O₅ Carc. 1B/H350 + Muta. 2/H341, NaVO₃ Muta. 2/H341 + Repr. 2/H361fd, elektrolyt Repr. 2/H361) gelden aanvullende eisen op grond van de CMR-classificatie (Arbobesluit art. 4.1c–4.1g) en het substitutiebeginsel:",
}

for p in doc.paragraphs:
    for old, new in text_updates.items():
        if old in p.text:
            for r in p.runs:
                if old[:30] in r.text:
                    r.text = r.text.replace(old, new)
                    break

# Fix CMR references: Carc. 2 (H351) → Carc. 1B (H350) where applicable
for p in doc.paragraphs:
    for r in p.runs:
        r.text = r.text.replace('Carc. 2 (H351)', 'Carc. 1B (H350)')
        r.text = r.text.replace('Carc. 2 — verdacht van kankerverwekkendheid', 'Carc. 1B — kankerverwekkend')

# ── UPDATE SECTION HEADERS for new substance categories ──
# Update 2.3.3 header: SARU-ash → Vanadiumverbindingen & CMR
for p in doc.paragraphs:
    if p.style.name.startswith('Heading'):
        for r in p.runs:
            r.text = r.text.replace('2.3.3 SARU-ash / Vanadium (ADR-klasse 9, CMR)', '2.3.3 Vanadiumverbindingen & CMR-stoffen (ADR 6.1, klasse 8)')
            r.text = r.text.replace('3.4 Ash handling (CMR + radionucliden)', '3.4 CMR-stoffen handling (Vanadiumverbindingen)')
            r.text = r.text.replace('5.4 Lekkage ash (CMR + radiologisch)', '5.4 Lekkage CMR-stoffen (V₂O₅, NaVO₃, elektrolyt)')

# ── ADD VERSION HISTORY (find existing version history if any, or add to end before bijlage) ──
# Add a note about v5.0 changes - find P204 (Bijlage A) and insert before it
bijlage_idx = None
for i, p in enumerate(doc.paragraphs):
    if 'Bijlage A: Opslagschema' in p.text:
        bijlage_idx = i
        break

if bijlage_idx:
    # Insert version note before bijlage
    vh = doc.paragraphs[bijlage_idx - 1].insert_paragraph_before('')
    run = vh.add_run('Versiehistorie')
    run.bold = True
    run.font.size = Pt(14)
    run.font.name = 'Calibri'
    run.font.color.rgb = RGBColor(0, 0x33, 0x66)
    
    vh2 = vh.insert_paragraph_before('')
    run2 = vh2.add_run('v5.0 (6 mei 2026): Update stoffenbestand van 8 naar 20 stoffen. Toevoeging 12 nieuwe stoffen (input chemicals, intermediates, end products). Correcties: NaVO₃ H341 (Muta. 2) toegevoegd; NaAlO₂ H290 + ADR PG II; elektrolyt H411. Nieuwe PBM-matrix voor 9 stofgroepen. CMR-protocol uitgebreid (V₂O₅ Carc. 1B, NaVO₃ Muta. 2/Repr. 2, elektrolyt Repr. 2). Brandveiligheid aangepast voor oxidatoren (H₂O₂, Na₂S₂O₈). Milieuzorgprotocol toegevoegd voor H411-stoffen.')
    run2.font.size = Pt(10)
    run2.font.name = 'Calibri'

# ── UPDATE REFERENCES TABLE (add new refs) ──
# Find paragraph with "[9] Phoenix Metals — Chemicals Master Register"
for p in doc.paragraphs:
    for r in p.runs:
        if 'Chemicals Master Register v2.1.0' in r.text:
            r.text = r.text.replace('Chemicals Master Register v2.1.0 (29 november 2024).', 
                                     'Chemicals Master Register v2.1.0 (29 november 2024).')
        if 'MSDS Zwavelzuur' in r.text:
            r.text = r.text.replace('MSD Zwavelzuur 25–75% (Carl Roth).',
                                     'MSDS Zwavelzuur 25% (Carl Roth).')
        if 'MSD Natriumhydroxide' in r.text:
            r.text = r.text.replace('MSD Natriumhydroxide 50% (Carl Roth).',
                                     'MSDS Natriumhydroxide 50% (Carl Roth). [N1] MSDS Hydrogen peroxide 30%. [N2] SDS Sodium persulfate. [N3] SDS Sodium metavanadate (Merck). [N4] SDS Sodium aluminate solution. [N5] SDS Vanadium pentoxide. [N6] SDS Vanadium electrolyte. [N7] SDS Manganese(IV) oxide. [N8] SDS Calcium hydroxide. [N9] SDS Trisodium orthovanadate.')

# ── UPDATE FOOTNOTES after T0 ──
for p in doc.paragraphs:
    if '† ADR-klasse 9' in p.text:
        for r in p.runs:
            r.text = '† ADR-klasse 8 voor elektrolyt (UN 2796, PG II). †† ADR-klasse 6.1 voor V₂O₅ (UN 2862, PG III) en NaVO₃ (UN 3285, PG III). ††† ADR-klasse 5.1 voor oxidatoren (H₂O₂ UN 2014, Na₂S₂O₈ UN 1505).'
            break
    if '†† Vanadiumverbindingen' in p.text:
        for r in p.runs:
            r.text = 'V₂O₅: Carc. 1B (H350), Muta. 2 (H341), Repr. 2 (H361fd). NaVO₃: Muta. 2 (H341), Repr. 2 (H361fd). Elektrolyt: Repr. 2 (H361). Milieugevaarlijk (H411): V₂O₅, NaVO₃, elektrolyt.'
            break
    if 'Bron: Chemicals Master Register v2.1.0' in p.text:
        for r in p.runs:
            r.text = 'Bron: Meta-Dossier Pilot Plant Slag Chemicals v5.0 (6 mei 2026); Chemicals Master Register v2.1.0; alle SDS-bronnen.'
            break

# ── UPDATE T12/T13/T14 (Emergency procedures) ──
# T12: H₂SO₄ lekkage
t12_data = [
    ("Fase", "Actie"),
    ("Alarm", "Direct alarm; zone afzetten; windrichting bepalen"),
    ("PBM", "Nood-PBM: dubbele handschoenen, face shield, FFP2, zuurbestendig schort"),
    ("Bron", "Klep sluiten, verpakking rechtop, lekbak plaatsen"),
    ("Absorptie", "Zuurbestendig absorptiemateriaal (chemisch bindmiddel); NIET met zaagsel"),
    ("Neutralisatie", "Natriumcarbonaat (soda) of kalk strooien over gemorste vloeistof"),
    ("Afvoer", "Geneutraliseerd residu in afvalvat (ADR-voorschriften); als gevaarlijk afval"),
    ("Decontaminatie", "Vloer/sloten naspoelen met veel water; bluswater opvangen"),
    ("Registratie", "Incident loggen in HSE-register; oorzaakanalyse binnen 24 uur"),
]
t12 = doc.tables[12]
clear_table(t12, len(t12_data), 2)
for i, (a, b) in enumerate(t12_data):
    set_cell_text(t12.rows[i].cells[0], a, bold=(i == 0), size=Pt(9))
    set_cell_text(t12.rows[i].cells[1], b, bold=(i == 0), size=Pt(9))
    if i == 0:
        for c in range(2):
            set_cell_shading(t12.rows[i].cells[c], HEADER_BG)
            for r in t12.rows[i].cells[c].paragraphs[0].runs:
                r.font.color.rgb = RGBColor(255, 255, 255)

# T13: NaAlO₂ / base lekkage
t13_data = [
    ("Fase", "Actie"),
    ("Alarm", "Direct alarm; zone afzetten"),
    ("PBM", "Nood-PBM: nitril+neopreen handschoenen, face shield, base-bestendig schort"),
    ("Bron", "Klep sluiten, verpakking rechtop"),
    ("Absorptie", "Absorptiemateriaal (universeel of base-specifiek)"),
    ("Neutralisatie", "Citroenzuur of verdund azijnzuur"),
    ("Afvoer", "Geneutraliseerd residu als gevaarlijk afval (ADR UN 1819)"),
    ("Decontaminatie", "Naspoelen; pH-controleren vóór afvoer"),
]
t13 = doc.tables[13]
clear_table(t13, len(t13_data), 2)
for i, (a, b) in enumerate(t13_data):
    set_cell_text(t13.rows[i].cells[0], a, bold=(i == 0), size=Pt(9))
    set_cell_text(t13.rows[i].cells[1], b, bold=(i == 0), size=Pt(9))
    if i == 0:
        for c in range(2):
            set_cell_shading(t13.rows[i].cells[c], HEADER_BG)
            for r in t13.rows[i].cells[c].paragraphs[0].runs:
                r.font.color.rgb = RGBColor(255, 255, 255)

# T14: CMR-stoffen lekkage
t14_data = [
    ("Fase", "Actie"),
    ("Alarm", "Direct alarm; CMR-zone afzetten; niemand zonder FFP3 + type 5/6 bescherming"),
    ("PBM", "VERPLICHT: FFP3, dubbele handschoenen, face shield, overall type 5/6, overschoenen"),
    ("Bron", "Stofvrij afsluiten; verpakking sluiten; NIET opwaaien"),
    ("Stofbeheersing", "Vochtig maken met waternevel; HEPA-stofzuiger; NIET vegen"),
    ("Vloeistof", "Opvangen in lekbak; absorptie met chemisch bindmiddel; H411-protocol"),
    ("Milieuzorg", "NIET in riolering/waterweg — H411 giftig voor waterorganismen; milieuzorgteam inschakelen"),
    ("Afvoer", "Als gevaarlijk CMR-afval in gesloten container; conform ADR UN 2862/3285"),
    ("Decontaminatie", "Volledige zone decontamineren; beschermkleding disposabel afvoeren"),
    ("Registratie", "CMR-incidentregistratie; blootstellingsregister bijwerken; arts inschakelen bij blootstelling"),
]
t14 = doc.tables[14]
clear_table(t14, len(t14_data), 2)
for i, (a, b) in enumerate(t14_data):
    set_cell_text(t14.rows[i].cells[0], a, bold=(i == 0), size=Pt(9))
    set_cell_text(t14.rows[i].cells[1], b, bold=(i == 0), size=Pt(9))
    if i == 0:
        for c in range(2):
            set_cell_shading(t14.rows[i].cells[c], HEADER_BG)
            for r in t14.rows[i].cells[c].paragraphs[0].runs:
                r.font.color.rgb = RGBColor(255, 255, 255)

# ── UPDATE TABLE T15: Eerste hulp ──
eh_data = [
    ("Blootstelling", "Eerste hulp"),
    ("Huidcontact — bijtende stoffen (H₂SO₄, HCl, NaAlO₂)", "Direct 15 minuten spoelen met water. Verontreinigde kleding verwijderen (ook onder). Nooddouche gebruiken. Arts inschakelen."),
    ("Huidcontact — oxiderend (H₂O₂, Na₂S₂O₈)", "Direct spoelen met veel water. Bij aanhoudende irritatie arts raadplegen."),
    ("Huidcontact — CMR/toxisch (V₂O₅, NaVO₃, elektrolyt)", "Direct 15 minuten spoelen met water. Beschermkleding disposabel afvoeren. Arts inschakelen — vermeld CMR-classificatie."),
    ("Oogcontact — bijtend", "Direct 15 minuten spoelen met water (oogdouche). Oogarts inschakelen. NIET wrijven."),
    ("Oogcontact — irriterend/stof", "10 minuten spoelen met water. Bij aanhoudende klachten arts."),
    ("Inademing — zuren/nevel (H₂SO₄, HCl)", "Slachtoffer naar frisse lucht. Bij benauwdheid: 112 bellen. Beademing alleen met zuurstofmasker."),
    ("Inademing — stof (V₂O₅, MnO₂, slag)", "Slachtoffer naar frisse lucht. Mond spoelen. Bij aanhoudende klachten arts inschakelen. Vermeld stofnaam."),
    ("Inslikken — bijtend", "NIET laten braken. Mond spoelen. Direct 112 bellen. NIET neutraliseren."),
    ("Inslikken — toxisch (vanadiumverbindingen)", "NIET laten braken. Mond spoelen. Direct arts/112. SDS tonen aan behandelend arts."),
]
t15 = doc.tables[15]
clear_table(t15, len(eh_data), 2)
for i, (a, b) in enumerate(eh_data):
    set_cell_text(t15.rows[i].cells[0], a, bold=(i == 0), size=Pt(9))
    set_cell_text(t15.rows[i].cells[1], b, bold=(i == 0), size=Pt(9))
    if i == 0:
        for c in range(2):
            set_cell_shading(t15.rows[i].cells[c], HEADER_BG)
            for r in t15.rows[i].cells[c].paragraphs[0].runs:
                r.font.color.rgb = RGBColor(255, 255, 255)

# ── UPDATE Bijlage A (T20: Opslagschema) ──
t20_data = [
    ("Zone", "Links (Zuren)", "Centraal (pad)", "Rechts (Overig)"),
    ("Boven", "H₂SO₄ 25% (UN 2796, PG II)", "—", "Na₂S₂O₈ (UN 1505, PG III)"),
    ("Midden", "HCl 20% (UN 1789, PG II)", "Scheiding ≥2 m", "H₂O₂ 30% (UN 2014, PG II)"),
    ("Onder", "Elektrolyt (UN 2796, PG II)", "—", "NaAlO₂ (UN 1819, PG II)"),
    ("Tox/CMR", "—", "Afgeschermd", "V₂O₅ (UN 2862, PG III) | NaVO₃ (UN 3285, PG III)"),
    ("Niet-ADR", "—", "—", "Slag, Ca(OH)₂, MnO₂, SiO₂, overig"),
]
t20 = doc.tables[20]
clear_table(t20, len(t20_data), 4)
for i, row_data in enumerate(t20_data):
    for j, val in enumerate(row_data):
        cell = t20.rows[i].cells[j]
        set_cell_text(cell, val, bold=(i == 0), size=Pt(8))
        if i == 0:
            set_cell_shading(cell, HEADER_BG)
            for r in cell.paragraphs[0].runs:
                r.font.color.rgb = RGBColor(255, 255, 255)

# ── Update bijlage text ──
for p in doc.paragraphs:
    if 'H₂SO₄ (links) en NaOH (rechts) strikt gescheiden' in p.text:
        for r in p.runs:
            r.text = '⚠️ Zuren (H₂SO₄, HCl, elektrolyt) en basen (NaAlO₂) strikt gescheiden ≥2 m. Oxidatoren (H₂O₂, Na₂S₂O₈) gescheiden van brandbare materialen. CMR-stoffen (V₂O₅, NaVO₃) in afgeschermd gedeelte met afzuiging. Niet-ADR stoffen in algemene opslag.'
            break

# ── SAVE ──
doc.save(DST)
print(f"✅ Saved: {DST}")
