taxger 0.2.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 973ad4154b155c02e61a8bb6883e9ae644bb5710
4
- data.tar.gz: 3dfbb46a51f9b5b1864eba25fa2c3f476adee9bc
2
+ SHA256:
3
+ metadata.gz: 4bbecae25883119882c5394c6f611e43b7465036871f43c178c8545de49ab3ce
4
+ data.tar.gz: 9a5e0060bbceaa14345127cffa0d3bd175ac4a9b495218e7d7a0a451af8736b8
5
5
  SHA512:
6
- metadata.gz: 195f204a0602cbad392d8e83e60f9019bc729f766ab8b031174e88b2438a36fd3ea316b5e355f5a7a8875d6cf4659dba062c1910ab81a4bf96328b01713ab82c
7
- data.tar.gz: de15485b5d9e3f1727e14b4795d1b64ce496bbc0c79d2620af3b090e35120b16d01897bbc8a7cc2f7ba3bb458e4c095fd817ea4a86b34da65661e9bd46ac7f35
6
+ metadata.gz: 4fa34cb2ee3439b6cc5fa0ed856833efc319341b7c250a4f68d3ed074834e2b2eb22f8d36fe006d933536008648f453fa979df3948df4db28839397b50e67c5d
7
+ data.tar.gz: 34004366519a419737acf8182ef6152855a3ac334841363ccf53e6bfa29b36af62115d4722cdb82fc541fb3b3eb290176c30fe0339da0f99e117ac8c92d0a45a
data/README.md CHANGED
@@ -83,7 +83,17 @@ Finance.
83
83
 
84
84
  To regenerate or update these files, have a look into `src/README.md`.
85
85
 
86
- ## Contributing
86
+ ## Contributors
87
87
 
88
- Bug reports and pull requests are welcome on GitHub at https://github.com/mpm/taxger. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](contributor-covenant.org) code of conduct.
88
+ Original author (2015):
89
+
90
+ * [Malte Münchert](https://github.com/mpm)
91
+
92
+ Contributions from [Wundertax GmbH](https://www.wundertax.de/)
89
93
 
94
+ * [@jalyna](https://github.com/jalyna)
95
+ * [@bryszard](https://github.com/bryszard)
96
+
97
+ # Submitting contributions
98
+
99
+ Bug reports and pull requests are welcome on GitHub at https://github.com/mpm/taxger. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](contributor-covenant.org) code of conduct.
@@ -17,7 +17,7 @@ module Taxger
17
17
  ZONES = {
18
18
  # Values are taken from this table:
19
19
  # https://de.wikipedia.org/wiki/Einkommensteuer_(Deutschland)#Entwicklung_der_Parameter
20
- # Non-existent parameters for E(i) with i > 3 have to be replaced with nil
20
+ # Non-existent parameters for E(i) with i > 3 have to be replaced with nil
21
21
  # Non-existent parameters for a(i) with i > 2 have to be 0.
22
22
  '2010' => [
23
23
  # E(0), a(1) * F, b(1), 0
@@ -76,19 +76,29 @@ module Taxger
76
76
  [ 53_665, 0, 0.42, -8394.14 + 0.42 * 53_665],
77
77
  [254_447, 0, 0.45, -16027.52 + 0.45 * 254_447]
78
78
  ],
79
+
80
+ '2017' => [
81
+ [ 8_820, 1_007.27 * F, 0.14, 0],
82
+ [ 13_769, 223.76 * F, 0.2397, 939.57],
83
+ [ 54_057, 0, 0.42, 14_228.5],
84
+ [256_303, 0, 0.45, 99_171.82]
85
+ ]
79
86
  }
80
87
 
81
- def calculate(year, income)
88
+ def calculate(year, income, pay_taxes_on = nil)
82
89
  if !ZONES[year.to_s]
83
90
  raise Einkommensteuer::Error.new("No data available for year #{year}")
84
91
  end
85
92
 
93
+ pay_taxes_on ||= income
94
+ pay_taxes_on = pay_taxes_on * 0.01
86
95
  income = income * 0.01
87
96
  ZONES[year.to_s].reverse.each do |zone|
88
97
  (zone_start, a, b, c) = zone
89
98
  if income >= zone_start + 1
90
99
  taxable = income - zone_start
91
- tax = (a * (taxable ** 2) + b * taxable + c).to_i * 100
100
+ tax = (a * (taxable ** 2) + b * taxable + c)#.to_i * 100
101
+ tax = (((tax/income)*pay_taxes_on)).to_i * 100
92
102
 
93
103
  # Vereinfachte Berechnung des Solidaritätszuschlagsfreibetrags:
94
104
  # Nicht gültig für Steuerklasse III (162 EUR statt 81 EUR) und abweichend,
@@ -12,6 +12,8 @@ require 'taxger/lohnsteuer/lohnsteuer2014'
12
12
  require 'taxger/lohnsteuer/lohnsteuer2015'
13
13
  require 'taxger/lohnsteuer/lohnsteuer2015dezember'
14
14
  require 'taxger/lohnsteuer/lohnsteuer2016'
15
+ require 'taxger/lohnsteuer/lohnsteuer2017'
16
+ require 'taxger/lohnsteuer/lohnsteuer2018'
15
17
 
16
18
  module Taxger
17
19
  module Lohnsteuer
@@ -1,6 +1,8 @@
1
+ require 'bigdecimal'
2
+
1
3
  module Taxger
2
4
  module Lohnsteuer
3
- class BigDecimal < Numeric::BigDecimal
5
+ class BigDecimal < BigDecimal
4
6
  def multiply(value)
5
7
  BigDecimal.new(self * value)
6
8
  end
@@ -0,0 +1,1144 @@
1
+ module Taxger
2
+ module Lohnsteuer
3
+ class Lohnsteuer2017
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(76200)
586
+ else
587
+ @bbgrv = BigDecimal.new(68400)
588
+ end
589
+ @rvsatzan = BigDecimal.value_of(0.0935)
590
+ @tbsvorv = BigDecimal.value_of(0.68)
591
+ end
592
+ @bbgkvpv = BigDecimal.new(52200)
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.01775)
597
+ @pvsatzag = BigDecimal.value_of(0.00775)
598
+ else
599
+ @pvsatzan = BigDecimal.value_of(0.01275)
600
+ @pvsatzag = BigDecimal.value_of(0.01275)
601
+ end
602
+ if @pvz == 1
603
+ @pvsatzan = @pvsatzan.add(BigDecimal.value_of(0.0025))
604
+ end
605
+ @w1stkl5 = BigDecimal.new(10240)
606
+ @w2stkl5 = BigDecimal.new(27029)
607
+ @w3stkl5 = BigDecimal.new(205043)
608
+ @gfb = BigDecimal.new(8820)
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(7356))).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(7356))).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(7356))).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(3678))).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
+ uptab17
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
+ uptab17
948
+ @st1 = @st
949
+ @x = (@zx.multiply(BigDecimal.value_of(0.75))).set_scale(2, BigDecimal.ROUND_DOWN)
950
+ uptab17
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 uptab17
1115
+ if @x.compare_to(@gfb.add(ZAHL1)) == -1
1116
+ @st = BigDecimal.ZERO
1117
+ else
1118
+ if @x.compare_to(BigDecimal.value_of(13770)) == -1
1119
+ @y = (@x.subtract(@gfb)).divide(ZAHL10000, 6, BigDecimal.ROUND_DOWN)
1120
+ @rw = @y.multiply(BigDecimal.value_of(1007.27))
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(54058)) == -1
1125
+ @y = (@x.subtract(BigDecimal.value_of(13769))).divide(ZAHL10000, 6, BigDecimal.ROUND_DOWN)
1126
+ @rw = @y.multiply(BigDecimal.value_of(223.76))
1127
+ @rw = @rw.add(BigDecimal.value_of(2397))
1128
+ @rw = @rw.multiply(@y)
1129
+ @st = (@rw.add(BigDecimal.value_of(939.57))).set_scale(0, BigDecimal.ROUND_DOWN)
1130
+ else
1131
+ if @x.compare_to(BigDecimal.value_of(256304)) == -1
1132
+ @st = ((@x.multiply(BigDecimal.value_of(0.42))).subtract(BigDecimal.value_of(8475.44))).set_scale(0, BigDecimal.ROUND_DOWN)
1133
+ else
1134
+ @st = ((@x.multiply(BigDecimal.value_of(0.45))).subtract(BigDecimal.value_of(16164.53))).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