Added VOF.

This commit is contained in:
Anne de Jong 2019-08-24 15:24:23 +02:00
parent 5382564ccc
commit caeada0f5b

View File

@ -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