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