From caeada0f5b9efdc1e714b9953dff9e6ad73a0b77 Mon Sep 17 00:00:00 2001 From: "J.A. de Jong - ASCEE" Date: Sat, 24 Aug 2019 15:24:23 +0200 Subject: [PATCH] Added VOF. --- pyikb/pyikb.py | 128 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 109 insertions(+), 19 deletions(-) diff --git a/pyikb/pyikb.py b/pyikb/pyikb.py index 8dcc3d3..ecaa826 100644 --- a/pyikb/pyikb.py +++ b/pyikb/pyikb.py @@ -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