taxger 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +4 -0
  5. data/CODE_OF_CONDUCT.md +13 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE +8 -0
  8. data/README.md +89 -0
  9. data/Rakefile +22 -0
  10. data/bin/console +14 -0
  11. data/bin/setup +7 -0
  12. data/lib/taxger/einkommensteuer.rb +104 -0
  13. data/lib/taxger/lohnsteuer/bigdecimal.rb +70 -0
  14. data/lib/taxger/lohnsteuer/lohnsteuer2006.rb +891 -0
  15. data/lib/taxger/lohnsteuer/lohnsteuer2007.rb +917 -0
  16. data/lib/taxger/lohnsteuer/lohnsteuer2008.rb +983 -0
  17. data/lib/taxger/lohnsteuer/lohnsteuer2009.rb +975 -0
  18. data/lib/taxger/lohnsteuer/lohnsteuer2010.rb +1026 -0
  19. data/lib/taxger/lohnsteuer/lohnsteuer2011.rb +1070 -0
  20. data/lib/taxger/lohnsteuer/lohnsteuer2011dezember.rb +1082 -0
  21. data/lib/taxger/lohnsteuer/lohnsteuer2012.rb +1118 -0
  22. data/lib/taxger/lohnsteuer/lohnsteuer2013.rb +1120 -0
  23. data/lib/taxger/lohnsteuer/lohnsteuer2014.rb +1123 -0
  24. data/lib/taxger/lohnsteuer/lohnsteuer2015.rb +1144 -0
  25. data/lib/taxger/lohnsteuer/lohnsteuer2015dezember.rb +1339 -0
  26. data/lib/taxger/lohnsteuer/lohnsteuer2016.rb +1144 -0
  27. data/lib/taxger/lohnsteuer.rb +28 -0
  28. data/lib/taxger/version.rb +3 -0
  29. data/lib/taxger.rb +9 -0
  30. data/src/README.md +141 -0
  31. data/src/code_tree.rb +122 -0
  32. data/src/converter.rb +61 -0
  33. data/src/generated/.keep +0 -0
  34. data/src/node/class_node.rb +30 -0
  35. data/src/node/comment_node.rb +19 -0
  36. data/src/node/conditional_node.rb +32 -0
  37. data/src/node/expr_node.rb +13 -0
  38. data/src/node/initializer_node.rb +37 -0
  39. data/src/node/method_call_node.rb +12 -0
  40. data/src/node/method_node.rb +21 -0
  41. data/src/node/node.rb +47 -0
  42. data/src/node/pseudo_code_parser.rb +88 -0
  43. data/src/node/source_node.rb +43 -0
  44. data/src/node/var_block_node.rb +39 -0
  45. data/taxger.gemspec +34 -0
  46. metadata +146 -0
@@ -0,0 +1,917 @@
1
+ module Taxger
2
+ module Lohnsteuer
3
+ class Lohnsteuer2007
4
+ # CONSTANTS
5
+
6
+ # Tabelle fuer die Vomhundertsaetze des Versorgungsfreibetrags
7
+ TAB1 = [BigDecimal.value_of(0.0), BigDecimal.value_of(0.4), BigDecimal.value_of(0.384), BigDecimal.value_of(0.368),
8
+ BigDecimal.value_of(0.352), BigDecimal.value_of(0.336), BigDecimal.value_of(0.32), BigDecimal.value_of(0.304),
9
+ BigDecimal.value_of(0.288), BigDecimal.value_of(0.272), BigDecimal.value_of(0.256), BigDecimal.value_of(0.24),
10
+ BigDecimal.value_of(0.224), BigDecimal.value_of(0.208), BigDecimal.value_of(0.192), BigDecimal.value_of(0.176),
11
+ BigDecimal.value_of(0.16), BigDecimal.value_of(0.152), BigDecimal.value_of(0.144), BigDecimal.value_of(0.136),
12
+ BigDecimal.value_of(0.128), BigDecimal.value_of(0.12), BigDecimal.value_of(0.112), BigDecimal.value_of(0.104),
13
+ BigDecimal.value_of(0.096), BigDecimal.value_of(0.088), BigDecimal.value_of(0.08), BigDecimal.value_of(0.072),
14
+ BigDecimal.value_of(0.064), BigDecimal.value_of(0.056), BigDecimal.value_of(0.048), BigDecimal.value_of(0.04),
15
+ BigDecimal.value_of(0.032), BigDecimal.value_of(0.024), BigDecimal.value_of(0.016), BigDecimal.value_of(0.008),
16
+ BigDecimal.value_of(0.0)]
17
+
18
+ # Tabelle fuer die Hoechstbetrage des Versorgungsfreibetrags
19
+ TAB2 = [BigDecimal.value_of(0), BigDecimal.value_of(3000), BigDecimal.value_of(2880), BigDecimal.value_of(2760),
20
+ BigDecimal.value_of(2640), BigDecimal.value_of(2520), BigDecimal.value_of(2400), BigDecimal.value_of(2280),
21
+ BigDecimal.value_of(2160), BigDecimal.value_of(2040), BigDecimal.value_of(1920), BigDecimal.value_of(1800),
22
+ BigDecimal.value_of(1680), BigDecimal.value_of(1560), BigDecimal.value_of(1440), BigDecimal.value_of(1320),
23
+ BigDecimal.value_of(1200), BigDecimal.value_of(1140), BigDecimal.value_of(1080), BigDecimal.value_of(1020),
24
+ BigDecimal.value_of(960), BigDecimal.value_of(900), BigDecimal.value_of(840), BigDecimal.value_of(780),
25
+ BigDecimal.value_of(720), BigDecimal.value_of(660), BigDecimal.value_of(600), BigDecimal.value_of(540),
26
+ BigDecimal.value_of(480), BigDecimal.value_of(420), BigDecimal.value_of(360), BigDecimal.value_of(300),
27
+ BigDecimal.value_of(240), BigDecimal.value_of(180), BigDecimal.value_of(120), BigDecimal.value_of(60),
28
+ BigDecimal.value_of(0)]
29
+
30
+ # Tabelle fuer die Zuschlaege zum Versorgungsfreibetrag
31
+ TAB3 = [BigDecimal.value_of(0), BigDecimal.value_of(900), BigDecimal.value_of(864), BigDecimal.value_of(828),
32
+ BigDecimal.value_of(792), BigDecimal.value_of(756), BigDecimal.value_of(720), BigDecimal.value_of(684),
33
+ BigDecimal.value_of(648), BigDecimal.value_of(612), BigDecimal.value_of(576), BigDecimal.value_of(540),
34
+ BigDecimal.value_of(504), BigDecimal.value_of(468), BigDecimal.value_of(432), BigDecimal.value_of(396),
35
+ BigDecimal.value_of(360), BigDecimal.value_of(342), BigDecimal.value_of(324), BigDecimal.value_of(306),
36
+ BigDecimal.value_of(288), BigDecimal.value_of(270), BigDecimal.value_of(252), BigDecimal.value_of(234),
37
+ BigDecimal.value_of(216), BigDecimal.value_of(198), BigDecimal.value_of(180), BigDecimal.value_of(162),
38
+ BigDecimal.value_of(144), BigDecimal.value_of(126), BigDecimal.value_of(108), BigDecimal.value_of(90),
39
+ BigDecimal.value_of(72), BigDecimal.value_of(54), BigDecimal.value_of(36), BigDecimal.value_of(18),
40
+ BigDecimal.value_of(0)]
41
+
42
+ # Tabelle fuer die Vomhundertsaetze des Altersentlastungsbetrags
43
+ TAB4 = [BigDecimal.value_of(0.0), BigDecimal.value_of(0.4), BigDecimal.value_of(0.384), BigDecimal.value_of(0.368),
44
+ BigDecimal.value_of(0.352), BigDecimal.value_of(0.336), BigDecimal.value_of(0.32), BigDecimal.value_of(0.304),
45
+ BigDecimal.value_of(0.288), BigDecimal.value_of(0.272), BigDecimal.value_of(0.256), BigDecimal.value_of(0.24),
46
+ BigDecimal.value_of(0.224), BigDecimal.value_of(0.208), BigDecimal.value_of(0.192), BigDecimal.value_of(0.176),
47
+ BigDecimal.value_of(0.16), BigDecimal.value_of(0.152), BigDecimal.value_of(0.144), BigDecimal.value_of(0.136),
48
+ BigDecimal.value_of(0.128), BigDecimal.value_of(0.12), BigDecimal.value_of(0.112), BigDecimal.value_of(0.104),
49
+ BigDecimal.value_of(0.096), BigDecimal.value_of(0.088), BigDecimal.value_of(0.08), BigDecimal.value_of(0.072),
50
+ BigDecimal.value_of(0.064), BigDecimal.value_of(0.056), BigDecimal.value_of(0.048), BigDecimal.value_of(0.04),
51
+ BigDecimal.value_of(0.032), BigDecimal.value_of(0.024), BigDecimal.value_of(0.016), BigDecimal.value_of(0.008),
52
+ BigDecimal.value_of(0.0)]
53
+
54
+ # Tabelle fuer die Hoechstbetraege des Altersentlastungsbetrags
55
+ TAB5 = [BigDecimal.value_of(0), BigDecimal.value_of(1900), BigDecimal.value_of(1824), BigDecimal.value_of(1748),
56
+ BigDecimal.value_of(1672), BigDecimal.value_of(1596), BigDecimal.value_of(1520), BigDecimal.value_of(1444),
57
+ BigDecimal.value_of(1368), BigDecimal.value_of(1292), BigDecimal.value_of(1216), BigDecimal.value_of(1140),
58
+ BigDecimal.value_of(1064), BigDecimal.value_of(988), BigDecimal.value_of(912), BigDecimal.value_of(836),
59
+ BigDecimal.value_of(760), BigDecimal.value_of(722), BigDecimal.value_of(684), BigDecimal.value_of(646),
60
+ BigDecimal.value_of(608), BigDecimal.value_of(570), BigDecimal.value_of(532), BigDecimal.value_of(494),
61
+ BigDecimal.value_of(456), BigDecimal.value_of(418), BigDecimal.value_of(380), BigDecimal.value_of(342),
62
+ BigDecimal.value_of(304), BigDecimal.value_of(266), BigDecimal.value_of(228), BigDecimal.value_of(190),
63
+ BigDecimal.value_of(152), BigDecimal.value_of(114), BigDecimal.value_of(76), BigDecimal.value_of(38),
64
+ BigDecimal.value_of(0)]
65
+
66
+ # Zahlenkonstanten fuer im Plan oft genutzte BigDecimal Werte
67
+ ZAHL1 = BigDecimal.ONE
68
+ ZAHL2 = BigDecimal.new(2)
69
+ ZAHL3 = BigDecimal.new(3)
70
+ ZAHL4 = BigDecimal.new(4)
71
+ ZAHL5 = BigDecimal.new(5)
72
+ ZAHL6 = BigDecimal.new(6)
73
+ ZAHL7 = BigDecimal.new(7)
74
+ ZAHL8 = BigDecimal.new(8)
75
+ ZAHL9 = BigDecimal.new(9)
76
+ ZAHL10 = BigDecimal.TEN
77
+ ZAHL11 = BigDecimal.new(11)
78
+ ZAHL12 = BigDecimal.new(12)
79
+ ZAHL100 = BigDecimal.new(100)
80
+ ZAHL360 = BigDecimal.new(360)
81
+
82
+ attr_accessor :bk
83
+ attr_accessor :bks
84
+ attr_accessor :bkv
85
+ attr_accessor :lstlzz
86
+ attr_accessor :solzlzz
87
+ attr_accessor :solzs
88
+ attr_accessor :solzv
89
+ attr_accessor :sts
90
+ attr_accessor :stv
91
+
92
+ INPUT_VARS = [:ajahr, :alter1, :hinzur, :jfreib, :jhinzu, :jre4, :jvbez, :krv, :lzz, :r, :re4, :sonstb, :sterbe, :stkl, :vbez, :vbezm, :vbezs, :vbs, :vjahr, :vkapa, :vmt, :wfundf, :zkf, :zmvb]
93
+ OUTPUT_VARS = [:bk, :bks, :bkv, :lstlzz, :solzlzz, :solzs, :solzv, :sts, :stv]
94
+ def initialize(params)
95
+ raise "Unknown parameters: #{params.keys - INPUT_VARS}" if params.keys - INPUT_VARS != []
96
+ # INPUTS
97
+
98
+ # Auf die Vollendung des 64. Lebensjahres folgende
99
+ # Kalenderjahr (erforderlich, wenn ALTER1=1)
100
+ @ajahr = 0 # int
101
+
102
+ # 1, wenn das 64. Lebensjahr zu Beginn des Kalenderjahres vollendet wurde, in dem
103
+ # der Lohnzahlungszeitraum endet (§ 24 a EStG), sonst = 0
104
+ @alter1 = 0 # int
105
+
106
+ # In der Lohnsteuerkarte des Arbeitnehmers eingetragener Hinzurechnungsbetrag
107
+ # fuer den Lohnzahlungszeitraum in Cents
108
+ @hinzur = BigDecimal.new(0) # BigDecimal
109
+
110
+ # Jahresfreibetrag nach Maßgabe der Eintragungen auf der
111
+ # Lohnsteuerkarte in Cents (ggf. 0)
112
+ @jfreib = BigDecimal.new(0) # BigDecimal
113
+
114
+ # Jahreshinzurechnungsbetrag in Cents (ggf. 0)
115
+ @jhinzu = BigDecimal.new(0) # BigDecimal
116
+
117
+ # Voraussichtlicher Jahresarbeitslohn ohne sonstige Bezuege und
118
+ # ohne Verguetung fuer mehrjaehrige Taetigkeit in Cents (ggf. 0)
119
+ # Anmerkung: Die Eingabe dieses Feldes ist erforderlich bei Eingabe
120
+ # „sonstiger Bezuege“ (Feld SONSTB) oder bei Eingabe der „Verguetung
121
+ # fuer mehrjaehrige Taetigkeit“ (Feld VMT).
122
+ @jre4 = BigDecimal.new(0) # BigDecimal
123
+
124
+ # In JRE4 enthaltene Versorgungsbezuege in Cents (ggf. 0)
125
+ @jvbez = BigDecimal.new(0) # BigDecimal
126
+
127
+ # 1 = der Arbeitnehmer ist im Lohnzahlungszeitraum in der gesetzlichen
128
+ # Rentenversicherung versicherungsfrei und gehoert zu den in
129
+ # § 10 c Abs. 3 EStG genannten Personen.
130
+ # Bei anderen Arbeitnehmern ist „0“ einzusetzen.
131
+ # Fuer die Zuordnung sind allein die dem Arbeitgeber ohnehin bekannten
132
+ # Tatsachen maßgebend; zusaetzliche Ermittlungen braucht
133
+ # der Arbeitgeber nicht anzustellen.
134
+ @krv = 0 # int
135
+
136
+ # Lohnzahlungszeitraum:
137
+ # 1 = Jahr
138
+ # 2 = Monat
139
+ # 3 = Woche
140
+ # 4 = Tag
141
+ @lzz = 0 # int
142
+
143
+ # Religionsgemeinschaft des Arbeitnehmers lt. Lohnsteuerkarte (bei
144
+ # keiner Religionszugehoerigkeit = 0)
145
+ @r = 0 # int
146
+
147
+ # Steuerpflichtiger Arbeitslohn vor Beruecksichtigung der Freibetraege
148
+ # fuer Versorgungsbezuege, des Altersentlastungsbetrags und des auf
149
+ # der Lohnsteuerkarte fuer den Lohnzahlungszeitraum eingetragenen
150
+ # Freibetrags in Cents.
151
+ @re4 = BigDecimal.new(0) # BigDecimal
152
+
153
+ # Sonstige Bezuege (ohne Verguetung aus mehrjaehriger Taetigkeit) einschliesslich
154
+ # Sterbegeld bei Versorgungsbezuegen sowie Kapitalauszahlungen/Abfindungen,
155
+ # soweit es sich nicht um Bezuege fuer mehrere Jahre handelt in Cents (ggf. 0)
156
+ @sonstb = BigDecimal.new(0) # BigDecimal
157
+
158
+ # Sterbegeld bei Versorgungsbezuegen sowie Kapitalauszahlungen/Abfindungen,
159
+ # soweit es sich nicht um Bezuege fuer mehrere Jahre handelt
160
+ # (in SONSTB enthalten) in Cents
161
+ @sterbe = BigDecimal.new(0) # BigDecimal
162
+
163
+ # Steuerklasse:
164
+ # 1 = I
165
+ # 2 = II
166
+ # 3 = III
167
+ # 4 = IV
168
+ # 5 = V
169
+ # 6 = VI
170
+ @stkl = 0 # int
171
+
172
+ # In RE4 enthaltene Versorgungsbezuege in Cents (ggf. 0)
173
+ @vbez = BigDecimal.new(0) # BigDecimal
174
+
175
+ # Vorsorgungsbezug im Januar 2005 bzw. fuer den ersten vollen Monat
176
+ # in Cents
177
+ @vbezm = BigDecimal.new(0) # BigDecimal
178
+
179
+ # Voraussichtliche Sonderzahlungen im Kalenderjahr des Versorgungsbeginns
180
+ # bei Versorgungsempfaengern ohne Sterbegeld, Kapitalauszahlungen/Abfindungen
181
+ # bei Versorgungsbezuegen in Cents
182
+ @vbezs = BigDecimal.new(0) # BigDecimal
183
+
184
+ # In SONSTB enthaltene Versorgungsbezuege einschliesslich Sterbegeld
185
+ # in Cents (ggf. 0)
186
+ @vbs = BigDecimal.new(0) # BigDecimal
187
+
188
+ # Jahr, in dem der Versorgungsbezug erstmalig gewaehrt wurde; werden
189
+ # mehrere Versorgungsbezuege gezahlt, so gilt der aelteste erstmalige Bezug
190
+ @vjahr = 0 # int
191
+
192
+ # Kapitalauszahlungen/Abfindungen bei Versorgungsbezuegen fuer mehrere Jahre in Cents (ggf. 0)
193
+ @vkapa = BigDecimal.new(0) # BigDecimal
194
+
195
+ # Verguetung fuer mehrjaehrige Taetigkeit ohne Kapitalauszahlungen/Abfindungen bei
196
+ # Versorgungsbezuegen in Cents (ggf. 0)
197
+ @vmt = BigDecimal.new(0) # BigDecimal
198
+
199
+ # In der Lohnsteuerkarte des Arbeitnehmers eingetragener Freibetrag
200
+ # fuer den Lohnzahlungszeitraum in Cents
201
+ @wfundf = BigDecimal.new(0) # BigDecimal
202
+
203
+ # Zahl der Freibetraege fuer Kinder (eine Dezimalstelle, nur bei Steuerklassen
204
+ # I, II, III und IV)
205
+ @zkf = BigDecimal.new(0) # BigDecimal
206
+
207
+ # Zahl der Monate, fuer die Versorgungsbezuege gezahlt werden (nur
208
+ # erforderlich bei Jahresberechnung (LZZ = 1)
209
+ @zmvb = 0 # int
210
+
211
+ # OUTPUTS
212
+
213
+ # Bemessungsgrundlage fuer die Kirchenlohnsteuer in Cents
214
+ @bk = BigDecimal.new(0) # BigDecimal
215
+
216
+ # Bemessungsgrundlage der sonstigen Einkuenfte (ohne Verguetung
217
+ # fuer mehrjaehrige Taetigkeit) fuer die Kirchenlohnsteuer in Cents
218
+ @bks = BigDecimal.new(0) # BigDecimal
219
+ @bkv = BigDecimal.new(0) # BigDecimal
220
+
221
+ # Fuer den Lohnzahlungszeitraum einzubehaltende Lohnsteuer in Cents
222
+ @lstlzz = BigDecimal.new(0) # BigDecimal
223
+
224
+ # Fuer den Lohnzahlungszeitraum einzubehaltender Solidaritaetszuschlag
225
+ # in Cents
226
+ @solzlzz = BigDecimal.new(0) # BigDecimal
227
+
228
+ # Solidaritaetszuschlag fuer sonstige Bezuege (ohne Verguetung fuer mehrjaehrige
229
+ # Taetigkeit) in Cents
230
+ @solzs = BigDecimal.new(0) # BigDecimal
231
+
232
+ # Solidaritaetszuschlag fuer die Verguetung fuer mehrjaehrige Taetigkeit in
233
+ # Cents
234
+ @solzv = BigDecimal.new(0) # BigDecimal
235
+
236
+ # Lohnsteuer fuer sonstige Einkuenfte (ohne Verguetung fuer mehrjaehrige
237
+ # Taetigkeit) in Cents
238
+ @sts = BigDecimal.new(0) # BigDecimal
239
+
240
+ # Lohnsteuer fuer Verguetung fuer mehrjaehrige Taetigkeit in Cents
241
+ @stv = BigDecimal.new(0) # BigDecimal
242
+
243
+ # INTERNALS
244
+
245
+ # Altersentlastungsbetrag nach Alterseinkuenftegesetz in Cents
246
+ @alte = BigDecimal.new(0)
247
+
248
+ # Arbeitnehmer-Pauschbetrag in EURO
249
+ @anp = BigDecimal.new(0)
250
+
251
+ # Auf den Lohnzahlungszeitraum entfallender Anteil von Jahreswerten
252
+ # auf ganze Cents abgerundet
253
+ @anteil1 = BigDecimal.new(0)
254
+
255
+ # Auf den Lohnzahlungszeitraum entfallender Anteil von Jahreswerten
256
+ # auf ganze Cents aufgerundet
257
+ @anteil2 = BigDecimal.new(0)
258
+
259
+ # Bemessungsgrundlage fuer Altersentlastungsbetrag in Cents
260
+ @bmg = BigDecimal.new(0)
261
+
262
+ # Differenz zwischen ST1 und ST2 in EURO
263
+ @diff = BigDecimal.new(0)
264
+
265
+ # Entlastungsbetrag fuer Alleinerziehende in EURO
266
+ @efa = BigDecimal.new(0)
267
+
268
+ # Versorgungsfreibetrag in Cents
269
+ @fvb = BigDecimal.new(0)
270
+
271
+ # Zuschlag zum Versorgungsfreibetrag in EURO
272
+ @fvbz = BigDecimal.new(0)
273
+
274
+ # Massgeblich maximaler Versorgungsfreibetrag in Cents
275
+ @hfvb = BigDecimal.new(0)
276
+
277
+ # Nummer der Tabellenwerte fuer Versorgungsparameter
278
+ @j = 0
279
+
280
+ # Jahressteuer nach § 51a EStG, aus der Solidaritaetszuschlag und
281
+ # Bemessungsgrundlage fuer die Kirchenlohnsteuer ermittelt werden in EURO
282
+ @jbmg = BigDecimal.new(0)
283
+
284
+ # Jahreswert, dessen Anteil fuer einen Lohnzahlungszeitraum in
285
+ # UPANTEIL errechnet werden soll in Cents
286
+ @jw = BigDecimal.new(0)
287
+
288
+ # Nummer der Tabellenwerte fuer Parameter bei Altersentlastungsbetrag
289
+ @k = 0
290
+
291
+ # Kennzeichen bei Verguetung fuer mehrjaehrige Taetigkeit
292
+ # 0 = beim Vorwegabzug ist ZRE4VP zu beruecksichtigen
293
+ # 1 = beim Vorwegabzug ist ZRE4VP1 zu beruecksichtigen
294
+ @kennz = 0
295
+
296
+ # Summe der Freibetraege fuer Kinder in EURO
297
+ @kfb = BigDecimal.new(0)
298
+
299
+ # Kennzahl fuer die Einkommensteuer-Tabellenart:
300
+ # 1 = Grundtabelle
301
+ # 2 = Splittingtabelle
302
+ @kztab = 0
303
+
304
+ # Jahreslohnsteuer in EURO
305
+ @lstjahr = BigDecimal.new(0)
306
+
307
+ # Zwischenfelder der Jahreslohnsteuer in Cents
308
+ @lst1 = BigDecimal.new(0)
309
+ @lst2 = BigDecimal.new(0)
310
+ @lst3 = BigDecimal.new(0)
311
+
312
+ # Mindeststeuer fuer die Steuerklassen V und VI in EURO
313
+ @mist = BigDecimal.new(0)
314
+
315
+ # Arbeitslohn des Lohnzahlungszeitraums nach Abzug der Freibetraege
316
+ # fuer Versorgungsbezuege, des Altersentlastungsbetrags und des
317
+ # in der Lohnsteuerkarte eingetragenen Freibetrags und Hinzurechnung
318
+ # eines Hinzurechnungsbetrags in Cents. Entspricht dem Arbeitslohn,
319
+ # fuer den die Lohnsteuer im personellen Verfahren aus der
320
+ # zum Lohnzahlungszeitraum gehoerenden Tabelle abgelesen wuerde
321
+ @re4lzz = BigDecimal.new(0)
322
+
323
+ # Arbeitslohn des Lohnzahlungszeitraums nach Abzug der Freibetraege
324
+ # fuer Versorgungsbezuege und des Altersentlastungsbetrags in
325
+ # Cents zur Berechnung der Vorsorgepauschale
326
+ @re4lzzv = BigDecimal.new(0)
327
+
328
+ # Rechenwert in Gleitkommadarstellung
329
+ @rw = BigDecimal.new(0)
330
+
331
+ # Sonderausgaben-Pauschbetrag in EURO
332
+ @sap = BigDecimal.new(0)
333
+
334
+ # Freigrenze fuer den Solidaritaetszuschlag in EURO
335
+ @solzfrei = BigDecimal.new(0)
336
+
337
+ # Solidaritaetszuschlag auf die Jahreslohnsteuer in EURO, C (2 Dezimalstellen)
338
+ @solzj = BigDecimal.new(0)
339
+
340
+ # Zwischenwert fuer den Solidaritaetszuschlag auf die Jahreslohnsteuer
341
+ # in EURO, C (2 Dezimalstellen)
342
+ @solzmin = BigDecimal.new(0)
343
+
344
+ # Tarifliche Einkommensteuer in EURO
345
+ @st = BigDecimal.new(0)
346
+
347
+ # Tarifliche Einkommensteuer auf das 1,25-fache ZX in EURO
348
+ @st1 = BigDecimal.new(0)
349
+
350
+ # Tarifliche Einkommensteuer auf das 0,75-fache ZX in EURO
351
+ @st2 = BigDecimal.new(0)
352
+
353
+ # Bemessungsgrundlage fuer den Versorgungsfreibetrag in Cents
354
+ @vbezb = BigDecimal.new(0)
355
+
356
+ # Hoechstbetrag der Vorsorgepauschale nach Alterseinkuenftegesetz in EURO, C
357
+ @vhb = BigDecimal.new(0)
358
+
359
+ # Vorsorgepauschale in EURO, C (2 Dezimalstellen)
360
+ @vsp = BigDecimal.new(0)
361
+
362
+ # Vorsorgepauschale nach Alterseinkuenftegesetz in EURO, C
363
+ @vspn = BigDecimal.new(0)
364
+
365
+ # Zwischenwert 1 bei der Berechnung der Vorsorgepauschale nach
366
+ # dem Alterseinkuenftegesetz in EURO, C (2 Dezimalstellen)
367
+ @vsp1 = BigDecimal.new(0)
368
+
369
+ # Zwischenwert 2 bei der Berechnung der Vorsorgepauschale nach
370
+ # dem Alterseinkuenftegesetz in EURO, C (2 Dezimalstellen)
371
+ @vsp2 = BigDecimal.new(0)
372
+
373
+ # Hoechstbetrag der Vorsorgepauschale nach § 10c Abs. 3 EStG in EURO
374
+ @vspkurz = BigDecimal.new(0)
375
+
376
+ # Hoechstbetrag der Vorsorgepauschale nach § 10c Abs. 2 Nr. 2 EStG in EURO
377
+ @vspmax1 = BigDecimal.new(0)
378
+
379
+ # Hoechstbetrag der Vorsorgepauschale nach § 10c Abs. 2 Nr. 3 EStG in EURO
380
+ @vspmax2 = BigDecimal.new(0)
381
+
382
+ # Vorsorgepauschale nach § 10c Abs. 2 Satz 2 EStG vor der Hoechstbetragsberechnung
383
+ # in EURO, C (2 Dezimalstellen)
384
+ @vspo = BigDecimal.new(0)
385
+
386
+ # Fuer den Abzug nach § 10c Abs. 2 Nrn. 2 und 3 EStG verbleibender
387
+ # Rest von VSPO in EURO, C (2 Dezimalstellen)
388
+ @vsprest = BigDecimal.new(0)
389
+
390
+ # Hoechstbetrag der Vorsorgepauschale nach § 10c Abs. 2 Nr. 1 EStG
391
+ # in EURO, C (2 Dezimalstellen)
392
+ @vspvor = BigDecimal.new(0)
393
+
394
+ # Zu versteuerndes Einkommen gem. § 32a Abs. 1 und 2 EStG
395
+ # (2 Dezimalstellen)
396
+ @x = BigDecimal.new(0)
397
+
398
+ # gem. § 32a Abs. 1 EStG (6 Dezimalstellen)
399
+ @y = BigDecimal.new(0)
400
+
401
+ # Auf einen Jahreslohn hochgerechnetes RE4LZZ in EURO, C (2 Dezimalstellen)
402
+ @zre4 = BigDecimal.new(0)
403
+
404
+ # Auf einen Jahreslohn hochgerechnetes RE4LZZV zur Berechnung
405
+ # der Vorsorgepauschale in EURO, C (2 Dezimalstellen)
406
+ @zre4vp = BigDecimal.new(0)
407
+
408
+ # Sicherungsfeld von ZRE4VP in EURO,C bei der Berechnung des Vorwegabzugs
409
+ # fuer die Verguetung fuer mehrjaehrige Taetigkeit
410
+ @zre4vp1 = BigDecimal.new(0)
411
+
412
+ # Feste Tabellenfreibetraege (ohne Vorsorgepauschale) in EURO
413
+ @ztabfb = BigDecimal.new(0)
414
+
415
+ # Auf einen Jahreslohn hochgerechnetes (VBEZ abzueglich FVB) in
416
+ # EURO, C (2 Dezimalstellen)
417
+ @zvbez = BigDecimal.new(0)
418
+
419
+ # Zu versteuerndes Einkommen in EURO
420
+ @zve = BigDecimal.new(0)
421
+
422
+ # Zwischenfelder zu X fuer die Berechnung der Steuer nach § 39b
423
+ # Abs. 2 Satz 8 EStG in EURO.
424
+ @zx = BigDecimal.new(0)
425
+ @zzx = BigDecimal.new(0)
426
+ @hoch = BigDecimal.new(0)
427
+ @vergl = BigDecimal.new(0)
428
+
429
+ params.each do |key, value|
430
+ instance_variable_set("@#{key}", value)
431
+ end
432
+
433
+ mre4lzz
434
+ @kennz = 0
435
+ @re4lzz = @re4.subtract(@fvb).subtract(@alte).subtract(@wfundf).add(@hinzur)
436
+ @re4lzzv = @re4.subtract(@fvb).subtract(@alte)
437
+ mre4
438
+ mztabfb
439
+ mlstjahr
440
+ @lstjahr = @st
441
+ @jw = @lstjahr.multiply(ZAHL100)
442
+ upanteil
443
+ @lstlzz = @anteil1
444
+ if @zkf.compare_to(BigDecimal.ZERO) == 1
445
+ @ztabfb = @ztabfb.add(@kfb)
446
+ mlstjahr
447
+ @jbmg = @st
448
+ else
449
+ @jbmg = @lstjahr
450
+ end
451
+ msolz
452
+ msonst
453
+ mvmt
454
+ end
455
+
456
+ private
457
+
458
+ def mre4lzz
459
+ if @vbez.compare_to(BigDecimal.ZERO) == 0
460
+ @fvbz = BigDecimal.ZERO
461
+ @fvb = BigDecimal.ZERO
462
+ else
463
+ if @vjahr < 2006
464
+ @j = 1
465
+ else
466
+ if @vjahr < 2040
467
+ @j = @vjahr - 2004
468
+ else
469
+ @j = 36
470
+ end
471
+ end
472
+ if @lzz == 1
473
+ if ((@sterbe.add(@vkapa)).compare_to(BigDecimal.ZERO)) == 1
474
+ @vbezb = (@vbezm.multiply(BigDecimal.value_of(@zmvb))).add(@vbezs)
475
+ @hfvb = TAB2[@j].multiply(ZAHL100)
476
+ @fvbz = TAB3[@j]
477
+ else
478
+ @vbezb = (@vbezm.multiply(BigDecimal.value_of(@zmvb))).add(@vbezs)
479
+ @hfvb = TAB2[@j].divide(ZAHL12).multiply(BigDecimal.value_of(@zmvb)).multiply(ZAHL100)
480
+ @fvbz = TAB3[@j].divide(ZAHL12).multiply(BigDecimal.value_of(@zmvb)).set_scale(0, BigDecimal.ROUND_UP)
481
+ end
482
+ else
483
+ @vbezb = ((@vbezm.multiply(ZAHL12)).add(@vbezs)).set_scale(2, BigDecimal.ROUND_DOWN)
484
+ @hfvb = TAB2[@j].multiply(ZAHL100)
485
+ @fvbz = TAB3[@j]
486
+ end
487
+ @fvb = (@vbezb.multiply(TAB1[@j])).set_scale(2, BigDecimal.ROUND_UP)
488
+ if @fvb.compare_to(@hfvb) == 1
489
+ @fvb = @hfvb
490
+ end
491
+ @jw = @fvb
492
+ upanteil
493
+ @fvb = @anteil2
494
+ end
495
+ if @alter1 == 0
496
+ @alte = BigDecimal.ZERO
497
+ else
498
+ if @ajahr < 2006
499
+ @k = 1
500
+ else
501
+ if @ajahr < 2040
502
+ @k = @ajahr - 2004
503
+ else
504
+ @k = 36
505
+ end
506
+ end
507
+ @bmg = @re4.subtract(@vbez)
508
+ @alte = (@bmg.multiply(TAB4[@k])).set_scale(2, BigDecimal.ROUND_UP)
509
+ @jw = TAB5[@k].multiply(ZAHL100)
510
+ upanteil
511
+ if @alte.compare_to(@anteil2) == 1
512
+ @alte = @anteil2
513
+ end
514
+ end
515
+ end
516
+
517
+ def mre4
518
+ if @lzz == 1
519
+ @zre4 = @re4lzz.divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
520
+ @zre4vp = @re4lzzv.divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
521
+ @zvbez = (@vbez.subtract(@fvb)).divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
522
+ else
523
+ if @lzz == 2
524
+ @zre4 = ((@re4lzz.add(BigDecimal.value_of(0.67))).multiply(BigDecimal.value_of(0.12))).set_scale(2, BigDecimal.ROUND_DOWN)
525
+ @zre4vp = ((@re4lzzv.add(BigDecimal.value_of(0.67))).multiply(BigDecimal.value_of(0.12))).set_scale(2, BigDecimal.ROUND_DOWN)
526
+ @zvbez = ((@vbez.subtract(@fvb).add(BigDecimal.value_of(0.67))).multiply(BigDecimal.value_of(0.12))).set_scale(2, BigDecimal.ROUND_DOWN)
527
+ else
528
+ if @lzz == 3
529
+ @zre4 = ((@re4lzz.add(BigDecimal.value_of(0.89))).multiply(BigDecimal.value_of(3.6))).divide(BigDecimal.value_of(7.0), 2, BigDecimal.ROUND_DOWN)
530
+ @zre4vp = ((@re4lzzv.add(BigDecimal.value_of(0.89))).multiply(BigDecimal.value_of(3.6))).divide(BigDecimal.value_of(7.0), 2, BigDecimal.ROUND_DOWN)
531
+ @zvbez = ((@vbez.subtract(@fvb).add(BigDecimal.value_of(0.89))).multiply(BigDecimal.value_of(3.6))).divide(BigDecimal.value_of(7.0), 2, BigDecimal.ROUND_DOWN)
532
+ else
533
+ @zre4 = ((@re4lzz.add(BigDecimal.value_of(0.56))).multiply(BigDecimal.value_of(3.6))).set_scale(2, BigDecimal.ROUND_DOWN)
534
+ @zre4vp = ((@re4lzzv.add(BigDecimal.value_of(0.56))).multiply(BigDecimal.value_of(3.6))).set_scale(2, BigDecimal.ROUND_DOWN)
535
+ @zvbez = ((@vbez.subtract(@fvb).add(BigDecimal.value_of(0.56))).multiply(BigDecimal.value_of(3.6))).set_scale(2, BigDecimal.ROUND_DOWN)
536
+ end
537
+ end
538
+ end
539
+ if @re4lzz.compare_to(BigDecimal.ZERO) == -1
540
+ @zre4 = BigDecimal.ZERO
541
+ end
542
+ if @re4lzzv.compare_to(BigDecimal.ZERO) == -1
543
+ @zre4vp = BigDecimal.ZERO
544
+ end
545
+ if @vbez.compare_to(BigDecimal.ZERO) == 0
546
+ if @fvb.compare_to(BigDecimal.ZERO) == 0
547
+ @zvbez = BigDecimal.ZERO
548
+ end
549
+ else
550
+ if (@vbez.subtract(@fvb)).compare_to(BigDecimal.ZERO) == -1
551
+ @zvbez = BigDecimal.ZERO
552
+ end
553
+ end
554
+ end
555
+
556
+ def mztabfb
557
+ @anp = BigDecimal.ZERO
558
+ if @zvbez.compare_to(BigDecimal.ZERO) >= 0
559
+ if @zvbez.compare_to(@fvbz) == -1
560
+ @fvbz = @zvbez.set_scale(0, BigDecimal.ROUND_DOWN)
561
+ end
562
+ end
563
+ if @stkl < 6
564
+ if @zvbez.compare_to(BigDecimal.ZERO) == 1
565
+ if (@zvbez.subtract(@fvbz)).compare_to(BigDecimal.value_of(102)) == -1
566
+ @anp = (@zvbez.subtract(@fvbz)).set_scale(0, BigDecimal.ROUND_DOWN)
567
+ else
568
+ @anp = BigDecimal.value_of(102)
569
+ end
570
+ end
571
+ end
572
+ if @stkl < 6
573
+ if @zre4.compare_to(@zvbez) == 1
574
+ if (@zre4.subtract(@zvbez)).compare_to(BigDecimal.value_of(920)) == -1
575
+ @anp = (@anp.add(@zre4).subtract(@zvbez)).set_scale(0, BigDecimal.ROUND_DOWN)
576
+ else
577
+ @anp = @anp.add(BigDecimal.value_of(920))
578
+ end
579
+ end
580
+ end
581
+ @kztab = 1
582
+ if @stkl == 1
583
+ @sap = BigDecimal.value_of(36)
584
+ @kfb = (@zkf.multiply(BigDecimal.value_of(5808))).set_scale(0, BigDecimal.ROUND_DOWN)
585
+ else
586
+ if @stkl == 2
587
+ @efa = BigDecimal.value_of(1308)
588
+ @sap = BigDecimal.value_of(36)
589
+ @kfb = (@zkf.multiply(BigDecimal.value_of(5808))).set_scale(0, BigDecimal.ROUND_DOWN)
590
+ else
591
+ if @stkl == 3
592
+ @kztab = 2
593
+ @sap = BigDecimal.value_of(72)
594
+ @kfb = (@zkf.multiply(BigDecimal.value_of(5808))).set_scale(0, BigDecimal.ROUND_DOWN)
595
+ else
596
+ if @stkl == 4
597
+ @sap = BigDecimal.value_of(36)
598
+ @kfb = (@zkf.multiply(BigDecimal.value_of(2904))).set_scale(0, BigDecimal.ROUND_DOWN)
599
+ else
600
+ @kfb = BigDecimal.ZERO
601
+ end
602
+ end
603
+ end
604
+ end
605
+ @ztabfb = @efa.add(@anp).add(@sap).add(@fvbz)
606
+ end
607
+
608
+ def mlstjahr
609
+ if @stkl < 5
610
+ upevp
611
+ else
612
+ @vsp = BigDecimal.ZERO
613
+ end
614
+ @zve = (@zre4.subtract(@ztabfb).subtract(@vsp)).set_scale(0, BigDecimal.ROUND_DOWN)
615
+ if @zve.compare_to(ZAHL1) == -1
616
+ @zve = BigDecimal.ZERO
617
+ @x = BigDecimal.ZERO
618
+ else
619
+ @x = @zve.divide(BigDecimal.value_of(@kztab), 0, BigDecimal.ROUND_DOWN)
620
+ end
621
+ if @stkl < 5
622
+ uptab07
623
+ else
624
+ mst5_6
625
+ end
626
+ end
627
+
628
+ def upevp
629
+ if @krv == 1
630
+ @vsp1 = BigDecimal.ZERO
631
+ else
632
+ if @zre4vp.compare_to(BigDecimal.value_of(63000)) == 1
633
+ @zre4vp = BigDecimal.value_of(63000)
634
+ end
635
+ @vsp1 = (@zre4vp.multiply(BigDecimal.value_of(0.28))).set_scale(2, BigDecimal.ROUND_DOWN)
636
+ @vsp1 = (@vsp1.multiply(BigDecimal.value_of(0.0995))).set_scale(2, BigDecimal.ROUND_DOWN)
637
+ end
638
+ @vsp2 = @zre4vp.multiply(BigDecimal.value_of(0.11))
639
+ @vhb = BigDecimal.value_of(@kztab).multiply(BigDecimal.value_of(1500))
640
+ if @vsp2.compare_to(@vhb) == 1
641
+ @vsp2 = @vhb
642
+ end
643
+ @vspn = (@vsp1.add(@vsp2)).set_scale(0, BigDecimal.ROUND_UP)
644
+ mvsp
645
+ if @vspn.compare_to(@vsp) == 1
646
+ @vsp = @vspn.set_scale(2, BigDecimal.ROUND_DOWN)
647
+ end
648
+ end
649
+
650
+ def mvsp
651
+ if @kennz == 1
652
+ @vspo = @zre4vp1.multiply(BigDecimal.value_of(0.2))
653
+ else
654
+ @vspo = @zre4vp.multiply(BigDecimal.value_of(0.2))
655
+ end
656
+ @vspvor = BigDecimal.value_of(@kztab).multiply(BigDecimal.value_of(3068))
657
+ @vspmax1 = BigDecimal.value_of(@kztab).multiply(BigDecimal.value_of(1334))
658
+ @vspmax2 = BigDecimal.value_of(@kztab).multiply(BigDecimal.value_of(667))
659
+ @vspkurz = BigDecimal.value_of(@kztab).multiply(BigDecimal.value_of(1134))
660
+ if @krv == 1
661
+ if @vspo.compare_to(@vspkurz) == 1
662
+ @vsp = @vspkurz
663
+ else
664
+ @vsp = @vspo.set_scale(0, BigDecimal.ROUND_DOWN)
665
+ end
666
+ else
667
+ umvsp
668
+ end
669
+ end
670
+
671
+ def umvsp
672
+ if @kennz == 1
673
+ @vspvor = @vspvor.subtract(@zre4vp1.multiply(BigDecimal.value_of(0.16)))
674
+ else
675
+ @vspvor = @vspvor.subtract(@zre4vp.multiply(BigDecimal.value_of(0.16)))
676
+ end
677
+ if @vspvor.compare_to(BigDecimal.ZERO) == -1
678
+ @vspvor = BigDecimal.ZERO
679
+ end
680
+ if @vspo.compare_to(@vspvor) == 1
681
+ @vsp = @vspvor
682
+ @vsprest = @vspo.subtract(@vspvor)
683
+ if @vsprest.compare_to(@vspmax1) == 1
684
+ @vsp = @vsp.add(@vspmax1)
685
+ @vsprest = (@vsprest.subtract(@vspmax1)).divide(ZAHL2, 2, BigDecimal.ROUND_UP)
686
+ if @vsprest.compare_to(@vspmax2) == 1
687
+ @vsp = (@vsp.add(@vspmax2)).set_scale(0, BigDecimal.ROUND_DOWN)
688
+ else
689
+ @vsp = (@vsp.add(@vsprest)).set_scale(0, BigDecimal.ROUND_DOWN)
690
+ end
691
+ else
692
+ @vsp = (@vsp.add(@vsprest)).set_scale(0, BigDecimal.ROUND_DOWN)
693
+ end
694
+ else
695
+ @vsp = @vspo.set_scale(0, BigDecimal.ROUND_DOWN)
696
+ end
697
+ end
698
+
699
+ def mst5_6
700
+ @zzx = @x
701
+ if @zzx.compare_to(BigDecimal.value_of(25812)) == 1
702
+ @zx = BigDecimal.value_of(25812)
703
+ up5_6
704
+ if @zzx.compare_to(BigDecimal.value_of(200000)) == 1
705
+ @st = (@st.add(BigDecimal.value_of(73158.96))).set_scale(0, BigDecimal.ROUND_DOWN)
706
+ @st = (@st.add((@zzx.subtract(BigDecimal.value_of(200000))).multiply(BigDecimal.value_of(0.45)))).set_scale(0, BigDecimal.ROUND_DOWN)
707
+ else
708
+ @st = (@st.add((@zzx.subtract(BigDecimal.value_of(25812))).multiply(BigDecimal.value_of(0.42)))).set_scale(0, BigDecimal.ROUND_DOWN)
709
+ end
710
+ else
711
+ @zx = @zzx
712
+ up5_6
713
+ if @zzx.compare_to(BigDecimal.value_of(9144)) == 1
714
+ @vergl = @st
715
+ @zx = BigDecimal.value_of(9144)
716
+ up5_6
717
+ @hoch = (@st.add((@zzx.subtract(BigDecimal.value_of(9144))).multiply(BigDecimal.value_of(0.42)))).set_scale(0, BigDecimal.ROUND_DOWN)
718
+ if @hoch.compare_to(@vergl) == -1
719
+ @st = @hoch
720
+ else
721
+ @st = @vergl
722
+ end
723
+ end
724
+ end
725
+ end
726
+
727
+ def up5_6
728
+ @x = @zx.multiply(BigDecimal.value_of(1.25))
729
+ uptab07
730
+ @st1 = @st
731
+ @x = @zx.multiply(BigDecimal.value_of(0.75))
732
+ uptab07
733
+ @st2 = @st
734
+ @diff = (@st1.subtract(@st2)).multiply(ZAHL2)
735
+ @mist = (@zx.multiply(BigDecimal.value_of(0.15))).set_scale(0, BigDecimal.ROUND_DOWN)
736
+ if @mist.compare_to(@diff) == 1
737
+ @st = @mist
738
+ else
739
+ @st = @diff
740
+ end
741
+ end
742
+
743
+ def msolz
744
+ @solzfrei = BigDecimal.value_of(972 * @kztab)
745
+ if @jbmg.compare_to(@solzfrei) == 1
746
+ @solzj = (@jbmg.multiply(BigDecimal.value_of(5.5))).divide(ZAHL100).set_scale(2, BigDecimal.ROUND_DOWN)
747
+ @solzmin = (@jbmg.subtract(@solzfrei)).multiply(BigDecimal.value_of(20)).divide(ZAHL100)
748
+ if @solzmin.compare_to(@solzj) == -1
749
+ @solzj = @solzmin
750
+ end
751
+ @jw = @solzj.multiply(ZAHL100).set_scale(0, BigDecimal.ROUND_DOWN)
752
+ upanteil
753
+ @solzlzz = @anteil1
754
+ else
755
+ @solzlzz = BigDecimal.ZERO
756
+ end
757
+ if @r > 0
758
+ @jw = @jbmg.multiply(ZAHL100)
759
+ upanteil
760
+ @bk = @anteil1
761
+ else
762
+ @bk = BigDecimal.ZERO
763
+ end
764
+ end
765
+
766
+ def upanteil
767
+ if @lzz == 1
768
+ @anteil1 = @jw
769
+ @anteil2 = @jw
770
+ else
771
+ if @lzz == 2
772
+ @anteil1 = @jw.divide(ZAHL12, 0, BigDecimal.ROUND_DOWN)
773
+ @anteil2 = @jw.divide(ZAHL12, 0, BigDecimal.ROUND_UP)
774
+ else
775
+ if @lzz == 3
776
+ @anteil1 = (@jw.multiply(ZAHL7)).divide(ZAHL360, 0, BigDecimal.ROUND_DOWN)
777
+ @anteil2 = (@jw.multiply(ZAHL7)).divide(ZAHL360, 0, BigDecimal.ROUND_UP)
778
+ else
779
+ @anteil1 = @jw.divide(ZAHL360, 0, BigDecimal.ROUND_DOWN)
780
+ @anteil2 = @jw.divide(ZAHL360, 0, BigDecimal.ROUND_UP)
781
+ end
782
+ end
783
+ end
784
+ end
785
+
786
+ def msonst
787
+ if @sonstb.compare_to(BigDecimal.ZERO) == 0
788
+ @sts = BigDecimal.ZERO
789
+ @solzs = BigDecimal.ZERO
790
+ @bks = BigDecimal.ZERO
791
+ else
792
+ @lzz = 1
793
+ @vbez = @jvbez
794
+ @re4 = @jre4
795
+ mre4lzz
796
+ mre4lzz2
797
+ mlstjahr
798
+ @lst1 = @st.multiply(ZAHL100)
799
+ @vbez = @jvbez.add(@vbs)
800
+ @re4 = @jre4.add(@sonstb)
801
+ @vbezs = @vbezs.add(@sterbe)
802
+ mre4lzz
803
+ mre4lzz2
804
+ mlstjahr
805
+ @lst2 = @st.multiply(ZAHL100)
806
+ @sts = @lst2.subtract(@lst1)
807
+ if @sonstb.compare_to(BigDecimal.ZERO) == 1
808
+ if @sts.compare_to(BigDecimal.ZERO) == -1
809
+ @sts = BigDecimal.ZERO
810
+ end
811
+ end
812
+ @solzs = @sts.multiply(BigDecimal.value_of(5.5)).divide(ZAHL100, 0, BigDecimal.ROUND_DOWN)
813
+ if @r > 0
814
+ @bks = @sts
815
+ else
816
+ @bks = BigDecimal.ZERO
817
+ end
818
+ end
819
+ end
820
+
821
+ def mre4lzz2
822
+ @re4lzz = @re4.subtract(@fvb).subtract(@alte).subtract(@jfreib).add(@jhinzu)
823
+ @re4lzzv = @re4.subtract(@fvb).subtract(@alte)
824
+ mre4
825
+ mztabfb
826
+ end
827
+
828
+ def mvmt
829
+ if @vkapa.compare_to(BigDecimal.ZERO) == -1
830
+ @vkapa = BigDecimal.ZERO
831
+ end
832
+ if (@vmt.add(@vkapa)).compare_to(BigDecimal.ZERO) == 1
833
+ @lzz = 1
834
+ @vbez = @jvbez.add(@vbs)
835
+ @re4 = @jre4.add(@sonstb)
836
+ mre4lzz
837
+ mre4lzz2
838
+ mlstjahr
839
+ @lst1 = @st.multiply(ZAHL100)
840
+ @vmt = @vmt.add(@vkapa)
841
+ @vbezs = @vbezs.add(@vkapa)
842
+ @vbez = @vbez.add(@vkapa)
843
+ @re4 = @jre4.add(@sonstb).add(@vmt)
844
+ mre4lzz
845
+ mre4lzz2
846
+ @kennz = 1
847
+ @zre4vp1 = @zre4vp
848
+ mlstjahr
849
+ @lst3 = @st.multiply(ZAHL100)
850
+ @vbez = @vbez.subtract(@vkapa)
851
+ @vbezs = @vbezs.subtract(@vkapa)
852
+ @re4 = @jre4.add(@sonstb)
853
+ mre4lzz
854
+ if (@re4.subtract(@jfreib).add(@jhinzu)).compare_to(BigDecimal.ZERO) == -1
855
+ @re4 = @re4.subtract(@jfreib).add(@jhinzu)
856
+ @jfreib = BigDecimal.ZERO
857
+ @jhinzu = BigDecimal.ZERO
858
+ @re4 = (@re4.add(@vmt)).divide(ZAHL5, 0, BigDecimal.ROUND_DOWN)
859
+ mre4lzz2
860
+ mlstjahr
861
+ @lst2 = @st.multiply(ZAHL100)
862
+ @stv = @lst2.multiply(ZAHL5)
863
+ else
864
+ @re4 = @re4.add(@vmt.divide(ZAHL5, 0, BigDecimal.ROUND_DOWN))
865
+ mre4lzz2
866
+ mlstjahr
867
+ @lst2 = @st.multiply(ZAHL100)
868
+ @stv = (@lst2.subtract(@lst1)).multiply(ZAHL5)
869
+ end
870
+ @lst3 = @lst3.subtract(@lst1)
871
+ if @lst3.compare_to(@stv) == -1
872
+ @stv = @lst3
873
+ end
874
+ @solzv = (@stv.multiply(BigDecimal.value_of(5.5))).divide(ZAHL100, 0, BigDecimal.ROUND_DOWN)
875
+ if @r > 0
876
+ @bkv = @stv
877
+ else
878
+ @bkv = BigDecimal.ZERO
879
+ end
880
+ else
881
+ @stv = BigDecimal.ZERO
882
+ @solzv = BigDecimal.ZERO
883
+ @bkv = BigDecimal.ZERO
884
+ end
885
+ end
886
+
887
+ def uptab07
888
+ if @x.compare_to(BigDecimal.value_of(7665)) == -1
889
+ @st = BigDecimal.ZERO
890
+ else
891
+ if @x.compare_to(BigDecimal.value_of(12740)) == -1
892
+ @y = (@x.subtract(BigDecimal.value_of(7664))).divide(BigDecimal.value_of(10000), 6, BigDecimal.ROUND_DOWN)
893
+ @rw = @y.multiply(BigDecimal.value_of(883.74))
894
+ @rw = @rw.add(BigDecimal.value_of(1500))
895
+ @st = (@rw.multiply(@y)).set_scale(0, BigDecimal.ROUND_DOWN)
896
+ else
897
+ if @x.compare_to(BigDecimal.value_of(52152)) == -1
898
+ @y = (@x.subtract(BigDecimal.value_of(12739))).divide(BigDecimal.value_of(10000), 6, BigDecimal.ROUND_DOWN)
899
+ @rw = @y.multiply(BigDecimal.value_of(228.74))
900
+ @rw = @rw.add(BigDecimal.value_of(2397))
901
+ @rw = @rw.multiply(@y)
902
+ @st = (@rw.add(BigDecimal.value_of(989))).set_scale(0, BigDecimal.ROUND_DOWN)
903
+ else
904
+ if @x.compare_to(BigDecimal.value_of(250001)) == -1
905
+ @st = ((@x.multiply(BigDecimal.value_of(0.42))).subtract(BigDecimal.value_of(7914))).set_scale(0, BigDecimal.ROUND_DOWN)
906
+ else
907
+ @st = ((@x.multiply(BigDecimal.value_of(0.45))).subtract(BigDecimal.value_of(15414))).set_scale(0, BigDecimal.ROUND_DOWN)
908
+ end
909
+ end
910
+ end
911
+ end
912
+ @st = @st.multiply(BigDecimal.value_of(@kztab))
913
+ end
914
+
915
+ end
916
+ end
917
+ end