#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Genereert het auditrapport DOCX (DELIVERABLE_V1.0)."""
import sys; sys.path.insert(0, "/root/projects/jg/2026-audit-koole-chromium-vi/working")
from docx_helpers import *
from report_data_findings import FINDINGS, CONFORM_DETAILS
from report_data_rest import MATRIX, PROPOSALS, SOURCES
from docx import Document
from docx.shared import Pt, Cm, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH

OUT = "/root/projects/jg/2026-audit-koole-chromium-vi/deliverables/docx/003.056_CrVI_Compliance_Audit_en_Herzieningsvoorstel_v1.0.docx"

doc = Document()
style_base(doc)
sec = doc.sections[0]
sec.top_margin = Cm(2.4); sec.bottom_margin = Cm(2.2)
sec.left_margin = Cm(2.0); sec.right_margin = Cm(2.0)

# ---- COVER ----
cover(doc, "COMPLIANCE AUDITRAPPORT", "Chromium VI Exposure Control Procedure",
      "Compliance Audit en Herzieningsvoorstel — Nederlands arbo-juridisch kader",
      [["Project", "2026-audit-koole-chromium-vi (Wintershall / Koole offshore decommissioning)"],
       ["Opdrachtgever", "Wintershall Noordzee B.V. (project)"],
       ["Getoetst document", "003.056 Chromium VI Exposure Control Procedure — KOO B.V. (Koole Offshore Operations), Rev A (02-03-2026) / Rev 1 (15-04-2026)"],
       ["Audittype", "Document-based compliance audit tegen Nederlands wettelijk kader"],
       ["Audituitvoering", "hseq_specialist (Tier 3); juridische review: compliance_auditor"],
       ["Documentatie", "technical_writer (HQ_04) — JvG Consultancy"],
       ["Datum", "24 augustus 2026"],
       ["Versie / status", "v1.0 — Definitief"],
       ["Classificatie", "Vertrouwelijk"]])

header_footer(doc, "Compliance Audit — Chromium VI Exposure Control Procedure",
              "003.056 Cr(VI) Compliance Audit")

# ---- DOCUMENTBEHEER + INHOUD ----
h1(doc, "Documentbeheer")
make_table(doc, ["Versie", "Datum", "Auteur", "Wijziging", "Status"],
           [["v1.0", "24-08-2026", "JvG Consultancy — technical_writer",
             "Eerste volledige auditrapport (P1/P2/Conform-matrix B1\u2013B18, herzieningsvoorstellen H1\u2013H12)", "Definitief"]],
           widths=[2.0, 2.6, 4.8, 5.6, 2.0], size=9.5)
doc.add_paragraph()
h1(doc, "Inhoudsopgave")
for item in ["1. Managementsamenvatting", "2. Auditbasis, beperkingen en juridische verificatie",
             "3. Overzichtstoetsing per eis (B1\u2013B18)", "4. Gedetailleerde toetsing per wetsartikel",
             "5. Herzieningsvoorstellen (H1\u2013H12)", "6. Bronnenlijst", "7. Conclusie"]:
    p = doc.add_paragraph()
    r = p.add_run(item); r.font.size = Pt(11); r.font.name = "Calibri"
    r.font.color.rgb = RGBColor.from_string(TEXT_DARK)
doc.add_page_break()

# ---- 1. MANAGEMENTSAMENVATTING ----
h1(doc, "1. Managementsamenvatting")
h2(doc, "1.1 Resultaat in cijfers")
make_table(doc, ["Classificatie", "Omschrijving", "Aantal"], [
    ["P1 — Kritiek", "Wettelijk verplicht, ontbreekt", "5"],
    ["P2 — Verbetering", "Verplicht/verwacht, onvolledig", "7"],
    ["Conform", "Voldoet aan de eis", "6"]],
    widths=[4.5, 9.0, 3.5], size=10.5, color_cols={0: prio_color})
doc.add_paragraph()
body(doc, "Van de 18 beoordeelde items zijn er 17 zelfstandig genummerd: 5× P1, 7× P2 en 6× Conform. B13 (normverwijzing NEN-EN 689/482) is formeel onderdeel van B1 en wordt separaat genummerd omdat de normreferentie in §6 van het brondocument afzonderlijk ontbreekt.")

h2(doc, "1.2 Kernoordeel")
body(doc, "Het brondocument is een degelijke, praktisch uitvoerbare operationele procedure op het gebied van gevareninformatie, marking, hiërarchie van beheersmaatregelen, hygiëne/decontaminatie en PBM-regime. De procedure noemt de Nederlandse grenswaarde (1 µg/m³) en het streefrisiconiveau (0,01 µg/m³) correct (§6).")
body(doc, "De formele arbo-juridische verslagleggings- en zorgstructuur ontbreekt echter vrijwel volledig: geen meetstrategie conform NEN-EN 689, geen arbeidsgezondheidskundig onderzoek (AGO), geen 40-jaar bewaartermijn, geen lijst van blootgestelde werknemers en geen expliciete RI&E-registratie met vervangingsonderbouwing. Dit zijn verplichtingen uit het Arbobesluit (Hoofdstuk 4, Afdeling 3) die niet via TRA/JSA-verwijzingen kunnen worden afgedekt. Voor kankerverwekkende stoffen geldt in Nederland verscherpte aandacht, mede gezien de chroom-6-dossiers bij Defensie, ProRail en gemeente Tilburg [3].")

h2(doc, "1.3 Belangrijkste acties")
bullet(doc, "H1\u2013H5 (P1): wettelijke harde kern — opnemen in de eerstvolgende revisie vóór projectuitvoering: meetstrategie, AGO, 40-jaar bewaring, blootstellingslijst, RI&E-koppeling met vervangingsonderbouwing.", bold_lead="P1: ")
bullet(doc, "H6\u2013H12 (P2): verwerken in dezelfde of opvolgende revisie: calamiteitenprotocol OR/PVT, REACH-referentie, afvalstroomuitwerking, AI-bladen, beheersregime-matrix, maatregelenhiërarchie, versieconsistentie.", bold_lead="P2: ")
doc.add_page_break()

# ---- 2. AUDITBASIS ----
h1(doc, "2. Auditbasis, beperkingen en juridische verificatie")
bullet(doc, "De volledige tekst van het brondocument (12 pagina's: revision status, revision log, §1 Purpose and Scope t/m §6 References) is geëxtraheerd uit de PDF en integraal getoetst. Alle bevindingen verwijzen naar secties van het brondocument.", bold_lead="Auditbasis: ")
bullet(doc, "De coverpagina vermeldt zowel Rev A (02-03-2026, \u201cIssued for Comments\u201d) als Rev 1 (15-04-2026, \u201cIssued for Implementation\u201d). De revision log bevat uitsluitend een Rev 1-regel met lege velden voor Section en Description of Change. De voettekst op pagina 2 t/m 12 vermeldt \u201cRev. 1 — May 2026\u201d, terwijl de issue-datum per log 15-04-2026 is (zie bevinding B14).", bold_lead="Versie-inconsistentie (vastgesteld): ")
bullet(doc, "Nederlands offshore decommissioningproject (Noordzee; opdrachtgever Wintershall, aannemer Koole). Het brondocument bevat daarnaast Belgische elementen (OEL 0,005 mg/m³, §6). Toetsing tegen het Nederlandse kader conform de bronnenlijst in hoofdstuk 6.", bold_lead="Jurisdictie: ")
h2(doc, "2.1 Juridische verificatie (compliance_auditor)")
make_table(doc, ["Aspect", "Beoordeling"], [
    ["Arbobesluit-artikelen (4.2, 4.10a, 4.10c, 4.13, 4.15, 4.21)", "Correct"],
    ["REACH Bijlage XIV — sunset dates 2017/2019", "Correct"],
    ["Bal — afvalstroomkader", "Correct"],
    ["AI-blad 77 — grenswaarde 1 µg/m³ per 1-3-2017", "Correct"],
    ["SER-grenswaarde — 1 µg/m³ (8-uurs TGG)", "Correct"],
    ["Eindoordeel juridische review", "Juridisch verifieerbaar — geen correcties noodzakelijk"]],
    widths=[11.0, 6.0], size=9.5,
    color_cols={1: (lambda v: (SUCCESS, True) if ("Correct" in v or "verifieerbaar" in v) else (TEXT_DARK, False))})
doc.add_paragraph()
body(doc, "REACH is beperkt relevant voor puur decommissioningwerk; bij bijkomend gebruik van Cr(VI)-houdende producten is een autorisatiecheck nodig. AI-blad 77 is primair geschreven voor vaste locaties, maar de meetstrategie- en registratieverplichtingen zijn toepasbaar in de offshore-context.", italic=True)
doc.add_page_break()

# ---- 3. OVERZICHTSTOETSING ----
h1(doc, "3. Overzichtstoetsing per eis (B1\u2013B18)")
make_table(doc, ["#", "Eis", "Bron", "Bevinding brondocument", "Klasse"], MATRIX,
           widths=[1.1, 4.4, 3.3, 6.3, 1.9], size=8.5, color_cols={4: prio_color})
doc.add_paragraph()
body(doc, "* B13 is formeel onderdeel van B1; zonder B13 telt de matrix 5×P1, 7×P2, 6×Conform over 17 items. B13 is ter volledigheid separaat genummerd omdat de normreferentie in §6 afzonderlijk ontbreekt.", size=9)
doc.add_page_break()

# ---- 4. GEDETAILLEERDE TOETSING ----
h1(doc, "4. Gedetailleerde toetsing per wetsartikel")

def finding(num, titel, klasse, eis, bevinding, classificatie):
    col = ERROR if klasse == "P1" else ("B45309" if klasse == "P2" else SUCCESS)
    h3(doc, f"{num} — {titel}   [{klasse}]", color=col)
    body(doc, eis, bold_lead="Eis: ", size=10)
    body(doc, bevinding, bold_lead="Bevinding: ", size=10)
    body(doc, classificatie, bold_lead="Classificatie: ", size=10)

for f in FINDINGS:
    finding(*f)
h3(doc, "B15\u2013B18 — Conforme onderdelen", color=SUCCESS)
for num, txt in CONFORM_DETAILS:
    bullet(doc, txt, bold_lead=num + ": ")

# ---- 5. HERZIENINGSVOORSTELLEN ----
doc.add_page_break()
h1(doc, "5. Herzieningsvoorstellen (H1\u2013H12)")
body(doc, "De volgende voorstellen zijn gericht aan de redacteur van het brondocument. H1\u2013H5 (P1) vormen de wettelijke harde kern en verdienen opname in de erstvolgende revisie vóór projectuitvoering; H6\u2013H12 (P2) kunnen in dezelfde of een opvolgende revisie worden verwerkt.")
make_table(doc, ["#", "Voorstel", "Kader", "Prioriteit"], PROPOSALS,
           widths=[1.1, 9.4, 4.2, 2.3], size=8.5, color_cols={3: prio_color})
doc.add_paragraph()

# ---- 6. BRONNEN ----
doc.add_page_break()
h1(doc, "6. Bronnenlijst")
for i, s in enumerate(SOURCES, 1):
    p = doc.add_paragraph()
    r = p.add_run(f"[{i}]  "); r.bold = True; r.font.size = Pt(10)
    r.font.color.rgb = RGBColor.from_string(PRIMARY); r.font.name = "Calibri"
    r = p.add_run(s); r.font.size = Pt(10)
    r.font.color.rgb = RGBColor.from_string(TEXT_DARK); r.font.name = "Calibri"

# ---- 7. CONCLUSIE ----
h1(doc, "7. Conclusie")
body(doc, "De 003.056 Chromium VI Exposure Control Procedure van KOO B.V. is operationeel sterk: gevareninformatie, identificatie en marking, hygiëne-, decontaminatie- en PBM-regimes zijn conform het Nederlandse praktijkkader (AI-blad 77) uitgewerkt en de wettelijke grenswaarde is correct vermeld.")
body(doc, "De procedure is echter nog niet volledig compliant met de formele verplichtingen uit het Arbobesluit (Hoofdstuk 4, Afdeling 3) voor kankerverwekkende stoffen. Vijf wettelijk verplichte elementen ontbreken volledig (meetstrategie conform NEN-EN 689, AGO, 40-jaar bewaring, blootstellingslijst, RI&E-registratie met vervangingsonderbouwing). Zeven elementen zijn aanwezig als beginsel maar onvolledig uitgewerkt.")
body(doc, "Implementatie van de herzieningsvoorstellen H1\u2013H5 vóór aanvang van de projectuitvoering en H6\u2013H12 in dezelfde of een opvolgende revisie brengt het document op het vereiste compliance-niveau. De juridische review heeft alle artikelverwijzingen en grenswaarden geverifieerd; er zijn geen correcties op deze audit nodig.", bold_lead="Advies: ")
body(doc, "Dit rapport is gebaseerd op documentonderzoek. Het oordeel geldt voor de getoetste revisies (Rev A / Rev 1) van het brondocument.", italic=True, size=9)

# ---- METADATA ----
cp = doc.core_properties
cp.title = "003.056 Cr(VI) Compliance Audit en Herzieningsvoorstel v1.0"
cp.author = "JvG Consultancy"
cp.subject = "Compliance audit Chromium VI Exposure Control Procedure (KOO B.V.)"
cp.keywords = "chroom-6; Cr(VI); Arbobesluit; compliance audit; Wintershall; Koole; NEN-EN 689; herzieningsvoorstel"
cp.category = "HSEQ Compliance"
cp.comments = "Audit: hseq_specialist (Tier 3); juridische review: compliance_auditor; documentatie: technical_writer (HQ_04)"

doc.save(OUT)
print("OK:", OUT)
