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,975 @@
1
+ module Taxger
2
+ module Lohnsteuer
3
+ class Lohnsteuer2009
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
+ ZAHL500 = BigDecimal.new(500)
82
+ ZAHL700 = BigDecimal.new(700)
83
+
84
+ attr_accessor :bk
85
+ attr_accessor :bks
86
+ attr_accessor :bkv
87
+ attr_accessor :lstlzz
88
+ attr_accessor :solzlzz
89
+ attr_accessor :solzs
90
+ attr_accessor :solzv
91
+ attr_accessor :sts
92
+ attr_accessor :stv
93
+
94
+ INPUT_VARS = [:ajahr, :alter1, :jfreib, :jhinzu, :jre4, :jvbez, :krv, :lzz, :lzzfreib, :lzzhinzu, :r, :re4, :sonstb, :sterbe, :stkl, :vbez, :vbezm, :vbezs, :vbs, :vjahr, :vkapa, :vmt, :zkf, :zmvb]
95
+ OUTPUT_VARS = [:bk, :bks, :bkv, :lstlzz, :solzlzz, :solzs, :solzv, :sts, :stv]
96
+ def initialize(params)
97
+ raise "Unknown parameters: #{params.keys - INPUT_VARS}" if params.keys - INPUT_VARS != []
98
+ # INPUTS
99
+
100
+ # Auf die Vollendung des 64. Lebensjahres folgende
101
+ # Kalenderjahr (erforderlich, wenn ALTER1=1)
102
+ @ajahr = 0 # int
103
+
104
+ # 1, wenn das 64. Lebensjahr zu Beginn des Kalenderjahres vollendet wurde, in dem
105
+ # der Lohnzahlungszeitraum endet (§ 24 a EStG), sonst = 0
106
+ @alter1 = 0 # int
107
+
108
+ # Jahresfreibetrag nach Maßgabe der Eintragungen auf der
109
+ # Lohnsteuerkarte in Cents (ggf. 0)
110
+ @jfreib = BigDecimal.new(0) # BigDecimal
111
+
112
+ # Jahreshinzurechnungsbetrag in Cents (ggf. 0)
113
+ @jhinzu = BigDecimal.new(0) # BigDecimal
114
+
115
+ # Voraussichtlicher Jahresarbeitslohn ohne sonstige Bezüge und ohne Vergütung für mehrjährige Tätigkeit in Cent.
116
+ # Anmerkung: Die Eingabe dieses Feldes (ggf. 0) ist erforderlich bei Eingabe „sonsti-ger Bezüge“ (Feld SONSTB)
117
+ # oder bei Eingabe der „Vergütung für mehrjährige Tätigkeit“ (Feld VMT).
118
+ # Sind in einem vorangegangenen Abrechnungszeitraum bereits sonstige Bezüge gezahlt worden, so sind sie dem
119
+ # voraussichtlichen Jahresarbeitslohn hinzuzurechnen. Vergütungen für mehrere Jahres aus einem vorangegangenen
120
+ # Abrechnungszeitraum sind in voller Höhe hinzuzurechnen.
121
+ @jre4 = BigDecimal.new(0) # BigDecimal
122
+
123
+ # In JRE4 enthaltene Versorgungsbezuege in Cents (ggf. 0)
124
+ @jvbez = BigDecimal.new(0) # BigDecimal
125
+
126
+ # 2 = für den Arbeitnehmer wird die gekürzte Vorsorgepauschale nach dem Recht 2008 angesetzt
127
+ # (§ 10c Abs. 3 EStG n.F.), jedoch bei der Günstigerprüfung die ungekürzte Vorsorgepauschale
128
+ # nach dem Recht bis 2004 berücksichtigt (§ 10c Abs. 2 EStG a.F.); Änderung durch das JStG 2008.
129
+ # 1 = für den Arbeitnehmer wird die gekürzte Vorsorgepauschale angewandt (§ 10c Abs. 3 EStG),
130
+ # soweit nicht Arbeitnehmer der Fallgruppe 2.
131
+ # 0 = andere Arbeitnehmer.
132
+ # Für die Zuordnung sind allein die dem Arbeitgeber ohnehin bekannten Tatsachen massgebend;
133
+ # zusätzliche Ermittlungen braucht 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
+ # In der Lohnsteuerkarte des Arbeitnehmers eingetragener Freibetrag für
144
+ # den Lohnzahlungszeitraum in Cent
145
+ @lzzfreib = BigDecimal.new(0) # BigDecimal
146
+
147
+ # In der Lohnsteuerkarte des Arbeitnehmers eingetragener Hinzurechnungsbetrag
148
+ # für den Lohnzahlungszeitraum in Cent
149
+ @lzzhinzu = BigDecimal.new(0) # BigDecimal
150
+
151
+ # Religionsgemeinschaft des Arbeitnehmers lt. Lohnsteuerkarte (bei
152
+ # keiner Religionszugehoerigkeit = 0)
153
+ @r = 0 # int
154
+
155
+ # Steuerpflichtiger Arbeitslohn vor Beruecksichtigung der Freibetraege
156
+ # fuer Versorgungsbezuege, des Altersentlastungsbetrags und des auf
157
+ # der Lohnsteuerkarte fuer den Lohnzahlungszeitraum eingetragenen
158
+ # Freibetrags in Cents.
159
+ @re4 = BigDecimal.new(0) # BigDecimal
160
+
161
+ # Sonstige Bezuege (ohne Verguetung aus mehrjaehriger Taetigkeit) einschliesslich
162
+ # Sterbegeld bei Versorgungsbezuegen sowie Kapitalauszahlungen/Abfindungen,
163
+ # soweit es sich nicht um Bezuege fuer mehrere Jahre handelt in Cents (ggf. 0)
164
+ @sonstb = BigDecimal.new(0) # BigDecimal
165
+
166
+ # Sterbegeld bei Versorgungsbezuegen sowie Kapitalauszahlungen/Abfindungen,
167
+ # soweit es sich nicht um Bezuege fuer mehrere Jahre handelt
168
+ # (in SONSTB enthalten) in Cents
169
+ @sterbe = BigDecimal.new(0) # BigDecimal
170
+
171
+ # Steuerklasse:
172
+ # 1 = I
173
+ # 2 = II
174
+ # 3 = III
175
+ # 4 = IV
176
+ # 5 = V
177
+ # 6 = VI
178
+ @stkl = 0 # int
179
+
180
+ # In RE4 enthaltene Versorgungsbezuege in Cents (ggf. 0)
181
+ @vbez = BigDecimal.new(0) # BigDecimal
182
+
183
+ # Vorsorgungsbezug im Januar 2005 bzw. fuer den ersten vollen Monat
184
+ # in Cents
185
+ @vbezm = BigDecimal.new(0) # BigDecimal
186
+
187
+ # Voraussichtliche Sonderzahlungen im Kalenderjahr des Versorgungsbeginns
188
+ # bei Versorgungsempfaengern ohne Sterbegeld, Kapitalauszahlungen/Abfindungen
189
+ # bei Versorgungsbezuegen in Cents
190
+ @vbezs = BigDecimal.new(0) # BigDecimal
191
+
192
+ # In SONSTB enthaltene Versorgungsbezuege einschliesslich Sterbegeld
193
+ # in Cents (ggf. 0)
194
+ @vbs = BigDecimal.new(0) # BigDecimal
195
+
196
+ # Jahr, in dem der Versorgungsbezug erstmalig gewaehrt wurde; werden
197
+ # mehrere Versorgungsbezuege gezahlt, so gilt der aelteste erstmalige Bezug
198
+ @vjahr = 0 # int
199
+
200
+ # Kapitalauszahlungen / Abfindungen / Nachzahlungen bei Versorgungsbezügen
201
+ # für mehrere Jahre in Cent (ggf. 0)
202
+ @vkapa = BigDecimal.new(0) # BigDecimal
203
+
204
+ # Vergütung für mehrjährige Tätigkeit ohne Kapitalauszahlungen und ohne Abfindungen
205
+ # bei Versorgungsbezügen in Cent (ggf. 0)
206
+ @vmt = BigDecimal.new(0) # BigDecimal
207
+
208
+ # Zahl der Freibetraege fuer Kinder (eine Dezimalstelle, nur bei Steuerklassen
209
+ # I, II, III und IV)
210
+ @zkf = BigDecimal.new(0) # BigDecimal
211
+
212
+ # Zahl der Monate, fuer die Versorgungsbezuege gezahlt werden (nur
213
+ # erforderlich bei Jahresberechnung (LZZ = 1)
214
+ @zmvb = 0 # int
215
+
216
+ # OUTPUTS
217
+
218
+ # Bemessungsgrundlage fuer die Kirchenlohnsteuer in Cents
219
+ @bk = BigDecimal.new(0) # BigDecimal
220
+
221
+ # Bemessungsgrundlage der sonstigen Einkuenfte (ohne Verguetung
222
+ # fuer mehrjaehrige Taetigkeit) fuer die Kirchenlohnsteuer in Cents
223
+ @bks = BigDecimal.new(0) # BigDecimal
224
+ @bkv = BigDecimal.new(0) # BigDecimal
225
+
226
+ # Fuer den Lohnzahlungszeitraum einzubehaltende Lohnsteuer in Cents
227
+ @lstlzz = BigDecimal.new(0) # BigDecimal
228
+
229
+ # Fuer den Lohnzahlungszeitraum einzubehaltender Solidaritaetszuschlag
230
+ # in Cents
231
+ @solzlzz = BigDecimal.new(0) # BigDecimal
232
+
233
+ # Solidaritaetszuschlag fuer sonstige Bezuege (ohne Verguetung fuer mehrjaehrige
234
+ # Taetigkeit) in Cents
235
+ @solzs = BigDecimal.new(0) # BigDecimal
236
+
237
+ # Solidaritaetszuschlag fuer die Verguetung fuer mehrjaehrige Taetigkeit in
238
+ # Cents
239
+ @solzv = BigDecimal.new(0) # BigDecimal
240
+
241
+ # Lohnsteuer fuer sonstige Einkuenfte (ohne Verguetung fuer mehrjaehrige
242
+ # Taetigkeit) in Cents
243
+ @sts = BigDecimal.new(0) # BigDecimal
244
+
245
+ # Lohnsteuer fuer Verguetung fuer mehrjaehrige Taetigkeit in Cents
246
+ @stv = BigDecimal.new(0) # BigDecimal
247
+
248
+ # INTERNALS
249
+
250
+ # Altersentlastungsbetrag nach Alterseinkünftegesetz in €,
251
+ # Cent (2 Dezimalstellen)
252
+ @alte = BigDecimal.new(0)
253
+
254
+ # Arbeitnehmer-Pauschbetrag in EURO
255
+ @anp = BigDecimal.new(0)
256
+
257
+ # Auf den Lohnzahlungszeitraum entfallender Anteil von Jahreswerten
258
+ # auf ganze Cents abgerundet
259
+ @anteil1 = BigDecimal.new(0)
260
+
261
+ # Auf den Lohnzahlungszeitraum entfallender Anteil von Jahreswerten
262
+ # auf ganze Cents aufgerundet
263
+ @anteil2 = BigDecimal.new(0)
264
+
265
+ # Bemessungsgrundlage für Altersentlastungsbetrag in €, Cent
266
+ # (2 Dezimalstellen)
267
+ @bmg = BigDecimal.new(0)
268
+
269
+ # Differenz zwischen ST1 und ST2 in EURO
270
+ @diff = BigDecimal.new(0)
271
+
272
+ # Entlastungsbetrag fuer Alleinerziehende in EURO
273
+ @efa = BigDecimal.new(0)
274
+
275
+ # Versorgungsfreibetrag in €, Cent (2 Dezimalstellen)
276
+ @fvb = BigDecimal.new(0)
277
+
278
+ # Versorgungsfreibetrag in €, Cent (2 Dezimalstellen) für die Berechnung
279
+ # der Lohnsteuer für den sonstigen Bezug
280
+ @fvbso = BigDecimal.new(0)
281
+
282
+ # Zuschlag zum Versorgungsfreibetrag in EURO
283
+ @fvbz = BigDecimal.new(0)
284
+
285
+ # Zuschlag zum Versorgungsfreibetrag in EURO fuer die Berechnung
286
+ # der Lohnsteuer beim sonstigen Bezug
287
+ @fvbzso = BigDecimal.new(0)
288
+
289
+ # Maximaler Altersentlastungsbetrag in €
290
+ @hbalte = BigDecimal.new(0)
291
+
292
+ # Massgeblicher maximaler Versorgungsfreibetrag in €
293
+ @hfvb = BigDecimal.new(0)
294
+
295
+ # Massgeblicher maximaler Zuschlag zum Versorgungsfreibetrag in €,Cent
296
+ # (2 Dezimalstellen)
297
+ @hfvbz = BigDecimal.new(0)
298
+
299
+ # Massgeblicher maximaler Zuschlag zum Versorgungsfreibetrag in €, Cent
300
+ # (2 Dezimalstellen) für die Berechnung der Lohnsteuer für den
301
+ # sonstigen Bezug
302
+ @hfvbzso = BigDecimal.new(0)
303
+
304
+ # Nummer der Tabellenwerte fuer Versorgungsparameter
305
+ @j = 0
306
+
307
+ # Jahressteuer nach § 51a EStG, aus der Solidaritaetszuschlag und
308
+ # Bemessungsgrundlage fuer die Kirchenlohnsteuer ermittelt werden in EURO
309
+ @jbmg = BigDecimal.new(0)
310
+
311
+ # Auf einen Jahreslohn hochgerechneter LZZFREIB in €, Cent
312
+ # (2 Dezimalstellen)
313
+ @jlfreib = BigDecimal.new(0)
314
+
315
+ # Auf einen Jahreslohn hochgerechnete LZZHINZU in €, Cent
316
+ # (2 Dezimalstellen)
317
+ @jlhinzu = BigDecimal.new(0)
318
+
319
+ # Jahreswert, dessen Anteil fuer einen Lohnzahlungszeitraum in
320
+ # UPANTEIL errechnet werden soll in Cents
321
+ @jw = BigDecimal.new(0)
322
+
323
+ # Nummer der Tabellenwerte fuer Parameter bei Altersentlastungsbetrag
324
+ @k = 0
325
+
326
+ # Merker für Berechnung Lohnsteuer für mehrjährige Tätigkeit.
327
+ # 0 = normale Steuerberechnung
328
+ # 1 = Steuerberechnung für mehrjährige Tätigkeit
329
+ # 2 = entfällt
330
+ @kennvmt = 0
331
+
332
+ # Summe der Freibetraege fuer Kinder in EURO
333
+ @kfb = BigDecimal.new(0)
334
+
335
+ # Kennzahl fuer die Einkommensteuer-Tabellenart:
336
+ # 1 = Grundtabelle
337
+ # 2 = Splittingtabelle
338
+ @kztab = 0
339
+
340
+ # Jahreslohnsteuer in EURO
341
+ @lstjahr = BigDecimal.new(0)
342
+
343
+ # Zwischenfelder der Jahreslohnsteuer in Cent
344
+ @lst1 = BigDecimal.new(0)
345
+ @lst2 = BigDecimal.new(0)
346
+ @lst3 = BigDecimal.new(0)
347
+ @lstoso = BigDecimal.new(0)
348
+ @lstso = BigDecimal.new(0)
349
+
350
+ # Mindeststeuer fuer die Steuerklassen V und VI in EURO
351
+ @mist = BigDecimal.new(0)
352
+
353
+ # Rechenwert in Gleitkommadarstellung
354
+ @rw = BigDecimal.new(0)
355
+
356
+ # Sonderausgaben-Pauschbetrag in EURO
357
+ @sap = BigDecimal.new(0)
358
+
359
+ # Freigrenze fuer den Solidaritaetszuschlag in EURO
360
+ @solzfrei = BigDecimal.new(0)
361
+
362
+ # Solidaritaetszuschlag auf die Jahreslohnsteuer in EURO, C (2 Dezimalstellen)
363
+ @solzj = BigDecimal.new(0)
364
+
365
+ # Zwischenwert fuer den Solidaritaetszuschlag auf die Jahreslohnsteuer
366
+ # in EURO, C (2 Dezimalstellen)
367
+ @solzmin = BigDecimal.new(0)
368
+
369
+ # Tarifliche Einkommensteuer in EURO
370
+ @st = BigDecimal.new(0)
371
+
372
+ # Tarifliche Einkommensteuer auf das 1,25-fache ZX in EURO
373
+ @st1 = BigDecimal.new(0)
374
+
375
+ # Tarifliche Einkommensteuer auf das 0,75-fache ZX in EURO
376
+ @st2 = BigDecimal.new(0)
377
+
378
+ # Zwischenfeld zur Ermittlung der Steuer auf Vergütungen für mehrjährige Tätigkeit
379
+ @stovmt = BigDecimal.new(0)
380
+
381
+ # Bemessungsgrundlage fuer den Versorgungsfreibetrag in Cents
382
+ @vbezb = BigDecimal.new(0)
383
+
384
+ # Bemessungsgrundlage für den Versorgungsfreibetrag in Cent für
385
+ # den sonstigen Bezug
386
+ @vbezbso = BigDecimal.new(0)
387
+
388
+ # Hoechstbetrag der Vorsorgepauschale nach Alterseinkuenftegesetz in EURO, C
389
+ @vhb = BigDecimal.new(0)
390
+
391
+ # Vorsorgepauschale in EURO, C (2 Dezimalstellen)
392
+ @vsp = BigDecimal.new(0)
393
+
394
+ # Vorsorgepauschale nach Alterseinkuenftegesetz in EURO, C
395
+ @vspn = BigDecimal.new(0)
396
+
397
+ # Zwischenwert 1 bei der Berechnung der Vorsorgepauschale nach
398
+ # dem Alterseinkuenftegesetz in EURO, C (2 Dezimalstellen)
399
+ @vsp1 = BigDecimal.new(0)
400
+
401
+ # Zwischenwert 2 bei der Berechnung der Vorsorgepauschale nach
402
+ # dem Alterseinkuenftegesetz in EURO, C (2 Dezimalstellen)
403
+ @vsp2 = BigDecimal.new(0)
404
+
405
+ # Hoechstbetrag der Vorsorgepauschale nach § 10c Abs. 3 EStG in EURO
406
+ @vspkurz = BigDecimal.new(0)
407
+
408
+ # Hoechstbetrag der Vorsorgepauschale nach § 10c Abs. 2 Nr. 2 EStG in EURO
409
+ @vspmax1 = BigDecimal.new(0)
410
+
411
+ # Hoechstbetrag der Vorsorgepauschale nach § 10c Abs. 2 Nr. 3 EStG in EURO
412
+ @vspmax2 = BigDecimal.new(0)
413
+
414
+ # Vorsorgepauschale nach § 10c Abs. 2 Satz 2 EStG vor der Hoechstbetragsberechnung
415
+ # in EURO, C (2 Dezimalstellen)
416
+ @vspo = BigDecimal.new(0)
417
+
418
+ # Fuer den Abzug nach § 10c Abs. 2 Nrn. 2 und 3 EStG verbleibender
419
+ # Rest von VSPO in EURO, C (2 Dezimalstellen)
420
+ @vsprest = BigDecimal.new(0)
421
+
422
+ # Hoechstbetrag der Vorsorgepauschale nach § 10c Abs. 2 Nr. 1 EStG
423
+ # in EURO, C (2 Dezimalstellen)
424
+ @vspvor = BigDecimal.new(0)
425
+
426
+ # Zu versteuerndes Einkommen gem. § 32a Abs. 1 und 2 EStG €, C
427
+ # (2 Dezimalstellen)
428
+ @x = BigDecimal.new(0)
429
+
430
+ # gem. § 32a Abs. 1 EStG (6 Dezimalstellen)
431
+ @y = BigDecimal.new(0)
432
+
433
+ # Auf einen Jahreslohn hochgerechnetes RE4 in €, C (2 Dezimalstellen)
434
+ # nach Abzug der Freibeträge nach § 39 b Abs. 2 Satz 3 und 4.
435
+ @zre4 = BigDecimal.new(0)
436
+
437
+ # Auf einen Jahreslohn hochgerechnetes RE4 in €, C (2 Dezimalstellen)
438
+ @zre4j = BigDecimal.new(0)
439
+
440
+ # Auf einen Jahreslohn hochgerechnetes RE4 in €, C (2 Dezimalstellen)
441
+ # nach Abzug des Versorgungsfreibetrags und des Alterentlastungsbetrags
442
+ # zur Berechnung der Vorsorgepauschale in €, Cent (2 Dezimalstellen)
443
+ @zre4vp = BigDecimal.new(0)
444
+
445
+ # Feste Tabellenfreibeträge (ohne Vorsorgepauschale) in €, Cent
446
+ # (2 Dezimalstellen)
447
+ @ztabfb = BigDecimal.new(0)
448
+
449
+ # Auf einen Jahreslohn hochgerechnetes (VBEZ abzueglich FVB) in
450
+ # EURO, C (2 Dezimalstellen)
451
+ @zvbez = BigDecimal.new(0)
452
+
453
+ # Auf einen Jahreslohn hochgerechnetes VBEZ in €, C (2 Dezimalstellen)
454
+ @zvbezj = BigDecimal.new(0)
455
+
456
+ # Zu versteuerndes Einkommen in €, C (2 Dezimalstellen)
457
+ @zve = BigDecimal.new(0)
458
+
459
+ # Zwischenfelder zu X fuer die Berechnung der Steuer nach § 39b
460
+ # Abs. 2 Satz 7 EStG in €
461
+ @zx = BigDecimal.new(0)
462
+ @zzx = BigDecimal.new(0)
463
+ @hoch = BigDecimal.new(0)
464
+ @vergl = BigDecimal.new(0)
465
+
466
+ params.each do |key, value|
467
+ instance_variable_set("@#{key}", value)
468
+ end
469
+
470
+ mre4jl
471
+ @vbezbso = BigDecimal.ZERO
472
+ mre4
473
+ mre4abz
474
+ mztabfb
475
+ @kennvmt = 0
476
+ mlstjahr
477
+ @lstjahr = @st
478
+ @jw = @lstjahr.multiply(ZAHL100)
479
+ upanteil
480
+ @lstlzz = @anteil1
481
+ if @zkf.compare_to(BigDecimal.ZERO) == 1
482
+ @ztabfb = (@ztabfb.add(@kfb)).set_scale(2, BigDecimal.ROUND_DOWN)
483
+ mlstjahr
484
+ @jbmg = @st
485
+ else
486
+ @jbmg = @lstjahr
487
+ end
488
+ msolz
489
+ msonst
490
+ mvmt
491
+ end
492
+
493
+ private
494
+
495
+ def mre4jl
496
+ if @lzz == 1
497
+ @zre4j = @re4.divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
498
+ @zvbezj = @vbez.divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
499
+ @jlfreib = @lzzfreib.divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
500
+ @jlhinzu = @lzzhinzu.divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
501
+ else
502
+ if @lzz == 2
503
+ @zre4j = (@re4.multiply(ZAHL12)).divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
504
+ @zvbezj = (@vbez.multiply(ZAHL12)).divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
505
+ @jlfreib = (@lzzfreib.multiply(ZAHL12)).divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
506
+ @jlhinzu = (@lzzhinzu.multiply(ZAHL12)).divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
507
+ else
508
+ if @lzz == 3
509
+ @zre4j = (@re4.multiply(ZAHL360)).divide(ZAHL700, 2, BigDecimal.ROUND_DOWN)
510
+ @zvbezj = (@vbez.multiply(ZAHL360)).divide(ZAHL700, 2, BigDecimal.ROUND_DOWN)
511
+ @jlfreib = (@lzzfreib.multiply(ZAHL360)).divide(ZAHL700, 2, BigDecimal.ROUND_DOWN)
512
+ @jlhinzu = (@lzzhinzu.multiply(ZAHL360)).divide(ZAHL700, 2, BigDecimal.ROUND_DOWN)
513
+ else
514
+ @zre4j = (@re4.multiply(ZAHL360)).divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
515
+ @zvbezj = (@vbez.multiply(ZAHL360)).divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
516
+ @jlfreib = (@lzzfreib.multiply(ZAHL360)).divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
517
+ @jlhinzu = (@lzzhinzu.multiply(ZAHL360)).divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
518
+ end
519
+ end
520
+ end
521
+ end
522
+
523
+ def mre4
524
+ if @zvbezj.compare_to(BigDecimal.ZERO) == 0
525
+ @fvbz = BigDecimal.ZERO
526
+ @fvb = BigDecimal.ZERO
527
+ @fvbzso = BigDecimal.ZERO
528
+ @fvbso = BigDecimal.ZERO
529
+ else
530
+ if @vjahr < 2006
531
+ @j = 1
532
+ else
533
+ if @vjahr < 2040
534
+ @j = @vjahr - 2004
535
+ else
536
+ @j = 36
537
+ end
538
+ end
539
+ if @lzz == 1
540
+ @vbezb = (@vbezm.multiply(BigDecimal.value_of(@zmvb))).add(@vbezs)
541
+ @hfvb = TAB2[@j].divide(ZAHL12).multiply(BigDecimal.value_of(@zmvb))
542
+ @fvbz = TAB3[@j].divide(ZAHL12).multiply(BigDecimal.value_of(@zmvb)).set_scale(0, BigDecimal.ROUND_UP)
543
+ else
544
+ @vbezb = ((@vbezm.multiply(ZAHL12)).add(@vbezs)).set_scale(2, BigDecimal.ROUND_DOWN)
545
+ @hfvb = TAB2[@j]
546
+ @fvbz = TAB3[@j]
547
+ end
548
+ @fvb = ((@vbezb.multiply(TAB1[@j]))).divide(ZAHL100).set_scale(2, BigDecimal.ROUND_UP)
549
+ if @fvb.compare_to(@hfvb) == 1
550
+ @fvb = @hfvb
551
+ end
552
+ @fvbso = (@fvb.add((@vbezbso.multiply(TAB1[@j])).divide(ZAHL100))).set_scale(2, BigDecimal.ROUND_UP)
553
+ if @fvbso.compare_to(TAB2[@j]) == 1
554
+ @fvbso = TAB2[@j]
555
+ end
556
+ @hfvbzso = (((@vbezb.add(@vbezbso)).divide(ZAHL100)).subtract(@fvbso)).set_scale(2, BigDecimal.ROUND_DOWN)
557
+ @fvbzso = (@fvbz.add((@vbezbso).divide(ZAHL100))).set_scale(0, BigDecimal.ROUND_UP)
558
+ if @fvbzso.compare_to(@hfvbzso) == 1
559
+ @fvbzso = @hfvbzso.set_scale(0, BigDecimal.ROUND_UP)
560
+ end
561
+ if @fvbzso.compare_to(TAB3[@j]) == 1
562
+ @fvbzso = TAB3[@j]
563
+ end
564
+ @hfvbz = ((@vbezb.divide(ZAHL100)).subtract(@fvb)).set_scale(2, BigDecimal.ROUND_DOWN)
565
+ if @fvbz.compare_to(@hfvbz) == 1
566
+ @fvbz = @hfvbz.set_scale(0, BigDecimal.ROUND_UP)
567
+ end
568
+ end
569
+ mre4alte
570
+ end
571
+
572
+ def mre4alte
573
+ if @alter1 == 0
574
+ @alte = BigDecimal.ZERO
575
+ else
576
+ if @ajahr < 2006
577
+ @k = 1
578
+ else
579
+ if @ajahr < 2040
580
+ @k = @ajahr - 2004
581
+ else
582
+ @k = 36
583
+ end
584
+ end
585
+ @bmg = @zre4j.subtract(@zvbezj)
586
+ @alte = (@bmg.multiply(TAB4[@k])).set_scale(2, BigDecimal.ROUND_UP)
587
+ @hbalte = TAB5[@k]
588
+ if @alte.compare_to(@hbalte) == 1
589
+ @alte = @hbalte
590
+ end
591
+ end
592
+ end
593
+
594
+ def mre4abz
595
+ @zre4 = (@zre4j.subtract(@fvb).subtract(@alte).subtract(@jlfreib).add(@jlhinzu)).set_scale(2, BigDecimal.ROUND_DOWN)
596
+ if @zre4.compare_to(BigDecimal.ZERO) == -1
597
+ @zre4 = BigDecimal.ZERO
598
+ end
599
+ @zre4vp = (@zre4j.subtract(@fvb).subtract(@alte)).set_scale(2, BigDecimal.ROUND_DOWN)
600
+ if @zre4vp.compare_to(BigDecimal.ZERO) == -1
601
+ @zre4vp = BigDecimal.ZERO
602
+ end
603
+ @zvbez = (@zvbezj.subtract(@fvb)).set_scale(2, BigDecimal.ROUND_DOWN)
604
+ if @zvbez.compare_to(BigDecimal.ZERO) == -1
605
+ @zvbez = BigDecimal.ZERO
606
+ end
607
+ end
608
+
609
+ def mztabfb
610
+ @anp = BigDecimal.ZERO
611
+ if @zvbez.compare_to(BigDecimal.ZERO) >= 0
612
+ if @zvbez.compare_to(@fvbz) == -1
613
+ @fvbz = @zvbez.set_scale(0, BigDecimal.ROUND_DOWN)
614
+ end
615
+ end
616
+ if @stkl < 6
617
+ if @zvbez.compare_to(BigDecimal.ZERO) == 1
618
+ if (@zvbez.subtract(@fvbz)).compare_to(BigDecimal.value_of(102)) == -1
619
+ @anp = (@zvbez.subtract(@fvbz)).set_scale(0, BigDecimal.ROUND_DOWN)
620
+ else
621
+ @anp = BigDecimal.value_of(102)
622
+ end
623
+ end
624
+ else
625
+ @fvbz = BigDecimal.value_of(0)
626
+ @fvbzso = BigDecimal.value_of(0)
627
+ end
628
+ if @stkl < 6
629
+ if @zre4.compare_to(@zvbez) == 1
630
+ if (@zre4.subtract(@zvbez)).compare_to(BigDecimal.value_of(920)) == -1
631
+ @anp = (@anp.add(@zre4).subtract(@zvbez)).set_scale(0, BigDecimal.ROUND_UP)
632
+ else
633
+ @anp = @anp.add(BigDecimal.value_of(920))
634
+ end
635
+ end
636
+ end
637
+ @kztab = 1
638
+ if @stkl == 1
639
+ @sap = BigDecimal.value_of(36)
640
+ @kfb = (@zkf.multiply(BigDecimal.value_of(6024))).set_scale(0, BigDecimal.ROUND_DOWN)
641
+ else
642
+ if @stkl == 2
643
+ @efa = BigDecimal.value_of(1308)
644
+ @sap = BigDecimal.value_of(36)
645
+ @kfb = (@zkf.multiply(BigDecimal.value_of(6024))).set_scale(0, BigDecimal.ROUND_DOWN)
646
+ else
647
+ if @stkl == 3
648
+ @kztab = 2
649
+ @sap = BigDecimal.value_of(72)
650
+ @kfb = (@zkf.multiply(BigDecimal.value_of(6024))).set_scale(0, BigDecimal.ROUND_DOWN)
651
+ else
652
+ if @stkl == 4
653
+ @sap = BigDecimal.value_of(36)
654
+ @kfb = (@zkf.multiply(BigDecimal.value_of(3012))).set_scale(0, BigDecimal.ROUND_DOWN)
655
+ else
656
+ @kfb = BigDecimal.ZERO
657
+ end
658
+ end
659
+ end
660
+ end
661
+ @ztabfb = (@efa.add(@anp).add(@sap).add(@fvbz)).set_scale(2, BigDecimal.ROUND_DOWN)
662
+ end
663
+
664
+ def mlstjahr
665
+ if @stkl < 5
666
+ upevp
667
+ else
668
+ @vsp = BigDecimal.ZERO
669
+ end
670
+ if @kennvmt == 0
671
+ @zve = (@zre4.subtract(@ztabfb).subtract(@vsp)).set_scale(2, BigDecimal.ROUND_DOWN)
672
+ upmlst
673
+ else
674
+ @zve = (@zre4.subtract(@ztabfb).subtract(@vsp).subtract((@vmt).divide(ZAHL100)).subtract((@vkapa).divide(ZAHL100))).set_scale(2, BigDecimal.ROUND_DOWN)
675
+ if @zve.compare_to(BigDecimal.ZERO) == -1
676
+ @zve = (((@zve.add((@vmt).divide(ZAHL100))).add((@vkapa).divide(ZAHL100))).divide(ZAHL5)).set_scale(2, BigDecimal.ROUND_DOWN)
677
+ upmlst
678
+ @st = (@st.multiply(ZAHL5)).set_scale(0, BigDecimal.ROUND_DOWN)
679
+ else
680
+ upmlst
681
+ @stovmt = @st
682
+ @zve = (@zve.add(((@vmt.add(@vkapa)).divide(ZAHL500)))).set_scale(2, BigDecimal.ROUND_DOWN)
683
+ upmlst
684
+ @st = (((@st.subtract(@stovmt)).multiply(ZAHL5)).add(@stovmt)).set_scale(0, BigDecimal.ROUND_DOWN)
685
+ end
686
+ end
687
+ end
688
+
689
+ def upmlst
690
+ if @zve.compare_to(ZAHL1) == -1
691
+ @zve = BigDecimal.ZERO
692
+ @x = BigDecimal.ZERO
693
+ else
694
+ @x = (@zve.divide(BigDecimal.value_of(@kztab))).set_scale(0, BigDecimal.ROUND_DOWN)
695
+ end
696
+ if @stkl < 5
697
+ uptab09
698
+ else
699
+ mst5_6
700
+ end
701
+ end
702
+
703
+ def upevp
704
+ if @krv > 0
705
+ @vsp1 = BigDecimal.ZERO
706
+ else
707
+ if @zre4vp.compare_to(BigDecimal.value_of(64800)) == 1
708
+ @zre4vp = BigDecimal.value_of(64800)
709
+ end
710
+ @vsp1 = (@zre4vp.multiply(BigDecimal.value_of(0.36))).set_scale(2, BigDecimal.ROUND_DOWN)
711
+ @vsp1 = (@vsp1.multiply(BigDecimal.value_of(0.0995))).set_scale(2, BigDecimal.ROUND_DOWN)
712
+ end
713
+ @vsp2 = (@zre4vp.multiply(BigDecimal.value_of(0.11))).set_scale(2, BigDecimal.ROUND_DOWN)
714
+ @vhb = (BigDecimal.value_of(@kztab).multiply(BigDecimal.value_of(1500))).set_scale(2, BigDecimal.ROUND_DOWN)
715
+ if @vsp2.compare_to(@vhb) == 1
716
+ @vsp2 = @vhb
717
+ end
718
+ @vspn = (@vsp1.add(@vsp2)).set_scale(0, BigDecimal.ROUND_UP)
719
+ mvsp
720
+ if @vspn.compare_to(@vsp) == 1
721
+ @vsp = @vspn.set_scale(2, BigDecimal.ROUND_DOWN)
722
+ end
723
+ end
724
+
725
+ def mvsp
726
+ @vspo = (@zre4vp.multiply(BigDecimal.value_of(0.2))).set_scale(2, BigDecimal.ROUND_DOWN)
727
+ @vspvor = (BigDecimal.value_of(@kztab).multiply(BigDecimal.value_of(3068))).set_scale(2, BigDecimal.ROUND_DOWN)
728
+ @vspmax1 = BigDecimal.value_of(@kztab).multiply(BigDecimal.value_of(1334))
729
+ @vspmax2 = BigDecimal.value_of(@kztab).multiply(BigDecimal.value_of(667))
730
+ @vspkurz = BigDecimal.value_of(@kztab).multiply(BigDecimal.value_of(1134))
731
+ if @krv == 1
732
+ if @vspo.compare_to(@vspkurz) == 1
733
+ @vsp = @vspkurz
734
+ else
735
+ @vsp = @vspo.set_scale(0, BigDecimal.ROUND_DOWN)
736
+ end
737
+ else
738
+ umvsp
739
+ end
740
+ end
741
+
742
+ def umvsp
743
+ @vspvor = (@vspvor.subtract(@zre4vp.multiply(BigDecimal.value_of(0.16)))).set_scale(2, BigDecimal.ROUND_DOWN)
744
+ if @vspvor.compare_to(BigDecimal.ZERO) == -1
745
+ @vspvor = BigDecimal.ZERO
746
+ end
747
+ if @vspo.compare_to(@vspvor) == 1
748
+ @vsp = @vspvor
749
+ @vsprest = @vspo.subtract(@vspvor)
750
+ if @vsprest.compare_to(@vspmax1) == 1
751
+ @vsp = @vsp.add(@vspmax1)
752
+ @vsprest = (@vsprest.subtract(@vspmax1)).divide(ZAHL2, 2, BigDecimal.ROUND_UP)
753
+ if @vsprest.compare_to(@vspmax2) == 1
754
+ @vsp = (@vsp.add(@vspmax2)).set_scale(0, BigDecimal.ROUND_DOWN)
755
+ else
756
+ @vsp = (@vsp.add(@vsprest)).set_scale(0, BigDecimal.ROUND_DOWN)
757
+ end
758
+ else
759
+ @vsp = (@vsp.add(@vsprest)).set_scale(0, BigDecimal.ROUND_DOWN)
760
+ end
761
+ else
762
+ @vsp = @vspo.set_scale(0, BigDecimal.ROUND_DOWN)
763
+ end
764
+ end
765
+
766
+ def mst5_6
767
+ @zzx = @x
768
+ if @zzx.compare_to(BigDecimal.value_of(26276)) == 1
769
+ @zx = BigDecimal.value_of(26276)
770
+ up5_6
771
+ if @zzx.compare_to(BigDecimal.value_of(200320)) == 1
772
+ @st = (@st.add((BigDecimal.value_of(200320).subtract(BigDecimal.value_of(26276))).multiply(BigDecimal.value_of(0.42)))).set_scale(0, BigDecimal.ROUND_DOWN)
773
+ @st = (@st.add((@zzx.subtract(BigDecimal.value_of(200320))).multiply(BigDecimal.value_of(0.45)))).set_scale(0, BigDecimal.ROUND_DOWN)
774
+ else
775
+ @st = (@st.add((@zzx.subtract(BigDecimal.value_of(26276))).multiply(BigDecimal.value_of(0.42)))).set_scale(0, BigDecimal.ROUND_DOWN)
776
+ end
777
+ else
778
+ @zx = @zzx
779
+ up5_6
780
+ if @zzx.compare_to(BigDecimal.value_of(9225)) == 1
781
+ @vergl = @st
782
+ @zx = BigDecimal.value_of(9225)
783
+ up5_6
784
+ @hoch = (@st.add((@zzx.subtract(BigDecimal.value_of(9225))).multiply(BigDecimal.value_of(0.42)))).set_scale(0, BigDecimal.ROUND_DOWN)
785
+ if @hoch.compare_to(@vergl) == -1
786
+ @st = @hoch
787
+ else
788
+ @st = @vergl
789
+ end
790
+ end
791
+ end
792
+ end
793
+
794
+ def up5_6
795
+ @x = (@zx.multiply(BigDecimal.value_of(1.25))).set_scale(2, BigDecimal.ROUND_DOWN)
796
+ uptab09
797
+ @st1 = @st
798
+ @x = (@zx.multiply(BigDecimal.value_of(0.75))).set_scale(2, BigDecimal.ROUND_DOWN)
799
+ uptab09
800
+ @st2 = @st
801
+ @diff = (@st1.subtract(@st2)).multiply(ZAHL2)
802
+ @mist = (@zx.multiply(BigDecimal.value_of(0.14))).set_scale(0, BigDecimal.ROUND_DOWN)
803
+ if @mist.compare_to(@diff) == 1
804
+ @st = @mist
805
+ else
806
+ @st = @diff
807
+ end
808
+ end
809
+
810
+ def msolz
811
+ @solzfrei = BigDecimal.value_of(972 * @kztab)
812
+ if @jbmg.compare_to(@solzfrei) == 1
813
+ @solzj = (@jbmg.multiply(BigDecimal.value_of(5.5))).divide(ZAHL100).set_scale(2, BigDecimal.ROUND_DOWN)
814
+ @solzmin = (@jbmg.subtract(@solzfrei)).multiply(BigDecimal.value_of(20)).divide(ZAHL100).set_scale(2, BigDecimal.ROUND_DOWN)
815
+ if @solzmin.compare_to(@solzj) == -1
816
+ @solzj = @solzmin
817
+ end
818
+ @jw = @solzj.multiply(ZAHL100).set_scale(0, BigDecimal.ROUND_DOWN)
819
+ upanteil
820
+ @solzlzz = @anteil1
821
+ else
822
+ @solzlzz = BigDecimal.ZERO
823
+ end
824
+ if @r > 0
825
+ @jw = @jbmg.multiply(ZAHL100)
826
+ upanteil
827
+ @bk = @anteil1
828
+ else
829
+ @bk = BigDecimal.ZERO
830
+ end
831
+ end
832
+
833
+ def upanteil
834
+ if @lzz == 1
835
+ @anteil1 = @jw
836
+ @anteil2 = @jw
837
+ else
838
+ if @lzz == 2
839
+ @anteil1 = @jw.divide(ZAHL12, 0, BigDecimal.ROUND_DOWN)
840
+ @anteil2 = @jw.divide(ZAHL12, 0, BigDecimal.ROUND_UP)
841
+ else
842
+ if @lzz == 3
843
+ @anteil1 = (@jw.multiply(ZAHL7)).divide(ZAHL360, 0, BigDecimal.ROUND_DOWN)
844
+ @anteil2 = (@jw.multiply(ZAHL7)).divide(ZAHL360, 0, BigDecimal.ROUND_UP)
845
+ else
846
+ @anteil1 = @jw.divide(ZAHL360, 0, BigDecimal.ROUND_DOWN)
847
+ @anteil2 = @jw.divide(ZAHL360, 0, BigDecimal.ROUND_UP)
848
+ end
849
+ end
850
+ end
851
+ end
852
+
853
+ def msonst
854
+ @lzz = 1
855
+ if @zmvb == 0
856
+ @zmvb = 12
857
+ end
858
+ if @sonstb.compare_to(BigDecimal.ZERO) == 0
859
+ @lstso = BigDecimal.ZERO
860
+ @sts = BigDecimal.ZERO
861
+ @solzs = BigDecimal.ZERO
862
+ @bks = BigDecimal.ZERO
863
+ else
864
+ mosonst
865
+ @zre4j = ((@jre4.add(@sonstb)).divide(ZAHL100)).set_scale(2, BigDecimal.ROUND_DOWN)
866
+ @zvbezj = ((@jvbez.add(@vbs)).divide(ZAHL100)).set_scale(2, BigDecimal.ROUND_DOWN)
867
+ @vbezbso = @sterbe
868
+ mre4sonst
869
+ mlstjahr
870
+ @lstso = @st.multiply(ZAHL100)
871
+ @sts = @lstso.subtract(@lstoso)
872
+ if @sts.compare_to(BigDecimal.ZERO) == -1
873
+ @sts = BigDecimal.ZERO
874
+ end
875
+ @solzs = @sts.multiply(BigDecimal.value_of(5.5)).divide(ZAHL100, 0, BigDecimal.ROUND_DOWN)
876
+ if @r > 0
877
+ @bks = @sts
878
+ else
879
+ @bks = BigDecimal.ZERO
880
+ end
881
+ end
882
+ end
883
+
884
+ def mvmt
885
+ if @vkapa.compare_to(BigDecimal.ZERO) == -1
886
+ @vkapa = BigDecimal.ZERO
887
+ end
888
+ if (@vmt.add(@vkapa)).compare_to(BigDecimal.ZERO) == 1
889
+ if @lstso.compare_to(BigDecimal.ZERO) == 0
890
+ mosonst
891
+ @lst1 = @lstoso
892
+ else
893
+ @lst1 = @lstso
894
+ end
895
+ @vbezbso = @sterbe.add(@vkapa)
896
+ @zre4j = ((@jre4.add(@sonstb).add(@vmt).add(@vkapa)).divide(ZAHL100)).set_scale(2, BigDecimal.ROUND_DOWN)
897
+ @zvbezj = ((@jvbez.add(@vbs).add(@vkapa)).divide(ZAHL100)).set_scale(2, BigDecimal.ROUND_DOWN)
898
+ mre4sonst
899
+ mlstjahr
900
+ @lst3 = @st.multiply(ZAHL100)
901
+ @kennvmt = 1
902
+ mlstjahr
903
+ @lst2 = @st.multiply(ZAHL100)
904
+ @stv = @lst2.subtract(@lst1)
905
+ @lst3 = @lst3.subtract(@lst1)
906
+ if @lst3.compare_to(@stv) == -1
907
+ @stv = @lst3
908
+ end
909
+ if @stv.compare_to(BigDecimal.ZERO) == -1
910
+ @stv = BigDecimal.ZERO
911
+ end
912
+ @solzv = ((@stv.multiply(BigDecimal.value_of(5.5))).divide(ZAHL100)).set_scale(0, BigDecimal.ROUND_DOWN)
913
+ if @r > 0
914
+ @bkv = @stv
915
+ else
916
+ @bkv = BigDecimal.ZERO
917
+ end
918
+ else
919
+ @stv = BigDecimal.ZERO
920
+ @solzv = BigDecimal.ZERO
921
+ @bkv = BigDecimal.ZERO
922
+ end
923
+ end
924
+
925
+ def mosonst
926
+ @zre4j = (@jre4.divide(ZAHL100)).set_scale(2, BigDecimal.ROUND_DOWN)
927
+ @zvbezj = (@jvbez.divide(ZAHL100)).set_scale(2, BigDecimal.ROUND_DOWN)
928
+ @jlfreib = @jfreib.divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
929
+ @jlhinzu = @jhinzu.divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
930
+ mre4
931
+ mre4abz
932
+ mztabfb
933
+ mlstjahr
934
+ @lstoso = @st.multiply(ZAHL100)
935
+ end
936
+
937
+ def mre4sonst
938
+ mre4
939
+ @fvb = @fvbso
940
+ mre4abz
941
+ @fvbz = @fvbzso
942
+ mztabfb
943
+ end
944
+
945
+ def uptab09
946
+ if @x.compare_to(BigDecimal.value_of(7835)) == -1
947
+ @st = BigDecimal.ZERO
948
+ else
949
+ if @x.compare_to(BigDecimal.value_of(13140)) == -1
950
+ @y = (@x.subtract(BigDecimal.value_of(7834))).divide(BigDecimal.value_of(10000), 6, BigDecimal.ROUND_DOWN)
951
+ @rw = @y.multiply(BigDecimal.value_of(939.68))
952
+ @rw = @rw.add(BigDecimal.value_of(1400))
953
+ @st = (@rw.multiply(@y)).set_scale(0, BigDecimal.ROUND_DOWN)
954
+ else
955
+ if @x.compare_to(BigDecimal.value_of(52552)) == -1
956
+ @y = (@x.subtract(BigDecimal.value_of(13139))).divide(BigDecimal.value_of(10000), 6, BigDecimal.ROUND_DOWN)
957
+ @rw = @y.multiply(BigDecimal.value_of(228.74))
958
+ @rw = @rw.add(BigDecimal.value_of(2397))
959
+ @rw = @rw.multiply(@y)
960
+ @st = (@rw.add(BigDecimal.value_of(1007))).set_scale(0, BigDecimal.ROUND_DOWN)
961
+ else
962
+ if @x.compare_to(BigDecimal.value_of(250401)) == -1
963
+ @st = ((@x.multiply(BigDecimal.value_of(0.42))).subtract(BigDecimal.value_of(8064))).set_scale(0, BigDecimal.ROUND_DOWN)
964
+ else
965
+ @st = ((@x.multiply(BigDecimal.value_of(0.45))).subtract(BigDecimal.value_of(15576))).set_scale(0, BigDecimal.ROUND_DOWN)
966
+ end
967
+ end
968
+ end
969
+ end
970
+ @st = @st.multiply(BigDecimal.value_of(@kztab))
971
+ end
972
+
973
+ end
974
+ end
975
+ end