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