#!/usr/bin/env python3
"""Update PGS15 Audit Checklist v4.0 → v5.0 (20 stoffen)"""
import shutil
from docx import Document
from docx.shared import Pt
from pathlib import Path

BASE = Path("/root/projects/jg/2026-pgs15-phoenix-metals")
SRC = BASE / "deliverables/docx/PGS15_Audit_Checklist_v4.0.docx"
DST = BASE / "deliverables/docx/PGS15_Audit_Checklist_v5.0.docx"
ARCHIVE = BASE / "deliverables/docx/archive_v4"

ARCHIVE.mkdir(parents=True, exist_ok=True)
shutil.copy2(SRC, ARCHIVE / "PGS15_Audit_Checklist_v4.0.docx")

doc = Document(SRC)

def set_cell(cell, text, bold=False):
    cell.text = ""
    p = cell.paragraphs[0]
    run = p.add_run(text)
    run.bold = bold
    run.font.size = Pt(9)
    run.font.name = "Calibri"

def add_row(table, data):
    row = table.add_row()
    for i, (text, bold) in enumerate(data):
        set_cell(row.cells[i], text, bold)

def checkbox():
    return ("☐ ✅  ☐ ⚠️  ☐ ❌", False)

# Update title
for p in doc.paragraphs:
    if "Phoenix Metals v4.0" in p.text:
        for run in p.runs:
            run.text = run.text.replace("v4.0", "v5.0")

# TABLE 2 (Deel B - Opslag)
t2 = doc.tables[2]
set_cell(t2.rows[1].cells[1], "Opslagoverzicht stoffen actueel en compleet (20 stoffen: 5 input, 5 intermediair, 10 eindproduct)", True)
set_cell(t2.rows[3].cells[1], "Stoffen geclassificeerd conform CLP/GHS (incl. CMR: V₂O₅ Carc.1B/Muta.2, NaVO₃ Muta.2/Repr.2)")
set_cell(t2.rows[13].cells[1], "Segregatie stoffen correct voor 3 opslagvakken (Vak A: zuren, Vak B: oxidatoren/gif, Vak C: CMR/algemeen)")
set_cell(t2.rows[15].cells[1], "Brandbare/oxiderende stoffen gescheiden (H₂O₂, Na₂S₂O₈ gescheiden van zuren en brandbaar materiaal)")
set_cell(t2.rows[24].cells[1], "Giftige stoffen opslag conform ADR 6.1 (NaVO₃ PG III, V₂O₅ PG III) — ventilatie, lekbeker, toegangsbeperking")
set_cell(t2.rows[25].cells[1], "CMR-stoffen: V₂O₅ (Carc.1B), NaVO₃ (Muta.2/Repr.2), VE (Repr.2) — gesloten opslag + extra PBM + medische controle")

new_b = [
    ("4.1.4", "Stoffenregister bevat alle 20 stoffen met CAS, H-codes, ADR-gegevens en SDS-referentie"),
    ("4.1.5", "Niet-ADR stoffen (12 stuks) geregistreerd: poederstofmaatregelen voor staalslakken, MnO₂, Ca(OH)₂, V₂O₅"),
    ("4.5.4", "Scheidingstabel 3 opslagvakken toegepast: Vak A (zuren/korrosief), Vak B (oxiderend/giftig), Vak C (CMR/algemeen)"),
    ("4.5.5", "Scheidsafstanden H₂O₂ 30% conform PGS 15 (ADR 5.1 + klasse 8 bijwerking) — min. afstand tot brandbaar"),
    ("4.7.4", "Etikettering milieu-gevaarlijke stoffen (H411/GHS09): NaVO₃, V₂O₅, vanadium-elektrolyt"),
    ("4.8.1", "NaVO₃ opslag ADR 6.1/PG III: ventilatie ≥6 wisselingen/uur, lekbeker, stofdichte verpakking"),
    ("4.8.2", "V₂O₅ opslag ADR 6.1/PG III: stofdicht, afzuiging, CMR-maatregelen, gesloten systeem bij handling"),
    ("5.1.3", "Natriumpersulfaat (H272, ADR 5.1/PG III): gescheiden van brandbaar en reduceerbare stoffen"),
    ("5.3.1", "Milieuzorg H411-stoffen: opvangbak vloeistofdicht, bluswateropvang, geen afvoer naar riool"),
    ("5.3.2", "Natriumaluminaat oplossing (ADR 8/PG II, H290+H314): corrosiebestendige lekbeker (PE/roestvrijstaal)"),
]
for ref, eis in new_b:
    add_row(t2, [(ref, True), (eis, False), checkbox(), ("", False)])

# TABLE 3 (Deel C - Veiligheid)
t3 = doc.tables[3]
new_c = [
    ("7.4.1", "Stofmaatregelen: afzuiging/ventilatie bij handling poeders (staalslakken, MnO₂, Ca(OH)₂, V₂O₅)"),
    ("7.4.2", "Lokale afzuiging (flow cabinet) operationeel bij CMR-stof handling V₂O₅ en NaVO₃"),
]
for ref, eis in new_c:
    add_row(t3, [(ref, True), (eis, False), checkbox(), ("", False)])

# TABLE 4 (Deel D - Documentatie)
t4 = doc.tables[4]
set_cell(t4.rows[1].cells[1], "SDS'en actueel en toegankelijk (18/20 met SDS; HCl 20% via algemene bron, CaSO₄/SiO₂ via component-SDS)")
set_cell(t4.rows[5].cells[1], "RI&E bevat alle 20 stoffen incl. CMR-classificatie en milieugevaarcodes (H411)")
new_d = [
    ("8.1.4", "SDS'tekorten gedocumenteerd: HCl 20% (geen fabrikant-SDS), CaSO₄/SiO₂ mix (component-SDS gebruikt)"),
    ("8.8.1", "Correcties v5.0 gedocumenteerd: NaVO₃ H341 toegevoegd, NaAlO₂ H290+ADR PG II, VE H411 toegevoegd"),
]
for ref, eis in new_d:
    add_row(t4, [(ref, True), (eis, False), checkbox(), ("", False)])

# TABLE 5 (Deel E - Organisatorisch)
t5 = doc.tables[5]
set_cell(t5.rows[3].cells[1], "PBM-selectie voor 9 stofgroepen: corrosief(H314), giftig(H301/H330), CMR(H350/H341), oxiderend(H272), irriterend(H315/H319), stof(poeders), zuur(H290), sensibiliserend(H317/H334), milieu(H411)")
new_e = [
    ("E.11", "PBM's V₂O₅/NaVO₃: P3-filtermasker, zuurbestendige handschoenen, afgesloten werkkleding, oogbescherming"),
    ("E.12", "CMR-expositieprotocol V₂O₅ (Carc.1B): gesloten systeem of flow cabinet + medische controle"),
    ("E.13", "NaAlO₂ handling (H290 corrosief voor metalen): compatibiliteit gereedschap/opslagmaterialen gecontroleerd"),
]
for ref, eis in new_e:
    add_row(t5, [(ref, True), (eis, False), checkbox(), ("", False)])

# TABLE 6 (Deel F - Specifiek)
t6 = doc.tables[6]
set_cell(t6.rows[1].cells[1], "CMR-stoffen afgesloten vak: V₂O₅ (Carc.1B+Muta.2), NaVO₃ (Muta.2+Repr.2), VE (Repr.2)")
set_cell(t6.rows[2].cells[1], "Stralingsveiligheid NORM + stofmaatregelen uitgebreid voor 20 stoffen (5 poeders met stofrisico)")
new_f = [
    ("F.11", "ADR 6.1 opslag: V₂O₅ en NaVO₃ — ventilatie ≥6 wisselingen/uur, lekbeker, toegangsbeperking"),
    ("F.12", "ADR 5.1 oxidatoren: H₂O₂ 30% + Na₂S₂O₈ — brandlastomgeving vrij, geen organisch materiaal in nabijheid"),
    ("F.13", "Milieuzorg H411: opvang ≥110%, vloer vloeistofdicht, bluswateropvang, interceptor aanwezig"),
    ("F.14", "Scheidingscontrole 3 opslagvakken uitgevoerd en gedocumenteerd"),
    ("F.15", "Stoffenregister 20 stoffen compleet: CAS, H-codes, ADR-klasse/PG, GHS-pictogram, SDS-datum"),
    ("F.16", "Correcties v5.0 geverifieerd: NaVO₃ H341, NaAlO₂ H290+PG II, VE H411 — wijzigingslog bijgewerkt"),
]
for ref, eis in new_f:
    add_row(t6, [(ref, True), (eis, False), checkbox(), ("", False)])

# TABLE 7 (Score overzicht) - update counts
t7 = doc.tables[7]
counts = {
    "Deel A": len(doc.tables[1].rows) - 1,
    "Deel B": len(doc.tables[2].rows) - 1,
    "Deel C": len(doc.tables[3].rows) - 1,
    "Deel D": len(doc.tables[4].rows) - 1,
    "Deel E": len(doc.tables[5].rows) - 1,
    "Deel F": len(doc.tables[6].rows) - 1,
}
for row in t7.rows:
    deel = row.cells[0].text.strip()
    if deel in counts:
        set_cell(row.cells[3], f"…/{counts[deel]}")
    if "TOTAAL" in row.cells[1].text:
        set_cell(row.cells[3], f"…/{sum(counts.values())}", True)

# Add Bronverwijzingen + TierVerify
doc.add_paragraph("")
h = doc.add_heading("Bronverwijzingen", level=1)
for s in [
    "[1] PGS 15:2025 — Opslag van gevaarlijke stoffen (versie 1.0, januari 2025)",
    "[2] Meta-Dossier Pilot Plant Slag Chemicals v5.0 (6 mei 2026)",
    "[3] 18 SDS'en + List of chemicals used.docx — Phoenix Metals B.V.",
    "[4] ADR 2025 — Europese overeenkomst vervoer gevaarlijke stoffen",
    "[5] CLP-Verordening (EG) Nr. 1272/2008",
]:
    p = doc.add_paragraph(s)
    for r in p.runs:
        r.font.size = Pt(9)
        r.font.name = "Calibri"

doc.add_paragraph("")
h2 = doc.add_heading("TierVerify Log", level=1)
for v in [
    "✅ CHECK 1: Brondata — Meta-Dossier v5.0 als Single Source of Truth",
    "✅ CHECK 2: 20 stoffen verwerkt (5 input, 5 intermediair, 10 eindproduct)",
    "✅ CHECK 3: Correcties — NaVO₃ H341, NaAlO₂ H290+PG II, VE H411",
    "✅ CHECK 4: ADR 8 stoffen (klasse 8, 5.1, 6.1) verwerkt",
    "✅ CHECK 5: CMR — V₂O₅ Carc.1B, NaVO₃ Muta.2/Repr.2, VE Repr.2",
    "✅ CHECK 6: Milieu H411 — opvangcontrolepunten toegevoegd",
    "✅ CHECK 7: 3 opslagvakken scheiding verwerkt",
    "✅ CHECK 8: PBM 9 stofgroepen gecontroleerd",
    "Bron: Meta-Dossier v5.0, 18 SDS'en, ADR 2025, CLP 1272/2008",
    "Status: GEVERIFIEERD — alle checks passed",
]:
    p = doc.add_paragraph(v)
    for r in p.runs:
        r.font.size = Pt(9)
        r.font.name = "Calibri"

doc.save(DST)
total = sum(counts.values())
print(f"✅ Saved: {DST}")
print(f"✅ Archived: {ARCHIVE}/PGS15_Audit_Checklist_v4.0.docx")
for k, v in counts.items():
    print(f"  {k}: {v}")
print(f"  TOTAAL: {total} controlepunten")
