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