feat: add accijnswet and update harmonise tab for entrepeneurs#421
feat: add accijnswet and update harmonise tab for entrepeneurs#421ravimeijerrig wants to merge 3 commits intomainfrom
Conversation
anneschuth
left a comment
There was a problem hiding this comment.
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.lockdiff 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.
…tants, cost_mode)
Summary
precariobelasting under "Belastingen & Heffingen"
increase with revenue
Key changes
(not flat/declining)
Test plan