|
|
|
@ -3,8 +3,14 @@
|
|
|
|
|
""" |
|
|
|
|
Author: J.A. de Jong - ASCEE |
|
|
|
|
|
|
|
|
|
Beperkingen: eigenwoningforfait en hypotheekrenteaftrek worden nog niet |
|
|
|
|
meegenomen. Het handigst is om de som van deze bedragen mee te nemen in de |
|
|
|
|
priveaftrek. |
|
|
|
|
|
|
|
|
|
Vul alleen investeringen in waarvoor investeringsaftrek geldt (geen |
|
|
|
|
personenauto's bijvoorbeeld). |
|
|
|
|
""" |
|
|
|
|
__all__ = ['IKB_single'] |
|
|
|
|
__all__ = ['IKB_single', 'IKB_VOF'] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class IKB_single: |
|
|
|
@ -16,6 +22,7 @@ class IKB_single:
|
|
|
|
|
ondernemersaftrek: bool = True, |
|
|
|
|
priveaftrek: float = 0., |
|
|
|
|
voorlopig: float = 0., |
|
|
|
|
investeringen: float = 0, |
|
|
|
|
verbose = True, |
|
|
|
|
): |
|
|
|
|
""" |
|
|
|
@ -29,7 +36,10 @@ class IKB_single:
|
|
|
|
|
priveaftrek: Prive-aftrekposten (denk aan premie A.O.V.) |
|
|
|
|
voorlopig: Reeds betaalde hoeveelheid belasting in 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.! |
|
|
|
|
""" |
|
|
|
|
|
|
|
|
|
if jaar != 2019: |
|
|
|
@ -39,6 +49,7 @@ class IKB_single:
|
|
|
|
|
self.oa = ondernemersaftrek |
|
|
|
|
self.priveaftrek = priveaftrek |
|
|
|
|
self.voorlopig = voorlopig |
|
|
|
|
self.investeringen = investeringen |
|
|
|
|
|
|
|
|
|
def bereken(self, brutowinst:float, |
|
|
|
|
investeringen:float=0.): |
|
|
|
@ -49,10 +60,7 @@ class IKB_single:
|
|
|
|
|
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 (€) |
|
|
|
@ -69,8 +77,11 @@ class IKB_single:
|
|
|
|
|
if self.oa: |
|
|
|
|
# MKB-winstvrijstelling |
|
|
|
|
nettowinst *= (1 - 0.14) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nettowinst = max(0, nettowinst) |
|
|
|
|
print(f'Nettowinst na ondernemersaftrekposten {nettowinst}') |
|
|
|
|
# Kleinschaligheidsinvesteringsaftrek |
|
|
|
|
investeringen = self.investeringen |
|
|
|
|
if investeringen <= 2300: |
|
|
|
|
kia = 0. |
|
|
|
|
elif investeringen <= 57321.: |
|
|
|
@ -82,9 +93,10 @@ class IKB_single:
|
|
|
|
|
else: |
|
|
|
|
kia = 0. |
|
|
|
|
|
|
|
|
|
# Belastbaar inkomen, nog zo'n term |
|
|
|
|
BI = max(0, nettowinst - self.priveaftrek - kia) |
|
|
|
|
# print(f'Nettowinst: € {nettowinst}') |
|
|
|
|
print(f'Verzamelinkomen: {BI}') |
|
|
|
|
print(f'Belastbaar inkomen: {BI}') |
|
|
|
|
|
|
|
|
|
# Afdeling: inkomstenbelasting #################### |
|
|
|
|
# ibz: inkomensafhankelijke bijdrage z.v.w. |
|
|
|
@ -108,7 +120,7 @@ class IKB_single:
|
|
|
|
|
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 |
|
|
|
|
ibs4 = max(max(BI, s3end) - s3end, 0)*perc_s4 |
|
|
|
|
print(f'IB Schijf 4: {ibs4}') |
|
|
|
|
|
|
|
|
|
belasting_box1 = ibzvw + ibs1+ibs2+ibs3+ibs4 |
|
|
|
@ -117,7 +129,7 @@ class IKB_single:
|
|
|
|
|
|
|
|
|
|
# Afdeling: Heffingskortingen #################### |
|
|
|
|
|
|
|
|
|
# Algemene heffingskorting |
|
|
|
|
# Algemene heffingskorting, BI = belastbaar inkomen |
|
|
|
|
if BI <= 20384: |
|
|
|
|
ahk = 2477 |
|
|
|
|
elif BI <= 68507: |
|
|
|
@ -126,22 +138,100 @@ class IKB_single:
|
|
|
|
|
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: |
|
|
|
|
# Arbeidskorting, arbeidsinkomen = winst uit onderneming voor |
|
|
|
|
# ondernemersaftrekken |
|
|
|
|
if brutowinst <= 9694: |
|
|
|
|
ak = 0.01754 * brutowinst |
|
|
|
|
elif brutowinst <= 20940: |
|
|
|
|
ak = 170 + 0.28712*(brutowinst - 9694) |
|
|
|
|
elif brutowinst <= 34060: |
|
|
|
|
ak = 3399. |
|
|
|
|
elif BI <= 90710: |
|
|
|
|
ak = 3399 - 0.06*(BI - 34060) |
|
|
|
|
elif brutowinst <= 90710: |
|
|
|
|
ak = 3399 - 0.06*(brutowinst - 34060) |
|
|
|
|
else: |
|
|
|
|
ak = 0. |
|
|
|
|
print(f'Arbeidskorting: {ak}') |
|
|
|
|
assert ak >= 0 |
|
|
|
|
|
|
|
|
|
belasting = max(0, belasting_box1 - ahk - ak) |
|
|
|
|
return belasting - self.voorlopig |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# class IKB_VOF: |
|
|
|
|
class IKB_VOF: |
|
|
|
|
""" |
|
|
|
|
Totale inkomstenbelasting (ikb) te betalen voor een V.O.F. de totale |
|
|
|
|
hoeveelheid is bijvoorbeeld van belang wanneer beide vennoten een fiscaal |
|
|
|
|
partnerschap hebben (denk aan man-vrouw V.O.F.). |
|
|
|
|
""" |
|
|
|
|
def __init__(self, |
|
|
|
|
ikb_single1: IKB_single, |
|
|
|
|
ikb_single2: IKB_single, |
|
|
|
|
investeringen: float = 0, |
|
|
|
|
iack=False): |
|
|
|
|
""" |
|
|
|
|
Initialiseer IKB_VOF klasse |
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
|
ikb_single1: Eerste vennoot |
|
|
|
|
ikb_single2: Tweede vennoot |
|
|
|
|
investeringen: investeringen gedaan in V.O.F. |
|
|
|
|
iack: Zet of True om inkomensafhankelijke combinatiekorting mee te |
|
|
|
|
nemen. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
""" |
|
|
|
|
|
|
|
|
|
assert ikb_single1.investeringen == 0., "Investeringen dienen voor een V.O.F. opgegeven te worden in de IKB_VOF klasse" |
|
|
|
|
assert ikb_single2.investeringen == 0., "Investeringen dienen voor een V.O.F. opgegeven te worden in de IKB_VOF klasse" |
|
|
|
|
self.ikb_single1 = ikb_single1 |
|
|
|
|
self.ikb_single2 = ikb_single2 |
|
|
|
|
self.investeringen = investeringen |
|
|
|
|
self.iack = iack |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def bereken(self, winst: float |
|
|
|
|
, winstverdeling : float = 0.5, |
|
|
|
|
): |
|
|
|
|
""" |
|
|
|
|
Bereken nog te betalen ikb. Investeringsaftrek wordt berekend op basis |
|
|
|
|
van aandeel in de winst. |
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
|
brutowinst: Totale owinst uit onderneming |
|
|
|
|
winstverdeling: fractie van de winst gealloceerd naar vennoot 1, |
|
|
|
|
automatisch gaat het restant naar vennoot 2 |
|
|
|
|
|
|
|
|
|
Returns: |
|
|
|
|
Nog te betalen totale belasting van beide vennoten |
|
|
|
|
""" |
|
|
|
|
|
|
|
|
|
assert winstverdeling >= 0 and winstverdeling <= 1 |
|
|
|
|
|
|
|
|
|
winst1 = winst*winstverdeling |
|
|
|
|
winst2 = winst*(1-winstverdeling) |
|
|
|
|
|
|
|
|
|
# Zet investeringsbedrag in elke natuurlijke persoon, nee dit is niet |
|
|
|
|
# zo netjes op deze manier (accessing member vars). |
|
|
|
|
self.ikb_single1.investeringen = self.investeringen*winstverdeling |
|
|
|
|
self.ikb_single2.investeringen = self.investeringen*(1-winstverdeling) |
|
|
|
|
|
|
|
|
|
betalen_1 = self.ikb_single1.bereken(winst1) |
|
|
|
|
betalen_2 = self.ikb_single2.bereken(winst2) |
|
|
|
|
assert betalen_1 >= 0 |
|
|
|
|
assert betalen_2 >= 0 |
|
|
|
|
totaal = betalen_1 + betalen_2 |
|
|
|
|
|
|
|
|
|
# ai = arbeidsinkomen, gelijk aan winst uit onderneming zonder |
|
|
|
|
# ondernemersaftrekposten. |
|
|
|
|
ai = winst2 if winst1 > winst2 else winst1 |
|
|
|
|
if self.iack: |
|
|
|
|
if ai <= 4993: |
|
|
|
|
iack = 0. |
|
|
|
|
elif ai <= 29752: |
|
|
|
|
iack = 0.1145*(ai-4993) |
|
|
|
|
else: |
|
|
|
|
iack = 2835 |
|
|
|
|
assert iack >= 0 |
|
|
|
|
totaal -= iack |
|
|
|
|
|
|
|
|
|
return totaal |
|
|
|
|