Added VOF.
This commit is contained in:
parent
5382564ccc
commit
caeada0f5b
126
pyikb/pyikb.py
126
pyikb/pyikb.py
@ -3,8 +3,14 @@
|
|||||||
"""
|
"""
|
||||||
Author: J.A. de Jong - ASCEE
|
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:
|
class IKB_single:
|
||||||
@ -16,6 +22,7 @@ class IKB_single:
|
|||||||
ondernemersaftrek: bool = True,
|
ondernemersaftrek: bool = True,
|
||||||
priveaftrek: float = 0.,
|
priveaftrek: float = 0.,
|
||||||
voorlopig: float = 0.,
|
voorlopig: float = 0.,
|
||||||
|
investeringen: float = 0,
|
||||||
verbose = True,
|
verbose = True,
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
@ -29,7 +36,10 @@ class IKB_single:
|
|||||||
priveaftrek: Prive-aftrekposten (denk aan premie A.O.V.)
|
priveaftrek: Prive-aftrekposten (denk aan premie A.O.V.)
|
||||||
voorlopig: Reeds betaalde hoeveelheid belasting in voorlopige
|
voorlopig: Reeds betaalde hoeveelheid belasting in voorlopige
|
||||||
aanslag
|
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:
|
if jaar != 2019:
|
||||||
@ -39,6 +49,7 @@ class IKB_single:
|
|||||||
self.oa = ondernemersaftrek
|
self.oa = ondernemersaftrek
|
||||||
self.priveaftrek = priveaftrek
|
self.priveaftrek = priveaftrek
|
||||||
self.voorlopig = voorlopig
|
self.voorlopig = voorlopig
|
||||||
|
self.investeringen = investeringen
|
||||||
|
|
||||||
def bereken(self, brutowinst:float,
|
def bereken(self, brutowinst:float,
|
||||||
investeringen:float=0.):
|
investeringen:float=0.):
|
||||||
@ -49,10 +60,7 @@ class IKB_single:
|
|||||||
brutowinst: winst uit ondernememing dat voor rekening van deze
|
brutowinst: winst uit ondernememing dat voor rekening van deze
|
||||||
persoon komt (€).
|
persoon komt (€).
|
||||||
voorlopig: reeds betaald via voorlopige aanslag (€)
|
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:
|
Returns:
|
||||||
Nog te betalen IKB voor het jaar (€)
|
Nog te betalen IKB voor het jaar (€)
|
||||||
@ -70,7 +78,10 @@ class IKB_single:
|
|||||||
# MKB-winstvrijstelling
|
# MKB-winstvrijstelling
|
||||||
nettowinst *= (1 - 0.14)
|
nettowinst *= (1 - 0.14)
|
||||||
|
|
||||||
|
nettowinst = max(0, nettowinst)
|
||||||
|
print(f'Nettowinst na ondernemersaftrekposten {nettowinst}')
|
||||||
# Kleinschaligheidsinvesteringsaftrek
|
# Kleinschaligheidsinvesteringsaftrek
|
||||||
|
investeringen = self.investeringen
|
||||||
if investeringen <= 2300:
|
if investeringen <= 2300:
|
||||||
kia = 0.
|
kia = 0.
|
||||||
elif investeringen <= 57321.:
|
elif investeringen <= 57321.:
|
||||||
@ -82,9 +93,10 @@ class IKB_single:
|
|||||||
else:
|
else:
|
||||||
kia = 0.
|
kia = 0.
|
||||||
|
|
||||||
|
# Belastbaar inkomen, nog zo'n term
|
||||||
BI = max(0, nettowinst - self.priveaftrek - kia)
|
BI = max(0, nettowinst - self.priveaftrek - kia)
|
||||||
# print(f'Nettowinst: € {nettowinst}')
|
# print(f'Nettowinst: € {nettowinst}')
|
||||||
print(f'Verzamelinkomen: {BI}')
|
print(f'Belastbaar inkomen: {BI}')
|
||||||
|
|
||||||
# Afdeling: inkomstenbelasting ####################
|
# Afdeling: inkomstenbelasting ####################
|
||||||
# ibz: inkomensafhankelijke bijdrage z.v.w.
|
# ibz: inkomensafhankelijke bijdrage z.v.w.
|
||||||
@ -108,7 +120,7 @@ class IKB_single:
|
|||||||
print(f'IB Schijf 2: {ibs2}')
|
print(f'IB Schijf 2: {ibs2}')
|
||||||
ibs3 = max(min(BI, s3end) - s2end, 0)*perc_s3
|
ibs3 = max(min(BI, s3end) - s2end, 0)*perc_s3
|
||||||
print(f'IB Schijf 3: {ibs3}')
|
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}')
|
print(f'IB Schijf 4: {ibs4}')
|
||||||
|
|
||||||
belasting_box1 = ibzvw + ibs1+ibs2+ibs3+ibs4
|
belasting_box1 = ibzvw + ibs1+ibs2+ibs3+ibs4
|
||||||
@ -117,7 +129,7 @@ class IKB_single:
|
|||||||
|
|
||||||
# Afdeling: Heffingskortingen ####################
|
# Afdeling: Heffingskortingen ####################
|
||||||
|
|
||||||
# Algemene heffingskorting
|
# Algemene heffingskorting, BI = belastbaar inkomen
|
||||||
if BI <= 20384:
|
if BI <= 20384:
|
||||||
ahk = 2477
|
ahk = 2477
|
||||||
elif BI <= 68507:
|
elif BI <= 68507:
|
||||||
@ -126,22 +138,100 @@ class IKB_single:
|
|||||||
ahk = 0
|
ahk = 0
|
||||||
print(f'Alg. hk: {ahk}')
|
print(f'Alg. hk: {ahk}')
|
||||||
|
|
||||||
# Arbeidskorting
|
# Arbeidskorting, arbeidsinkomen = winst uit onderneming voor
|
||||||
if BI < 9694:
|
# ondernemersaftrekken
|
||||||
ak = 0.01754 * BI
|
if brutowinst <= 9694:
|
||||||
elif BI <= 20940:
|
ak = 0.01754 * brutowinst
|
||||||
ak = 170 + 0.28712*(BI - 9694)
|
elif brutowinst <= 20940:
|
||||||
elif BI <= 34060:
|
ak = 170 + 0.28712*(brutowinst - 9694)
|
||||||
|
elif brutowinst <= 34060:
|
||||||
ak = 3399.
|
ak = 3399.
|
||||||
elif BI <= 90710:
|
elif brutowinst <= 90710:
|
||||||
ak = 3399 - 0.06*(BI - 34060)
|
ak = 3399 - 0.06*(brutowinst - 34060)
|
||||||
else:
|
else:
|
||||||
ak = 0.
|
ak = 0.
|
||||||
print(f'Arbeidskorting: {ak}')
|
print(f'Arbeidskorting: {ak}')
|
||||||
|
assert ak >= 0
|
||||||
|
|
||||||
belasting = max(0, belasting_box1 - ahk - ak)
|
belasting = max(0, belasting_box1 - ahk - ak)
|
||||||
return belasting - self.voorlopig
|
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
|
||||||
|
Loading…
Reference in New Issue
Block a user