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