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