diff --git a/README.md b/README.md index e69de29..8df2d9b 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,3 @@ +# Pyikb: Nederlandse inkomstenbelasting voor ZZP-ers en 2-man(/vrouw) V.O.F. + +Dit is een Nederlandse repository. diff --git a/pyikb/__init__.py b/pyikb/__init__.py new file mode 100644 index 0000000..7266fbd --- /dev/null +++ b/pyikb/__init__.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Author: J.A. de Jong - ASCEE + +""" +from .pyikb import * diff --git a/pyikb/pyikb.py b/pyikb/pyikb.py new file mode 100644 index 0000000..8dcc3d3 --- /dev/null +++ b/pyikb/pyikb.py @@ -0,0 +1,147 @@ +#!/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: + diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..78420f6 --- /dev/null +++ b/setup.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Author: J.A. de Jong - ASCEE + +""" +from setuptools import setup + +DESCR = open('README.md','r').read() + +setup( + name="Pyikb", + version="1.0", + packages=['pyikb'], + author='J.A. de Jong - ASCEE', + author_email="j.a.dejong@ascee.nl", + # Project uses reStructuredText, so ensure that the docutils get + # installed or upgraded on the target machine + install_requires=['matplotlib>=1.0', 'numpy>=1.0'], + license='GPLv3', + description=DESCR, + keywords="Inkomstenbelasting, ZZP", + url="https://code.ascee.nl/ASCEE/pyikb", +)