Skip to content

feat: add accijnswet and update harmonise tab for entrepeneurs#421

Open
ravimeijerrig wants to merge 3 commits intomainfrom
feat/add_douane_accijns_law
Open

feat: add accijnswet and update harmonise tab for entrepeneurs#421
ravimeijerrig wants to merge 3 commits intomainfrom
feat/add_douane_accijns_law

Conversation

@ravimeijerrig
Copy link
Copy Markdown
Contributor

Summary

  • Add excise duty (Wet op de accijns) and ZVW employer contribution (Zorgverzekeringswet) to the harmonization tab, grouped with
    precariobelasting under "Belastingen & Heffingen"
  • Enable all three synthesis methods (bracket, decision tree, parametric) for entrepreneurs with cost-aware formulas that
    increase with revenue
  • Add custom tile template for excise law and switch default scenario tab to excise (17 scenarios)

Key changes

  • Simulation: generate revenue, employees, salary, and alcohol production data for businesses; calculate excise and ZVW amounts
  • Synthesis models: auto-detect cost vs benefit direction so bracket, tree, and parametric models all produce increasing costs
    (not flat/declining)
  • UI: business-appropriate labels throughout (costs/revenue/per year instead of benefits/income/per month)
  • Accijns tile: formatted specification table with tariff breakdown, AGP warning, and requires_manual_approval: true
  • Demo profile: HACCP, NVWA, KVK jaarrekening hidden; excise as default law/scenario

Test plan

  • uv run behave features/douane/ features/overig/precariobelasting*.feature features/toeslagen/ -v — all 47 scenarios pass
  • Harmonization tab: train all 3 methods as ondernemer and as burger
  • Accijns tile: no floating-point artifacts, requires manual approval

Copy link
Copy Markdown
Member

@anneschuth anneschuth left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hoi Ravi, mooie toevoeging! De accijnswet is een goed voorbeeld van een complexere belastingwet met productcategorieën en tariefschijven. Een paar dingen die me opvielen:

Inhoudelijk

Alcoholdrempel in de YAML
De requirement checkt nu $ALCOHOLPERCENTAGE > 0, maar de Wet op de accijns vrijstelt bier onder 0,5% vol en wijn/overige onder 1,2% vol (Art. 6/8). Een biertje van 0,3% zou nu onterecht belast worden. Kan je die drempel per producttype maken?

Wetten verdwenen uit harmonisatie-tab
_BUSINESS_LAWS gaat van 7 naar 3 — alcoholwet, HACCP, CBS-enquête en NVWA-meldplicht zijn weg. Is dat bewust? Als het de bedoeling is om alleen "betalingswetten" te tonen, is het handig om dat ergens te documenteren (of een comment in de code).

ZVW zonder YAML-definitie
De accijnswet heeft een nette YAML, maar ZVW werkgeversbijdrage leeft alleen als hardcoded formule in simulate.py. Lijkt me goed om daar ook een YAML-definitie voor te maken, zodat het consistent is. Hoeft niet per se in deze PR.

Code

Magic numbers in simulate.py
De lognormal-parameters (mean=12.5, sigma=0.5), ZVW-tarieven (0.0657, 71624.0) en accijnstarieven staan als losse getallen in de code. Zou je die als named constants bovenaan kunnen zetten, met een opmerking welk jaar ze betreffen?

Accijnstarieven op drie plekken
De tarieven staan nu in de YAML, in simulate.py én in de feature file. Bij een tariefwijziging moet je op drie plekken tegelijk aanpassen. Misschien kan de simulatie de tarieven uit de YAML halen?

ZVW-loop
De loop over werknemers in simulate.py (regel ~1571 in de diff) doet per werknemer dezelfde berekening terwijl bruto_loon_per_werknemer voor iedereen gelijk is. n * min(loon, max) * pct is equivalent en duidelijker.

Column-name sniffing
_detect_primary_feature kiest op basis van kolomnamen ("income" vs "jaaromzet"). Als beide aanwezig zijn, pakt hij stilletjes de verkeerde. Een expliciete cost_mode parameter zou robuuster zijn.

Tests

De berekeningen in de feature file kloppen (heb ze handmatig nagerekend, compliment!). Wat nog leuke toevoegingen zouden zijn:

  • Grenswaarde bier waar normaal tarief = minimumtarief (~3,2% vol)
  • Mousserende wijn onder 8,5% vol
  • Mousserende tussenproducten (nu alleen niet-mousserend)
  • De else: "onbekend" branch in accijnscategorie

Overig

  • De YAML gebruikt schema v0.1.7 — met PR #419 onderweg naar v0.5.0 is dat extra migratiewerk. Overweeg om direct v0.5.0 te gebruiken, of accepteer dat het mee-migreert.
  • De uv.lock diff is ~2500 regels door een revision change. Misschien apart committen zodat de inhoudelijke diff makkelijker te lezen is?
  • De PR bundelt drie features (accijnswet, ZVW, synthesize-refactor). Opsplitsen zou review en eventuele rollback makkelijker maken, maar snap dat het samenhangt.

Al met al een solide PR. De accijns-YAML met alle legal_basis-annotaties en de 19 scenario's zijn goed doordacht. De synthesize-refactor voor cost-mode is netjes opgezet. Vooral die alcoholdrempel zou ik voor merge willen fixen.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants