#!/usr/bin/env python3
"""Generate D3 v2.0: VIB/MSDS Strategie Phoenix Metals"""
from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT

doc = Document()
style = doc.styles['Normal']
style.font.name = 'Calibri'
style.font.size = Pt(11)

def add_heading_styled(text, level=1):
    h = doc.add_heading(text, level=level)
    for run in h.runs:
        run.font.color.rgb = RGBColor(0, 51, 102)
    return h

def add_table(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(9)
    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)

# Title
doc.add_paragraph()
title = doc.add_paragraph()
title.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = title.add_run('VIB/MSDS Strategie')
run.bold = True
run.font.size = Pt(28)
run.font.color.rgb = RGBColor(0, 51, 102)

sub = doc.add_paragraph()
sub.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = sub.add_run('Phoenix Metals IJmuiden\nStrategie voor Veiligheidsinformatiebladen')
run.font.size = Pt(16)
run.font.color.rgb = RGBColor(80, 80, 80)

doc.add_paragraph()
meta = doc.add_paragraph()
meta.alignment = WD_ALIGN_PARAGRAPH.CENTER
meta.add_run('Versie: 2.0\n').bold = True
meta.add_run('Datum: 16 april 2026\nOpdrachtgever: Phoenix Metals\nAdviseur: JvG Consultancy')
doc.add_page_break()

for item in ['1. Inleiding', '2. Wettelijk Kader', '3. Bestaande SDS-Documenten',
             '4. SDS-Strategie per Stof', '5. 16 SDS-Secties — Phoenix Metals Specifiek',
             '6. Onzuiverheden uit Staalslak', '7. Chemical Registration Procedure',
             '8. SDS-Beheer & Distributie', '9. REACH-IT & ECHA Interface',
             'Bijlage A: Referenties']:
    doc.add_paragraph(item)
doc.add_page_break()

# 1
add_heading_styled('1. Inleiding', 1)
doc.add_paragraph(
    'Dit document beschrijft de strategie voor het opstellen, beheren en distribueren van '
    'Veiligheidsinformatiebladen (VIB/SDS) voor Phoenix Metals IJmuiden. Het omvat zowel de '
    'existing SDS-documenten (Bronnen 14-16) als de strategie voor nieuwe SDS\'s voor de '
    'vanadium-elektrolyten en bijproducten.'
)

# 2
add_heading_styled('2. Wettelijk Kader', 1)
for b in [
    'REACH-verordening (EG 1907/2006), Titel IV: Informatie in de toeleveringsketen.',
    'CLP-verordening (EG 1272/2008): Classificatie, etikettering en verpakking.',
    'Arbowet/Arbobesluit: Artikel over gevaarlijke stoffen en informatieverplichtingen.',
    'REACH Artikel 31: Leverancier moet SDS verstrekken bij gevaarlijke stoffen.',
    'SDS-opmaak: 16 secties conform Annex II REACH (Verordening (EU) 2020/878).',
]:
    doc.add_paragraph(b, style='List Bullet')

# 3
add_heading_styled('3. Bestaande SDS-Documenten', 1)
add_table(
    ['Stof', 'SDS Beschikbaar', 'Bron', 'Versie', 'Taal'],
    [
        ['Vanadium concentrate', 'Ja', 'Bron 14', 'Versie 1', 'Nederlands'],
        ['Zwavelzuur (H₂SO₄) 25-75%', 'Ja', 'Bron 15', 'Versie 1', 'Engels'],
        ['Natriumhydroxide (NaOH) 50%', 'Ja', 'Bron 16', 'Versie 1', 'Engels'],
        ['Aluminiumsulfaat', 'Ja (leverancier)', '—', 'Actueel', 'Nederlands'],
    ]
)
doc.add_paragraph(
    'Opmerking: Phoenix Metals is downstream gebruiker van H₂SO₄ en NaOH. De SDS\'s van de '
    'leverancier zijn toereikend mits de gebruiksvoorwaarden (scenario\'s) in het Extended SDS '
    'overeenkomen met het feitelijke gebruik. Zie REACH-artikel 2(21).'
)

# 4
add_heading_styled('4. SDS-Strategie per Stof', 1)
add_table(
    ['Stof', 'SDS-type', 'Verantwoordelijke', 'Status', 'Actie'],
    [
        ['H₂SO₄ 25-75%', 'Leverancier-SDS', 'Leverancier', 'Beschikbaar', 'Verifiëren USEs'],
        ['NaOH 50%', 'Leverancier-SDS', 'Leverancier', 'Beschikbaar', 'Verifiëren USEs'],
        ['Vanadium concentrate', 'Leverancier-SDS', 'Leverancier', 'Beschikbaar', 'Verifiëren'],
        ['Vanadium-elektrolyt (V3.5+)', 'Eigen SDS', 'Phoenix Metals', 'Te ontwikkelen', 'CSR → SDS'],
        ['V(IV) sulfaat oplossing', 'Eigen SDS', 'Phoenix Metals', 'Te ontwikkelen', 'CSR → SDS'],
        ['Filtercake (residu)', 'Eigen SDS', 'Phoenix Metals', 'Te ontwikkelen', 'Samenstelling analyseren'],
        ['Gips (CaSO₄)', 'Eventueel SDS', 'Phoenix Metals', 'Te beoordelen', 'Classificatie bepalen'],
    ]
)

# 5
add_heading_styled('5. 16 SDS-Secties — Phoenix Metals Specifiek', 1)
doc.add_paragraph(
    'Voor de eigen SDS\'s (vanadium-elektrolyt, V(IV) sulfaat, filtercake) worden de 16 secties '
    'als volgt ingevuld, met specifieke aandacht voor onzuiverheden uit staalslakken:'
)

sections = [
    ('1. Identificatie van de stof/het mengsel', 'Productnaam: Vanadium-elektrolyt V3.5+ / V(IV) sulfaatoplossing. Producent: Phoenix Metals IJmuiden, Westerduinweg 3. Noodnummer: 112.'),
    ('2. Gevaarsidentificatie', 'CLP-classificatie op basis van toxicologische data van vanadiumverbindingen. Acute Tox. (oraal/inademing), H302/H331. Carc. 2, H351 (indien van toepassing op V2O5-gehalte).'),
    ('3. Samenstelling/informatie over bestanddelen', 'Hoofdbestanddeel: vanadium(IV) sulfaat in waterige oplossing. Onzuiverheden uit staalslak: Fe, Ca, Mg, Al, Si, Mn, Cr, Ni, Ti. Zie §6.'),
    ('4. Eerstehulpmaatregelen', 'Inademing: verplaatsen naar frisse lucht. Huidcontact: afspoelen met water (15 min). Oogcontact: uitspoelen met water (15 min). Inslikken: mond spoelen, niet laten braken, arts raadplegen.'),
    ('5. Brandbestrijdingsmaatregelen', 'Niet brandbaar. Bij brand: CO₂, droog chemisch of schuim. Geen waterstraal op containers (risico spatten).'),
    ('6. Maatregelen bij accidenteel vrijkomen', 'Dijken met zand/aarde. Droog opruimen (stofvrij). Afvoer naar afvalcontainer. Voorkom lozing in riolering/water.'),
    ('7. Hanteren en opslag', 'Hanteren in afgesloten systeem (reactoren, pompen). Opslag in goedgekeurde containers. Ventilatie. Scheiden van onverenigbare stoffen.'),
    ('8. Maatregelen ter beheersing van blootstelling/PBM', 'LEV (lokale afzuiging). PBM: veiligheidsbril, zuurbestendige handschoenen, beschermende kleding, adembescherming (P3) bij stof. Zie D2 §6.'),
    ('9. Fysiche en chemische eigenschappen', 'Vloeistof (waterige oplossing). pH: zuur (~1-3). Dichtheid: ~1,2-1,5 g/cm³. Kookpunt: ~100°C.'),
    ('10. Stabiliteit en reactiviteit', 'Stabiel onder normale omstandigheden. Reactie met basen (exotherm). Vermijd contact met metalen (waterstofontwikkeling).'),
    ('11. Toxicologische informatie', 'Gebruik consortium-data (Vanadium REACH Consortium). Read-across met VOS₃, V₂O₅. Acute toxiciteit, herhaalde blootstelling, carcinogeniteit, reproductietoxiciteit.'),
    ('12. Ecologische informatie', 'Toxisch voor aquatische organismen (vanadiumverbindingen). Niet biologisch afbreekbaar. Log Kow: laag (wateroplosbaar).'),
    ('13. Instructies voor verwijdering', 'Gevaarlijk afval (EURAL-code te bepalen). Afvoer via erkend afvalverwerker. Niet lozen in riolering.'),
    ('14. Informatie met betrekking tot vervoer', 'UN-nummer: afhankelijk van classificatie. ADR/IATA: indien relevant. Verpakkingsgroep: III (indicatief).'),
    ('15. Wettelijke informatie', 'REACH (EG 1907/2006), CLP (EG 1272/2008), Arbowet, Besluit activiteiten leefomgeving. SVHC-status controleren.'),
    ('16. Overige informatie', 'Abbreviaties, herzieningsgeschiedenis, disclaimer. Bron: Registration Chemicals MASTER v2.1.0.'),
]
for sectie, content in sections:
    p = doc.add_paragraph()
    run = p.add_run(sectie + ': ')
    run.bold = True
    p.add_run(content)

# 6
add_heading_styled('6. Onzuiverheden uit Staalslak', 1)
doc.add_paragraph(
    'De staalslakken (en SARU-ash) bevatten diverse onzuiverheden die in de SDS-sectie 3 en het '
    'CSR moeten worden verwerkt. Gebaseerd op Fact sheet Ash 2025 (Bron 31) en de Registration '
    'Chemicals MASTER (Bron 13):'
)
add_table(
    ['Element', 'Bron', 'Relevantie SDS', 'Gevaarsklasse'],
    [
        ['Vanadium (V)', 'Hoofdbestanddeel', 'Primair', 'Acuut toxisch, Carc. 2'],
        ['IJzer (Fe)', 'Bijproduct', 'Secundair', 'Laag (Fe₂O₃)'],
        ['Calcium (Ca)', 'Gipsproductie', 'Secundair', 'Laag (CaSO₄)'],
        ['Magnesium (Mg)', 'Bijproduct', 'Secundair', 'Laag'],
        ['Aluminium (Al)', 'Hulpstof', 'Secundair', 'Laag'],
        ['Silicium (Si)', 'Onzuiverheid', 'Trace', 'Laag'],
        ['Mangaan (Mn)', 'Onzuiverheid', 'Trace', 'Acuut toxisch (MnO₂)'],
        ['Chroom (Cr)', 'Onzuiverheid', 'Trace', 'Carc. 1A (Cr VI)'],
        ['Nikkel (Ni)', 'Onzuiverheid (SARU)', 'Trace', 'Carc. 2, Sensibiliserend'],
        ['Titanium (Ti)', 'Onzuiverheid', 'Trace', 'Laag'],
        ['Radionucliden (U-238)', 'SARU-ash', 'Specifiek', 'Stralingsrisico'],
    ]
)
doc.add_paragraph(
    'Voor Cr(VI) en Ni gelden specifieke verplichtingen: monitoring bij blootstelling, eventuele '
    'SVHC-aanduiding. De gehalten in het eindproduct moeten worden geanalyseerd.'
)

# 7
add_heading_styled('7. Chemical Registration Procedure', 1)
doc.add_paragraph(
    'Conform PE-240-01 V1 (Bron 18) is een procedure voor aanvraag, beoordeling en goedkeuring van '
    'gevaarlijke stoffen vastgelegd. De procedure omvat:'
)
for b in [
    'Stap 1: Identificatie product + CLP-classificatie via etiket en SDS.',
    'Stap 2: Technische geschiktheid beoordeling.',
    'Stap 3: Chemical Risk Assessment uitvoeren.',
    'Stap 4: Beoordeling CMR, SVHC, PBT, vPvB-stoffen.',
    'Stap 5: Goedkeuring door HSE Manager.',
    'Stap 6: Registratie in chemicals register.',
    'Stap 7: SDS-archivering en distributie.',
]:
    doc.add_paragraph(b, style='List Bullet')
doc.add_paragraph(
    'Phoenix Metals is downstream gebruiker (REACH art. 2(21)). Bij afwijkingen van de '
    'leverancier-USEs moet Phoenix Metals dit melden aan de leverancier (REACH art. 34).'
)

# 8
add_heading_styled('8. SDS-Beheer & Distributie', 1)
for b in [
    'Archivering: Alle SDS\'s centraal beheerd door HSE Manager.',
    'Distributie: SDS\'s beschikbaar op werkplek (digitaal + papier).',
    'Actualisatie: Minimaal bij nieuwe classificatie, nieuwe H-zinnen, of wijziging samenstelling.',
    'Taal: Nederlands (verplicht) + Engels (indien internationaal).',
    'Bewaartermijn: Minimaal 10 jaar (REACH art. 36).',
]:
    doc.add_paragraph(b, style='List Bullet')

# 9
add_heading_styled('9. REACH-IT & ECHA Interface', 1)
doc.add_paragraph(
    'Voor de toekomstige REACH-registratie (bij schaalvergroting >1 ton/jaar) wordt een REACH-IT '
    'account aangemaakt bij ECHA. De indiening omvat:'
)
for b in [
    'IUCLID-dossier met alle toxicologische en fysisch-chemische data.',
    'Chemical Safety Report (CSR) met blootstellingsscenario\'s.',
    'Classificatie conform CLP.',
    'Verwijzing naar consortium-data (Letter of Access).',
]:
    doc.add_paragraph(b, style='List Bullet')

# Footer
doc.add_paragraph()
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run('JvG Consultancy — VIB/MSDS Strategie v2.0 — Phoenix Metals')
run.font.size = Pt(8)
run.font.color.rgb = RGBColor(128, 128, 128)

doc.save('/root/projects/jg/2026-reach-phoenix-metals/deliverables/docx/REACH_VIB_MSDS_Strategie_Phoenix_Metals_D3_v2.0.docx')
print('D3 v2.0 generated successfully')
