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,1070 @@
1
+ module Taxger
2
+ module Lohnsteuer
3
+ class Lohnsteuer2011
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 mre4jl
555
+ if @lzz == 1
556
+ @zre4j = @re4.divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
557
+ @zvbezj = @vbez.divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
558
+ @jlfreib = @lzzfreib.divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
559
+ @jlhinzu = @lzzhinzu.divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
560
+ else
561
+ if @lzz == 2
562
+ @zre4j = (@re4.multiply(ZAHL12)).divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
563
+ @zvbezj = (@vbez.multiply(ZAHL12)).divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
564
+ @jlfreib = (@lzzfreib.multiply(ZAHL12)).divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
565
+ @jlhinzu = (@lzzhinzu.multiply(ZAHL12)).divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
566
+ else
567
+ if @lzz == 3
568
+ @zre4j = (@re4.multiply(ZAHL360)).divide(ZAHL700, 2, BigDecimal.ROUND_DOWN)
569
+ @zvbezj = (@vbez.multiply(ZAHL360)).divide(ZAHL700, 2, BigDecimal.ROUND_DOWN)
570
+ @jlfreib = (@lzzfreib.multiply(ZAHL360)).divide(ZAHL700, 2, BigDecimal.ROUND_DOWN)
571
+ @jlhinzu = (@lzzhinzu.multiply(ZAHL360)).divide(ZAHL700, 2, BigDecimal.ROUND_DOWN)
572
+ else
573
+ @zre4j = (@re4.multiply(ZAHL360)).divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
574
+ @zvbezj = (@vbez.multiply(ZAHL360)).divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
575
+ @jlfreib = (@lzzfreib.multiply(ZAHL360)).divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
576
+ @jlhinzu = (@lzzhinzu.multiply(ZAHL360)).divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
577
+ end
578
+ end
579
+ end
580
+ if @af == 0
581
+ @f = 1
582
+ end
583
+ end
584
+
585
+ def mre4
586
+ if @zvbezj.compare_to(BigDecimal.ZERO) == 0
587
+ @fvbz = BigDecimal.ZERO
588
+ @fvb = BigDecimal.ZERO
589
+ @fvbzso = BigDecimal.ZERO
590
+ @fvbso = BigDecimal.ZERO
591
+ else
592
+ if @vjahr < 2006
593
+ @j = 1
594
+ else
595
+ if @vjahr < 2040
596
+ @j = @vjahr - 2004
597
+ else
598
+ @j = 36
599
+ end
600
+ end
601
+ if @lzz == 1
602
+ @vbezb = (@vbezm.multiply(BigDecimal.value_of(@zmvb))).add(@vbezs)
603
+ @hfvb = TAB2[@j].divide(ZAHL12).multiply(BigDecimal.value_of(@zmvb))
604
+ @fvbz = TAB3[@j].divide(ZAHL12).multiply(BigDecimal.value_of(@zmvb)).set_scale(0, BigDecimal.ROUND_UP)
605
+ else
606
+ @vbezb = ((@vbezm.multiply(ZAHL12)).add(@vbezs)).set_scale(2, BigDecimal.ROUND_DOWN)
607
+ @hfvb = TAB2[@j]
608
+ @fvbz = TAB3[@j]
609
+ end
610
+ @fvb = ((@vbezb.multiply(TAB1[@j]))).divide(ZAHL100).set_scale(2, BigDecimal.ROUND_UP)
611
+ if @fvb.compare_to(@hfvb) == 1
612
+ @fvb = @hfvb
613
+ end
614
+ @fvbso = (@fvb.add((@vbezbso.multiply(TAB1[@j])).divide(ZAHL100))).set_scale(2, BigDecimal.ROUND_UP)
615
+ if @fvbso.compare_to(TAB2[@j]) == 1
616
+ @fvbso = TAB2[@j]
617
+ end
618
+ @hfvbzso = (((@vbezb.add(@vbezbso)).divide(ZAHL100)).subtract(@fvbso)).set_scale(2, BigDecimal.ROUND_DOWN)
619
+ @fvbzso = (@fvbz.add((@vbezbso).divide(ZAHL100))).set_scale(0, BigDecimal.ROUND_UP)
620
+ if @fvbzso.compare_to(@hfvbzso) == 1
621
+ @fvbzso = @hfvbzso.set_scale(0, BigDecimal.ROUND_UP)
622
+ end
623
+ if @fvbzso.compare_to(TAB3[@j]) == 1
624
+ @fvbzso = TAB3[@j]
625
+ end
626
+ @hfvbz = ((@vbezb.divide(ZAHL100)).subtract(@fvb)).set_scale(2, BigDecimal.ROUND_DOWN)
627
+ if @fvbz.compare_to(@hfvbz) == 1
628
+ @fvbz = @hfvbz.set_scale(0, BigDecimal.ROUND_UP)
629
+ end
630
+ end
631
+ mre4alte
632
+ end
633
+
634
+ def mre4alte
635
+ if @alter1 == 0
636
+ @alte = BigDecimal.ZERO
637
+ else
638
+ if @ajahr < 2006
639
+ @k = 1
640
+ else
641
+ if @ajahr < 2040
642
+ @k = @ajahr - 2004
643
+ else
644
+ @k = 36
645
+ end
646
+ end
647
+ @bmg = @zre4j.subtract(@zvbezj)
648
+ @alte = (@bmg.multiply(TAB4[@k])).set_scale(0, BigDecimal.ROUND_UP)
649
+ @hbalte = TAB5[@k]
650
+ if @alte.compare_to(@hbalte) == 1
651
+ @alte = @hbalte
652
+ end
653
+ end
654
+ end
655
+
656
+ def mre4abz
657
+ @zre4 = (@zre4j.subtract(@fvb).subtract(@alte).subtract(@jlfreib).add(@jlhinzu)).set_scale(2, BigDecimal.ROUND_DOWN)
658
+ if @zre4.compare_to(BigDecimal.ZERO) == -1
659
+ @zre4 = BigDecimal.ZERO
660
+ end
661
+ @zre4vp = @zre4j
662
+ if @kennvmt == 2
663
+ @zre4vp = @zre4vp.subtract(@entsch.divide(ZAHL100)).set_scale(2, BigDecimal.ROUND_DOWN)
664
+ end
665
+ @zvbez = @zvbezj.subtract(@fvb).set_scale(2, BigDecimal.ROUND_DOWN)
666
+ if @zvbez.compare_to(BigDecimal.ZERO) == -1
667
+ @zvbez = BigDecimal.ZERO
668
+ end
669
+ end
670
+
671
+ def mztabfb
672
+ @anp = BigDecimal.ZERO
673
+ if @zvbez.compare_to(BigDecimal.ZERO) >= 0 && @zvbez.compare_to(@fvbz) == -1
674
+ @fvbz = @zvbez.set_scale(0, BigDecimal.ROUND_DOWN)
675
+ end
676
+ if @stkl < 6
677
+ if @zvbez.compare_to(BigDecimal.ZERO) == 1
678
+ if (@zvbez.subtract(@fvbz)).compare_to(BigDecimal.value_of(102)) == -1
679
+ @anp = (@zvbez.subtract(@fvbz)).set_scale(0, BigDecimal.ROUND_UP)
680
+ else
681
+ @anp = BigDecimal.value_of(102)
682
+ end
683
+ end
684
+ else
685
+ @fvbz = BigDecimal.value_of(0)
686
+ @fvbzso = BigDecimal.value_of(0)
687
+ end
688
+ if @stkl < 6
689
+ if @zre4.compare_to(@zvbez) == 1
690
+ if (@zre4.subtract(@zvbez)).compare_to(BigDecimal.value_of(920)) == -1
691
+ @anp = (@anp.add(@zre4).subtract(@zvbez)).set_scale(0, BigDecimal.ROUND_UP)
692
+ else
693
+ @anp = @anp.add(BigDecimal.value_of(920))
694
+ end
695
+ end
696
+ end
697
+ @kztab = 1
698
+ if @stkl == 1
699
+ @sap = BigDecimal.value_of(36)
700
+ @kfb = (@zkf.multiply(BigDecimal.value_of(7008))).set_scale(0, BigDecimal.ROUND_DOWN)
701
+ else
702
+ if @stkl == 2
703
+ @efa = BigDecimal.value_of(1308)
704
+ @sap = BigDecimal.value_of(36)
705
+ @kfb = (@zkf.multiply(BigDecimal.value_of(7008))).set_scale(0, BigDecimal.ROUND_DOWN)
706
+ else
707
+ if @stkl == 3
708
+ @kztab = 2
709
+ @sap = BigDecimal.value_of(36)
710
+ @kfb = (@zkf.multiply(BigDecimal.value_of(7008))).set_scale(0, BigDecimal.ROUND_DOWN)
711
+ else
712
+ if @stkl == 4
713
+ @sap = BigDecimal.value_of(36)
714
+ @kfb = (@zkf.multiply(BigDecimal.value_of(3504))).set_scale(0, BigDecimal.ROUND_DOWN)
715
+ else
716
+ if @stkl == 5
717
+ @sap = BigDecimal.value_of(36)
718
+ @kfb = BigDecimal.ZERO
719
+ else
720
+ @kfb = BigDecimal.ZERO
721
+ end
722
+ end
723
+ end
724
+ end
725
+ end
726
+ @ztabfb = (@efa.add(@anp).add(@sap).add(@fvbz)).set_scale(2, BigDecimal.ROUND_DOWN)
727
+ end
728
+
729
+ def mlstjahr
730
+ upevp
731
+ if @kennvmt != 1
732
+ @zve = (@zre4.subtract(@ztabfb).subtract(@vsp)).set_scale(2, BigDecimal.ROUND_DOWN)
733
+ upmlst
734
+ else
735
+ @zve = (@zre4.subtract(@ztabfb).subtract(@vsp).subtract((@vmt).divide(ZAHL100)).subtract((@vkapa).divide(ZAHL100))).set_scale(2, BigDecimal.ROUND_DOWN)
736
+ if @zve.compare_to(BigDecimal.ZERO) == -1
737
+ @zve = @zve.add(@vmt.divide(ZAHL100)).add(@vkapa.divide(ZAHL100)).divide(ZAHL5).set_scale(2, BigDecimal.ROUND_DOWN)
738
+ upmlst
739
+ @st = (@st.multiply(ZAHL5)).set_scale(0, BigDecimal.ROUND_DOWN)
740
+ else
741
+ upmlst
742
+ @stovmt = @st
743
+ @zve = (@zve.add(((@vmt.add(@vkapa)).divide(ZAHL500)))).set_scale(2, BigDecimal.ROUND_DOWN)
744
+ upmlst
745
+ @st = (((@st.subtract(@stovmt)).multiply(ZAHL5)).add(@stovmt)).set_scale(0, BigDecimal.ROUND_DOWN)
746
+ end
747
+ end
748
+ end
749
+
750
+ def upmlst
751
+ if @zve.compare_to(ZAHL1) == -1
752
+ @zve = BigDecimal.ZERO
753
+ @x = BigDecimal.ZERO
754
+ else
755
+ @x = (@zve.divide(BigDecimal.value_of(@kztab))).set_scale(0, BigDecimal.ROUND_DOWN)
756
+ end
757
+ if @stkl < 5
758
+ uptab10
759
+ else
760
+ mst5_6
761
+ end
762
+ end
763
+
764
+ def upevp
765
+ if @krv > 1
766
+ @vsp1 = BigDecimal.ZERO
767
+ else
768
+ if @krv == 0
769
+ if @zre4vp.compare_to(BigDecimal.value_of(66000)) == 1
770
+ @zre4vp = BigDecimal.value_of(66000)
771
+ end
772
+ else
773
+ if @zre4vp.compare_to(@rentbemessungsgr_ost_2011) == 1
774
+ @zre4vp = @rentbemessungsgr_ost_2011
775
+ end
776
+ end
777
+ @vsp1 = (@zre4vp.multiply(BigDecimal.value_of(0.44))).set_scale(2, BigDecimal.ROUND_DOWN)
778
+ @vsp1 = (@vsp1.multiply(BigDecimal.value_of(0.0995))).set_scale(2, BigDecimal.ROUND_DOWN)
779
+ end
780
+ @vsp2 = (@zre4vp.multiply(BigDecimal.value_of(0.12))).set_scale(2, BigDecimal.ROUND_DOWN)
781
+ if @stkl == 3
782
+ @vhb = BigDecimal.value_of(3000)
783
+ else
784
+ @vhb = BigDecimal.value_of(1900)
785
+ end
786
+ if @vsp2.compare_to(@vhb) == 1
787
+ @vsp2 = @vhb
788
+ end
789
+ @vspn = (@vsp1.add(@vsp2)).set_scale(0, BigDecimal.ROUND_UP)
790
+ mvsp
791
+ if @vspn.compare_to(@vsp) == 1
792
+ @vsp = @vspn.set_scale(2, BigDecimal.ROUND_DOWN)
793
+ end
794
+ end
795
+
796
+ def mvsp
797
+ if @zre4vp.compare_to(BigDecimal.value_of(44550)) == 1
798
+ @zre4vp = BigDecimal.value_of(44550)
799
+ end
800
+ if @pkv > 0
801
+ if @stkl == 6
802
+ @vsp = BigDecimal.ZERO
803
+ else
804
+ @vsp = @pkpv.multiply(ZAHL12).divide(ZAHL100)
805
+ if @pkv == 2
806
+ @kvsatzag = BigDecimal.value_of(0.07).set_scale(5)
807
+ if @pvs == 1
808
+ @pvsatzag = BigDecimal.value_of(0.00475).set_scale(5)
809
+ else
810
+ @pvsatzag = BigDecimal.value_of(0.00975).set_scale(5)
811
+ end
812
+ @vsp = @vsp.subtract(@zre4vp.multiply(@kvsatzag.add(@pvsatzag))).set_scale(2, BigDecimal.ROUND_DOWN)
813
+ end
814
+ end
815
+ else
816
+ @kvsatzan = BigDecimal.value_of(0.079).set_scale(5)
817
+ if @pvs == 1
818
+ @pvsatzan = BigDecimal.value_of(0.01475).set_scale(5)
819
+ else
820
+ @pvsatzan = BigDecimal.value_of(0.00975).set_scale(5)
821
+ end
822
+ if @pvz == 1
823
+ @pvsatzan = @pvsatzan.add(BigDecimal.value_of(0.0025))
824
+ end
825
+ @vsp = @zre4vp.multiply(@kvsatzan.add(@pvsatzan)).set_scale(2, BigDecimal.ROUND_DOWN)
826
+ end
827
+ @vsp = @vsp.add(@vsp1).set_scale(0, BigDecimal.ROUND_UP)
828
+ end
829
+
830
+ def umvsp
831
+ @vspvor = (@vspvor.subtract(@zre4vp.multiply(BigDecimal.value_of(0.16)))).set_scale(2, BigDecimal.ROUND_DOWN)
832
+ if @vspvor.compare_to(BigDecimal.ZERO) == -1
833
+ @vspvor = BigDecimal.ZERO
834
+ end
835
+ if @vspo.compare_to(@vspvor) == 1
836
+ @vsp = @vspvor
837
+ @vsprest = @vspo.subtract(@vspvor)
838
+ if @vsprest.compare_to(@vspmax1) == 1
839
+ @vsp = @vsp.add(@vspmax1)
840
+ @vsprest = (@vsprest.subtract(@vspmax1)).divide(ZAHL2, 2, BigDecimal.ROUND_UP)
841
+ if @vsprest.compare_to(@vspmax2) == 1
842
+ @vsp = (@vsp.add(@vspmax2)).set_scale(0, BigDecimal.ROUND_DOWN)
843
+ else
844
+ @vsp = (@vsp.add(@vsprest)).set_scale(0, BigDecimal.ROUND_DOWN)
845
+ end
846
+ else
847
+ @vsp = (@vsp.add(@vsprest)).set_scale(0, BigDecimal.ROUND_DOWN)
848
+ end
849
+ else
850
+ @vsp = @vspo.set_scale(0, BigDecimal.ROUND_DOWN)
851
+ end
852
+ end
853
+
854
+ def mst5_6
855
+ @zzx = @x
856
+ if @zzx.compare_to(BigDecimal.value_of(26441)) == 1
857
+ @zx = BigDecimal.value_of(26441)
858
+ up5_6
859
+ if @zzx.compare_to(BigDecimal.value_of(200584)) == 1
860
+ @st = (@st.add((BigDecimal.value_of(200584).subtract(BigDecimal.value_of(26441))).multiply(BigDecimal.value_of(0.42)))).set_scale(0, BigDecimal.ROUND_DOWN)
861
+ @st = (@st.add((@zzx.subtract(BigDecimal.value_of(200584))).multiply(BigDecimal.value_of(0.45)))).set_scale(0, BigDecimal.ROUND_DOWN)
862
+ else
863
+ @st = (@st.add((@zzx.subtract(BigDecimal.value_of(26441))).multiply(BigDecimal.value_of(0.42)))).set_scale(0, BigDecimal.ROUND_DOWN)
864
+ end
865
+ else
866
+ @zx = @zzx
867
+ up5_6
868
+ if @zzx.compare_to(BigDecimal.value_of(9429)) == 1
869
+ @vergl = @st
870
+ @zx = BigDecimal.value_of(9429)
871
+ up5_6
872
+ @hoch = (@st.add((@zzx.subtract(BigDecimal.value_of(9429))).multiply(BigDecimal.value_of(0.42)))).set_scale(0, BigDecimal.ROUND_DOWN)
873
+ if @hoch.compare_to(@vergl) == -1
874
+ @st = @hoch
875
+ else
876
+ @st = @vergl
877
+ end
878
+ end
879
+ end
880
+ end
881
+
882
+ def up5_6
883
+ @x = (@zx.multiply(BigDecimal.value_of(1.25))).set_scale(2, BigDecimal.ROUND_DOWN)
884
+ uptab10
885
+ @st1 = @st
886
+ @x = (@zx.multiply(BigDecimal.value_of(0.75))).set_scale(2, BigDecimal.ROUND_DOWN)
887
+ uptab10
888
+ @st2 = @st
889
+ @diff = (@st1.subtract(@st2)).multiply(ZAHL2)
890
+ @mist = (@zx.multiply(BigDecimal.value_of(0.14))).set_scale(0, BigDecimal.ROUND_DOWN)
891
+ if @mist.compare_to(@diff) == 1
892
+ @st = @mist
893
+ else
894
+ @st = @diff
895
+ end
896
+ end
897
+
898
+ def msolz
899
+ @solzfrei = BigDecimal.value_of(972 * @kztab)
900
+ if @jbmg.compare_to(@solzfrei) == 1
901
+ @solzj = (@jbmg.multiply(BigDecimal.value_of(5.5))).divide(ZAHL100).set_scale(2, BigDecimal.ROUND_DOWN)
902
+ @solzmin = (@jbmg.subtract(@solzfrei)).multiply(BigDecimal.value_of(20)).divide(ZAHL100).set_scale(2, BigDecimal.ROUND_DOWN)
903
+ if @solzmin.compare_to(@solzj) == -1
904
+ @solzj = @solzmin
905
+ end
906
+ @jw = @solzj.multiply(ZAHL100).set_scale(0, BigDecimal.ROUND_DOWN)
907
+ upanteil
908
+ @solzlzz = @anteil1
909
+ else
910
+ @solzlzz = BigDecimal.ZERO
911
+ end
912
+ if @r > 0
913
+ @jw = @jbmg.multiply(ZAHL100)
914
+ upanteil
915
+ @bk = @anteil1
916
+ else
917
+ @bk = BigDecimal.ZERO
918
+ end
919
+ end
920
+
921
+ def upanteil
922
+ if @lzz == 1
923
+ @anteil1 = @jw
924
+ @anteil2 = @jw
925
+ else
926
+ if @lzz == 2
927
+ @anteil1 = @jw.divide(ZAHL12, 0, BigDecimal.ROUND_DOWN)
928
+ @anteil2 = @jw.divide(ZAHL12, 0, BigDecimal.ROUND_UP)
929
+ else
930
+ if @lzz == 3
931
+ @anteil1 = (@jw.multiply(ZAHL7)).divide(ZAHL360, 0, BigDecimal.ROUND_DOWN)
932
+ @anteil2 = (@jw.multiply(ZAHL7)).divide(ZAHL360, 0, BigDecimal.ROUND_UP)
933
+ else
934
+ @anteil1 = @jw.divide(ZAHL360, 0, BigDecimal.ROUND_DOWN)
935
+ @anteil2 = @jw.divide(ZAHL360, 0, BigDecimal.ROUND_UP)
936
+ end
937
+ end
938
+ end
939
+ end
940
+
941
+ def msonst
942
+ @lzz = 1
943
+ if @zmvb == 0
944
+ @zmvb = 12
945
+ end
946
+ if @sonstb.compare_to(BigDecimal.ZERO) == 0
947
+ @lstso = BigDecimal.ZERO
948
+ @sts = BigDecimal.ZERO
949
+ @solzs = BigDecimal.ZERO
950
+ @bks = BigDecimal.ZERO
951
+ else
952
+ mosonst
953
+ @zre4j = ((@jre4.add(@sonstb)).divide(ZAHL100)).set_scale(2, BigDecimal.ROUND_DOWN)
954
+ @zvbezj = ((@jvbez.add(@vbs)).divide(ZAHL100)).set_scale(2, BigDecimal.ROUND_DOWN)
955
+ @vbezbso = @sterbe
956
+ mre4sonst
957
+ mlstjahr
958
+ @lstso = @st.multiply(ZAHL100)
959
+ @sts = @lstso.subtract(@lstoso).multiply(BigDecimal.value_of(@f)).divide(ZAHL100, 0, BigDecimal.ROUND_DOWN).multiply(ZAHL100)
960
+ if @sts.compare_to(BigDecimal.ZERO) == -1
961
+ @sts = BigDecimal.ZERO
962
+ end
963
+ @solzs = @sts.multiply(BigDecimal.value_of(5.5)).divide(ZAHL100, 0, BigDecimal.ROUND_DOWN)
964
+ if @r > 0
965
+ @bks = @sts
966
+ else
967
+ @bks = BigDecimal.ZERO
968
+ end
969
+ end
970
+ end
971
+
972
+ def mvmt
973
+ if @vkapa.compare_to(BigDecimal.ZERO) == -1
974
+ @vkapa = BigDecimal.ZERO
975
+ end
976
+ if (@vmt.add(@vkapa)).compare_to(BigDecimal.ZERO) == 1
977
+ if @lstso.compare_to(BigDecimal.ZERO) == 0
978
+ mosonst
979
+ @lst1 = @lstoso
980
+ else
981
+ @lst1 = @lstso
982
+ end
983
+ @vbezbso = @sterbe.add(@vkapa)
984
+ @zre4j = ((@jre4.add(@sonstb).add(@vmt).add(@vkapa)).divide(ZAHL100)).set_scale(2, BigDecimal.ROUND_DOWN)
985
+ @zvbezj = ((@jvbez.add(@vbs).add(@vkapa)).divide(ZAHL100)).set_scale(2, BigDecimal.ROUND_DOWN)
986
+ @kennvmt = 2
987
+ mre4sonst
988
+ mlstjahr
989
+ @lst3 = @st.multiply(ZAHL100)
990
+ mre4abz
991
+ @zre4vp = @zre4vp.subtract(@jre4ent.divide(ZAHL100)).subtract(@sonstent.divide(ZAHL100))
992
+ @kennvmt = 1
993
+ mlstjahr
994
+ @lst2 = @st.multiply(ZAHL100)
995
+ @stv = @lst2.subtract(@lst1)
996
+ @lst3 = @lst3.subtract(@lst1)
997
+ if @lst3.compare_to(@stv) == -1
998
+ @stv = @lst3
999
+ end
1000
+ if @stv.compare_to(BigDecimal.ZERO) == -1
1001
+ @stv = BigDecimal.ZERO
1002
+ else
1003
+ @stv = @stv.multiply(BigDecimal.value_of(@f)).divide(ZAHL100, 0, BigDecimal.ROUND_DOWN).multiply(ZAHL100)
1004
+ end
1005
+ @solzv = ((@stv.multiply(BigDecimal.value_of(5.5))).divide(ZAHL100)).set_scale(0, BigDecimal.ROUND_DOWN)
1006
+ if @r > 0
1007
+ @bkv = @stv
1008
+ else
1009
+ @bkv = BigDecimal.ZERO
1010
+ end
1011
+ else
1012
+ @stv = BigDecimal.ZERO
1013
+ @solzv = BigDecimal.ZERO
1014
+ @bkv = BigDecimal.ZERO
1015
+ end
1016
+ end
1017
+
1018
+ def mosonst
1019
+ @zre4j = (@jre4.divide(ZAHL100)).set_scale(2, BigDecimal.ROUND_DOWN)
1020
+ @zvbezj = (@jvbez.divide(ZAHL100)).set_scale(2, BigDecimal.ROUND_DOWN)
1021
+ @jlfreib = @jfreib.divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
1022
+ @jlhinzu = @jhinzu.divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
1023
+ mre4
1024
+ mre4abz
1025
+ @zre4vp = @zre4vp.subtract(@jre4ent.divide(ZAHL100))
1026
+ mztabfb
1027
+ mlstjahr
1028
+ @lstoso = @st.multiply(ZAHL100)
1029
+ end
1030
+
1031
+ def mre4sonst
1032
+ mre4
1033
+ @fvb = @fvbso
1034
+ mre4abz
1035
+ @zre4vp = @zre4vp.subtract(@jre4ent.divide(ZAHL100)).subtract(@sonstent.divide(ZAHL100))
1036
+ @fvbz = @fvbzso
1037
+ mztabfb
1038
+ end
1039
+
1040
+ def uptab10
1041
+ if @x.compare_to(BigDecimal.value_of(8005)) == -1
1042
+ @st = BigDecimal.ZERO
1043
+ else
1044
+ if @x.compare_to(BigDecimal.value_of(13470)) == -1
1045
+ @y = (@x.subtract(BigDecimal.value_of(8004))).divide(BigDecimal.value_of(10000), 6, BigDecimal.ROUND_DOWN)
1046
+ @rw = @y.multiply(BigDecimal.value_of(912.17))
1047
+ @rw = @rw.add(BigDecimal.value_of(1400))
1048
+ @st = (@rw.multiply(@y)).set_scale(0, BigDecimal.ROUND_DOWN)
1049
+ else
1050
+ if @x.compare_to(BigDecimal.value_of(52882)) == -1
1051
+ @y = (@x.subtract(BigDecimal.value_of(13469))).divide(BigDecimal.value_of(10000), 6, BigDecimal.ROUND_DOWN)
1052
+ @rw = @y.multiply(BigDecimal.value_of(228.74))
1053
+ @rw = @rw.add(BigDecimal.value_of(2397))
1054
+ @rw = @rw.multiply(@y)
1055
+ @st = (@rw.add(BigDecimal.value_of(1038))).set_scale(0, BigDecimal.ROUND_DOWN)
1056
+ else
1057
+ if @x.compare_to(BigDecimal.value_of(250731)) == -1
1058
+ @st = ((@x.multiply(BigDecimal.value_of(0.42))).subtract(BigDecimal.value_of(8172))).set_scale(0, BigDecimal.ROUND_DOWN)
1059
+ else
1060
+ @st = ((@x.multiply(BigDecimal.value_of(0.45))).subtract(BigDecimal.value_of(15694))).set_scale(0, BigDecimal.ROUND_DOWN)
1061
+ end
1062
+ end
1063
+ end
1064
+ end
1065
+ @st = @st.multiply(BigDecimal.value_of(@kztab))
1066
+ end
1067
+
1068
+ end
1069
+ end
1070
+ end