#!/usr/bin/env python3
"""Generate D2 v2.0: Veilig Werken & HSEQ Framework 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)
    return table

# Title
doc.add_paragraph()
title = doc.add_paragraph()
title.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = title.add_run('Veilig Werken & HSEQ Framework')
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\nPilot Plant Vanadiumextractie')
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\nStatus: Definitief')
doc.add_page_break()

# TOC
add_heading_styled('Inhoudsopgave', 1)
for item in ['1. Inleiding', '2. HSE Policy — Kader', '3. Processtappen & Gevaarsidentificatie',
             '4. Chemische Gevaren — Stoffenprofielen', '5. Arbeidshygiënische Strategie',
             '6. PBM-Beleid & Matrix', '7. Bedrijfsnoodplan (BNP)', '8. RI&E Inventarisatie',
             '9. Management of Change', '10. Training & Competentie', 'Bijlage A: Referenties']:
    doc.add_paragraph(item)

doc.add_page_break()

# 1. Inleiding
add_heading_styled('1. Inleiding', 1)
doc.add_paragraph(
    'Dit document beschrijft het HSEQ-kader voor veilig werken bij Phoenix Metals IJmuiden, '
    'specifiek voor de pilot plant voor vanadiumextractie uit staalslakken. Het kader is gebaseerd op:'
)
for b in [
    'HSE Policy Phoenix Metals V1 (Bron 22)',
    'Bedrijfsnoodplan BNP-V1 (Bron 23)',
    'PBM-beleid PS-201-NL V1.0 (Bron 25)',
    'RI&E-inventarisatie PhoenixMetals (Bronnen 26-28)',
    'MSDS-documenten (Bronnen 14-16)',
    'Demo Process VR (Bron 9-10)',
]:
    doc.add_paragraph(b, style='List Bullet')

# 2. HSE Policy
add_heading_styled('2. HSE Policy — Kader', 1)
doc.add_paragraph(
    'De HSE Policy van Phoenix Metals (V1, 1 januari 2025, ondertekend door Stijn van Zelst, '
    'Managing Director) stelt de volgende uitgangspunten:'
)
for b in [
    'Commitment: Veiligheid en welzijn van medewerkers, aannemers en gemeenschap hebben prioriteit.',
    'Compliance: Strikte naleving van alle wet- en regelgeving. Compliance is gezamenlijke verantwoordelijkheid.',
    'Objectives: Jaarlijks meetbare HSE-doelen via een HSE Management System.',
    'Implementatie: Duidelijke HSE-standaarden, risicobeoordelingen, empowerment medewerkers.',
    'Monitoring: Regelmatige inspecties, audits en prestatie-evaluaties.',
    'Review: Jaarlijkse beoordeling door senior management.',
    'Continuous Improvement: Jaarlijkse nieuwe individuele en bedrijfseenbrede doelen.',
]:
    doc.add_paragraph(b, style='List Bullet')
doc.add_paragraph('Conform HSE Policy-V1, §1-§7.')

# 3. Processtappen
add_heading_styled('3. Processtappen & Gevaarsidentificatie', 1)
doc.add_paragraph(
    'Op basis van de Demo Process VR (Bron 9/10) en het Block Flow Diagram (Bron 6) zijn de volgende '
    'processtappen met bijbehorende gevaren geïdentificeerd:'
)

add_table(
    ['Processtap', 'Beschrijving', 'Gevaar', 'Risicoklasse'],
    [
        ['1-2', 'Ash afwegen/overbrengen', 'Stof (fijn poeder), radioactiviteit (SARU)', 'Hoog'],
        ['3-4', 'Reactor vullen + verwarmen 80°C', 'Chemisch (NaOH 50%), thermisch', 'Hoog'],
        ['5', 'Filtratie', 'Chemisch (heet filtraat), mechanisch (pompen)', 'Middel'],
        ['8-12', 'Kristallisatiecyclus', 'Thermisch, chemisch', 'Middel'],
        ['13-16', 'H₂SO₄-toevoeging', 'Chemisch (corrosief, exotherm)', 'Hoog'],
        ['17-20', 'Opnieuw H₂SO₄ + NaOH', 'Chemisch, thermisch', 'Hoog'],
        ['21-23', 'Ionenwisseling', 'Chemisch (2,5M H₂SO₄)', 'Hoog'],
        ['24-25', 'Electroreductie', 'Elektrisch, chemisch', 'Middel'],
        ['26-28', 'V3.5+ elektrolyt productie', 'Chemisch, elektrisch', 'Middel'],
    ]
)

# 4. Chemische gevaren
add_heading_styled('4. Chemische Gevaren — Stoffenprofielen', 1)

add_heading_styled('4.1 Zwavelzuur (H₂SO₄) 25-75%', 2)
doc.add_paragraph('Bron: SDS Sulfuric acid 25-75% Versie 1 (Bron 15)')
for b in [
    'CLP: Skin Corr. 1A (H314: Veroorzaakt ernstige brandwonden en oogletsel)',
    'Reactie met CaO (ongebluste kalk): exotherm → gips + warmte. Beheersing: geleende toevoeging, temperatuurmonitoring.',
    'Opslag: Corrosief-kast, gescheiden van basen. Ventilatie vereist.',
    'PBM: Veiligheidsbril, zuurbestendige handschoenen, beschermende kleding, gezichtsscherm bij grote hoeveelheden.',
]:
    doc.add_paragraph(b, style='List Bullet')

add_heading_styled('4.2 Natriumhydroxide (NaOH) 50%', 2)
doc.add_paragraph('Bron: SDS Sodium hydroxide 50% Versie 1 (Bron 16)')
for b in [
    'CLP: Skin Corr. 1A (H314), Acute Tox. 4 (H302)',
    'Sterk basisch, corrosief. Reactie met zuren is exotherm.',
    'Opslag: Corrosief-kast, gescheiden van zuren.',
    'PBM: Veiligheidsbril, alkalibestendige handschoenen, beschermende kleding.',
]:
    doc.add_paragraph(b, style='List Bullet')

add_heading_styled('4.3 Vanadiumconcentraat', 2)
doc.add_paragraph('Bron: SDS Vanadium concentrate Versie 1 (Bron 14)')
for b in [
    'CLP: Acute Tox. 3 (H331: Toxisch bij inademing), Carc. 2 (H351: Verdacht van kankerverwekkendheid)',
    'Reprotox. 2 (H361d: Verdacht van schade aan ongeboren kind)',
    'Specifieke risico\'s: Inademing van stof/deeltjes, huidcontact, inslikken.',
    'SARU-ash: Bevat radionucliden (U-238 serie). Bij ≤1.000 kg: vrijstelling art. 3.17.',
    'PBM: Adembescherming (P3-filter), veiligheidsbril, beschermende kleding, handschoenen.',
]:
    doc.add_paragraph(b, style='List Bullet')

# 5. Arbeidshygiënische strategie
add_heading_styled('5. Arbeidshygiënische Strategie', 1)
doc.add_paragraph(
    'Phoenix Metals hanteert de arbeidshygiënische strategie conform PBM-beleid PS-201-NL V1.0 '
    '(Bron 25, §Bij de bron aanpakken):'
)
add_table(
    ['Niveau', 'Maatregel', 'Toepassing Phoenix Metals'],
    [
        ['1. Bronmaatregel', 'Oorzaak wegnemen', 'Afsluitbare reactoren, flow cabinet voor ash-handling'],
        ['2. Collectieve maatregel', 'Afscherming/afzuiging', 'Ventilatie, afzuiging dampen, spatschermen'],
        ['3. Individuele maatregel', 'Taakroulatie/organisatie', 'Beperkte blootstellingsduur, rotatie taken'],
        ['4. PBM', 'Persoonlijke bescherming', 'Laatste middel — zie §6'],
    ]
)
doc.add_paragraph('Conform PBM-beleid PS-201-NL V1.0, §Redelijkerwijs-principe.')

# 6. PBM
add_heading_styled('6. PBM-Beleid & Matrix', 1)
doc.add_paragraph(
    'Het PBM-pakket is gebaseerd op de RI&E (Bronnen 26-28) en de PBM-matrix draft (Bron 24). '
    'Conform PS-201-NL V1.0 voorziet Phoenix Metals in:'
)
add_table(
    ['PBM', 'Toepassing', 'Normering', 'Werkgebied'],
    [
        ['Veiligheidshelm', 'Algemeen', 'EN 397', 'Pilot plant'],
        ['Veiligheidsschoenen (antistatisch)', 'Algemeen', 'EN ISO 20345 S3', 'Pilot plant'],
        ['Veiligheidsbril', 'Chemische hantering', 'EN 166', 'Reactoren, filtratie'],
        ['Gezichtsscherm', 'Grote volumes H₂SO₄/NaOH', 'EN 166', 'Tankwagen lossen'],
        ['Beschermende kleding (vlamdovend/antistatisch)', 'Algemeen', 'EN ISO 11612/1149', 'Pilot plant'],
        ['Zuurbestendige handschoenen', 'H₂SO₄/NaOH hantering', 'EN 374', 'Reactoren, filtratie'],
        ['Adembescherming (P3)', 'Ash-handling, stof', 'EN 14387', 'Flow cabinet, ash-overbrengen'],
        ['Gehoorbescherming', 'Indien >80 dB(A)', 'EN 352', 'Pompen, compressoren'],
    ]
)

# 7. BNP
add_heading_styled('7. Bedrijfsnoodplan (BNP)', 1)
doc.add_paragraph(
    'Het Bedrijfsnoodplan (BNP-V1, Bron 23) is opgesteld voor de locatie Plant One Rotterdam (POR) '
    'en is in lijn met het noodplan van POR. Voor de IJmuiden-locatie wordt een geüpdatet BNP vereist.'
)
add_heading_styled('7.1 Calamiteitenorganisatie', 2)
add_table(
    ['Functie', 'Verantwoordelijkheid', 'Huidige invulling (POR)'],
    [
        ['Workpermit coördinator', 'Lokale leiding tot aankomst piketfunctionaris', 'POR-personeel'],
        ['Piketfunctionaris', 'Coördinatie externe hulpdiensten', 'POR-personeel'],
        ['BHV\'er', 'Eerste hulp, ontruiming, brandbestrijding', 'POR + Phoenix Metals'],
        ['Hoofd BHV', 'Algehele coördinatie calamiteiten', 'POR'],
        ['Ontruimingsleider', 'Ontruiming gebouw', 'POR-personeel'],
    ]
)
doc.add_paragraph('Conform BNP-V1, Tabel 1.')

add_heading_styled('7.2 Specifieke scenario\'s IJmuiden', 2)
doc.add_paragraph('Voor de IJmuiden-locatie moeten de volgende scenario\'s worden uitgewerkt:')
for b in [
    'Zwavelzuurlekkage: neutralisatie met NaOH, absorptiemateriaal, evacuatie zone.',
    'NaOH-lekkage: neutralisatie met zwak zuur, absorptiemateriaal.',
    'Brand: CO₂-blusser (elektrisch), schuimblusser (chemisch). Geen water op zuurbranden.',
    'Vanadiumconcentraat morsage: droog opruimen, adembescherming, voorkom afwatering.',
    'Radioactief incident (SARU-ash): evacuatie, ANVS-notificatie.',
]:
    doc.add_paragraph(b, style='List Bullet')

# 8. RI&E
add_heading_styled('8. RI&E Inventarisatie', 1)
doc.add_paragraph(
    'De RI&E-inventarisatie is uitgevoerd conform de instrumenten (Bronnen 26-27) met een actieplan '
    '(Bron 28). De verdiepende RI&E gevaarlijke stoffen (Bron 17) identificeert de volgende risico\'s:'
)
for b in [
    'Chemische blootstelling: H₂SO₄, NaOH, vanadiumverbindingen — blootstellingsscenario\'s per taak.',
    'Thermische risico\'s: reactoren op 80°C, exotherme reacties.',
    'Mechanische risico\'s: pompen, leidingen onder druk.',
    'Elektrische risico\'s: electroreductie-unit.',
    'Radiologische risico\'s: SARU-ash (U-238 serie).',
    'Ergonomische risico\'s: tillen (emmers, filters), repetitieve handelingen.',
]:
    doc.add_paragraph(b, style='List Bullet')
doc.add_paragraph('Zie RI&E Action plan and follow up (Bron 28) voor openstaande acties.')

# 9. MoC
add_heading_styled('9. Management of Change', 1)
doc.add_paragraph(
    'Conform PE-202-01 V1 Management of Change (Bron 34) worden wijzigingen gecategoriseerd als:'
)
for b in [
    'Organisatorisch: personele wijzigingen, taken, bevoegdheden.',
    'Installaties: leidingwerk, pompen, technische LOD\'s.',
    'Procedural: werkprocedures, instructies.',
]:
    doc.add_paragraph(b, style='List Bullet')
doc.add_paragraph(
    'Elke wijziging wordt beoordeeld door de HSE Manager (Jorick van Gemert) en goedgekeurd door '
    'de Managing Director (Stijn van Zelst). De RASCI-verantwoordelijkheid is vastgelegd in '
    'PE-202-01 V1, Tabel 3.'
)

# 10. Training
add_heading_styled('10. Training & Competentie', 1)
doc.add_paragraph('De volgende trainingen zijn vereist conform de opleidingsmatrix (Bron: trainingen/):')
add_table(
    ['Training', 'Doelgroep', 'Frequentie'],
    [
        ['Basisveiligheidsinstructie', 'Alle medewerkers', 'Bij indiensttreding + jaarlijks'],
        ['Werken met gevaarlijke stoffen', 'Operatiepersoneel', 'Bij indiensttreding + jaarlijks'],
        ['Chemical management', 'HSE + operatie', 'Jaarlijks'],
        ['PBM-gebruik (adembescherming)', 'Alle medewerkers', 'Bij indiensttreding + jaarlijks'],
        ['EHBO / BHV', 'Minimaal 2 medewerkers', 'Jaarlijks (herhaling)'],
        ['Brandbestrijding', 'Alle medewerkers', 'Jaarlijks'],
        ['Exposure to hazardous chemicals', 'Operatiepersoneel', 'Jaarlijks'],
    ]
)

# Footer
doc.add_paragraph()
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run('JvG Consultancy — Veilig Werken & HSEQ Framework 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_VeiligWerken_HSEQ_Framework_Phoenix_Metals_D2_v2.0.docx')
print('D2 v2.0 generated successfully')
