Initial commit. Working for a single ZZP-er

This commit is contained in:
Anne de Jong 2019-08-22 21:41:45 +02:00
parent 393d90bb8d
commit 5382564ccc
4 changed files with 181 additions and 0 deletions

View File

@ -0,0 +1,3 @@
# Pyikb: Nederlandse inkomstenbelasting voor ZZP-ers en 2-man(/vrouw) V.O.F.
Dit is een Nederlandse repository.

7
pyikb/__init__.py Normal file
View File

@ -0,0 +1,7 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Author: J.A. de Jong - ASCEE
"""
from .pyikb import *

147
pyikb/pyikb.py Normal file
View File

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

24
setup.py Normal file
View File

@ -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",
)