1 |
|
# -*- coding: iso-8859-1 -*- |
2 |
# -------------------------------------------------------------------- |
# -------------------------------------------------------------------- |
3 |
# LST2005 -- Python Modul zur Berechnung der Deutschen Lohnsteuer 2005 |
# LST2005 -- Python Modul zur Berechnung der Deutschen Lohnsteuer 2005 |
4 |
# $Id$ |
# $Id$ |
14 |
"""Lohnsteuerberechnung nach dem offiziellen Programmablaufplan |
"""Lohnsteuerberechnung nach dem offiziellen Programmablaufplan |
15 |
wie in Programmablaufplan-LSt.pdf dokumentiert.""" |
wie in Programmablaufplan-LSt.pdf dokumentiert.""" |
16 |
|
|
17 |
|
__version__ = "$Revision$" |
18 |
|
# $Source$ |
19 |
|
|
20 |
|
def _ModulVersion(): |
21 |
|
return __version__[11:-2] |
22 |
|
|
23 |
# Die Variablen Namen sind h�sslich, die Algorithmen nicht |
# Die Variablen Namen sind h�sslich, die Algorithmen nicht |
24 |
# dokumentiert, der Code grausam -- daf�r entspricht alles Zeile f�r |
# dokumentiert, der Code grausam -- daf�r entspricht alles Zeile f�r |
25 |
# Zeile obigem Dokument. Jedenfalls sollte es so sein... |
# Zeile obigem Dokument. Jedenfalls sollte es so sein... |
237 |
if self.RE4 > self.VBEZ: |
if self.RE4 > self.VBEZ: |
238 |
self._ANP += 920 |
self._ANP += 920 |
239 |
else: |
else: |
240 |
self._ANP = 0 |
self._ANP = 0 |
241 |
if self.STKL == 1: |
if self.STKL == 1: |
242 |
self._SAP = 36 |
self._SAP = 36 |
243 |
self._KFB = self.ZKF * 5808 |
self._KFB = self.ZKF * 5808 |
277 |
self._VSP1 = 1.0 |
self._VSP1 = 1.0 |
278 |
else: |
else: |
279 |
if self._ZRE4VP > 62400: |
if self._ZRE4VP > 62400: |
280 |
self._ZRE4VP = 62400.0 |
self._ZRE4VP = 62400 |
281 |
self._VSP1 = 0.2 * self._ZRE4VP |
self._VSP1 = 0.2 * self._ZRE4VP |
282 |
self._VSP1 = self._VSP1 * 0.0975 |
self._VSP1 = FixedPointFloor(self._VSP1 * 0.0975) |
283 |
self._VSP2 = 0.11 * self._ZRE4VP |
self._VSP2 = FixedPointFloor(0.11 * self._ZRE4VP) |
284 |
self._VHB = 1500 * self._KZTAB |
self._VHB = 1500 * self._KZTAB |
285 |
if self._VSP2 > self._VHB: |
if self._VSP2 > self._VHB: |
286 |
self._VSP2 = self._VHB |
self._VSP2 = self._VHB |
372 |
self.SOLZLZZ = 0 |
self.SOLZLZZ = 0 |
373 |
if self.R > 0: |
if self.R > 0: |
374 |
self._JW = self._JBMG * 100 |
self._JW = self._JBMG * 100 |
375 |
self._UPANTEIL |
self._UPANTEIL() |
376 |
self.BK = self._ANTEIL1 |
self.BK = self._ANTEIL1 |
377 |
else: |
else: |
378 |
self.BK = 0 |
self.BK = 0 |
491 |
self._MRE4() |
self._MRE4() |
492 |
self._MLSTJAHR() |
self._MLSTJAHR() |
493 |
self._LST2 = self._ST * 100 |
self._LST2 = self._ST * 100 |
494 |
self.STV = (self._LST2 - self.LST1) * 5 |
self.STV = (self._LST2 - self._LST1) * 5 |
495 |
self._LST3 -= self._LST1 |
self._LST3 -= self._LST1 |
496 |
if self._LST3 < self.STV: |
if self._LST3 < self.STV: |
497 |
self.STV = self._LST3 |
self.STV = self._LST3 |
539 |
self.JVBEZ = value |
self.JVBEZ = value |
540 |
|
|
541 |
def Set_KRV(self, value): |
def Set_KRV(self, value): |
542 |
if value not in (0,1): |
assert value in (0,1), "must be 0 or 1" |
|
raise ValueError |
|
543 |
self.KRV = value |
self.KRV = value |
544 |
|
|
545 |
def Set_LZZ(self, value): |
def Set_LZZ(self, value): |
546 |
assert value in (1,2,3,4), "must be in range 1-4 (JAHR, MONAT, WOCHE, TAG)" |
assert value in (1,2,3,4), \ |
547 |
|
"must be in range 1-4 (JAHR, MONAT, WOCHE, TAG)" |
548 |
self.LZZ = value |
self.LZZ = value |
549 |
|
|
550 |
def Set_R(self, value): |
def Set_R(self, value): |
551 |
|
assert value >= 0.0 and value <= 100.0, \ |
552 |
|
"must be in range 0.0-100.0 (Percent)" |
553 |
self.R = value |
self.R = value |
554 |
|
|
555 |
def Set_SONSTB(self, value): |
def Set_SONSTB(self, value): |
556 |
self.SONSTB = value |
self.SONSTB = value |
557 |
|
|
558 |
def Set_STKL(self, value): |
def Set_STKL(self, value): |
559 |
assert value in (1,2,3,4,5,6), "must be in range 1-6 (I II III IV V VI)" |
assert value in (1,2,3,4,5,6), \ |
560 |
|
"must be in range 1-6 (I II III IV V VI)" |
561 |
self.STKL = value |
self.STKL = value |
562 |
|
|
563 |
def Set_VBEZ(self, value): |
def Set_VBEZ(self, value): |
579 |
self.WFUNDF = value |
self.WFUNDF = value |
580 |
|
|
581 |
def Set_ZKF(self, value): |
def Set_ZKF(self, value): |
582 |
|
assert float(value) == float("%.1f" % value) and \ |
583 |
|
value >= 0, \ |
584 |
|
"must be positive, and must not have more than one decimal digit" |
585 |
self.ZKF = value |
self.ZKF = value |
586 |
|
|
587 |
def Set_ZMVB(self, value): |
def Set_ZMVB(self, value): |
588 |
self.ZMVB = value |
self.ZMVB = value |
589 |
|
|
600 |
|
|
601 |
def SetLohn(self, lohn): |
def SetLohn(self, lohn): |
602 |
"""Setzt Lohn in Euro.Cent""" |
"""Setzt Lohn in Euro.Cent""" |
603 |
self.Set_RE4(lohn * 100.0) |
self.Set_RE4(round (lohn * 100.0)) |
604 |
|
|
605 |
|
def GetLohn(self): |
606 |
|
"""Liefert Lohn in Euro.Cent""" |
607 |
|
return self.RE4 / 100.0 |
608 |
|
|
609 |
def SetZeitraum(self, lzz): |
def SetZeitraum(self, lzz): |
610 |
"""Setzt Berechnungszeitraum (JAHR, MONAT, WOCHE, TAG)""" |
"""Setzt Berechnungszeitraum (JAHR, MONAT, WOCHE, TAG)""" |
611 |
self.Set_LZZ(lzz) |
self.Set_LZZ(lzz) |
612 |
|
|
613 |
|
def GetZeitraum(self): |
614 |
|
"""Liefert Berechnungszeitraum (JAHR, MONAT, WOCHE, TAG)""" |
615 |
|
return self.LZZ |
616 |
|
|
617 |
def SetSteuerklasse(self, stkl): |
def SetSteuerklasse(self, stkl): |
618 |
"""Setzt Steuerklasse (I, II, III, IV, V, VI)""" |
"""Setzt Steuerklasse (I, II, III, IV, V, VI)""" |
619 |
self.Set_STKL(stkl) |
self.Set_STKL(stkl) |
620 |
|
|
621 |
def SetKirchensteuer(self, prozent): |
def GetSteuerklasse(self): |
622 |
"""Setzt Kirchensteuer in Prozent""" |
"""Liefert Steuerklasse (I, II, III, IV, V, VI)""" |
623 |
|
return self.STKL |
624 |
|
|
625 |
|
def SetKirchensteuerProzent(self, prozent): |
626 |
|
"""Setzt Kirchensteuer in Prozent, |
627 |
|
0 wenn keine Kirchensteuer zu zahlen ist.""" |
628 |
self.Set_R(prozent) |
self.Set_R(prozent) |
629 |
|
|
630 |
|
def GetKirchensteuerProzent(self): |
631 |
|
"""Liefert Kirchensteuer in Prozent |
632 |
|
oder 0 wenn keine Kirchensteuer zu zahlen ist.""" |
633 |
|
return self.R |
634 |
|
|
635 |
|
def SetKinderfreibetrag(self, kfb): |
636 |
|
"""Setzt Kinderfreibetrag lt. Lohnsteuerkarte""" |
637 |
|
self.Set_ZKF(kfb) |
638 |
|
|
639 |
|
def GetKinderfreibetrag(self): |
640 |
|
"""Liefert Kinderfreibetrag lt. Lohnsteuerkarte""" |
641 |
|
return self.ZFK |
642 |
|
|
643 |
def GetLohnsteuer(self): |
def GetLohnsteuer(self): |
644 |
"""Liefert Lohnsteuer in Euro.Cent""" |
"""Liefert Lohnsteuer in Euro.Cent""" |
645 |
return round(self.LSTLZZ / 100, 2) |
return round(self.LSTLZZ / 100, 2) |
646 |
|
|
647 |
def GetSoli(self): |
def GetSoli(self): |
648 |
"""Liefert Solidarit�tszuschlag in Euro.Cent""" |
"""Liefert Solidarit�tszuschlag in Euro.Cent""" |
649 |
return round(self.SOLZLZZ / 100, 2) |
return FixedPointFloor(self.SOLZLZZ / 100, 2) |
650 |
|
|
651 |
def GetKirchensteuer(self): |
def GetKirchensteuer(self): |
652 |
"""Liefert Kirchensteuer in Euro.Cent""" |
"""Liefert Kirchensteuer in Euro.Cent""" |