#!/usr/bin/env python3
"""Genereer PGS 15 Beleidsdocument Opslagveiligheid — Phoenix Metals B.V. v1.0"""

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

LOGO = '/root/projects/jg/assets/branding/jvg-logo-white-medium.png'

doc = Document()

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

DARK_BLUE = RGBColor(0, 51, 102)
ORANGE = RGBColor(255, 102, 0)
WHITE = RGBColor(255, 255, 255)
GREY = RGBColor(100, 100, 100)

for level in range(1, 4):
    hs = doc.styles[f'Heading {level}']
    hs.font.color.rgb = DARK_BLUE
    hs.font.name = 'Calibri'
    hs.font.bold = True
    if level == 1:
        hs.font.size = Pt(16)
    elif level == 2:
        hs.font.size = Pt(14)
    else:
        hs.font.size = Pt(12)

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(headers, rows):
    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, '003366')
    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_para(text, bold=False, italic=False):
    p = doc.add_paragraph()
    r = p.add_run(text)
    r.bold = bold
    r.italic = italic
    return p

# ═══════════════════════════════════════
# HEADER + FOOTER
# ═══════════════════════════════════════
section = doc.sections[0]
section.page_height = Cm(29.7)
section.page_width = Cm(21.0)
section.top_margin = Cm(2.5)
section.bottom_margin = Cm(2.0)
section.left_margin = Cm(2.5)
section.right_margin = Cm(2.5)

# Header with logo
header = section.header
header.is_linked_to_previous = False
hp = header.paragraphs[0]
hp.alignment = WD_ALIGN_PARAGRAPH.LEFT
run = hp.add_run()
run.add_picture(LOGO, width=Inches(0.79), height=Inches(0.71))
r2 = hp.add_run('    PGS 15:2025 — Phoenix Metals B.V.')
r2.font.size = Pt(9)
r2.font.color.rgb = DARK_BLUE
r2.bold = True

# Footer
footer = section.footer
footer.is_linked_to_previous = False
fp = footer.paragraphs[0]
fp.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = fp.add_run('PGS15 Beleidsdocument Opslagveiligheid v1.0 — 27 april 2026 — Pagina ')
r.font.size = Pt(8)
r.font.color.rgb = GREY
# Page number field
fldChar1 = OxmlElement('w:fldChar')
fldChar1.set(qn('w:fldCharType'), 'begin')
instrText = OxmlElement('w:instrText')
instrText.set(qn('xml:space'), 'preserve')
instrText.text = ' PAGE '
fldChar2 = OxmlElement('w:fldChar')
fldChar2.set(qn('w:fldCharType'), 'end')
r2 = fp.add_run()
r2.font.size = Pt(8)
r2.font.color.rgb = GREY
r2._r.append(fldChar1)
r2._r.append(instrText)
r2._r.append(fldChar2)

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

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = p.add_run('━' * 40)
r.font.color.rgb = ORANGE
r.font.size = Pt(14)

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = p.add_run('BELEIDSDOCUMENT OPSLAGVEILIGHEID')
r.bold = True
r.font.size = Pt(26)
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(20)
r.font.color.rgb = DARK_BLUE

doc.add_paragraph()

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = p.add_run('Opslag Gevaarlijke Stoffen conform PGS 15:2025')
r.font.size = Pt(13)
r.font.color.rgb = GREY

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = p.add_run('Bepaald opslagniveau: C-niveau')
r.font.size = Pt(13)
r.font.color.rgb = ORANGE
r.bold = True

doc.add_paragraph()

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = p.add_run('━' * 40)
r.font.color.rgb = ORANGE
r.font.size = Pt(14)

doc.add_paragraph()

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = p.add_run('Documentcode: PM-PGS15-BEL-001')
r.font.size = Pt(11)

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = p.add_run('Versie: 1.0')
r.font.size = Pt(11)

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

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = p.add_run('Classificatie: Vertrouwelijk — Intern')
r.font.size = Pt(11)
r.italic = True

doc.add_paragraph()
doc.add_paragraph()

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

doc.add_page_break()

# ═══════════════════════════════════════
# REVISIEGESCHIEDENIS
# ═══════════════════════════════════════
doc.add_heading('Revisiegeschiedenis', level=1)
add_table(
    ['Versie', 'Datum', 'Auteur', 'Wijzigingen'],
    [['1.0', '27-04-2026', 'J. van Gemert', 'Eerste officiële uitgave beleidsdocument opslagveiligheid PGS 15:2025']]
)

doc.add_paragraph()

# ═══════════════════════════════════════
# INHOUDSOPGAVE
# ═══════════════════════════════════════
doc.add_heading('Inhoudsopgave', level=1)
toc = [
    '1. Doel en Scope',
    '2. Visie en Missie',
    '3. Beleidsuitgangspunten',
    '4. Verantwoordelijkheden (RACI)',
    '5. Opslagniveau C',
    '6. CMR-Beleid V₂O₅',
    '7. Seveso / BRZO',
    '8. Revisie en Beheer',
]
for item in toc:
    p = doc.add_paragraph(item)
    p.paragraph_format.space_after = Pt(2)

doc.add_page_break()

# ═══════════════════════════════════════
# 1. DOEL EN SCOPE
# ═══════════════════════════════════════
doc.add_heading('1. Doel en Scope', level=1)

doc.add_heading('1.1 Doel', level=2)
doc.add_paragraph(
    'Dit beleidsdocument definieert het kader voor veilige opslag van gevaarlijke stoffen bij '
    'Phoenix Metals B.V., conform PGS 15:2025 (Publicatie 565, versie 1.0, januari 2025). '
    'Het document is richtinggevend voor alle medewerkers en derden die werken met of in de '
    'nabijheid van gevaarlijke stoffen op de Phoenix Metals locatie.'
)

doc.add_heading('1.2 Scope', level=2)
doc.add_paragraph(
    'Dit beleid is van toepassing op alle opslag van gevaarlijke stoffen op de Phoenix Metals '
    'locatie (Tata Steel terrein, IJmuiden), inclusief:'
)
items = [
    'Inkomende goederen: grondstoffen (zwavelzuur, natriumhydroxide, calciumoxide, aluminiumsulfaat)',
    'Eindproducten: vanadium(V) oxide (V₂O₅), vanadium-elektrolyt',
    'Tussenproducten: vanadiumhoudende extractieoplossingen',
    'Bijproducten: ijzerverbindingen, calciumverbindingen',
    'Alle medewerkers, uitzendkrachten, stagiaires en onderaannemers op de locatie',
]
for item in items:
    doc.add_paragraph(item, style='List Bullet')

doc.add_heading('1.3 Wettelijk kader', level=2)
add_table(
    ['Wetgeving', 'Relevantie'],
    [
        ['PGS 15:2025 (Publicatie 565)', ' Primaire norm voor opslag gevaarlijke stoffen'],
        ['Arbowet / Arbobesluit art. 4.1c, 4.1d', 'Gevaarlijke stoffen op de werkplek'],
        ['Omgevingswet / Bal art. 4.1012', 'Opslag gevaarlijke stoffen (vergunningplicht)'],
        ['ADR', 'Transportclassificatie — basis voor opslagclassificatie'],
        ['CLP-verordening (EG 1272/2008)', 'Classificatie, etikettering, verpakking'],
    ]
)

doc.add_page_break()

# ═══════════════════════════════════════
# 2. VISIE EN MISSIE
# ═══════════════════════════════════════
doc.add_heading('2. Visie en Missie', level=1)

doc.add_heading('2.1 Visie', level=2)
doc.add_paragraph(
    'Phoenix Metals streeft naar een opslagomgeving waarin gevaarlijke stoffen verantwoord, veilig '
    'en conform de geldende wet- en regelgeving worden opgeslagen en beheerd. Elke medewerker keert '
    'gezond huis.'
)

doc.add_heading('2.2 Missie', level=2)
doc.add_paragraph(
    'Het beheersen van risico\'s verbonden aan de opslag van gevaarlijke stoffen door systeemmatige '
    'toepassing van PGS 15:2025, met specifieke aandacht voor CMR-stoffen en acuut toxische stoffen '
    'in het productieproces van vanadium uit secundaire grondstoffen.'
)

# ═══════════════════════════════════════
# 3. BELEIDSUITGANGSPUNTEN
# ═══════════════════════════════════════
doc.add_heading('3. Beleidsuitgangspunten', level=1)

doc.add_heading('3.1 Hiërarchie van beheersmaatregelen', level=2)
doc.add_paragraph(
    'Phoenix Metals hanteert de volgende hiërarchie bij het beheersen van opslagrisico\'s:'
)
measures = [
    'Eliminatie — vervanging van de gevaarlijke stof door een minder gevaarlijk alternatief',
    'Technische maatregelen — constructieve eisen, ventilatie, afvangsystemen, branddetectie',
    'Organisatorische maatregelen — procedures, scheiding, registratie, training',
    'Persoonlijke beschermingsmiddelen — als laatste middel, nooit als primair beheersmiddel',
]
for i, m in enumerate(measures, 1):
    doc.add_paragraph(f'{i}. {m}')

doc.add_heading('3.2 Continu verbeteren (PDCA)', level=2)
doc.add_paragraph(
    'Phoenix Metals hanteert de Plan-Do-Check-Act cyclus voor opslagveiligheid:'
)
pdca = [
    'Plan: Risico-inventarisatie, niveaubepaling, maatregelenplan',
    'Do: Implementatie maatregelen, training, procedures',
    'Check: Periodieke inspecties, audits, compliantiemonitoring',
    'Act: Bijsturing op basis van bevindingen en incidenten',
]
for item in pdca:
    doc.add_paragraph(item, style='List Bullet')

doc.add_heading('3.3 Opslagniveau', level=2)
doc.add_paragraph(
    'Het bepaalde opslagniveau is C-niveau op basis van de aanwezigheid van vanadium(V) oxide '
    '(V₂O₅) als beoogd eindproduct. Onderbouwing (ref. niveaubepaling v2.0):'
)
doc.add_paragraph('V₂O₅ is geclassificeerd als Acute Tox. Cat. 2 (H330) → CLP-route triggert C-niveau vanaf 1 kg', style='List Bullet')
doc.add_paragraph('V₂O₅ is geclassificeerd als ADR 6.1 VG II → C-niveau tot 10 ton', style='List Bullet')
doc.add_paragraph('C-niveau vereist: Wbdbo 60 min, branddetectie (NEN 2535), productopvang', style='List Bullet')

doc.add_page_break()

# ═══════════════════════════════════════
# 4. VERANTWOORDELIJKHEDEN (RACI)
# ═══════════════════════════════════════
doc.add_heading('4. Verantwoordelijkheden (RACI)', level=1)

doc.add_paragraph(
    'Onderstaande RACI-tabel definieert de verantwoordelijkheden voor opslagveiligheid. '
    'R = Responsible (uitvoering), A = Accountable (eindverantwoordelijk), C = Consulted, I = Informed.'
)

add_table(
    ['Activiteit', 'Directie', 'HSE Manager', 'Operator', 'Inkoop'],
    [
        ['Beleid opslagveiligheid vaststellen', 'A', 'R', 'I', 'C'],
        ['Niveaubepaling uitvoeren', 'I', 'R', 'C', 'I'],
        ['Constructieve eisen implementeren', 'A', 'R', 'C', 'I'],
        ['Stoffenregistratie bijhouden', 'I', 'A', 'R', 'C'],
        ['SDS-verwerving en beheer', 'I', 'A', 'I', 'R'],
        ['CMR-register bijhouden', 'I', 'R', 'C', 'I'],
        ['Periodieke inspecties', 'I', 'R', 'C', 'I'],
        ['Training medewerkers', 'A', 'R', '—', 'I'],
        ['Calamiteiten afhandeling', 'A', 'R', 'R', 'I'],
        ['Jaarlijkse audit', 'A', 'R', 'C', 'C'],
    ]
)

doc.add_paragraph()

doc.add_heading('4.1 Directie', level=2)
items = [
    'Eindverantwoordelijkheid voor opslagveiligheid',
    'Goedkeuring beleid en budget',
    'Borging voldoening aan wettelijke eisen',
]
for item in items:
    doc.add_paragraph(item, style='List Bullet')

doc.add_heading('4.2 HSE Manager / Preventiemedewerker', level=2)
items = [
    'Uitvoering en onderhoud opslagveiligheidsbeleid',
    'Niveaubepaling en compliantiemonitoring',
    'Advisering bij nieuwe stoffen en proceswijzigingen',
    'Periodieke inspecties en audits',
    'Contact met toezichthouders',
]
for item in items:
    doc.add_paragraph(item, style='List Bullet')

doc.add_heading('4.3 Procesoperator / Magazijnmedewerker', level=2)
items = [
    'Opvolging procedures en werkinstructies',
    'Melden van afwijkingen en incidenten',
    'Correct gebruik PBM\'s',
    'Huisregels opslagruimte naleven',
]
for item in items:
    doc.add_paragraph(item, style='List Bullet')

doc.add_heading('4.4 Inkoper / Logistiek', level=2)
items = [
    'Aanvragen SDS bij leveranciers vóór eerste levering',
    'Stoffenregistratie bijwerken bij nieuwe leveringen',
    'Transportveiligheid (ADR) borgen',
]
for item in items:
    doc.add_paragraph(item, style='List Bullet')

doc.add_page_break()

# ═══════════════════════════════════════
# 5. OPSLAGNIVEAU C
# ═══════════════════════════════════════
doc.add_heading('5. Opslagniveau C', level=1)

doc.add_paragraph(
    'Op basis van de niveaubepaling v2.0 is het verplichte opslagniveau voor Phoenix Metals '
    'vastgesteld op C-niveau. De bepalende factor is de aanwezigheid van V₂O₅ (vanadium(V) oxide) '
    'als beoogd eindproduct van het hydrometallurgische extractieproces.'
)

doc.add_heading('5.1 Bepalingsonderbouwing', level=2)
add_table(
    ['Factor', 'Resultaat', 'Niveau'],
    [
        ['ADR 8 stoffen geaggregeerd', '~410 kg, onbrandbaar', 'Basisveiligheidsniveau'],
        ['ADR 6.1 (V₂O₅)', '>1 kg verwacht', 'C'],
        ['CLP Acute Tox. 2 (V₂O₅)', '>1 kg verwacht', 'C'],
        ['CLP CMR 1B (V₂O₅)', '>25 kg verwacht', 'C (via ADR)'],
        ['Catch-all', '~415 kg + V₂O₅', 'Onvoldoende'],
        ['Strengste niveau', '', 'C-NIVEAU'],
    ]
)

doc.add_paragraph()

doc.add_heading('5.2 Verplichte constructieve eisen C-niveau', level=2)
add_table(
    ['Eis', 'Vereiste', 'PGS 15 referentie'],
    [
        ['Weerstand branddoorgang (Wbdbo)', '60 minuten (tot 10 ton V₂O₅)', 'Tabel 6'],
        ['Branddetectie', 'NEN 2535', 'M103'],
        ['Brandwerende constructie', 'Wanden en constructie ≥60 min Wbdbo', 'Doel D7'],
        ['Productopvang', 'Grootste individuele vak', 'Tabel 8'],
        ['Basisveiligheidsniveau', 'Volledig van toepassing', '§7'],
    ]
)

doc.add_paragraph()

doc.add_heading('5.3 Schaalniveaus', level=2)
add_table(
    ['V₂O₅ hoeveelheid', 'Niveau (ADR 6.1 VG II)', 'Niveau (CLP Acute Tox. 2)', 'Resultaat'],
    [
        ['1 kg – 1.000 kg', 'C (Wbdbo 60 min)', 'C (Wbdbo 60 min)', 'C'],
        ['1.000 kg – 10.000 kg', 'C (Wbdbo 60 min)', 'A (automatische blussing)', 'A'],
        ['>10.000 kg', 'A (automatische blussing)', 'A', 'A'],
    ]
)

doc.add_paragraph()
add_para('Let op: De drempel voor A-niveau ligt op 1.000 kg V₂O₅ via de CLP Acute Tox. 2 route, NIET op 1.000 kg via ADR. De ADR-drempel voor A-niveau is >10.000 kg.', bold=False, italic=True)

doc.add_page_break()

# ═══════════════════════════════════════
# 6. CMR-BELEID V₂O₅
# ═══════════════════════════════════════
doc.add_heading('6. CMR-Beleid V₂O₅', level=1)

doc.add_heading('6.1 Uitgangspunt', level=2)
doc.add_paragraph(
    'Phoenix Metals minimaliseert blootstelling aan CMR-stoffen (Carcinogeen, Mutageen, '
    'Reprotoxisch) tot het laagst mogelijke niveau (ALARA-principe).'
)

doc.add_heading('6.2 Classificatie V₂O₅', level=2)
doc.add_paragraph('Vanadium(V) oxide (V₂O₅, CAS 1314-62-1) is geclassificeerd als:')
add_table(
    ['Gevarenklasse', 'Categorie', 'H-zin'],
    [
        ['Carcinogeniteit', 'Carc. 1B', 'H350i — Kan kanker veroorzaken bij inademing'],
        ['Reproductietoxiciteit', 'Repr. 2', 'H361fd — Vermoedelijk schadelijk voor de vruchtbaarheid; vermoedelijk schadelijk voor het ongeboren kind'],
        ['Acute toxiciteit', 'Acute Tox. 2', 'H330 — Dodelijk bij inademing'],
        ['Acute toxiciteit', 'Acute Tox. 4', 'H302+H312 — Schadelijk bij slikken en bij contact met de huid'],
        ['Oogletsel', 'Eye Dam. 1', 'H318 — Veroorzaakt ernstig oogletsel'],
        ['Specifieke doelorgaantoxiciteit', 'STOT SE 1', 'H335 — Kan irritatie van de luchtwegen veroorzaken'],
        ['Specifieke doelorgaantoxiciteit', 'STOT RE 1', 'H372 — Veroorzaakt schade aan organen bij langdurige of herhaalde blootstelling'],
    ]
)

doc.add_paragraph()

doc.add_heading('6.3 Maatregelen', level=2)
measures = [
    'V₂O₅ wordt opgeslagen in gesloten, stofvrije verpakkingen — geen open opslag',
    'Afzonderlijk opslagvak of gescheiden zone binnen C-niveau opslagruimte, gescheiden van ADR 8 stoffen (min. 2,4 m of constructieve scheiding)',
    'Specifieke PBM\'s bij handling: P3-ademhalingsbescherming, nitrilen handschoenen (min. 0,5 mm), veiligheidsbril, beschermende kleding',
    'Arbeidsgezondheidskundig onderzoek (AGO) voor alle medewerkers met potentiële blootstelling',
    'Blootstellingsregistratie conform Arbobesluit artikel 4.1d',
    'Procedure conform AI-06 (Kankerverwekkende, mutagene en reprotoxische stoffen)',
]
for i, m in enumerate(measures, 1):
    doc.add_paragraph(f'{i}. {m}')

doc.add_heading('6.4 CMR-register', level=2)
doc.add_paragraph(
    'Phoenix Metals voert een CMR-register waarin alle CMR-stoffen op de locatie zijn opgenomen, '
    'inclusief blootstellingsgegevens en getroffen maatregelen. Het register wordt bijgehouden door '
    'de HSE Manager en jaarlijks geactualiseerd.'
)

doc.add_page_break()

# ═══════════════════════════════════════
# 7. SEVESO / BRZO
# ═══════════════════════════════════════
doc.add_heading('7. Seveso / BRZO', level=1)

doc.add_paragraph(
    'Op basis van de haalbaarheidsstudie (Arcadis, september 2025) zijn de Seveso-drempelwaarden '
    'niet overschreden in de pilot-fase van Phoenix Metals.'
)

add_table(
    ['Stof', 'Seveso categorie', 'Lagedrempel', 'Hoogdrempel', 'Verwachte hoeveelheid', 'Overschreden?'],
    [
        ['Vanadium(V) oxide', 'H2 (Acute Tox. Cat. 2)', '50 ton', '200 ton', '< 50 ton/jaar', 'Nee'],
        ['Zwavelzuur', 'H8 (Corrosief)', '500 ton', '2.000 ton', '< 50 ton', 'Nee'],
        ['Natriumhydroxide', 'H8 (Corrosief)', '500 ton', '2.000 ton', '< 50 ton', 'Nee'],
    ]
)

doc.add_paragraph()
doc.add_paragraph(
    'Conclusie: Phoenix Metals is geen Seveso-inrichting. Een veiligheidsrapport (MVR/AVR) is niet vereist. '
    'De Seveso-status wordt jaarlijks herbeoordeeld bij wijziging van opslaghoeveelheden.'
)

# ═══════════════════════════════════════
# 8. REVISIE EN BEHEER
# ═══════════════════════════════════════
doc.add_heading('8. Revisie en Beheer', level=1)

doc.add_heading('8.1 Revisiecyclus', level=2)
add_table(
    ['Document', 'Frequentie', 'Verantwoordelijke'],
    [
        ['Beleidsdocument Opslagveiligheid', 'Jaarlijks of bij wijziging', 'HSE Manager'],
        ['Stoffenlijst / Niveaubepaling', 'Bij wijziging stofinventaris', 'HSE Manager'],
        ['Compliance toetsing', 'Jaarlijks', 'HSE Manager'],
        ['Procedures en werkinstructies', 'Bij wijziging of incident', 'HSE Manager'],
    ]
)

doc.add_paragraph()

doc.add_heading('8.2 Triggers voor tussentijdse revisie', level=2)
triggers = [
    'Toevoeging of verwijdering van gevaarlijke stoffen',
    'Wijziging in opslaghoeveelheden (met name V₂O₅)',
    'Proceswijzigingen',
    'Incidenten of bijna-ongelvallen',
    'Wijziging in wet- en regelgeving',
    'Bevindingen uit audits of inspecties',
]
for t in triggers:
    doc.add_paragraph(t, style='List Bullet')

doc.add_heading('8.3 Documentbeheer', level=2)
doc.add_paragraph(
    'Alle documenten worden opgeslagen in het documentbeheersysteem met versienummering. '
    'Vorige versies worden gearchiveerd. Wijzigingen worden gelogd in het changelog. '
    'Alleen de actuele, goedgekeurde versie is geldig.'
)

doc.add_heading('8.4 Distributie', level=2)
doc.add_paragraph(
    'Dit beleid wordt bekendgemaakt aan alle medewerkers via teamvergadering, intranet / '
    'documentbeheersysteem, en waarschuwingssignalering in de opslagruimte.'
)

doc.add_paragraph()

# Handtekeningblok
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = p.add_run('━' * 40)
r.font.color.rgb = ORANGE

doc.add_paragraph()

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = p.add_run('HANDTEKENINGBLOK DIRECTIE')
r.bold = True
r.font.size = Pt(14)
r.font.color.rgb = DARK_BLUE

doc.add_paragraph()

sig_table = doc.add_table(rows=4, cols=2)
sig_table.style = 'Table Grid'
cells = [
    ('Naam:', ''),
    ('Functie:', 'Directeur Phoenix Metals B.V.'),
    ('Handtekening:', ''),
    ('Datum:', ''),
]
for i, (label, val) in enumerate(cells):
    cell_l = sig_table.rows[i].cells[0]
    cell_l.text = label
    for p in cell_l.paragraphs:
        for r in p.runs:
            r.bold = True
            r.font.size = Pt(11)
    cell_r = sig_table.rows[i].cells[1]
    cell_r.text = val
    for p in cell_r.paragraphs:
        for r in p.runs:
            r.font.size = Pt(11)

doc.add_paragraph()

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = p.add_run('EINDE DOCUMENT')
r.bold = True
r.font.color.rgb = DARK_BLUE

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = p.add_run('━' * 40)
r.font.color.rgb = ORANGE

# ── Document properties ──
doc.core_properties.title = 'PGS 15 Beleidsdocument Opslagveiligheid — Phoenix Metals B.V.'
doc.core_properties.author = 'Kas via HQ_05 Office Manager'
doc.core_properties.keywords = 'PGS 15, opslagveiligheid, C-niveau, V₂O₅, CMR, Phoenix Metals'

# ── Opslaan ──
outpath = '/root/projects/jg/2026-pgs15-2025-phoenix-metals/deliverables/docx/PGS15_Beleidsdocument_Opslagveiligheid_v1.0.docx'
doc.save(outpath)
print(f'✅ Opgeslagen: {outpath}')
