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

Diff of /trunk/LST2008.py

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

trunk/RCS/LST2005.py revision 4 by wilde, Wed Jan 12 15:38:07 2005 UTC LST2006.py revision 53 by wilde, Wed Jan 25 11:42:03 2006 UTC
# Line 1  Line 1 
1    # -*- coding: iso-8859-1 -*-
2  # --------------------------------------------------------------------  # --------------------------------------------------------------------
3  # LST2005 -- Python Modul zur Berechnung der Deutschen Lohnsteuer 2005  # LST2006 -- Python Modul zur Berechnung der Deutschen Lohnsteuer 2006
4  # $Id$  # $Id$
5  # --------------------------------------------------------------------  # --------------------------------------------------------------------
6  #  #
7  # Copyright (c) 2005 by Intevation GmbH  # Copyright (c) 2005, 2006 by Intevation GmbH
8  # Authors:  # Authors:
9  # Sascha Wilde <[email protected]>  # Sascha Wilde <[email protected]>
10  #  #
# Line 11  Line 12 
12  # Read the file COPYING coming with this package for details.  # Read the file COPYING coming with this package for details.
13    
14  """Lohnsteuerberechnung nach dem offiziellen Programmablaufplan  """Lohnsteuerberechnung nach dem offiziellen Programmablaufplan
15     wie in Programmablaufplan-LSt.pdf dokumentiert."""     wie im offiziellen Programmablaufplan des Bundesfinanzministerium
16       dokumentiert.
17       http://www.bundesfinanzministerium.de/Service/Interaktiver-Steuerrechner-.577.htm"""
18    
19    __version__ = "$Revision$"
20    # $Source$
21    
22    def _ModulVersion():
23        return __version__[11:-2]
24    
25  # Die Variablen Namen sind h�sslich, die Algorithmen nicht  # Die Variablen Namen sind h�sslich, die Algorithmen nicht
26  # dokumentiert, der Code grausam -- daf�r entspricht alles Zeile f�r  # dokumentiert, der Code grausam -- daf�r entspricht alles Zeile f�r
# Line 42  VI  = 6 Line 51  VI  = 6
51    
52  class LST:  class LST:
53      def __init__(self,      def __init__(self,
54                   RE4=0,                   AJAHR =1964,
55                   ALTER1=0,                   ALTER1=0,
56                   HINZUR=0,                   HINZUR=0,
57                   JFREIB=0,                   JFREIB=0,
# Line 52  class LST: Line 61  class LST:
61                   KRV   =0,                   KRV   =0,
62                   LZZ   =2,                   LZZ   =2,
63                   R     =0,                   R     =0,
64                     RE4   =0,
65                   SONSTB=0,                   SONSTB=0,
66                     STERBE=0,
67                   STKL  =1,                   STKL  =1,
68                   VBEZ  =0,                   VBEZ  =0,
69                   VBEZM =0,                   VBEZM =0,
70                   VBEZS =0,                   VBEZS =0,
71                   VBS   =0,                   VBS   =0,
72                     VJAHR =0,
73                     VKAPA =0,
74                   VMT   =0,                   VMT   =0,
75                   WFUNDF=0,                   WFUNDF=0,
76                   ZKF   =0,                   ZKF   =0,
77                   ZMVB  =0):                   ZMVB  =0):
78          self.Set_RE4(RE4)          self.Set_AJAHR(AJAHR)
79          self.Set_ALTER1(ALTER1)          self.Set_ALTER1(ALTER1)
80          self.Set_HINZUR(HINZUR)          self.Set_HINZUR(HINZUR)
81          self.Set_JFREIB(JFREIB)          self.Set_JFREIB(JFREIB)
# Line 72  class LST: Line 85  class LST:
85          self.Set_KRV(KRV)          self.Set_KRV(KRV)
86          self.Set_LZZ(LZZ)          self.Set_LZZ(LZZ)
87          self.Set_R(R)          self.Set_R(R)
88            self.Set_RE4(RE4)
89          self.Set_SONSTB(SONSTB)          self.Set_SONSTB(SONSTB)
90            self.Set_STERBE(STERBE)
91          self.Set_STKL(STKL)          self.Set_STKL(STKL)
92          self.Set_VBEZ(VBEZ)          self.Set_VBEZ(VBEZ)
93          self.Set_VBEZM(VBEZM)          self.Set_VBEZM(VBEZM)
94          self.Set_VBEZS(VBEZS)          self.Set_VBEZS(VBEZS)
95          self.Set_VBS(VBS)          self.Set_VBS(VBS)
96            self.Set_VJAHR(VJAHR)
97            self.Set_VKAPA(VKAPA)
98          self.Set_VMT(VMT)          self.Set_VMT(VMT)
99          self.Set_WFUNDF(WFUNDF)          self.Set_WFUNDF(WFUNDF)
100          self.Set_ZKF(ZKF)          self.Set_ZKF(ZKF)
# Line 108  class LST: Line 125  class LST:
125          self._EFA = 0          self._EFA = 0
126          self._FVB = 0          self._FVB = 0
127          self._FVBZ = 0          self._FVBZ = 0
128            self._HFVB = 0
129            self._J = 0
130          self._JBMG = 0          self._JBMG = 0
131          self._JW = 0          self._JW = 0
132            self._K = 0
133          self._KENNZ = 0          self._KENNZ = 0
134          self._KFB = 0          self._KFB = 0
135          self._KZTAB = 1          self._KZTAB = 1
# Line 128  class LST: Line 148  class LST:
148          self._ST = 0          self._ST = 0
149          self._ST1 = 0          self._ST1 = 0
150          self._ST2 = 0          self._ST2 = 0
151            self._TAB1=(None,  # 1 als erstes Element, wie im PAP
152                        0.400, # bis 2005
153                        0.384, # 2006
154                        0.368, # 2007
155                        0.352, # 2008
156                        0.336, # 2009
157                        0.320, # 2010
158                        0.304, # 2011
159                        0.288, # 2012
160                        0.272, # 2013
161                        0.256, # 2014
162                        0.240, # 2015
163                        0.224, # 2016
164                        0.208, # 2017
165                        0.192, # 2018
166                        0.176, # 2019
167                        0.160, # 2020
168                        0.152, # 2021
169                        0.144, # 2022
170                        0.136, # 2023
171                        0.128, # 2024
172                        0.120, # 2025
173                        0.112, # 2026
174                        0.104, # 2027
175                        0.096, # 2028
176                        0.088, # 2029
177                        0.080, # 2030
178                        0.072, # 2031
179                        0.064, # 2032
180                        0.056, # 2033
181                        0.048, # 2034
182                        0.040, # 2035
183                        0.032, # 2036
184                        0.024, # 2037
185                        0.016, # 2038
186                        0.008, # 2039
187                        0.000) # 2040
188            self._TAB2=(None,  # 1 als erstes Element, wie im PAP
189                        3000,  # bis 2005
190                        2880,  # 2006
191                        2760,  # 2007
192                        2640,  # 2008
193                        2520,  # 2009
194                        2400,  # 2010
195                        2280,  # 2011
196                        2160,  # 2012
197                        2040,  # 2013
198                        1920,  # 2014
199                        1800,  # 2015
200                        1680,  # 2016
201                        1560,  # 2017
202                        1440,  # 2018
203                        1320,  # 2019
204                        1200,  # 2020
205                        1140,  # 2021
206                        1080,  # 2022
207                        1020,  # 2023
208                         960,  # 2024
209                         900,  # 2025
210                         840,  # 2026
211                         780,  # 2027
212                         720,  # 2028
213                         660,  # 2029
214                         600,  # 2030
215                         540,  # 2031
216                         480,  # 2032
217                         420,  # 2033
218                         360,  # 2034
219                         300,  # 2035
220                         240,  # 2036
221                         180,  # 2037
222                         120,  # 2038
223                          60,  # 2039
224                           0)  # 2040
225            self._TAB3=(None,  # 1 als erstes Element, wie im PAP
226                         900,  # bis 2005
227                         864,  # 2006
228                         828,  # 2007
229                         792,  # 2008
230                         756,  # 2009
231                         720,  # 2010
232                         684,  # 2011
233                         648,  # 2012
234                         612,  # 2013
235                         576,  # 2014
236                         540,  # 2015
237                         504,  # 2016
238                         468,  # 2017
239                         432,  # 2018
240                         396,  # 2019
241                         360,  # 2020
242                         342,  # 2021
243                         324,  # 2022
244                         306,  # 2023
245                         288,  # 2024
246                         270,  # 2025
247                         252,  # 2026
248                         234,  # 2027
249                         216,  # 2028
250                         198,  # 2029
251                         180,  # 2030
252                         162,  # 2031
253                         144,  # 2032
254                         126,  # 2033
255                         108,  # 2034
256                          90,  # 2035
257                          72,  # 2036
258                          54,  # 2037
259                          36,  # 2038
260                          18,  # 2039
261                           0)  # 2040
262            self._TAB4=self._TAB1
263            self._TAB5=(None,  # 1 als erstes Element, wie im PAP
264                        1900,  # bis 2005
265                        1824,  # 2006
266                        1748,  # 2007
267                        1672,  # 2008
268                        1596,  # 2009
269                        1520,  # 2010
270                        1444,  # 2011
271                        1368,  # 2012
272                        1292,  # 2013
273                        1216,  # 2014
274                        1140,  # 2015
275                        1064,  # 2016
276                         988,  # 2017
277                         912,  # 2018
278                         836,  # 2019
279                         760,  # 2020
280                         722,  # 2021
281                         684,  # 2022
282                         646,  # 2023
283                         608,  # 2024
284                         570,  # 2025
285                         532,  # 2026
286                         494,  # 2027
287                         456,  # 2028
288                         418,  # 2029
289                         380,  # 2030
290                         342,  # 2031
291                         304,  # 2032
292                         266,  # 2033
293                         228,  # 2034
294                         190,  # 2035
295                         152,  # 2036
296                         114,  # 2037
297                          76,  # 2038
298                          38,  # 2039
299                           0)  # 2040
300          self._VBEZB = 0          self._VBEZB = 0
301          self._VHB = 0          self._VHB = 0
302          self._VSP = 0.0  # 2 Dezimalstellen          self._VSP = 0.0  # 2 Dezimalstellen
# Line 140  class LST: Line 309  class LST:
309          self._VSPO = 0.0  # 2 Dezimalstellen          self._VSPO = 0.0  # 2 Dezimalstellen
310          self._VSPREST = 0.0  # 2 Dezimalstellen          self._VSPREST = 0.0  # 2 Dezimalstellen
311          self._VSPVOR = 0.0  # 2 Dezimalstellen          self._VSPVOR = 0.0  # 2 Dezimalstellen
         # Jetzt wirds richtig toll: X und Y  
         # kann mal bitte jemand den Verantwortlichen f�r diese  
         # Variablen Namen schlagen?  
312          self._X = 0.0  # 2 Dezimalstellen          self._X = 0.0  # 2 Dezimalstellen
313          self._Y = 0.0  # 6 Dezimalstellen          self._Y = 0.0  # 6 Dezimalstellen
314          self._ZRE4 = 0.0  # 2 Dezimalstellen          self._ZRE4 = 0.0  # 2 Dezimalstellen
315          self._ZRE4VP = 0.0  # 2 Dezimalstellen          self._ZRE4VP = 0.0  # 2 Dezimalstellen
316          self._ZRE4VP1 = 0.0  # 2 Dezimalstellen          self._ZRE4VP1 = 0.0  # 2 Dezimalstellen
317          self._ZTABFB = 0          self._ZTABFB = 0
318            self._ZVBEZ = 0
319          self._ZVE = 0          self._ZVE = 0
320          self._ZX = 0          self._ZX = 0
321          self._ZZX = 0          self._ZZX = 0
# Line 157  class LST: Line 324  class LST:
324          # ------------------------------------------------------------          # ------------------------------------------------------------
325          # Anfang der Berechnung          # Anfang der Berechnung
326          self._MRE4LZZ()          self._MRE4LZZ()
327            self._KENNZ = 0
328          self._RE4LZZ = self.RE4 - self._FVB \          self._RE4LZZ = self.RE4 - self._FVB \
329                          - self._ALTE - self.WFUNDF \                          - self._ALTE - self.WFUNDF \
330                          + self.HINZUR                          + self.HINZUR
# Line 177  class LST: Line 345  class LST:
345          self._MSOLZ()          self._MSOLZ()
346          self._MSONST()          self._MSONST()
347          self._MVMT()          self._MVMT()
348            
349      # Benutzte Unterprogramme:      # Benutzte Unterprogramme:
350      def _MRE4LZZ(self):      def _MRE4LZZ(self):
351          if self.VBEZ == 0:          if self.VBEZ == 0:
352              self._FVBZ = 0              self._FVBZ = 0
353              self._FVB = 0              self._FVB = 0
354          else:          else:
355                if self.VJAHR < 2006:
356                    self._J = 1
357                elif self.VJAHR < 2040:
358                    self._J = VJAHR - 2004
359                else:
360                    self._J = 36
361              if self.LZZ == 1:              if self.LZZ == 1:
362                  self._VBEZB = self.VBEZM * self.ZMVB + self.VBEZS                  if ( self.STERBE + self.VKAPA ) > 0:
363                  self._FVBZ = 75 * self.ZMVB                      self._VBEZB = self.VBEZM * self.ZMVB + self.VBEZS
364                        self._HFVB = self._TAB2[self._J] * 100
365                        self._FVBZ = self._TAB3[self._J]
366                    else:
367                        self._VBEZB = self.VBEZM * self.ZMVB + self.VBEZS
368                        self._HFVB = self._TAB2[self._J] / 12 * self.ZMVB * 100
369                        self._FVBZ = ceil(self._TAB3[self._J] / 12 * self.ZMVB)
370              else:              else:
371                  self._VBEZB = self.VBEZM * 12 + self.VBEZS                  self._VBEZB = self.VBEZM * 12 + self.VBEZS
372                  self._FVBZ = 900                  self._HFVB = self._TAB2[self._J] * 100
373              self._FVB = ceil(self._VBEZB * 0.4)                  self._FVBZ = self._TAB3[self._J]
374              if self._FVB > 300000:              self._FVB = ceil(self._VBEZB * self._TAB1[self._J])
375                  self._FVB = 300000              if self._FVB > self._HFVB:
376                    self._FVB = self._HFVB
377              self._JW = self._FVB              self._JW = self._FVB
378              self._UPANTEIL()              self._UPANTEIL()
379              self._FVB = self._ANTEIL2              self._FVB = self._ANTEIL2
380          if self.ALTER1 == 0:          if self.ALTER1 == 0:
381              self._ALTE = 0              self._ALTE = 0
382          else:          else:
383                if self.AJAHR < 2006:
384                    self._K = 1
385                elif self.AJAHR < 2040:
386                    self._K = self.AJAHR - 2004
387                else:
388                    self._K = 36
389              self._BMG = self.RE4 - self.VBEZ              self._BMG = self.RE4 - self.VBEZ
390              self._ALTE = ceil(self._BMG * 0.4)              self._ALTE = ceil(self._BMG * self._TAB4[self._K])
391              self._JW = 190000              self._JW = self._TAB5[self._K] * 100
392              self._UPANTEIL()              self._UPANTEIL()
393              if self._ALTE > self._ANTEIL2:              if self._ALTE > self._ANTEIL2:
394                  self._ALTE = self._ANTEIL2                  self._ALTE = self._ANTEIL2
# Line 210  class LST: Line 397  class LST:
397          if self.LZZ == 1:          if self.LZZ == 1:
398              self._ZRE4 = FixedPointFloor(self._RE4LZZ / 100.0)              self._ZRE4 = FixedPointFloor(self._RE4LZZ / 100.0)
399              self._ZRE4VP = FixedPointFloor(self._RE4LZZV / 100.0)              self._ZRE4VP = FixedPointFloor(self._RE4LZZV / 100.0)
400                self._ZVBEZ = FixedPointFloor((self.VBEZ - self._FVB) / 100.0)
401          elif self.LZZ == 2:          elif self.LZZ == 2:
402              self._ZRE4 = FixedPointFloor((self._RE4LZZ + 0.67) * 0.12)              self._ZRE4 = FixedPointFloor((self._RE4LZZ + 0.67) * 0.12)
403              self._ZRE4VP = FixedPointFloor((self._RE4LZZV + 0.67) * 0.12)              self._ZRE4VP = FixedPointFloor((self._RE4LZZV + 0.67) * 0.12)
404                self._ZVBEZ = FixedPointFloor((self.VBEZ - self._FVB + 0.67) * 0.12)
405          elif self.LZZ == 3:          elif self.LZZ == 3:
406              self._ZRE4 = FixedPointFloor((self._RE4LZZ + 0.89) * 3.6 / 7)              self._ZRE4 = FixedPointFloor((self._RE4LZZ + 0.89) * 3.6 / 7)
407              self._ZRE4VP = FixedPointFloor((self._RE4LZZV + 0.89) * 3.6 / 7)              self._ZRE4VP = FixedPointFloor((self._RE4LZZV + 0.89) * 3.6 / 7)
408                self._ZVBEZ = FixedPointFloor((self.VBEZ - self._FVB + 0.89) * 3.6 / 7)
409          else:          else:
410              self._ZRE4 = FixedPointFloor((self._RE4LZZ + 0.56) * 3.6)              self._ZRE4 = FixedPointFloor((self._RE4LZZ + 0.56) * 3.6)
411              self._ZRE4VP = FixedPointFloor((self._RE4LZZV + 0.56) * 3.6)              self._ZRE4VP = FixedPointFloor((self._RE4LZZV + 0.56) * 3.6)
412                self._ZVBEZ = FixedPointFloor((self.VBEZ - self._FVB + 0.56) * 3.6)
413          if self._ZRE4 < 0:          if self._ZRE4 < 0:
414              self._ZRE4 = 0.0              self._ZRE4 = 0.0
415            if self._ZVBEZ < 0:
416                self._ZVBEZ = 0.0
417    
418      def _MZTABFB(self):      def _MZTABFB(self):
419          self._KZTAB = 1          self._ANP = 0
420          if self.STKL < 6:          if (self._ZVBEZ > 0) and (self._ZVBEZ < self._FVBZ):
421              if self.VBEZ > 0:              self._FVBZ = self._ZVBEZ
422            if (self.STKL < 6) and (self._ZVBEZ > 0):
423                if (self._ZVBEZ - self._FVBZ) < 102:
424                    self._ANP = self._ZVBEZ - self._FVBZ
425                else:
426                  self._ANP = 102                  self._ANP = 102
427              if self.RE4 > self.VBEZ:          if (self.STKL < 6) and (self._ZRE4 > self._ZVBEZ):
428                  self._ANP += 920              if (self._ZRE4 - self._ZVBEZ) < 920:
429          else:                  self._ANP = self._ANP + self._ZRE4 - self._ZVBEZ
430              self._ANP = 0              else:
431                    self._ANP = self._ANP + 920
432            self._KZTAB = 1
433          if self.STKL == 1:          if self.STKL == 1:
434              self._SAP = 36              self._SAP = 36
435              self._KFB = self.ZKF * 5808              self._KFB = self.ZKF * 5808
# Line 248  class LST: Line 447  class LST:
447          else:          else:
448              self._KFB = 0              self._KFB = 0
449          self._ZTABFB = self._EFA + self._ANP + self._SAP + self._FVBZ          self._ZTABFB = self._EFA + self._ANP + self._SAP + self._FVBZ
         self._KENNZ = 0  
450    
451      def _MLSTJAHR(self):      def _MLSTJAHR(self):
452          if self.STKL < 5:          if self.STKL < 5:
453              self._UPEVP()              self._UPEVP()
454          else:          else:
455              self._VSP = 0.0                self._VSP = 0.0
456          self._ZVE = self._ZRE4 - self._ZTABFB - self._VSP          self._ZVE = self._ZRE4 - self._ZTABFB - self._VSP
457          if self._ZVE < 1:          if self._ZVE < 1:
458              self._ZVE = self._X = 0.0              self._ZVE = self._X = 0.0
# Line 267  class LST: Line 465  class LST:
465    
466      def _UPEVP(self):      def _UPEVP(self):
467          if self.KRV == 1:          if self.KRV == 1:
468              self._VSP1 = 1.0              self._VSP1 = 0.0
469          else:          else:
470              if self._ZRE4VP > 62400:              if self._ZRE4VP > 63000:
471                  self._ZRE4VP = 62400.0                  self._ZRE4VP = 63000
472              self._VSP1 = 0.2 * self._ZRE4VP              self._VSP1 = 0.24 * self._ZRE4VP
473              self._VSP1 = self._VSP1 * 0.0975              self._VSP1 = FixedPointFloor(self._VSP1 * 0.0975)
474          self._VSP2 = 0.11 * self._ZRE4VP          self._VSP2 = FixedPointFloor(0.11 * self._ZRE4VP)
475          self._VHB = 1500 * self._KZTAB          self._VHB = 1500 * self._KZTAB
476          if self._VSP2 > self._VHB:          if self._VSP2 > self._VHB:
477              self._VSP2 = self._VHB              self._VSP2 = self._VHB
# Line 283  class LST: Line 481  class LST:
481              self._VSP = self._VSPN              self._VSP = self._VSPN
482    
483      def _MVSP(self):      def _MVSP(self):
484          self._VSPO = self._ZRE4VP * 0.2          if self._KENNZ == 1:
485                self._VSPO = self._ZRE4VP1 * 0.2
486            else:
487                self._VSPO = self._ZRE4VP * 0.2
488          self._VSPVOR = 3068 * self._KZTAB          self._VSPVOR = 3068 * self._KZTAB
489          self._VSPMAX1 = 1334 * self._KZTAB          self._VSPMAX1 = 1334 * self._KZTAB
490          self._VSPMAX2 = 667 * self._KZTAB          self._VSPMAX2 = 667 * self._KZTAB
# Line 365  class LST: Line 566  class LST:
566              self.SOLZLZZ = 0              self.SOLZLZZ = 0
567          if self.R > 0:          if self.R > 0:
568              self._JW = self._JBMG * 100              self._JW = self._JBMG * 100
569              self._UPANTEIL              self._UPANTEIL()
570              self.BK = self._ANTEIL1              self.BK = self._ANTEIL1
571          else:          else:
572              self.BK = 0              self.BK = 0
# Line 382  class LST: Line 583  class LST:
583              self._ANTEIL2 = ceil(self._JW * 7 / 360.0)              self._ANTEIL2 = ceil(self._JW * 7 / 360.0)
584          else:          else:
585              self._ANTEIL1 = floor(self._JW / 360.0)              self._ANTEIL1 = floor(self._JW / 360.0)
586              self._ANTEIL2 = ceil(self._JW / 360.0)                          self._ANTEIL2 = ceil(self._JW / 360.0)
587    
588      def _UPTAB05(self):      def _UPTAB05(self):
589          if self._X < 7665:          if self._X < 7665:
# Line 416  class LST: Line 617  class LST:
617              self.RE4 = self.JRE4              self.RE4 = self.JRE4
618              self._MRE4LZZ()              self._MRE4LZZ()
619              self._MRE4LZZ2()              self._MRE4LZZ2()
             self._MRE4()  
             self._MZTABFB()  
620              self._MLSTJAHR()              self._MLSTJAHR()
621              self._LST1 = self._ST * 100              self._LST1 = self._ST * 100
622              self.VBEZ = self.JVBEZ + self.VBS              self.VBEZ = self.JVBEZ + self.VBS
623              self.RE4 = self.JRE4 + self.SONSTB              self.RE4 = self.JRE4 + self.SONSTB
624                self.VBEZS = self.VBEZS + self.STERBE
625              self._MRE4LZZ()              self._MRE4LZZ()
626              self._MRE4LZZ2()              self._MRE4LZZ2()
             self._MRE4()  
627              self._MLSTJAHR()              self._MLSTJAHR()
628              self._LST2 = self._ST * 100              self._LST2 = self._ST * 100
629              self.STS = self._LST2 - self._LST1              self.STS = self._LST2 - self._LST1
630              self.SOLZS = self.STS * 5.5 / 100              self.SOLZS = floor(self.STS * 5.5 / 100)
631              if self.R > 0:              if self.R > 0:
632                  self.BKS = self.STS                  self.BKS = self.STS
633              else:              else:
# Line 450  class LST: Line 649  class LST:
649          self._RE4LZZ = self.RE4 - self._FVB - self._ALTE \          self._RE4LZZ = self.RE4 - self._FVB - self._ALTE \
650                         - self.JFREIB + self.JHINZU                         - self.JFREIB + self.JHINZU
651          self._RE4LZZV = self.RE4 - self._FVB - self._ALTE          self._RE4LZZV = self.RE4 - self._FVB - self._ALTE
652            self._MRE4()
653            self._MZTABFB()
654    
655      def _MVMT(self):      def _MVMT(self):
656          if self.VMT > 0:          # ------------------------------
657              # ------------------------------          # Nicht im offiziellen Programm-
658              # Nicht im offiziellen Programm-          # ablaufplan: Attribute sichern
659              # ablaufplan: Attribute sichern          old_lzz = self.LZZ
660              old_lzz = self.LZZ          old_vbez = self.VBEZ
661              old_vbez = self.VBEZ          old_re4 = self.RE4
662              old_re4 = self.RE4          # ------------------------------
663              # ------------------------------            if (self.VMT + self.VKAPA) > 0:
664              self.LZZ = 1              self.LZZ = 1
665              self.VBEZ = self.JVBEZ + self.VBS              self.VBEZ = self.JVBEZ + self.VBS
666              self.RE4 = self.JRE4 + self.SONSTB              self.RE4 = self.JRE4 + self.SONSTB
667              self._MRE4LZZ()              self._MRE4LZZ()
668              self._MRE4LZZ2()              self._MRE4LZZ2()
             self._MRE4()  
             self._MZTABFB()  
669              self._MLSTJAHR()              self._MLSTJAHR()
670              self._LST1 = self._ST * 100              self._LST1 = self._ST * 100
671                self.VMT = self.VMT + self.VKAPA
672                self.VBEZS = self.VBEZS + self.VKAPA
673                self.VBEZ = self.VBEZ + self.VKAPA
674              self.RE4 = self.JRE4 + self.SONSTB + self.VMT              self.RE4 = self.JRE4 + self.SONSTB + self.VMT
675              self._MRE4LZZ()              self._MRE4LZZ()
676              self._MRE4LZZ2()              self._MRE4LZZ2()
             self._MRE4()  
677              self._KENNZ = 1              self._KENNZ = 1
678              self._ZRE4VP1 = self._ZRE4VP              self._ZRE4VP1 = self._ZRE4VP
679              self._MLSTJAHR()              self._MLSTJAHR()
680              self._LST3 = self._ST * 100              self._LST3 = self._ST * 100
681                self.VBEZ = self.VBEZ - self.VKAPA
682              self.RE4 = self.JRE4 + self.SONSTB              self.RE4 = self.JRE4 + self.SONSTB
683              self._MRE4LZZ()              self._MRE4LZZ()
684              self.RE4 = self.JRE4 + self.SONSTB + self.VMT / 5              if (self.RE4 - self.JFREIB + self.JHINZU) < 0:
685              self._MRE4LZZ2()                  self.RE4 = self.RE4 - self.JFREIB + self.JHINZU
686              self._MRE4()                  self.JFREIB = 0
687              self._MLSTJAHR()                  self.JHINZU = 0
688              self._LST2 = self._ST * 100                  self.RE4 = (self.RE4 + self.VMT) / 5
689              self.STV = (self._LST2 - self.LST1) * 5                  self._MRE4LZZ2()
690                    self._MLSTJAHR()
691                    self._LST2 = self._ST * 100
692                    self.STV = self._LST2 * 5
693                else:
694                    self.RE4 = self.RE4 + self.VMT / 5
695                    self._MRE4LZZ2()
696                    self._MLSTJAHR()
697                    self._LST2 = self._ST * 100
698                    self.STV = (self._LST2 - self._LST1) * 5
699              self._LST3 -= self._LST1              self._LST3 -= self._LST1
700              if self._LST3 < self.STV:              if self._LST3 < self.STV:
701                  self.STV = self._LST3                  self.STV = self._LST3
# Line 508  class LST: Line 719  class LST:
719    
720      # Methoden zum gepr�ften setzen der Wert      # Methoden zum gepr�ften setzen der Wert
721      # FIX ME: Pr�fung _sehr_ unvollst�ndig      # FIX ME: Pr�fung _sehr_ unvollst�ndig
722      def Set_RE4(self, value):  
723          assert value >= 0, "must not be negative"      def Set_AJAHR(self, value):
724          self.RE4 = value          assert type(value) == type(0), "must be integer"
725            assert value >= 1900, "must be greater than 1900"
726            self.AJAHR = value
727    
728      def Set_ALTER1(self, value):      def Set_ALTER1(self, value):
729          assert value in (0,1), "must be 0 or 1"          assert value in (0,1), "must be 0 or 1"
730          self.ALTER1 = value          self.ALTER1 = value
731            
732      def Set_HINZUR(self, value):      def Set_HINZUR(self, value):
733          self.HINZUR = value          self.HINZUR = value
734            
735      def Set_JFREIB(self, value):      def Set_JFREIB(self, value):
736          self.JFREIB = value          self.JFREIB = value
737            
738      def Set_JHINZU(self, value):      def Set_JHINZU(self, value):
739          self.JHINZU = value          self.JHINZU = value
740            
741      def Set_JRE4(self, value):      def Set_JRE4(self, value):
742          self.JRE4 = value          self.JRE4 = value
743            
744      def Set_JVBEZ(self, value):      def Set_JVBEZ(self, value):
745          self.JVBEZ = value          self.JVBEZ = value
746            
747      def Set_KRV(self, value):      def Set_KRV(self, value):
748          if value not in (0,1):          assert value in (0,1), "must be 0 or 1"
             raise ValueError  
749          self.KRV = value          self.KRV = value
750            
751      def Set_LZZ(self, value):      def Set_LZZ(self, value):
752          assert value in (1,2,3,4), "must be in range 1-4 (JAHR, MONAT, WOCHE, TAG)"          assert value in (1,2,3,4), \
753                   "must be in range 1-4 (JAHR, MONAT, WOCHE, TAG)"
754          self.LZZ = value          self.LZZ = value
755            
756      def Set_R(self, value):      def Set_R(self, value):
757            assert value >= 0.0 and value <= 100.0, \
758                   "must be in range 0.0-100.0 (Percent)"
759          self.R = value          self.R = value
760            
761        def Set_RE4(self, value):
762            assert value >= 0, "must not be negative"
763            self.RE4 = value
764    
765      def Set_SONSTB(self, value):      def Set_SONSTB(self, value):
766          self.SONSTB = value          self.SONSTB = value
767            
768        def Set_STERBE(self, value):
769            self.STERBE = value
770    
771      def Set_STKL(self, value):      def Set_STKL(self, value):
772          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), \
773                   "must be in range 1-6 (I II III IV V VI)"
774          self.STKL = value          self.STKL = value
775            
776      def Set_VBEZ(self, value):      def Set_VBEZ(self, value):
777          self.VBEZ = value          self.VBEZ = value
778    
# Line 562  class LST: Line 785  class LST:
785      def Set_VBS(self, value):      def Set_VBS(self, value):
786          self.VBS = value          self.VBS = value
787    
788        def Set_VJAHR(self, value):
789            self.VJAHR = value
790    
791        def Set_VKAPA(self, value):
792            self.VKAPA = value
793    
794      def Set_VMT(self, value):      def Set_VMT(self, value):
795          self.VMT = value          self.VMT = value
796    
# Line 569  class LST: Line 798  class LST:
798          self.WFUNDF = value          self.WFUNDF = value
799    
800      def Set_ZKF(self, value):      def Set_ZKF(self, value):
801            assert float(value) == float("%.1f" % value) and \
802                   value >= 0, \
803                   "must be positive, and must not have more than one decimal digit"
804          self.ZKF = value          self.ZKF = value
805    
806      def Set_ZMVB(self, value):      def Set_ZMVB(self, value):
# Line 581  class LST: Line 813  class LST:
813  # Berechnungen, es fehlen insbesondere die Berechnungen zu Mehrj�hrigen  # Berechnungen, es fehlen insbesondere die Berechnungen zu Mehrj�hrigen
814  # Bez�gen und Sonstigen Leistungen.  # Bez�gen und Sonstigen Leistungen.
815    
816  class LStRechner2005(LST):  class LStRechner2006(LST):
817      def __init__(self):      def __init__(self):
818          LST.__init__(self)          LST.__init__(self)
819        
820        def SetGeb(self, geb):
821            """Setzt das Geburtsjahr"""
822            self.Set_AJAHR(geb + 65)
823            if self.AJAHR <= 2006:
824                self.Set_ALTER1(1)
825            else:
826                self.Set_ALTER1(0)
827    
828      def SetLohn(self, lohn):      def SetLohn(self, lohn):
829          """Setzt Lohn in Euro.Cent"""          """Setzt Lohn in Euro.Cent"""
830          self.Set_RE4(lohn * 100.0)          self.Set_RE4(round (lohn * 100.0))
831    
832        def GetLohn(self):
833            """Liefert Lohn in Euro.Cent"""
834            return self.RE4 / 100.0
835    
836      def SetZeitraum(self, lzz):      def SetZeitraum(self, lzz):
837          """Setzt Berechnungszeitraum (JAHR, MONAT, WOCHE, TAG)"""          """Setzt Berechnungszeitraum (JAHR, MONAT, WOCHE, TAG)"""
838          self.Set_LZZ(lzz)          self.Set_LZZ(lzz)
839    
840        def GetZeitraum(self):
841            """Liefert Berechnungszeitraum (JAHR, MONAT, WOCHE, TAG)"""
842            return self.LZZ
843    
844      def SetSteuerklasse(self, stkl):      def SetSteuerklasse(self, stkl):
845          """Setzt Steuerklasse (I, II, III, IV, V, VI)"""          """Setzt Steuerklasse (I, II, III, IV, V, VI)"""
846          self.Set_STKL(stkl)          self.Set_STKL(stkl)
847    
848      def SetKirchensteuer(self, prozent):      def GetSteuerklasse(self):
849          """Setzt Kirchensteuer in Prozent"""          """Liefert Steuerklasse (I, II, III, IV, V, VI)"""
850            return self.STKL
851    
852        def SetKirchensteuerProzent(self, prozent):
853            """Setzt Kirchensteuer in Prozent,
854            0 wenn keine Kirchensteuer zu zahlen ist."""
855          self.Set_R(prozent)          self.Set_R(prozent)
856    
857        def GetKirchensteuerProzent(self):
858            """Liefert Kirchensteuer in Prozent
859            oder 0 wenn keine Kirchensteuer zu zahlen ist."""
860            return self.R
861    
862        def SetKinderfreibetrag(self, kfb):
863            """Setzt Kinderfreibetrag lt. Lohnsteuerkarte"""
864            self.Set_ZKF(kfb)
865    
866        def GetKinderfreibetrag(self):
867            """Liefert Kinderfreibetrag lt. Lohnsteuerkarte"""
868            return self.ZFK
869    
870      def GetLohnsteuer(self):      def GetLohnsteuer(self):
871          """Liefert Lohnsteuer in Euro.Cent"""          """Liefert Lohnsteuer in Euro.Cent"""
872          return round(self.LSTLZZ / 100, 2)          return round(self.LSTLZZ / 100, 2)
873    
874      def GetSoli(self):      def GetSoli(self):
875          """Liefert Solidarit�tszuschlag in Euro.Cent"""          """Liefert Solidarit�tszuschlag in Euro.Cent"""
876          return round(self.SOLZLZZ / 100, 2)          return FixedPointFloor(self.SOLZLZZ / 100, 2)
877    
878      def GetKirchensteuer(self):      def GetKirchensteuer(self):
879          """Liefert Kirchensteuer in Euro.Cent"""          """Liefert Kirchensteuer in Euro.Cent"""

Legend:
Removed from v.4  
changed lines
  Added in v.53

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26