#!/usr/bin/env python3
"""PGS-15 Kennisdossier Phoenix Metals v2.0"""
from docx import Document
from docx.shared import Pt, Cm, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT
from docx.oxml.ns import nsdecls
from docx.oxml import parse_xml
import os

LOGO="/root/projects/jg/2026-pgs15-phoenix-metals/assets/branding/jvg-consultancy-logo.jpg"
OUTPUT="/root/projects/jg/2026-pgs15-phoenix-metals/deliverables/docx/PGS15_Kennisdossier_PhoenixMetals_v1.0.docx"
PRI=RGBColor(0x00,0x33,0x66); W=RGBColor(0xFF,0xFF,0xFF); DK=RGBColor(0x1F,0x29,0x37); SC=RGBColor(0x37,0x41,0x51)

def shade(c,h): c._tc.get_or_add_tcPr().append(parse_xml(f'<w:shd {nsdecls("w")} w:fill="{h}"/>'))
def tbl(d,hs,rs,ws=None):
    t=d.add_table(rows=1+len(rs),cols=len(hs)); t.alignment=WD_TABLE_ALIGNMENT.CENTER; t.style='Table Grid'
    for i,h in enumerate(hs):
        c=t.rows[0].cells[i]; c.text=''; r=c.paragraphs[0].add_run(h)
        r.bold=True; r.font.size=Pt(10); r.font.color.rgb=W; r.font.name='Calibri'
        c.paragraphs[0].alignment=WD_ALIGN_PARAGRAPH.CENTER; shade(c,"003366")
    for ri,row in enumerate(rs):
        for ci,v in enumerate(row):
            c=t.rows[ri+1].cells[ci]; c.text=''; r=c.paragraphs[0].add_run(str(v))
            r.font.size=Pt(10); r.font.name='Calibri'; r.font.color.rgb=DK
            if ri%2==1: shade(c,"F8F9FA")
    if ws:
        for i,w in enumerate(ws):
            for row in t.rows: row.cells[i].width=Cm(w)
def hd(d,t,l=1):
    h=d.add_heading(t,level=l)
    for r in h.runs: r.font.color.rgb=PRI; r.font.name='Calibri'
def bp(d,t):
    pa=d.add_paragraph(); r=pa.add_run(t); r.font.size=Pt(11); r.font.name='Calibri'; r.font.color.rgb=DK
    pa.paragraph_format.space_after=Pt(8); pa.paragraph_format.line_spacing=Pt(18)
def ct(d,t,sz,c,b=False):
    pa=d.add_paragraph(); pa.alignment=WD_ALIGN_PARAGRAPH.CENTER
    r=pa.add_run(t); r.bold=b; r.font.size=Pt(sz); r.font.color.rgb=c; r.font.name='Calibri'

def add_header_footer(doc):
    for sec in doc.sections:
        h=sec.header; h.is_linked_to_previous=False; hp=h.paragraphs[0]; hp.alignment=WD_ALIGN_PARAGRAPH.RIGHT
        r=hp.add_run("JvG Consultancy | PGS-15 Compliance Kennisdossier"); r.font.size=Pt(9); r.font.color.rgb=SC; r.font.name='Calibri'
        f=sec.footer; f.is_linked_to_previous=False; fp=f.paragraphs[0]; fp.alignment=WD_ALIGN_PARAGRAPH.CENTER
        r=fp.add_run("\u00a9 2026 JvG Consultancy | HSEQ Divisie | 26 april 2026 | Vertrouwelijk"); r.font.size=Pt(8); r.font.color.rgb=SC; r.font.name='Calibri'

def main():
    doc = Document()
    doc.core_properties.title="PGS15 Kennisdossier Phoenix Metals v1.0"
    doc.core_properties.author="Kas (Director of Operations) via HQ_04"
    doc.core_properties.keywords="PGS-15; Phoenix Metals; compliance; HSEQ"
    doc.core_properties.category="HSEQ Intelligence"
    s=doc.styles['Normal']; s.font.name='Calibri'; s.font.size=Pt(11); s.font.color.rgb=DK

    # VOORBLAD
    doc.add_paragraph(); doc.add_paragraph()
    if os.path.exists(LOGO):
        pa=doc.add_paragraph(); pa.alignment=WD_ALIGN_PARAGRAPH.CENTER
        pa.add_run().add_picture(LOGO, width=Cm(5))
    ct(doc,"PGS 15:2025 COMPLIANCE KENNISDOSSIER",28,PRI,True)
    ct(doc,"Phoenix Metals IJmuiden",20,PRI,True)
    doc.add_paragraph()
    for lbl,val in [("Project:","2026-pgs15-phoenix-metals"),("Versie:","1.0"),("Datum:","26 april 2026"),("Auteur:","Kas (Director of Operations)"),("Uitvoerende agent:","HQ_04 Technical Writer"),("Classificatie:","Vertrouwelijk")]:
        pa=doc.add_paragraph(); pa.alignment=WD_ALIGN_PARAGRAPH.CENTER
        r1=pa.add_run(lbl+" "); r1.bold=True; r1.font.size=Pt(12); r1.font.name='Calibri'; r1.font.color.rgb=PRI
        r2=pa.add_run(val); r2.font.size=Pt(12); r2.font.name='Calibri'; r2.font.color.rgb=DK
    doc.add_page_break()

    # MGMT SAMENVATTING
    hd(doc,"Management Samenvatting",1)
    bp(doc,"Dit kennisdossier documenteert de PGS 15:2025-compliance status van Phoenix Metals te IJmuiden. De analyse is gebaseerd op het chemisch register v2.1.0 en de richtlijnen uit PGS 15:2025 (238 pagina's). Phoenix Metals huidige opslag bedraagt circa 315 kg/l verdeeld over zes stoffen, waarvan 300 liter ADR-klasse 8 (bijtende stoffen) en 15 kg niet-ADR-goederen [8].")
    bp(doc,"De belangrijkste bevinding is dat Phoenix Metals met circa 390 kg ADR-8-stoffen ver onder alle drempelwaarden uit Tabel 6 en Tabel 7 van PGS 15:2025 opereert. Het basisveiligheidsniveau volstaat. Echter, de stoffenscheidingseis conform Tabel 9 (Bijlage E) is momenteel niet-compliant: natriumhydroxide en zwavelzuur staan op hetzelfde rack zonder fysieke scheiding. Deze combinatie vereist A-scheiding vanwege de exotherme reactie bij contact [1][2].")
    bp(doc,"De aanbevolen correctiemaatregelen zijn beperkt: gescheiden lekbakken, vloermarkering, een SDS-map en een instructiekaart bij de opslaglocatie. Totale investering: minder dan EUR 500. Schaalbaarheid naar hogere volumes is gedocumenteerd in drie fasen, met een investeringsraming van EUR 2.000 (Fase 1) tot EUR 50.000+ (Fase 3).")
    bp(doc,"Kernrisico's: (1) Zuur-base reactie bij lekkage van NaOH en H2SO4 in gezamenlijke opslag; (2) Calcium oxide en zwavelzuur vereisen A-scheiding. Beide risico's zijn mitigeerbaar met lage investeringen conform de E.3-uitzondering van PGS 15 Bijlage E [2].")
    doc.add_page_break()

    # H1
    hd(doc,"1 Introductie PGS 15:2025",1)
    hd(doc,"1.1 Doel en Reikwijdte",2)
    bp(doc,"PGS 15:2025 is de publicatiereeks gevaarlijke stoffen die richtlijnen geeft voor de veilige opslag van verpakte gevaarlijke stoffen in Nederland. De richtlijn is van toepassing op bedrijven die gevaarlijke stoffen opslaan in verpakkingen, ingedeeld volgens het ADR of de CLP-verordening [2][3]. De reikwijdte omvat opslag in vaten, jerrycans, canisters, big bags en vergelijkbare verpakkingen. De richtlijn adresseert de volledige levenscyclus: ontvangst, tijdelijke opslag, werkvoorraad en uitgifte.")
    bp(doc,"Uitgesloten zijn opslag in ondergrondse tanks, radioactieve stoffen en explosieven (ADR-klasse 1). De publicatiereeks hanteert een gelaagd veiligheidsniveausysteem: het basisveiligheidsniveau is altijd van toepassing; aanvullende niveaus (VN-A, VN-B, VN-C) activeren bij volumedrempels uit Tabel 6 en Tabel 7. Dit garandeert proportionaliteit: kleine hoeveelheden vereisen basismaatregelen, grote hoeveelheden progressief strengere voorzieningen [2].")
    bp(doc,"De richtlijn bevat meer dan 100 maatregelen (MW1 tot en met M109) die het basisveiligheidsniveau definiëren. Aspecten: stoffenidentificatie, opslagvoorzieningen, vloeistofopvang, ventilatie, toegankelijkheid voor hulpdiensten, personeelsdeskundigheid en noodplannen. Elke maatregel heeft een unieke code voor traceerbaarheid en auditeerbaarheid [2].")
    hd(doc,"1.2 Juridische Status",2)
    bp(doc,"PGS 15:2025 heeft de status van erkende richtlijn binnen het Besluit bouw- en milieukwaliteitsvereisten (Bbl) van de Omgevingswet. Het document fungeert als referentie voor de goede staat van techniek. Bedrijven die aantonen dat hun opslag conform PGS 15:2025 is ingericht, voldoen aan de zorgplicht uit het Besluit activiteiten leefomgeving (Bal) [4].")
    bp(doc,"De juridische hiërarchie: Omgevingswet (kader), Bbl (prestatie-eisen aan constructies), PGS 15:2025 (invulling opslag gevaarlijke stoffen). Aanvullend relevant: Arbowet (Arbobesluit art. 4.1c: RI&E) en ADR (transportclassificatie) [5][6]. Afwijking van PGS 15:2025 vereist gemotiveerde onderbouwing van equivalente veiligheidsgraad; zonder onderbouwing bestaat een handhavingsrisico [4].")
    hd(doc,"1.3 Relatie met Andere Regelgeving",2)
    bp(doc,"PGS 15:2025 interageert met de CLP-verordening (EG 1272/2008: classificatie, etikettering, verpakking) [3], REACH (EG 1907/2006: registratie, SDS, risicobeheer) [7], en voor Seveso-bedrijven Brl/NTA 8620 (Veiligheidsbeheerssysteem). Phoenix Metals valt met de huidige volumes niet onder Seveso. Het ADR classificeert stoffen voor vervoer; PGS 15:2025 gebruikt deze classificatie als basis voor opslageisen [6].")
    doc.add_page_break()

    # H2
    hd(doc,"2 Bedrijfsprofiel Phoenix Metals",1)
    hd(doc,"2.1 Algemene Gegevens",2)
    bp(doc,"Phoenix Metals is gevestigd te IJmuiden en exploiteert een pilotfaciliteit voor metaalverwerking en chemische procesvoering. De locatie fungeert als test- en ontwikkelingslocatie waar nieuwe procesroutes op schaal worden uitgeprobeerd. De huidige opslag van gevaarlijke stoffen is beperkt van omvang en bestemd voor onderzoeks- en ontwikkelingsdoeleinden [8].")
    bp(doc,"De opslaglocatie is ingericht als een storage rack direct voor het laboratorium. Alle stoffen bevinden zich in één brandcompartiment. De faciliteit beschikt niet over een geautomatiseerd blussysteem of branddetectie gekoppeld aan een PAC. Dit is conform de PGS 15:2025-eisen voor het huidige volume: het basisveiligheidsniveau schrijft deze voorzieningen niet voor bij volumes onder 10.000 kg [2].")
    hd(doc,"2.2 Chemisch Register",2)
    bp(doc,"Het chemisch register v2.1.0 vermeldt zes stoffen met een totaal volume van circa 315 kg/l. Vier stoffen vallen onder ADR-klasse 8 (bijtend), verpakkingsgroep II. Twee stoffen zijn niet-ADR-geclassificeerd. Er zijn geen SVHC- of CMR-stoffen aanwezig [8].")
    tbl(doc,["#","Stof","CAS-nummer","ADR","PG","Volume","Verpakking"],[
        ["1","Sodium hydroxide 50%","1310-73-2","8","II","100 l (4x25)","Jerrycan"],
        ["2","Sulfuric acid 75%","7664-93-9","8","II","30 l (3x10)","Jerrycan"],
        ["3","Sulfuric acid 50%","7664-93-9","8","II","70 l (7x10)","Jerrycan"],
        ["4","Sulfuric acid 25%","7664-93-9","8","II","100 l (4x25)","Jerrycan"],
        ["5","Aluminum sulfate octadecahydrate","7784-31-8","N/A","N/A","5 kg (2x2.5)","Canister"],
        ["6","Calcium oxide","1305-78-8","N/A","N/A","10 kg (2x5)","Canister"],
    ],[1,5,2.5,1.5,1.5,2.5,2])
    doc.add_paragraph()
    bp(doc,"Totaal ADR-klasse 8: 300 liter. Totaal niet-ADR: 15 kg. SVHC: geen. CMR/CLP: geen [8].")
    hd(doc,"2.3 Opslagconfiguratie",2)
    bp(doc,"Alle zes stoffen staan op één storage rack (rack in front of lab). Er is geen fysieke scheiding tussen natriumhydroxide (base) en zwavelzuurproducten (zuur). Lekbakken zijn niet gedocumenteerd. De concentratie zwavelzuur varieert van 25% tot 75%; hogere concentraties zijn sterker bijtend en reactiever. Calcium oxide naast zwavelzuur vormt een additioneel risico: het is een sterk basisch oxide dat exotherm reageert met zuren [1][8].")
    bp(doc,"De natriumhydroxide-oplossing (50%) vormt bij contact met zwavelzuur een exotherme neutralisatiereactie met hitteontwikkeling boven 100 graden Celsius, potentieel leidend tot containerfalen en blootstelling van personeel aan bijtende stoffen [1].")
    doc.add_page_break()

    # H3
    hd(doc,"3 Veiligheidsniveaus en Drempelwaarden",1)
    hd(doc,"3.1 Het Gelaagde Veiligheidssysteem",2)
    bp(doc,"PGS 15:2025 hanteert een gelaagd systeem van veiligheidsniveaus. Het basisveiligheidsniveau is fundamenteel en altijd van toepassing. Boven het basisniveau komen VN-A, VN-B en VN-C, geactiveerd bij overschrijding van volumedrempels uit Tabel 6 en Tabel 7 [2].")
    bp(doc,"Het systeem waarborgt proportionaliteit. De drempels verschillen per ADR-klasse en verpakkingsgroep. ADR-klasse 3 (brandbaar) VGI kent een ondergrens van 400 kg; ADR-klasse 8 (bijtend) een ondergrens van 2.500 kg. Dit verschil reflecteert de hogere intrinsieke gevaren van brandbare stoffen [2].")
    hd(doc,"3.2 Drempelwaarden per ADR-klasse",2)
    bp(doc,"Onderstaande tabel toont de drempelwaarden uit Tabel 6 en Tabel 7. Phoenix Metals valt onder ADR 8 VG II/III onbrandbaar [2].")
    tbl(doc,["ADR-klasse","Ondergrens","VN Basis","VN Wbdbo","VN-B","VN-A"],[
        ["3 (brandbaar VP<=60C)","400 kg (VGI)","<10 ton","60 min","10-20 ton",">20 ton"],
        ["5.1 (oxiderend)","2.500 kg","<2,5 ton","60 min","2,5 ton - ?",">2,5 ton"],
        ["6.1 VGI (giftig)","1.000 kg","<1 ton","60 min","-",">1 ton"],
        ["8 VGI (bijtend)","2.500 kg","<10 ton","60 min","10-20 ton",">20 ton"],
        ["8 VGII/III onbrandbaar","2.500 kg","ALLES","-","-","-"],
        ["8 VGII/III brandbaar","2.500 kg","<10 ton","60 min","10-20 ton",">20 ton"],
        ["9 (milieugevaarlijk)","2.500 kg","ALLES","-","-","-"],
    ],[3,2.5,2,2,2,2])
    doc.add_paragraph()
    hd(doc,"3.3 Positie Phoenix Metals",2)
    bp(doc,"Met circa 390 kg ADR-8-stoffen bevindt Phoenix Metals zich ver onder de ondergrens van 2.500 kg. Voor ADR 8 VG II/III onbrandbaar volstaat het basisveiligheidsniveau ongeacht volume. Geen aanvullend veiligheidsniveau is vereist. De faciliteit hoeft niet te voldoen aan eisen voor brandwerende constructie (Wbdbo), VBB-installatie of branddetectie. De stoffenscheidingseis uit Tabel 9 (M35) geldt onverkort [2].")
    hd(doc,"3.4 Facilitaire Eisen per Niveau",2)
    tbl(doc,["Niveau","Wbdbo","Brandcompartiment","Blussysteem","Detectie","Lekbakken"],[
        ["Basis","Bbl","Max 1.000/2.500 m2","Niet verplicht","Niet verplicht","M30"],
        ["VN-A","60-90 min","Max 2.500 m2","VBB (M96)","Detectie+doormelding","M30+extra"],
        ["VN-B","60 min","Scheidingswand 60 min","M103","M103","M30"],
    ],[1.5,1.5,3,2,3,2.5])
    doc.add_paragraph()
    doc.add_page_break()

    # H4
    hd(doc,"4 Opslag-Compatibiliteitsmatrix",1)
    hd(doc,"4.1 Systeem Tabel 9",2)
    bp(doc,"Tabel 9 (Bijlage E) definieert scheidingseisen voor stoffen van verschillende ADR-klassen. Vier niveaus: V (aparte vakken), B (beoordelen op basis van VIB), A (apart brandcompartiment of 5 m vrije zone) en - (geen scheiding). A-scheiding is het strengste niveau: fysieke scheiding door brandwerende constructie (minimaal 30 min) of 5 m vrije zone [2].")
    tbl(doc,["ADR","3","5.1","6.1+CMR","8","9","Overig"],[
        ["3","-","V","B/V","B","B","-"],
        ["5.1","V","-","B/V","A/V","B","-"],
        ["6.1+CMR","B/V","B/V","B","A","B","-"],
        ["8","B","B","B","A","B","-"],
        ["9","B","B","B","A","B","-"],
        ["Overig","-","-","-","A","-","-"],
    ],[2,1.5,1.5,2,1.5,1.5,1.5])
    doc.add_paragraph()
    hd(doc,"4.2 Phoenix Metals Matrix",2)
    bp(doc,"De kritieke combinatie is ADR 8 ↔ ADR 8 = A. Natriumhydroxide (base) en zwavelzuur (zuur) mogen niet in hetzelfde vak [2].")
    tbl(doc,["Combinatie","Scheiding?","Niveau","Toelichting"],[
        ["NaOH 50% <-> H2SO4 (alle)","JA","A","Zuur+Base=exotherm"],
        ["NaOH 50% <-> Aluminum sulfate","JA","B","Base+zout, VIB nodig"],
        ["NaOH 50% <-> Calcium oxide","JA","B","Base+basisch oxide"],
        ["H2SO4 <-> H2SO4 (andere conc.)","NEE","-","Zelfde stof/klasse"],
        ["H2SO4 <-> Aluminum sulfate","BEOORDEEL","B","Zuur+zout"],
        ["H2SO4 <-> Calcium oxide","JA","A","Zuur+base (CaO basisch)"],
    ],[4,2,1.5,6])
    doc.add_paragraph()
    hd(doc,"4.3 Kritieke Bevinding",2)
    bp(doc,"NaOH en H2SO4 staan op hetzelfde rack zonder scheiding. Bij contact ontstaat een exotherme neutralisatiereactie met hitteontwikkeling boven 100 graden Celsius, leidend tot containerfalen, dampvorming en personeelsblootstelling [1]. PGS 15 Bijlage E, paragraaf E.3 biedt een uitzondering voor opslag onder 10.000 kg: scheiding binnen een vak via 2 m afstand, 2 m buffer met combinatiestof, of aparte lekbakken [2].")
    bp(doc,"Aanbevolen oplossing: (1) NaOH 50% in aparte lekbak, gemarkeerd vak; (2) H2SO4 (alle concentraties) in aparte lekbak, gemarkeerd vak; (3) minimaal 2 m afstand tussen vakken; (4) calcium oxide apart van H2SO4 (A-scheiding) [2].")
    bp(doc,"Incident-casus: In 2018 vond een incident plaats in een Duitse chemische opslag waar zoutzuur en natriumhydroxide door lekkage in contact kwamen. De exotherme reactie veroorzaakte het scheuren van meerdere jerrycans; circa 200 liter bijtende vloeistof kwam vrij. Twee medewerkers liepen brandwonden op. Oorzaak: ontbrekende fysieke scheiding. Dit onderstreept de noodzaak van consequente toepassing van Tabel 9 [9].")
    doc.add_page_break()

    # H5
    hd(doc,"5 Basisveiligheidsniveau Maatregelen",1)
    bp(doc,"Het basisveiligheidsniveau omvat maatregelen MW1 tot en met M109. Deze gelden altijd, ongeacht het volume. Onderverdeeld in: algemene zorgplichten (MW1-MW5), opslagvoorzieningen (M1-M15), stoffenscheiding (M35-M45), vloeistofopvang en ventilatie (M30), personele maatregelen (M85-M86), en nood- en calamiteitenbestrijding (M89-M109) [2].")
    hd(doc,"5.1 Algemene Zorgplichten (MW1-MW5)",2)
    bp(doc,"MW1 (Zorgplicht): De opslaggeresponeerde draagt zorg voor een veilige opslag. Dit omvat alle maatregelen die redelijkerwijs nodig zijn om risico's voor mens en milieu te beheersen. Phoenix Metals moet opslagvoorzieningen inrichten volgens PGS 15:2025, personeel trainen en een RI&E beschikbaar hebben [2][5].")
    bp(doc,"MW2 t/m MW5: Deze maatregelen betreffen de verantwoordelijkheden van de opslaggeresponeerde, waaronder het actualiseren van het veiligheidsbeleid, het periodiek evalueren van maatregelen en het documenteren van afwijkingen. Voor een pilotfaciliteit is het aanbevolen deze zorgplichten te formaliseren in een intern veiligheidsdocument [2].")
    hd(doc,"5.2 Opslagvoorzieningen (M1-M15)",2)
    bp(doc,"M2 (Daarvoor bestemde voorziening): Stoffen worden opgeslagen in een voorziening die voldoet aan constructieve eisen. Het rack moet corrosiebestendig zijn, voorzien van opvang en afdoende geventileerd. Phoenix Metals dient te toetsen of het huidige rack geschikt is voor bijtende stoffen [2].")
    bp(doc,"M14 (Werkvoorraad): Werkvoorraad in een werkruimte is beperkt tot de hoeveelheid voor onmiddellijk gebruik, maximaal een dagvoorraad. Phoenix Metals dient te beoordelen of de huidige opslag als werkvoorraad kan worden aangemerkt of als formele opslag moet worden gezien [2].")
    bp(doc,"M15 (Brandcompartiment): Maximale vloeroppervlakte 1.000 m2 bij minder dan 20 ton, 2.500 m2 bij meer dan 20 ton. Phoenix Metals is met circa 390 kg ruim binnen deze grenzen [2].")
    hd(doc,"5.3 Stoffenscheiding (M35-M45)",2)
    bp(doc,"M35 (Scheiding conform Tabel 9): Stoffen worden gescheiden opgeslagen conform Bijlage E. Phoenix Metals is NIET compliant: NaOH en H2SO4 staan op hetzelfde rack. De E.3-uitzondering biedt een oplossingsrichting: aparte lekbakken met 2 m afstand [2].")
    bp(doc,"M36 en M45 (Verpakkingsintegriteit): Verpakkingen moeten onbeschadigd en UN-goedgekeurd zijn (indien ADR). Inspectie bij ontvangst en periodiek op beschadigingen, lekkage en etikettering. Beschadigde verpakkingen onmiddellijk vervangen of veiligstellen [2].")
    bp(doc,"M37 t/m M44: Aanvullende eisen voor specifieke situaties, waaronder scheiding van zelfreactieve stoffen, peroxides en stoffen die met water reageren. Phoenix Metals heeft deze stoffen niet in het register. De maatregelen worden relevant bij stofuitbreiding [2].")
    hd(doc,"5.4 Vloeistofopvang en Ventilatie (M30)",2)
    bp(doc,"Vloeibare gevaarlijke stoffen worden opgeslagen in een vloeistofdichte opvangvoorziening. Capaciteit minimaal 110% van het grootste individuele verpakkingsvolume. Voor Phoenix Metals: grootste jerrycan is 25 liter, dus elke lekbak moet minimaal 27,5 liter bevatten. Ventilatie moet gasophoping voorkomen. Bij binnenshuis opslag is mechanische ventilatie of voldoende natuurlijke ventilatie vereist [2].")
    hd(doc,"5.5 Fysieke Bescherming (M77-M78)",2)
    bp(doc,"Opslagvoorzieningen zijn beschermd tegen aanrijding door bedrijfsvoertuigen en heftrucks. Phoenix Metals dient te beoordelen of het rack voldoende is afgeschermd. Indien transportmiddelen in de nabijheid
