#!/usr/bin/env python3
"""REACH Kennisdossier v1.0 — DOCX generator"""
import os
from docx import Document
from docx.shared import Cm, Pt, Inches, Emu, 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
from datetime import datetime

# === CONSTANTS ===
HEADING_COLOR = RGBColor(0x00, 0x33, 0x66)
SUBHEADING_COLOR = RGBColor(0x37, 0x41, 0x51)
BODY_COLOR = RGBColor(0x1F, 0x29, 0x37)
FOOTER_TEXT = "2026-consult-REACH-kennisdossier v1.0 | JvG Consultancy | april 2026"
LOGO_PATH = "/root/projects/jg/assets/branding/jvg-logo-white-medium.png"
OUTPUT_PATH = "/root/projects/jg/2026-consult-REACH-kennisdossier/deliverables/docx/REACH_Kennisdossier_v1.0.docx"

doc = Document()

# === STYLES ===
style = doc.styles['Normal']
font = style.font
font.name = 'Calibri'
font.size = Pt(11)
font.color.rgb = BODY_COLOR

for level in range(1, 5):
    hs = doc.styles[f'Heading {level}']
    hs.font.name = 'Calibri'
    hs.font.color.rgb = HEADING_COLOR if level <= 2 else SUBHEADING_COLOR
    hs.font.bold = True
    hs.font.size = Pt(14) if level == 1 else Pt(12) if level == 2 else Pt(11)

# === HELPER FUNCTIONS ===
def add_heading(text, level=1):
    h = doc.add_heading(text, level=level)
    return h

def add_para(text, style='Normal', bold=False, italic=False):
    p = doc.add_paragraph(text, style=style)
    if bold:
        for run in p.runs:
            run.bold = True
    if italic:
        for run in p.runs:
            run.italic = True
    return p

def add_bullet(text, level=0):
    p = doc.add_paragraph(text, style='List Bullet')
    p.paragraph_format.left_indent = Cm(1.27 + level * 0.63)
    return p

def add_numbered(text, level=0):
    p = doc.add_paragraph(text, style='List Number')
    return p

def add_table(headers, rows, col_widths=None):
    table = doc.add_table(rows=1 + len(rows), cols=len(headers))
    table.style = 'Light Grid Accent 1'
    table.alignment = WD_TABLE_ALIGNMENT.CENTER
    # Header
    for i, h in enumerate(headers):
        cell = table.rows[0].cells[i]
        cell.text = h
        for p in cell.paragraphs:
            for r in p.runs:
                r.bold = True
                r.font.size = Pt(10)
                r.font.color.rgb = HEADING_COLOR
    # Rows
    for ri, row in enumerate(rows):
        for ci, val in enumerate(row):
            cell = table.rows[ri+1].cells[ci]
            cell.text = str(val)
            for p in cell.paragraphs:
                for r in p.runs:
                    r.font.size = Pt(10)
    if col_widths:
        for ri, row in enumerate(table.rows):
            for ci, w in enumerate(col_widths):
                row.cells[ci].width = Cm(w)
    doc.add_paragraph()  # spacing
    return table

def add_page_break():
    doc.add_page_break()

def set_cell_shading(cell, color):
    shading_elm = parse_xml(f'<w:shd {nsdecls("w")} w:fill="{color}"/>')
    cell._tc.get_or_add_tcPr().append(shading_elm)

# === PAGE SETUP ===
section = doc.sections[0]
section.page_height = Cm(29.7)
section.page_width = Cm(21)
section.top_margin = Cm(2.54)
section.bottom_margin = Cm(2.54)
section.left_margin = Cm(2.54)
section.right_margin = Cm(2.54)

# === HEADER with logo ===
header = section.header
header.is_linked_to_previous = False
hp = header.paragraphs[0]
hp.alignment = WD_ALIGN_PARAGRAPH.RIGHT
if os.path.exists(LOGO_PATH):
    run = hp.add_run()
    run.add_picture(LOGO_PATH, width=Cm(2.0), height=Cm(1.8))

# === FOOTER ===
footer = section.footer
footer.is_linked_to_previous = False
fp = footer.paragraphs[0]
fp.alignment = WD_ALIGN_PARAGRAPH.CENTER
fr = fp.add_run(FOOTER_TEXT)
fr.font.size = Pt(8)
fr.font.color.rgb = RGBColor(0x6B, 0x72, 0x80)

# === DOCUMENT PROPERTIES ===
doc.core_properties.title = "REACH Kennisdossier — JvG Consultancy"
doc.core_properties.author = "HQ_04 Technical Writer via Kas"
doc.core_properties.keywords = "REACH, CLP, SVHC, ECHA, Phoenix Metals, chemische stoffen, registratie, autorisatie, restrictie"
doc.core_properties.category = "Kennisdossier"
doc.core_properties.subject = "REACH-verordening compliance gids"

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

tp = doc.add_paragraph()
tp.alignment = WD_ALIGN_PARAGRAPH.CENTER
if os.path.exists(LOGO_PATH):
    run = tp.add_run()
    run.add_picture(LOGO_PATH, width=Cm(4.0), height=Cm(3.6))

doc.add_paragraph()

title = doc.add_paragraph()
title.alignment = WD_ALIGN_PARAGRAPH.CENTER
tr = title.add_run("REACH Kennisdossier")
tr.font.size = Pt(28)
tr.font.color.rgb = HEADING_COLOR
tr.bold = True

subtitle = doc.add_paragraph()
subtitle.alignment = WD_ALIGN_PARAGRAPH.CENTER
sr = subtitle.add_run("Verordening (EG) nr. 1907/2006\nRegistratie, Evaluatie, Autorisatie en Restrictie\nden CHemische stoffen")
sr.font.size = Pt(14)
sr.font.color.rgb = SUBHEADING_COLOR

doc.add_paragraph()
doc.add_paragraph()

meta_items = [
    ("Projectcode", "2026-consult-REACH-kennisdossier"),
    ("Versie", "v1.0"),
    ("Datum", "april 2026"),
    ("Auteur", "HQ_04 Technical Writer via Kas"),
    ("Opdrachtgever", "JvG Consultancy"),
    ("Case Study", "Phoenix Metals IJmuiden"),
    ("Classificatie", "Intern — Vertrouwelijk"),
]

meta_table = doc.add_table(rows=len(meta_items), cols=2)
meta_table.alignment = WD_TABLE_ALIGNMENT.CENTER
for i, (label, value) in enumerate(meta_items):
    meta_table.rows[i].cells[0].text = label
    meta_table.rows[i].cells[1].text = value
    for p in meta_table.rows[i].cells[0].paragraphs:
        for r in p.runs:
            r.bold = True
            r.font.size = Pt(11)
            r.font.color.rgb = HEADING_COLOR
    for p in meta_table.rows[i].cells[1].paragraphs:
        for r in p.runs:
            r.font.size = Pt(11)
    meta_table.rows[i].cells[0].width = Cm(4)
    meta_table.rows[i].cells[1].width = Cm(10)

add_page_break()

# ============================================================
# INHOUDSOPGAVE (TOC placeholder)
# ============================================================
add_heading("Inhoudsopgave", 1)
toc_items = [
    "1. Management Samenvatting",
    "2. Methodiek",
    "3. Wat is REACH?",
    "4. Registratie",
    "5. Stoffenidentificatie & Classificatie",
    "6. SVHC & Kandidaatlijst",
    "7. Evaluatie",
    "8. Autorisatie",
    "9. Restrictie",
    "10. Veiligheidsinformatiebladen (SDS)",
    "11. Data-deling & Consortiums",
    "12. SCIP Database",
    "13. UK REACH",
    "14. Phoenix Metals Case Study",
    "15. Tonnage Scenario's Phoenix Metals",
    "16. Chemicaliënregister Phoenix Metals",
    "17. Actuele Ontwikkelingen 2025",
    "18. Bronnenlijst",
]
for item in toc_items:
    p = doc.add_paragraph(item)
    p.paragraph_format.space_after = Pt(2)
    p.runs[0].font.size = Pt(11)
add_para("(Vernieuw de inhoudsopgave in Word via: Referenties → Inhoudsopgave bijwerken)", italic=True)

add_page_break()

# ============================================================
# HOOFDSTUK 1: MANAGEMENT SAMENVATTING
# ============================================================
add_heading("1. Management Samenvatting", 1)

add_para("Dit kennisdossier biedt een uitgebreid overzicht van de REACH-verordening (EG nr. 1907/2006) en de implicaties voor bedrijven die chemische stoffen vervaardigen, invoeren of gebruiken in de Europese Unie. Het document is geschreven voor medewerkers van Phoenix Metals IJmuiden en JvG Consultancy die niet vertrouwd zijn met REACH.")

add_heading("Wat is REACH?", 2)
add_para("REACH staat voor Registratie, Evaluatie, Autorisatie en Restrictie van CHemische stoffen. Het is een EU-verordening die in werking is getreden op 1 juni 2007 en van toepassing is op alle lidstaten van de Europese Unie en de Europese Economische Ruimte (EER). REACH beoogt een hoog niveau van bescherming van de menselijke gezondheid en het milieu te waarborgen, evenals de vrije handel in chemische stoffen binnen de interne markt te bevorderen.")

add_heading("Kernverplichtingen", 2)
add_bullet("Registratie: Fabrikanten en importeurs van stoffen ≥ 1 ton/jaar moeten deze registreren bij ECHA.")
add_bullet("Evaluatie: ECHA en lidstaten beoordelen de veiligheid van geregistreerde stoffen.")
add_bullet("Autorisatie: Stoffen met zeer zorgwekkende eigenschappen (SVHC) vereisen een autorisatie voor gebruik.")
add_bullet("Restrictie: Bepaalde stoffen of gebruiksvormen kunnen worden beperkt of verboden.")
add_bullet("Communicatie: Informatieoverdracht in de toeleveringsketen via veiligheidsinformatiebladen (SDS).")

add_heading("Key Takeaways voor Phoenix Metals", 2)
add_bullet("Phoenix Metals vervaardigt vanadium-elektrolyten uit staalslakken voor batterijopslag.")
add_bullet("De huidige pilot plant produceert < 1 ton/jaar — geen registratieplicht, maar voorbereiding is essentieel.")
add_bullet("Zodra productie ≥ 1 ton/jaar bereikt, gelden REACH-verplichtingen voor alle vanadiumverbindingen.")
add_bullet("Budgetindicatie voor volledige registratie: €120.000 — €290.000.")
add_bullet("Vroegtijdige aansluiting bij een consortium (bijv. Vanadium REACH Consortium) bespaart kosten en tijd.")
add_bullet("Alle 6 chemicaliën op het terrein zijn geregistreerd door leveranciers — downstream-verplichtingen gelden.")

add_page_break()

# ============================================================
# HOOFDSTUK 2: METHODIEK
# ============================================================
add_heading("2. Methodiek", 1)

add_heading("2.1 Bronnen per Tier", 2)

add_heading("Tier 1 — ECHA Gidsen (15 documenten)", 3)
add_para("De primaire bronnen vormen de officiële ECHA-richtsnoeren en praktische gidsen. Deze documenten zijn gepubliceerd door het Europees Agentschap voor Chemische Stoffen (ECHA) en vertegenwoordigen de geautoriseerde interpretatie van de REACH- en CLP-verordening.")

add_table(
    ["Bron", "Type", "Pagina's", "Datering"],
    [
        ["Richtsnoer voor registratie", "PDF", "133", "Aug 2021 (v4.0)"],
        ["Richtsnoer stoffenidentificatie", "PDF", "134", "Dec 2023 (v3.0)"],
        ["Richtsnoer SDS", "PDF", "88", "Dec 2023"],
        ["Richtsnoer SVHC", "PDF", "10", "Okt 2018 (v2.1)"],
        ["Gids chemische veiligheid MKB", "PDF", "52", "2019"],
        ["Richtsnoer data-deling", "PDF", "151", "Dec 2023 (v4.1)"],
        ["Gids gebruik & blootstelling", "PDF", "27", "2019"],
        ["Gids QSAR rapportage", "PDF", "38", "2019"],
        ["Gids SIP voorbereiding", "PDF", "7", "Apr 2018"],
        ["Gids autorisatie", "PDF", "95", "Feb 2021"],
        ["Gids CLH dossiers", "PDF", "37", "Jun 2022"],
        ["Gids CLP etikettering", "PDF", "200", "Mrt 2021 (v4.2)"],
        ["Gids kwalitatieve gezondheidsbeoordeling", "PDF", "60", "2019"],
        ["REACH basisuitleg (DOCX)", "DOCX", "28", "Intern"],
        ["Basisgids CLP (DOCX)", "DOCX", "12", "Intern"],
    ]
)

add_heading("Tier 2 — Phoenix Metals Documenten", 3)
add_table(
    ["Bron", "Type", "Inhoud"],
    [
        ["REACH registratie [phoenix metals).docx", "DOCX", "Volledige projectaanpak REACH"],
        ["Registration Chemicals MASTER v2.1.0", "XLSX", "6 geregistreerde chemicaliën"],
    ]
)

add_heading("Tier 3 — Training & Webinars", 3)
add_table(
    ["Bron", "Type", "Datering"],
    [
        ["Chemical management GPS 2022NL", "PPTX", "Juni 2022"],
        ["Exposure to hazardous chemicals PM 2025", "PPTX", "Januari 2025"],
        ["CIRS Webinar EU/UK compliance (3x)", "Webinar", "2025"],
    ]
)

add_heading("2.2 Zoekstrategie", 2)
add_para("Alle ECHA-richtsnoeren zijn integraal doorgelezen (depth-first benadering). Phoenix Metals-documenten zijn geëxtraheerd uit interne bedrijfsdocumentatie. Trainingmateriaal is geanalyseerd op REACH-specifieke inhoud. Overlappingen tussen bronnen zijn geïdentificeerd en gecorreleerd.")

add_page_break()

# ============================================================
# HOOFDSTUK 3: WAT IS REACH?
# ============================================================
add_heading("3. Wat is REACH?", 1)

add_heading("3.1 Achtergrond", 2)
add_para("De REACH-verordening (Verordening (EG) nr. 1907/2006) werd aangenomen door het Europees Parlement en de Raad op 18 december 2006 en trad in werking op 1 juni 2007. REACH verving het bestaande stelsel van EU-stoffenwetgeving, waaronder de Richtlijn gevaarlijke stoffen (67/548/EEG) en de Richtlijn preparden/preparaten (1999/45/EG).")

add_para("De verordening introduceerde een fundamenteel nieuw systeem waarin de verantwoordelijkheid voor het aantonen van de veiligheid van chemische stoffen bij de industrie ligt (\"no data, no market\"-principe), in plaats van bij de overheid.")

add_heading("3.2 Doelstellingen", 2)
add_bullet("Bescherming van de menselijke gezondheid en het milieu tegen de risico's van chemische stoffen.")
add_bullet("Verbetering van de concurrentiepositie van de Europese chemische industrie door innovatie te stimuleren.")
add_bullet("Vrije handel in chemische stoffen binnen de interne markt waarborgen.")
add_bullet("Bevordering van alternatieve methoden voor de beoordeling van gevaren van stoffen (vermindering van dierproeven).")
add_bullet("Transparantie en informatieverstrekking over chemische stoffen in de toeleveringsketen.")

add_heading("3.3 Scope", 2)
add_para("REACH is van toepassing op:")
add_bullet("Alle chemische stoffen als zodanig (zuivere stoffen), of in mengsels (voorheen preparaten genoemd).")
add_bullet("Stoffen in voorwerpen, indien deze bedoeld zijn om onder normale of redelijkerwijs te verwachten gebruiksomstandigheden vrij te komen.")
add_bullet("Fabrikanten en importeurs van stoffen ≥ 1 ton per jaar.")
add_bullet("Downstream gebruikers die stoffen verwerken.")
add_bullet("Producenten en importeurs van voorwerpen.")

add_heading("3.4 Uitzonderingen", 2)
add_para("REACH is niet van toepassing op:")
add_bullet("Radioactieve stoffen (Euratom-verordening).")
add_bullet("Stoffen onder douanetoezicht (niet in vrij verkeer gebracht).")
add_bullet("Afvalstoffen (Richtlijn afvalstoffen).")
add_bullet("Bepaalde stoffen in bijlage IV (bijv. water, suiker, ethanol) en bijlage V (bijv. bepaalde mineralen).")
add_bullet("Stoffen die vallen onder andere specifieke EU-wetgeving (bijv. geneesmiddelen, levensmiddelenadditieven).")

add_heading("3.5 Kernbegrippen", 2)
add_table(
    ["Begrip", "Definitie"],
    [
        ["Stof", "Een chemisch element en zijn verbindingen, in natuurlijke of vervaardigde vorm."],
        ["Mengsel", "Een mengsel of oplossing van twee of meer stoffen."],
        ["Voorwerp", "Een voorwerp dat tijdens de vervaardiging een specifieke vorm, oppervlak of ontwerp krijgt."],
        ["Fabrikant", "Een natuurlijke persoon of rechtspersoon die in de EER een stof vervaardigt."],
        ["Importeur", "Een natuurlijke persoon of rechtspersoon die in de EER een stof, mengsel of voorwerp invoert."],
        ["Downstream gebruiker", "Een natuurlijke persoon of rechtspersoon, niet zijnde fabrikant of importeur, die een stof gebruikt."],
        ["Enige vertegenwoordiger (OR)", "Een in de EER gevestigde natuurlijke persoon of rechtspersoon, aangesteld door een niet-EU-fabrikant."],
        ["Registrant", "Een fabrikant of importeur (of OR) die een stof bij ECHA registreert."],
        ["ECHA", "Europees Agentschap voor Chemische Stoffen, gevestigd in Helsinki."],
    ]
)

add_heading("3.6 REACH in het Nederlands recht", 2)
add_para("REACH is een verordening, wat betekent dat deze rechtstreeks werkend is in alle EU-lidstaten. Naast REACH gelden in Nederland aanvullende verplichtingen uit de Arbowet (RI&E, RI&E TOX) en het Besluit risico's zorgwekkende stoffen (het \"stappenplan\" of 4-stappenbenadering voor blootstelling aan gevaarlijke stoffen). De Nederlandse REACH Helpdesk (chemischestoffengoedgeregeld.nl) biedt ondersteuning aan bedrijven.")

add_page_break()

# ============================================================
# HOOFDSTUK 4: REGISTRATIE
# ============================================================
add_heading("4. Registratie", 1)

add_heading("4.1 Drempelwaarden en tonnagebands", 2)
add_para("De registratieplicht geldt voor fabrikanten en importeurs die stoffen in hoeveelheden van 1 ton of meer per jaar vervaardigen of invoeren. REACH kent vier tonnagebands met oplopende informatie-eisen:")

add_table(
    ["Tonnageband", "Informatie-eis", "CSR verplicht?", "Typische kosten"],
    [
        ["1 — 10 ton/jaar", "Bijlage VII + aanvullend (bijl. VI)", "Nee (wel safe use richtlijnen)", "€5.000 — €15.000"],
        ["10 — 100 ton/jaar", "Bijlage VII + VIII + IX (gedeeltelijk)", "Ja (incl. blootstellingsscenario's)", "€30.000 — €80.000"],
        ["100 — 1.000 ton/jaar", "Bijlage VII + VIII + IX + X (gedeeltelijk)", "Ja", "€80.000 — €200.000"],
        ["> 1.000 ton/jaar", "Volledige bijlagen VII — X", "Ja (volledig)", "€200.000 — €500.000+"],
    ]
)

add_heading("4.2 Registratiestappen", 2)
add_numbered("Stoffenidentificatie: Bepaal de identiteit van de stof (CAS-nummer, IUPAC-naam, samenstelling).")
add_numbered("Volumebepaling: Bereken de jaarlijkse tonnage per stof.")
add_numbered("Gegevensverzameling: Verzamel fysisch-chemische, toxicologische en ecotoxicologische gegevens.")
add_numbered("Data-deling: Wissel gegevens uit met andere registranten via het SIEF (Substance Information Exchange Forum).")
add_numbered("Chemische veiligheidsbeoordeling (CSA): Voer een risicobeoordeling uit (≥ 10 ton/jaar).")
add_numbered("Dossieropstelling: Stel het technisch dossier samen in IUCLID.")
add_numbered("Indiening: Dien het dossier in via REACH-IT en betaal de registratiebijdrage.")
add_numbered("Bevestiging: Ontvang het registratienummer van ECHA.")

add_heading("4.3 ECHA-IT en IUCLID", 2)
add_para("REACH-IT is het online portaal van ECHA voor het indienen van registraties, autorisatieaanvragen en andere dossiers. IUCLID (International Uniform Chemical Information Database) is de software waarmee registratiedossiers worden opgesteld en beheerd. IUCLID is gratis beschikbaar via de ECHA-website.")

add_heading("4.4 Gezamenlijke indiening", 2)
add_para("Wanneer meerdere bedrijven dezelfde stof registreren, moeten zij gezamenlijk indienen. Eén bedrijf treedt op als hoofdregistrant (lead registrant) en dient het gezamenlijke dossier in. De andere registranten dienen een deelnemersdossier in met hun specifieke gegevens. Dit \"één stof, één registratie\"-principe voorkomt dubbel werk en onnodige dierproeven.")

add_heading("4.5 Wat als u niet registreert?", 2)
add_para("Het niet registreren van een stof waarvoor de registratieplicht geldt, is een overtreding van de REACH-verordening. Gevolgen:")
add_bullet("De stof mag niet worden vervaardigd, ingevoerd of op de markt gebracht (\"no data, no market\").")
add_bullet("Nationale handhavingsinstanties kunnen boetes opleggen.")
add_bullet("In geval van een ongeval met een niet-geregistreerde stof kan de fabrikant/importeur aansprakelijk worden gesteld.")

add_page_break()

# ============================================================
# HOOFDSTUK 5: STOFFENIDENTIFICATIE & CLASSIFICATIE
# ============================================================
add_heading("5. Stoffenidentificatie & Classificatie", 1)

add_heading("5.1 Stoffenidentificatie", 2)
add_para("Correcte stoffenidentificatie is de basis van REACH. Elke geregistreerde stof moet uniek worden geïdentificeerd. De belangrijkste identificatiemiddelen zijn:")

add_table(
    ["Identificatiemiddel", "Beschrijving"],
    [
        ["CAS-nummer", "Chemical Abstracts Service-nummer: unieke numerieke aanduiding (bijv. 1310-73-2 voor natriumhydroxide)."],
        ["EC-nummer (EINECS/ELINCS)", "Europees identificatienummer voor bestaande of nieuwe stoffen op de EER-markt."],
        ["IUPAC-naam", "Systematische chemische naam volgens de International Union of Pure and Applied Chemistry."],
        ["SMILES/InChI", "Structurele representaties van de molecuulstructuur."],
        ["Samenstelling", "Zuiverheid, bestanddelen, onzuiverheden — vastgelegd in een Stofidentiteitsprofiel (SIP)."],
    ]
)

add_para("Het Stofidentiteitsprofiel (SIP) is een overeengekomen set van identificatieparameters die de grenssamenstelling van de stof bepaalt. Alle registranten van dezelfde stof moeten hetzelfde SIP hanteren. Het SIP omvat hoofdbestanddelen, onzuverheden en relevante additieven met hun concentratiebereiken.")

add_heading("5.2 CLP-verordening", 2)
add_para("De CLP-verordening (Verordening (EG) nr. 1272/2008) implementeert het GHS (Globally Harmonised System) van de VN in de EU. CLP regelt de indeling (classification), etikettering (labelling) en verpakking (packaging) van stoffen en mengsels. CLP is sinds 1 juni 2015 volledig van toepassing en vervangt de oudere richtlijnen 67/548/EEG en 1999/45/EC.")

add_heading("5.3 Gevaarsklassen en -categorieën", 2)
add_para("CLP onderscheidt de volgende gevaarsklassen:")

add_table(
    ["Gevaarsklasse", "Voorbeelden", "Signalwoord"],
    [
        ["Fysieke gevaren", "Ontvlambaar, explosief, oxiderend, gassen onder druk", "Gevaar/Waarschuwing"],
        ["Gezondheidsgevaren", "Acute toxiciteit, huid/huidirritatie, CMR, sensibilisatie", "Gevaar/Waarschuwing"],
        ["Milieugevaren", "Acuut/chronisch aquatisch toxisch, ozonlaagbeschadiging", "Waarschuwing"],
    ]
)

add_heading("5.4 H- en P-zinnen", 2)
add_para("Hazard statements (H-zinnen) beschrijven de aard van het gevaar. Precautionary statements (P-zinnen) geven advies over preventieve maatregelen, reactie bij blootstelling, opslag en afvoer. Voorbeelden:")

add_table(
    ["Code", "Tekst", "Type"],
    [
        ["H314", "Veroorzaakt ernstige huidverbrandingen en oogbeschadiging", "Gevaarsverklaring"],
        ["H331", "Giftig bij inademing", "Gevaarsverklaring"],
        ["H350", "Kan kanker veroorzaken", "Gevaarsverklaring"],
        ["P260", "Stof/gas/nevel/damp/spray niet inademen", "Preventie"],
        ["P280", "Beschermende handschoenen/beschermende kleding/oogbescherming dragen", "Preventie"],
        ["P305+P351+P338", "BIJ CONTACT MET DE OGEN: voorzichtig spoelen met water gedurende enkele minuten", "Reactie"],
    ]
)

add_heading("5.5 CLP-pictogrammen", 2)
add_para("De negen GHS-pictogrammen zijn diamantvormig met een witte achtergrond en rode rand. Elk pictogram vertegenwoordigt een type gevaar:")

add_table(
    ["Pictogram", "Gevaar"],
    [
        ["☠️ (Schedel en gekruiste botten)", "Acute toxiciteit (categorieën 1-3)"],
        ["🔥 (Vlam)", "Ontvlambaar"],
        ["💥 (Onderslag)", "Explosief"],
        ["⭕ (Corrosie)", "Corrosief / huidverbranding"],
        ["🧪 (Gasfles)", "Gas onder druk"],
        ["❗ (Uitroepteken)", "Irriterend, sensibiliserend, acuut toxisch cat. 4-5"],
        ["🌍 (Milieu)", "Milieugevaarlijk"],
        ["👤 (Borstkas)", "Gezondheidsgevaar (specifieke doelorgaan, mutageen, kankerverwekkend)"],
        ["🔴 (Vlam over cirkel)", "Oxiderend"],
    ]
)

add_page_break()

# ============================================================
# HOOFDSTUK 6: SVHC & KANDIDAATLIJST
# ============================================================
add_heading("6. SVHC & Kandidaatlijst", 1)

add_heading("6.1 Wat zijn SVHC's?", 2)
add_para("Zeer Zorgwekkende Stoffen (Substances of Very High Concern, SVHC) zijn stoffen die ernstige en vaak onomkeerbare effecten kunnen hebben op de menselijke gezondheid of het milieu. Een stof kan als SVHC worden geïdentificeerd op basis van artikel 57 van REACH als deze voldoet aan een of meer van de volgende criteria:")

add_bullet("Carcinogeen, mutageen of reproductietoxisch (CMR) — categorieën 1A of 1B.")
add_bullet("Persistent, bioaccumulatief en toxisch (PBT).")
add_bullet("Zeer persistent en zeer bioaccumulatief (vPvB).")
add_bullet("Ernstige zorgwekkende effecten (bijv. endocriene stoornissen) — equivalent zorgniveau (artikel 57(f)).")

add_para("SVHC's worden voorgedragen door lidstaten of ECHA en na een openbare raadpleging op de Kandidaatlijst geplaatst. De lijst wordt regelmatig bijgewerkt en bevat medio 2025 meer dan 240 stoffen.")

add_heading("6.2 Verplichtingen rond SVHC's", 2)

add_heading("Artikel 33 — Communicatie in de keten", 3)
add_para("Leveranciers van stoffen, mengsels of voorwerpen die een SVHC bevatten in een concentratie > 0,1% (gewichtspercentage), moeten de ontvanger(s) daarvan op de hoogte stellen. De ontvanger heeft recht op voldoende informatie om het veilige gebruik van het materiaal te garanderen. In de praktijk wordt dit vaak via het veiligheidsinformatieblad (SDS) gecommuniceerd.")

add_heading("Artikel 7(2) — Notificatie aan ECHA", 3)
add_para("Importeurs van voorwerpen moeten SVHC's notificeren aan ECHA indien:")
add_bullet("De stof aanwezig is in het voorwerp in concentraties > 0,1% (w/w).")
add_bullet("De stof is bedoeld om vrij te komen onder normale gebruiksomstandigheden.")
add_bullet("De totale hoeveelheid > 1 ton per jaar per importeur bedraagt.")
add_bullet("De stof nog niet is geregistreerd voor dat gebruik.")

add_heading("6.3 Van kandidaatlijst naar autorisatielijst (Bijlage XIV)", 3)
add_para("Stoffen op de Kandidaatlijst kunnen worden overgeplaatst naar Bijlage XIV (de autorisatielijst). Vanaf de \"sunset date\" (de datum waarop de stof onder het autorisatieregime valt) mag de stof alleen nog worden gebruikt met een verleende autorisatie. Dit proces stimuleert vervanging door veiligere alternatieven.")

add_heading("6.4 Voorbeeldstoffen", 2)
add_table(
    ["Stof", "CAS-nummer", "Reden SVHC", "Status"],
    [
        ["Chroom-6 verbindingen", "Divers", "CMR (carcinogeen cat. 1B)", "Bijlage XIV (autorisatie)"],
        ["Bisfenol A (BPA)", "80-05-7", "Endocriene stoornis (art. 57(f))", "Kandidaatlijst"],
        ["Pb (lood)", "7439-92-1", "Reproductietoxisch cat. 1A", "Kandidaatlijst"],
        ["Asbest", "Divers", "Carcinogeen cat. 1A", "Bijlage XVII (restrictie)"],
        ["PFAS (bepaalde)", "Divers", "vPvB", "Kandidaatlijst / restrictievoorstel"],
    ]
)

add_page_break()

# ============================================================
# HOOFDSTUK 7: EVALUATIE
# ============================================================
add_heading("7. Evaluatie", 1)

add_heading("7.1 Twee vormen van evaluatie", 2)
add_para("REACH onderscheidt twee vormen van evaluatie: dossierbeoordeling en stoffenbeoordeling.")

add_heading("7.1.1 Dossierbeoordeling", 3)
add_para("ECHA controleert de ingediende registratiedossiers op technische volledigheid. Dit omvat:")
add_bullet("Compliance checks: Controle of het dossier voldoet aan de informatie-eisen van REACH.")
add_bullet("Testvoorstelbeoordeling: ECHA beoordeelt voorgestelde dierproeven op noodzaak. Het doel is onnodige dierproeven te voorkomen (artikel 40). Bij een testvoorstel hebben derden 45 dagen de tijd om alternatieve informatie aan te leveren.")

add_heading("7.1.2 Stoffenbeoordeling", 3)
add_para("Lidstaten selecteren stoffen voor verdere beoordeling op basis van:")
add_bullet("Vermoedens van onaanvaardbare risico's voor de menselijke gezondheid of het milieu.")
add_bullet("Grote volumes (hoge tonnagebands).")
add_bullet("Structuurverwantschap met bekende probleemstoffen.")
add_bullet("Exposure van kwetsbare populaties (bijv. consumenten, werknemers).")

add_heading("7.2 Wat betekent dit voor bedrijven?", 2)
add_para("Bedrijven moeten:")
add_bullet("Hun registratiedossiers up-to-date houden. Na een dossierbeoordeling kan ECHA aanvullende informatie eisen.")
add_bullet("Coöperatief omgaan met testvoorstellen: mogelijke alternatieven aandragen binnen 45 dagen.")
add_bullet("Voldoen aan besluiten uit stoffenbeoordelingen, die aanvullende tests of risicobeheersing kunnen eisen.")
add_bullet("Registraties actueel houden: bij verandering van productievolume, nieuwe gevareninformatie of gewijzigde toepassingen moet het dossier worden bijgewerkt (artikel 22, Uitvoeringsverordening 2020/1435).")

add_page_break()

# ============================================================
# HOOFDSTUK 8: AUTORISATIE
# ============================================================
add_heading("8. Autorisatie", 1)

add_heading("8.1 Wanneer is autorisatie nodig?", 2)
add_para("Autorisatie is vereist voor stoffen die op Bijlage XIV van REACH staan. Vanaf de \"sunset date\" mag een dergelijke stof alleen nog worden gebruikt als:")
add_bullet("Een autorisatie is aangevraagd en verleend voor het specifieke gebruik.")
add_bullet("Het gebruik onder een overgangsregeling valt.")
add_bullet("De stof vrijgesteld is van de autorisatieplicht.")

add_heading("8.2 Aanvraagproces", 2)
add_numbered("Verifieer of de stof op Bijlage XIV staat en noteer de sunset date.")
add_numbered("Onderzoek alternatieven: toon aan dat de risico's adequaat zijn beheerst en dat er geen geschikte alternatieven zijn.")
add_numbered("Stel een analyserapport op over alternatieven (Substitution Plan).")
add_numbered("Dien de aanvraag in via REACH-IT, ten minste 18 maanden vóór de sunset date.")
add_numbered("ECHA beoordeelt de aanvraag en brengt advies uit aan de Europese Commissie.")
add_numbered("De Commissie beslist over het verlenen of weigeren van de autorisatie.")

add_heading("8.3 Kosten en doorlooptijd", 2)
add_para("Autorisatieaanvragen zijn complex en kostbaar. Indicatie:")
add_bullet("Voorbereiding analyserapport: €50.000 — €150.000.")
add_bullet("ECHA-verwerkingsbijdrage: variabel per stof en volume (tot €70.000+).")
add_bullet("Doorlooptijd: 18 — 36 maanden van voorbereiding tot beslissing.")
add_bullet("De autorisatie is tijdig beperkt (meestal 5 — 15 jaar), waarna verlenging kan worden aangevraagd.")

add_heading("8.4 Alternatieven en substitutie", 2)
add_para("Een belangrijk doel van autorisatie is het stimuleren van substitutie. De aanvrager moet:")
add_bullet("Aantonen dat risico's voor mens en milieu adequaat zijn beheerst.")
add_bullet("Onderzoeken of er geschikte alternatieven beschikbaar zijn.")
add_bullet("Een substitutieplan opstellen als alternatieven bestaan.")
add_bullet("Als alternatieven bestaan maar niet worden toegepast: motiveren waarom (bijv. onvoldoende prestatie, disproportionele kosten).")

add_page_break()

# ============================================================
# HOOFDSTUK 9: RESTRICTIE
# ============================================================
add_heading("9. Restrictie", 1)

add_heading("9.1 Bijlage XVII", 2)
add_para("Bijlage XVII van REACH bevat restricties op de vervaardiging, het in de handel brengen en het gebruik van bepaalde gevaarlijke stoffen, mengsels en voorwerpen. Een restrictie kan betrekking hebben op:")
add_bullet("De stof als zodanig.")
add_bullet("De stof in mengsels.")
add_bullet("De stof in voorwerpen.")
add_bullet("Specifieke toepassingen of gebruiksvormen.")

add_heading("9.2 Restrictieproces", 2)
add_numbered("ECHA ontvangt een restrictiedossier (van een lidstaat of de Commissie).")
add_numbered("Openbare raadpleging van 6 maanden voor belanghebbenden.")
add_numbered("ECHA's Comité voor Risicobeoordeling (RAC) en Comité voor Sociaaleconomische Analyse (SEAC) brengen advies uit.")
add_numbered("De Europese Commissie neemt het definitieve besluit (eventueel aangepast door het Europees Parlement en de Raad).")

add_heading("9.3 Voorbeelden van restricties", 2)
add_table(
    ["Stof", "Toepassing", "Type restrictie", "Kenmerken"],
    [
        ["Chroom-6", "Oppervlaktebehandeling, conservation", "Verbod (uitzonderingen)", "Sundown: diverse overgangsregelingen"],
        ["Asbest", "Alle toepassingen", "Verbod", "Verbod sinds 2005 (richtlijn 1999/77/EG)"],
        ["PFAS", "Vuurwerkaal, oppervlaktebehandeling, consumenten", "Voorgestelde universele restrictie", "In behandeling sinds 2023"],
        ["Lead", "Loodhoudende verf, pijpleidingen", "Verbod (toepassingsafhankelijk)", "Max. concentratie 0,1%"],
        ["CMR-stoffen cat. 1A/1B", "Consumentenproducten", "Verbod in consumentenproducten", "Uitzonderingen met toestemming"],
        ["Nikkel", "Sieraden, textiel", "Beperking migratielimiet", "Max. 0,5 µg/cm²/week"],
    ]
)

add_page_break()

# ============================================================
# HOOFDSTUK 10: VEILIGHEIDSINFORMATIEBLADEN (SDS)
# ============================================================
add_heading("10. Veiligheidsinformatiebladen (SDS)", 1)

add_heading("10.1 Wat is een SDS?", 2)
add_para("Een Veiligheidsinformatieblad (Safety Data Sheet, SDS) is een document dat essentiële informatie verschaft over de gevaren van een stof of mengsel en advies geeft over veilig gebruik, opslag en afvoer. Leveranciers zijn verplicht een SDS te verstrekken wanneer:")
add_bullet("De stof of het mengsel als gevaarlijk is geclassificeerd volgens CLP.")
add_bullet("De stof een PBT- of vPvB-stof is.")
add_bullet("De stof op de Kandidaatlijst (SVHC) staat, in concentratie ≥ 0,1%.")

add_heading("10.2 Structuur van de SDS (16 secties)", 2)
add_table(
    ["Sectie", "Inhoud"],
    [
        ["1", "Identificatie van de stof/mengsel en van de vennootschap/onderneming"],
        ["2", "Mogelijke gevaren (classificatie, etikettering, H/P-zinnen)"],
        ["3", "Samenstelling en informatie over de bestanddelen"],
        ["4", "Eerste-hulpmaatregelen"],
        ["5", "Brandblusmaatregelen"],
        ["6", "Maatregelen bij onopzettelijke vrijgifte"],
        ["7", "Handhaven en opslaan (veiligheidsmaatregelen)"],
        ["8", "Blootstellingsbeheersing / persoonlijke bescherming"],
        ["9", "Fysische en chemische eigenschappen"],
        ["10", "Stabiliteit en reactiviteit"],
        ["11", "Toxicologische informatie"],
        ["12", "Ecologische informatie"],
        ["13", "Afwijking van de stof"],
        ["14", "Informatie betreffende het vervoer (ADR/RID/IMDG)"],
        ["15", "Voorschriften (regelgeving)"],
        ["16", "Overige informatie"],
    ]
)

add_heading("10.3 Uitgebreid SDS (eSDS)", 2)
add_para("Voor stoffen geregistreerd ≥ 10 ton/jaar en geclassificeerd als gevaarlijk (of PBT/vPvB), moet de SDS worden uitgebreid met blootstellingsscenario's (exposure scenarios). Een eSDS bevat:")
add_bullet("Een beschrijving van de geïdentificeerde vormen van gebruik.")
add_bullet("Operationele voorwaarden en risicobeheersmaatregelen (RMM).")
add_bullet("Blootstellingsniveaus (DNEL/DMEL voor mens, PNEC voor milieu).")
add_bullet("Advies over hoe de downstream gebruiker kan aantonen dat de risico's adequaat zijn beheerst.")

add_heading("10.4 Nieuw SDS-formaat (Verordening EU 2020/878)", 3)
add_para("Sinds 1 januari 2023 is het vernieuwde SDS-formaat verplicht (Verordening EU 2020/878). Wijzigingen omvatten:")
add_bullet("Pflicht tot toevoeging van een unieke formuleherkenning (UFI) op het etiket en in sectie 1 van de SDS.")
add_bullet("Uitgebreidere informatie over nanomaterialen.")
add_bullet("Verduidelijking van sectie 3 (samenstelling) en sectie 9 (fysisch-chemische eigenschappen).")
add_bullet("Meer nadruk op veilig gebruik door de gehele levenscyclus.")

add_page_break()

# ============================================================
# HOOFDSTUK 11: DATA-DELING & CONSORTIUMS
# ============================================================
add_heading("11. Data-deling & Consortiums", 1)

add_heading("11.1 SIEF (Substance Information Exchange Forum)", 2)
add_para("Het SIEF is het platform waarop fabrikanten, importeurs en OR's die dezelfde stof registreren, gegevens uitwisselen. Doel van het SIEF:")
add_bullet("Voorkomen van dubbele tests, in het bijzonder dierproeven.")
add_bullet("Gezamenlijk identificeren van gegevenslacunes.")
add_bullet("Kosten delen voor benodigde studies.")
add_bullet("Overeenstemming bereiken over stofidentificatie en classificatie.")

add_heading("11.2 Letter of Access (LoA)", 2)
add_para("Een Letter of Access is een overeenkomst waarbij een gegevenseigenaar (eigenaar van studies) een andere registrant toegang verleent tot zijn/haar gegevens, in ruil voor een financiële vergoeding. De LoA bevat:")
add_bullet("Specificatie van de beschikbare studies en de bijbehorende kosten.")
add_bullet("Voorwaarden voor gebruik (bijv. aantal registranten, tonnageband).")
add_bullet("Intellectuele-eigendomsrechten en vertrouwelijkheid.")

add_heading("11.3 Consortium", 2)
add_para("Een consortium is een formele samenwerking van bedrijven die gezamenlijk een stof registreren. Voordelen:")
add_bullet("Kostenbesparing door gedeelde studies (toxicologische tests zijn kostbaar: €10.000 — €100.000+ per studie).")
add_bullet("Toegang tot expertise (toxicologen, registratiespecialisten).")
add_bullet("Efficiëntere communicatie met ECHA (één gezamenlijke indiening).")
add_bullet("Kwaliteitsborging door gezamenlijke review.")

add_heading("11.4 Praktische tips voor data-deling", 2)
add_bullet("Begin op tijd: gegevensuitwisseling kan maanden duren.")
add_bullet("Documenteer alles: bewaar bewijsstukken van kosten en communicatie (minimaal 12 jaar).")
add_bullet("Wees transparant over samenstelling en volumes.")
add_bullet("Ken uw rechten: u hoeft alleen te betalen voor gegevens die u nodig heeft.")
add_bullet("Schakel een consultant in bij complexe onderhandelingen.")
add_bullet("Pas op voor mededingingsrechtelijke grenzen: deel geen gevoelige commerciële informatie.")

add_page_break()

# ============================================================
# HOOFDSTUK 12: SCIP DATABASE
# ============================================================
add_heading("12. SCIP Database", 1)

add_heading("12.1 Wat is SCIP?", 2)
add_para("SCIP (Substances of Concern In articles as such or in complex objects (Products)) is een database die wordt beheerd door ECHA. SCIP is ingesteld ter uitvoering van de Afvalstoffenrichtlijn (Richtlijn 2008/98/EG) en heeft als doel:")
add_bullet("Informatie verschaffen over SVHC's in voorwerpen aan afvalverwerkers en consumenten.")
add_bullet("Het recyclen en hergebruiken van materialen bevorderen.")
add_bullet("De overgang naar een circulaire economie ondersteunen.")

add_heading("12.2 Wie moet melden?", 2)
add_para("Producenten, importeurs en distributeurs van voorwerpen die een SVHC bevatten in een concentratie > 0,1% (w/w) moeten deze melden aan de SCIP-database. Dit geldt voor:")
add_bullet("De stof als zodanig in het voorwerp.")
add_bullet("De stof in een complex voorwerp (product).")

add_heading("12.3 SCIP-notificatieproces", 2)
add_numbered("Identificeer SVHC's in uw producten (check de Kandidaatlijst op echa.europa.eu).")
add_numbered("Bepaal de concentratie van elke SVHC in het voorwerp.")
add_numbered("Verzamel de benodigde gegevens: stofidentificatie, CAS-nummer, concentratie, locatie in het voorwerp.")
add_numbered("Dien de notificatie in via SCIP-database (scip.echa.europa.eu).")
add_numbered("Houd de notificatie bijgewerkt bij wijzigingen in product of SVHC-lijst.")

add_heading("12.4 Verband met afvalstoffenrichtlijn", 2)
add_para("SCIP is de digitale uitvoering van artikel 9(1)(i) van de Afvalstoffenrichtlijn, dat eist dat lidstaten zorgen voor het vaststellen van registers van SVHC's in afval. De database helpt afvalverwerkers om geïnformeerde beslissingen te nemen over de verwerking van afval.")

add_page_break()

# ============================================================
# HOOFDSTUK 13: UK REACH
# ============================================================
add_heading("13. UK REACH", 1)

add_heading("13.1 Post-Brexit verschillen", 2)
add_para("Na de Brexit (31 januari 2020) en de overgangsperiode (31 december 2020) heeft het Verenigd Koninkrijk een eigen REACH-systeem opgezet: UK REACH. Belangrijkste verschillen met EU REACH:")

add_table(
    ["Aspect", "EU REACH", "UK REACH"],
    [
        ["Bevoegde instantie", "ECHA (Helsinki)", "HSE (Health and Safety Executive)"],
        ["IT-systeem", "REACH-IT", "UK REACH IT (submit.ukreacht.com)"],
        ["Database", "ECHA-databases", "UK REACH substance database"],
        ["Registratie", "EU-registratie geldt in EU/EER", "UK-registratie nodig voor UK-markt"],
        ["CLP", "EU CLP (EG 1272/2008)", "UK CLP (gewijzigde versie)"],
        ["Kandidaatlijst", "EU Kandidaatlijst (240+ stoffen)", "UK Kandidaatlijst (begint met overname EU-lijst)"],
    ]
)

add_heading("13.2 Transitional arrangements", 2)
add_para("Bedrijven die reeds een EU REACH-registratie hadden, konden een \"grandfathered\" UK REACH-registratie aanvragen via de 'Submit a dossier' functie. Deadlines:")
add_bullet("≥ 1.000 ton/jaar of CMR/cat. 1-2 ≥ 1 ton/jaar: uiterlijk 27 oktober 2023.")
add_bullet("≥ 100 ton/jaar: uiterlijk 27 oktober 2025.")
add_bullet("≥ 1 ton/jaar: uiterlijk 27 oktober 2027.")

add_heading("13.3 Only Representative (OR) verplichtingen", 2)
add_para("Niet-UK-fabrikanten die stoffen op de UK-markt brengen ≥ 1 ton/jaar moeten een Only Representative aanstellen die in het VK is gevestigd. De OR treedt op als de registrant voor UK REACH-doeleinden. Dit is vergelijkbaar met het EU REACH OR-systeem, maar separaat.")

add_page_break()

# ============================================================
# HOOFDSTUK 14: PHOENIX METALS CASE STUDY
# ============================================================
add_heading("14. Phoenix Metals Case Study", 1)

add_heading("14.1 Bedrijfsprofiel", 2)
add_para("Phoenix Metals IJmuiden is een innovatief bedrijf dat vanadium-elektrolyten produceert uit staalslakken, bestemd voor gebruik in vanadium redox flow batterijen (VRFB) voor grootschalige energieopslag. Het productieproces omvat de extractie en zuivering van vanadium uit secundaire grondstoffen.")

add_heading("14.2 Pilot plant situatie", 2)
add_para("De huidige pilot plant in IJmuiden verwerkt staalslakken en produceert vanadium-elektrolyten. Belangrijke kenmerken:")
add_bullet("Productievolume: < 1 ton vanadiumverbindingen per jaar (pilot fase).")
add_bullet("Gebruikte chemicaliën: 6 stoffen geregistreerd in het interne chemicaliënregister.")
add_bullet("Alle chemicaliën zijn aangeleverd door geregistreerde leveranciers (Carl Roth).")
add_bullet("Huidige REACH-status: geen directe registratieplicht (< 1 ton/jaar), maar downstream-verplichtingen gelden.")

add_heading("14.3 Huidige REACH-status", 2)
add_para("In de huidige pilot situatie gelden de volgende REACH-verplichtingen voor Phoenix Metals als downstream gebruiker:")
add_bullet("Veiligheidsinformatiebladen (SDS) ontvangen en beschikbaar houden voor alle gevaarlijke stoffen.")
add_bullet("De informatie in de SDS opvolgen (sectie 8: blootstellingsbeheersing, PBM).")
add_bullet("Als het gebruik van de stof niet overeenkomt met de blootstellingsscenario's in de eSDS: de leverancier informeren en een eigen chemische veiligheidsbeoordeling uitvoeren (als downstream gebruiker ≥ 10 ton/jaar).")
add_bullet("WIK-carten (Werkplek Instructie Kaarten) en PBM-matrix opstellen en implementeren (conform Arbowet en RI&E).")
add_bullet("Artikel 33-informatie ontvangen en verwerken voor SVHC's in aangeleverde materialen.")

add_heading("14.4 Stappenplan naar compliance", 2)
add_para("Op basis van de interne projectaanpak (REACH registratie document, Phoenix Metals) is het volgende stappenplan opgesteld:")

add_table(
    ["Fase", "Periode", "Activiteiten", "Mijlpaal"],
    [
        ["1", "Maand 1-2", "Stoffeninventarisatie, volumebepaling, consortiumonderzoek", "Inventarisatie compleet"],
        ["2", "Maand 3-6", "Data-verzameling, SIEF-deelname, LoA verkrijgen", "Dataset compleet"],
        ["3", "Maand 7-10", "Chemical Safety Report, blootstellingsscenario's, risicobeoordeling", "CSR gereed"],
        ["4", "Maand 11-12", "Dossiervoorbereiding, IUCLID, indiening ECHA", "Dossier ingediend"],
        ["5", "Maand 13-15", "SDS-update, training, implementatie, monitoring", "Volledig compliant"],
    ]
)

add_heading("14.5 Budgetindicatie", 2)
add_table(
    ["Post", "Bereik"],
    [
        ["Externe toxicoloog/consultant", "€50.000 — €80.000"],
        ["Consortiumlidmaatschap", "€15.000 — €40.000"],
        ["ECHA-registratiebijdrage", "€10.000 — €30.000"],
        ["Aanvullende testen (indien nodig)", "€20.000 — €100.000"],
        ["Interne kosten (HSE, management)", "€25.000 — €40.000"],
        ["Totaal", "€120.000 — €290.000"],
    ]
)

add_page_break()

# ============================================================
# HOOFDSTUK 15: TONNAGE SCENARIO'S
# ============================================================
add_heading("15. Tonnage Scenario's Phoenix Metals", 1)

add_heading("15.1 Scenario 1: Pilot (< 1 ton/jaar)", 2)
add_para("Dit is de huidige situatie. De jaarlijkse productie van vanadiumverbindingen blijft onder de 1-ton drempel.")

add_table(
    ["Aspect", "Details"],
    [
        ["Registratieplicht", "Geen directe registratieplicht (drempel ≥ 1 ton/jaar niet bereikt)"],
        ["Verplichtingen", "Downstream-gebruikersverplichtingen: SDS opvolgen, PBM, RI&E, WIK-kaarten"],
        ["Kosten", "Minimaal: interne HSE-kosten (RI&E, training, PBM)"],
        ["Risico's", "Laag — zolang volumes onder drempel blijven"],
        ["Aanbeveling", "Begin met voorbereiding: stoffeninventarisatie, contact met consortium, data-verzameling"],
    ]
)

add_heading("15.2 Scenario 2: Demonstrator (1 — 10 ton/jaar)", 2)
add_para("Bij opschaling naar demonstratieniveau overschrijdt Phoenix Metals de registratiedrempel.")

add_table(
    ["Aspect", "Details"],
    [
        ["Registratieplicht", "JA — alle vanadiumverbindingen ≥ 1 ton/jaar moeten worden geregistreerd"],
        ["Informatie-eisen", "Bijlage VII + aanvullend; geen CSR verplicht, wel richtlijnen voor veilig gebruik"],
        ["Kostenindicatie", "€25.000 — €80.000 per stof (afhankelijk van bestaande data)"],
        ["Stappen", "Consortium sluiten, LoA verkrijgen, dossier opstellen in IUCLID, indienen via REACH-IT"],
        ["Risico's", "Gemiddeld — tijdig beginnen is cruciaal (plan 6-12 maanden voor productiestart)"],
        ["Aanbeveling", "Start het REACH-registratieproject minimaal 12 maanden voor verwachte drempeloverschrijding"],
    ]
)

add_heading("15.3 Scenario 3: Commercieel (> 10 ton/jaar)", 2)
add_para("Bij commerciële productie gelden de zwaarste REACH-verplichtingen.")

add_table(
    ["Aspect", "Details"],
    [
        ["Registratieplicht", "JA — met volledige CSA en CSR"],
        ["Informatie-eisen", "Bijlage VII + VIII + IX (+ X bij ≥ 100 ton); CSR met blootstellingsscenario's verplicht"],
        ["Kostenindicatie", "€80.000 — €250.000+ per stof"],
        ["Stappen", "Volledig traject inclusief toxicologische studies, risicobeoordeling, eSDS"],
        ["Risico's", "Hoog — complex dossier, mogelijk aanvullende tests nodig, lange doorlooptijd"],
        ["Aanbeveling", "Consortium is essentieel; overweeg OR voor niet-EU-leveranciers; externe expertise inschakelen"],
    ]
)

add_page_break()

# ============================================================
# HOOFDSTUK 16: CHEMICALIËNREGISTER PHOENIX METALS
# ============================================================
add_heading("16. Chemicaliënregister Phoenix Metals", 1)

add_para("Het volgende overzicht is gebaseerd op het interne chemicaliënregister (Registration Chemicals — MASTER, versie 2.1.0, gedateerd 29 november 2024). Alle zes stoffen zijn aangeleverd door Carl Roth en zijn voorzien van een veiligheidsinformatieblad (MSDS).")

add_table(
    ["#", "Chemische stof", "CAS-nummer", "ADR", "Pkg Grp", "Volume", "Eenheid", "SVHC", "REACH-status (per scenario)"],
    [
        ["1", "Sodium hydroxide, 50%", "1310-73-2", "8", "II", "100 l", "Nee", "Geregistreerd (leverancier)"],
        ["2", "Sulfuric acid, 75%", "7664-93-9", "8", "II", "30 l", "Nee", "Geregistreerd (leverancier)"],
        ["3", "Sulfuric acid, 50%", "7664-93-9", "8", "II", "70 l", "Nee", "Geregistreerd (leverancier)"],
        ["4", "Sulfuric acid, 25%", "7664-93-9", "8", "II", "100 l", "Nee", "Geregistreerd (leverancier)"],
        ["5", "Aluminum sulfate octadecahydrate", "7784-31-8", "N/A", "N/A", "5 kg", "Nee", "Geregistreerd (leverancier)"],
        ["6", "Calcium oxide", "1305-78-8", "N/A", "N/A", "10 kg", "Nee", "Geregistreerd (leverancier)"],
    ]
)

add_heading("16.1 Opmerkingen bij het register", 2)
add_bullet("Alle stoffen zijn aangeleverd door Carl Roth, een gevestigde leverancier van laboratoriumchemicaliën met EU REACH-registraties.")
add_bullet("Geen van de zes stoffen staat op de SVHC-kandidaatlijst (status november 2024).")
add_bullet("Sulfuric acid komt in drie concentraties voor (25%, 50%, 75%) — alle met hetzelfde CAS-nummer maar verschillende gevaarsclassificaties.")
add_bullet("Sodium hydroxide 50% en sulfuric acid zijn ADR-klasse 8 (corrosief), packing group II.")
add_bullet("Totaal volume op locatie: 305 liter vloeistof + 15 kg vaste stoffen (peildatum 29-11-2024).")
add_bullet("Voor de toekomstige vanadium-elektrolyten productie geldt een aparte REACH-registratieplicht — deze stoffen zijn nog niet opgenomen in het huidige register.")

add_heading("16.2 REACH-status per scenario", 2)
add_table(
    ["Scenario", "Phoenix Metals rol", "Verplichting"],
    [
        ["Pilot (< 1 t/j)", "Downstream gebruiker", "SDS opvolgen, RI&E, PBM, WIK-kaarten"],
        ["Demonstrator (1-10 t/j)", "Registrant (vanadiumverbindingen)", "REACH-registratie + downstream voor hulpstoffen"],
        ["Commercieel (> 10 t/j)", "Registrant met CSA/CSR", "Volledige REACH-registratie + eSDS"],
    ]
)

add_page_break()

# ============================================================
# HOOFDSTUK 17: ACTUELE ONTWIKKELINGEN 2025
# ============================================================
add_heading("17. Actuele Ontwikkelingen 2025", 1)

add_heading("17.1 PCN (Poison Centre Notification) updates", 2)
add_para("De meldingsplicht aan Vergiftigingsinformatiecentra (PCN) is inmiddels volledig in werking. Sinds 1 januari 2024 geldt de plicht voor alle gevaarlijke mengsels voor professioneel gebruik. Belangrijke ontwikkelingen in 2025:")
add_bullet("Verduidelijking van de UFI-verplichting: elke notificatie moet een unieke formuleherkenning bevatten.")
add_bullet("Verbeterde interoperabiliteit tussen nationale PCN-systemen en de ECHA-database.")
add_bullet("Handhaving door lidstaten neemt toe; boetes kunnen worden opgelegd bij niet-naleving.")

add_heading("17.2 CLP — Nieuwe gevaarsklassen", 2)
add_para("De 15e aanpassing aan de technische vooruitgang (ATP 15) van CLP introduceert nieuwe gevaarsklassen en wijzigt bestaande criteria:")
add_bullet("Endocriene stoornissen voor de mens: nieuwe gevaarsklasse met categorieën 1 en 2.")
add_bullet("Endocriene stoornissen voor het milieu: nieuwe gevaarsklasse met categorieën 1 en 2.")
add_bullet("Persistent, bioaccumulatief en toxisch (PBT) en zeer persistent en zeer bioaccumulatief (vPvB): nieuwe gevaarsklassen met categorie 1.")
add_bullet("Overige wijzigingen: aanpassing criteria voor CMR en sensibilisatie.")
add_bullet("Toepassingsdatum: ATP 15 is in werking getreden; bedrijven moeten hun classificaties evalueren tegen de nieuwe criteria.")

add_heading("17.3 REACH updates", 2)
add_bullet("Kandidaatlijst uitgebreid: medio 2025 staan meer dan 240 stoffen op de lijst, met regelmatige toevoegingen (PFAS, bisfenolen, andere endocriene verstoorders).")
add_bullet("Restrictie PFAS: het universele restrictievoorstel voor PFAS is in behandeling. Als aangenomen, heeft dit grote gevolgen voor bedrijven die PFAS bevattende materialen gebruiken.")
add_bullet("Verhoogde handhaving: ECHA's Forum for Exchange of Information on Enforcement coördineert grensoverschrijdende handhavingsprojecten (REF-projects). In 2025 is de focus op SDS-kwaliteit, CLP-naleving en nanomaterialen.")
add_bullet("Registratiebijdragen: de ECHA-registratiebijdragen zijn herzien; bedragen zijn gestegen voor hogere tonnagebands.")

add_heading("17.4 ECHA enforcement projecten", 2)
add_bullet("REF-15: Controle op naleving van de SCIP-notificatieplicht.")
add_bullet("REF-16: Kwaliteit van veiligheidsinformatiebladen (focus op sectie 3 en nanomaterialen).")
add_bullet("REF-17: Naleving van CLP-etikettering (inclusief UFI).")
add_bullet("Nationaal toezicht (Nederlandse ILT): verhoogde inspecties op chemische stoffen op de werkplek.")

add_page_break()

# ============================================================
# HOOFDSTUK 18: BRONNENLIJST
# ============================================================
add_heading("18. Bronnenlijst", 1)

add_heading("18.1 Tier 1 — ECHA Gidsen", 2)

add_table(
    ["#", "Bron", "Type", "Versie", "Datering"],
    [
        ["1", "Richtsnoer voor registratie", "PDF", "v4.0", "Aug 2021"],
        ["2", "Richtsnoer stoffenidentificatie REACH/CLP", "PDF", "v3.0", "Dec 2023"],
        ["3", "Richtsnoer veiligheidsinformatiebladen", "PDF", "—", "Dec 2023"],
        ["4", "Guidance Annex XV SVHC dossier", "PDF", "v2.1", "Okt 2018"],
        ["5", "Guide chemical safety for SME", "PDF", "—", "2019"],
        ["6", "Guidance on data sharing", "PDF", "v4.1", "Dec 2023"],
        ["7", "DU practical guide (use & exposure)", "PDF", "—", "2019"],
        ["8", "PG report QSARs", "PDF", "—", "2019"],
        ["9", "PG SIP preparation", "PDF", "—", "Apr 2018"],
        ["10", "How to apply for authorisation", "PDF", "—", "Feb 2021"],
        ["11", "How to submit CLH dossier", "PDF", "—", "Jun 2022"],
        ["12", "Guidance on CLP labelling & packaging", "PDF", "v4.2", "Mrt 2021"],
        ["13", "PG qualitative human health assessment", "PDF", "—", "2019"],
        ["14", "REACH basisuitleg (intern)", "DOCX", "—", "—"],
        ["15", "Basisgids Chemische Veiligheid CLP (intern)", "DOCX", "—", "—"],
    ]
)

add_heading("18.2 Tier 2 — Phoenix Metals", 2)
add_table(
    ["#", "Bron", "Type", "Datering"],
    [
        ["1", "REACH registratie [phoenix metals).docx", "DOCX", "2024"],
        ["2", "Registration Chemicals — MASTER v2.1.0", "XLSX", "29 nov 2024"],
    ]
)

add_heading("18.3 Tier 3 — Training & Webinars", 2)
add_table(
    ["#", "Bron", "Type", "Datering"],
    [
        ["1", "Chemical management GPSA 2022NL", "PPTX", "Juni 2022"],
        ["2", "Exposure to hazardous chemicals Phoenix Metals 2025", "PPTX", "Jan 2025"],
        ["3", "CIRS Webinar: EU/UK chemical compliance (PCN, CLP, REACH updates)", "Webinar", "2025"],
    ]
)

add_heading("18.4 Referenties en nuttige links", 2)
add_table(
    ["Bron", "URL"],
    [
        ["ECHA — REACH verordening", "echa.europa.eu/regulations/reach"],
        ["ECHA — Kandidaatlijst SVHC", "echa.europa.eu/candidate-list-table"],
        ["ECHA — SCIP database", "echa.europa.eu/scip"],
        ["ECHA — REACH-IT", "reach-it.echa.europa.eu"],
        ["IUCLID download", "echa.europa.eu/iuclid"],
        ["Nederlandse REACH Helpdesk", "chemischestoffengoedgeregeld.nl"],
        ["Vanadium REACH Consortium", "vanadiumconsortium.com"],
        ["UK REACH", "submit.ukreacht.com"],
        ["CLP-verordening (EG 1272/2008)", "eur-lex.europa.eu"],
    ]
)

add_para("", style='Normal')
add_para(f"Dit kennisdossier is samengesteld in april 2026 door HQ_04 Technical Writer via Kas, in opdracht van JvG Consultancy.", italic=True)
add_para("Alle bronnen zijn geraadpleegd in april 2026. Raadpleeg altijd de meest recente versies op echa.europa.eu.", italic=True)

# ============================================================
# SAVE
# ============================================================
doc.save(OUTPUT_PATH)
print(f"Document saved to: {OUTPUT_PATH}")
