#!/usr/bin/env python3
"""Generate REACH Master SOP Deliverable 4 for Phoenix Metals."""

from docx import Document
from docx.shared import Pt, Cm, Inches, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.section import WD_ORIENT
from docx.enum.table import WD_TABLE_ALIGNMENT
import os

doc = Document()

# --- Style setup ---
style = doc.styles['Normal']
font = style.font
font.name = 'Calibri'
font.size = Pt(11)
style.paragraph_format.space_after = Pt(6)
style.paragraph_format.line_spacing = 1.15

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

# --- Helper functions ---
def add_heading(text, level=1):
    h = doc.add_heading(text, level=level)
    return h

def add_para(text, bold=False, italic=False):
    p = doc.add_paragraph()
    run = p.add_run(text)
    run.bold = bold
    run.italic = italic
    return p

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

def add_table_simple(headers, rows):
    table = doc.add_table(rows=1 + len(rows), cols=len(headers))
    table.style = 'Light Grid Accent 1'
    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:
            for r in p.runs:
                r.bold = True
                r.font.size = Pt(10)
    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)
    return table

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

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run('PHOENIX METALS B.V.')
run.bold = True
run.font.size = Pt(26)
run.font.color.rgb = RGBColor(0, 51, 102)

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run('Standard Operating Procedure')
run.bold = True
run.font.size = Pt(20)
run.font.color.rgb = RGBColor(0, 51, 102)

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run('REACH Compliance & Chemische Veiligheid')
run.font.size = Pt(16)
run.font.color.rgb = RGBColor(0, 80, 140)

doc.add_paragraph()

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run('Deliverable 4 — Master SOP + Toelichtend Stuk')
run.font.size = Pt(12)
run.italic = True

doc.add_paragraph()
doc.add_paragraph()

add_table_simple(
    ['Veld', 'Waarde'],
    [
        ['Documentnummer', 'SOP-REACH-001'],
        ['Versie', '1.0'],
        ['Datum', '16 april 2026'],
        ['Opsteller', 'HSEQ-afdeling Phoenix Metals B.V.'],
        ['Goedkeuring', 'Directie Phoenix Metals B.V.'],
        ['Classificatie', 'Vertrouwelijk — Intern'],
        ['Status', 'Vastgesteld'],
    ]
)

doc.add_page_break()

# ============================================================
# DEEL A: MASTER SOP
# ============================================================

add_heading('DEEL A: MASTER SOP', 1)
add_heading('Standard Operating Procedure — REACH Compliance & Chemische Veiligheid', 2)

# --- 1. Doel & Toepassingsgebied ---
add_heading('1. Doel & Toepassingsgebied', 1)

add_heading('1.1 Doel', 2)
add_para('Deze Standard Operating Procedure (SOP) definieert de verplichte procedures, verantwoordelijkheden en kwaliteitsborging voor REACH-compliance en chemische veiligheid binnen Phoenix Metals B.V. Het document fungeert als de interne wetgeving voor alle activiteiten die betrekking hebben op het vervaardigen, opslaan, transporteren en in de handel brengen van het vanadiumhalffabrikaat.')

add_para('Deze SOP waarborgt dat Phoenix Metals te allen tijde voldoet aan:')
add_bullet('REACH-verordening (EG nr. 1907/2006) — Registratie, evaluatie, autorisatie en beperking van chemische stoffen')
add_bullet('CLP-verordening (EG nr. 1272/2008) — Classificatie, etikettering en verpakking')
add_bullet('Kaderrichtlijn Afval (2008/98/EG) — Einde-afvalcriteria (End-of-Waste)')
add_bullet('Arbowetgeving — Bescherming werknemers tegen chemische risico\'s')
add_bullet('Omgevingswet / Wet milieubeheer — Vergunningsplichtige activiteiten')
add_bullet('BRZO 2015 (Seveso-III) — Risico\'s zware ongevallen, indien van toepassing')

add_heading('1.2 Toepassingsgebied', 2)
add_para('Deze SOP is van toepassing op:')
add_bullet('Alle medewerkers van Phoenix Metals B.V., inclusief uitzendkrachten en stagiairs')
add_bullet('Alle bedrijfsprocessen gerelateerd aan de terugwinning van vanadium uit staalslakken')
add_bullet('De volledige levenscyclus van het vanadiumhalffabrikaat: van grondstofacceptatie tot en met levering aan downstream users')
add_bullet('Externe partijen die namens Phoenix Metals handelen (aannemers, transporteurs, adviesbureaus)')

add_heading('1.3 Geldigheid', 2)
add_para('Deze SOP treedt in werking na goedkeuring door de directie en blijft van kracht totdat zij wordt ingetrokken of vervangen door een nieuwe versie. Jaarlijkse review is verplicht (zie §4.11).')

# --- 2. Definities ---
add_heading('2. Definities', 1)

definitions = [
    ['REACH', 'Verordening (EG) nr. 1907/2006 betreffende de registratie, evaluatie, autorisatie en beperking van chemische stoffen'],
    ['CLP', 'Verordening (EG) nr. 1272/2008 betreffende classificatie, etikettering en verpakking van stoffen en mengsels'],
    ['EoW', 'End-of-Waste — Het moment waarop een materiaal ophoudt afval te zijn en als product wordt beschouwd (art. 6 Kaderrichtlijn Afval)'],
    ['UVCB', 'Substance of Unknown or Variable composition, Complex reaction products or Biological materials — Stoffen met onbekende of variabele samenstelling'],
    ['SDS', 'Safety Data Sheet — Veiligheidsinformatieblad conform REACH Bijlage II'],
    ['VIB', 'Veiligheidsinformatieblad — Nederlandse term voor SDS'],
    ['SIP', 'Substance Identity Profile — Stofidentiteitsprofiel dat de chemische identiteit van een stof vastlegt'],
    ['CSA', 'Chemical Safety Assessment — Chemische veiligheidsbeoordeling'],
    ['CSR', 'Chemical Safety Report — Chemisch veiligheidsrapport'],
    ['CMR', 'Carcinogeen, Mutageen, Reproductietoxisch (categorieën 1A, 1B, 2)'],
    ['SVHC', 'Substance of Very High Concern — Zeer zorgwekkende stof (kandidatenlijst ECHA)'],
    ['PBT', 'Persistent, Bioaccumulative and Toxic'],
    ['vPvB', 'very Persistent, very Bioaccumulative'],
    ['OEL', 'Occupational Exposure Limit — Beroepsmatige blootstellingslimiet'],
    ['BRZO', 'Besluit risico\'s zware ongevallen 2015 — Implementatie Seveso-III richtlijn'],
    ['PGS', 'Publicatiereeks Gevaarlijke Stoffen — Nederlandse richtlijnen voor opslag en gebruik'],
    ['ADR', 'Accord européen relatif au transport international des marchandises Dangereuses par Route'],
    ['UFI', 'Unique Formula Identifier — Unieke formulieringsidentificatiecode voor PCN-melding'],
    ['PCN', 'Poison Centres Notification — Melding bij antigifcentra conform CLP Bijlage VIII'],
    ['RI&E', 'Risico-Inventarisatie & -Evaluatie'],
]

add_table_simple(['Term', 'Definitie'], definitions)

# --- 3. Verantwoordelijkheden ---
add_heading('3. Verantwoordelijkheden', 1)

responsibilities = [
    ['Directie', 'Eindverantwoordelijkheid voor REACH-compliance. Goedkeuring SOP. Beschikbaarstelling budget en middelen. Strategische besluitvorming registratie/vrijstelling.'],
    ['HSEQ-Manager', 'Dagelijkse implementatie en handhaving van deze SOP. Beheer SDS/SIP-dossiers. Coördinatie EoW-beoordeling. Contactpersoon ECHA/CTGB. Interne audits. Training.'],
    ['Productieleider', 'Uitvoering productieproces conform procedures. Rapportage afwijkingen. Beheer procesparameters voor stofidentiteit. Medewerking aan blootstellingmetingen.'],
    ['Inkoop', 'Verzameling SDS en compositiespecificaties van grondstoffen (staalslakken). Verificatie leverancierscompliance. Documentatie herkomst en samenstelling.'],
    ['Logistiek', 'Opslag conform PGS-richtlijnen. Transportclassificatie (ADR/IMDG). Etikettering conform CLP. Distributie SDS aan afnemers.'],
    ['Kwaliteitscontrole (QC)', 'Analytische karakterisering van het halffabrikaat. Validatie SIP-gegevens. Certificering zuiverheid en onzuiverhedenprofiel.'],
    ['Externe adviseurs', 'REACH-registratieondersteuning. Toxicologische beoordelingen. Juridisch advies EoW-status. Fungeren als Only Representative indien nodig.'],
]

add_table_simple(['Functie/Rol', 'Verantwoordelijkheden'], responsibilities)

# --- 4. Procedures ---
add_heading('4. Procedures', 1)

# 4.1
add_heading('4.1 Stofidentificatie & Registratiebeoordeling', 2)

add_heading('4.1.1 Doel', 3)
add_para('Vaststellen of het vanadiumhalffabrikaat onder de REACH-registratieplicht valt en, indien van toepassing, het voltooien van de registratie dan wel het aantonen van een geldige vrijstelling.')

add_heading('4.1.2 Procedure', 3)
add_para('Stap 1 — Stofidentiteitsprofilering (SIP):')
add_bullet('Verzamel analytische data: ICP-OES, XRD, XRF, SEM-EDS van elke productiebatch')
add_bullet('Stel het SIP op conform ECHA-richtsnoeren: IUPAC-naam, CAS-nummer, EG-nummer, molecuulformule, concentratiebereiken hoofdbestanddelen en onzuiverheden')
add_bullet('Classificeer de stof: mono-constituent, multi-constituent of UVCB')
add_bullet('Identificeer onzuiverheden ≥1% en onzuiverheden <1% die relevant zijn voor classificatie of PBT-beoordeling (Cr, Mn, Si, Fe, Ca, Mg)')

add_para('Stap 2 — Vergelijking met geregistreerde stoffen:')
add_bullet('Raadpleeg de ECHA-database voor geregistreerde vanadiumstoffen')
add_bullet('Vergelijk het SIP van het halffabrikaat met bestaande registraties')
add_bullet('Beoordeel of het halffabrikaat "identiek" is aan een reeds geregistreerde stof (art. 2(7)(d) REACH)')

add_para('Stap 3 — Besluitvorming:')
add_bullet('Indien identiek aan geregistreerde stof → Documenteer vrijstelling art. 2(7)(d) en bewaar bewijsstukken')
add_bullet('Indien niet identiek → Start voorbereiding volledige REACH-registratie (zie Stap 4)')
add_bullet('Documenteer de beslissing met argumentatie en ondertekening door de HSEQ-Manager')

add_para('Stap 4 — Volledige REACH-registratie (indien vereist):')
add_bullet('Bepaal de tonnageband en bijbehorende data-eisen (REACH Bijlage VII t/m X)')
add_bullet('Verzamel fysisch-chemische, toxicologische en ecotoxicologische data')
add_bullet('Raadpleeg SIEF (Substance Information Exchange Forum) voor data-sharing')
add_bullet('Stel het registratiedossier op (IUCLID-formaat) via externe REACH-adviseur')
add_bullet('Dien het dossier in bij de ECHA via REACH-IT')
add_bullet('Ontvang registratienummer en bewaar in documentbeheersysteem')

add_heading('4.1.3 Frequentie', 3)
add_para('De stofidentificatie wordt uitgevoerd bij: (a) de eerste productiecharge, (b) elke wijziging in het productieproces die de stofsamenstelling kan beïnvloeden, en (c) minimaal éénmaal per jaar ter bevestiging van de identiteit.')

# 4.2
add_heading('4.2 End-of-Waste beoordeling', 2)

add_heading('4.2.1 Doel', 3)
add_para('Documenteren dat het vanadiumhalffabrikaat voldoet aan de einde-afvalcriteria van art. 6 Kaderrichtlijn Afval (2008/98/EG), waarmee de overstap van afvalrecht naar chemischestoffenrecht wordt gemarkeerd.')

add_heading('4.2.2 Procedure', 3)
add_para('Het EoW-moment wordt vastgesteld op basis van vier cumulatieve criteria:')
add_bullet('Criterium 1: De stof is bestemd voor specifieke toepassingen (bewijs: afnemerscontracten, productsheet, marktrapportage)')
add_bullet('Criterium 2: Er bestaat een markt of vraag naar de stof (bewijs: offertes, intentieverklaringen VRFB-producenten)')
add_bullet('Criterium 3: De stof voldoet aan de technische eisen voor de beoogde toepassingen (bewijs: productspecificatie, analysecertificaten)')
add_bullet('Criterium 4: Het gebruik van de stof leidt niet tot algehele nadelige effecten op mens of milieu (bewijs: emissiedata, risicobeoordeling, vergunningseisen)')

add_para('De HSEQ-Manager stelt een EoW-dossier samen met bovenstaande bewijsstukken. Het dossier wordt goedgekeurd door de directie en jaarlijks geëvalueerd.')

add_heading('4.2.3 Documentatie', 3)
add_para('Het EoW-dossier bevat ten minste:')
add_bullet('Processtroomdiagram met massabalans')
add_bullet('Analysecertificaten van het eindproduct (minimaal 3 batches)')
add_bullet('Afnemerscontracten of intentieverklaringen')
add_bullet('Productsheets met technische specificaties')
add_bullet('Milieueffectbeoordeling (emissiedata, afvalwateranalyses)')
add_bullet('Conformiteitsverklaring ondertekend door de HSEQ-Manager en de directie')

# 4.3
add_heading('4.3 SDS/VIB beheer', 2)

add_heading('4.3.1 Opstellen', 3)
add_para('Phoenix Metals stelt een Veiligheidsinformatieblad (SDS) op voor het vanadiumhalffabrikaat conform REACH Bijlage II. Het SDS bevat de 16 verplichte secties en wordt opgesteld in het Nederlands en Engels.')

add_para('Het SDS wordt opgesteld door de HSEQ-Manager met ondersteuning van een externe toxicoloog indien vereist. De eerste versie wordt voltooid vóór de eerste levering aan een downstream user.')

add_heading('4.3.2 Actualiseren', 3)
add_para('Het SDS wordt geactualiseerd bij:')
add_bullet('Nieuwe beschikbare informatie over gevaren of risico\'s (onmiddellijk)')
add_bullet('Wijziging in de classificatie van de stof (binnen 6 maanden)')
add_bullet('Wijziging in de samenstelling van het halffabrikaat die de gevarenclassificatie beïnvloedt (binnen 6 maanden)')
add_bullet('Wijziging in de toegestane blootstellingslimiet (OEL) (binnen 6 maanden)')
add_bullet('Periodieke review: minimaal éénmaal per 3 jaar')

add_heading('4.3.3 Distributie', 3)
add_para('Het SDS wordt verstrekt:')
add_bullet('Aan elke downstream user bij de eerste levering en bij elke actualisatie (art. 31 REACH)')
add_bullet('Aan medewerkers via het documentbeheersysteem (intranet)')
add_bullet('Aan de vergunningverlener als onderdeel van het vergunningsdossier')
add_bullet('Op verzoek van handhavingsautoriteiten (binnen 24 uur)')

# 4.4
add_heading('4.4 CLP-classificatie & etikettering', 2)

add_heading('4.4.1 Classificatie', 3)
add_para('De HSEQ-Manager classificeert het vanadiumhalffabrikaat op basis van beschikbare fysisch-chemische, toxicologische en ecotoxicologische data, conform de criteria van de CLP-verordening. De classificatie omvat:')
add_bullet('Identificatie van alle relevante gevarenklassen')
add_bullet('Toewijzing van gevarencategorieën en -coderingen')
add_bullet('Selectie van de juiste H-zinnen (gevaaraanduidingen) en P-zinnen (voorzorgsmaatregelen)')
add_bullet('Bepaling van het signaalwoord (Warning / Danger)')

add_para('De classificatie wordt gedocumenteerd in het classificatierapport en bewaard als onderdeel van het REACH-dossier.')

add_heading('4.4.2 Etikettering', 3)
add_para('Elke verpakking van het vanadiumhalffabrikaat is voorzien van een CLP-conform etiket met:')
add_bullet('Productidentificator (naam, CAS-nummer, EG-nummer)')
add_bullet('Naam en adres van Phoenix Metals B.V.')
add_bullet('Gevarenpictogrammen (GHS-diamanten)')
add_bullet('Signaalwoord')
add_bullet('H-zinnen en P-zinnen')
add_bullet('Indien van toepassing: UFI-code (voor mengsels)')

add_para('De logistiekafdeling is verantwoordelijk voor de correcte aanbreng van etiketten vóór elke verzending.')

# 4.5
add_heading('4.5 Inkoop & acceptatie van grondstoffen (staalslakken)', 2)

add_heading('4.5.1 Procedure', 3)
add_para('Bij elke inkoop van staalslakken geldt de volgende procedure:')
add_bullet('De inkoopafdeling verlangt van de leverancier een compositiespecificatie inclusief vanadiumgehalte en relevante onzuiverheden (Cr, Mn, Si, Fe)')
add_bullet('De leverancier levert een bewijs van herkomst en afvalstatus (EURAL-code, afvalvervoersdocument)')
add_bullet('De QC-afdeling neemt steekproefsgewijs monsters ter verificatie van de compositiespecificatie')
add_bullet('De HSEQ-Manager beoordeelt of de staalslakken binnen de acceptatiecriteria vallen voor het productieproces')
add_bullet('Niet-conforme partijen worden geweigerd en gedocumenteerd als afwijking (zie §4.12)')

add_heading('4.5.2 Acceptatiecriteria', 3)
add_para('De acceptatiecriteria voor staalslakken worden vastgelegd in een grondstoffenspecificatie (GS-001) die ten minste bevat:')
add_bullet('Minimaal vanadiumgehalte (% V₂O₅-equivalent)')
add_bullet('Maximale gehaltenes van onzuiverheden (Cr, Mn, heavy metals)')
add_bullet('Fysische eigenschappen (korrelgrootte, vochtgehalte)')
add_bullet('Afvalstatus en vereiste documentatie')

# 4.6
add_heading('4.6 Productieprocesveiligheid', 2)

add_para('De productieleider waarborgt dat het productieproces wordt uitgevoerd conform de volgende veiligheidseisen:')

add_bullet('Blootstellingsbeheersing: Implementatie van de hiërarchie van maatregelen — bronmaatregelen > collectieve bescherming > persoonlijke beschermingsmiddelen (PBM)')
add_bullet('OEL-bewaking: Blootstelling aan vanadiumverbindingen blijft onder de OEL (vanadiumpentoxide-stof: 0,05 mg/m³ als TWA-8h, conform SER)')
add_bullet('Procesbeheersing: Continue monitoring van procesparameters (temperatuur, druk, pH, reactoromstandigheden)')
add_bullet('Stofbeheersing: Afzuiging en stofverwijdering bij alle overdrachtspunten')
add_bullet('Noodprocedures: Beschikbaarheid van nooddouches, oogdouches en blusmiddelen conform PGS-richtlijnen')
add_bullet('Werkvergunningensysteem: Vereist voor onderhoudswerkzaamheden aan installaties met vanadiumverbindingen')

# 4.7
add_heading('4.7 Opslag & transport', 2)

add_heading('4.7.1 Opslag', 3)
add_para('Opslag van het vanadiumhalffabrikaat en tussenproducten geschiedt conform:')
add_bullet('PGS 15 — Opslag van gevaarlijke stoffen (indien van toepassing op basis van classificatie)')
add_bullet('Vloeistofdichte opvang bij opslag van vloeibare producten')
add_bullet('Scheiding van incompatibele stoffen')
add_bullet('Ventilatie en brandpreventie conform de omgevingsvergunning')
add_bullet('Maximale opslaghoeveelheden conform BRZO-drempelwaarden (indien van toepassing)')

add_heading('4.7.2 Transport', 3)
add_para('Het transport van het vanadiumhalffabrikaat voldoet aan:')
add_bullet('ADR (wegvervoer), IMDG (zeevervoer) en IATA (luchtvervoer) — afhankelijk van de classificatie als gevaarlijk goed')
add_bullet('Correcte verpakking conform ADR-verpakkingsinstructies')
add_bullet('CLP-etikettering en transportdocumenten (vervoerpapier, veiligheidskaart)')
add_bullet('Vervoerder beschikt over geldig ADR-certificaat')

# 4.8
add_heading('4.8 Afvalbeheer & reststromen', 2)

add_para('Alle afvalstromen en reststoffen die vrijkomen bij het terugwinningsproces worden beheerd conform de Kaderrichtlijn Afval en de Wet milieubeheer / Omgevingswet:')
add_bullet('Identificatie en registratie van alle afvalstromen (EURAL-codes)')
add_bullet('Scheiding van gevaarlijk en niet-gevaarlijk afval')
add_bullet('Opslag van gevaarlijk afval conform PGS 15, maximaal de toegestane hoeveelheid en termijn')
add_bullet('Afvoer door erkende afvalverwerker met afvalvervoersdocument (regelgeving basis-ips.nl)')
add_bullet('Reststoffen met potentieel voor hergebruik worden onderworpen aan een EoW-beoordeling (zie §4.2)')
add_bullet('Massabalans: De productieleider registreert wekelijks de massabalans (input, product, reststromen, afval)')

# 4.9
add_heading('4.9 Documentbeheer & archivering', 2)

add_para('Alle documenten die voortvloeien uit deze SOP worden beheerd conform het documentbeheersysteem van Phoenix Metals:')
add_bullet('Centraal archief: Digitaal documentbeheersysteem (DMS) met versiebeheer')
add_bullet('Bewaartermijnen: SDS — 10 jaar na laatste levering; EoW-dossier — permanent; Registratiedossier — permanent; Auditrapporten — 10 jaar; Trainingsdocumenten — 5 jaar')
add_bullet('Toegangsbeheer: Alleen geautoriseerde medewerkers hebben toegang tot vertrouwelijke dossiers (SIP, compositiespecificaties)')
add_bullet('Versiebeheer: Elke wijziging wordt gedocumenteerd in de revisiehistorie (zie §7)')
add_bullet('Back-up: Dagelijkse back-up van het DMS op een off-site locatie')

# 4.10
add_heading('4.10 Training & competentie', 2)

add_para('Alle medewerkers die betrokken zijn bij processen onder deze SOP ontvangen passende training:')

add_table_simple(
    ['Doelgroep', 'Training', 'Frequentie'],
    [
        ['Alle medewerkers', 'Basis training chemische veiligheid (CLP, SDS-lezen, PBM-gebruik)', 'Bij indiensttreding + jaarlijks'],
        ['Productiepersoneel', 'Procesveiligheid, blootstellingsbeheersing, noodprocedures', 'Bij indiensttreding + jaarlijks'],
        ['HSEQ-Manager', 'REACH/CLP diepgaand, ECHA-registratie, SDS-opstelling', 'Jaarlijks + bij wetgevingwijzigingen'],
        ['Inkoop', 'Grondstoffenspecificaties, leverancierscompliance, afvaldocumentatie', 'Bij indiensttreding + 2-jaarlijks'],
        ['Logistiek', 'ADR-basis, CLP-etikettering, PGS 15, transportdocumentatie', 'Bij indiensttreding + 2-jaarlijks'],
        ['Directie', 'Strategisch REACH-overzicht, compliance-status, risico\'s', 'Jaarlijks'],
    ]
)

add_para('Trainingen worden gedocumenteerd in het trainingssysteem. De HSEQ-Manager bewaakt deactualiteit van alle certificeringen.')

# 4.11
add_heading('4.11 Audit & review', 2)

add_heading('4.11.1 Jaarlijkse SOP-review', 3)
add_para('De HSEQ-Manager voert jaarlijks (uiterlijk in Q1) een formele review van deze SOP uit. De review omvat:')
add_bullet('Toetsing aan actuele wet- en regelgeving')
add_bullet('Evaluatie van uitgevoerde procedures en eventuele knelpunten')
add_bullet('Verwerking van auditbevindingen en incidenten')
add_bullet('Actualisatie van definities, procedures en verantwoordelijkheden')
add_bullet('Goedkeuring van de herziene versie door de directie')

add_heading('4.11.2 Interne audits', 3)
add_para('De HSEQ-Manager voert minimaal tweemaal per jaar een interne audit uit op de naleving van deze SOP. De audit omvat:')
add_bullet('Steekproefsgewijze controle van SDS-actualiteit')
add_bullet('Verificatie van etikettering op willekeurige verzendingen')
add_bullet('Controle van grondstoffenacceptatieprocedures')
add_bullet('Beoordeling van documentbeheer en archivering')
add_bullet('Inspectie van opslagfaciliteiten (PGS-compliance)')
add_bullet('Beoordeling van blootstellingsmetingen en OEL-naleving')

add_para('Bevindingen worden gerapporteerd aan de directie met een verbeterplan en termijnstelling.')

# 4.12
add_heading('4.12 Incidenten & afwijkingen', 2)

add_para('Alle incidenten en afwijkingen die verband houden met chemische veiligheid of REACH-compliance worden gemeld, onderzocht en opgelost conform het volgende protocol:')

add_table_simple(
    ['Categorie', 'Voorbeeld', 'Meldtermijn', 'Onderzoekstermijn'],
    [
        ['Kritiek', 'Blootstelling > OEL, BRZO-incident, REACH-overtreding', 'Onmiddellijk', '24 uur'],
        ['Majeur', 'Ontbrekend SDS, verkeerde etikettering, niet-conforme grondstof geaccepteerd', 'Binnen 4 uur', '1 week'],
        ['Mineur', 'Administratieve fouten in documentatie, verlopen training', 'Binnen 24 uur', '2 weken'],
    ]
)

add_para('De HSEQ-Manager registreert elk incident/afwijking in het incidentsysteem, voert een root-cause-analyse uit, stelt corrigerende en preventieve maatregelen (CAPA) op en bewaakt de implementatie.')

# --- 5. Kwaliteitsborging ---
add_heading('5. Kwaliteitsborging', 1)

add_para('De naleving van deze SOP wordt geborgd door het volgende kwaliteitssysteem:')

add_bullet('KPI 1: SDS-actualiteit — 100% van de SDS-documenten is actueel en conform REACH Bijlage II')
add_bullet('KPI 2: Etiketteringscompliance — 100% van de verzendingen draagt een correct CLP-etiket')
add_bullet('KPI 3: OEL-naleving — Blootstellingsmetingen vallen binnen de wettelijke limieten')
add_bullet('KPI 4: Training coverage — 100% van de medewerkers heeft de vereiste trainingen gevolgd')
add_bullet('KPI 5: Documentactualiteit — EoW-dossier, SIP en classificatierapport zijn actueel')
add_bullet('KPI 6: Audittrail — Alle interne audits worden afgerond conform planning')
add_bullet('KPI 7: Incidentresponstijd — Kritieke incidenten binnen 24 uur onderzocht')

add_para('De HSEQ-Manager rapporteert kwartaalwijze over deze KPI\'s aan de directie.')

# --- 6. Gekoppelde documenten ---
add_heading('6. Gekoppelde documenten', 1)

add_table_simple(
    ['Document', 'Type', 'Referentie'],
    [
        ['Risico-Inventarisatie & -Evaluatie (RI&E)', 'Arbo', 'Jaarlijks geactualiseerd'],
        ['Veiligheidsinformatieblad (SDS) vanadiumhalffabrikaat', 'REACH', 'SOP-REACH-SDS-001'],
        ['Omgevingsvergunning', 'Vergunning', 'Gemeente/Provincie'],
        ['EoW-dossier', 'Afvalrecht', 'SOP-REACH-EOW-001'],
        ['Stofidentiteitsprofiel (SIP)', 'REACH', 'SOP-REACH-SIP-001'],
        ['Classificatierapport', 'CLP', 'SOP-REACH-CLP-001'],
        ['Grondstoffenspecificatie', 'Operationeel', 'GS-001'],
        ['BRZO-veiligheidsrapport (indien van toepassing)', 'BRZO', 'BRZO-VR-001'],
        ['Trainingsmatrix', 'HR', 'HR-TRAIN-001'],
        ['Massabalansrapportage', 'Operationeel', 'MB-RAP-001'],
    ]
)

# --- 7. Revisiehistorie ---
add_heading('7. Revisiehistorie', 1)

add_table_simple(
    ['Versie', 'Datum', 'Auteur', 'Wijzigingen'],
    [
        ['0.1', '16-04-2026', 'HSEQ-afdeling', 'Concept opgesteld'],
        ['1.0', '16-04-2026', 'Directie', 'Eerste vastgestelde versie'],
    ]
)

# --- 8. Bijlagen ---
add_heading('8. Bijlagen', 1)

add_heading('Bijlage A: Checklist Stofidentificatie (SIP)', 2)
add_table_simple(
    ['#', 'Element', 'Status'],
    [
        ['1', 'IUPAC-naam vastgesteld', '☐'],
        ['2', 'CAS-nummer toegekend', '☐'],
        ['3', 'EG-nummer vastgesteld', '☐'],
        ['4', 'Molecuulformule gedocumenteerd', '☐'],
        ['5', 'Structuurformule opgenomen', '☐'],
        ['6', 'Hoofdbestanddelen gekwantificeerd', '☐'],
        ['7', 'Onzuiverheden ≥1% gespecificeerd', '☐'],
        ['8', 'Onzuiverheden <1% (relevant voor classificatie/PBT) gespecificeerd', '☐'],
        ['9', 'Analytische data (ICP-OES, XRD, XRF) beschikbaar', '☐'],
        ['10', 'Mono/multi/UVCB-classificatie vastgesteld', '☐'],
        ['11', 'Vergelijking met ECHA-database uitgevoerd', '☐'],
        ['12', 'Besluit: vrijstelling art. 2(7)(d) OF volledige registratie', '☐'],
    ]
)

add_heading('Bijlage B: Checklist End-of-Waste', 2)
add_table_simple(
    ['#', 'Criterium', 'Bewijsstuk', 'Status'],
    [
        ['1', 'Specifieke toepassing (art. 6.1.a)', 'Afnemerscontracten / productsheet', '☐'],
        ['2', 'Markt/vraag (art. 6.1.b)', 'Offertes / intentieverklaringen', '☐'],
        ['3', 'Technische eisen (art. 6.1.c)', 'Productsheets / analysecertificaten', '☐'],
        ['4', 'Geen nadelige effecten (art. 6.1.d)', 'Emissiedata / risicobeoordeling', '☐'],
    ]
)

add_heading('Bijlage C: Template Incidenten/Afwijkingenrapport', 2)
add_table_simple(
    ['Veld', 'Invulling'],
    [
        ['Datum incident', ''],
        ['Gemeld door', ''],
        ['Categorie (Kritiek/Majeur/Mineur)', ''],
        ['Beschrijving', ''],
        ['Root cause', ''],
        ['Corrigerende maatregel', ''],
        ['Preventieve maatregel', ''],
        ['Termijn implementatie', ''],
        ['Status', ''],
        ['Afgesloten door', ''],
    ]
)

# ============================================================
# PAGE BREAK — DEEL B
# ============================================================
doc.add_page_break()

add_heading('DEEL B: TOELICHTEND STUK', 1)
add_heading('Managementnota — Rationale en implementatie Master SOP REACH Compliance & Chemische Veiligheid', 2)

add_para('Phoenix Metals B.V.', bold=True)
add_para('Vanadiumterugwinning uit Staalslakken — Strategische onderbouwing', italic=True)

# B1
add_heading('B1. Aanleiding en noodzaak', 2)

add_para('Phoenix Metals B.V. opereert in een hoogwaardige en complexe regelgevingsomgeving. De terugwinning van vanadium uit staalslakken — een afvalstroom uit de staalindustrie — raakt aan meerdere wettelijke kaders: de REACH-verordening, de CLP-verordening, de Kaderrichtlijn Afval, de Arbowetgeving en de Omgevingswet. Deze kaders overlappen, beïnvloeden elkaar en vereisen een geïntegreerde aanpak.')

add_para('Deze Master SOP is niet een bureaucratische oefening. Het is het operationele fundament waarop de licentie-to-operate van Phoenix Metals rust. Zonder een robuuste SOP loopt het bedrijf materiële risico\'s: boetes, marktuitsluiting, aansprakelijkheid en reputatieschade.')

add_heading('B2. Regulatorische context', 2)

add_heading('B2.1 REACH — Het centrale kader', 3)
add_para('REACH (Verordening (EG) nr. 1907/2006) is de hoeksteen van het Europese chemicaliënbeleid. De verordening verplicht elke fabrikant of importeur die een stof in hoeveelheden van 1 ton of meer per jaar in de EU vervaardigt of invoert, deze te registreren bij het European Chemicals Agency (ECHA). Voor Phoenix Metals is de kritieke vraag of het vanadiumhalffabrikaat kwalificeert als een "stof" in de zin van REACH en of de vrijstelling voor teruggewonnen stoffen (art. 2(7)(d)) van toepassing is.')

add_para('Deze SOP borgt dat deze vraag systematisch en documenteerbaar wordt beantwoord. Niet op basis van aannames, maar op basis van analytische data (ICP-OES, XRD, XRF), vergelijking met de ECHA-database en een gestructureerde besluitvorming.')

add_heading('B2.2 CLP — Classificatie en communicatie', 3)
add_para('De CLP-verordening (EG nr. 1272/2008) verplicht Phoenix Metals om het vanadiumhalffabrikaat te classificeren op basis van diens intrinsieke gevareneigenschappen en om dit te communiceren via etikettering en het veiligheidsinformatieblad (SDS). Vanadiumpentoxide (V₂O₅) — een mogelijke vorm van het halffabrikaat — is ingedeeld als Acute Tox. 2 (oraal), Acute Tox. 3 (inhalatie), Carc. 1B, Mut. 2, Repr. 2 en STOT RE 1. Deze classificatie heeft vergaande consequenties voor etikettering, opslag (PGS 15), transport (ADR) en BRZO-drempelwaarden (Seveso).')

add_heading('B2.3 End-of-Waste — Het kritieke keerpunt', 3)
add_para('Het EoW-moment is het moment waarop de staalslak ophoudt afval te zijn en het vanadiumhalffabrikaat als "product" in de handel wordt gebracht. Dit is het regulatoire knooppunt waarop de wetgeving omslaat van afvalrecht naar chemischestoffenrecht. Onzekerheid over dit moment is het grootste compliance-risico voor Phoenix Metals. De SOP borgt dat dit moment expliciet wordt gedocumenteerd en dat aan alle vier de criteria van art. 6 Kaderrichtlijn Afval cumulatief wordt voldaan.')

add_heading('B2.4 Arbowetgeving en Omgevingswet', 3)
add_para('Naast REACH en CLP moet Phoenix Metals voldoen aan de Arbowetgeving (blootstellingslimieten, PBM, RI&E) en de Omgevingswet (omgevingsvergunning, emissiegrenzen). Deze SOP integreert deze verplichtingen in één samenhangend kader, zodat medewerkers niet verdwalen in een labyrint van afzonderlijke wetten.')

add_heading('B3. Risico\'s bij niet-naleving', 2)

add_para('Niet-naleving van REACH en CLP leidt tot aanzienlijke risico\'s:')

add_table_simple(
    ['Risicocategorie', 'Gevolg', 'Orde van grootte'],
    [
        ['Bestuurlijke boetes REACH', 'Boetes per overtreding, escalatie bij herhaling', '€ 10.000 — € 900.000+'],
        ['Bestuurlijke boetes CLP', 'Boetes voor onjuiste etikettering/classificatie', '€ 5.000 — € 200.000+'],
        ['Marktuitsluiting', 'Product mag niet in de handel worden gebracht', 'Volledige omzetderving'],
        ['Aansprakelijkheid', 'Aansprakelijkheid voor schade bij downstream users / werknemers', 'Onbeperkt'],
        ['BRZO-handhaving', 'Stillegging installatie bij niet-naleving Seveso-eisen', 'Operationele stilstand'],
        ['Reputatieschade', 'Verlies van investeerdersvertrouwen, negatieve publiciteit', 'Incalculabel'],
        ['Strafrechtelijke vervolging', 'Bij opzettelijke of grove nalatigheid', 'Gevangenisstraf mogelijk'],
    ]
)

add_para('Deze risico\'s zijn geen theoretische exercitie. De Nederlandse handhavingsautoriteiten (ILT, DCMR, OD NZKG) voeren gerichte inspecties uit bij bedrijven die gevaarlijke stoffen produceren. De SOP minimaliseert deze risico\'s door naleving structureel in te bedden in de bedrijfsvoering.')

add_heading('B4. Strategisch belang: markttoegang en investeerdersvertrouwen', 2)

add_para('Phoenix Metals positioneert zich als een circulaire-economie-pionier: vanadium teruggewonnen uit staalslakken als halffabrikaat voor de VRFB-industrie. Deze positionering vereist een onberispelijk complianceprofiel. De afnemers — elektrolytproducenten — zijn zelf REACH-geregistreerde bedrijven die hun toeleveranciers aanspreken op compliance. Een ontbrekend SDS, een onjuiste classificatie of een onduidelijke EoW-status is voldoende reden om een leverancier uit te sluiten.')

add_para('Daarnaast eisen investeerders en financiers een "compliance first" benadering. Een gedocumenteerde SOP toont aan dat Phoenix Metals zijn regelgevingsrisico\'s proactief beheert. Dit versterkt het investeerdersvertrouwen en verkort de due diligence-periode bij kapitaalverwerving.')

add_heading('B5. Implementatie — Faseringsplan', 2)

add_para('De implementatie van deze SOP volgt een gefaseerd traject over 6 maanden:')

add_table_simple(
    ['Fase', 'Periode', 'Acties', 'Verantwoordelijke'],
    [
        ['Fase 1: Fundering', 'Maand 1–2', 'Opstellen SIP, EoW-dossier, eerste SDS-concept. Analytische karakterisering (3 batches). Externe toxicoloog inschakelen.', 'HSEQ-Manager + QC'],
        ['Fase 2: Classificatie', 'Maand 2–3', 'CLP-classificatie voltooien. Etikettering ontwerpen en testen. Classificatierapport opstellen.', 'HSEQ-Manager'],
        ['Fase 3: Registratiebesluit', 'Maand 3–4', 'Beslissing: vrijstelling art. 2(7)(d) of volledige registratie. Indien registratie: SIEF-raadpleging en dossieropbouw starten.', 'HSEQ-Manager + Directie'],
        ['Fase 4: Implementatie', 'Maand 4–5', 'Training medewerkers. Invoering documentbeheersysteem. Operationeel maken acceptatieprocedures grondstoffen.', 'HSEQ-Manager + HR'],
        ['Fase 5: Validatie', 'Maand 5–6', 'Eerste interne audit. KPI-meting. Correcties. Directiegoedkeuring.', 'HSEQ-Manager'],
    ]
)

add_heading('B6. Benodigde middelen', 2)

add_table_simple(
    ['Middel', 'Beschrijving', 'Geschatte investering'],
    [
        ['Personeel', 'HSEQ-Manager (1 fte), ondersteuning QC (0,2 fte)', 'Structureel'],
        ['Externe expertise', 'REACH-adviseur, toxicoloog, juridisch adviseur EoW', '€ 25.000 — € 75.000 (eenmalig)'],
        ['Analytische diensten', 'ICP-OES, XRD, XRF analyses (3 batches + jaarlijkse bevestiging)', '€ 5.000 — € 15.000'],
        ['Documentbeheersysteem', 'DMS met versiebeheer, toegangsbeheer, back-up', '€ 2.000 — € 5.000/jaar'],
        ['Training', 'Interne en externe trainingen (zie §4.10)', '€ 3.000 — € 8.000/jaar'],
        ['REACH-registratie (indien vereist)', 'Volledig registratiedossier via externe adviseur', '€ 50.000 — € 200.000'],
    ]
)

add_para('Indien de vrijstelling art. 2(7)(d) van toepassing is, blijft de totale investering beperkt tot circa € 40.000 — € 100.000 voor de implementatie en eerste validatie. Bij een volledige registratie stijgt dit tot € 90.000 — € 300.000. In beide gevallen is dit een fractie van de risico\'s bij niet-naleving.')

add_heading('B7. Conclusie', 2)

add_para('Deze Master SOP is het operationele hart van de REACH-compliance-strategie van Phoenix Metals. Het document borgt dat:')
add_bullet('De stofidentiteit van het vanadiumhalffabrikaat systematisch wordt vastgesteld en geverifieerd')
add_bullet('Het End-of-Waste-moment expliciet wordt gedocumenteerd en kan worden verdedigd tegenover toezichthouders')
add_bullet('SDS, CLP-classificatie en etikettering actueel en conform de wettelijke eisen zijn')
add_bullet('Alle medewerkers de juiste training en competenties bezitten')
add_bullet('Interne audits en jaarlijkse reviews naleving garanderen')
add_bullet('Incidenten en afwijkingen gestructureerd worden opgelost')

add_para('De directie wordt verzocht deze SOP goed te keuren en de benodigde middelen beschikbaar te stellen voor de implementatie. De HSEQ-Manager rapporteert maandelijks over de voortgang van het faseringsplan.')

doc.add_paragraph()
add_para('— Einde document —', italic=True)
add_para('Phoenix Metals B.V. | SOP-REACH-001 versie 1.0 | 16 april 2026', italic=True)

# ============================================================
# SAVE
# ============================================================
output_dir = '/root/projects/jg/2026-reach-phoenix-metals/deliverables/docx'
os.makedirs(output_dir, exist_ok=True)
filepath = os.path.join(output_dir, 'REACH_MasterSOP_Phoenix_Metals_D4_v1.0.docx')
doc.save(filepath)
print(f'Saved: {filepath}')
