148 lines
4.3 KiB
Python
148 lines
4.3 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
Author: J.A. de Jong - ASCEE
|
|
|
|
"""
|
|
__all__ = ['IKB_single']
|
|
|
|
|
|
class IKB_single:
|
|
"""
|
|
Inkomstenbelasting voor een ZZP-er, voor gegeven brutowinst
|
|
"""
|
|
def __init__(self, jaar=2019,
|
|
startersaftrek: bool = False,
|
|
ondernemersaftrek: bool = True,
|
|
priveaftrek: float = 0.,
|
|
voorlopig: float = 0.,
|
|
verbose = True,
|
|
):
|
|
"""
|
|
Initialiseer een IKB-klasse voor een enkele ondernemer.
|
|
|
|
Args:
|
|
startersaftrek: True als de startersaftrek toegepast moet worden
|
|
ondernemersaftrek: True als de ondernemersaftrekposten, zoals
|
|
MKB-winstvrijstelling en zelfstandigenaftrek toegepast dient te
|
|
worden.
|
|
priveaftrek: Prive-aftrekposten (denk aan premie A.O.V.)
|
|
voorlopig: Reeds betaalde hoeveelheid belasting in voorlopige
|
|
aanslag
|
|
|
|
"""
|
|
|
|
if jaar != 2019:
|
|
raise NotImplementedError('2019 kan alleen in deze versie')
|
|
|
|
self.sa = startersaftrek
|
|
self.oa = ondernemersaftrek
|
|
self.priveaftrek = priveaftrek
|
|
self.voorlopig = voorlopig
|
|
|
|
def bereken(self, brutowinst:float,
|
|
investeringen:float=0.):
|
|
"""
|
|
Bereken de te betalen IKB over 2019
|
|
|
|
Args:
|
|
brutowinst: winst uit ondernememing dat voor rekening van deze
|
|
persoon komt (€).
|
|
voorlopig: reeds betaald via voorlopige aanslag (€)
|
|
investeringen: vul hier het totaal in van het bedrag aan
|
|
investeringen dat dit jaar gedaan is (€). Dit wordt gebruikt voor
|
|
het berekenen van de kleinschaligheidsinvesteringsaftrek (KIA). Let
|
|
op: zet dit op 0 voor een V.O.F.!
|
|
|
|
Returns:
|
|
Nog te betalen IKB voor het jaar (€)
|
|
|
|
"""
|
|
|
|
nettowinst = brutowinst
|
|
if self.oa:
|
|
# Zelfstandigenaftrek
|
|
nettowinst = max(nettowinst - 7280, 0)
|
|
if self.sa:
|
|
nettowinst = max(nettowinst - 2123, 0)
|
|
|
|
if self.oa:
|
|
# MKB-winstvrijstelling
|
|
nettowinst *= (1 - 0.14)
|
|
|
|
# Kleinschaligheidsinvesteringsaftrek
|
|
if investeringen <= 2300:
|
|
kia = 0.
|
|
elif investeringen <= 57321.:
|
|
kia = 0.28*investeringen
|
|
elif investeringen <= 106150.:
|
|
kia = 16051
|
|
elif investeringen <= 318449.:
|
|
kia = 16051 - 0.0756*(investeringen - 106150)
|
|
else:
|
|
kia = 0.
|
|
|
|
BI = max(0, nettowinst - self.priveaftrek - kia)
|
|
# print(f'Nettowinst: € {nettowinst}')
|
|
print(f'Verzamelinkomen: {BI}')
|
|
|
|
# Afdeling: inkomstenbelasting ####################
|
|
# ibz: inkomensafhankelijke bijdrage z.v.w.
|
|
ibzvw = min(BI, 54614)*0.0565
|
|
print(f'IBZVW: {ibzvw}')
|
|
|
|
s1end = 20384.
|
|
perc_s1 = .3655
|
|
|
|
s2end = 34300.
|
|
perc_s2 = 0.381
|
|
|
|
s3end = 68507.
|
|
perc_s3 = 0.381
|
|
perc_s4 = 0.5175
|
|
|
|
# inkomstenbelasting schijven
|
|
ibs1 = min(BI, s1end)*perc_s1
|
|
print(f'IB Schijf 1: {ibs1}')
|
|
ibs2 = max(min(BI, s2end) - s1end, 0)*perc_s2
|
|
print(f'IB Schijf 2: {ibs2}')
|
|
ibs3 = max(min(BI, s3end) - s2end, 0)*perc_s3
|
|
print(f'IB Schijf 3: {ibs3}')
|
|
ibs4 = max(min(BI, s3end) - s3end, 0)*perc_s4
|
|
print(f'IB Schijf 4: {ibs4}')
|
|
|
|
belasting_box1 = ibzvw + ibs1+ibs2+ibs3+ibs4
|
|
print(f'Belasting box 1: {belasting_box1}')
|
|
assert belasting_box1 >= 0
|
|
|
|
# Afdeling: Heffingskortingen ####################
|
|
|
|
# Algemene heffingskorting
|
|
if BI <= 20384:
|
|
ahk = 2477
|
|
elif BI <= 68507:
|
|
ahk = 2477 - 0.05147 * (BI - 20384)
|
|
else:
|
|
ahk = 0
|
|
print(f'Alg. hk: {ahk}')
|
|
|
|
# Arbeidskorting
|
|
if BI < 9694:
|
|
ak = 0.01754 * BI
|
|
elif BI <= 20940:
|
|
ak = 170 + 0.28712*(BI - 9694)
|
|
elif BI <= 34060:
|
|
ak = 3399.
|
|
elif BI <= 90710:
|
|
ak = 3399 - 0.06*(BI - 34060)
|
|
else:
|
|
ak = 0.
|
|
print(f'Arbeidskorting: {ak}')
|
|
|
|
belasting = max(0, belasting_box1 - ahk - ak)
|
|
return belasting - self.voorlopig
|
|
|
|
|
|
# class IKB_VOF:
|
|
|