#!/usr/bin/env python3
"""PGS 15 Beleidsdocument Policy v1.0 — Phoenix Metals IJmuiden
Generates: PGS15_Beleidsdocument_Policy_v1.0.docx
Target: 3,500+ words
"""

from docx import Document
from docx.shared import Pt, Cm, Inches, RGBColor, Emu
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT
from docx.enum.section import WD_ORIENT
from docx.oxml.ns import qn, nsdecls
from docx.oxml import parse_xml
import os

# ── Config ──
OUTPUT = "/root/projects/jg/2026-pgs15-phoenix-metals/deliverables/docx/PGS15_Beleidsdocument_Policy_v1.0.docx"
LOGO   = "/root/projects/jg/2026-pgs15-phoenix-metals/assets/branding/jvg-consultancy-logo.jpg"
BRAND  = RGBColor(0x00, 0x33, 0x68)  # #003368 → primary blue
GREY   = RGBColor(0x37, 0x41, 0x51)

os.makedirs(os.path.dirname(OUTPUT), exist_ok=True)

doc = Document()

# ── Styles ──
style = doc.styles['Normal']
style.font.name = 'Calibri'
style.font.size = Pt(11)
style.font.color.rgb = RGBColor(0x1F, 0x29, 0x37)
style.paragraph_format.space_after = Pt(6)
style.paragraph_format.line_spacing = 1.15

for level, size in [('Heading 1', 16), ('Heading 2', 13), ('Heading 3', 12)]:
    s = doc.styles[level]
    s.font.name = 'Calibri'
    s.font.size = Pt(size)
    s.font.bold = True
    s.font.color.rgb = BRAND
    s.paragraph_format.space_before = Pt(12)
    s.paragraph_format.space_after = Pt(6)

# ── Helper functions ──
def add_para(text, style='Normal', bold=False, alignment=None):
    p = doc.add_paragraph(text, style=style)
    if bold:
        for r in p.runs:
            r.bold = True
    if alignment:
        p.alignment = alignment
    return p

def add_table(headers, rows, col_widths=None):
    t = doc.add_table(rows=1 + len(rows), cols=len(headers))
    t.style = 'Light Grid Accent 1'
    t.alignment = WD_TABLE_ALIGNMENT.CENTER
    # Header row
    for i, h in enumerate(headers):
        cell = t.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)
                r.font.name = 'Calibri'
    # Data rows
    for ri, row in enumerate(rows):
        for ci, val in enumerate(row):
            cell = t.rows[ri + 1].cells[ci]
            cell.text = str(val)
            for p in cell.paragraphs:
                for r in p.runs:
                    r.font.size = Pt(10)
                    r.font.name = 'Calibri'
    return t

# ── Section setup with header/footer ──
section = doc.sections[0]
section.top_margin = Cm(2.5)
section.bottom_margin = Cm(2.5)
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.RIGHT
if os.path.exists(LOGO):
    run = hp.add_run()
    run.add_picture(LOGO, width=Cm(2.0), height=Cm(1.8))
# Add header text
hp2 = header.add_paragraph()
hr = hp2.add_run("PGS 15 Beleidsdocument — Phoenix Metals IJmuiden | v1.0")
hr.font.size = Pt(8)
hr.font.color.rgb = GREY
hr.font.name = 'Calibri'
hp2.alignment = WD_ALIGN_PARAGRAPH.LEFT

# Footer
footer = section.footer
footer.is_linked_to_previous = False
fp = footer.paragraphs[0]
fp.alignment = WD_ALIGN_PARAGRAPH.CENTER
fr = fp.add_run("JvG Consultancy | Safety • Governance • Advisory | Copyright 2026")
fr.font.size = Pt(8)
fr.font.color.rgb = GREY
fr.font.name = 'Calibri'

# ════════════════════════════════════════════
# VOORBLAD
# ════════════════════════════════════════════
doc.add_paragraph("")
doc.add_paragraph("")
if os.path.exists(LOGO):
    p_logo = doc.add_paragraph()
    p_logo.alignment = WD_ALIGN_PARAGRAPH.CENTER
    run = p_logo.add_run()
    run.add_picture(LOGO, width=Cm(5.0), height=Cm(4.48))

p_title = doc.add_paragraph()
p_title.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = p_title.add_run("BELEIDSDOCUMENT\nPGS 15 OPSLAG GEVAARLIJKE STOFFEN")
r.bold = True
r.font.size = Pt(24)
r.font.color.rgb = BRAND
r.font.name = 'Calibri'

p_sub = doc.add_paragraph()
p_sub.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = p_sub.add_run("Phoenix Metals IJmuiden")
r.font.size = Pt(16)
r.font.color.rgb = BRAND
r.font.name = 'Calibri'

doc.add_paragraph("")

meta_info = [
    ("Project", "2026-pgs15-phoenix-metals"),
    ("Documenttype", "Beleidsdocument — Opslag Gevaarlijke Stoffen"),
    ("Versie", "1.0"),
    ("Datum", "26 april 2026"),
    ("Auteur", "JvG Consultancy — Kas (Director of Operations)"),
    ("Status", "DEFINITIEF"),
    ("Classificatie", "Vertrouwelijk — Intern gebruik"),
    ("Geldigheidsduur", "26 april 2026 — 26 april 2027"),
]
t = doc.add_table(rows=len(meta_info), cols=2)
t.style = 'Light Grid Accent 1'
for i, (k, v) in enumerate(meta_info):
    t.rows[i].cells[0].text = k
    t.rows[i].cells[1].text = v
    for p in t.rows[i].cells[0].paragraphs:
        for r in p.runs:
            r.bold = True
            r.font.size = Pt(11)
            r.font.name = 'Calibri'

doc.add_page_break()

# ════════════════════════════════════════════
# INHOUDSOPGAVE
# ════════════════════════════════════════════
doc.add_heading("Inhoudsopgave", level=1)

toc_items = [
    "1. Doel en Reikwijdte",
    "2. Beleidsverklaring",
    "3. Wettelijk Kader",
    "4. Definities",
    "5. Verantwoordelijkheden",
    "6. Opslagprincipes",
    "7. Risicobeheersing",
    "8. Brandpreventie",
    "9. Opleiding en Deskundigheid",
    "10. Toezicht en Handhaving",
    "11. Documentbeheer",
    "12. Bijlagen",
]
for item in toc_items:
    add_para(item)

doc.add_page_break()

# ════════════════════════════════════════════
# HOOFDSTUK 1 — DOEL EN REIKWJDTE (~350w)
# ════════════════════════════════════════════
doc.add_heading("1. Doel en Reikwijdte", level=1)

add_para(
    "Dit beleidsdocument definieert het kader voor de veilige opslag van verpakte gevaarlijke stoffen "
    "bij Phoenix Metals IJmuiden, in volledige naleving van de Publicatiereeks Gevaarlijke Stoffen 15 "
    "(PGS 15:2025). Het document dient als het primaire sturingsinstrument voor alle medewerkers, "
    "leidinggevenden en externe partijen die betrokken zijn bij het opslaan, verplaatsen of beheren "
    "van gevaarlijke stoffen op de Phoenix Metals-locatie. Het beleid is goedgekeurd door de directie "
    "en heeft bindende werking voor alle organisatielagen binnen het bedrijf."
)

add_para(
    "De aanleiding voor dit beleidsdocument is de vaststelling dat de huidige opslagconfiguratie "
    "bij Phoenix Metals niet volledig compliant is met de stoffenscheidingseisen uit PGS 15 Bijlage E, "
    "Tabel 9. Met name de gezamenlijke opslag van natriumhydroxide (NaOH 50%, base) en zwavelzuur "
    "(H₂SO₄, diverse concentraties) in één rack vormt een niet-acceptabel risico. De exotherme reactie "
    "tussen deze zuren en basen vereist scheiding op niveau A (apart brandcompartiment of equivalente "
    "maatregel). Dit beleid stelt de kaders om dergelijke risico's structureel te voorkomen."
)

add_para(
    "Het geldigheidsgebied omvat de gehele locatie van Phoenix Metals IJmuiden, waaronder de "
    "opslagfaciliteit (rack in front of lab), laboratoriumruimten, en alle overige gebieden waar "
    "gevaarlijke stoffen worden opgeslagen, gebruikt of getransporteerd. Het beleid is van toepassing "
    "op alle medewerkers in vaste dienst, uitzendkrachten, stagiaires, aannemers en bezoekers die "
    "toegang hebben tot gebieden waar gevaarlijke stoffen aanwezig zijn. Externe partijen zoals "
    "transporteurs en leveranciers dienen kennis te nemen van de relevante bepalingen uit dit beleid "
    "voor zover deze betrekking hebben op hun activiteiten op de locatie."
)

add_para(
    "De relatie met PGS 15:2025 is inherent: dit beleid implementeert de eisen uit de herziene "
    "Publicatiereeks Gevaarlijke Stoffen 15, versie 1.0, die door het Ministerie van Infrastructuur en "
    "Waterstaat is erkend als de standaard voor opslag van verpakte gevaarlijke stoffen. Waar PGS 15 "
    "prestatiegerichte eisen stelt (maatregelen op resultaatbasis), specificeert dit beleid de concrete "
    "uitvoering daarvan binnen de Phoenix Metals-context. Bij conflicten tussen dit beleid en PGS 15 "
    "gaat PGS 15 als hogere norm voor. Dit document wordt jaarlijks herzien en waar nodig aangepast "
    "aan gewijzigde wetgeving, inzichten of bedrijfsomstandigheden."
)

# ════════════════════════════════════════════
# HOOFDSTUK 2 — BELEIDSVERKLARING (~250w)
# ════════════════════════════════════════════
doc.add_heading("2. Beleidsverklaring", level=1)

add_para(
    "Phoenix Metals IJmuiden stelt de veilige opslag van gevaarlijke stoffen voorop als een "
    "ononderhandelbare randvoorwaarde voor haar bedrijfsvoering. De directie verklaart hierbij "
    "uitdrukkelijk dat veiligheid prevaleert boven productie-efficiëntie, kostenoverwegingen en "
    "planning. Er wordt een nultolerantiebeleid gehanteerd ten aanzien van bewuste schendingen van "
    "de opslagvoorschriften zoals vastgelegd in dit document en de onderliggende PGS 15-richtlijn. "
    "Elke medewerker die gevaarlijke stoffen opslaat, verplaatst of hanteert draagt persoonlijke "
    "verantwoordelijkheid voor de naleving van dit beleid."
)

add_para(
    "Het management van Phoenix Metals committeert zich aan de volgende principes: het leveren van "
    "voldoende middelen voor veilige opslag, het faciliteren van adequate opleiding en training van "
    "alle betrokken medewerkers, het periodiek uitvoeren van risicobeoordelingen, en het direct "
    "adresseren van geconstateerde non-compliance. De directie zal minimaal éénmaal per kwartaal "
    "de opslagsituatie evalueren en de resultaten hiervan vastleggen in het managementreview-verslag. "
    "Bij wijzigingen in het chemisch register — toevoeging of verwijdering van stoffen, wijziging "
    "van volumes — wordt dit beleid actueel gehouden en waar nodig aangescherpt."
)

add_para(
    "De kernboodschap van dit beleid is eenduidig: gevaarlijke stoffen worden uitsluitend opgeslagen "
    "in daarvoor bestemde voorzieningen, gescheiden volgens de compatibiliteitsmatrix uit PGS 15 "
    "Bijlage E, met adequate vloeistofopvang en toegankelijk voor hulpdiensten. Afwijkingen worden "
    "niet getolereerd en leiden tot corrigerende maatregelen. Het beleid geldt onverkort voor alle "
    "locaties, activiteiten en personen onder de verantwoordelijkheid van Phoenix Metals."
)

# ════════════════════════════════════════════
# HOOFDSTUK 3 — WETTELIJK KADER (~450w)
# ════════════════════════════════════════════
doc.add_heading("3. Wettelijk Kader", level=1)

add_para(
    "De opslag van gevaarlijke stoffen bij Phoenix Metals is onderworpen aan een complex geheel "
    "van nationale en Europese regelgeving. Dit hoofdstuk geeft een overzicht van de primaire "
    "wettelijke kaders die van toepassing zijn, hun onderlinge relaties, en de specifieke relevantie "
    "voor de Phoenix Metals-locatie. De belangrijkste wetgeving is de Omgevingswet, die per 1 januari "
    "2024 de Wet milieubeheer, de Wet algemene bepalingen omgevingsrecht en diverse andere wetten "
    "heeft samengevoegd. Binnen de Omgevingswet zijn het Besluit bouwwerken leefomgeving (Bbl) en "
    "het Besluit kwaliteit leefomgeving (Bkl) de primaire uitvoeringsinstrumenten voor opslag van "
    "gevaarlijke stoffen."
)

add_para(
    "PGS 15:2025 fungeert als de primaire richtlijn voor opslag van verpakte gevaarlijke stoffen. "
    "Deze publicatiereeks is door het Ministerie van Infrastructuur en Waterstaat aangewezen als "
    "erkende richtlijn en heeft daarmee een formele status bij de handhaving door Omgevingsdiensten "
    "en andere toezichthouders. PGS 15 hanteert een gelaagd systeem van veiligheidsniveaus (basis, "
    "A, B, C) waarbij het vereiste niveau afhankelijk is van de aard en hoeveelheid opgeslagen stoffen. "
    "Voor Phoenix Metals, met circa 300 liter ADR-klasse 8 stoffen, geldt het basisveiligheidsniveau "
    "als toereikend, waarbij de stoffenscheidingseis (Maatregel 35, Bijlage E) altijd en onvoorwaardelijk "
    "van toepassing is, ongeacht het veiligheidsniveau."
)

add_para(
    "De Arbowet (Wet van 9 oktober 2017, Stb. 2017, 433) en het Arbobesluit stellen eisen aan de "
    "arbeidsomstandigheden bij werkzaamheden met gevaarlijke stoffen. Artikel 4.1c van het Arbobesluit "
    "verplicht de werkgever tot het uitvoeren van een Risico-Inventarisatie en -Evaluatie (RI&E) "
    "waarin de risico's van blootstelling aan gevaarlijke stoffen systematisch in kaart worden "
    "gebracht. De opslag van stoffen is een integraal onderdeel van deze RI&E. Daarnaast schrijft "
    "de Arbowet voor dat medewerkers die werken met of in de nabijheid van gevaarlijke stoffen "
    "adequaat geïnstrueerd en opgeleid moeten zijn."
)

add_para(
    "Het ADR (Accord européen relatif au transport international des marchandises Dangereuses par Route) "
    "is primair gericht op het vervoer van gevaarlijke stoffen over de weg, maar de classificatie "
    "die het ADR hanteert (indeling in klassen en verpakkinggroepen) vormt de basis voor de "
    "opslagclassificatie in PGS 15. Bij Phoenix Metals betreft het uitsluitend ADR-klasse 8 "
    "(bijtende stoffen) in verpakkinggroep II. De niet-ADR-geregistreerde stoffen (aluminiumsulfaat "
    "en calciumoxide) worden beoordeeld op basis van hun intrinsieke eigenschappen conform de "
    "CLP-verordening."
)

add_para(
    "De CLP-Verordening (EG 1272/2008) regelt de classificatie, etikettering en verpakking van "
    "stoffen en mengsels binnen de Europese Unie. De REACH-Verordening (EG 1907/2006) verplicht "
    "tot registratie, evaluatie en autorisatie van chemische stoffen en eist dat veiligheidsinformatiebladen "
    "(VIB/SDS) beschikbaar zijn voor alle gevaarlijke stoffen. Phoenix Metals beschikt over een "
    "chemisch register met zes geregistreerde stoffen en dient te zorgen dat voor elke stof een "
    "actueel VIB raadpleegbaar is op de werkplek."
)

add_table(
    ["Wetgeving / Richtlijn", "Relevantie Phoenix Metals", "Primaire Plicht"],
    [
        ["PGS 15:2025", "Opslag verpakte gevaarlijke stoffen — primaire richtlijn", "Stoffenscheiding, veiligheidsniveau, lekbakken"],
        ["Omgevingswet (Bbl/Bkl)", "Brandcompartimentering, externe veiligheid", "Voldoen aan bouwkundige eisen opslagruimte"],
        ["Arbowet / Arbobesluit art. 4.1c", "RI&E, werkomstandigheden", "RI&E uitvoeren, personeel instrueren"],
        ["ADR", "Transportclassificatie → opslagklasse", "Correcte classificatie stoffen"],
        ["CLP (EG 1272/2008)", "Classificatie, etikettering, verpakking", "Correcte etikettering verpakkingen"],
        ["REACH (EG 1907/2006)", "Registratie, SDS, risicobeheer", "VIB/SDS beschikbaar per stof"],
    ]
)

# ════════════════════════════════════════════
# HOOFDSTUK 4 — DEFINITIES (~250w)
# ════════════════════════════════════════════
doc.add_heading("4. Definities", level=1)

add_para(
    "Ter voorkoming van interpretatieverschien hanteert dit beleidsdocument de onderstaande definities. "
    "Deze definities zijn zoveel mogelijk afgestemd op de terminologie uit PGS 15:2025 en de relevante "
    "wetgeving. Waar termen in meerdere bronnen verschillend gedefinieerd worden, prevaleert de "
    "definitie uit PGS 15."
)

add_table(
    ["Term", "Definitie"],
    [
        ["ADR", "Accord européen relatif au transport international des marchandises Dangereuses par Route; Europees verdrag voor vervoer gevaarlijke stoffen over de weg"],
        ["ADR-klasse 8", "Bijtende stoffen die door chemische werking huid- of oogletsel kunnen veroorzaken bij contact"],
        ["Bbl", "Besluit bouwwerken leefomgeving; onderdeel van de Omgevingswet met eisen voor bouwwerken"],
        ["Brandcompartiment", "Door brandwerende constructies afgesloten ruimtedeel waarbinnen brand zich gedurende de vereiste weerstandstijd niet kan verspreiden"],
        ["CMR-stof", "Carcinogene, mutagene of reprotoxische stof conform CLP-Verordening"],
        ["Compatibiliteitsmatrix", "Tabel 9 uit PGS 15 Bijlage E die aangeeft welke stofcombinaties gescheiden opgeslagen moeten worden"],
        ["Gevaarlijke stof", "Stof of mengsel dat voldoet aan de classificatiecriteria van de CLP-Verordening"],
        ["Lekbak", "Opvangvoorziening ontworpen om lekkage van vloeibare stoffen op te vangen, capaciteit minimaal 110% van het grootste verpakkingsvolume"],
        ["MW1 (Zorgplicht)", "Maatregel 1 uit PGS 15: de houder van een inrichting is verplicht veilige opslag aantoonbaar op orde te hebben"],
        ["Nultolerantie", "Beleid waarbij geen enkele bewuste afwijking van de geldende opslagvoorschriften wordt geaccepteerd"],
        ["PGS 15", "Publicatiereeks Gevaarlijke Stoffen 15: richtlijn voor opslag van verpakte gevaarlijke stoffen"],
        ["RI&E", "Risico-Inventarisatie en -Evaluatie; systematische inventarisatie van arbeidsrisico's conform Arbowet"],
        ["SVHC", "Substance of Very High Concern; stof van zeer hoge zorg conform REACH-artikel 57"],
        ["Vak (compartiment)", "Binnen een opslagruimte afgebakend deel waarbinnen stoffen van eenzelfde ADR-klasse worden opgeslagen"],
        ["Veiligheidsniveau", "Classificatie van opslageisen (basis, A, B, C) afhankelijk van stofhoeveelheid en -eigenschappen"],
        ["Verpakkinggroep (VG)", "Indeling van gevaarlijke stoffen in VG I (hoog gevaar), VG II (middelmatig gevaar) en VG III (laag gevaar)"],
        ["VIB / SDS", "Veiligheidsinformatieblad / Safety Data Sheet; document met veiligheidsinformatie over een stof"],
        ["VN (Veiligheidsniveau)", "Vereist niveau van brandwerendheid en aanvullende veiligheidsmaatregelen volgens PGS 15 Tabel 6"],
        ["Wbdbo", "Weerstandsbeginsel brandwerendheid bij brandoverslag; de tijd in minuten dat een constructie branddoorbraan tegenhoudt"],
        ["Zuur-base scheiding", "Scheiding van zure en basische stoffen om exotherme neutralisatiereacties te voorkomen"],
    ]
)

# ════════════════════════════════════════════
# HOOFDSTUK 5 — VERANTWOORDELIJKHEDEN (~550w)
# ════════════════════════════════════════════
doc.add_heading("5. Verantwoordelijkheden", level=1)

add_para(
    "Een effectief opslagbeleid vereist een eenduidige verdeling van verantwoordelijkheden. "
    "Phoenix Metals hanteert een RACI-model (Responsible, Accountable, Consulted, Informed) om "
    "voor elke taak helder te maken wie verantwoordelijk is, wie eindverantwoordelijk is, wie "
    "wordt geraadpleegd en wie wordt geïnformeerd. De onderstaande RACI-matrix geldt voor alle "
    "opslaggerelateerde taken binnen de organisatie. Afwijkingen op deze matrix zijn uitsluitend "
    "mogelijk met schriftelijke goedkeuring van de Directie."
)

raci_headers = ["Taak", "Directie", "HSEQ-coördinator", "Magazijnmeester", "Medewerkers", "Externe adviseur"]
raci_rows = [
    ["Beleid opstellen en goedkeuren", "A", "R", "C", "I", "C"],
    ["Chemisch register bijhouden", "I", "A", "R", "C", "I"],
    ["Stoffenscheiding uitvoeren", "I", "C", "A", "R", "I"],
    ["Lekbakken plaatsen en inspecteren", "I", "C", "A", "R", "I"],
    ["RI&E uitvoeren en actualiseren", "A", "R", "C", "C", "C"],
    ["Opleiding en training verzorgen", "A", "R", "I", "R", "I"],
    ["Inspecties en audits uitvoeren", "I", "A", "C", "C", "R"],
    ["Noodplan opstellen en oefenen", "A", "R", "C", "R", "C"],
    ["SDS/VIB beschikbaar stellen", "I", "A", "R", "C", "I"],
    ["Non-compliance melden en opvolgen", "I", "A", "R", "R", "I"],
    ["Calamiteiten afhandelen", "A", "R", "R", "R", "C"],
]

add_para("RACI-matrix opslag gevaarlijke stoffen Phoenix Metals:", bold=True)
add_table(raci_headers, raci_rows)

add_para("")

add_para("Toelichting per rol:", bold=True)

add_para(
    "Directie: De directie draagt de eindverantwoordelijkheid (Accountable) voor het opslagbeleid, "
    "de RI&E, het noodplan en de opleiding van medewerkers. De directie stelt de financiële middelen "
    "beschikbaar die nodig zijn voor de implementatie van dit beleid, waaronder de aanschaf van "
    "lekbakken, etiketten, persoonlijke beschermingsmiddelen en opleidingsmateriaal. De directie "
    "ontvangt rapportages over de compliance-status en neemt de definitieve goedkeuringsbeslissing "
    "bij beleidswijzigingen."
)

add_para(
    "HSEQ-coördinator: De HSEQ-coördinator is verantwoordelijk (Responsible) voor de uitvoering "
    "van de RI&E, het opstellen van het opslagbeleid, het organiseren van trainingen, en het "
    "uitvoeren van interne audits. Deze rol fungeert als centraal aanspreekpunt voor alle "
    "veiligheidsvragen rondom gevaarlijke stoffen. De HSEQ-coördinator rapporteert direct aan de "
    "directie en heeft een onafhankelijke signalingerol bij geconstateerde non-compliance. Bij "
    "wijzigingen in het chemisch register beoordeelt de HSEQ-coördinator de impact op de "
    "stoffenscheiding en het vereiste veiligheidsniveau."
)

add_para(
    "Magazijnmeester: De magazijnmeester is de dagelijkse beheerder van de opslagfaciliteit en "
    "draagt de verantwoordelijkheid voor de fysieke uitvoering van de stoffenscheiding, het plaatsen "
    "en inspecteren van lekbakken, en het actualiseren van het chemisch register. Bij binnenkomst "
    "van nieuwe stoffen controleert de magazijnmeester de etikettering en plaatst de stoffen op de "
    "voorgeschreven locatie conform de compatibiliteitsmatrix. De magazijnmeester rapporteert "
    "wekelijks over de opslagsituatie aan de HSEQ-coördinator."
)

add_para(
    "Medewerkers: Alle medewerkers die werken met of in de nabijheid van gevaarlijke stoffen zijn "
    "verantwoordelijk voor het volgen van de voorschriften uit dit beleid, het dragen van de "
    "voorgeschreven persoonlijke beschermingsmiddelen, en het onmiddellijk melden van afwijkingen, "
    "lekkages of andere onveilige situaties. Medewerkers nemen deel aan de verplichte opleidingen "
    "en instructiesessies en zijn verplicht de opgedane kennis in de praktijk toe te passen."
)

add_para(
    "Externe adviseur: De externe adviseur (JvG Consultancy) wordt geraadpleegd bij het opstellen "
    "van beleid, de uitvoering van de RI&E, en bij complexe compliance-vraagstukken. De adviseur "
    "ondersteunt tevens bij het uitvoeren van onafhankelijke audits en het beoordelen van "
    "schaalbaarheidsscenario's wanneer Phoenix Metals de opslagcapaciteit uitbreidt."
)

# ════════════════════════════════════════════
# HOOFDSTUK 6 — OPSLAGPRINCIPES (~650w)
# ════════════════════════════════════════════
doc.add_heading("6. Opslagprincipes", level=1)

doc.add_heading("6.1 Zorgplicht (MW1)", level=2)

add_para(
    "De zorgplicht, zoals vastgelegd in Maatregel 1 (MW1) van PGS 15, vormt het fundament van het "
    "opslagbeleid. Deze maatregel stelt dat de houder van een inrichting waarbij gevaarlijke stoffen "
    "worden opgeslagen, de verplichting heeft om aantoonbaar veilige opslag te realiseren en te "
    "handhaven. 'Aantoonbaar' betekent dat de houder op verzoek van de toezichthouder kan aantonen "
    "dat de opslag voldoet aan de eisen uit PGS 15. Voor Phoenix Metals vertaalt dit zich in de "
    "verplichting om documentatie aan te leveren waaruit blijkt dat de stoffenscheiding conform "
    "Tabel 9 is geïmplementeerd, lekbakken van voldoende capaciteit aanwezig zijn, en het personeel "
    "adequaat is opgeleid."
)

add_para(
    "De zorgplicht gaat verder dan louter compliance met de letter van de wet. Het vereist een "
    "proactieve houding waarbij potentiële risico's worden geïdentificeerd voordat deze zich "
    "verwezenlijken. Phoenix Metals implementeert deze zorgplicht door middel van periodieke "
    "inspecties (minimaal maandelijks), een actueel chemisch register, en een functionerend "
    "meldingssysteem voor incidenten en near-misses. De HSEQ-coördinator is belast met de "
    "coördinatie van alle zorgplicht-gerelateerde activiteiten."
)

doc.add_heading("6.2 Veiligheidsniveaus", level=2)

add_para(
    "PGS 15 kent een gelaagd systeem van veiligheidsniveaus, waarbij het vereiste niveau afhangt "
    "van de aard en hoeveelheid opgeslagen stoffen. Phoenix Metals valt met circa 300 liter "
    "(ongeveer 390 kg) ADR-klasse 8 stoffen in verpakkinggroep II ver onder alle drempelwaarden "
    "uit Tabel 6 en Tabel 7 van PGS 15. De ondergrens van Tabel 2 bedraagt 2.500 kg per ADR-klasse, "
    "waarmee het huidige volume minder dan 16% van deze ondergrens bedraagt. Het basisveiligheidsniveau "
    "is derhalve toereikend voor de huidige situatie."
)

add_para(
    "Toekomstige uitbreiding van de opslag dient te worden getoetst aan de drempelwaarden uit "
    "PGS 15 Tabel 6. Bij overschrijding van 10.000 kg ADR-8 stoffen wordt veiligheidsniveau B "
    "(60 minuten Wbdbo) vereist. Bij overschrijding van 20.000 kg geldt veiligheidsniveau A "
    "met semi-automatische blussing (Maatregel 96) en branddetectie met doormelding (Maatregel 97). "
    "De HSEQ-coördinator bewaakt deze drempelwaarden en signaleert tijdig wanneer aanvullende "
    "maatregelen noodzakelijk worden."
)

doc.add_heading("6.3 Stoffenscheiding", level=2)

add_para(
    "De stoffenscheidingseis (Maatregel 35, PGS 15 Bijlage E, Tabel 9) is onvoorwaardelijk van "
    "toepassing, ongeacht het veiligheidsniveau en de opgeslagen hoeveelheid. Voor Phoenix Metals "
    "is de kritieke bevinding dat natriumhydroxide 50% (base) en zwavelzuur (diverse concentraties) "
    "NIET in hetzelfde vak mogen worden opgeslagen. Tabel 9 prescribeert scheiding niveau A "
    "(apart brandcompartiment of 5 meter vrije zone) voor de combinatie ADR-8 ↔ ADR-8 wanneer "
    "het betreft een zuur-base combinatie. De exotherme neutralisatiereactie tussen NaOH en H₂SO₄ "
    "kan leiden tot een onbeheersbare warmte-ontwikkeling met splashing van bijtende vloeistof."
)

add_para(
    "Phoenix Metals implementeert de stoffenscheiding als volgt, conform de E.3-uitzondering uit "
    "PGS 15 Bijlage E: (1) Natriumhydroxide 50% wordt opgeslagen in een aparte lekbak binnen een "
    "gemarkeerd vak; (2) Zwavelzuur in alle concentraties (75%, 50%, 25%) wordt opgeslagen in een "
    "aparte lekbak binnen een gemarkeerd vak; (3) De minimale afstand tussen beide vakken bedraagt "
    "2 meter; (4) Calciumoxide wordt apart opgeslagen van alle zwavelzuurproducten (A-scheiding) "
    "wegens het sterke basische karakter van CaO. De vakmarkering wordt gerealiseerd door middel "
    "van vloertape of verf, duidelijk zichtbaar en voorzien van de juiste gevarensymbolen."
)

doc.add_heading("6.4 Vloeistofopvang", level=2)

add_para(
    "Maatregel 30 (M30) uit PGS 15 vereist dat alle vloeibare gevaarlijke stoffen worden opgeslagen "
    "in een voorziening die lekkage opvangt. De capaciteit van de opvangvoorziening (lekbak) moet "
    "ten minste 110% bedragen van het volume van de grootste afzonderlijke verpakking binnen die "
    "lekbak. Bij Phoenix Metals is de grootste verpakking een jerrycan van 25 liter, hetgeen "
    "betekent dat elke lekbak minimaal 27,5 liter capaciteit moet hebben. In de praktijk worden "
    "lekbakken van 30 liter toegepast om een veiligheidsmarge te hanteren."
)

add_para(
    "De lekbakken worden geplaatst op een vlakke, niet-brandbare ondergrond en zijn voorzien van "
    "een rooster of inlegplaat om de verpakkingen vrij te houden van eventuele lekkagevloeistof. "
    "De lekbakken worden maandelijks visueel geïnspecteerd op integriteit en de aanwezigheid van "
    "vloeistof. Bij constatering van vloeistof in een lekbak wordt de HSEQ-coördinator onmiddellijk "
    "geïnformeerd en wordt de lekkage volgens het calamiteitenprotocol afgehandeld. De inspectieresultaten "
    "worden gedocumenteerd in het inspectieformulier opslag gevaarlijke stoffen."
)

doc.add_heading("6.5 Maximum Hoeveelheden", level=2)

add_para(
    "De maximum toegestane hoeveelheid gevaarlijke stoffen per brandcompartiment wordt bepaald door "
    "PGS 15 Tabel 6 en Tabel 7. Phoenix Metals beperkt de totale opslag van ADR-klasse 8 stoffen "
    "tot een maximum van 500 liter, ruim binnen de drempelwaarde van 10.000 kg voor het "
    "basisveiligheidsniveau. De werkvoorraad in het laboratorium wordt beperkt tot één dagverbruik "
    "conform Maatregel 14 (M14) en wordt apart opgeslagen van de hoofdopslag. Overschrijding van "
    "de maximale hoeveelheid is niet toegestaan en vereist voorafgaande goedkeuring van de directie "
    "na raadpleging van de HSEQ-coördinator."
)

add_para(
    "Bij wijziging van het chemisch register — toevoeging van nieuwe stoffen, wijziging van "
    "concentraties of volumes — wordt de impact op de drempelwaarden onmiddellijk beoordeeld. "
    "De magazijnmeester registreert elke wijziging in het chemisch register en stelt de "
    "HSEQ-coördinator in kennis. Indien de nieuwe situatie leidt tot overschrijding van een "
    "drempelwaarde, wordt het beleid geactualiseerd en worden de vereiste aanvullende maatregelen "
    "geïmplementeerd voordat de nieuwe situatie in gebruik wordt genomen."
)

# ════════════════════════════════════════════
# HOOFDSTUK 7 — RISICOBEHEERSING (~450w)
# ════════════════════════════════════════════
doc.add_heading("7. Risicobeheersing", level=1)

add_para(
    "Dit hoofdstuk beschrijft de systematische aanpak van risicobeheersing voor de opslag van "
    "gevaarlijke stoffen bij Phoenix Metals. De risicobeoordeling is gebaseerd op de RI&E-methodiek "
    "zoals voorgeschreven door de Arbowet, aangevuld met de specifieke eisen uit PGS 15. De "
    "risicomatrix hieronder klassificeert risico's op basis van waarschijnlijkheid en effect, "
    "waarbij elke combinatie leidt tot een risicoklasse (laag, matig, hoog, zeer hoog)."
)

risk_headers = ["Risico", "Waarschijnlijkheid", "Effect", "Risicoklasse"]
risk_rows = [
    ["Exotherme reactie zuur-base bij lekkage", "Mogelijk (3)", "Ernstig (4)", "Hoog (12)"],
    ["Blootstelling bijtend middel bij hanteren", "Waarschijnlijk (4)", "Gemiddeld (3)", "Hoog (12)"],
    ["Brand door externe bron (niet-brandbare stoffen)", "Onwaarschijnlijk (2)", "Gering (2)", "Laag (4)"],
]
add_table(risk_headers, risk_rows)

add_para("")

doc.add_heading("7.1 Top-1: Exotherme reactie zuur-base bij lekkage", level=2)

add_para(
    "Preventieve maatregelen: Strenge stoffenscheiding conform Tabel 9 (niveau A); aparte lekbakken "
    "met minimaal 2 meter afstand tussen zuur- en base-vakken; wekelijkse inspectie van "
    "verpakkingsintegriteit; maximaal toegestane opslaghoeveelheid van 500 liter; duidelijke "
    "markering van vakken met gevarensymbolen; instructiekaarten bij het rack met handelingsperspectief "
    "bij lekkage. Alle medewerkers zijn getraind in het herkennen van zuur-base reacties en weten "
    "welke stoffen niet met elkaar in contact mogen komen."
)

add_para(
    "Repressieve maatregelen: Nooddouche en oogspoelvoorziening binnen 10 seconden loopafstand van "
    "de opslaglocatie; persoonlijke beschermingsmiddelen (zuurbestendige handschoenen, veiligheidsbril, "
    "schort) direct beschikbaar bij de opslag; calamiteitenplan met procedures voor lekkage; "
    "neutralisatiemiddelen (bicarbonaat voor zuren, citroenzuur voor basen) in de nabijheid van de "
    "opslag; directe alarmlijn naar de HSEQ-coördinator bij elke lekkage."
)

doc.add_heading("7.2 Top-2: Blootstelling bijtend middel bij hanteren", level=2)

add_para(
    "Preventieve maatregelen: Verplicht gebruik van persoonlijke beschermingsmiddelen (PBM) bij het "
    "hanteren van alle ADR-klasse 8 stoffen: zuur- en bestendige handschoenen (EN 374), "
    "veiligheidsbril (EN 166), en labjas of schort; tilassistentie voor jerrycans boven 10 liter; "
    "werkvoorschriften voor het veilig overpompen en doseren van bijtende vloeistoffen; verbod op "
    "alleen werken bij hantering van concentraties boven 50%. Alle verpakkingen zijn voorzien van "
    "correcte etikettering conform CLP."
)

add_para(
    "Repressieve maatregelen: Nooddouche en oogspoelvoorziening direct beschikbaar; eerste "
    "hulp-box met neutraliserend wasmiddel; procedure voor ontsmetting en medische evacuatie; "
    "contactgegevens van het dichtstbijzijnde ziekenhuis en antigifcentrum (NVIC) beschikbaar bij "
    "de telefoon; jaarlijkse oefening van het lekkage- en blootstellingsprotocol."
)

doc.add_heading("7.3 Top-3: Brand door externe bron", level=2)

add_para(
    "Preventieve maatregelen: Hoewel de opgeslagen ADR-8 stoffen onbrandbaar zijn, kan externe "
    "brand de verpakkingen aantasten en lekkage veroorzaken. Brandpreventie maatregelen omvatten: "
    "verbod op open vuur in de opslagruimte; rookverbod in de gehele faciliteit; brandblusser "
    "(poeder of CO₂) aanwezig binnen 15 meter van de opslag; brandcompartimentering conform Bbl; "
    "netheid en orde in de opslagruimte; geen opslag van brandbare materialen in de directe "
    "omgeving van de gevaarlijke stoffen."
)

add_para(
    "Repressieve maatregelen: Brandblusser (6 kg ABC-poeder of equivalente CO₂-blusser) direct "
    "beschikbaar; evacuatieplan met verzamelpunt; alarmknop binnen handbereik; directe alarmering "
    "van de brandweer via 112 bij brand in of nabij de opslagruimte; up-to-date stoffenlijst "
    "beschikbaar voor de brandweer bij aankomst."
)

# ════════════════════════════════════════════
# HOOFDSTUK 8 — BRANDPREVENTIE (~350w)
# ════════════════════════════════════════════
doc.add_heading("8. Brandpreventie", level=1)

add_para(
    "Brandpreventie is een essentieel onderdeel van het opslagbeleid, ook al betreft het bij "
    "Phoenix Metals uitsluitend onbrandbare bijtende stoffen. Brand in de omgeving van de opslag "
    "kan de verpakkingen aantasten en leiden tot onbeheersbare lekkage. PGS 15 stelt specifieke "
    "eisen aan brandcompartimentering, blusmiddelen en brandwerendheid, afhankelijk van het "
    "veiligheidsniveau."
)

doc.add_heading("8.1 Brandcompartimentering", level=2)

add_para(
    "De opslagruimte bij Phoenix Metals bevindt zich in één brandcompartiment (rack in front of lab). "
    "Conform PGS 15 Maatregel 15 (M15) bedraagt de maximale oppervlakte van een brandcompartiment "
    "voor het basisveiligheidsniveau 1.000 m² bij opslag tot 20.000 kg en 2.500 m² bij meer dan "
    "20.000 kg. De huidige opslagruimte voldoet aan deze eis. Indien Phoenix Metals uitbreidt naar "
    "meer dan 10.000 kg, wordt een brandwerende scheiding van minimaal 60 minuten (Wbdbo 60) "
    "vereist. Dit vereist bouwkundige aanpassingen die tijdig geplend en gerealiseerd moeten worden."
)

add_para(
    "Deuren en openingen in brandwerende constructies moeten zijn voorzien van zelfsluitende, "
    "brandwerende deuren met dezelfde weerstandsklasse als de scheidingswand. Doorvoeringen voor "
    "leidingen en kabels moeten brandwerend worden afgedicht. De brandcompartimentering wordt bij "
    "elke wijziging aan de opslagfaciliteit beoordeeld door de HSEQ-coördinator."
)

doc.add_heading("8.2 Blusmiddelen", level=2)

add_para(
    "Het basisveiligheidsniveau schrijft geen automatisch blussysteem voor, maar wel de aanwezigheid "
    "van voldoende handblusmiddelen. Phoenix Metals plaatst minimaal één brandblusser (ABC-poeder "
    "6 kg of CO₂ 5 kg) binnen 15 meter van de opslaglocatie. De blusmiddelen worden jaarlijks "
    "geïnspecteerd en conform NEN-EN 3 onderhouden. Bij uitbreiding naar veiligheidsniveau A "
    "(meer dan 20.000 kg) wordt een VBB-installatie (vast blusmiddelenberkking) vereist conform "
    "Maatregel 96, inclusief branddetectie met automatische doormelding naar de PAC/RAC conform "
    "Maatregel 97."
)

doc.add_heading("8.3 Eisen Wbdbo", level=2)

add_para(
    "De Weerstandsbeginsel brandwerendheid bij brandoverslag (Wbdbo) definieert de minimaal vereiste "
    "tijd dat een constructie de verspreiding van brand tegengaat. Voor het basisveiligheidsniveau "
    "zijn geen specifieke Wbdbo-eisen van toepassing op de opslagruimte zelf, mits voldaan wordt "
    "aan de eisen van het Besluit bouwwerken leefomgeving (Bbl). Bij overschrijding van de "
    "drempelwaarden voor veiligheidsniveau B of A gelden respectievelijk 60 minuten en 60-90 "
    "minuten Wbdbo. Referentienormen: NEN-EN 13501-2 voor brandwerendheid van constructiedelen, "
    "NEN-EN 13501-1 voor brandgedrag van materialen, en NEN 6069 voor de brandwerendheid van "
    "bouwdelen."
)

# ════════════════════════════════════════════
# HOOFDSTUK 9 — OPLEIDING (~300w)
# ════════════════════════════════════════════
doc.add_heading("9. Opleiding en Deskundigheid", level=1)

add_para(
    "Phoenix Metals waarborgt dat alle medewerkers die betrokken zijn bij de opslag, het hanteren "
    "of het beheren van gevaarlijke stoffen beschikken over de vereiste deskundigheid. De "
    "opleidingseisen zijn vastgelegd in de onderstaande opleidingsmatrix en zijn gebaseerd op de "
    "eisen uit PGS 15 (Maatregel 85 en 86) en de Arbowet."
)

add_table(
    ["Opleidingsonderdeel", "Doelgroep", "Frequentie", "Duur"],
    [
        ["Basisinstructie gevaarlijke stoffen", "Alle medewerkers", "Bij indiensttreding + jaarlijks", "2 uur"],
        ["PGS 15 stoffenscheiding", "Magazijnmeester + HSEQ", "Bij indiensttreding + jaarlijks", "3 uur"],
        ["Lekkaatprocedure oefening", "Alle medewerkers opslag", "Halfjaarlijks", "1 uur"],
        ["PBM-gebruik bijtende stoffen", "Alle medewerkers opslag", "Jaarlijks", "1 uur"],
        ["Eerste hulp bij brandwonden/bijtletsels", "Alle medewerkers", "Jaarlijks", "2 uur"],
        ["RH&E actualisatie", "HSEQ-coördinator + directie", "Jaarlijks", "4 uur"],
    ]
)

add_para("")

add_para(
    "Herhalingstermijnen zijn conform de hierboven genoemde frequenties. Bij wijzigingen in het "
    "chemisch register, de opslagconfiguratie of de regelgeving vindt een aanvullende instructie "
    "plaats binnen twee weken na de wijziging. De HSEQ-coördinator is verantwoordelijk voor de "
    "planning en documentatie van alle opleidingsactiviteiten. Elk opleidingsmoment wordt "
    "geregistreerd met datum, deelnemers, inhoud en handtekening van de instructeur en deelnemers. "
    "De opleidingsadministratie wordt minimaal vijf jaar bewaard."
)

add_para(
    "Competentie-eisen: Medewerkers die zelfstandig gevaarlijke stoffen hanteren of opslaan moeten "
    "de basistraining hebben afgerond en een toets hebben afgelegd met een voldoende resultaat. "
    "Nieuwe medewerkers mogen uitsluitend onder toezicht van een getrainde collega werken totdat "
    "de basistraining is afgerond. De magazijnmeester dient beschikking te hebben over een "
    "aanvullende opleiding op het gebied van PGS 15-compliance en stoffenscheiding."
)

# ════════════════════════════════════════════
# HOOFDSTUK 10 — TOEZICHT (~250w)
# ════════════════════════════════════════════
doc.add_heading("10. Toezicht en Handhaving", level=1)

add_para(
    "Phoenix Metals implementeert een gestructureerd toezichtssysteem om de naleving van dit beleid "
    "te borgen. Het toezicht bestaat uit interne inspecties, audits en een non-compliance procedure. "
    "De HSEQ-coördinator is belast met de coördinatie van alle toezichtsactiviteiten."
)

add_table(
    ["Type inspectie", "Frequentie", "Uitvoerder", "Rapportage"],
    [
        ["Wekelijkse visuele inspectie opslag", "Wekelijks", "Magazijnmeester", "Checklist + foto"],
        ["Maandelijkse audit opslagbeleid", "Maandelijks", "HSEQ-coördinator", "Auditrapport"],
        ["Kwartaalreview directie", "Kwartaallijks", "Directie + HSEQ", "Managementreview-verslag"],
        ["Jaarlijkse externe audit", "Jaarlijks", "Externe adviseur", "Compliance-rapport"],
    ]
)

add_para("")

add_para(
    "Non-compliance procedure: Bij constatering van non-compliance wordt direct actie ondernomen. "
    "De ernst van de non-compliance bepaalt de reactietijd. Kritieke afwijkingen (zoals "
    "stofcombinaties die niet conform Tabel 9 gescheiden zijn) worden onmiddellijk gecorrigeerd, "
    "uiterlijk binnen 24 uur. Niet-kritieke afwijkingen worden opgenomen in het verbeterplan en "
    "binnen 30 dagen gecorrigeerd. Elke non-compliance wordt geregistreerd, inclusief oorzaak, "
    "corrigerende maatregel, preventieve maatregel en datum van afsluiting. De directie wordt "
    "geïnformeerd over alle kritieke afwijkingen binnen één werkdag."
)

add_para(
    "Het inspectieschema omvat de volgende vaste onderdelen: controle van de stoffenscheiding "
    "(zijn de juiste stoffen in de juiste vakken?), controle van de lekbakken (integriteit, "
    "capaciteit, afwezigheid van lekkage), controle van de etikettering (correcte gevarensymbolen "
    "en tekst), controle van de toegankelijkheid (zijn de paden vrij voor hulpdiensten?), en "
    "controle van de documentatie (chemisch register actueel, SDS beschikbaar)."
)

# ════════════════════════════════════════════
# HOOFDSTUK 11 — DOCUMENTBEHEER (~200w)
# ════════════════════════════════════════════
doc.add_heading("11. Documentbeheer", level=1)

add_para(
    "Dit beleidsdocument is onderworpen aan een gestructureerd versiebeheer. Elke wijziging wordt "
    "gedocumenteerd in de versiegeschiedenis, inclusief datum, aard van de wijziging en goedkeurder. "
    "Oude versies worden gearchiveerd en blijven toegankelijk voor referentiedoeleinden. De actuele "
    "versie is te allen tijde beschikbaar op de centrale documentatie-locatie van Phoenix Metals."
)

add_table(
    ["Versie", "Datum", "Wijziging", "Goedkeurder"],
    [
        ["1.0", "26 april 2026", "Initiële versie — volledig beleidsdocument", "Directie Phoenix Metals"],
    ]
)

add_para("")

add_para(
    "Herziening: Dit beleid wordt minimaal jaarlijks herzien door de HSEQ-coördinator en de externe "
    "adviseur. Aanleidingen voor tussentijdse herziening zijn: wijzigingen in het chemisch register, "
    "wijzigingen in de opslagconfiguratie, wijzigingen in de wetgeving (in het bijzonder PGS 15), "
    "incidenten of near-misses, en uitkomsten van audits of inspecties. De herziene versie wordt "
    "voorgelegd aan de directie voor goedkeuring."
)

add_para(
    "Distributie: De goedgekeurde versie wordt digitaut gedistribueerd aan alle medewerkers via "
    "het interne documentbeheersysteem. Een papieren exemplaar is beschikbaar bij de opslaglocatie. "
    "Externe adviseurs ontvangen de actuele versie op verzoek. Medewerkers bevestigen per "
    "ondertekening dat zij kennis hebben genomen van de actuele versie."
)

# ════════════════════════════════════════════
# HOOFDSTUK 12 — BIJLAGEN (~250w)
# ════════════════════════════════════════════
doc.add_heading("12. Bijlagen", level=1)

add_para("De volgende bijlagen maken integraal onderdeel uit van dit beleidsdocument:", bold=True)

add_para(
    "Bijlage A — Chemisch Register Phoenix Metals v2.1.0: Het volledige chemisch register met "
    "alle zes geregistreerde stoffen, inclusief CAS-nummers, ADR-klassen, verpakkinggroepen, "
    "volumes, verpakkingsvormen en opslaglocaties. Het register wordt maandelijks geactualiseerd "
    "door de magazijnmeester en gecontroleerd door de HSEQ-coördinator. Bij wijzigingen wordt "
    "direct beoordeeld of de stoffenscheiding nog conform Tabel 9 is."
)

add_para(
    "Bijlage B — Compatibiliteitsmatrix (PGS 15 Bijlage E, Tabel 9): De volledige matrix met "
    "de scheidingseisen voor alle relevante ADR-klassecombinaties. De Phoenix Metals-specifieke "
    "matrix toont de beoordeling voor elke stofcombinatie in het chemisch register, inclusief "
    "het vereiste scheidingniveau (A, B, V of —) en de toelichting op de beoordeling."
)

add_para(
    "Bijlage C — PGS 15:2025 Referenties: Een overzicht van de in dit document gehanteerde "
    "PGS 15-maatregelen (M1, M2, M14, M15, M30, M35, M36, M45, M77, M78, M85, M86, M89, M96, "
    "M97, M103, M109) met de bijbehorende beschrijvingen en toepassingsvoorwaarden."
)

add_para(
    "Bijlage D — Inspectieformulieren: Standaardformulieren voor de wekelijkse visuele inspectie, "
    "de maandelijkse audit en de jaarlijkse externe audit. De formulieren bevatten vinklijsten "
    "voor alle controlepunten en ruimte voor opmerkingen en foto's."
)

add_para(
    "Bijlage E — Calamiteitenplan: Het calamiteitenplan met procedures voor lekkage, brand, "
    "blootstelling en evacuatie, inclusief contactgegevens van hulpdiensten, antigifcentrum (NVIC), "
    "en verantwoordelijke personen binnen de organisatie."
)

add_para(
    "Bijlage F — Bronverwijzingen: [1] PGS 15:2025 v1.0, Publicatiereeks Gevaarlijke Stoffen 15. "
    "[2] Omgevingswet, Besluit bouwwerken leefomgeving (Bbl). [3] Arbowet / Arbobesluit art. 4.1c. "
    "[4] ADR 2025, Accord européen. [5] CLP-Verordening (EG) 1272/2008. [6] REACH-Verordening "
    "(EG) 1907/2006. [7] Phoenix Metals Chemical Register v2.1.0."
)

# ── Save ──
doc.save(OUTPUT)
print(f"✅ Document opgeslagen: {OUTPUT}")

# ── Word count ──
full_text = []
for para in doc.paragraphs:
    full_text.append(para.text)
for table in doc.tables:
    for row in table.rows:
        for cell in row.cells:
            full_text.append(cell.text)

all_text = " ".join(full_text)
word_count = len(all_text.split())
print(f"📊 Woordenaantal: {word_count}")
