#!/usr/bin/env python3
"""REACH Notificatieconcepten Phoenix Metals — DOCX generator v1.0"""

from docx import Document
from docx.shared import Pt, Cm, Inches, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT
from docx.enum.section import WD_ORIENT
from docx.oxml.ns import qn, nsdecls
from docx.oxml import parse_xml
import os

# === BRAND CONSTANTS ===
PRIMARY = RGBColor(0x00, 0x33, 0x66)
WHITE = RGBColor(0xFF, 0xFF, 0xFF)
DARK_TEXT = RGBColor(0x1F, 0x29, 0x37)
SECONDARY_TEXT = RGBColor(0x37, 0x41, 0x51)
SUCCESS = RGBColor(0x00, 0xA8, 0x59)
WARNING = RGBColor(0xF5, 0x9E, 0x0B)
CRITICAL = RGBColor(0xFF, 0x6D, 0x00)
INFO = RGBColor(0x3B, 0x82, 0xF6)
LIGHT_BG = "F8F9FA"
BORDER_COLOR = "E5E7EB"
PRIMARY_HEX = "003366"

doc = Document()

# === PAGE SETUP ===
for section in doc.sections:
    section.top_margin = Cm(2.0)
    section.bottom_margin = Cm(2.0)
    section.left_margin = Cm(2.5)
    section.right_margin = Cm(2.5)

style = doc.styles['Normal']
font = style.font
font.name = 'Segoe UI'
font.size = Pt(10.5)
font.color.rgb = DARK_TEXT

# === HELPER FUNCTIONS ===
def set_cell_shading(cell, color_hex):
    shading = parse_xml(f'<w:shd {nsdecls("w")} w:fill="{color_hex}"/>')
    cell._tc.get_or_add_tcPr().append(shading)

def set_cell_border(cell, **kwargs):
    tc = cell._tc
    tcPr = tc.get_or_add_tcPr()
    tcBorders = parse_xml(f'<w:tcBorders {nsdecls("w")}></w:tcBorders>')
    for edge, val in kwargs.items():
        element = parse_xml(
            f'<w:{edge} {nsdecls("w")} w:val="{val.get("val","single")}" '
            f'w:sz="{val.get("sz","4")}" w:space="0" w:color="{val.get("color",BORDER_COLOR)}"/>'
        )
        tcBorders.append(element)
    tcPr.append(tcBorders)

def add_styled_table(doc, headers, rows, col_widths=None):
    table = doc.add_table(rows=1 + len(rows), cols=len(headers))
    table.alignment = WD_TABLE_ALIGNMENT.CENTER
    table.style = 'Table Grid'
    # Header row
    for i, h in enumerate(headers):
        cell = table.rows[0].cells[i]
        cell.text = ''
        p = cell.paragraphs[0]
        run = p.add_run(h)
        run.bold = True
        run.font.color.rgb = WHITE
        run.font.size = Pt(9.5)
        run.font.name = 'Segoe UI'
        p.alignment = WD_ALIGN_PARAGRAPH.CENTER
        set_cell_shading(cell, PRIMARY_HEX)
    # Data rows
    for r_idx, row in enumerate(rows):
        for c_idx, val in enumerate(row):
            cell = table.rows[r_idx + 1].cells[c_idx]
            cell.text = ''
            p = cell.paragraphs[0]
            run = p.add_run(str(val))
            run.font.size = Pt(9)
            run.font.name = 'Segoe UI'
            run.font.color.rgb = DARK_TEXT
            if r_idx % 2 == 1:
                set_cell_shading(cell, LIGHT_BG)
    # Col widths
    if col_widths:
        for row in table.rows:
            for i, w in enumerate(col_widths):
                row.cells[i].width = Cm(w)
    return table

def add_heading_styled(doc, text, level=1):
    h = doc.add_heading(text, level=level)
    for run in h.runs:
        run.font.color.rgb = PRIMARY
        run.font.name = 'Segoe UI'
        if level == 1:
            run.font.size = Pt(18)
        elif level == 2:
            run.font.size = Pt(14)
        elif level == 3:
            run.font.size = Pt(12)
    return h

def add_body(doc, text, bold=False, italic=False):
    p = doc.add_paragraph()
    run = p.add_run(text)
    run.font.size = Pt(10.5)
    run.font.name = 'Segoe UI'
    run.font.color.rgb = DARK_TEXT
    run.bold = bold
    run.italic = italic
    p.paragraph_format.space_after = Pt(6)
    return p

def add_vul_in_field(doc, label, hint=""):
    p = doc.add_paragraph()
    run_label = p.add_run(f"{label}: ")
    run_label.bold = True
    run_label.font.size = Pt(10)
    run_label.font.name = 'Segoe UI'
    run_label.font.color.rgb = DARK_TEXT
    run_val = p.add_run(f"[VUL IN: {hint}]" if hint else "[VUL IN]")
    run_val.font.size = Pt(10)
    run_val.font.name = 'Segoe UI'
    run_val.font.color.rgb = CRITICAL
    run_val.bold = True
    p.paragraph_format.space_after = Pt(4)
    return p

def add_callout(doc, text, style="info"):
    colors = {"info": INFO, "warning": WARNING, "critical": CRITICAL}
    p = doc.add_paragraph()
    run = p.add_run(text)
    run.font.size = Pt(10)
    run.font.name = 'Segoe UI'
    run.font.color.rgb = colors.get(style, INFO)
    run.bold = True
    p.paragraph_format.space_before = Pt(6)
    p.paragraph_format.space_after = Pt(6)
    return p

# === COVER PAGE ===
for _ in range(4):
    doc.add_paragraph()

title = doc.add_paragraph()
title.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = title.add_run("REACH Notificatieconcepten")
run.font.size = Pt(32)
run.font.color.rgb = PRIMARY
run.font.name = 'Segoe UI'
run.bold = True

subtitle = doc.add_paragraph()
subtitle.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = subtitle.add_run("Phoenix Metals B.V.")
run.font.size = Pt(20)
run.font.color.rgb = SECONDARY_TEXT
run.font.name = 'Segoe UI'

doc.add_paragraph()

meta = doc.add_paragraph()
meta.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = meta.add_run("Conceptdocument — Direct bruikbaar als brief-/formulierconcept\nAlle in te vullen velden gemarkeerd met [VUL IN]")
run.font.size = Pt(11)
run.font.color.rgb = SECONDARY_TEXT
run.font.name = 'Segoe UI'

doc.add_paragraph()

info_lines = [
    "Opdrachtgever: Phoenix Metals B.V. — Westerduinweg 3, IJmuiden",
    "HSE Manager: Jorick van Gemert",
    "Datum: april 2026",
    "Versie: v1.0 | Status: Concept",
    "Vertrouwelijkheid: Vertrouwelijk"
]
for line in info_lines:
    p = doc.add_paragraph()
    p.alignment = WD_ALIGN_PARAGRAPH.CENTER
    run = p.add_run(line)
    run.font.size = Pt(10)
    run.font.color.rgb = SECONDARY_TEXT
    run.font.name = 'Segoe UI'

# Logo
doc.add_paragraph()
try:
    logo_path = "/root/projects/jg/assets/branding/jvg-consultancy-logo.png"
    if os.path.exists(logo_path):
        p = doc.add_paragraph()
        p.alignment = WD_ALIGN_PARAGRAPH.CENTER
        run = p.add_run()
        run.add_picture(logo_path, width=Cm(3.5))
except:
    pass

doc.add_page_break()

# === TABLE OF CONTENTS ===
add_heading_styled(doc, "Inhoudsopgave", level=1)
toc_items = [
    "1. PPORD-notificatie bij ECHA (Artikel 9 REACH)",
    "   1A. Toelichting op PPORD",
    "   1B. Concept PPORD-dossier content",
    "   1C. Checklist PPORD-indiening",
    "2. Vanadium Consortium — Aanmelding / Letter of Access",
    "   2A. Concept aanvraagbericht",
    "   2B. Relevante stoffen uit het consortium",
    "   2C. Kosten-batenanalyse",
    "3. ECHA REACH-IT Account & Stoffeninventarisatie",
    "   3A. REACH-IT Account aanmaken",
    "   3B. Stoffeninventarisatie template",
    "   3C. CLP-labeling checklist",
    "A. Bijlage: Verantwoordelijkhedenmatrix",
]
for item in toc_items:
    p = doc.add_paragraph(item)
    p.paragraph_format.space_after = Pt(2)
    for run in p.runs:
        run.font.size = Pt(10)
        run.font.name = 'Segoe UI'

doc.add_page_break()

# ============================================================
# NOTIFICATIE 1: PPORD
# ============================================================
add_heading_styled(doc, "1. PPORD-notificatie bij ECHA (Artikel 9 REACH)", level=1)
add_callout(doc, "Doel: Phoenix Metals kan stoffen produceren en gebruiken voor R&D zonder volledige REACH-registratie, mits voldaan aan de voorwaarden van Artikel 9.", "info")

# 1A
add_heading_styled(doc, "1A. Toelichting op PPORD", level=2)

add_body(doc, "PPORD (Product- en procesontwikkeling, Product- and Process Oriented Research and Development) is een uitzonderingsbepaling in de REACH Verordening die het mogelijk maakt om stoffen te produceren en te gebruiken voor onderzoek en ontwikkeling zonder dat een volledige REACH-registratie vereist is.")

add_body(doc, "Juridische basis", bold=True)
add_body(doc, "Artikel 9 van Verordening (EG) nr. 1907/2006 (REACH) biedt een vrijstelling van de registratieplicht voor stoffen die uitsluitend voor wetenschappelijk onderzoek en ontwikkeling (W&O) worden geproduceerd of geïmporteerd. Deze vrijstelling geldt niet voor stoffen die als zodanig op de markt worden gebracht.")

add_body(doc, "Voorwaarden voor PPORD-toepassing:", bold=True)
conditions = [
    "De stof wordt uitsluitend gebruikt voor product- en procesontwikkeling (R&D);",
    "Er vindt geen commerciële verkoop van de stof als zodanig plaats;",
    "De stof wordt onder gecontroleerde omstandigheden geproduceerd, verwerkt en gebruikt;",
    "De producent/importeur beschikt over adequate risicobeheersmaatregelen voor mens en milieu;",
    "De totale hoeveelheid per stof per jaar bedraagt maximaal 10 ton (voor PPORD; boven 1 ton is melding aan ECHA verplicht)."
]
for c in conditions:
    p = doc.add_paragraph(c, style='List Bullet')
    for run in p.runs:
        run.font.size = Pt(10)
        run.font.name = 'Segoe UI'

add_body(doc, "Geldigheidsduur en procedure:", bold=True)
add_body(doc, "Een PPORD-notificatie is 5 jaar geldig en kan eenmalig met 5 jaar worden verlengd (maximaal 10 jaar in totaal). De procedure verloopt via het REACH-IT portaal van ECHA: dossier indienen → ECHA controleert op volledigheid → toewijzing van een PPORD-nummer met registratiedatum.")

add_callout(doc, "Let op: Bij overschrijding van 1 ton/jaar per stof is een PPORD-melding bij ECHA verplicht. Phoenix Metals produceert circa 7.200 kg/jaar vanadium-elektrolyt — dit valt onder de meldingsplicht.", "warning")

# 1B
add_heading_styled(doc, "1B. Concept PPORD-dossier content", level=2)

add_body(doc, "Onderstaande tabel bevat alle velden die vereist zijn voor de PPORD-notificatie. Velden gemarkeerd met [VUL IN] dienen door Phoenix Metals te worden ingevuld.")

add_styled_table(doc,
    ["Veld", "Besrijving / Inhoud", "Status"],
    [
        ["Naam notifier", "Phoenix Metals B.V.", "[VUL IN: KVK-nummer, volledig adres, contactpersoon]"],
        ["Stof identiteit", "Vanadium-elektrolyt / geproduceerde vanadiumverbindingen", "[VUL IN: exacte chemische samenstelling + CAS-nummer(s)]"],
        ["Tonnage band", "1–10 ton/jaar", "[VUL IN: verwacht volume per kalenderjaar, verdeling per stof]"],
        ["R&D omschrijving", "Pilot plant voor hydrometallurgische extractie van vanadium uit staalslakken (Tata Steel) en SARU ash (Shell). Batch proces: 3.000L, 7.200 kg/jaar.", "Concept beschikbaar"],
        ["Gebruik(s)", "Product- en procesontwikkeling, batterijkwalificatietests", "[VUL IN: specifieke klanten/partners voor testen]"],
        ["Blootstellingsscenario's", "Werknemers in pilot plant, directe afvoer naar proceswater", "[VUL IN: gedetailleerde werknemers- en milieublootstelling per processtap]"],
        ["Risicobeheersmaatregelen", "PBM, afzuiging, containment", "[VUL IN: specifieke PBM-lijst, ventilatieclassificatie, containmentsysteem]"],
        ["Verwachte duur R&D", "5 jaar (pilot fase)", "[VUL IN: exacte start- en einddatum]"],
        ["Verantwoordelijke voor melding", "[VUL IN: naam functie]", "[VUL IN]"],
        ["Bestuursorgaan lidstaat", "[VUL IN: Illicito / NL] (via REACH Helpdesk NL)", "[VUL IN]"],
    ],
    col_widths=[4, 8, 4.5]
)

# 1C
add_heading_styled(doc, "1C. Checklist PPORD-indiening", level=2)

add_styled_table(doc,
    ["Stap", "Actie", "Verantwoordelijke", "Deadline"],
    [
        ["1", "REACH-IT account aanmaken (zie Notificatie 3)", "Jorick van Gemert", "[VUL IN]"],
        ["2", "Exacte stofsamenstelling + CAS-nummers vaststellen (lab analyse)", "[VUL IN: laboratorium]", "[VUL IN]"],
        ["3", "Blootstellingsscenario's opstellen (werkplekaanalyse)", "Jorick van Gemert + Arcadis", "[VUL IN]"],
        ["4", "Risicobeheersmaatregelen documenteren (PBM-lijst, ventilatieplan)", "Jorick van Gemert", "[VUL IN]"],
        ["5", "PPORD-dossier samenstellen in REACH-IT", "[VUL IN: dossierbeheerder]", "[VUL IN]"],
        ["6", "Indienen bij ECHA via REACH-IT portal", "[VUL IN]", "[VUL IN]"],
        ["7", "Bevestiging PPORD-nummer ontvangen en archiveren", "Jorick van Gemert", "[VUL IN]"],
        ["8", "Interne communicatie naar directie (Stijn van Zelst)", "Jorick van Gemert", "[VUL IN]"],
    ],
    col_widths=[1.5, 6, 4.5, 3.5]
)

doc.add_page_break()

# ============================================================
# NOTIFICATIE 2: VANADIUM CONSORTIUM
# ============================================================
add_heading_styled(doc, "2. Vanadium Consortium — Aanmelding / Letter of Access", level=1)
add_callout(doc, "Doel: Phoenix Metals verkrijgt toegang tot bestaande REACH-registraties van het Vanadium Consortium voor de stoffen die relevant zijn voor het extractieproces.", "info")

# 2A
add_heading_styled(doc, "2A. Concept aanvraagbericht", level=2)

add_body(doc, "CONCEPT BRIEF — Direct te verzenden na invullen [VUL IN] velden", bold=True)
doc.add_paragraph()

letter_lines = [
    ("Phoenix Metals B.V.", True),
    ("[VUL IN: volledig adres, postcode, plaats]", False),
    ("[VUL IN: KVK-nummer]", False),
    ("[VUL IN: telefoonnummer]", False),
    ("", False),
    ("Datum: [VUL IN]", False),
    ("", False),
    ("Aan: The Vanadium Consortium", True),
    ("[VUL IN: contactpersoon / secretariaat adres]", False),
    ("[VUL IN: e-mailadres consortium]", False),
    ("", False),
    ("Betreft: Request for Letter of Access / Membership Inquiry", True),
    ("", False),
    ("Geachte heer/mevrouw,", False),
    ("", False),
    ("Phoenix Metals B.V. is een innovatief bedrijf dat zich richt op de hydrometallurgische extractie van vanadium uit secundaire grondstoffen, waaronder staalslakken (Tata Steel) en SARU ash (Shell). Onze pilot plant is gevestigd te IJmuiden, Nederland.", False),
    ("", False),
    ("Wij produceren in het kader van product- en procesontwikkeling (PPORD) de volgende vanadiumverbindingen en zijn derhalve geïnteresseerd in toegang tot de bestaande REACH-registraties van het Vanadium Consortium:", False),
    ("", False),
]

for text, bold in letter_lines:
    p = doc.add_paragraph()
    run = p.add_run(text)
    run.font.size = Pt(10.5)
    run.font.name = 'Segoe UI'
    run.font.color.rgb = DARK_TEXT if not bold else PRIMARY
    run.bold = bold
    p.paragraph_format.space_after = Pt(0)

# Relevant substances mini-table
add_styled_table(doc,
    ["Stof", "CAS-nummer", "Relevantie"],
    [
        ["Divanadium pentaoxide (V₂O₅)", "1314-62-1", "Hoofdproduct van extractie"],
        ["Sodium metavanadate", "13718-26-8", "Aanwezig in SARU ash"],
        ["Slags, steelmaking, vanadium", "60912-34-6", "Grondstof (staalslakken)"],
        ["Vanadium", "7440-62-2", "Basis element"],
        ["Vanadium oxide sulphate", "27774-13-6", "Mogelijk elektrolyt-component"],
        ["Divanadium tris(sulphate)", "13701-70-7", "Mogelijk proces-intermediair"],
    ],
    col_widths=[5.5, 3.5, 5.5]
)

doc.add_paragraph()

letter_continuation = [
    "Onze verwachte jaarlijkse tonnage bedraagt minder dan 10 ton per stof (pilot fase). Wij zijn geïnteresseerd in de mogelijkheden voor een Letter of Access voor de bovengenoemde stoffen.",
    "",
    "Wij verzoeken u vriendelijk om:",
    "1. Informatie over de procedure en kosten voor een Letter of Access;",
    "2. Een overzicht van de beschikbare stoffen en registratiedetails;",
    "3. De voorwaarden voor deelname aan het consortium.",
    "",
    "Onze HSE Manager, Jorick van Gemert, is uw aanspreekpunt voor verdere communicatie.",
    "",
    "Wij zien uw reactie met belangstelling tegemoet.",
    "",
    "Met vriendelijke groet,",
    "",
    "[VUL IN: naam, functie]",
    "Phoenix Metals B.V.",
    "[VUL IN: handtekening + datum]",
]
for text in letter_continuation:
    p = doc.add_paragraph()
    run = p.add_run(text)
    run.font.size = Pt(10.5)
    run.font.name = 'Segoe UI'
    run.font.color.rgb = DARK_TEXT
    p.paragraph_format.space_after = Pt(0)

# 2C
add_heading_styled(doc, "2C. Kosten-batenanalyse", level=2)

add_body(doc, "Onderstaande analyse ondersteunt de besluitvorming over de meest geschikte deelnamevorm aan het Vanadium Consortium.")

add_styled_table(doc,
    ["Optie", "Kosten (indicatie)", "Voordelen", "Nadelen"],
    [
        ["Full membership", "€15.000–€40.000/jaar", "Volledige deelname, beslissingsrecht, data-access, invloed op CSR/CSR-activiteiten", "Hoge kosten, langdurige verbintenis, administratieve last"],
        ["Letter of Access", "€5.000–€15.000 (eenmalig)", "Goedkoper, sneller, voldoende voor pilot fase, beperkte administratie", "Geen beslissingsrecht, beperkt tot registratiegegevens"],
        ["Geen deelname", "€0", "Geen kosten", "Eigen dossier opbouwen = veel duurder (€50K+), tijdrovend, risico op incomplete registratie"],
    ],
    col_widths=[3.5, 3.5, 5, 5]
)

add_callout(doc, "Aanbeveling: Voor de pilot fase is een Letter of Access het meest kostenefficiënte pad. Bij opschaling naar commerciële productie kan full membership worden overwogen.", "success")

doc.add_page_break()

# ============================================================
# NOTIFICATIE 3: REACH-IT ACCOUNT & STOFFENINVENTARISATIE
# ============================================================
add_heading_styled(doc, "3. ECHA REACH-IT Account & Stoffeninventarisatie", level=1)
add_callout(doc, "Doel: Praktische stappenplan om REACH-compliant te worden via ECHA REACH-IT en een complete stoffeninventarisatie op te zetten.", "info")

# 3A
add_heading_styled(doc, "3A. REACH-IT Account aanmaken", level=2)

steps_reach = [
    ["1", "Ga naar https://echa.europa.eu en navigeer naar REACH-IT", "[VUL IN: datum uitvoering]"],
    ["2", "Klik op 'Create account' en selectieer 'Legal Entity' (rechtspersoon)", "[VUL IN]"],
    ["3", "Vul de verplichte velden in: bedrijfsnaam, KVK-nummer, vestigingsadres, contactpersoon, e-mail, telefoon", "[VUL IN: Stijn van Zelst als statutory representative]"],
    ["4", "Upload de KYC-documenten: uittreksel KVK, identiteitsbewijs contactpersoon, volmachtbrief", "[VUL IN]"],
    ["5", "ECHA verifieert de gegevens (gemiddeld 2–4 weken)", "[VUL IN]"],
    ["6", "Na goedkeuring: log in met ontvangen credentials", "[VUL IN]"],
    ["7", "Activeer de relevante modules: PPORD-notificatie, SIEF-deelname, dossier-indiening", "[VUL IN]"],
    ["8", "Archief de inloggegevens beveiligd (wachtwoordmanager, 2FA inschakelen)", "Jorick van Gemert"],
]
add_styled_table(doc,
    ["Stap", "Actie", "Opmerking"],
    steps_reach,
    col_widths=[1.5, 9, 5]
)

add_body(doc, "Verplichte velden bij accountaanmaak:", bold=True)
add_vul_in_field(doc, "Bedrijfsnaam (statutair)", "exacte naam zoals geregistreerd bij KVK")
add_vul_in_field(doc, "KVK-nummer")
add_vul_in_field(doc, "Vestigingsadres", "straat, postcode, plaats, land")
add_vul_in_field(doc, "Contactpersoon REACH-IT", "naam, functie, e-mail, telefoon")
add_vul_in_field(doc, "Statutory representative / Legal signatory", "naam + functie directeur")

# 3B
add_heading_styled(doc, "3B. Stoffeninventarisatie template", level=2)

add_body(doc, "Onderstaande template dient door Phoenix Metals te worden ingevuld voor alle stoffen die op locatie aanwezig zijn, worden geproduceerd of gebruikt. Dit is de basis voor de REACH-registratie en PPORD-notificatie.")

add_styled_table(doc,
    ["Stofnaam", "CAS / EC", "Bron", "Volume (kg/jaar)", "REACH-status", "Actie nodig", "Verantw."],
    [
        ["Vanadium-elektrolyt (eindproduct)", "[VUL IN: CAS]", "Eigen produktie (pilot)", "7.200", "[VUL IN: niet-geregistreerd]", "PPORD-notificatie + LoA consortium", "JvG"],
        ["Staalslakken (Tata Steel)", "60912-34-6", "Leverancier: Tata Steel", "[VUL IN]", "Geregistreerd (consortium)", "Letter of Access aanvragen", "JvG"],
        ["SARU ash (Shell)", "[VUL IN: CAS]", "Leverancier: Shell", "[VUL IN]", "[VUL IN]", "[VUL IN: check registratie + SDS]", "JvG"],
        ["Sodium metavanadate", "13718-26-8", "Intermediair (proces)", "[VUL IN]", "Geregistreerd (consortium)", "Letter of Access aanvragen", "JvG"],
        ["Divanadium pentaoxide (V₂O₅)", "1314-62-1", "Eindproduct", "[VUL IN]", "Geregistreerd (consortium)", "Letter of Access aanvragen", "JvG"],
        ["[VUL IN: overige stoffen]", "[VUL IN]", "[VUL IN]", "[VUL IN]", "[VUL IN]", "[VUL IN]", "[VUL IN]"],
        ["[VUL IN]", "[VUL IN]", "[VUL IN]", "[VUL IN]", "[VUL IN]", "[VUL IN]", "[VUL IN]"],
    ],
    col_widths=[3.2, 2, 2.5, 1.8, 2.5, 3, 1.5]
)

add_callout(doc, "Actie: Inventariseer alle stoffen in de pilot plant — inclusief hulpstoffen, schoonmaakmiddelen en afvalstromen.", "warning")

# 3C
add_heading_styled(doc, "3C. CLP-labeling checklist", level=2)

add_body(doc, "Alle opgeslagen en geproduceerde stoffen moeten voldoen aan de CLP Verordening (EG) nr. 1272/2008. Onderstaande checklist bevat de minimumvereisten.")

clp_items = [
    ["1", "Stoffen identificeren die CLP-classificatie vereisen", "Alle geproduceerde en opgeslagen stoffen ≥ 10 kg", "[VUL IN: voltooiingsdatum]"],
    ["2", "H- en P-zinnummers vaststellen per stof", "Via ECHA C&L inventaris of SDS leverancier", "[VUL IN]"],
    ["3", "GHS-pictogrammen toewijzen", "Gevarensymbolen volgens CLP bijlage V", "[VUL IN]"],
    ["4", "Signaleringwoord bepalen (Gevaar / Waarschuwing)", "Op basis van zwaarste gevarencategorie", "[VUL IN]"],
    ["5", "Etiketten ontwerpen en laten goedkeuren", "Incl. NL-talstekst, bedrijfsgegevens, veiligheidsraadpleging", "[VUL IN]"],
    ["6", "Etiketten aanbrengen op alle opslagvaten", "Conform CLP Art. 17", "[VUL IN]"],
    ["7", "Veiligheidsinformatiebladen (SDS) controleren", "Alle stoffen moeten een actuele SDS hebben (≤ 3 jaar oud)", "[VUL IN]"],
    ["8", "SDS up-to-date houden bij proceswijzigingen", "Herziening verplicht bij nieuwe informatie", "[VUL IN]"],
    ["9", "UPOV-melding (UPOV = gevaarlijke mengsels)", "Indien vanadium-elektrolyt als mengsel wordt geclassificeerd", "[VUL IN]"],
    ["10", "Documentatie archiveren", "Etiketontwerpen, SDS'en, classificatiebeslissingen", "Jorick van Gemert"],
]
add_styled_table(doc,
    ["#", "Actie", "Detail", "Deadline"],
    clp_items,
    col_widths=[1, 5.5, 5, 3]
)

doc.add_page_break()

# === BIJLAGE: VERANTWOORDELIJKHEDENMATRIX ===
add_heading_styled(doc, "Bijlage A: Verantwoordelijkhedenmatrix", level=1)

add_styled_table(doc,
    ["Actie", "Primair", "Ondersteuning", "Status"],
    [
        ["PPORD-notificatie indienen", "Jorick van Gemert", "Arcadis (Gijs Jacobs)", "[VUL IN]"],
        ["Vanadium Consortium — LoA aanvragen", "Jorick van Gemert", "Stijn van Zelst (goedkeuring)", "[VUL IN]"],
        ["REACH-IT account aanmaken", "Jorick van Gemert", "—", "[VUL IN]"],
        ["Stoffeninventarisatie opstellen", "Jorick van Gemert", "Laboratorium / leveranciers", "[VUL IN]"],
        ["CLP-labeling implementeren", "Jorick van Gemert", "Arcadis", "[VUL IN]"],
        ["SDS-controle en -beheer", "Jorick van Gemert", "Leveranciers", "[VUL IN]"],
        ["Budget goedkeuring (LoA/membership)", "Stijn van Zelst", "Jorick van Gemert (advies)", "[VUL IN]"],
        ["Contact ODIJ (omgevingsdienst)", "Jorick van Gemert", "Arcadis", "[VUL IN]"],
    ],
    col_widths=[5, 3.5, 4.5, 2.5]
)

# Footer info
doc.add_paragraph()
add_body(doc, "— Einde document —", italic=True)
add_body(doc, "Dit document is opgesteld door JvG Consultancy in opdracht van Phoenix Metals B.V.", italic=True)
add_body(doc, "Alle rechten voorbehouden. Versiebeheer conform MASTER_SOP §9.", italic=True)

# === SAVE ===
output_path = "/root/projects/jg/2026-reach-phoenix-metals/deliverables/docx/REACH_Notificatieconcepten_Phoenix_Metals_v1.0.docx"
doc.save(output_path)
print(f"OK: {output_path}")
