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