/[lohnrechner]/LST2005.py
ViewVC logotype

Annotation of /LST2005.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 37 - (hide annotations)
Wed Jul 20 14:18:07 2005 UTC (19 years, 9 months ago) by wilde
File MIME type: text/x-python
File size: 20535 byte(s)
Post svn-import cleanup.
1 wilde 20 # -*- coding: iso-8859-1 -*-
2 wilde 2 # --------------------------------------------------------------------
3     # LST2005 -- Python Modul zur Berechnung der Deutschen Lohnsteuer 2005
4     # $Id$
5     # --------------------------------------------------------------------
6     #
7     # Copyright (c) 2005 by Intevation GmbH
8     # Authors:
9     # Sascha Wilde <[email protected]>
10     #
11     # This program is free software under the GPL (>=v2)
12     # Read the file COPYING coming with this package for details.
13    
14     """Lohnsteuerberechnung nach dem offiziellen Programmablaufplan
15 wilde 28 wie im offiziellen Programmablaufplan des Bundesfinanzministerium
16     dokumentiert.
17     http://www.bundesfinanzministerium.de/Service/Interaktiver-Steuerrechner-.577.htm"""
18 wilde 2
19 wilde 8 __version__ = "$Revision$"
20     # $Source$
21    
22     def _ModulVersion():
23     return __version__[11:-2]
24    
25 wilde 2 # Die Variablen Namen sind hässlich, die Algorithmen nicht
26     # dokumentiert, der Code grausam -- dafür entspricht alles Zeile für
27     # Zeile obigem Dokument. Jedenfalls sollte es so sein...
28    
29     from math import ceil, floor
30    
31     # Wir brauchen eigene Rundungsfunktionen mit definierter Präzision
32     def FixedPointFloor(value, precision=2):
33     i = 10.0 ** precision
34     return floor(value * i) / i
35    
36     def FixedPointCeil(value, precision=2):
37     i = 10.0 ** precision
38     return ceil(value * i) / i
39    
40     # Ein paar Konstanten um das ganze etwas Benutzbarer zu machen:
41     JAHR = 1
42     MONAT = 2
43     WOCHE = 3
44     TAG = 4
45     I = 1
46     II = 2
47     III = 3
48     IV = 4
49     V = 5
50     VI = 6
51    
52     class LST:
53     def __init__(self,
54     RE4=0,
55     ALTER1=0,
56     HINZUR=0,
57     JFREIB=0,
58     JHINZU=0,
59     JRE4 =0,
60     JVBEZ =0,
61     KRV =0,
62     LZZ =2,
63     R =0,
64     SONSTB=0,
65     STKL =1,
66     VBEZ =0,
67     VBEZM =0,
68     VBEZS =0,
69     VBS =0,
70     VMT =0,
71     WFUNDF=0,
72     ZKF =0,
73     ZMVB =0):
74     self.Set_RE4(RE4)
75     self.Set_ALTER1(ALTER1)
76     self.Set_HINZUR(HINZUR)
77     self.Set_JFREIB(JFREIB)
78     self.Set_JHINZU(JHINZU)
79     self.Set_JRE4(JRE4)
80     self.Set_JVBEZ(JVBEZ)
81     self.Set_KRV(KRV)
82     self.Set_LZZ(LZZ)
83     self.Set_R(R)
84     self.Set_SONSTB(SONSTB)
85     self.Set_STKL(STKL)
86     self.Set_VBEZ(VBEZ)
87     self.Set_VBEZM(VBEZM)
88     self.Set_VBEZS(VBEZS)
89     self.Set_VBS(VBS)
90     self.Set_VMT(VMT)
91     self.Set_WFUNDF(WFUNDF)
92     self.Set_ZKF(ZKF)
93     self.Set_ZMVB(ZMVB)
94     # Vorgegebene Ausgangsparameter
95     self.BK = 0
96     self.BKS = 0
97     self.BKV = 0
98     self.LSTLZZ = 0
99     self.SOLZLZZ = 0
100     self.SOLZS = 0
101     self.SOLZV = 0
102     self.STS = 0
103     self.STV = 0
104    
105     def Calc(self):
106     """Berechnet die Lohnsteuer,
107     setzt BK, BKS, BKV, LSTLZZ, SOLZLZZ, SOLZS, SOLZV, STS und STV"""
108     # Interne Felder
109     # Laut Dokumentation sollen diese vor der Berechnung gelöscht werden,
110     # es ist mir nicht klar, ob das wirklich nötig ist...
111     self._ALTE = 0
112     self._ANP = 0
113     self._ANTEIL1 = 0
114     self._ANTEIL2 = 0
115     self._BMG = 0
116     self._DIFF = 0
117     self._EFA = 0
118     self._FVB = 0
119     self._FVBZ = 0
120     self._JBMG = 0
121     self._JW = 0
122     self._KENNZ = 0
123     self._KFB = 0
124     self._KZTAB = 1
125     self._LSTJAHR = 0
126     self._LST1 = 0
127     self._LST2 = 0
128     self._LST3 = 0
129     self._MIST = 0
130     self._RE4LZZ = 0
131     self._RE4LZZV = 0
132     self._RW = 0.0
133     self._SAP = 0
134     self._SOLZFREI = 0
135     self._SOLZJ = 0.0 # 2 Dezimalstellen
136     self._SOLZMIN = 0.0 # 2 Dezimalstellen
137     self._ST = 0
138     self._ST1 = 0
139     self._ST2 = 0
140     self._VBEZB = 0
141     self._VHB = 0
142     self._VSP = 0.0 # 2 Dezimalstellen
143     self._VSPN = 0
144     self._VSP1 = 0.0 # 2 Dezimalstellen
145     self._VSP2 = 0.0 # 2 Dezimalstellen
146     self._VSPKURZ = 0
147     self._VSPMAX1 = 0
148     self._VSPMAX2 = 0
149     self._VSPO = 0.0 # 2 Dezimalstellen
150     self._VSPREST = 0.0 # 2 Dezimalstellen
151     self._VSPVOR = 0.0 # 2 Dezimalstellen
152     self._X = 0.0 # 2 Dezimalstellen
153     self._Y = 0.0 # 6 Dezimalstellen
154     self._ZRE4 = 0.0 # 2 Dezimalstellen
155     self._ZRE4VP = 0.0 # 2 Dezimalstellen
156     self._ZRE4VP1 = 0.0 # 2 Dezimalstellen
157     self._ZTABFB = 0
158     self._ZVE = 0
159     self._ZX = 0
160     self._ZZX = 0
161     self._HOCH = 0
162     self._VERGL = 0
163     # ------------------------------------------------------------
164     # Anfang der Berechnung
165     self._MRE4LZZ()
166     self._RE4LZZ = self.RE4 - self._FVB \
167     - self._ALTE - self.WFUNDF \
168     + self.HINZUR
169     self._RE4LZZV = self.RE4 - self._FVB - self._ALTE
170     self._MRE4()
171     self._MZTABFB()
172     self._MLSTJAHR()
173     self._LSTJAHR = self._ST
174     self._JW = self._LSTJAHR * 100
175     self._UPANTEIL()
176     self.LSTLZZ = self._ANTEIL1
177     if self.ZKF > 0:
178     self._ZTABFB += self._KFB
179     self._MLSTJAHR()
180     self._JBMG = self._ST
181     else:
182     self._JBMG = self._LSTJAHR
183     self._MSOLZ()
184 wilde 3 self._MSONST()
185     self._MVMT()
186 wilde 2
187     # Benutzte Unterprogramme:
188     def _MRE4LZZ(self):
189     if self.VBEZ == 0:
190     self._FVBZ = 0
191     self._FVB = 0
192     else:
193     if self.LZZ == 1:
194     self._VBEZB = self.VBEZM * self.ZMVB + self.VBEZS
195     self._FVBZ = 75 * self.ZMVB
196     else:
197     self._VBEZB = self.VBEZM * 12 + self.VBEZS
198     self._FVBZ = 900
199     self._FVB = ceil(self._VBEZB * 0.4)
200     if self._FVB > 300000:
201     self._FVB = 300000
202     self._JW = self._FVB
203     self._UPANTEIL()
204     self._FVB = self._ANTEIL2
205     if self.ALTER1 == 0:
206     self._ALTE = 0
207     else:
208     self._BMG = self.RE4 - self.VBEZ
209     self._ALTE = ceil(self._BMG * 0.4)
210     self._JW = 190000
211     self._UPANTEIL()
212     if self._ALTE > self._ANTEIL2:
213     self._ALTE = self._ANTEIL2
214    
215     def _MRE4(self):
216     if self.LZZ == 1:
217     self._ZRE4 = FixedPointFloor(self._RE4LZZ / 100.0)
218     self._ZRE4VP = FixedPointFloor(self._RE4LZZV / 100.0)
219     elif self.LZZ == 2:
220     self._ZRE4 = FixedPointFloor((self._RE4LZZ + 0.67) * 0.12)
221     self._ZRE4VP = FixedPointFloor((self._RE4LZZV + 0.67) * 0.12)
222     elif self.LZZ == 3:
223     self._ZRE4 = FixedPointFloor((self._RE4LZZ + 0.89) * 3.6 / 7)
224     self._ZRE4VP = FixedPointFloor((self._RE4LZZV + 0.89) * 3.6 / 7)
225     else:
226     self._ZRE4 = FixedPointFloor((self._RE4LZZ + 0.56) * 3.6)
227     self._ZRE4VP = FixedPointFloor((self._RE4LZZV + 0.56) * 3.6)
228     if self._ZRE4 < 0:
229     self._ZRE4 = 0.0
230    
231     def _MZTABFB(self):
232     self._KZTAB = 1
233     if self.STKL < 6:
234     if self.VBEZ > 0:
235     self._ANP = 102
236     if self.RE4 > self.VBEZ:
237     self._ANP += 920
238     else:
239 wilde 13 self._ANP = 0
240 wilde 2 if self.STKL == 1:
241     self._SAP = 36
242     self._KFB = self.ZKF * 5808
243     elif self.STKL == 2:
244     self._EFA = 1308
245     self._SAP = 36
246     self._KFB = self.ZKF * 5808
247     elif self.STKL == 3:
248     self._KZTAB = 2
249     self._SAP = 72
250     self._KFB = self.ZKF * 5808
251     elif self.STKL == 4:
252     self._SAP = 36
253     self._KFB = self.ZKF * 2904
254     else:
255     self._KFB = 0
256     self._ZTABFB = self._EFA + self._ANP + self._SAP + self._FVBZ
257     self._KENNZ = 0
258    
259     def _MLSTJAHR(self):
260     if self.STKL < 5:
261     self._UPEVP()
262     else:
263     self._VSP = 0.0
264     self._ZVE = self._ZRE4 - self._ZTABFB - self._VSP
265     if self._ZVE < 1:
266     self._ZVE = self._X = 0.0
267     else:
268     self._X = floor(float(self._ZVE) / self._KZTAB)
269     if self.STKL < 5:
270     self._UPTAB05()
271     else:
272     self._MST5_6()
273    
274     def _UPEVP(self):
275     if self.KRV == 1:
276     self._VSP1 = 1.0
277     else:
278     if self._ZRE4VP > 62400:
279 wilde 13 self._ZRE4VP = 62400
280 wilde 2 self._VSP1 = 0.2 * self._ZRE4VP
281 wilde 15 self._VSP1 = FixedPointFloor(self._VSP1 * 0.0975)
282     self._VSP2 = FixedPointFloor(0.11 * self._ZRE4VP)
283 wilde 2 self._VHB = 1500 * self._KZTAB
284     if self._VSP2 > self._VHB:
285     self._VSP2 = self._VHB
286     self._VSPN = ceil(self._VSP1 + self._VSP2)
287     self._MVSP()
288     if self._VSPN > self._VSP:
289     self._VSP = self._VSPN
290    
291     def _MVSP(self):
292     self._VSPO = self._ZRE4VP * 0.2
293     self._VSPVOR = 3068 * self._KZTAB
294     self._VSPMAX1 = 1334 * self._KZTAB
295     self._VSPMAX2 = 667 * self._KZTAB
296     self._VSPKURZ = 1134 * self._KZTAB
297     if self.KRV == 1:
298     if self._VSPO > self._VSPKURZ:
299     self._VSP = self._VSPKURZ
300     else:
301     self._VSP = ceil(self._VSPO)
302     else:
303     self._UMVSP()
304    
305     def _UMVSP(self):
306     if self._KENNZ == 1:
307     self._VSPVOR = self._VSPVOR - self._ZRE4VP1 * 0.16
308     else:
309     self._VSPVOR = self._VSPVOR - self._ZRE4VP * 0.16
310     if self._VSPVOR < 0:
311     self._VSPVOR = 0.0
312     if self._VSPO > self._VSPVOR:
313     self._VSP = self._VSPVOR
314     self._VSPREST = self._VSPO - self._VSPVOR
315     if self._VSPREST > self._VSPMAX1:
316     self._VSP += self._VSPMAX1
317     self._VSPREST = FixedPointCeil((self._VSPREST - self._VSPMAX1) / 2.0)
318     if self._VSPREST > self._VSPMAX2:
319     self._VSP = ceil(self._VSP + self._VSPMAX2)
320     else:
321     self._VSP = ceil(self._VSP + self._VSPREST)
322     else:
323     self._VSP = ceil(self._VSP + self._VSPREST)
324     else:
325     self._VSP = ceil(self._VSPO)
326    
327     def _MST5_6(self):
328     self._ZZX = self._X
329     if self._ZZX > 25812:
330     self._ZX = 25812
331     self._UP5_6()
332     self._ST = floor(self._ST + (self._ZZX - 25812) * 0.42)
333     else:
334     self._ZX = self._ZZX
335     self._UP5_6()
336     if self._ZZX > 9144:
337     self._VERGL = self._ST
338     self._ZX = 9144
339     self._UP5_6()
340     self._HOCH = floor(self._ST + (self._ZZX - 9144) * 0.42)
341     if self._HOCH < self._VERGL:
342     self._ST = self._HOCH
343     else:
344     self._ST = self._VERGL
345    
346     def _UP5_6(self):
347     self._X = self._ZX * 1.25
348     self._UPTAB05()
349     self._ST1 = self._ST
350     self._X = self._ZX * 0.75
351     self._UPTAB05()
352     self._ST2 = self._ST
353     self._DIFF = (self._ST1 - self._ST2) * 2
354     self._MIST = floor(self._ZX * 0.15)
355     if self._MIST > self._DIFF:
356     self._ST = self._MIST
357     else:
358     self._ST = self._DIFF
359    
360     def _MSOLZ(self):
361     self._SOLZFREI = 972 * self._KZTAB
362     if self._JBMG > self._SOLZFREI:
363     self._SOLZJ = FixedPointFloor(self._JBMG * 5.5 / 100.0)
364     self._SOLZMIN = (self._JBMG - self._SOLZFREI) * 20 / 100.0
365     if self._SOLZMIN < self._SOLZJ:
366     self._SOLZJ = self._SOLZMIN
367     self._JW = self._SOLZJ * 100
368     self._UPANTEIL()
369     self.SOLZLZZ = self._ANTEIL1
370     else:
371     self.SOLZLZZ = 0
372     if self.R > 0:
373     self._JW = self._JBMG * 100
374 wilde 13 self._UPANTEIL()
375 wilde 2 self.BK = self._ANTEIL1
376     else:
377     self.BK = 0
378    
379     def _UPANTEIL(self):
380     if self.LZZ == 1:
381     self._ANTEIL1 = self._JW
382     self._ANTEIL2 = self._JW
383     elif self.LZZ == 2:
384     self._ANTEIL1 = floor(self._JW / 12.0)
385     self._ANTEIL2 = ceil(self._JW / 12.0)
386     elif self.LZZ == 3:
387     self._ANTEIL1 = floor(self._JW * 7 / 360.0)
388     self._ANTEIL2 = ceil(self._JW * 7 / 360.0)
389     else:
390     self._ANTEIL1 = floor(self._JW / 360.0)
391     self._ANTEIL2 = ceil(self._JW / 360.0)
392    
393     def _UPTAB05(self):
394     if self._X < 7665:
395     self._ST = 0
396     elif self._X < 12740:
397     self._Y = (self._X - 7664) / 10000.0
398     self._RW = self._Y * 883.74
399     self._RW += 1500
400     self._ST = floor(self._RW * self._Y)
401     elif self._X < 52152:
402     self._Y = (self._X - 12739) / 10000.0
403     self._RW = self._Y * 228.74
404     self._RW += 2397
405     self._RW *= self._Y
406     self._ST = floor(self._RW + 989)
407     else:
408     self._ST = floor(self._X * 0.42 - 7914)
409     self._ST *= self._KZTAB
410    
411 wilde 3 def _MSONST(self):
412     if self.SONSTB > 0:
413     # ------------------------------
414     # Nicht im offiziellen Programm-
415     # ablaufplan: Attribute sichern
416     old_lzz = self.LZZ
417     old_vbez = self.VBEZ
418     old_re4 = self.RE4
419     # ------------------------------
420     self.LZZ = 1
421     self.VBEZ = self.JVBEZ
422     self.RE4 = self.JRE4
423     self._MRE4LZZ()
424     self._MRE4LZZ2()
425     self._MRE4()
426     self._MZTABFB()
427     self._MLSTJAHR()
428     self._LST1 = self._ST * 100
429     self.VBEZ = self.JVBEZ + self.VBS
430     self.RE4 = self.JRE4 + self.SONSTB
431     self._MRE4LZZ()
432     self._MRE4LZZ2()
433     self._MRE4()
434     self._MLSTJAHR()
435     self._LST2 = self._ST * 100
436     self.STS = self._LST2 - self._LST1
437     self.SOLZS = self.STS * 5.5 / 100
438     if self.R > 0:
439     self.BKS = self.STS
440     else:
441     self.BKS = 0
442     # ------------------------------
443     # Nicht im offiziellen Programm-
444     # ablaufplan: Attribute
445     # wiederherstellen
446     self.LZZ = old_lzz
447     self.VBEZ = old_vbez
448     self.RE4 = old_re4
449     # ------------------------------
450     else:
451     self.STS = 0
452     self.SOLZS = 0
453     self.BKS = 0
454    
455     def _MRE4LZZ2(self):
456     self._RE4LZZ = self.RE4 - self._FVB - self._ALTE \
457     - self.JFREIB + self.JHINZU
458     self._RE4LZZV = self.RE4 - self._FVB - self._ALTE
459    
460     def _MVMT(self):
461     if self.VMT > 0:
462     # ------------------------------
463     # Nicht im offiziellen Programm-
464     # ablaufplan: Attribute sichern
465     old_lzz = self.LZZ
466     old_vbez = self.VBEZ
467     old_re4 = self.RE4
468     # ------------------------------
469     self.LZZ = 1
470     self.VBEZ = self.JVBEZ + self.VBS
471     self.RE4 = self.JRE4 + self.SONSTB
472     self._MRE4LZZ()
473     self._MRE4LZZ2()
474     self._MRE4()
475     self._MZTABFB()
476     self._MLSTJAHR()
477     self._LST1 = self._ST * 100
478     self.RE4 = self.JRE4 + self.SONSTB + self.VMT
479     self._MRE4LZZ()
480     self._MRE4LZZ2()
481     self._MRE4()
482     self._KENNZ = 1
483     self._ZRE4VP1 = self._ZRE4VP
484     self._MLSTJAHR()
485     self._LST3 = self._ST * 100
486     self.RE4 = self.JRE4 + self.SONSTB
487     self._MRE4LZZ()
488     self.RE4 = self.JRE4 + self.SONSTB + self.VMT / 5
489     self._MRE4LZZ2()
490     self._MRE4()
491     self._MLSTJAHR()
492     self._LST2 = self._ST * 100
493 wilde 14 self.STV = (self._LST2 - self._LST1) * 5
494 wilde 3 self._LST3 -= self._LST1
495     if self._LST3 < self.STV:
496     self.STV = self._LST3
497     self.SOLZV = floor(self.STV * 5.5 / 100)
498     if self.R > 0:
499     self.BKV = self.STV
500     else:
501     self.BKV = 0
502     # ------------------------------
503     # Nicht im offiziellen Programm-
504     # ablaufplan: Attribute
505     # wiederherstellen
506     self.LZZ = old_lzz
507     self.VBEZ = old_vbez
508     self.RE4 = old_re4
509     # ------------------------------
510     else:
511     self.STV = 0
512     self.SOLZV = 0
513     self.BKV = 0
514    
515 wilde 2 # Methoden zum geprüften setzen der Wert
516     # FIX ME: Prüfung _sehr_ unvollständig
517     def Set_RE4(self, value):
518     assert value >= 0, "must not be negative"
519     self.RE4 = value
520    
521     def Set_ALTER1(self, value):
522     assert value in (0,1), "must be 0 or 1"
523     self.ALTER1 = value
524    
525     def Set_HINZUR(self, value):
526     self.HINZUR = value
527    
528     def Set_JFREIB(self, value):
529     self.JFREIB = value
530    
531     def Set_JHINZU(self, value):
532     self.JHINZU = value
533    
534     def Set_JRE4(self, value):
535     self.JRE4 = value
536    
537     def Set_JVBEZ(self, value):
538     self.JVBEZ = value
539    
540     def Set_KRV(self, value):
541 wilde 11 assert value in (0,1), "must be 0 or 1"
542 wilde 2 self.KRV = value
543    
544     def Set_LZZ(self, value):
545 wilde 11 assert value in (1,2,3,4), \
546     "must be in range 1-4 (JAHR, MONAT, WOCHE, TAG)"
547 wilde 2 self.LZZ = value
548    
549     def Set_R(self, value):
550 wilde 11 assert value >= 0.0 and value <= 100.0, \
551     "must be in range 0.0-100.0 (Percent)"
552 wilde 2 self.R = value
553    
554     def Set_SONSTB(self, value):
555     self.SONSTB = value
556    
557     def Set_STKL(self, value):
558 wilde 11 assert value in (1,2,3,4,5,6), \
559     "must be in range 1-6 (I II III IV V VI)"
560 wilde 2 self.STKL = value
561    
562     def Set_VBEZ(self, value):
563     self.VBEZ = value
564    
565     def Set_VBEZM(self, value):
566     self.VBEZM = value
567    
568     def Set_VBEZS(self, value):
569     self.VBEZS = value
570    
571     def Set_VBS(self, value):
572     self.VBS = value
573    
574     def Set_VMT(self, value):
575     self.VMT = value
576    
577     def Set_WFUNDF(self, value):
578     self.WFUNDF = value
579    
580     def Set_ZKF(self, value):
581 wilde 20 assert float(value) == float("%.1f" % value) and \
582     value >= 0, \
583     "must be positive, and must not have more than one decimal digit"
584 wilde 2 self.ZKF = value
585 wilde 20
586 wilde 2 def Set_ZMVB(self, value):
587     self.ZMVB = value
588    
589 wilde 3 # --------------------------------------------------------------------
590 wilde 4 # Eine etwas schönere API
591 wilde 3 #
592 wilde 4 # FIX ME: Diese API berücksichtigt nicht alle Möglichen Parameter und
593     # Berechnungen, es fehlen insbesondere die Berechnungen zu Mehrjährigen
594     # Bezügen und Sonstigen Leistungen.
595 wilde 2
596 wilde 3 class LStRechner2005(LST):
597     def __init__(self):
598     LST.__init__(self)
599    
600     def SetLohn(self, lohn):
601 wilde 4 """Setzt Lohn in Euro.Cent"""
602 wilde 26 self.Set_RE4(round (lohn * 100.0))
603 wilde 2
604 wilde 26 def GetLohn(self):
605     """Liefert Lohn in Euro.Cent"""
606     return self.RE4 / 100.0
607    
608 wilde 3 def SetZeitraum(self, lzz):
609 wilde 4 """Setzt Berechnungszeitraum (JAHR, MONAT, WOCHE, TAG)"""
610 wilde 2 self.Set_LZZ(lzz)
611    
612 wilde 26 def GetZeitraum(self):
613     """Liefert Berechnungszeitraum (JAHR, MONAT, WOCHE, TAG)"""
614     return self.LZZ
615    
616 wilde 3 def SetSteuerklasse(self, stkl):
617 wilde 4 """Setzt Steuerklasse (I, II, III, IV, V, VI)"""
618 wilde 2 self.Set_STKL(stkl)
619    
620 wilde 26 def GetSteuerklasse(self):
621     """Liefert Steuerklasse (I, II, III, IV, V, VI)"""
622     return self.STKL
623    
624     def SetKirchensteuerProzent(self, prozent):
625     """Setzt Kirchensteuer in Prozent,
626     0 wenn keine Kirchensteuer zu zahlen ist."""
627 wilde 4 self.Set_R(prozent)
628    
629 wilde 26 def GetKirchensteuerProzent(self):
630     """Liefert Kirchensteuer in Prozent
631     oder 0 wenn keine Kirchensteuer zu zahlen ist."""
632     return self.R
633    
634 wilde 20 def SetKinderfreibetrag(self, kfb):
635     """Setzt Kinderfreibetrag lt. Lohnsteuerkarte"""
636     self.Set_ZKF(kfb)
637    
638 wilde 26 def GetKinderfreibetrag(self):
639     """Liefert Kinderfreibetrag lt. Lohnsteuerkarte"""
640     return self.ZFK
641    
642 wilde 3 def GetLohnsteuer(self):
643 wilde 4 """Liefert Lohnsteuer in Euro.Cent"""
644 wilde 2 return round(self.LSTLZZ / 100, 2)
645 wilde 4
646     def GetSoli(self):
647     """Liefert Solidaritätszuschlag in Euro.Cent"""
648 wilde 13 return FixedPointFloor(self.SOLZLZZ / 100, 2)
649 wilde 4
650     def GetKirchensteuer(self):
651     """Liefert Kirchensteuer in Euro.Cent"""
652     return FixedPointFloor(self.BK * self.R / 10000, 2)

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26