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