#!/usr/bin/env python3
"""Generate D4 v2.0: Master SOP 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('Master SOP\nREACH-Compliance & HSE-Beheer')
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\nStandard Operating Procedure')
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\nEigenaar: HSE Manager (J. van Gemert)\nGoedgekeurd: Stijn van Zelst, Managing Director')
doc.add_page_break()

# Doc control
add_heading_styled('Document Control', 1)
add_table(
    ['Versie', 'Datum', 'Auteur', 'Wijziging'],
    [
        ['1.0', 'Maart 2026', 'JvG Consultancy', 'Initiële versie (generiek)'],
        ['2.0', '16 april 2026', 'JvG Consultancy', 'Volledige upgrade met Phoenix Metals data'],
    ]
)

doc.add_paragraph()
add_heading_styled('Wijzigingenbeheer', 2)
doc.add_paragraph(
    'Wijzigingen worden beheerd conform PE-202-01 V1 Management of Change (Bron 34). '
    'Elke wijziging wordt beoordeeld door de HSE Manager en goedgekeurd door de Managing Director.'
)

for item in ['1. Doel & Toepassingsgebied', '2. Organisatiestructuur & Verantwoordelijkheden',
             '3. Document Control', '4. Management of Change', '5. REACH-Compliance Procedure',
             '6. Gevaarlijke Stoffen Procedure', '7. HSE Policy Implementatie',
             '8. PBM-Beleid Uitvoering', '9. Bedrijfsnoodplan', '10. RI&E & Actieopvolging',
             '11. Training & Competentie', '12. Kwaliteitscontrole (QC)',
             '13. Gekoppelde Documenten', 'Bijlage A: Referenties']:
    doc.add_paragraph(item)
doc.add_page_break()

# 1
add_heading_styled('1. Doel & Toepassingsgebied', 1)
doc.add_paragraph(
    'Deze Master SOP beschrijft de operationele procedures voor REACH-compliance en HSE-beheer bij '
    'Phoenix Metals IJmuiden. Het is van toepassing op alle medewerkers, aannemers en bezoekers '
    'die werkzaamheden uitvoeren op de locatie Westerduinweg 3, IJmuiden.'
)

# 2
add_heading_styled('2. Organisatiestructuur & Verantwoordelijkheden', 1)
add_table(
    ['Functie', 'Naam', 'Verantwoordelijkheden'],
    [
        ['Managing Director', 'Stijn van Zelst', 'Eindverantwoordelijkheid HSE, goedkeuring beleid, budgetallocatie'],
        ['HSE Manager', 'Jorick van Gemert', 'HSE-beleid, RI&E, REACH-compliance, training, audits'],
        ['Vergunningadviseur', 'Arcadis (Gijs Jacobs)', 'Vergunningsaanvraag, milieuregelgeving, bestemmingsplan'],
        ['Operatiepersoneel', 'TBD', 'Uitvoering procedures, incidentmelding, PBM-gebruik'],
        ['BHV\'er(s)', 'TBD', 'Eerste hulp, ontruiming, brandbestrijding'],
    ]
)

add_heading_styled('2.1 RACI-Matrix — HSE Processen', 2)
add_table(
    ['Proces', 'MD (Van Zelst)', 'HSE Manager', 'Operatie', 'Arcadis'],
    [
        ['HSE Policy vaststellen', 'Accountable', 'Responsible', 'Informed', 'Consulted'],
        ['RI&E uitvoeren', 'Informed', 'Accountable', 'Responsible', 'Consulted'],
        ['Vergunningsaanvraag', 'Accountable', 'Consulted', 'Informed', 'Responsible'],
        ['REACH-registratie', 'Informed', 'Accountable', 'Informed', 'Consulted'],
        ['MoC-beoordeling', 'Accountable', 'Responsible', 'Consulted', '—'],
        ['BNP-updates', 'Informed', 'Accountable', 'Responsible', '—'],
        ['PBM-distributie', 'Informed', 'Responsible', 'Responsible', '—'],
        ['SDS-beheer', 'Informed', 'Accountable', 'Informed', 'Consulted'],
    ]
)

# 3
add_heading_styled('3. Document Control', 1)
doc.add_paragraph(
    'Alle documenten zijn genummerd conform de Phoenix Metals boomstructuur. '
    'Document control omvat:'
)
for b in [
    'Unieke documentnummering (PE-xxx-xx, HS-xxx-xx, etc.)',
    'Versiebeheer: wijzigingenbeheertabel in elk document.',
    'Goedkeuringsworkflow: HSE Manager → Managing Director.',
    'Archivering: oude versies bewaren, nooit overschrijven.',
    'Distributie: gecontroleerde distributie via documentbeheersysteem.',
    'Referentie: Bron 33 — overzicht BRZO-elementen en VBS.',
]:
    doc.add_paragraph(b, style='List Bullet')

# 4
add_heading_styled('4. Management of Change (MoC)', 1)
doc.add_paragraph('Conform PE-202-01 V1 Management of Change (Bron 34):')

add_heading_styled('4.1 Wijzigingstypen', 2)
add_table(
    ['Type', 'Voorbeeld', 'Beoordeling'],
    [
        ['Organisatorisch', 'Nieuwe medewerkers, gewijzigde bevoegdheden', 'HSE Manager'],
        ['Installaties', 'Nieuwe reactor, gewijzigd leidingwerk', 'HSE Manager + technisch'],
        ['Procedures', 'Gewijzigde werkprocedure', 'HSE Manager'],
        ['Tijdelijk', 'Proefdraaien nieuwe parameter', 'MoC-formulier verplicht'],
        ['Noodvervangend', 'Tijdelijk ander materiaal/apparaat', 'HSE Manager akkoord + termijn'],
    ]
)

add_heading_styled('4.2 MoC-Proces', 2)
steps = [
    'Identificatie wijziging door initiatiefnemer.',
    'MoC-formulier invullen (beschrijving, reden, risico\'s).',
    'Risicobeoordeling door HSE Manager.',
    'Goedkeuring door Managing Director (indien impact > laag).',
    'Implementatie + communicatie naar betrokkenen.',
    'Evaluatie na implementatie (na 30 dagen).',
]
for i, s in enumerate(steps, 1):
    doc.add_paragraph(f'{i}. {s}')

# 5
add_heading_styled('5. REACH-Compliance Procedure', 1)
doc.add_paragraph(
    'De REACH-compliance procedure volgt het projectplan uit Bron 12 (REACH registratie). '
    'In de pilot fase (<1 ton/jaar) is registratie mogelijk niet verplicht, maar worden '
    'voorbereidingen getroffen voor commerciële schaalvergroting.'
)
add_table(
    ['Fase', 'Activiteit', 'Verantwoordelijke', 'Deliverable'],
    [
        ['Voorbereiding', 'Stoffeninventarisatie, consortiumonderzoek', 'HSE Manager', 'Stoffenlijst + CAS'],
        ['Data-verzameling', 'SIEF-deelname, LoA verkrijgen', 'HSE Manager', 'Dataset per stof'],
        ['Risicobeoordeling', 'CSR opstellen, blootstellingsscenario\'s', 'Toxicoloog + HSE', 'CSR'],
        ['Indiening', 'REACH-IT dossier indienen', 'HSE Manager', 'ECHA-nummer'],
        ['Implementatie', 'SDS, training, labeling', 'HSE Manager', 'Complete SDS-set'],
    ]
)

# 6
add_heading_styled('6. Gevaarlijke Stoffen Procedure', 1)
doc.add_paragraph(
    'Conform PE-240-01 V1 Aanvraag, beoordeling en goedkeuring van gevaarlijke stoffen (Bron 18):'
)
for b in [
    'Voorafgaand aan ingebruikname: Chemical Risk Assessment verplicht.',
    'SDS-raadpleging: H-zinnen, P-zinnen, blootstellingslimieten.',
    'CMR/SVHC/PBT/vPvB: bijzondere beoordeling en goedkeuring door MD.',
    'Registratie in chemicals register (Registration Chemicals MASTER, Bron 13).',
    'Opslag: gescheiden opslag zuren/basen, brandwerende kasten, ventilatie.',
]:
    doc.add_paragraph(b, style='List Bullet')

# 7
add_heading_styled('7. HSE Policy Implementatie', 1)
doc.add_paragraph('Conform HSE Policy-V1 (Bron 22):')
add_table(
    ['Paragraaf Policy', 'Implementatie', 'Verantwoordelijke'],
    [
        ['§1 Commitment', 'HSE als vast agendapunt teamoverleg', 'MD + HSE Manager'],
        ['§2 Compliance', 'Jaarlijkse compliance-audit', 'HSE Manager'],
        ['§3 Objectives', 'Jaarlijkse HSE-doelen (SMART)', 'MD'],
        ['§4 Implementatie', 'Risicobeoordelingen, procedures, training', 'HSE Manager'],
        ['§5 Monitoring', 'Inspecties, audits, KPI\'s', 'HSE Manager'],
        ['§6 Review', 'Jaarlijkse management review', 'MD'],
        ['§7 Improvement', 'Correctieve acties, lessons learned', 'HSE Manager'],
    ]
)

# 8
add_heading_styled('8. PBM-Beleid Uitvoering', 1)
doc.add_paragraph(
    'Conform PS-201-NL V1.0 PBM beleid (Bron 25) en PBM matrix draft (Bron 24):'
)
for b in [
    'Selectie: op basis van RI&E en arbeidshygiënische strategie (bron → collectief → individueel → PBM).',
    'Aanschaf: gecertificeerde PBM\'s (CE-markering, normering per type).',
    'Distributie: persoonlijk toegewezen PBM\'s bij indiensttreding.',
    'Training: instructie juist gebruik bij indiensttreding + jaarlijks.',
    'Onderhoud: inspectie + vervanging volgens schema.',
    'Registratie: uitgifte geregistreerd per medewerker.',
]:
    doc.add_paragraph(b, style='List Bullet')

# 9
add_heading_styled('9. Bedrijfsnoodplan (BNP)', 1)
doc.add_paragraph(
    'Conform BNP-V1 (Bron 23). Het BNP is van toepassing op de Phoenix Metals locatie en is '
    'aansluitend op het noodplan van Plant One Rotterdam (bij demo-locatie) respectievelijk het '
    'noodplan van de IJmuiden-locatie (pilot plant).'
)
add_table(
    ['Scenario', 'Actie', 'Verantwoordelijke'],
    [
        ['Brand', 'Alarm → BHV → 112 → evacuatie', 'BHV\'er'],
        ['Chemische lekkage', 'Isolatie → neutralisatie → ventilatie → 112 indien nodig', 'HSE Manager'],
        ['Persoonlijk ongeval', 'EHBO → 112 indien nodig → incidentmelding', 'BHV\'er'],
        ['Evacuatie', 'Verzamelpunt → telling → BHV coördinatie', 'Ontruimingsleider'],
        ['Radioactief incident', 'Evacuatie → ANVS-notificatie → afbakening', 'HSE Manager'],
    ]
)

# 10
add_heading_styled('10. RI&E & Actieopvolging', 1)
doc.add_paragraph(
    'De RI&E is uitgevoerd conform de instrumenten (Bronnen 26-27). Openstaande acties zijn '
    'geregistreerd in het RI&E Action Plan (Bron 28). Beheer:'
)
for b in [
    'Jaarlijkse herbeoordeling RI&E.',
    'Actieopvolging: statusregistratie, verantwoordelijke, deadline.',
    'Maandelijks overzicht openstaande acties aan MD.',
    'Integratie met MoC bij wijzigingen die RI&E beïnvloeden.',
]:
    doc.add_paragraph(b, style='List Bullet')

# 11
add_heading_styled('11. Training & Competentie', 1)
doc.add_paragraph(
    'Trainingen conform de opleidingsmatrix (Bron: trainingen/) en Draft PvA (Bron 3):'
)
add_table(
    ['Training', 'Doelgroep', 'Frequentie', 'Document'],
    [
        ['Basisveiligheid', 'Alle medewerkers', 'Indiensttreding + jaarlijks', 'HSE Policy-V1'],
        ['Gevaarlijke stoffen', 'Operatie', 'Indiensttreding + jaarlijks', 'PE-240-01 V1'],
        ['PBM-gebruik', 'Alle medewerkers', 'Indiensttreding + jaarlijks', 'PS-201-NL V1.0'],
        ['BHV/EHBO', 'Benoemde BHV\'ers', 'Jaarlijks', 'BNP-V1'],
        ['MoC-procedure', 'HSE + leidinggevenden', 'Jaarlijks', 'PE-202-01 V1'],
        ['REACH-awareness', 'Alle medewerkers', 'Jaarlijks', 'REACH registratie doc'],
    ]
)

# 12
add_heading_styled('12. Kwaliteitscontrole (QC)', 1)
for b in [
    'Documentreview: alle HSE-documenten jaarlijks reviewed.',
    'Procedure-audits: halfjaarlijks interne audit op SOP-naleving.',
    'Inspecties: wekelijkse HSE-inspectie werkplek.',
    'Incidentenanalyse: root cause analysis bij elk incident.',
    'Correctieve acties: registratie, opvolging, verifiëren effectiviteit.',
    'Management Review: jaarlijkse beoordeling volledig HSE-systeem.',
]:
    doc.add_paragraph(b, style='List Bullet')

# 13
add_heading_styled('13. Gekoppelde Documenten', 1)
add_table(
    ['Document', 'Nummer', 'Versie', 'Relatie'],
    [
        ['HSE Policy', '—', 'V1', 'Kaderstellend beleid'],
        ['BNP', '—', 'V1', 'Noodprocedures'],
        ['PBM-beleid', 'PS-201-NL', 'V1.0', 'PBM-selectie en -gebruik'],
        ['Management of Change', 'PE-202-01', 'V1', 'Wijzigingenbeheer'],
        ['Gevaarlijke stoffen procedure', 'PE-240-01', 'V1', 'Chemical management'],
        ['RI&E-instrument', '—', 'Actueel', 'Risico-inventarisatie'],
        ['REACH-registratie projectplan', '—', 'Actueel', 'REACH-compliance'],
        ['Haalbaarheidsstudie', '—', 'V04', 'Locatie-ontwikkeling'],
        ['Vergunningsdocumenten', '—', 'Divers', 'Vergunningen'],
        ['Registration Chemicals MASTER', '—', 'v2.1.0', 'Chemicals register'],
        ['Fact sheet Ash 2025', '—', 'V1.0', 'SARU-ash eigenschappen'],
        ['Draft PvA opstart', '—', 'Actueel', 'Opstart R&D-fase'],
    ]
)

# Footer
doc.add_paragraph()
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run('JvG Consultancy — Master SOP 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_MasterSOP_Phoenix_Metals_D4_v2.0.docx')
print('D4 v2.0 generated successfully')
