#!/usr/bin/env python3
"""Generate REACH Compliance Toets Phoenix Metals v1.0 DOCX."""

from docx import Document
from docx.shared import Pt, Inches, Cm, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT
from docx.oxml.ns import qn
from docx.oxml import OxmlElement

doc = Document()

# ── Styles ──
style = doc.styles['Normal']
font = style.font
font.name = 'Calibri'
font.size = Pt(11)
style.paragraph_format.space_after = Pt(6)
style.paragraph_format.space_before = Pt(0)

DARK_BLUE = RGBColor(0, 51, 102)
ORANGE = RGBColor(0xFF, 0x66, 0x00)
WHITE = RGBColor(255, 255, 255)

for level in range(1, 4):
    hs = doc.styles[f'Heading {level}']
    hs.font.color.rgb = DARK_BLUE
    hs.font.name = 'Calibri'

def set_cell_shading(cell, color):
    shading = OxmlElement('w:shd')
    shading.set(qn('w:fill'), color)
    shading.set(qn('w:val'), 'clear')
    cell._tc.get_or_add_tcPr().append(shading)

def add_table(doc, headers, rows, col_widths=None, header_color='003366'):
    table = doc.add_table(rows=1 + len(rows), cols=len(headers))
    table.style = 'Table Grid'
    table.alignment = WD_TABLE_ALIGNMENT.CENTER
    for i, h in enumerate(headers):
        cell = table.rows[0].cells[i]
        cell.text = h
        for p in cell.paragraphs:
            p.alignment = WD_ALIGN_PARAGRAPH.CENTER
            for r in p.runs:
                r.bold = True
                r.font.size = Pt(9)
                r.font.color.rgb = WHITE
        set_cell_shading(cell, header_color)
    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(9)
            if ri % 2 == 1:
                set_cell_shading(cell, 'E8EEF4')
    return table

def add_risk_table(doc, rows):
    """Risk matrix table with color coding per row."""
    table = doc.add_table(rows=1 + len(rows), cols=5)
    table.style = 'Table Grid'
    table.alignment = WD_TABLE_ALIGNMENT.CENTER
    headers = ['Bevinding', 'Kans', 'Impact', 'Risiconiveau', 'Toelichting']
    for i, h in enumerate(headers):
        cell = table.rows[0].cells[i]
        cell.text = h
        for p in cell.paragraphs:
            p.alignment = WD_ALIGN_PARAGRAPH.CENTER
            for r in p.runs:
                r.bold = True
                r.font.size = Pt(9)
                r.font.color.rgb = WHITE
        set_cell_shading(cell, '003366')
    color_map = {'Hoog': 'FF4444', 'Middel': 'FFAA00', 'Laag': '44AA44'}
    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(9)
            # Color the risk level column
            if ci == 3 and val in color_map:
                set_cell_shading(cell, color_map[val])
    return table

# ══════════════════════════════════════════════
# TITELPAGINA
# ══════════════════════════════════════════════
for _ in range(4):
    doc.add_paragraph()

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = p.add_run('REACH Compliance Toetsing')
r.bold = True
r.font.size = Pt(28)
r.font.color.rgb = DARK_BLUE

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = p.add_run('Phoenix Metals B.V.')
r.font.size = Pt(22)
r.font.color.rgb = DARK_BLUE

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = p.add_run('Vanadiumextractie uit SARU-ash en staalslakken')
r.font.size = Pt(14)
r.font.color.rgb = RGBColor(100, 100, 100)

doc.add_paragraph()

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = p.add_run('Documentcode: PM-REACH-TOETS-001 | Versie 1.0')
r.font.size = Pt(11)
r.font.color.rgb = DARK_BLUE

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = p.add_run('Datum: 26 april 2026')
r.font.size = Pt(11)

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = p.add_run('Classificatie: Vertrouwelijk')
r.font.size = Pt(11)
r.font.color.rgb = ORANGE

doc.add_paragraph()
doc.add_paragraph()

add_table(doc,
    ['Rol', 'Naam', 'Datum', 'Handtekening'],
    [
        ['Opsteller', 'J. van Gemert, HSEQ Specialist', '26-04-2026', ''],
        ['Reviewer', '', '', ''],
        ['Goedkeuring (Directie)', '', '', ''],
    ]
)

doc.add_page_break()

# ══════════════════════════════════════════════
# INHOUDSOPGAVE
# ══════════════════════════════════════════════
doc.add_heading('Inhoudsopgave', level=1)
toc = [
    '1. Inleiding',
    '2. Organisatieprofiel',
    '3. Stoffeninventarisatie',
    '4. REACH-Rollenbepaling',
    '5. Compliance Beoordeling',
    '  5.1 Registratie',
    '  5.2 SDS & Informatieketen',
    '  5.3 SVHC',
    '  5.4 Autorisatie',
    '  5.5 Restricties',
    '  5.6 CLP',
    '  5.7 End-of-Waste',
    '6. Bevindingen',
    '7. Risicobeelding',
    '8. Actieplan',
    '9. Conclusie',
    '10. Bijlagen',
]
for item in toc:
    p = doc.add_paragraph(item)
    p.paragraph_format.space_after = Pt(2)

doc.add_page_break()

# ══════════════════════════════════════════════
# 1. INLEIDING
# ══════════════════════════════════════════════
doc.add_heading('1. Inleiding', level=1)

doc.add_heading('1.1 Doel', level=2)
doc.add_paragraph(
    'Dit document bevat een formele compliance-toetsing van Phoenix Metals B.V. tegen de eisen van '
    'Verordening (EG) nr. 1907/2006 (REACH) en Verordening (EG) nr. 1272/2008 (CLP). '
    'Het doel is het systematisch in kaart brengen van REACH-verplichtingen, het identificeren van '
    'compliance-gaten en het formuleren van een actieplan voor naleving.'
)

doc.add_heading('1.2 Scope', level=2)
doc.add_paragraph(
    'De toetsing bestrijkt alle chemische stoffen die Phoenix Metals B.V. invoert, verwerkt en produceert '
    'in het kader van het hydrometallurgisch vanadium-extractieproces uit SARU-ash en staalslakken. '
    'De scope omvat de demonstratiefase (huidig), de monitoring-pilot (Q3 2026 – Q4 2027) en de '
    'vooruitzicht op commerciële opschaling (FOAK).'
)

doc.add_heading('1.3 Beoordelingskader', level=2)
doc.add_paragraph('Verordening (EG) nr. 1907/2006 (REACH) — Titels II t/m VIII', style='List Bullet')
doc.add_paragraph('Verordening (EG) nr. 1272/2008 (CLP)', style='List Bullet')
doc.add_paragraph('Kaderrichtlijn Afval 2008/98/EG (EoW)', style='List Bullet')
doc.add_paragraph('Richtsnoeren ECHA: registratie, SDS, CLP, SVHC, stofidentificatie', style='List Bullet')
doc.add_paragraph('Arbowet / Arbobesluit Titel 3', style='List Bullet')
doc.add_paragraph('PGS 15 — Opslag van gevaarlijke stoffen', style='List Bullet')

doc.add_heading('1.4 Methodologie', level=2)
doc.add_paragraph(
    'De toetsing is uitgevoerd via een systematische inventarisatie van alle stoffen, gevolgd door '
    'een rollenbepaling (Art. 3), een domein-specifieke compliance-beoordeling (registratie, SDS, SVHC, '
    'autorisatie, restricties, CLP, EoW) en een risicoclassificatie per bevinding. De resultaten zijn '
    'verwerkt in een risicomatrix en een geprioriteerd actieplan.'
)

# ══════════════════════════════════════════════
# 2. ORGANISATIEPROFIEL
# ══════════════════════════════════════════════
doc.add_heading('2. Organisatieprofiel', level=1)

doc.add_heading('2.1 Bedrijfsgegevens', level=2)
add_table(doc,
    ['Kenmerk', 'Gegeven'],
    [
        ['Bedrijfsnaam', 'Phoenix Metals B.V.'],
        ['Locatie', 'PlantOne Rotterdam (demo- en pilotfaciliteit)'],
        ['Activiteit', 'Hydrometallurgische vanadiumextractie uit SARU-ash en staalslakken'],
        ['Proces', 'Logextractie → zuivering → neerslag → V₂O₅ / vanadium-elektrolyt'],
        ['Grondstoffen', 'SARU-ash (vanadiumhoudende reststroom), staalslakken'],
        ['Hulpstoffen', 'H₂SO₄ (25-75%), NaOH (50%), Al₂(SO₄)₃, CaO, Mg(OH)₂, Ca(OH)₂'],
        ['Producten', 'V₂O₅, vanadium-elektrolyt (UVCB), NaVO₃, Na₃VO₄, Fe₂O₃, CaSO₄'],
        ['Huidige fase', 'Demonstratiefase (≤60 kg SARU-ash per batch)'],
        ['HSEQ-functionaris', 'J. van Gemert'],
    ]
)

doc.add_heading('2.2 Procesbeschrijving', level=2)
doc.add_paragraph(
    'Phoenix Metals B.V. ontwikkelt een hydrometallurgisch proces voor de extractie van vanadium uit '
    'secundaire grondstoffen (SARU-ash en staalslakken). Het proces omvat de volgende hoofdstappen:'
)
steps = [
    'Logextractie: SARU-ash wordt opgelost in zwavelzuur onder gecontroleerde condities.',
    'Zuivering: Onzuiverheden worden verwijderd via pH-adjustement (NaOH, CaO) en flocculatie (Al₂(SO₄)₃).',
    'Neerslag en isolatie: Vanadium wordt geïsoleerd als V₂O₅ of verwerkt tot vanadium-elektrolyt.',
    'Bijproducten: Fe₂O₃ (ijzeroxide) en CaSO₄ (gips) worden als restproducten afgevoerd of hergebruikt.',
]
for s in steps:
    doc.add_paragraph(s, style='List Number')

doc.add_heading('2.3 Fasering en volumes', level=2)
add_table(doc,
    ['Fase', 'Periode', 'Volume', 'REACH-regime'],
    [
        ['Demo', 'Huidig', '≤60 kg/batch (<<1 ton/jaar)', 'PPORD / SR&D'],
        ['Pilot', 'Q3 2026 – Q4 2027', '0,5–3 ton/jaar', 'PPORD + monitoring'],
        ['FOAK', '>Q1 2028 (indicatief)', '>1 ton/jaar', 'Volledige registratie'],
    ]
)

# ══════════════════════════════════════════════
# 3. STOFFENINVENTARISATIE
# ══════════════════════════════════════════════
doc.add_heading('3. Stoffeninventarisatie', level=1)

doc.add_heading('3.1 Grondstoffen en hulpstoffen (invoer)', level=2)
add_table(doc,
    ['Stof', 'CAS-nummer', 'Volume', 'CLP-classificatie', 'REACH-status'],
    [
        ['Zwavelzuur (25-75%)', '7664-93-9', '<5 ton/jaar', 'Skin Corr. 1A (H314)', 'Geregistreerd'],
        ['Natriumhydroxide (50%)', '1310-73-2', '<10 ton/jaar', 'Skin Corr. 1A (H314)', 'Geregistreerd'],
        ['Aluminiumsulfaat', '10043-01-3', '<2 ton/jaar', 'Geen gevarenklasse', 'Geregistreerd'],
        ['Calciumoxide', '1305-78-8', '<1 ton/jaar', 'Skin Corr. 1B, Eye Dam. 1 (H314, H318)', 'Geregistreerd'],
        ['Magnesiumhydroxide', '1309-42-8', '<1 ton/jaar', 'Geen gevarenklasse', 'Geregistreerd'],
        ['Calciumhydroxide', '1305-62-0', '<1 ton/jaar', 'Skin Irrit. 2, Eye Dam. 1 (H315, H318)', 'Geregistreerd'],
    ]
)

doc.add_paragraph()

doc.add_heading('3.2 Eigen producten (uitvoer)', level=2)
add_table(doc,
    ['Stof', 'CAS-nummer', 'Volume', 'CLP-classificatie', 'REACH-regime'],
    [
        ['Vanadium(V)oxide (V₂O₅)', '1314-62-1', '<0,5 ton/jaar', 'Repr. 1B (H361fd), Acute Tox. 3 (H331)', 'PPORD (Art. 9)'],
        ['Vanadium-elektrolyt', 'UVCB (mengsel)', '<0,2 ton/jaar', 'Nader te bepalen', 'PPORD (Art. 9)'],
        ['Natriummetavanaadaat (NaVO₃)', '13718-26-8', 'Sporen', 'Repr. 1B (H360D), STOT SE 3 (H335)', 'CMR-regime'],
        ['Trinatriumorthowanaadaat (Na₃VO₄)', '13718-26-8*', 'Sporen', 'Nader te bepalen', 'CMR-regime'],
        ['IJzeroxide (Fe₂O₃)', '1309-37-1', '<0,5 ton/jaar', 'Geen gevarenklasse', 'SR&D (Art. 3(23))'],
        ['Gips (CaSO₄)', '7778-18-9', '<1 ton/jaar', 'Geen gevarenklasse', 'EoW-beoordeling vereist'],
    ]
)
doc.add_paragraph('* NaVO₃ en Na₃VO₄ delen CAS-nummer; afzonderlijke EG-nummers van toepassing.')

# ══════════════════════════════════════════════
# 4. REACH-ROLLENBEPALING
# ══════════════════════════════════════════════
doc.add_heading('4. REACH-Rollenbepaling', level=1)

doc.add_paragraph(
    'Voor de eigen producten (uitvoer) moet worden vastgesteld welke REACH-rol van toepassing is. '
    'Dit bepaalt de reikwijdte van de verplichtingen. Drie opties zijn geïdentificeerd:'
)

doc.add_heading('4.1 Optie A: Fabrikant (Art. 3(8))', level=2)
doc.add_paragraph(
    'Indien Phoenix Metals als fabrikant wordt beschouwd, impliceert dit dat het extractieproces '
    'een "nieuwwaarde-creatie" oplevert — de geproduceerde stoffen zijn nieuw geproduceerd en niet '
    'louter terugwonend. De waarschijnlijkheid wordt ingeschat als laag, omdat het proces primair '
    'gericht is op terugwinning van vanadium uit secundaire grondstoffen. Een volledige registratie '
    '(Art. 5-14) zou verplicht zijn zodra de tonnagedrempel van 1 ton/jaar wordt overschreden.'
)

doc.add_heading('4.2 Optie B: Recovered substances — Art. 2(7)(d)', level=2)
doc.add_paragraph(
    'De hoogst waarschijnlijke route. Indien de teruggewonnen stoffen (V₂O₅, Fe₂O₃, CaSO₄) '
    '"hetzelfde" zijn als reeds geregistreerde stoffen, geldt een vrijstelling van registratie '
    'krachtens Art. 2(7)(d) juncto Art. 57(1) Wet milieubeheer (implementatie Kaderrichtlijn Afval). '
    'Voorwaarden: (i) de stof is reeds geregistreerd in de EU, (ii) de samenstelling is identiek '
    '(sameness check), (iii) de stof valt niet onder autorisatie- of restrictievereisten die de '
    'vrijstelling uitsluiten.'
)
doc.add_paragraph(
    'Voor V₂O₅ (SVHC, Bijlage XIV) moet nader worden onderzocht of de Art. 2(7)(d)-vrijstelling '
    'van toepassing blijft in combinatie met autorisatieverplichtingen.'
)

doc.add_heading('4.3 Optie C: Downstream User', level=2)
doc.add_paragraph(
    'Indien de teruggewonnen stoffen als onderdeel van een mengsel reeds geregistreerd zijn door '
    'een leverancier upstream, fungeert Phoenix Metals als downstream user (Art. 3(13)). De '
    'waarschijnlijkheid is laag, aangezien Phoenix Metals de stoffen niet in een reeds geregistreerd '
    'mengsel betrekt maar ze uit een afvalstroom isoleert.'
)

doc.add_heading('4.4 Conclusie rollenbepaling', level=2)
add_table(doc,
    ['Optie', 'REACH-rol', 'Waarschijnlijkheid', 'Voorwaarde'],
    [
        ['A', 'Fabrikant (Art. 3(8))', 'Laag', 'Stof is "nieuwwaarde" creatie'],
        ['B', 'Recovered substances (Art. 2(7)(d))', 'Hoogst waarschijnlijk', 'Sameness check met reeds geregistreerde stof'],
        ['C', 'Downstream user (Art. 3(13))', 'Laag', 'Stof reeds in mengsel geregistreerd'],
    ]
)

doc.add_paragraph()
doc.add_paragraph(
    'Aanbeveling: Start de sameness check-procedure via het Vanadium REACH Consortium om Optie B '
    'definitief te bevestigen voordat de commerciële fase (FOAK) aanvangt.'
)

# ══════════════════════════════════════════════
# 5. COMPLIANCE BEOORDELING
# ══════════════════════════════════════════════
doc.add_heading('5. Compliance Beoordeling', level=1)

# 5.1 Registratie
doc.add_heading('5.1 Registratie (Titel II)', level=2)
doc.add_paragraph(
    'REACH Art. 5 verplicht fabrikanten en importeurs stoffen te registreren indien de hoeveelheid '
    '≥1 ton/jaar bedraagt. De huidige demonstratiefase blijft ver beneden deze drempel. De volgende '
    'fasen vereisen een genlegaliseerde aanpak:'
)
doc.add_paragraph(
    'Demonstratiefase (huidig): Volumes <<1 ton/jaar. Geen registratieplicht. Een PPORD-melding '
    '(Art. 9) wordt aanbevolen als best practice om het onderzoekskader formeel te borgen bij ECHA. '
    'De PPORD-melding biedt een vrijstelling van registratie voor maximaal 5 jaar.'
)
doc.add_paragraph(
    'Monitoring-pilot (Q3 2026 – Q4 2027): Verwachte volumes 0,5–3 ton/jaar. Bij overschrijding '
    'van 1 ton/jaar ontstaat registratieplicht (Art. 5). Aanbeveling: PPORD-melding indienen vóór '
    'start pilot om de overgang juridisch af te dekken. Tonnage strikt monitoren per kalenderjaar.'
)
doc.add_paragraph(
    'FOAK-voorbereiding (>Q1 2028): Bij commerciële productie >1 ton/jaar is volledige registratie '
    'vereist. Voorbereiding omvat: sameness check via Vanadium Consortium, LoA-aanschaf, IUCLID-dossier, '
    'CSR (bij ≥10 ton/jaar) en indiening via REACH-IT. Budgetraming: €120.000–€290.000 afhankelijk '
    'van tonnage band en consortium-kosten.'
)

# 5.2 SDS
doc.add_heading('5.2 SDS & Informatieketen (Titel IV)', level=2)
doc.add_paragraph(
    'SDS-verplichting (Art. 31): Phoenix Metals moet voor elke gevaarlijke stof een actueel '
    'veiligheidsinformatieblad (SDS) beschikbaar hebben. Voor de ingekochte grondstoffen (H₂SO₄, '
    'NaOH, CaO, Ca(OH)₂) ontvangt Phoenix Metals de SDS van de leverancier. Deze dienen te worden '
    'geverifieerd op actualiteit (max. 3 jaar oud) en opgeslagen in het SDS-register.'
)
doc.add_paragraph(
    'Eigen producten: Indien Phoenix Metals als fabrikant fungeert (Optie A) en ≥1 ton/jaar produceert, '
    'is een eigen SDS verplicht. In de demo-fase is dit niet vereist, maar een vrijwillige SDS voor '
    'V₂O₅ en vanadium-elektrolyt wordt sterk aanbevolen.'
)
doc.add_paragraph(
    'eSDS en blootstellingsscenario\'s: Verplicht bij ≥10 ton/jaar én gevaarlijke stof (Art. 14). '
    'Niet van toepassing in de huidige fase. Bij FOAK-opschaling naar ≥10 ton/jaar moeten eSDS worden '
    'opgesteld inclusief operationele omstandigheden (OC\'s) en risicobeheersmaatregelen (RMM\'s).'
)
doc.add_paragraph(
    'Art. 34 doorgeefplicht: Nieuwe informatie over gevaren of adequaat beheer van risico\'s moet '
    'worden doorgegeven aan downstream users en distributeurs. Phoenix Metals moet een procedure '
    'implementeren om deze plicht te borgen.'
)

# 5.3 SVHC
doc.add_heading('5.3 SVHC (Titel IV, Art. 57-59)', level=2)
doc.add_paragraph(
    'V₂O₅ is opgenomen op de ECHA-kandidatenlijst als Substance of Very High Concern (SVHC) '
    'wegens reprotoxiciteit categorie 1B (H361fd — "Vermoedelijk schadelijk voor de vruchtbaarheid; '
    'kan het ongeboren kind schaden"). Dit heeft de volgende consequenties:'
)
doc.add_paragraph(
    'Art. 33 klantinformatieplicht: Indien V₂O₅ in een voorwerp voorkomt in een concentratie '
    '>0,1% gewichtsfractie, moeten klanten en distributeurs hierover worden geïnformeerd. Voor '
    'losse stoffen (niet in voorwerpen) geldt de SDS-verplichting als primair communicatiemiddel.'
)
doc.add_paragraph(
    'Art. 59 monitoring: Phoenix Metals moet de ECHA-kandidatenlijst en Bijlage XIV structureel '
    'monitoren op nieuwe toevoegingen die van invloed kunnen zijn op de stoffeninventaris. '
    'Minimaal halfjaarlijkse controle aanbevolen.'
)
doc.add_paragraph(
    'NaVO₃ (natriummetavanaadaat) is eveneens geclassificeerd als Repr. 1B (H360D) en valt '
    'daarmee potentieel onder SVHC-criteria (Art. 57(c)). Status op kandidatenlijst moet worden '
    'geverifieerd.'
)

# 5.4 Autorisatie
doc.add_heading('5.4 Autorisatie (Titel VII, Art. 56-64)', level=2)
doc.add_paragraph(
    'Bijlage XIV check: V₂O₅ is opgenomen op de kandidatenlijst (stap 1 naar autorisatie). '
    'Indien V₂O₅ wordt toegevoegd aan Bijlage XIV (stap 2), geldt een sunset date waarna gebruik '
    'verboden is tenzij een autorisatie is verleend. Phoenix Metals moet:'
)
doc.add_paragraph('De Bijlage XIV-status van V₂O₅ structureel monitoren', style='List Bullet')
doc.add_paragraph('Bij opname in Bijlage XIV: de latest application date (minstens 18 maanden vóór sunset date) agenderen', style='List Bullet')
doc.add_paragraph('Indien nodig: een autorisatieaanvraag voorbereiden (adequate control of socio-economic benefits route)', style='List Bullet')
doc.add_paragraph(
    'Huidige volumes (<0,5 ton/jaar) vallen onder de PPORD-vrijstelling, maar bij commerciële '
    'opschaling kan de autorisatieverplichting activeren. Dit is een kritiek compliance-risico.'
)

# 5.5 Restricties
doc.add_heading('5.5 Restricties (Titel VIII, Art. 67-73, Bijlage XVII)', level=2)
doc.add_paragraph(
    'Bijlage XVII bevat specifieke beperkingen per stof. Een screening van de inventarisatie levert '
    'het volgende beeld op:'
)
add_table(doc,
    ['Stof', 'Bijlage XVII entry', 'Beperking', 'Status Phoenix Metals'],
    [
        ['Zwavelzuur', 'Geen specifieke restrictie', 'n.v.t.', 'Compliant'],
        ['NaOH', 'Geen specifieke restrictie', 'n.v.t.', 'Compliant'],
        ['CaO', 'Geen specifieke restrictie', 'n.v.t.', 'Compliant'],
        ['V₂O₅', 'Geen specifieke restrictie in XVII', 'n.v.t. (autorisatie via XIV)', 'Monitoring vereist'],
        ['NaVO₃', 'Geen specifieke restrictie', 'n.v.t.', 'Compliant'],
        ['Fe₂O₃', 'Geen specifieke restrictie', 'n.v.t.', 'Compliant'],
        ['CaSO₄', 'Geen specifieke restrictie', 'n.v.t.', 'Compliant'],
    ]
)
doc.add_paragraph()
doc.add_paragraph(
    'Conclusie: Er zijn geen actieve Bijlage XVII-restricties van toepassing op de stoffen in de '
    'inventarisatie. Wel moet structurele monitoring plaatsvinden bij ECHA-wijzigingen.'
)

# 5.6 CLP
doc.add_heading('5.6 CLP (EG 1272/2008)', level=2)
doc.add_paragraph(
    'Etikettering: Alle chemische stoffen en mengsels op de werkplek moeten correct etiket zijn '
    'conform CLP (Art. 17-25). Dit geldt voor ingekochte stoffen (verificatie bij ontvangst) en '
    'voor intern geproduceerde mengsels (eigen etiketteringsplicht).'
)
doc.add_paragraph(
    'PCN-melding (Art. 40): Voor gevaarlijke mengsels bestemd voor consumenten of professioneel '
    'gebruik is een PCN-melding (Poison Centres Notification) verplicht binnen 1 maand na '
    'marktintroductie. Het vanadium-elektrolyt (UVCB-mengsel) valt hieronder zodra het commercieel '
    'wordt geleverd. In de demo-fase is PCN niet verplicht.'
)
doc.add_paragraph(
    'UFI (Unique Formula Identifier): Bij PCN-melding moet een UFI worden gegenereerd via de '
    'ECHA Submission portal en op het etiket worden aangebracht. Phoenix Metals dient een UFI-register '
    'op te zetten als voorbereiding op de commerciële fase.'
)

# 5.7 EoW
doc.add_heading('5.7 End-of-Waste (EoW)', level=2)
doc.add_paragraph(
    'De SARU-ash en staalslakken kwalificeren als afvalstof in de zin van de Kaderrichtlijn Afval '
    '(2008/98/EG). Het moment waarop deze afvalstoffen hun afvalstatus verliezen (End-of-Waste, EoW) '
    'is het trigger-moment waarop REACH volledig van toepassing wordt op de resulterende producten.'
)
doc.add_paragraph(
    'EoW-criteria (Art. 6 KRA): (i) de stof is bestemd voor een specifiek gebruik, (ii) er is een '
    'markt voor, (iii) de stof voldoet aan productnormen, (iv) het gebruik heeft geen advers effecten '
    'op mens of milieu. Phoenix Metals moet voor elke uitvoerstroom (V₂O₅, Fe₂O₃, CaSO₄) een '
    'EoW-beoordeling uitvoeren.'
)
doc.add_paragraph(
    'Voor de teruggewonnen stoffen die onder Art. 2(7)(d) vallen (Optie B), geldt een vereenvoudigd '
    'regime: indien de stof reeds geregistreerd is en de sameness is aangetoond, is geen aparte '
    'registratie vereist na EoW. De EoW-beoordeling zelf blijft echter verplicht.'
)

# ══════════════════════════════════════════════
# 6. BEVINDINGEN
# ══════════════════════════════════════════════
doc.add_heading('6. Bevindingen', level=1)

add_table(doc,
    ['#', 'Domein', 'Status', 'Toelichting'],
    [
        ['1', 'Registratie', 'Deels Compliant', 'Demo-fase onder drempel; PPORD-melding ontbreekt nog'],
        ['2', 'SDS & Informatieketen', 'Deels Compliant', 'SDS ingekochte stoffen aanwezig; geen eigen SDS voor producten; Art. 34-procedure ontbreekt'],
        ['3', 'SVHC', 'Deels Compliant', 'V₂O₅ SVHC-status bekend; klantinformatieplicht nog niet geformaliseerd'],
        ['4', 'Autorisatie', 'Deels Compliant', 'Bijlage XIV-monitoring ingericht; geen formele procedure bij sunset date'],
        ['5', 'Restricties', 'Compliant', 'Geen Bijlage XVII-restricties van toepassing'],
        ['6', 'CLP', 'Deels Compliant', 'Etikettering ingekochte stoffen ok; PCN/UFI nog niet ingericht'],
        ['7', 'EoW', 'Niet Compliant', 'EoW-beoordeling voor uitvoerstromen ontbreekt'],
    ]
)

# ══════════════════════════════════════════════
# 7. RISICOBEELDING
# ══════════════════════════════════════════════
doc.add_heading('7. Risicobeelding', level=1)

doc.add_paragraph(
    'De risicobeelding is uitgevoerd op basis van een kans × impact analyse per bevinding. '
    'Kans: Hoog (binnen 6 maanden), Middel (6-18 maanden), Laag (>18 maanden). '
    'Impact: Hoog (juridische/financiële consequentie >€50.000), Middel (€10.000-50.000), '
    'Laag (<€10.000).'
)

add_risk_table(doc, [
    ['PPORD-melding ontbreekt', 'Middel', 'Middel', 'Middel', 'Bij overschrijding 1 ton/jaar zonder PPORD: onrechtmatig'],
    ['Geen eigen SDS producten', 'Laag', 'Middel', 'Middel', 'Vrijwillig in demo; verplicht bij FOAK'],
    ['Art. 34 doorgeefplicht', 'Laag', 'Middel', 'Middel', 'Procedure moet worden ingericht'],
    ['SVHC klantinformatie', 'Middel', 'Hoog', 'Hoog', 'V₂O₅ SVHC; informatieplicht bij levering'],
    ['Bijlage XIV monitoring', 'Laag', 'Hoog', 'Middel', 'Sunset date kan bedrijf continuïteit bedreigen'],
    ['PCN/UFI niet ingericht', 'Laag', 'Laag', 'Laag', 'Pas verplicht bij commerciële levering mengsels'],
    ['EoW-beoordeling ontbreekt', 'Hoog', 'Hoog', 'Hoog', 'Zonder EoW: onduidelijk REACH-regime; juridisch risico'],
])

# ══════════════════════════════════════════════
# 8. ACTIEPLAN
# ══════════════════════════════════════════════
doc.add_heading('8. Actieplan', level=1)

add_table(doc,
    ['#', 'Bevinding', 'Prioriteit', 'Actie', 'Verantwoordelijke', 'Deadline'],
    [
        ['1', 'EoW-beoordeling ontbreekt', 'Hoog', 'Voer EoW-beoordeling uit voor alle uitvoerstromen (V₂O₅, Fe₂O₃, CaSO₄)', 'HSEQ', 'Q2 2026'],
        ['2', 'SVHC klantinformatieplicht', 'Hoog', 'Implementeer Art. 33 procedure; stel SVHC-communicatiesjabloon op', 'HSEQ', 'Q2 2026'],
        ['3', 'PPORD-melding', 'Hoog', 'Dien PPORD-melding in bij ECHA voor V₂O₅ en vanadium-elektrolyt', 'HSEQ / Management', 'Q3 2026'],
        ['4', 'Sameness check', 'Hoog', 'Start sameness check via Vanadium Consortium ter bevestiging Optie B', 'HSEQ', 'Q3 2026'],
        ['5', 'SDS eigen producten', 'Middel', 'Stel vrijwillige SDS op voor V₂O₅ en vanadium-elektrolyt', 'HSEQ', 'Q3 2026'],
        ['6', 'Art. 34 procedure', 'Middel', 'Implementeer procedure voor doorgeefplicht nieuwe gevareninformatie', 'HSEQ', 'Q4 2026'],
        ['7', 'Bijlage XIV monitoring', 'Middel', 'Implementeer halfjaarlijkse ECHA-monitoring procedure (Bijlage XIV + kandidatenlijst)', 'HSEQ', 'Q4 2026'],
        ['8', 'PCN/UFI voorbereiding', 'Laag', 'Richt UFI-register in en bereid PCN-melding voor commerciële fase', 'HSEQ / Lab', 'Q1 2027'],
        ['9', 'Tonnage monitoring', 'Hoog', 'Implementeer maandelijkse tonnage-tracking per stof per kalenderjaar', 'Lab / HSEQ', 'Q3 2026'],
        ['10', 'REACH-registratie FOAK', 'Middel', 'Start voorbereiding registratiedossier (LoA, IUCLID, CSR) 12 maanden vóór FOAK', 'HSEQ / Management', 'Q4 2027'],
    ]
)

# ══════════════════════════════════════════════
# 9. CONCLUSIE
# ══════════════════════════════════════════════
doc.add_heading('9. Conclusie', level=1)

doc.add_paragraph(
    'Phoenix Metals B.V. bevindt zich in een fase waarin de REACH-verplichtingen beperkt zijn vanwege '
    'de lage productievolumes (<1 ton/jaar). Niettemin zijn er meerdere domeinen waar de compliance '
    'onvolledig is en waar tijdige actie vereist is om juridische en financiële risico\'s te mitigeren.'
)

doc.add_heading('9.1 Algemeen oordeel', level=2)
doc.add_paragraph(
    'Van de zeven beoordeelde domeinen is één volledig compliant (Restricties), vijf deels compliant '
    'en één niet compliant (EoW). Het overkoepelende compliance-niveau wordt beoordeeld als '
    '"voldoende met verbeterpunten". De kritieke puntens — EoW-beoordeling, SVHC-communicatie en '
    'PPORD-melding — vereisen actie op korte termijn (Q2-Q3 2026).'
)

doc.add_heading('9.2 Aanbevelingen', level=2)
doc.add_paragraph(
    '1. Prioriteer de EoW-beoordeling: dit is het fundament voor de gehele REACH-positie van '
    'Phoenix Metals. Zonder EoW-bepaling is onduidelijk of REACH al dan niet van toepassing is op '
    'de uitvoerstromen.'
)
doc.add_paragraph(
    '2. Bevestig Optie B (Art. 2(7)(d)) via een formele sameness check bij het Vanadium Consortium. '
    'Dit vermindert de registratielast aanzienlijk bij opschaling.'
)
doc.add_paragraph(
    '3. Dien een PPORD-melding in bij ECHA voordat de monitoring-pilot start. Dit borgt de '
    'juridische positie bij onverwachte tonnage-overschrijdingen.'
)
doc.add_paragraph(
    '4. Implementeer structurele ECHA-monitoring (halfjaarlijks) op Bijlage XIV, kandidatenlijst '
    'en Bijlage XVII om proactief te kunnen reageren op nieuwe verplichtingen.'
)
doc.add_paragraph(
    '5. Start de voorbereiding van het REACH-registratiedossier voor de FOAK-fase uiterlijk '
    'Q4 2027, gelet op de doorlooptijden bij het Vanadium Consortium en ECHA.'
)

# ══════════════════════════════════════════════
# 10. BIJLAGEN
# ══════════════════════════════════════════════
doc.add_heading('10. Bijlagen', level=1)

doc.add_heading('Bijlage A: Referenties (Artikelverwijzingen)', level=2)
refs = [
    'Verordening (EG) nr. 1907/2006 (REACH) — Art. 2(7)(d), 3(8), 3(13), 5, 9, 10, 12, 14, 31, 33, 34, 36, 40, 57, 59, 66, 67-73',
    'Verordening (EG) nr. 1272/2008 (CLP) — Art. 17-25, 40',
    'Kaderrichtlijn Afval 2008/98/EG — Art. 6 (End-of-Waste)',
    'ECHA, Richtsnoer voor registratie, v4.0 (augustus 2021)',
    'ECHA, Guidance on labelling and packaging, v4.2 (maart 2021)',
    'ECHA, Guidance on substance identification (RIP 3.10)',
    'ECHA, Guidance on SVHC identification, v2.1 (oktober 2018)',
    'ECHA, Guidance on CLH dossiers',
    'Vanadium REACH Consortium — https://vanadiumconsortium.com',
    'Arbowet / Arbobesluit — Titel 3: Gevaarlijke stoffen',
    'PGS 15 — Opslag van gevaarlijke stoffen',
]
for i, ref in enumerate(refs, 1):
    doc.add_paragraph(f'[{i}] {ref}', style='List Bullet')

doc.add_paragraph()

doc.add_heading('Bijlage B: Evaluatiematrix', level=2)
add_table(doc,
    ['Domein', 'Artikel', 'Verplichting', 'Status', 'Opmerking'],
    [
        ['Registratie', 'Art. 5, 9', 'Registratie ≥1 ton/jaar; PPORD-vrijstelling', 'Deels Compliant', 'PPORD ontbreekt'],
        ['SDS', 'Art. 31, Bijlage II', 'SDS voor gevaarlijke stoffen', 'Deels Compliant', 'Geen eigen SDS'],
        ['eSDS', 'Art. 14', 'Blootstellingsscenario\'s ≥10 ton/jaar', 'Niet van toepassing', 'Volume <1 ton'],
        ['SVHC', 'Art. 33, 57, 59', 'Klantinformatieplicht; monitoring', 'Deels Compliant', 'Procedure ontbreekt'],
        ['Autorisatie', 'Art. 56-64, Bijlage XIV', 'V₂O₅ sunset date monitoring', 'Deels Compliant', 'Monitoring ingericht, procedure ontbreekt'],
        ['Restricties', 'Art. 67-73, Bijlage XVII', 'Compliance per stof', 'Compliant', 'Geen restricties van toepassing'],
        ['CLP', 'Art. 17-25, 40', 'Etikettering, PCN, UFI', 'Deels Compliant', 'PCN/UFI nog niet ingericht'],
        ['EoW', 'KRA Art. 6', 'EoW-beoordeling uitvoerstromen', 'Niet Compliant', 'Beoordeling ontbreekt'],
        ['Doorgeefplicht', 'Art. 34', 'Nieuwe gevareninfo doorgeven', 'Deels Compliant', 'Procedure ontbreekt'],
        ['Bewaarplicht', 'Art. 36', '10 jaar na laatste levering', 'Compliant', 'SDS-register aanwezig'],
    ]
)

# ── Save ──
outpath = '/root/projects/jg/2026-reach-phoenix-metals-v2/deliverables/docx/REACH_Compliance_Toets_Phoenix_Metals_v1.0.docx'
doc.save(outpath)
print(f'✅ Opgeslagen: {outpath}')
