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,983 @@
1
+ module Taxger
2
+ module Lohnsteuer
3
+ class Lohnsteuer2008
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
+ ZAHL1 = BigDecimal.ONE
68
+ ZAHL2 = BigDecimal.new(2)
69
+ ZAHL3 = BigDecimal.new(3)
70
+ ZAHL4 = BigDecimal.new(4)
71
+ ZAHL5 = BigDecimal.new(5)
72
+ ZAHL6 = BigDecimal.new(6)
73
+ ZAHL7 = BigDecimal.new(7)
74
+ ZAHL8 = BigDecimal.new(8)
75
+ ZAHL9 = BigDecimal.new(9)
76
+ ZAHL10 = BigDecimal.TEN
77
+ ZAHL11 = BigDecimal.new(11)
78
+ ZAHL12 = BigDecimal.new(12)
79
+ ZAHL100 = BigDecimal.new(100)
80
+ ZAHL360 = BigDecimal.new(360)
81
+ ZAHL700 = BigDecimal.new(700)
82
+
83
+ attr_accessor :bk
84
+ attr_accessor :bks
85
+ attr_accessor :bkv
86
+ attr_accessor :lstlzz
87
+ attr_accessor :solzlzz
88
+ attr_accessor :solzs
89
+ attr_accessor :solzv
90
+ attr_accessor :sts
91
+ attr_accessor :stv
92
+
93
+ INPUT_VARS = [:ajahr, :alter1, :jfreib, :jhinzu, :jre4, :jvbez, :krv, :lzz, :lzzfreib, :lzzhinzu, :r, :re4, :sonstb, :sterbe, :stkl, :vbez, :vbezm, :vbezs, :vbs, :vjahr, :vkapa, :vmt, :zkf, :zmvb]
94
+ OUTPUT_VARS = [:bk, :bks, :bkv, :lstlzz, :solzlzz, :solzs, :solzv, :sts, :stv]
95
+ def initialize(params)
96
+ raise "Unknown parameters: #{params.keys - INPUT_VARS}" if params.keys - INPUT_VARS != []
97
+ # INPUTS
98
+
99
+ # Auf die Vollendung des 64. Lebensjahres folgende
100
+ # Kalenderjahr (erforderlich, wenn ALTER1=1)
101
+ @ajahr = 0 # int
102
+
103
+ # 1, wenn das 64. Lebensjahr zu Beginn des Kalenderjahres vollendet wurde, in dem
104
+ # der Lohnzahlungszeitraum endet (§ 24 a EStG), sonst = 0
105
+ @alter1 = 0 # int
106
+
107
+ # Jahresfreibetrag nach Maßgabe der Eintragungen auf der
108
+ # Lohnsteuerkarte in Cents (ggf. 0)
109
+ @jfreib = BigDecimal.new(0) # BigDecimal
110
+
111
+ # Jahreshinzurechnungsbetrag in Cents (ggf. 0)
112
+ @jhinzu = BigDecimal.new(0) # BigDecimal
113
+
114
+ # Voraussichtlicher Jahresarbeitslohn ohne sonstige Bezuege und
115
+ # ohne Verguetung fuer mehrjaehrige Taetigkeit in Cents (ggf. 0)
116
+ # Anmerkung: Die Eingabe dieses Feldes ist erforderlich bei Eingabe
117
+ # „sonstiger Bezuege“ (Feld SONSTB) oder bei Eingabe der „Verguetung
118
+ # fuer mehrjaehrige Taetigkeit“ (Feld VMT).
119
+ @jre4 = BigDecimal.new(0) # BigDecimal
120
+
121
+ # In JRE4 enthaltene Versorgungsbezuege in Cents (ggf. 0)
122
+ @jvbez = BigDecimal.new(0) # BigDecimal
123
+
124
+ # 2 = für den Arbeitnehmer wird die gekürzte Vorsorgepauschale nach dem Recht 2008 angesetzt
125
+ # (§ 10c Abs. 3 EStG n.F.), jedoch bei der Günstigerprüfung die ungekürzte Vorsorgepauschale
126
+ # nach dem Recht bis 2004 berücksichtigt (§ 10c Abs. 2 EStG a.F.); Änderung durch das JStG 2008.
127
+ # 1 = für den Arbeitnehmer wird die gekürzte Vorsorgepauschale angewandt (§ 10c Abs. 3 EStG),
128
+ # soweit nicht Arbeitnehmer der Fallgruppe 2.
129
+ # 0 = andere Arbeitnehmer.
130
+ # Für die Zuordnung sind allein die dem Arbeitgeber ohnehin bekannten Tatsachen maßgebend;
131
+ # zusätzliche Ermittlungen braucht der Arbeitgeber nicht anzustellen.
132
+ @krv = 0 # int
133
+
134
+ # Lohnzahlungszeitraum:
135
+ # 1 = Jahr
136
+ # 2 = Monat
137
+ # 3 = Woche
138
+ # 4 = Tag
139
+ @lzz = 0 # int
140
+
141
+ # In der Lohnsteuerkarte des Arbeitnehmers eingetragener Freibetrag für
142
+ # den Lohnzahlungszeitraum in Cent
143
+ @lzzfreib = BigDecimal.new(0) # BigDecimal
144
+
145
+ # In der Lohnsteuerkarte des Arbeitnehmers eingetragener Hinzurechnungsbetrag
146
+ # für den Lohnzahlungszeitraum in Cent
147
+ @lzzhinzu = BigDecimal.new(0) # BigDecimal
148
+
149
+ # Religionsgemeinschaft des Arbeitnehmers lt. Lohnsteuerkarte (bei
150
+ # keiner Religionszugehoerigkeit = 0)
151
+ @r = 0 # int
152
+
153
+ # Steuerpflichtiger Arbeitslohn vor Beruecksichtigung der Freibetraege
154
+ # fuer Versorgungsbezuege, des Altersentlastungsbetrags und des auf
155
+ # der Lohnsteuerkarte fuer den Lohnzahlungszeitraum eingetragenen
156
+ # Freibetrags in Cents.
157
+ @re4 = BigDecimal.new(0) # BigDecimal
158
+
159
+ # Sonstige Bezuege (ohne Verguetung aus mehrjaehriger Taetigkeit) einschliesslich
160
+ # Sterbegeld bei Versorgungsbezuegen sowie Kapitalauszahlungen/Abfindungen,
161
+ # soweit es sich nicht um Bezuege fuer mehrere Jahre handelt in Cents (ggf. 0)
162
+ @sonstb = BigDecimal.new(0) # BigDecimal
163
+
164
+ # Sterbegeld bei Versorgungsbezuegen sowie Kapitalauszahlungen/Abfindungen,
165
+ # soweit es sich nicht um Bezuege fuer mehrere Jahre handelt
166
+ # (in SONSTB enthalten) in Cents
167
+ @sterbe = BigDecimal.new(0) # BigDecimal
168
+
169
+ # Steuerklasse:
170
+ # 1 = I
171
+ # 2 = II
172
+ # 3 = III
173
+ # 4 = IV
174
+ # 5 = V
175
+ # 6 = VI
176
+ @stkl = 0 # int
177
+
178
+ # In RE4 enthaltene Versorgungsbezuege in Cents (ggf. 0)
179
+ @vbez = BigDecimal.new(0) # BigDecimal
180
+
181
+ # Vorsorgungsbezug im Januar 2005 bzw. fuer den ersten vollen Monat
182
+ # in Cents
183
+ @vbezm = BigDecimal.new(0) # BigDecimal
184
+
185
+ # Voraussichtliche Sonderzahlungen im Kalenderjahr des Versorgungsbeginns
186
+ # bei Versorgungsempfaengern ohne Sterbegeld, Kapitalauszahlungen/Abfindungen
187
+ # bei Versorgungsbezuegen in Cents
188
+ @vbezs = BigDecimal.new(0) # BigDecimal
189
+
190
+ # In SONSTB enthaltene Versorgungsbezuege einschliesslich Sterbegeld
191
+ # in Cents (ggf. 0)
192
+ @vbs = BigDecimal.new(0) # BigDecimal
193
+
194
+ # Jahr, in dem der Versorgungsbezug erstmalig gewaehrt wurde; werden
195
+ # mehrere Versorgungsbezuege gezahlt, so gilt der aelteste erstmalige Bezug
196
+ @vjahr = 0 # int
197
+
198
+ # Kapitalauszahlungen/Abfindungen bei Versorgungsbezuegen fuer mehrere Jahre in Cents (ggf. 0)
199
+ @vkapa = BigDecimal.new(0) # BigDecimal
200
+
201
+ # Verguetung fuer mehrjaehrige Taetigkeit ohne Kapitalauszahlungen/Abfindungen bei
202
+ # Versorgungsbezuegen in Cents (ggf. 0)
203
+ @vmt = BigDecimal.new(0) # BigDecimal
204
+
205
+ # Zahl der Freibetraege fuer Kinder (eine Dezimalstelle, nur bei Steuerklassen
206
+ # I, II, III und IV)
207
+ @zkf = BigDecimal.new(0) # BigDecimal
208
+
209
+ # Zahl der Monate, fuer die Versorgungsbezuege gezahlt werden (nur
210
+ # erforderlich bei Jahresberechnung (LZZ = 1)
211
+ @zmvb = 0 # int
212
+
213
+ # OUTPUTS
214
+
215
+ # Bemessungsgrundlage fuer die Kirchenlohnsteuer in Cents
216
+ @bk = BigDecimal.new(0) # BigDecimal
217
+
218
+ # Bemessungsgrundlage der sonstigen Einkuenfte (ohne Verguetung
219
+ # fuer mehrjaehrige Taetigkeit) fuer die Kirchenlohnsteuer in Cents
220
+ @bks = BigDecimal.new(0) # BigDecimal
221
+ @bkv = BigDecimal.new(0) # BigDecimal
222
+
223
+ # Fuer den Lohnzahlungszeitraum einzubehaltende Lohnsteuer in Cents
224
+ @lstlzz = BigDecimal.new(0) # BigDecimal
225
+
226
+ # Fuer den Lohnzahlungszeitraum einzubehaltender Solidaritaetszuschlag
227
+ # in Cents
228
+ @solzlzz = BigDecimal.new(0) # BigDecimal
229
+
230
+ # Solidaritaetszuschlag fuer sonstige Bezuege (ohne Verguetung fuer mehrjaehrige
231
+ # Taetigkeit) in Cents
232
+ @solzs = BigDecimal.new(0) # BigDecimal
233
+
234
+ # Solidaritaetszuschlag fuer die Verguetung fuer mehrjaehrige Taetigkeit in
235
+ # Cents
236
+ @solzv = BigDecimal.new(0) # BigDecimal
237
+
238
+ # Lohnsteuer fuer sonstige Einkuenfte (ohne Verguetung fuer mehrjaehrige
239
+ # Taetigkeit) in Cents
240
+ @sts = BigDecimal.new(0) # BigDecimal
241
+
242
+ # Lohnsteuer fuer Verguetung fuer mehrjaehrige Taetigkeit in Cents
243
+ @stv = BigDecimal.new(0) # BigDecimal
244
+
245
+ # INTERNALS
246
+
247
+ # Altersentlastungsbetrag nach Alterseinkünftegesetz in €,
248
+ # Cent (2 Dezimalstellen)
249
+ @alte = BigDecimal.new(0)
250
+
251
+ # Arbeitnehmer-Pauschbetrag in EURO
252
+ @anp = BigDecimal.new(0)
253
+
254
+ # Auf den Lohnzahlungszeitraum entfallender Anteil von Jahreswerten
255
+ # auf ganze Cents abgerundet
256
+ @anteil1 = BigDecimal.new(0)
257
+
258
+ # Auf den Lohnzahlungszeitraum entfallender Anteil von Jahreswerten
259
+ # auf ganze Cents aufgerundet
260
+ @anteil2 = BigDecimal.new(0)
261
+
262
+ # Bemessungsgrundlage für Altersentlastungsbetrag in €, Cent
263
+ # (2 Dezimalstellen)
264
+ @bmg = BigDecimal.new(0)
265
+
266
+ # Differenz zwischen ST1 und ST2 in EURO
267
+ @diff = BigDecimal.new(0)
268
+
269
+ # Entlastungsbetrag fuer Alleinerziehende in EURO
270
+ @efa = BigDecimal.new(0)
271
+
272
+ # Versorgungsfreibetrag in €, Cent (2 Dezimalstellen)
273
+ @fvb = BigDecimal.new(0)
274
+
275
+ # Versorgungsfreibetrag in €, Cent (2 Dezimalstellen) für die Berechnung
276
+ # der Lohnsteuer für den sonstigen Bezug
277
+ @fvbso = BigDecimal.new(0)
278
+
279
+ # Zuschlag zum Versorgungsfreibetrag in EURO
280
+ @fvbz = BigDecimal.new(0)
281
+
282
+ # Zuschlag zum Versorgungsfreibetrag in EURO fuer die Berechnung
283
+ # der Lohnsteuer beim sonstigen Bezug
284
+ @fvbzso = BigDecimal.new(0)
285
+
286
+ # Sicherungsfeld für den Zuschlag zum Versorgungsfreibetrag in € für
287
+ # die Berechnung der Lohnsteuer für die Vergütung für mehrjährige
288
+ # Tätigkeit
289
+ @fvbzoso = BigDecimal.new(0)
290
+
291
+ # Maximaler Altersentlastungsbetrag in €
292
+ @hbalte = BigDecimal.new(0)
293
+
294
+ # Maßgeblicher maximaler Versorgungsfreibetrag in €
295
+ @hfvb = BigDecimal.new(0)
296
+
297
+ # Maßgeblicher maximaler Zuschlag zum Versorgungsfreibetrag in €,Cent
298
+ # (2 Dezimalstellen)
299
+ @hfvbz = BigDecimal.new(0)
300
+
301
+ # Maßgeblicher maximaler Zuschlag zum Versorgungsfreibetrag in €, Cent
302
+ # (2 Dezimalstellen) für die Berechnung der Lohnsteuer für den
303
+ # sonstigen Bezug
304
+ @hfvbzso = BigDecimal.new(0)
305
+
306
+ # Nummer der Tabellenwerte fuer Versorgungsparameter
307
+ @j = 0
308
+
309
+ # Jahressteuer nach § 51a EStG, aus der Solidaritaetszuschlag und
310
+ # Bemessungsgrundlage fuer die Kirchenlohnsteuer ermittelt werden in EURO
311
+ @jbmg = BigDecimal.new(0)
312
+
313
+ # Auf einen Jahreslohn hochgerechneter LZZFREIB in €, Cent
314
+ # (2 Dezimalstellen)
315
+ @jlfreib = BigDecimal.new(0)
316
+
317
+ # Auf einen Jahreslohn hochgerechnete LZZHINZU in €, Cent
318
+ # (2 Dezimalstellen)
319
+ @jlhinzu = BigDecimal.new(0)
320
+
321
+ # Jahreswert, dessen Anteil fuer einen Lohnzahlungszeitraum in
322
+ # UPANTEIL errechnet werden soll in Cents
323
+ @jw = BigDecimal.new(0)
324
+
325
+ # Nummer der Tabellenwerte fuer Parameter bei Altersentlastungsbetrag
326
+ @k = 0
327
+
328
+ # Merker für Berechnung Lohnsteuer für mehrjährige Tätigkeit.
329
+ # 0 = normale Steuerberechnung
330
+ # 1 = Steuerberechnung für mehrjährige Tätigkeit
331
+ # 2 = Steuerberechnung für mehrjährige Tätigkeit Sonderfall nach § 34 Abs. 1 Satz 3 EStG
332
+ @kennvmt = 0
333
+
334
+ # Summe der Freibetraege fuer Kinder in EURO
335
+ @kfb = BigDecimal.new(0)
336
+
337
+ # Kennzahl fuer die Einkommensteuer-Tabellenart:
338
+ # 1 = Grundtabelle
339
+ # 2 = Splittingtabelle
340
+ @kztab = 0
341
+
342
+ # Jahreslohnsteuer in EURO
343
+ @lstjahr = BigDecimal.new(0)
344
+
345
+ # Zwischenfelder der Jahreslohnsteuer in Cent
346
+ @lst1 = BigDecimal.new(0)
347
+ @lst2 = BigDecimal.new(0)
348
+ @lst3 = BigDecimal.new(0)
349
+ @lstoso = BigDecimal.new(0)
350
+ @lstso = BigDecimal.new(0)
351
+
352
+ # Mindeststeuer fuer die Steuerklassen V und VI in EURO
353
+ @mist = BigDecimal.new(0)
354
+
355
+ # Rechenwert in Gleitkommadarstellung
356
+ @rw = BigDecimal.new(0)
357
+
358
+ # Sonderausgaben-Pauschbetrag in EURO
359
+ @sap = BigDecimal.new(0)
360
+
361
+ # Freigrenze fuer den Solidaritaetszuschlag in EURO
362
+ @solzfrei = BigDecimal.new(0)
363
+
364
+ # Solidaritaetszuschlag auf die Jahreslohnsteuer in EURO, C (2 Dezimalstellen)
365
+ @solzj = BigDecimal.new(0)
366
+
367
+ # Zwischenwert fuer den Solidaritaetszuschlag auf die Jahreslohnsteuer
368
+ # in EURO, C (2 Dezimalstellen)
369
+ @solzmin = BigDecimal.new(0)
370
+
371
+ # Tarifliche Einkommensteuer in EURO
372
+ @st = BigDecimal.new(0)
373
+
374
+ # Tarifliche Einkommensteuer auf das 1,25-fache ZX in EURO
375
+ @st1 = BigDecimal.new(0)
376
+
377
+ # Tarifliche Einkommensteuer auf das 0,75-fache ZX in EURO
378
+ @st2 = BigDecimal.new(0)
379
+
380
+ # Bemessungsgrundlage fuer den Versorgungsfreibetrag in Cents
381
+ @vbezb = BigDecimal.new(0)
382
+
383
+ # Bemessungsgrundlage für den Versorgungsfreibetrag in Cent für
384
+ # den sonstigen Bezug
385
+ @vbezbso = BigDecimal.new(0)
386
+
387
+ # Hoechstbetrag der Vorsorgepauschale nach Alterseinkuenftegesetz in EURO, C
388
+ @vhb = BigDecimal.new(0)
389
+
390
+ # Vorsorgepauschale in EURO, C (2 Dezimalstellen)
391
+ @vsp = BigDecimal.new(0)
392
+
393
+ # Vorsorgepauschale nach Alterseinkuenftegesetz in EURO, C
394
+ @vspn = BigDecimal.new(0)
395
+
396
+ # Zwischenwert 1 bei der Berechnung der Vorsorgepauschale nach
397
+ # dem Alterseinkuenftegesetz in EURO, C (2 Dezimalstellen)
398
+ @vsp1 = BigDecimal.new(0)
399
+
400
+ # Zwischenwert 2 bei der Berechnung der Vorsorgepauschale nach
401
+ # dem Alterseinkuenftegesetz in EURO, C (2 Dezimalstellen)
402
+ @vsp2 = BigDecimal.new(0)
403
+
404
+ # Hoechstbetrag der Vorsorgepauschale nach § 10c Abs. 3 EStG in EURO
405
+ @vspkurz = BigDecimal.new(0)
406
+
407
+ # Hoechstbetrag der Vorsorgepauschale nach § 10c Abs. 2 Nr. 2 EStG in EURO
408
+ @vspmax1 = BigDecimal.new(0)
409
+
410
+ # Hoechstbetrag der Vorsorgepauschale nach § 10c Abs. 2 Nr. 3 EStG in EURO
411
+ @vspmax2 = BigDecimal.new(0)
412
+
413
+ # Vorsorgepauschale nach § 10c Abs. 2 Satz 2 EStG vor der Hoechstbetragsberechnung
414
+ # in EURO, C (2 Dezimalstellen)
415
+ @vspo = BigDecimal.new(0)
416
+
417
+ # Fuer den Abzug nach § 10c Abs. 2 Nrn. 2 und 3 EStG verbleibender
418
+ # Rest von VSPO in EURO, C (2 Dezimalstellen)
419
+ @vsprest = BigDecimal.new(0)
420
+
421
+ # Hoechstbetrag der Vorsorgepauschale nach § 10c Abs. 2 Nr. 1 EStG
422
+ # in EURO, C (2 Dezimalstellen)
423
+ @vspvor = BigDecimal.new(0)
424
+
425
+ # Zu versteuerndes Einkommen gem. § 32a Abs. 1 und 2 EStG €, C
426
+ # (2 Dezimalstellen)
427
+ @x = BigDecimal.new(0)
428
+
429
+ # gem. § 32a Abs. 1 EStG (6 Dezimalstellen)
430
+ @y = BigDecimal.new(0)
431
+
432
+ # Auf einen Jahreslohn hochgerechnetes RE4 in €, C (2 Dezimalstellen)
433
+ # nach Abzug der Freibeträge nach § 39 b Abs. 2 Satz 3 und 4.
434
+ @zre4 = BigDecimal.new(0)
435
+
436
+ # Auf einen Jahreslohn hochgerechnetes RE4 in €, C (2 Dezimalstellen)
437
+ @zre4j = BigDecimal.new(0)
438
+
439
+ # Sicherungsfeld von ZRE4 bei der Berechnung der Lohnsteuer für
440
+ # die Vergütung für mehrjährige Tätigkeit in €, C (2 Dezimalstellen)
441
+ @zre4oso = BigDecimal.new(0)
442
+
443
+ # 1/5 des mehrjähriger Bezugs abzüglich der auf diesen Lohnbestandteil
444
+ # entfallenden festen Tabellenfreibeträge in €, C (2 Dezimalstellen)
445
+ @zre4vmt = BigDecimal.new(0)
446
+
447
+ # Auf einen Jahreslohn hochgerechnetes RE4 in €, C (2 Dezimalstellen)
448
+ # nach Abzug des Versorgungsfreibetrags und des Alterentlastungsbetrags
449
+ # zur Berechnung der Vorsorgepauschale in €, Cent (2 Dezimalstellen)
450
+ @zre4vp = BigDecimal.new(0)
451
+
452
+ # Feste Tabellenfreibeträge (ohne Vorsorgepauschale) in €, Cent
453
+ # (2 Dezimalstellen)
454
+ @ztabfb = BigDecimal.new(0)
455
+
456
+ # Sicherungsfeld von ZTABFB bei der Berechnung für die Vergütung
457
+ # für mehrjährige Tätigkeit in €, Cent (2 Dezimalstellen)
458
+ @ztabfboso = BigDecimal.new(0)
459
+
460
+ # Auf einen Jahreslohn hochgerechnetes (VBEZ abzueglich FVB) in
461
+ # EURO, C (2 Dezimalstellen)
462
+ @zvbez = BigDecimal.new(0)
463
+
464
+ # Auf einen Jahreslohn hochgerechnetes VBEZ in €, C (2 Dezimalstellen)
465
+ @zvbezj = BigDecimal.new(0)
466
+
467
+ # Zu versteuerndes Einkommen in €, C (2 Dezimalstellen)
468
+ @zve = BigDecimal.new(0)
469
+
470
+ # Zwischenfelder zu X fuer die Berechnung der Steuer nach § 39b
471
+ # Abs. 2 Satz 8 EStG in EURO.
472
+ @zx = BigDecimal.new(0)
473
+ @zzx = BigDecimal.new(0)
474
+ @hoch = BigDecimal.new(0)
475
+ @vergl = BigDecimal.new(0)
476
+
477
+ params.each do |key, value|
478
+ instance_variable_set("@#{key}", value)
479
+ end
480
+
481
+ mre4jl
482
+ mre4
483
+ mre4abz
484
+ mztabfb
485
+ @kennvmt = 0
486
+ mlstjahr
487
+ @lstjahr = @st
488
+ @jw = @lstjahr.multiply(ZAHL100)
489
+ upanteil
490
+ @lstlzz = @anteil1
491
+ if @zkf.compare_to(BigDecimal.ZERO) == 1
492
+ @ztabfb = (@ztabfb.add(@kfb)).set_scale(2, BigDecimal.ROUND_DOWN)
493
+ mlstjahr
494
+ @jbmg = @st
495
+ else
496
+ @jbmg = @lstjahr
497
+ end
498
+ msolz
499
+ msonst
500
+ mvmt
501
+ end
502
+
503
+ private
504
+
505
+ def mre4jl
506
+ if @lzz == 1
507
+ @zre4j = @re4.divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
508
+ @zvbezj = @vbez.divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
509
+ @jlfreib = @lzzfreib.divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
510
+ @jlhinzu = @lzzhinzu.divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
511
+ else
512
+ if @lzz == 2
513
+ @zre4j = (@re4.multiply(ZAHL12)).divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
514
+ @zvbezj = (@vbez.multiply(ZAHL12)).divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
515
+ @jlfreib = (@lzzfreib.multiply(ZAHL12)).divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
516
+ @jlhinzu = (@lzzhinzu.multiply(ZAHL12)).divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
517
+ else
518
+ if @lzz == 3
519
+ @zre4j = (@re4.multiply(ZAHL360)).divide(ZAHL700, 2, BigDecimal.ROUND_DOWN)
520
+ @zvbezj = (@vbez.multiply(ZAHL360)).divide(ZAHL700, 2, BigDecimal.ROUND_DOWN)
521
+ @jlfreib = (@lzzfreib.multiply(ZAHL360)).divide(ZAHL700, 2, BigDecimal.ROUND_DOWN)
522
+ @jlhinzu = (@lzzhinzu.multiply(ZAHL360)).divide(ZAHL700, 2, BigDecimal.ROUND_DOWN)
523
+ else
524
+ @zre4j = (@re4.multiply(ZAHL360)).divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
525
+ @zvbezj = (@vbez.multiply(ZAHL360)).divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
526
+ @jlfreib = (@lzzfreib.multiply(ZAHL360)).divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
527
+ @jlhinzu = (@lzzhinzu.multiply(ZAHL360)).divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
528
+ end
529
+ end
530
+ end
531
+ end
532
+
533
+ def mre4
534
+ if @zvbezj.compare_to(BigDecimal.ZERO) == 0
535
+ @fvbz = BigDecimal.ZERO
536
+ @fvb = BigDecimal.ZERO
537
+ @fvbzso = BigDecimal.ZERO
538
+ @fvbso = BigDecimal.ZERO
539
+ else
540
+ if @vjahr < 2006
541
+ @j = 1
542
+ else
543
+ if @vjahr < 2040
544
+ @j = @vjahr - 2004
545
+ else
546
+ @j = 36
547
+ end
548
+ end
549
+ if @lzz == 1
550
+ @vbezb = (@vbezm.multiply(BigDecimal.value_of(@zmvb))).add(@vbezs)
551
+ @hfvb = TAB2[@j].divide(ZAHL12).multiply(BigDecimal.value_of(@zmvb))
552
+ @fvbz = TAB3[@j].divide(ZAHL12).multiply(BigDecimal.value_of(@zmvb)).set_scale(0, BigDecimal.ROUND_UP)
553
+ else
554
+ @vbezb = ((@vbezm.multiply(ZAHL12)).add(@vbezs)).set_scale(2, BigDecimal.ROUND_DOWN)
555
+ @hfvb = TAB2[@j]
556
+ @fvbz = TAB3[@j]
557
+ end
558
+ @fvb = ((@vbezb.multiply(TAB1[@j]))).divide(ZAHL100).set_scale(2, BigDecimal.ROUND_UP)
559
+ if @fvb.compare_to(@hfvb) == 1
560
+ @fvb = @hfvb
561
+ end
562
+ @vbezbso = @sterbe.add(@vkapa)
563
+ @fvbso = (@fvb.add((@vbezbso.multiply(TAB1[@j])).divide(ZAHL100))).set_scale(2, BigDecimal.ROUND_UP)
564
+ if @fvbso.compare_to(TAB2[@j]) == 1
565
+ @fvbso = TAB2[@j]
566
+ end
567
+ @hfvbzso = (((@vbezb.add(@vbezbso)).divide(ZAHL100)).subtract(@fvbso)).set_scale(2, BigDecimal.ROUND_DOWN)
568
+ if (TAB3[3]).compare_to(@hfvbzso) == 1
569
+ @fvbzso = @hfvbzso.set_scale(0, BigDecimal.ROUND_UP)
570
+ else
571
+ @fvbzso = TAB3[@j]
572
+ end
573
+ @hfvbz = ((@vbezb.divide(ZAHL100)).subtract(@fvb)).set_scale(2, BigDecimal.ROUND_DOWN)
574
+ if @fvbz.compare_to(@hfvbz) == 1
575
+ @fvbz = @hfvbz.set_scale(0, BigDecimal.ROUND_UP)
576
+ end
577
+ end
578
+ mre4alte
579
+ end
580
+
581
+ def mre4alte
582
+ if @alter1 == 0
583
+ @alte = BigDecimal.ZERO
584
+ else
585
+ if @ajahr < 2006
586
+ @k = 1
587
+ else
588
+ if @ajahr < 2040
589
+ @k = @ajahr - 2004
590
+ else
591
+ @k = 36
592
+ end
593
+ end
594
+ @bmg = @zre4j.subtract(@zvbezj)
595
+ @alte = (@bmg.multiply(TAB4[@k])).set_scale(2, BigDecimal.ROUND_UP)
596
+ @hbalte = TAB5[@k]
597
+ if @alte.compare_to(@hbalte) == 1
598
+ @alte = @hbalte
599
+ end
600
+ end
601
+ end
602
+
603
+ def mre4abz
604
+ @zre4 = (@zre4j.subtract(@fvb).subtract(@alte).subtract(@jlfreib).add(@jlhinzu)).set_scale(2, BigDecimal.ROUND_DOWN)
605
+ if @zre4.compare_to(BigDecimal.ZERO) == -1
606
+ @zre4 = BigDecimal.ZERO
607
+ end
608
+ @zre4vp = (@zre4j.subtract(@fvb).subtract(@alte)).set_scale(2, BigDecimal.ROUND_DOWN)
609
+ if @zre4vp.compare_to(BigDecimal.ZERO) == -1
610
+ @zre4vp = BigDecimal.ZERO
611
+ end
612
+ @zvbez = (@zvbezj.subtract(@fvb)).set_scale(2, BigDecimal.ROUND_DOWN)
613
+ if @zvbez.compare_to(BigDecimal.ZERO) == -1
614
+ @zvbez = BigDecimal.ZERO
615
+ end
616
+ end
617
+
618
+ def mztabfb
619
+ @anp = BigDecimal.ZERO
620
+ if @zvbez.compare_to(BigDecimal.ZERO) >= 0
621
+ if @zvbez.compare_to(@fvbz) == -1
622
+ @fvbz = @zvbez.set_scale(0, BigDecimal.ROUND_DOWN)
623
+ end
624
+ end
625
+ if @stkl < 6
626
+ if @zvbez.compare_to(BigDecimal.ZERO) == 1
627
+ if (@zvbez.subtract(@fvbz)).compare_to(BigDecimal.value_of(102)) == -1
628
+ @anp = (@zvbez.subtract(@fvbz)).set_scale(0, BigDecimal.ROUND_DOWN)
629
+ else
630
+ @anp = BigDecimal.value_of(102)
631
+ end
632
+ end
633
+ else
634
+ @fvbz = BigDecimal.value_of(0)
635
+ @fvbzso = BigDecimal.value_of(0)
636
+ end
637
+ if @stkl < 6
638
+ if @zre4.compare_to(@zvbez) == 1
639
+ if (@zre4.subtract(@zvbez)).compare_to(BigDecimal.value_of(920)) == -1
640
+ @anp = (@anp.add(@zre4).subtract(@zvbez)).set_scale(0, BigDecimal.ROUND_DOWN)
641
+ else
642
+ @anp = @anp.add(BigDecimal.value_of(920))
643
+ end
644
+ end
645
+ end
646
+ @kztab = 1
647
+ if @stkl == 1
648
+ @sap = BigDecimal.value_of(36)
649
+ @kfb = (@zkf.multiply(BigDecimal.value_of(5808))).set_scale(0, BigDecimal.ROUND_DOWN)
650
+ else
651
+ if @stkl == 2
652
+ @efa = BigDecimal.value_of(1308)
653
+ @sap = BigDecimal.value_of(36)
654
+ @kfb = (@zkf.multiply(BigDecimal.value_of(5808))).set_scale(0, BigDecimal.ROUND_DOWN)
655
+ else
656
+ if @stkl == 3
657
+ @kztab = 2
658
+ @sap = BigDecimal.value_of(72)
659
+ @kfb = (@zkf.multiply(BigDecimal.value_of(5808))).set_scale(0, BigDecimal.ROUND_DOWN)
660
+ else
661
+ if @stkl == 4
662
+ @sap = BigDecimal.value_of(36)
663
+ @kfb = (@zkf.multiply(BigDecimal.value_of(2904))).set_scale(0, BigDecimal.ROUND_DOWN)
664
+ else
665
+ @kfb = BigDecimal.ZERO
666
+ end
667
+ end
668
+ end
669
+ end
670
+ @ztabfb = (@efa.add(@anp).add(@sap).add(@fvbz)).set_scale(2, BigDecimal.ROUND_DOWN)
671
+ end
672
+
673
+ def mlstjahr
674
+ if @stkl < 5
675
+ upevp
676
+ else
677
+ @vsp = BigDecimal.ZERO
678
+ end
679
+ if @kennvmt == 0
680
+ @zve = (@zre4.subtract(@ztabfb).subtract(@vsp)).set_scale(2, BigDecimal.ROUND_DOWN)
681
+ else
682
+ if @kennvmt == 1
683
+ @zve = @zre4oso.subtract(@ztabfboso).add(@zre4vmt).subtract(@vsp).set_scale(2, BigDecimal.ROUND_DOWN)
684
+ else
685
+ @zve = (((@zre4.subtract(@ztabfb)).divide(ZAHL5)).subtract(@vsp)).set_scale(2, BigDecimal.ROUND_DOWN)
686
+ end
687
+ end
688
+ if @zve.compare_to(ZAHL1) == -1
689
+ @zve = BigDecimal.ZERO
690
+ @x = BigDecimal.ZERO
691
+ else
692
+ @x = @zve.divide(BigDecimal.value_of(@kztab), 0, BigDecimal.ROUND_DOWN)
693
+ end
694
+ if @stkl < 5
695
+ uptab07
696
+ else
697
+ mst5_6
698
+ end
699
+ end
700
+
701
+ def upevp
702
+ if @krv > 0
703
+ @vsp1 = BigDecimal.ZERO
704
+ else
705
+ if @zre4vp.compare_to(BigDecimal.value_of(63600)) == 1
706
+ @zre4vp = BigDecimal.value_of(63600)
707
+ end
708
+ @vsp1 = (@zre4vp.multiply(BigDecimal.value_of(0.32))).set_scale(2, BigDecimal.ROUND_DOWN)
709
+ @vsp1 = (@vsp1.multiply(BigDecimal.value_of(0.0995))).set_scale(2, BigDecimal.ROUND_DOWN)
710
+ end
711
+ @vsp2 = (@zre4vp.multiply(BigDecimal.value_of(0.11))).set_scale(2, BigDecimal.ROUND_DOWN)
712
+ @vhb = (BigDecimal.value_of(@kztab).multiply(BigDecimal.value_of(1500))).set_scale(2, BigDecimal.ROUND_DOWN)
713
+ if @vsp2.compare_to(@vhb) == 1
714
+ @vsp2 = @vhb
715
+ end
716
+ @vspn = (@vsp1.add(@vsp2)).set_scale(0, BigDecimal.ROUND_UP)
717
+ mvsp
718
+ if @vspn.compare_to(@vsp) == 1
719
+ @vsp = @vspn.set_scale(2, BigDecimal.ROUND_DOWN)
720
+ end
721
+ end
722
+
723
+ def mvsp
724
+ @vspo = (@zre4vp.multiply(BigDecimal.value_of(0.2))).set_scale(2, BigDecimal.ROUND_DOWN)
725
+ @vspvor = (BigDecimal.value_of(@kztab).multiply(BigDecimal.value_of(3068))).set_scale(2, BigDecimal.ROUND_DOWN)
726
+ @vspmax1 = BigDecimal.value_of(@kztab).multiply(BigDecimal.value_of(1334))
727
+ @vspmax2 = BigDecimal.value_of(@kztab).multiply(BigDecimal.value_of(667))
728
+ @vspkurz = BigDecimal.value_of(@kztab).multiply(BigDecimal.value_of(1134))
729
+ if @krv == 1
730
+ if @vspo.compare_to(@vspkurz) == 1
731
+ @vsp = @vspkurz
732
+ else
733
+ @vsp = @vspo.set_scale(0, BigDecimal.ROUND_DOWN)
734
+ end
735
+ else
736
+ umvsp
737
+ end
738
+ end
739
+
740
+ def umvsp
741
+ @vspvor = (@vspvor.subtract(@zre4vp.multiply(BigDecimal.value_of(0.16)))).set_scale(2, BigDecimal.ROUND_DOWN)
742
+ if @vspvor.compare_to(BigDecimal.ZERO) == -1
743
+ @vspvor = BigDecimal.ZERO
744
+ end
745
+ if @vspo.compare_to(@vspvor) == 1
746
+ @vsp = @vspvor
747
+ @vsprest = @vspo.subtract(@vspvor)
748
+ if @vsprest.compare_to(@vspmax1) == 1
749
+ @vsp = @vsp.add(@vspmax1)
750
+ @vsprest = (@vsprest.subtract(@vspmax1)).divide(ZAHL2, 2, BigDecimal.ROUND_UP)
751
+ if @vsprest.compare_to(@vspmax2) == 1
752
+ @vsp = (@vsp.add(@vspmax2)).set_scale(0, BigDecimal.ROUND_DOWN)
753
+ else
754
+ @vsp = (@vsp.add(@vsprest)).set_scale(0, BigDecimal.ROUND_DOWN)
755
+ end
756
+ else
757
+ @vsp = (@vsp.add(@vsprest)).set_scale(0, BigDecimal.ROUND_DOWN)
758
+ end
759
+ else
760
+ @vsp = @vspo.set_scale(0, BigDecimal.ROUND_DOWN)
761
+ end
762
+ end
763
+
764
+ def mst5_6
765
+ @zzx = @x
766
+ if @zzx.compare_to(BigDecimal.value_of(25812)) == 1
767
+ @zx = BigDecimal.value_of(25812)
768
+ up5_6
769
+ if @zzx.compare_to(BigDecimal.value_of(200000)) == 1
770
+ @st = (@st.add(BigDecimal.value_of(73158.96))).set_scale(0, BigDecimal.ROUND_DOWN)
771
+ @st = (@st.add((@zzx.subtract(BigDecimal.value_of(200000))).multiply(BigDecimal.value_of(0.45)))).set_scale(0, BigDecimal.ROUND_DOWN)
772
+ else
773
+ @st = (@st.add((@zzx.subtract(BigDecimal.value_of(25812))).multiply(BigDecimal.value_of(0.42)))).set_scale(0, BigDecimal.ROUND_DOWN)
774
+ end
775
+ else
776
+ @zx = @zzx
777
+ up5_6
778
+ if @zzx.compare_to(BigDecimal.value_of(9144)) == 1
779
+ @vergl = @st
780
+ @zx = BigDecimal.value_of(9144)
781
+ up5_6
782
+ @hoch = (@st.add((@zzx.subtract(BigDecimal.value_of(9144))).multiply(BigDecimal.value_of(0.42)))).set_scale(0, BigDecimal.ROUND_DOWN)
783
+ if @hoch.compare_to(@vergl) == -1
784
+ @st = @hoch
785
+ else
786
+ @st = @vergl
787
+ end
788
+ end
789
+ end
790
+ end
791
+
792
+ def up5_6
793
+ @x = (@zx.multiply(BigDecimal.value_of(1.25))).set_scale(2, BigDecimal.ROUND_DOWN)
794
+ uptab07
795
+ @st1 = @st
796
+ @x = (@zx.multiply(BigDecimal.value_of(0.75))).set_scale(2, BigDecimal.ROUND_DOWN)
797
+ uptab07
798
+ @st2 = @st
799
+ @diff = (@st1.subtract(@st2)).multiply(ZAHL2)
800
+ @mist = (@zx.multiply(BigDecimal.value_of(0.15))).set_scale(0, BigDecimal.ROUND_DOWN)
801
+ if @mist.compare_to(@diff) == 1
802
+ @st = @mist
803
+ else
804
+ @st = @diff
805
+ end
806
+ end
807
+
808
+ def msolz
809
+ @solzfrei = BigDecimal.value_of(972 * @kztab)
810
+ if @jbmg.compare_to(@solzfrei) == 1
811
+ @solzj = (@jbmg.multiply(BigDecimal.value_of(5.5))).divide(ZAHL100).set_scale(2, BigDecimal.ROUND_DOWN)
812
+ @solzmin = (@jbmg.subtract(@solzfrei)).multiply(BigDecimal.value_of(20)).divide(ZAHL100).set_scale(2, BigDecimal.ROUND_DOWN)
813
+ if @solzmin.compare_to(@solzj) == -1
814
+ @solzj = @solzmin
815
+ end
816
+ @jw = @solzj.multiply(ZAHL100).set_scale(0, BigDecimal.ROUND_DOWN)
817
+ upanteil
818
+ @solzlzz = @anteil1
819
+ else
820
+ @solzlzz = BigDecimal.ZERO
821
+ end
822
+ if @r > 0
823
+ @jw = @jbmg.multiply(ZAHL100)
824
+ upanteil
825
+ @bk = @anteil1
826
+ else
827
+ @bk = BigDecimal.ZERO
828
+ end
829
+ end
830
+
831
+ def upanteil
832
+ if @lzz == 1
833
+ @anteil1 = @jw
834
+ @anteil2 = @jw
835
+ else
836
+ if @lzz == 2
837
+ @anteil1 = @jw.divide(ZAHL12, 0, BigDecimal.ROUND_DOWN)
838
+ @anteil2 = @jw.divide(ZAHL12, 0, BigDecimal.ROUND_UP)
839
+ else
840
+ if @lzz == 3
841
+ @anteil1 = (@jw.multiply(ZAHL7)).divide(ZAHL360, 0, BigDecimal.ROUND_DOWN)
842
+ @anteil2 = (@jw.multiply(ZAHL7)).divide(ZAHL360, 0, BigDecimal.ROUND_UP)
843
+ else
844
+ @anteil1 = @jw.divide(ZAHL360, 0, BigDecimal.ROUND_DOWN)
845
+ @anteil2 = @jw.divide(ZAHL360, 0, BigDecimal.ROUND_UP)
846
+ end
847
+ end
848
+ end
849
+ end
850
+
851
+ def msonst
852
+ @lzz = 1
853
+ if @zmvb == 0
854
+ @zmvb = 12
855
+ end
856
+ if @sonstb.compare_to(BigDecimal.ZERO) == 0
857
+ @lstso = BigDecimal.ZERO
858
+ @sts = BigDecimal.ZERO
859
+ @solzs = BigDecimal.ZERO
860
+ @bks = BigDecimal.ZERO
861
+ else
862
+ mosonst
863
+ @zre4j = ((@jre4.add(@sonstb)).divide(ZAHL100)).set_scale(2, BigDecimal.ROUND_DOWN)
864
+ @zvbezj = ((@jvbez.add(@vbs)).divide(ZAHL100)).set_scale(2, BigDecimal.ROUND_DOWN)
865
+ mre4sonst
866
+ mlstjahr
867
+ @lstso = @st.multiply(ZAHL100)
868
+ @sts = @lstso.subtract(@lstoso)
869
+ if @sts.compare_to(BigDecimal.ZERO) == -1
870
+ @sts = BigDecimal.ZERO
871
+ end
872
+ @solzs = @sts.multiply(BigDecimal.value_of(5.5)).divide(ZAHL100, 0, BigDecimal.ROUND_DOWN)
873
+ if @r > 0
874
+ @bks = @sts
875
+ else
876
+ @bks = BigDecimal.ZERO
877
+ end
878
+ end
879
+ end
880
+
881
+ def mvmt
882
+ if @vkapa.compare_to(BigDecimal.ZERO) == -1
883
+ @vkapa = BigDecimal.ZERO
884
+ end
885
+ if (@vmt.add(@vkapa)).compare_to(BigDecimal.ZERO) == 1
886
+ if @lstso.compare_to(BigDecimal.ZERO) == 0
887
+ mosonst
888
+ @lst1 = @lstoso
889
+ else
890
+ @lst1 = @lstso
891
+ end
892
+ @zre4oso = @zre4
893
+ @ztabfboso = @ztabfb
894
+ @fvbzoso = @fvbz
895
+ @zre4j = ((@jre4.add(@sonstb).add(@vmt).add(@vkapa)).divide(ZAHL100)).set_scale(2, BigDecimal.ROUND_DOWN)
896
+ @zvbezj = ((@jvbez.add(@vbs).add(@vkapa)).divide(ZAHL100)).set_scale(2, BigDecimal.ROUND_DOWN)
897
+ mre4sonst
898
+ mlstjahr
899
+ @lst3 = @st.multiply(ZAHL100)
900
+ @ztabfb = (@ztabfb.subtract(@fvbz).add(@fvbzoso)).set_scale(2, BigDecimal.ROUND_DOWN)
901
+ @kennvmt = 1
902
+ if (@jre4.add(@sonstb).subtract(@jfreib).add(@jhinzu)).compare_to(BigDecimal.ZERO) == -1
903
+ @kennvmt = 2
904
+ mlstjahr
905
+ @lst2 = @st.multiply(ZAHL100)
906
+ @stv = @lst2.multiply(ZAHL5)
907
+ else
908
+ @zre4vmt = (((@vmt.divide(ZAHL100)).add(@vkapa.divide(ZAHL100)).subtract(@ztabfb).add(@ztabfboso)).divide(ZAHL5)).set_scale(2, BigDecimal.ROUND_DOWN)
909
+ mlstjahr
910
+ @lst2 = @st.multiply(ZAHL100)
911
+ @stv = (@lst2.subtract(@lst1)).multiply(ZAHL5)
912
+ end
913
+ @lst3 = @lst3.subtract(@lst1)
914
+ if @lst3.compare_to(@stv) == -1
915
+ @stv = @lst3
916
+ end
917
+ if @stv.compare_to(BigDecimal.ZERO) == -1
918
+ @stv = BigDecimal.ZERO
919
+ end
920
+ @solzv = (@stv.multiply(BigDecimal.value_of(5.5))).divide(ZAHL100, 0, BigDecimal.ROUND_DOWN)
921
+ if @r > 0
922
+ @bkv = @stv
923
+ else
924
+ @bkv = BigDecimal.ZERO
925
+ end
926
+ else
927
+ @stv = BigDecimal.ZERO
928
+ @solzv = BigDecimal.ZERO
929
+ @bkv = BigDecimal.ZERO
930
+ end
931
+ end
932
+
933
+ def mosonst
934
+ @zre4j = (@jre4.divide(ZAHL100)).set_scale(2, BigDecimal.ROUND_DOWN)
935
+ @zvbezj = (@jvbez.divide(ZAHL100)).set_scale(2, BigDecimal.ROUND_DOWN)
936
+ @jlfreib = @jfreib.divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
937
+ @jlhinzu = @jhinzu.divide(ZAHL100, 2, BigDecimal.ROUND_DOWN)
938
+ mre4
939
+ mre4abz
940
+ mztabfb
941
+ mlstjahr
942
+ @lstoso = @st.multiply(ZAHL100)
943
+ end
944
+
945
+ def mre4sonst
946
+ mre4
947
+ @fvb = @fvbso
948
+ mre4abz
949
+ @fvbz = @fvbzso
950
+ mztabfb
951
+ end
952
+
953
+ def uptab07
954
+ if @x.compare_to(BigDecimal.value_of(7665)) == -1
955
+ @st = BigDecimal.ZERO
956
+ else
957
+ if @x.compare_to(BigDecimal.value_of(12740)) == -1
958
+ @y = (@x.subtract(BigDecimal.value_of(7664))).divide(BigDecimal.value_of(10000), 6, BigDecimal.ROUND_DOWN)
959
+ @rw = @y.multiply(BigDecimal.value_of(883.74))
960
+ @rw = @rw.add(BigDecimal.value_of(1500))
961
+ @st = (@rw.multiply(@y)).set_scale(0, BigDecimal.ROUND_DOWN)
962
+ else
963
+ if @x.compare_to(BigDecimal.value_of(52152)) == -1
964
+ @y = (@x.subtract(BigDecimal.value_of(12739))).divide(BigDecimal.value_of(10000), 6, BigDecimal.ROUND_DOWN)
965
+ @rw = @y.multiply(BigDecimal.value_of(228.74))
966
+ @rw = @rw.add(BigDecimal.value_of(2397))
967
+ @rw = @rw.multiply(@y)
968
+ @st = (@rw.add(BigDecimal.value_of(989))).set_scale(0, BigDecimal.ROUND_DOWN)
969
+ else
970
+ if @x.compare_to(BigDecimal.value_of(250001)) == -1
971
+ @st = ((@x.multiply(BigDecimal.value_of(0.42))).subtract(BigDecimal.value_of(7914))).set_scale(0, BigDecimal.ROUND_DOWN)
972
+ else
973
+ @st = ((@x.multiply(BigDecimal.value_of(0.45))).subtract(BigDecimal.value_of(15414))).set_scale(0, BigDecimal.ROUND_DOWN)
974
+ end
975
+ end
976
+ end
977
+ end
978
+ @st = @st.multiply(BigDecimal.value_of(@kztab))
979
+ end
980
+
981
+ end
982
+ end
983
+ end