/[lohnrechner]/trunk/LST2005.py
ViewVC logotype

Diff of /trunk/LST2005.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2 by wilde, Tue Jan 11 15:22:31 2005 UTC revision 15 by wilde, Thu Jan 13 12:52:07 2005 UTC
# Line 13  Line 13 
13  """Lohnsteuerberechnung nach dem offiziellen Programmablaufplan  """Lohnsteuerberechnung nach dem offiziellen Programmablaufplan
14     wie in Programmablaufplan-LSt.pdf dokumentiert."""     wie in Programmablaufplan-LSt.pdf dokumentiert."""
15    
16    __version__ = "$Revision$"
17    # $Source$
18    
19    def _ModulVersion():
20        return __version__[11:-2]
21    
22  # Die Variablen Namen sind h�sslich, die Algorithmen nicht  # Die Variablen Namen sind h�sslich, die Algorithmen nicht
23  # dokumentiert, der Code grausam -- daf�r entspricht alles Zeile f�r  # dokumentiert, der Code grausam -- daf�r entspricht alles Zeile f�r
24  # Zeile obigem Dokument.  Jedenfalls sollte es so sein...  # Zeile obigem Dokument.  Jedenfalls sollte es so sein...
# Line 175  class LST: Line 181  class LST:
181          else:          else:
182              self._JBMG = self._LSTJAHR              self._JBMG = self._LSTJAHR
183          self._MSOLZ()          self._MSOLZ()
184  #        self._MSONST()          self._MSONST()
185  #        self._MVMT()          self._MVMT()
186                    
187      # Benutzte Unterprogramme:      # Benutzte Unterprogramme:
188      def _MRE4LZZ(self):      def _MRE4LZZ(self):
# Line 230  class LST: Line 236  class LST:
236              if self.RE4 > self.VBEZ:              if self.RE4 > self.VBEZ:
237                  self._ANP += 920                  self._ANP += 920
238          else:          else:
239              self._ANP = 0              self._ANP = 0            
240          if self.STKL == 1:          if self.STKL == 1:
241              self._SAP = 36              self._SAP = 36
242              self._KFB = self.ZKF * 5808              self._KFB = self.ZKF * 5808
# Line 270  class LST: Line 276  class LST:
276              self._VSP1 = 1.0              self._VSP1 = 1.0
277          else:          else:
278              if self._ZRE4VP > 62400:              if self._ZRE4VP > 62400:
279                  self._ZRE4VP = 62400.0                  self._ZRE4VP = 62400
280              self._VSP1 = 0.2 * self._ZRE4VP              self._VSP1 = 0.2 * self._ZRE4VP
281              self._VSP1 = self._VSP1 * 0.0975              self._VSP1 = FixedPointFloor(self._VSP1 * 0.0975)
282          self._VSP2 = 0.11 * self._ZRE4VP          self._VSP2 = FixedPointFloor(0.11 * self._ZRE4VP)
283          self._VHB = 1500 * self._KZTAB          self._VHB = 1500 * self._KZTAB
284          if self._VSP2 > self._VHB:          if self._VSP2 > self._VHB:
285              self._VSP2 = self._VHB              self._VSP2 = self._VHB
# Line 365  class LST: Line 371  class LST:
371              self.SOLZLZZ = 0              self.SOLZLZZ = 0
372          if self.R > 0:          if self.R > 0:
373              self._JW = self._JBMG * 100              self._JW = self._JBMG * 100
374              self._UPANTEIL              self._UPANTEIL()
375              self.BK = self._ANTEIL1              self.BK = self._ANTEIL1
376          else:          else:
377              self.BK = 0              self.BK = 0
# Line 402  class LST: Line 408  class LST:
408              self._ST = floor(self._X * 0.42 - 7914)              self._ST = floor(self._X * 0.42 - 7914)
409          self._ST *= self._KZTAB          self._ST *= self._KZTAB
410    
411        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                self.STV = (self._LST2 - self._LST1) * 5
494                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      # Methoden zum gepr�ften setzen der Wert      # Methoden zum gepr�ften setzen der Wert
516      # FIX ME: Pr�fung _sehr_ unvollst�ndig      # FIX ME: Pr�fung _sehr_ unvollst�ndig
517      def Set_RE4(self, value):      def Set_RE4(self, value):
# Line 428  class LST: Line 538  class LST:
538          self.JVBEZ = value          self.JVBEZ = value
539                    
540      def Set_KRV(self, value):      def Set_KRV(self, value):
541          if value not in (0,1):          assert value in (0,1), "must be 0 or 1"
             raise ValueError  
542          self.KRV = value          self.KRV = value
543                    
544      def Set_LZZ(self, value):      def Set_LZZ(self, value):
545          if value not in (1,2,3,4):          assert value in (1,2,3,4), \
546              raise ValueError                 "must be in range 1-4 (JAHR, MONAT, WOCHE, TAG)"
547          self.LZZ = value          self.LZZ = value
548                    
549      def Set_R(self, value):      def Set_R(self, value):
550            assert value >= 0.0 and value <= 100.0, \
551                   "must be in range 0.0-100.0 (Percent)"
552          self.R = value          self.R = value
553                    
554      def Set_SONSTB(self, value):      def Set_SONSTB(self, value):
555          self.SONSTB = value          self.SONSTB = value
556                    
557      def Set_STKL(self, value):      def Set_STKL(self, value):
558          if value not in (1,2,3,4,5,6):          assert value in (1,2,3,4,5,6), \
559              raise ValueError                 "must be in range 1-6 (I II III IV V VI)"
560          self.STKL = value          self.STKL = value
561                    
562      def Set_VBEZ(self, value):      def Set_VBEZ(self, value):
# Line 472  class LST: Line 583  class LST:
583      def Set_ZMVB(self, value):      def Set_ZMVB(self, value):
584          self.ZMVB = value          self.ZMVB = value
585    
586      # --------------------------------------------------------------------  # --------------------------------------------------------------------
587      # Eine etwas sch�nere API:  # Eine etwas sch�nere API
588      #  #
589    # FIX ME: Diese API ber�cksichtigt nicht alle M�glichen Parameter und
590      def Set_Lohn(self, lohn):  # Berechnungen, es fehlen insbesondere die Berechnungen zu Mehrj�hrigen
591    # Bez�gen und Sonstigen Leistungen.
592    
593    class LStRechner2005(LST):
594        def __init__(self):
595            LST.__init__(self)
596        
597        def SetLohn(self, lohn):
598            """Setzt Lohn in Euro.Cent"""
599          self.Set_RE4(lohn * 100.0)          self.Set_RE4(lohn * 100.0)
600    
601      def Set_Zeitraum(self, lzz):      def SetZeitraum(self, lzz):
602            """Setzt Berechnungszeitraum (JAHR, MONAT, WOCHE, TAG)"""
603          self.Set_LZZ(lzz)          self.Set_LZZ(lzz)
604    
605      def Set_Steuerklasse(self, stkl):      def SetSteuerklasse(self, stkl):
606            """Setzt Steuerklasse (I, II, III, IV, V, VI)"""
607          self.Set_STKL(stkl)          self.Set_STKL(stkl)
608    
609      def Get_Lohnsteuer(self):      def SetKirchensteuer(self, prozent):
610            """Setzt Kirchensteuer in Prozent"""
611            self.Set_R(prozent)
612    
613        def GetLohnsteuer(self):
614            """Liefert Lohnsteuer in Euro.Cent"""
615          return round(self.LSTLZZ / 100, 2)          return round(self.LSTLZZ / 100, 2)
616        
617        def GetSoli(self):
618            """Liefert Solidarit�tszuschlag in Euro.Cent"""
619            return FixedPointFloor(self.SOLZLZZ / 100, 2)
620    
621        def GetKirchensteuer(self):
622            """Liefert Kirchensteuer in Euro.Cent"""
623            return FixedPointFloor(self.BK * self.R / 10000, 2)

Legend:
Removed from v.2  
changed lines
  Added in v.15

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26