#!/usr/bin/env python3
"""ZZP Opstartplan HSEQ — DOCX Generator v1.1 — Aangepast voor deeltijd ZZP naast loondienst"""

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

OUTPUT_PATH = "/root/projects/jg/2026-zzp-opstart-hhc/deliverables/ZZP_Opstartplan_HSEQ_v2.0.docx"
LOGO_PATH = "/root/projects/jg/assets/branding/jvg-logo-medium.png"
PRIMARY = RGBColor(0x00, 0x33, 0x66)
TEXT_DARK = RGBColor(0x1F, 0x2F, 0x37)
ACCENT = RGBColor(0x3B, 0x82, 0xF6)
WARNING = RGBColor(0xFF, 0x6D, 0x00)

doc = Document()

# === STYLES ===
style = doc.styles['Normal']
style.font.name = 'Calibri'
style.font.size = Pt(11)
style.font.color.rgb = TEXT_DARK
style.paragraph_format.space_after = Pt(6)
style.paragraph_format.line_spacing = 1.15

for level, size, bold in [(1, 18, True), (2, 14, True), (3, 12, True)]:
    h = doc.styles[f'Heading {level}']
    h.font.name = 'Calibri'
    h.font.size = Pt(size)
    h.font.bold = bold
    h.font.color.rgb = PRIMARY
    h.paragraph_format.space_before = Pt(18 if level == 1 else 12)
    h.paragraph_format.space_after = Pt(6)

for section in doc.sections:
    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 = doc.sections[0].header
if os.path.exists(LOGO_PATH):
    hp = header.paragraphs[0]
    hp.alignment = WD_ALIGN_PARAGRAPH.RIGHT
    run = hp.add_run()
    run.add_picture(LOGO_PATH, width=Cm(4.5), height=Cm(4.04))

# Footer
footer = doc.sections[0].footer
fp = footer.paragraphs[0]
fp.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = fp.add_run("JG Consultancy | Safety • Governance • Advisory | © 2026")
run.font.size = Pt(8)
run.font.color.rgb = RGBColor(0x6B, 0x72, 0x80)

def add_table(doc, headers, rows):
    table = doc.add_table(rows=1 + len(rows), cols=len(headers))
    table.style = 'Light Grid Accent 1'
    table.alignment = WD_TABLE_ALIGNMENT.CENTER
    for i, h in enumerate(headers):
        cell = table.rows[0].cells[i]
        cell.text = h
        for p in cell.paragraphs:
            for r in p.runs:
                r.font.bold = True
                r.font.size = Pt(10)
                r.font.color.rgb = PRIMARY
    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(10)
    return table

def add_checkbox_list(doc, items):
    for item in items:
        p = doc.add_paragraph()
        p.paragraph_format.space_after = Pt(3)
        p.paragraph_format.left_indent = Cm(0.5)
        run = p.add_run(f"☐  {item}")
        run.font.size = Pt(10)

def add_warning(doc, text):
    p = doc.add_paragraph()
    run = p.add_run(f"⚠ {text}")
    run.font.bold = True
    run.font.size = Pt(10)
    run.font.color.rgb = WARNING

def add_bullet(doc, text):
    p = doc.add_paragraph(text, style='List Bullet')
    for r in p.runs:
        r.font.size = Pt(11)

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

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run("ZZP OPSTARTPLAN")
run.font.size = Pt(28)
run.font.bold = True
run.font.color.rgb = PRIMARY

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run("HSEQ Manager — Deeltijd ZZP (2 opdrachtgevers) naast Loondienst")
run.font.size = Pt(16)
run.font.color.rgb = ACCENT

doc.add_paragraph()

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run("Opstartplan voor zelfstandige HSEQ-activiteiten\nPhoenix Metals (1 dag/week) + Club of Engineers (1 dag/week)\nin combinatie met dienstbetrekking bij Wintershall")
run.font.size = Pt(12)
run.font.italic = True
run.font.color.rgb = TEXT_DARK

for _ in range(4):
    doc.add_paragraph()

add_table(doc,
    ["Veld", "Waarde"],
    [
        ["Project", "ZZP Opstart HSEQ Manager — Phoenix Metals + Club of Engineers"],
        ["Type", "Strategisch Opstartplan"],
        ["Auteur", "Kas — Director of Operations"],
        ["Opdrachtgever", "Jorick Gemert"],
        ["Versie", "2.0"],
        ["Datum", "30 april 2026"],
        ["Status", "DEFINITIEF"],
        ["Classificatie", "Vertrouwelijk — JG Consultancy"],
    ]
)

doc.add_page_break()

# ============================================================
# HOOFDSTUK 1: INTRODUCTIE & SITUATIE
# ============================================================
doc.add_heading("1. Introductie & Situatie", level=1)

doc.add_heading("1.1 Achtergrond & Context", level=2)
doc.add_paragraph(
    "Jorick Gemert is werkzaam als HSEQ-professional bij Wintershall (in loondienst, op de "
    "payroll). Daarnaast start hij als ZZP'er met twee opdrachtgevers: Phoenix Metals "
    "(1 dag/week) en Club of Engineers (1 dag/week). Dit opstartplan beschrijft "
    "hoe deze combinatie van loondienst en zelfstandig ondernemerschap juridisch, fiscaal "
    "en praktisch kan worden ingericht."
)

doc.add_heading("1.2 Kerngegevens", level=2)
add_table(doc,
    ["Aspect", "Details"],
    [
        ["Hoofdbaan", "Wintershall — HSEQ (loondienst, payroll)"],
        ["ZZP-activiteit 1", "HSEQ Manager bij Phoenix Metals (1 dag/week)"],
        ["ZZP-activiteit 2", "HSEQ Consultant bij Club of Engineers (1 dag/week)"],
        ["Omvang ZZP", "2 dagen per week (~800 uur/jaar)"],
        ["Situatie", "Combinatie loondienst + ZZP met 2 opdrachtgevers"],
        ["Startdatum", "Mei/juni 2026"],
        ["Locatie", "Heiloo, Noord-Holland"],
    ]
)

doc.add_heading("1.3 Belangrijkste Verschillen vs. Fulltime ZZP", level=2)
doc.add_paragraph(
    "Deze situatie verschelt wezenlijk van een fulltime ZZP-start. De belangrijkste verschillen:"
)
add_table(doc,
    ["Aspect", "Fulltime ZZP", "Jouw situatie (Loondienst + ZZP)"],
    [
        ["Inkomstenbron", "100% ZZP-inkomsten", "Loonsalaris + 2 ZZP-opdrachtgevers"],
        ["Urencriterium (1.225 uur)", "Haalbaar (fulltime)", "⚠ Krap: ~800 werkuren + overheaduren"],
        ["Zelfstandigenaftrek", "Volledig", "⚠ Mogelijk met voldoende overheaduren"],
        ["Startersaftrek", "Ja (eerste 3 jaar)", "⚠ Afhankelijk van urencriterium"],
        ["Risico spreiding", "Meerdere opdrachtgevers", "✅ Twee opdrachtgevers (goed)"],
        ["Wet DBA risico", "Verspreid", "✅ LAGER — twee opdrachtgevers = sterker ondernemersprofiel"],
        ["Zorgverzekering", "Zelf regelen", "Via werkgever (Wintershall)"],
        ["AOV", "Zeer belangrijk", "Minder urgent (loondienst heeft vangnet)"],
    ]
)

add_warning(doc, "Met 2 dagen/week (~800 werkuren) kom je in de buurt van het urencriterium als je overheaduren meetelt (administratie, acquisitie, netwerken, opleiding). Lees hierover meer in Hoofdstuk 3.")

# ============================================================
# HOOFDSTUK 2: RECHTSVORM & KVK
# ============================================================
doc.add_heading("2. Rechtsvorm & KvK-Inschrijving", level=1)

doc.add_heading("2.1 Eenmanszaak — Enige Realistische Optie", level=2)
doc.add_paragraph(
    "Voor 1-2 dagen per week ZZP-werk is de eenmanszaak de enige logische rechtsvorm. "
    "Een BV brengt notariskosten (€750–€1.500), extra administratie, en is fiscaal "
    "onaantrekkelijk bij beperkte omzet. Bovendien komen de fiscale voordelen van een "
    "eenmanszaak (zelfstandigenaftrek, startersaftrek) alleen beschikbaar als je voldoet "
    "aan het urencriterium — zie Hoofdstuk 3 [1]."
)

doc.add_heading("2.2 Stappenplan KvK-Inschrijving", level=2)
steps = [
    "Controleer handelsnaam beschikbaarheid via kvk.nl/handelsregister",
    "Bereid voor: geldig ID + IDIN-betaalrekening",
    "Inschrijving via kvk.nl (digitaal met IDIN, 5 minuten)",
    "Kosten: €50 eenmalig inschrijfgeld",
    "KvK-nummer ontvangen (direct beschikbaar)",
    "Belastingdienst ontvangt automatisch melding → BTW-nummer volgt per post",
]
for i, s in enumerate(steps, 1):
    doc.add_paragraph(f"{i}. {s}")

doc.add_heading("2.3 SBI-Codes", level=2)
add_table(doc,
    ["SBI-code", "Omschrijving", "Relevantie"],
    [
        ["70221", "Adviesbureaus management/bedrijfsvoering/techniek", "Primaire activiteit"],
        ["74901", "Advies- en ingenieursbureaus (overig)", "HSEQ consultancy"],
        ["71121", "Engineeringbureaus (industriële procesbeheersing)", "Veiligheidskunde"],
    ]
)

doc.add_heading("2.4 Handelsnaam", level=2)
doc.add_paragraph(
    "Kies een handelsnaam die professioneel overkomt en niet in strijd is met bestaande namen. "
    "Opties: 'JG Consultancy', 'Jorick van Gemert HSEQ', of een beschrijvende naam zoals "
    "'Gemert Safety Advisory'. Controleer via KvK Handelsregister en BOIP (Benelux merken) [2]."
)

# ============================================================
# HOOFDSTUK 3: BELASTING — CRITIEKE SECTIE
# ============================================================
doc.add_heading("3. Belasting & Fiscale Zaken", level=1)

add_warning(doc, "Dit is het belangrijkste hoofdstuk. De combinatie loondienst + ZZP heeft specifieke fiscale gevolgen. Lees dit zorgvuldig en overleg met een belastingadviseur.")

doc.add_heading("3.1 Combinatie Loondienst en ZZP — Hoe werkt dit?", level=2)
doc.add_paragraph(
    "Je hebt twee inkomstenstromen die verschillend belast worden:"
)
add_table(doc,
    ["Inkomstenbron", "Belasting", "Box"],
    [
        ["Wintershall loondienst", "Loonheffing (ingehouden door werkgever)", "Box 1"],
        ["Phoenix Metals ZZP", "Inkomstenbelasting (via aangifte)", "Box 1 (winst uit onderneming)"],
    ]
)
doc.add_paragraph()
doc.add_paragraph(
    "Beide stromen worden SAMEN genomen in Box 1 van de inkomstenbelasting. Je totale "
    "belastbare inkomen = loonsalaris + ZZP-winst (na aftrekposten). Dit betekent dat je "
    "ZZP-winst mogelijk in een hogere belastingschaal valt, omdat je salaris de eerste schijf "
    "al (deels) vult [3]."
)

doc.add_heading("3.2 Het Urencriterium — 1.225 Uur — Kritiek", level=2)

p = doc.add_paragraph()
run = p.add_run("DIT IS HET BELANGRIJKSTE PUNT VAN DIT DOCUMENT.")
run.font.bold = True
run.font.color.rgb = WARNING
run.font.size = Pt(12)

doc.add_paragraph(
    "Om in aanmerking te komen voor de zelfstandigenaftrek, startersaftrek en "
    "MKB-winstvrijstelling MOET je minimaal 1.225 uur per kalenderjaar besteden aan je "
    "onderneming. Bij 1-2 dagen per week is dit lastig maar mogelijk:"
)
add_table(doc,
    ["Scenario", "Dagen/week", "Uren/dag", "Weken/jaar", "Totaal uren", "Urencriterium?"],
    [
        ["Minimum", "1 dag", "8 uur", "46 weken", "368 uur", "❌ NIET gehaald"],
        ["Gemiddeld", "1,5 dagen", "8 uur", "46 weken", "552 uur", "❌ NIET gehaald"],
        ["Ruim", "2 dagen", "8 uur", "46 weken", "736 uur", "❌ NIET gehaald"],
        ["Ruim + overwerk", "2 dagen", "10 uur", "50 weken", "1.000 uur", "❌ NIET gehaald"],
        ["Bovenlimiet", "2,5 dagen", "8,5 uur", "50 weken", "1.063 uur", "❌ NIET gehaald"],
        ["Nét gehaald", "3 dagen", "8,5 uur", "49 weken", "1.250 uur", "✅ NET GEHAALD"],
    ]
)
doc.add_paragraph()

add_warning(doc, "Conclusie: Met 1-2 dagen per week haal je het urencriterium van 1.225 uur vrijwel ZEKER NIET. Dit betekent GEEN zelfstandigenaftrek, GEEN startersaftrek, GEEN MKB-winstvrijstelling.")

doc.add_heading("3.3 Opties om het Urencriterium te Halen", level=2)
doc.add_paragraph("Als je de fiscale voordelen WEL wilt benutten, zijn er opties:")
options = [
    "Meer dagen bij Phoenix Metals (3+ dagen/week) — maar dit conflicteert met Wintershall",
    "Meer opdrachtgevers erbij zoeken — om zo op meer dagen ondernemer te zijn",
    "Ondernemingsuren breed definiëren — acquisitie, administratie, opleiding, netwerken, bijeenkomsten tellen ook mee",
    "Accepteren dat het urencriterium niet gehaald wordt — dan betaal je gewoon inkomstenbelasting over de winst zonder aftrekposten",
]
for i, o in enumerate(options, 1):
    doc.add_paragraph(f"{i}. {o}")

doc.add_heading("3.4 Wat als je het urencriterium NIET haalt?", level=2)
doc.add_paragraph("Zonder urencriterium:")
add_table(doc,
    ["Voordeel", "Met 1.225 uur", "Zonder 1.225 uur"],
    [
        ["Zelfstandigenaftrek (~€12.420)", "✅ Ja", "❌ Nee"],
        ["Startersaftrek (~€2.119)", "✅ Ja", "❌ Nee"],
        ["MKB-winstvrijstelling (14,19%)", "✅ Ja", "❌ Nee"],
        ["Belasting over ZZP-winst", "Na aftrekposten, effectief ~25%", "Vol tarief Box 1 (36,97–49,50%)"],
    ]
)
doc.add_paragraph()
doc.add_paragraph(
    "Zonder urencriterium wordt je ZZP-winst simpelweg bij je loondienst-inkomen opgeteld "
    "in Box 1. Je betaalt dan het reguliere tarief (36,97% of 49,50%) over de winst. De "
    "ZZP-inkomsten worden behandeld als 'resultaat uit overige werkzaamheden' (art. 3.5 Wet IB). "
    "Je mag WEL zakelijke kosten aftrekken van de omzet (boekhouder, reiskosten, materialen) [3]."
)

doc.add_heading("3.5 Strategisch Advies — Twee Scenario's", level=2)

doc.add_heading("Scenario A: Accepteren (Geen urencriterium)", level=3)
doc.add_paragraph(
    "Je registreert je als eenmanszaak, factureert Phoenix Metals, en accepteert dat je "
    "de fiscale aftrekposten mist. De ZZP-inkomsten worden belast in Box 1 naast je salaris. "
    "Dit is de meest realistische optie bij 1-2 dagen/week."
)
add_table(doc,
    ["Post", "Bedrag"],
    [
        ["Bruto loon Wintershall (incl. 13e mnd + bonussen)", "[Jaarsalaris]"],
        ["Bruto ZZP-omzet (2 dagen, [uurtarief]/uur)", "[Berekening]"],
        ["Totaal belastbaar inkomen (grof)", "[Jaarsalaris + ZZP-winst]"],
        ["Belastbaar in Box 1 schijf 1 (tot €75.518): 36,97%", "Op de eerste schijf"],
        ["Belastbaar in Box 1 schijf 2 (boven €75.518): 49,50%", "Op het meerdere (groot deel valt hierin)"],
        ["Netto-effect ZZP-winst", "Afhankelijk van totale inkomen en belastingschaal"],
    ]
)

doc.add_heading("Scenario B: Urencriterium halen (3+ dagen/week)", level=3)
doc.add_paragraph(
    "Als je meer uren kunt maken (bijv. door extra opdrachtgevers, of Phoenix Metals verhoogt "
    "naar 3 dagen/week), en je haalt 1.225 uur, dan profiteer je van:"
)
items = [
    "Zelfstandigenaftrek: ~€12.420 mindering op winst",
    "Startersaftrek: ~€2.119 extra mindering (eerste 3 jaar)",
    "MKB-winstvrijstelling: 14,19% van resterende winst is belastingvrij",
    "Effectief belastingtarief op ZZP-winst: ~20-25% in plaats van ~37-50%",
]
for item in items:
    add_bullet(doc, item)

doc.add_heading("3.6 BTW-aangifte", level=2)
doc.add_paragraph(
    "Onafhankelijk van het urencriterium moet je btw-aangifte doen als je omzet boven "
    "de KOR-drempel (€20.000) komt. Bij een verwachte omzet van €25.000–€55.000 val je "
    "buiten de KOR en doe je regulier btw-aangifte [4]."
)
add_table(doc,
    ["Aspect", "Details"],
    [
        ["Frequentie", "Per kwartaal"],
        ["Tarief", "21% op HSEQ consultancy-diensten"],
        ["Deadline", "Laatste dag van de maand na het kwartaal"],
        ["Instorting", "Via Mijn Belastingdienst voor Ondernemers"],
    ]
)

doc.add_heading("3.7 Voorbeeldberekening — Scenario A (Geen urencriterium)", level=2)
doc.add_paragraph("Aanname: 2 dagen/week (1 dag Phoenix Metals + 1 dag Club of Engineers), 50 weken, [uurtarief]/uur")
add_table(doc,
    ["Post", "Bedrag", "Toelichting"],
    [
        ["Bruto loon Wintershall", "[Jaarsalaris]", "Incl. 13e maand en bonusses"],
        ["ZZP omzet Phoenix Metals (1 dag/week)", "[Berekening]", "1 dag × 8 uur × [weken] × [uurtarief]"],
        ["ZZP omzet Club of Engineers (1 dag/week)", "[Berekening]", "1 dag × 8 uur × [weken] × [uurtarief]"],
        ["Totaal ZZP omzet", "[ZZP omzet]", ""],
        ["Zakelijke kosten ZZP", "–[Kosten]", "Boekhouder, verzekeringen, reiskosten, software, materialen"],
        ["ZZP-winst (belastbaar)", "[Winst]", ""],
        ["Totaal belastbaar inkomen", "[Jaarsalaris + ZZP-winst]", "Salaris + ZZP-winst"],
        ["Belasting Box 1 (schaal 1 + 2)", "[Berekening]", "36,97% + 49,50% over meerdere"],
        ["Reeds ingehouden via loonheffing", "[Bedrag]", "Via Wintershall"],
        ["Na te betalen over ZZP-winst", "~€35.000–[Berekening]", "Afhangt van heffingskortingen"],
        ["Netto ZZP-inkomen", "[Berekening]", "Van [ZZP omzet] omzet → [ZZP omzet - belasting = netto]"],
    ]
)
doc.add_paragraph()
p = doc.add_paragraph()
run = p.add_run("⚠ Belangrijk: Reserveer 40-45% van je ZZP-omzet voor belasting. Je totale inkomen ([Jaarsalaris + ZZP-winst]")
run.font.bold = True
run.font.color.rgb = WARNING

# ============================================================
# HOOFDSTUK 4: WET DBA — KRIJTIEK BIJ ÉÉN OPDRACHTGEVER
# ============================================================
doc.add_heading("4. Wet DBA & Schijnzelfstandigheid", level=1)

doc.add_heading("4.1 Het Risico — Verminderd door Twee Opdrachtgevers", level=2)
doc.add_paragraph(
    "Met twee ZZP-opdrachtgevers (Phoenix Metals en Club of Engineers) is het risico "
    "op schijnzelfstandigheid aanzienlijk lager dan bij één opdrachtgever. De Belastingdienst "
    "ziet meerdere opdrachtgevers als een sterk ondernemerskenmerk. Niettemin blijft het "
    "belangrijk om per opdrachtgever een modelovereenkomst te hebben en ondernemersgedrag "
    "te tonen [5]."
)

doc.add_heading("4.2 Mitigerende Maatregelen", level=2)
doc.add_paragraph("Om het Wet DBA-risico te minimaliseren bij beide opdrachtgevers:")
items = [
    "GETEKENDE MODELOVEREENKOMST — Per opdrachtgever apart. Download goedgekeurde modellen van belastingdienst.nl en laat ZOWEL Phoenix Metals ALS Club of Engineers deze ondertekenen",
    "ONDERNEMERSGEDRAG — Eigen laptop, eigen telefoon, eigen tarief, eigen planning, vervanging mogelijk",
    "TWEE OPDRACHTGEVERS — ✅ Al geregeld. Dit is je sterkste verdediging tegen schijnzelfstandigheid",
    "GEEN GEZAGSVERHOUDING — Je werkt niet onder direct toezicht alsof je werknemer bent",
    "Vervanging mogelijk — Je kunt (in theorie) iemand anders sturen om het werk te doen",
    "Eigen materialen — Eigen laptop, telefoon, abonnementen",
    "Eigen verantwoordelijkheid — Je bepaalt zélf hoe je het werk uitvoert",
    "AFZONDERLIJKE CONTRACTEN — Hanteer aparte overeenkomsten per opdrachtgever",
]
for item in items:
    add_bullet(doc, item)

doc.add_heading("4.3 Modelovereenkomst", level=2)
doc.add_paragraph(
    "De Belastingdienst biedt voorgekeurde modelovereenkomsten aan op "
    "belastingdienst.nl/modelovereenkomsten. Kies een model voor 'het verrichten van "
    "werkzaamheden' of 'advies/consultancy'. Belangrijk: het model moet VOORAF getekend "
    "worden door beide partijen. Bewaar een kopie in je administratie [5]."
)

doc.add_heading("4.4 Specifieke Aandachtspunten per Opdrachtgever", level=2)
doc.add_heading("Phoenix Metals", level=3)
doc.add_paragraph(
    "Aangezien Phoenix Metals een bestaande relatie is (je kent het bedrijf vanuit je "
    "HSEQ-achtergrond), is het extra belangrijk om zakelijk te blijven:"
)
for item in ["Factuur elke maand sturen — geen 'onderhands' betalen",
             "Vaste dagdelen — niet flexibel meebewegen met Phoenix Metals' rooster",
             "Geen werknemersvergoedingen (geen auto, geen telefoon van Phoenix)",
             "Houd je eigen administratie nauwkeurig bij"]:
    add_bullet(doc, item)

doc.add_heading("Club of Engineers", level=3)
doc.add_paragraph(
    "Club of Engineers is je tweede opdrachtgever. Aandachtspunten:"
)
for item in ["Check de contractstructuur — ben je direct ondercontractor of werk je via een intermediair?",
             "Bij via een intermediair: check wie de opdrachtgever is voor de Belastingdienst",
             "Modelovereenkomst apart laten tekenen",
             "Zorg dat de werkzaamheden bij Club of Engineers anders zijn dan bij Phoenix Metals (diversiteit versterkt je ondernemersprofiel)" 
            ]:
    add_bullet(doc, item)

# ============================================================
# HOOFDSTUK 5: VERZEKERINGEN
# ============================================================
doc.add_heading("5. Verzekeringen", level=1)

doc.add_heading("5.1 Overzicht — Aangepast voor Loondienst + ZZP", level=2)
add_table(doc,
    ["Verzekering", "Status", "Kosten/jaar", "Toelichting"],
    [
        ["Zorgverzekering", "✅ Geregeld via Wintershall", "—", "Via werkgever, geen actie nodig"],
        ["Aansprakelijkheid (AVB)", "Sterk aanbevolen", "€150–€350", "Schade aan derden op locatie Phoenix Metals"],
        ["Beroepsaansprakelijkheid", "Aanbevolen", "€300–€800", "Adviesfouten in HSEQ-advies"],
        ["AOV", "Optioneel (minder urgent)", "€1.200–€3.000", "Wintershall biedt vangnet bij ziekte; AOV dekt deeltijd ZZP-inkomsten"],
        ["Rechtsbijstand", "Aanbevolen", "€200–€400", "Juridische geschillen over contracten"],
        ["Arbeidsongeschiktheid ZZP-deel", "Overwegen", "€500–€1.500", "Alleen voor het ZZP-deel van je inkomen"],
    ]
)
doc.add_paragraph()
doc.add_paragraph(
    "ADVIES: AVB + Beroepsaansprakelijkheid zijn belangrijk. De AOV is minder urgent omdat "
    "Wintershall een vangnet biedt bij ziekte, maar overweeg een AOV die alleen het ZZP-inkomensdeel dekt."
)

# ============================================================
# HOOFDSTUK 6: BANK & FINANCIËN
# ============================================================
doc.add_heading("6. Bank & Financiën", level=1)

doc.add_heading("6.1 Zakelijke Betaalrekening", level=2)
doc.add_paragraph(
    "Ook bij 1-2 dagen per week is een zakelijke rekening aanbevolen voor scheiding "
    "privé/zakelijk. De Belastingdienst eist duidelijkheid over zakelijke transacties [6]."
)
add_table(doc,
    ["Bank", "Kosten/maand", "Opmerking"],
    [
        ["Knab Zakelijk", "€7–€10", "Goedkoop, online-first, goed voor deeltijd ZZP"],
        ["Bunq Business", "€0–€9", "Volledig digitaal, laagste kosten"],
        ["ING Zakelijk", "€9–€15", "Volledige dekking, fysiek kantoor"],
        ["Rabobank", "€8–€12", "Sterk in zakelijke markt"],
    ]
)

doc.add_heading("6.2 Facturatie — Wettelijke Eisen", level=2)
doc.add_paragraph("Elke factuur MOET bevatten (art. 35a Wet OB 1968) [4]:")
items = [
    "Naam en adres jouw onderneming",
    "KvK-nummer en BTW-nummer",
    "Opeenvolgend factuurnummer (zonder gaten)",
    "Factuurdatum en leveringsperiode",
    "Naam en adres Phoenix Metals",
    "Omschrijving: 'HSEQ-management diensten'",
    "Uurtarief, aantal uren, subtotaal",
    "BTW-tarief (21%) en BTW-bedrag",
    "Totaalbedrag in- en exclusief BTW",
    "Betalingsvoorwaarden (bijv. 14 of 30 dagen)",
]
for i, item in enumerate(items, 1):
    doc.add_paragraph(f"{i}. {item}")

doc.add_heading("6.3 Boekhoudsoftware", level=2)
doc.add_paragraph(
    "Voor een deeltijd ZZP met beperkt aantal transacties volstaat een eenvoudige oplossing:"
)
add_table(doc,
    ["Optie", "Kosten/maand", "Geschikt voor"],
    [
        ["e-Boekhouden", "€12–€20", "Laagdrempelig, btw-aangifte koppeling"],
        ["MoneyMonk", "€15–€25", "ZZP starters, facturatie + btw"],
        ["Excel/spreadsheet", "€0", "Minimaal — alleen als je weinig facturen hebt"],
    ]
)
doc.add_paragraph()
doc.add_paragraph(
    "ADVIES: e-Boekhouden of MoneyMonk. Laagdrempelig en voldoende voor enkele facturen per maand."
)

doc.add_heading("6.4 Belastingreserve", level=2)
doc.add_paragraph(
    "Reserveer ELKE MAAND 35-40% van je ZZP-omzet op een aparte spaarrekening voor:"
)
items = [
    "Inkomstenbelasting over ZZP-winst",
    "BTW-aanslag (als je btw verschil moet bijbetalen)",
    "Eventuele naheffingen",
]
for item in items:
    add_bullet(doc, item)
doc.add_paragraph(
    "Voorbeeld: Factuur €4.000 exclusief btw → Reserveer €1.400–€1.600 op spaarrekening."
)

# ============================================================
# HOOFDSTUK 7: CONTRACTEN & VOORWAARDEN
# ============================================================
doc.add_heading("7. Contracten & Voorwaarden", level=1)

doc.add_heading("7.1 Opdrachtsovereenkomsten — Twee Opdrachtgevers", level=2)
doc.add_paragraph(
    "Je hebt twee ZZP-opdrachtgevers. Hanteer voor beiden een afzonderlijke opdrachtsovereenkomst:"
)
doc.add_heading("Phoenix Metals", level=3)
add_table(doc,
    ["Element", "Invulling voorbeeld"],
    [
        ["Opdracht", "HSEQ-management en -advisering"],
        ["Omvang", "1 dag per week"],
        ["Uurtarief", "€[X] exclusief 21% btw"],
    ]
)
doc.add_paragraph()
doc.add_heading("Club of Engineers", level=3)
add_table(doc,
    ["Element", "Invulling voorbeeld"],
    [
        ["Opdracht", "HSEQ-consultancy / engineering advisering"],
        ["Omvang", "1 dag per week"],
        ["Uurtarief", "€[X] exclusief 21% btw"],
    ]
)

doc.add_heading("7.2 Algemene Voorwaarden", level=2)
doc.add_paragraph(
    "Stel algemene voorwaarden op en depot deze bij de KvK (kosten ~€25). Dit regelt "
    "betalingsvoorwaarden, aansprakelijkheidsbeperking, en ontbindingsgronden [2]."
)

doc.add_heading("7.3 NDA (Geheimhouding)", level=2)
doc.add_paragraph(
    "Gezien de gevoelige aard van HSEQ-werk (procesveiligheid, milieudata, bedrijfsgeheimen) "
    "is een NDA sterk aanbevolen bij beide opdrachtgevers. Meestal stelt de opdrachtgever "
    "deze zelf beschikbaar. Zorg dat je NIET dezelfde vertrouwelijke info van Phoenix Metals "
    "gebruikt bij Club of Engineers (en vice versa) — dit is een conflict of interest risico."
)

doc.add_heading("7.4 Tariefstelling HSEQ 2026", level=2)
add_table(doc,
    ["Type", "Range 2026", "Advies"],
    [
        ["Uurtarief", "€75–€150", "€95–€120 (ervaren HSEQ, deeltijd)"],
        ["Dagtarief", "[Uurtarief × 8]", "[Dagtarief]"],
        ["Maandelijks (8 dagen)", "[Dagtarief × dagen]", "Afhankelijk van scope"],
        ["Maandelijks (4 dagen)", "[Dagtarief × dagen]", "Minimale bandbreedte"],
    ]
)
doc.add_paragraph()
doc.add_paragraph(
    "ADVIES: Vastgesteld uurtarief hanteren. Marktconform voor een ervaren HSEQ-manager "
    "op interim-basis. Je Wintershall-salaris is je basisinkomen — het ZZP-tarief is extra. "
    "Ga niet te laag zitten; je brengt specialistische expertise [7]."
)

# ============================================================
# HOOFDSTUK 8: SUBSIDIES & VOORDELEN
# ============================================================
doc.add_heading("8. Subsidies, Voordelen & Regelingen", level=1)

doc.add_heading("8.1 Fiscale Voordelen — Realistisch Overzicht", level=2)
add_table(doc,
    ["Voordeel", "Beschikbaar?", "Voorwaarde"],
    [
        ["Zelfstandigenaftrek (~€12.420)", "⚠ Onzeker", "Alleen bij 1.225 uren — waarschijnlijk NIET gehaald"],
        ["Startersaftrek (~€2.119)", "⚠ Onzeker", "Idem — afhankelijk van urencriterium"],
        ["MKB-winstvrijstelling (14,19%)", "⚠ Onzeker", "Idem — afhankelijk van urencriterium"],
        ["Zakelijke kosten aftrekken", "✅ Ja", "ALTIJD — boekhouder, reiskosten, materialen, software"],
        ["Investeringaftrek", "✅ Ja (als ondernemer)", "Bedrijfsmiddelen >€450"],
        ["KOR (btw-vrijstelling)", "❌ Nee", "Omzet >€20.000 → valt buiten KOR"],
    ]
)

doc.add_heading("8.2 Gemeentelijke Regelingen", level=2)
doc.add_paragraph(
    "Voor gemeente Heiloo/regio Alkmaar: check heiloo.nl/ondernemen voor evt. starterslening "
    "of adviesregelingen. Bij een deeltijd ZZP is een lening waarschijnlijk niet nodig [8]."
)

doc.add_heading("8.3 Belastingvoordeel via Werkgever", level=2)
doc.add_paragraph(
    "Vergeet niet dat je via Wintershall al profiteert van:"
)
items = [
    "Werkgeversdeel zorgverzekering (geen aparte actie nodig)",
    "Pensioenopbouw (via werkgever)",
    "AOV/ziektewet vangnet bij ziekte (via werkgever)",
    "Vakantiegeld en eindejaarsuitkering",
]
for item in items:
    add_bullet(doc, item)

# ============================================================
# HOOFDSTUK 9: WET- EN REGELGEVING
# ============================================================
doc.add_heading("9. Wettelijk Kader", level=1)

doc.add_heading("9.1 Wet DBA — Zie Hoofdstuk 4", level=2)
doc.add_paragraph("(Uitgebreid behandeld in Hoofdstuk 4)")

doc.add_heading("9.2 Arbowet — Dubbele Rol", level=2)
doc.add_paragraph(
    "Als werknemer bij Wintershall ben je beschermd door de Arbowet via je werkgever. "
    "Als ZZP'er bij Phoenix Metals ben je zelf verantwoordelijk voor je arbeidsomstandigheden. "
    "Phoenix Metals moet als opdrachtgever echter wel zorgen voor een veilige werkplek "
    "(Arbowet art. 3). Check of Phoenix Metals een RI&E heeft en of je een veiligheidsinstructie "
    "krijgt bij aanvang [9]."
)

doc.add_heading("9.3 AVG/GDPR", level=2)
doc.add_paragraph(
    "Als HSEQ-manager verwerk je mogelijk persoonsgegevens (medische gegevens bij "
    "bedrijfsgezondheidsdienst, incidentrapportages met persoonsgegevens). Zorg voor een "
    "verwerkersovereenkomst met Phoenix Metals en voldoe aan AVG-vereisten [10]."
)

doc.add_heading("9.4 Controleclausule Loonbelasting", level=2)
doc.add_paragraph(
    "De Belastingdienst kan jouw situatie controleren. Met een combinatie van loondienst "
    "(Wintershall) en ZZP (Phoenix Metals) in dezelfde branche (HSEQ), is het risico op "
    "een controle reëel. Houd je administratie dus strak bij [5]."
)

# ============================================================
# HOOFDSTUK 10: ADMINISTRATIE & ROUTINE
# ============================================================
doc.add_heading("10. Administratie & Routine", level=1)

doc.add_heading("10.1 Wekelijks", level=2)
add_checkbox_list(doc, [
    "Gewerkte uren voor Phoenix Metals registreren",
    "Gewerkte uren voor Club of Engineers registreren",
    "Overheaduren registreren (admin, acquisitie, netwerken, opleiding)",
    "Bonnen/bonnetjes verzamelen en scannen",
    "Eventuele reiskosten registreren",
])

doc.add_heading("10.2 Maandelijks", level=2)
add_checkbox_list(doc, [
    "Factuur naar Phoenix Metals sturen",
    "Factuur naar Club of Engineers sturen",
    "Alle kosten in boekhouding verwerken",
    "Bankafschriften matchen",
    "35-40% van ZZP-omzet overmaken naar belastingreserve-rekening",
    "Openstaande facturen controleren",
])

doc.add_heading("10.3 Kwartaal", level=2)
add_checkbox_list(doc, [
    "BTW-aangifte indienen (deadline: laatste dag volgende maand)",
    "Kwartaaloverzicht: omzet, kosten, winst",
])

doc.add_heading("10.4 Jaarlijks", level=2)
add_checkbox_list(doc, [
    "Inkomstenbelasting aangifte (inclusief ZZP-winst in Box 1)",
    "Loonaangifte via Wintershall wordt apart gedaan (door werkgever)",
    "Jaaroverzicht: totaal inkomen, belasting betaald, eventuele teruggaaf",
    "Contracten evalueren en verlengen/opzeggen",
])

doc.add_heading("10.5 Archiveerplicht", level=2)
doc.add_paragraph("Bewaartermijnen: 7 jaar voor belasting- en btw-documenten [4].")

# ============================================================
# HOOFDSTUK 11: TIJDPAD
# ============================================================
doc.add_heading("11. Tijdpad & Actielijst", level=1)

doc.add_heading("Week 1: Oprichten", level=2)
add_checkbox_list(doc, [
    "KvK-inschrijving afronden (online, 5 min, €50)",
    "Handelsnaam vaststellen",
    "Zakelijke bankrekening openen (Bunq/Knab/ING)",
    "Btw-nummer ontvangen (automatisch via KvK)",
    "AVB + Beroepsaansprakelijkheid verzekering afsluiten",
    "Boekhoudsoftware installeren (e-Boekhouden of MoneyMonk)",
])

doc.add_heading("Week 2: Contracten", level=2)
add_checkbox_list(doc, [
    "Modelovereenkomst downloaden (Belastingdienst) en invullen",
    "Opdrachtsovereenkomst Phoenix Metals opstellen/laten opstellen",
    "NDA regelen (door Phoenix Metals of zelf)",
    "Algemene voorwaarden opstellen en depot bij KvK",
    "Factuur-template ontwerpen",
    "Btw-spaarrekening openen",
])

doc.add_heading("Week 3: Starten", level=2)
add_checkbox_list(doc, [
    "Eerste werkdag bij Phoenix Metals",
    "Contracten ondertekend en bewaard?",
    "Urenregistratie gestart",
    "Veiligheidsinstructie Phoenix Metals ontvangen?",
    "RI&E Phoenix Metals opgevraagd?",
])

doc.add_heading("Week 4 en verder: Routine", level=2)
add_checkbox_list(doc, [
    "Maandelijks factuur sturen na afloop van de maand",
    "Kosten bijhouden in boekhoudsoftware",
    "Btw reserve doorsluisen naar spaarrekening",
    "Na eerste kwartaal: btw-aangifte indienen",
    "Eind jaar: inkomstenbelasting aangifte doen (ZZP-winst + loondienst)",
])

# ============================================================
# HOOFDSTUK 12: RISICO'S
# ============================================================
doc.add_heading("12. Risico's & Valkuilen", level=1)

add_table(doc,
    ["Risico", "Impact", "Waarschijnlijkheid", "Mitigatie"],
    [
        ["Urencriterium niet gehaald", "HOOG (geen fiscale aftrek)", "MIDDEN (haalbaar met overheaduren)", "Overheaduren registreren, langere dagen"],
        ["Wet DBA — twee opdrachtgevers", "MIDDEN", "LAAG", "Modelovereenkomsten per opdrachtgever + ondernemersgedrag"],
        ["Geen belastingreserve", "HOOG (naheffing, boete)", "MIDDEN", "35-40% direct reserven"],
        ["Conflict met Wintershall", "LAAG", "LAAG", "Contractvoorwaarden staan nevenactiviteiten toe (zonder nadelige effecten)"],
        ["Te laag tarief", "MIDDEN", "MIDDEN", "Marktconform tarief hanteren ([marktconform tarief])"],
        ["Late betaling", "LAAG", "LAAG", "Betalingsvoorwaarden in contract"],
        ["AVG-overtreding", "HOOG", "LAAG", "Verwerkersovereenkomst + beveiliging"],
    ]
)

doc.add_heading("12.1 Belangrijkste Waarschuwingen", level=2)
warnings = [
    "✅ Wintershall contractvoorwaarden: nevenactiviteiten zijn toegestaan zolang ze geen nadelig effect hebben op je werkzaamheden voor Wintershall. Stuur een informatieve email naar HR ter documentatie.",
    "Met twee opdrachtgevers is je Wet DBA-risico aanzienlijk lager. Toch: modelovereenkomsten zijn VERPLICHT bij beide.",
    "Het urencriterium van 1.225 uur is haalbaar als je overheaduren structureel registreert (admin, acquisitie, opleiding, reistijd).",
    "Reserveer ELKE MAAND 35-40% van je ZZP-omzet. Niet doen = naheffing + boete.",
    "Overweeg een boekhouder — de kosten zijn aftrekbaar en voorkomen fouten.",
]
for w in warnings:
    add_warning(doc, w)

# ============================================================
# BIJLAGEN
# ============================================================
doc.add_page_break()
doc.add_heading("Bijlagen", level=1)

# BIJLAGE A
doc.add_heading("Bijlage A: Model Opdrachtbevestigingen", level=2)
doc.add_heading("Opdrachtbevestiging 1 — Phoenix Metals", level=3)
add_table(doc,
    ["Veld", "Invulling"],
    [
        ["Opdrachtgever", "Phoenix Metals B.V., [KvK-nummer], [adres]"],
        ["Opdrachtnemer", "Jorick van Gemert, [KvK-nummer], Heiloo"],
        ["Opdrachtomschrijving", "HSEQ-management en -advisering"],
        ["Omvang", "1 dag per week"],
        ["Uurtarief", "€[X] exclusief 21% btw"],
        ["Startdatum", "[Datum]"],
        ["Looptijd", "In eerste instantie [X] maanden"],
        ["Facturatie", "Maandelijks achteraf op basis van gemaakte uren"],
        ["Betalingsvoorwaarden", "Betaling binnen 30 dagen na factuurdatum"],
        ["Modelovereenkomst", "Belastingdienst model [nummer], bijgevoegd"],
        ["NDA", "Ja, bijgevoegd"],
    ]
)
doc.add_paragraph()
doc.add_heading("Opdrachtbevestiging 2 — Club of Engineers", level=3)
add_table(doc,
    ["Veld", "Invulling"],
    [
        ["Opdrachtgever", "Club of Engineers, [KvK-nummer], [adres]"],
        ["Opdrachtnemer", "Jorick van Gemert, [KvK-nummer], Heiloo"],
        ["Opdrachtomschrijving", "HSEQ-consultancy / engineering advisering"],
        ["Omvang", "1 dag per week"],
        ["Uurtarief", "€[X] exclusief 21% btw"],
        ["Startdatum", "[Datum]"],
        ["Looptijd", "In eerste instantie [X] maanden"],
        ["Facturatie", "Maandelijks achteraf op basis van gemaakte uren"],
        ["Betalingsvoorwaarden", "Betaling binnen 30 dagen na factuurdatum"],
        ["Modelovereenkomst", "Belastingdienst model [nummer], bijgevoegd"],
    ]
)

# BIJLAGE B
doc.add_page_break()
doc.add_heading("Bijlage B: Checklist Startende Deeltijd ZZP'er", level=2)

categories = {
    "KvK & Rechtsvorm": [
        "KvK-inschrijving voltooid (€50)",
        "Handelsnaam vastgesteld",
        "KvK-nummer ontvangen",
        "Btw-nummer ontvangen",
        "SBI-codes geselecteerd",
    ],
    "Bank & Financiën": [
        "Zakelijke bankrekening geopend",
        "Btw-spaarrekening geopend",
        "Boekhoudsoftware geïnstalleerd",
    ],
    "Verzekeringen": [
        "AVB afgesloten",
        "Beroepsaansprakelijkheid afgesloten",
        "AOV overwogen (optioneel bij loondienst naast ZZP)",
    ],
    "Contracten": [
        "Modelovereenkomst Belastingdienst getekend — Phoenix Metals",
        "Modelovereenkomst Belastingdienst getekend — Club of Engineers",
        "Opdrachtsovereenkomst Phoenix Metals getekend",
        "Opdrachtsovereenkomst Club of Engineers getekend",
        "NDA Phoenix Metals getekend (indien van toepassing)",
        "NDA Club of Engineers getekend (indien van toepassing)",
        "Algemene voorwaarden opgesteld en gedeponeerd bij KvK",
        "Factuur-template klaar",
    ],
    "Wintershall — Akkoord": [
        "✅ Arbeidsovereenkomst gecheckt: nevenactiviteiten toegestaan",
        "✅ Voorwaarde: geen nadelig effect op Wintershall-werkzaamheden",
        "☐ Informatieve email naar HR gestuurd (zwart-op-wit bevestiging)",
        "☐ Geen overlap Wintershall-dagen met ZZP-dagen",
        "☐ Sectorverschil bevestigd: Wintershall (olie/gas) vs. Phoenix Metals / Club of Engineers (geen conflict of interest)",
    ],
    "Start": [
        "Eerste werkdag Phoenix Metals ingepland",
        "Eerste werkdag Club of Engineers ingepland",
        "Urenregistratie gestart (voor beide opdrachten + overhead)",
        "Veiligheidsinstructie Phoenix Metals ontvangen",
        "Introductie Club of Engineers ontvangen",
    ],
}

for cat, items in categories.items():
    doc.add_heading(cat, level=3)
    add_checkbox_list(doc, items)

# BIJLAGE C
doc.add_page_break()
doc.add_heading("Bijlage C: Voorbeeld Factuur", level=2)
add_table(doc,
    ["", ""],
    [
        ["JG Consultancy", ""],
        ["[Straatnaam 1, 1851 KE Heiloo]", ""],
        ["KvK: [nummer] | BTW: NL[nummer]", ""],
        ["Bank: NL[IBAN] | Tel: [nummer]", ""],
        ["", ""],
        ["FACTUUR", ""],
        ["Factuurnummer:", "2026-001"],
        ["Factuurdatum:", "[datum]"],
        ["Vervaldatum:", "[datum + 30 dagen]"],
        ["", ""],
        ["Opdrachtgever:", "Phoenix Metals B.V."],
        ["[Adres Phoenix Metals]", ""],
        ["", ""],
        ["Omschrijving", "Bedrag"],
        ["HSEQ-management — Mei 2026 (4 dagen × [uren] × [uurtarief])", "[Bedrag]"],
        ["HSEQ-consultancy Club of Engineers — Mei 2026 (4 dagen × [uren] × [uurtarief])", "[Bedrag]"],
        ["", ""],
        ["Subtotaal excl. btw", "€6.400,00"],
        ["BTW 21%", "€1.344,00"],
        ["TOTAAL", "€7.744,00"],
        ["", ""],
        ["Betaling:", "Binnen 30 dagen op NL[IBAN] t.n.v. J. van Gemert"],
    ]
)

# BIJLAGE D
doc.add_page_break()
doc.add_heading("Bijlage D: Bronverwijzingen", level=2)
refs = [
    "[1] Belastingdienst — Ondernemers en inkomstenbelasting: belastingdienst.nl",
    "[2] Kamer van Koophandel — Starten als eenmanszaak: kvk.nl",
    "[3] Belastingdienst — Urencriterium en zelfstandigenaftrek: belastingdienst.nl",
    "[4] Belastingdienst — BTW-aangifte en kleineondernemersregeling: belastingdienst.nl",
    "[5] Belastingdienst — Wet DBA en modelovereenkomsten: belastingdienst.nl/modelovereenkomsten",
    "[6] Belastingdienst — Zakelijke kosten aftrekken: belastingdienst.nl",
    "[7] Interim Planet — Tarieven HSEQ interim management 2026: interim-planet.nl",
    "[8] Gemeente Heiloo — Ondernemen: heiloo.nl",
    "[9] Rijksoverheid — Arbowet: rijksoverheid.nl/arbowet",
    "[10] Autoriteit Persoonsgegevens — AVG/GDPR: autoriteitpersoonsgegevens.nl",
]
for ref in refs:
    p = doc.add_paragraph(ref)
    for r in p.runs:
        r.font.size = Pt(9)

# BIJLAGE E
doc.add_heading("Bijlage E: TierVerify Log", level=2)
add_table(doc,
    ["Check", "Bron", "Status", "Opmerking"],
    [
        ["Urencriterium 1.225 uur", "belastingdienst.nl", "✅ Geverifieerd", "1.225 uur/jaar verplicht"],
        ["KvK-inschrijving kosten", "kvk.nl", "✅ Geverifieerd", "€50 standaard"],
        ["BTW-tarief consultancy", "Wet OB 1968", "✅ Geverifieerd", "21% standaard"],
        ["Wet DBA modelovereenkomst", "belastingdienst.nl", "✅ Geverifieerd", "Actueel 2026"],
        ["Box 1 tarieven 2026", "belastingdienst.nl", "⚠ Indicatief", "Schatting op basis van 2025"],
        ["Zelfstandigenaftrek bedrag", "belastingdienst.nl", "⚠ Indicatief", "Exact 2026 bedrag bevestigen"],
        ["KOR drempelbedrag", "belastingdienst.nl", "✅ Geverifieerd", "€20.000"],
        ["Archiveerplicht", "Belastingdienst", "✅ Geverifieerd", "7 jaar"],
    ]
)

# ============================================================
# SAVE
# ============================================================
os.makedirs(os.path.dirname(OUTPUT_PATH), exist_ok=True)

# Archive old version
old_path = None
    # no archive needed for v2.0

doc.save(OUTPUT_PATH)
print(f"✅ Document opgeslagen: {OUTPUT_PATH}")

# Changelog
changelog_path = "/root/projects/jg/2026-zzp-opstart-hhc/logs/changelog.md"
import datetime
with open(changelog_path, "a") as f:
    f.write(f"\n## v2.0 — 1 mei 2026 (08:00 UTC)\n")
    f.write(f"- Versie 2.0: Generieke versie zonder persoonlijke salarisbedragen\n")
    f.write(f"- Voorbeeldberekeningen gebruiken variabelen (€X) i.p.v. concrete bedragen\n")
    f.write(f"- Structuur en inhoud verder gelijk aan v1.4\n")
print(f"✅ Changelog bijgewerkt")
