-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathloonheffing.py
107 lines (90 loc) · 5.12 KB
/
loonheffing.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#class voor een loonbelastingschaal (uniek per jaar)
class Loonbelastingschaal:
def __init__(self, naam, jaar, belastingschijf1, belastingschijf2,
belastingschijf3, belastingschijf4):
self.naam = naam
self.jaar = jaar
self.belastingschijf1 = belastingschijf1
self.belastingschijf2 = belastingschijf2
self.belastingschijf3 = belastingschijf3
self.belastingschijf4 = belastingschijf4
self.belastingschijven = [belastingschijf1, belastingschijf2, belastingschijf3, belastingschijf4]
#class voor een loonbelastingschijf in de loonbelastingschaal
class Loonbelastingschijf:
def __init__(self, naam, schijfnummer, ondergrens, bovengrens, loonbelastingspercentage):
self.naam = naam
self.schijfnummer = schijfnummer
self.ondergrens = ondergrens
self.bovengrens = bovengrens
self.loonbelastingspercentage = loonbelastingspercentage
class LoonbelastingCalculator:
def __init__(self):
#In code definieren van belastingschalen, kan later csv
self.loonbelastingschaal2017 = Loonbelastingschaal(
naam="Belastingschaal 2017",
jaar="2017",
belastingschijf1=Loonbelastingschijf("Belastingschijf 1", 1, 0, 19982, 0.3655),
belastingschijf2=Loonbelastingschijf("Belastingschijf 2", 2, 19983, 33791, 0.408),
belastingschijf3=Loonbelastingschijf("Belastingschijf 3", 3, 33792, 67072, 0.408),
belastingschijf4=Loonbelastingschijf("Belastingschijf 4", 4, 67073, 999999999, 0.502))
self.loonbelastingschaal2019 = Loonbelastingschaal(
naam="Belastingschaal 2019",
jaar="2019",
belastingschijf1=Loonbelastingschijf("Belastingschijf 1", 1, 0, 20384, 0.3665),
belastingschijf2=Loonbelastingschijf("Belastingschijf 2", 2, 20385, 34300, 0.381),
belastingschijf3=Loonbelastingschijf("Belastingschijf 3", 3, 34301, 68507, 0.381),
belastingschijf4=Loonbelastingschijf("Belastingschijf 4", 4, 68508, 999999999, 0.5175))
self.loonbelastingschaal2020 = Loonbelastingschaal(
naam="Belastingschaal 2020",
jaar="2020",
belastingschijf1=Loonbelastingschijf("Belastingschijf 1", 1, 0, 20711, 0.3735),
belastingschijf2=Loonbelastingschijf("Belastingschijf 2", 2, 20712, 34712, 0.3735),
belastingschijf3=Loonbelastingschijf("Belastingschijf 3", 3, 34713, 68507, 0.3735),
belastingschijf4=Loonbelastingschijf("Belastingschijf 4", 4, 68508, 999999, 0.495))
def get_loonbelastingschijf(self, brutojaarsalaris, belastingschaal):
for belastingschijf in belastingschaal.belastingschijven:
if brutojaarsalaris < belastingschijf.bovengrens and \
brutojaarsalaris >= belastingschijf.ondergrens:
return(belastingschijf.schijfnummer)
def bereken_loonheffing(self, brutojaarsalaris, jaar):
if jaar == 2017:
loonbelastingschaal = self.loonbelastingschaal2017
elif jaar == 2019:
loonbelastingschaal = self.loonbelastingschaal2019
elif jaar == 2020:
loonbelastingschaal = self.loonbelastingschaal2020
schijfnummer = self.get_loonbelastingschijf(brutojaarsalaris, loonbelastingschaal)
belastingschijf1 = loonbelastingschaal.belastingschijf1
belastingschijf2 = loonbelastingschaal.belastingschijf2
belastingschijf3 = loonbelastingschaal.belastingschijf3
belastingschijf4 = loonbelastingschaal.belastingschijf4
def opt1():
loonbelasting = brutojaarsalaris * belastingschijf1.loonbelastingspercentage
return(loonbelasting)
def opt2():
loonbelasting = belastingschijf1.bovengrens * \
belastingschijf1.loonbelastingspercentage + \
(brutojaarsalaris - belastingschijf1.bovengrens) * \
belastingschijf2.loonbelastingspercentage
return(loonbelasting)
def opt3():
loonbelasting = belastingschijf1.bovengrens * \
belastingschijf1.loonbelastingspercentage + \
(belastingschijf2.bovengrens - belastingschijf1.bovengrens) * \
belastingschijf2.loonbelastingspercentage + \
(brutojaarsalaris - belastingschijf2.bovengrens) * \
belastingschijf3.loonbelastingspercentage
return(loonbelasting)
def opt4():
loonbelasting = belastingschijf1.bovengrens * \
belastingschijf1.loonbelastingspercentage + \
(belastingschijf2.bovengrens - belastingschijf1.bovengrens) * \
belastingschijf2.loonbelastingspercentage + \
(belastingschijf3.bovengrens - belastingschijf2.bovengrens) * \
belastingschijf3.loonbelastingspercentage + \
(brutojaarsalaris - belastingschijf3.bovengrens) * \
belastingschijf4.loonbelastingspercentage
return(loonbelasting)
options = {1: opt1, 2: opt2, 3: opt3, 4: opt4}
loonbelasting = options[schijfnummer]()
return(round(loonbelasting, 2))