drei_schichten_modell 0.0.3 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/.rvmrc CHANGED
@@ -1 +1 @@
1
- rvm --create ruby-1.9.2-p290@drei_schichten_modell
1
+ rvm --create ruby-1.9.3@drei_schichten_modell
data/README.markdown CHANGED
@@ -1,6 +1,7 @@
1
1
  # abgabenrechner
2
2
 
3
3
  drei_schichten_modell.gem ist ein programm zu berechnung der zulagen.
4
+ http://www.vergleichsrechner-altersvorsorge-vergleich.de/3-schichtenmodell.php
4
5
 
5
6
 
6
7
  ## Installation
@@ -12,30 +13,6 @@ gem 'drei_schichten_modell'
12
13
 
13
14
 
14
15
 
15
- ```ruby
16
- require 'rubygems'
17
- require 'drei_schichten_modell'
18
-
19
- parameter = {
20
- :lzz => 1,
21
- :re4 => 2600000,
22
- :stkl => 1,
23
- :r => 1
24
- }
25
-
26
- abgabenrechner = BMF::Abgabenrechner.new(parameter)
27
- puts abgabenrechner.ausgaben.inspect # => {:solzs=>0, :bk=>313700, :solzv=>0, :bks=>0, :sts=>0, :bkv=>0, :stv=>0, :lstlzz=>313700, :solzlzz=>17253}
28
- puts abgabenrechner.ausgaben[:lstlzz] # => 313700
29
-
30
- puts abgabenrechner.xml =>
31
- ```
32
-
33
-
34
- ## Komplette API Dokumentation:
35
- http://goo.gl/phFdj
36
-
37
-
38
-
39
16
 
40
17
 
41
18
 
@@ -22,6 +22,6 @@ Gem::Specification.new do |s|
22
22
  # tests
23
23
  s.add_development_dependency 'rspec'
24
24
 
25
- s.add_runtime_dependency('abgabenrechner','0.3.1')
25
+ s.add_runtime_dependency('abgabenrechner','0.3.3')
26
26
 
27
27
  end
data/lib/basis.rb CHANGED
@@ -3,17 +3,22 @@ require 'abgabenrechner'
3
3
 
4
4
  class Basis
5
5
 
6
- attr_reader :anlage, :zulage, :eigenbeitrag, :rendite
7
- attr_writer :debug, :steuerklasse, :basis_pa
8
-
6
+ attr_reader :anlage, :zulage, :eigenbeitrag, :rendite, :ablaufleistung, :gesamt_eigenbeitrag, :rente
7
+ attr_writer :debug, :steuerklasse, :basis_pa, :verzinsung, :aufschubzeit, :rentengarantiefaktor
9
8
 
10
9
 
11
10
  def initialize(bruttojahresgehalt)
12
- @debug = false
13
- @brutto_pa = bruttojahresgehalt
14
- @basis_pa = 20000
15
- @steuerklasse = 1
16
- @plusdings = 50 # damit das ergebis besser stimmt
11
+ @debug = false
12
+ @brutto_pa = bruttojahresgehalt
13
+ @basis_pa = 20000
14
+ @steuerklasse = 1
15
+ @plusdings = 50 # damit das ergebis besser stimmt
16
+ @verzinsung = 2
17
+ @aufschubzeit = 1
18
+ @gesamt_eigenbeitrag = 0
19
+ @rentengarantiefaktor = 36.51
20
+ @versicherungskosten = 10000
21
+
17
22
  end
18
23
 
19
24
 
@@ -26,23 +31,23 @@ class Basis
26
31
 
27
32
 
28
33
  p1 = {
29
- :lzz => 1,
30
- :re4 => @brutto_pa*100,
31
- :stkl => @steuerklasse,
32
- :r => 0,
34
+ :lzz => 1,
35
+ :re4 => @brutto_pa*100,
36
+ :stkl => @steuerklasse,
37
+ :r => 0,
33
38
  :lzzfreib => @lzzfreib*100,
34
- :krv => 0
39
+ :krv => 0
35
40
  }
36
41
  p1e = BMF::Abgabenrechner.new(p1).ausgaben
37
42
 
38
43
 
39
44
  p2 = {
40
- :lzz => 1,
41
- :re4 => @brutto_pa*100,
42
- :stkl => @steuerklasse,
43
- :r => 0,
45
+ :lzz => 1,
46
+ :re4 => @brutto_pa*100,
47
+ :stkl => @steuerklasse,
48
+ :r => 0,
44
49
  :lzzfreib => 0,
45
- :krv => 0
50
+ :krv => 0
46
51
  }
47
52
  p2e = BMF::Abgabenrechner.new(p2).ausgaben
48
53
 
@@ -52,7 +57,15 @@ class Basis
52
57
  @rendite = (@zulage*100)/@basis_pa
53
58
  @eigenbeitrag= @anlage-@zulage
54
59
 
60
+ invest = Investment.new
61
+ invest.p = @verzinsung.to_f
62
+ invest.r = @anlage
63
+ invest.n = @aufschubzeit
64
+ @ablaufleistung = invest.rn.to_i-@versicherungskosten
65
+ @gesamt_eigenbeitrag = @anlage*@aufschubzeit
55
66
 
67
+ prozehntausend = @ablaufleistung/10000
68
+ @rente = (prozehntausend*@rentengarantiefaktor)*12
56
69
 
57
70
  if @debug
58
71
  puts "#{((p2e[:lstlzz]-p1e[:lstlzz])/100)+@plusdings} euro forderung"
@@ -0,0 +1,25 @@
1
+ class Beitragsbemessungsgrenze
2
+
3
+ def initialize(ostwest)
4
+
5
+ @grenzen = {
6
+ 2011 => { 'west' => 66000, 'ost' => 57600 },
7
+ 2012 => { 'west' => 67200, 'ost' => 57600 }
8
+ }
9
+
10
+ @ostwest = ostwest
11
+ @jahr = Time.now.year
12
+ end
13
+
14
+
15
+ def grv(bruttojahresgehalt)
16
+ return bruttojahresgehalt > @grenzen[@jahr][@ostwest] ? @grenzen[@jahr][@ostwest] : bruttojahresgehalt
17
+ end
18
+
19
+
20
+ def bav_maximal_beitrag
21
+ return @grenzen[@jahr][@ostwest]/100*4
22
+ end
23
+
24
+
25
+ end
@@ -1,15 +1,20 @@
1
1
  require 'abgabenrechner'
2
2
 
3
3
  class BetrieblicheAltersvorsorge
4
- attr_reader :anlage, :zulage, :rendite, :eigenbeitrag
5
- attr_accessor :steuerklasse, :kinder, :kosten, :anlage, :debug
4
+ attr_reader :anlage, :zulage, :rendite, :eigenbeitrag, :ablaufleistung, :gesamt_eigenbeitrag, :rente
5
+ attr_accessor :steuerklasse, :kosten, :anlage, :bav_pa, :debug, :verzinsung, :aufschubzeit, :rentengarantiefaktor
6
6
 
7
7
  def initialize(bruttojahresgehalt)
8
- @debug = false
9
- @kinder = false
10
- @brutto_pa = bruttojahresgehalt
11
- @bav_pa = 185*12
12
- @steuerklasse = 1
8
+ @debug = false
9
+ @kinder = false
10
+ @brutto_pa = bruttojahresgehalt
11
+ @bav_pa = Beitragsbemessungsgrenze.new('west').bav_maximal_beitrag
12
+ @steuerklasse = 1
13
+ @verzinsung = 2
14
+ @aufschubzeit = 1
15
+ @gesamt_eigenbeitrag = 0
16
+ @rentengarantiefaktor = 36.51
17
+ @versicherungskosten = 10000
13
18
  end
14
19
 
15
20
 
@@ -17,46 +22,45 @@ class BetrieblicheAltersvorsorge
17
22
 
18
23
  def abgaben(bav_pa)
19
24
 
25
+ rechen_brutto_pa = @brutto_pa - bav_pa
26
+
20
27
  p = {
21
- :lzz => 1,
22
- :re4 => @brutto_pa*100,
23
- :stkl => @steuerklasse,
24
- :pvz => 1, # ohne kinder weil PKZ=1
28
+ :lzz => 1,
29
+ :re4 => rechen_brutto_pa*100,
30
+ :stkl => @steuerklasse,
31
+ :pvz => 1, # ohne kinder weil PKZ=1
25
32
  :krv => 0,
26
33
  :lzzfreib => bav_pa
27
34
  }
28
35
 
29
36
  pe = BMF::Abgabenrechner.new(p).ausgaben
30
-
31
- @lohnsteuer = pe[:lstlzz]
32
- @soli = pe[:solzlzz]
37
+
38
+ @lohnsteuer = (pe[:lstlzz].to_i)/100
39
+ @soli = (pe[:solzlzz].to_i)/100
33
40
 
34
41
 
35
42
  #maximal 7573.50 in west | 6540.75 in Ost
36
- @alv = (@brutto_pa/100)*1.5
37
-
43
+ @alv = (rechen_brutto_pa/100)*1.5
38
44
 
39
45
  #maximal 7573.50 in west | 6540.75 in Ost
40
- @grv = (@brutto_pa/100)*9.95
41
-
46
+ @grv = (rechen_brutto_pa/100)*9.95
42
47
 
43
- @gkv = (@brutto_pa/100)*8.2
44
- @pfv = @kinder ? (@brutto_pa/100)*0.975 : (@brutto_pa/100)*1.225
48
+ @gkv = (rechen_brutto_pa/100)*8.2
49
+ @pfv = @kinder ? (rechen_brutto_pa/100)*0.975 : (rechen_brutto_pa/100)*1.225
45
50
 
46
51
 
47
52
  if @debug
48
- puts "jahresgehalt: #{@brutto_pa}"
53
+ puts "jahresgehalt: #{rechen_brutto_pa}"
49
54
  puts "BAV jahresbeitrag: #{bav_pa}"
50
55
  puts "lohnsteuer: #{@lohnsteuer}"
51
56
  puts "soli: #{@soli}"
52
- puts "alv: #{@alv.to_f}"
53
- puts "grv: #{@grv.to_f}"
54
- puts "gkv: #{@gkv.to_f}"
55
- puts "pfv: #{@pfv.to_f}"
57
+ puts "alv: #{@alv.to_i}"
58
+ puts "grv: #{@grv.to_i}"
59
+ puts "gkv: #{@gkv.to_i}"
60
+ puts "pfv: #{@pfv.to_i}"
56
61
  end
57
62
 
58
-
59
- return (@lohnsteuer+@soli+@alv+@grv+@gkv+@pfv)/100
63
+ return @lohnsteuer+@soli+@alv+@grv+@gkv+@pfv
60
64
 
61
65
  end
62
66
 
@@ -64,15 +68,22 @@ class BetrieblicheAltersvorsorge
64
68
 
65
69
 
66
70
  def run
67
- @ohnebav = @brutto_pa - abgaben(0).to_i
68
- @mitbav = @brutto_pa - abgaben(@bav_pa*100).to_i
69
-
70
- @zulage = (@mitbav - @ohnebav)
71
+ @ohnebav = abgaben(0).to_i
72
+ @mitbav = abgaben(@bav_pa).to_i
73
+ @zulage = (@ohnebav - @mitbav)
71
74
  @anlage = @bav_pa
72
75
  @eigenbeitrag = @anlage-@zulage
76
+ @rendite = (@zulage*100/@anlage)+@verzinsung
73
77
 
74
- @rendite = @zulage*100/@anlage
75
-
78
+ invest = Investment.new
79
+ invest.p = @verzinsung.to_f
80
+ invest.r = @anlage
81
+ invest.n = @aufschubzeit
82
+ @ablaufleistung = invest.rn.to_i - @versicherungskosten
83
+ @gesamt_eigenbeitrag = @anlage*@aufschubzeit
84
+
85
+ prozehntausend = @ablaufleistung/10000
86
+ @rente = (prozehntausend*@rentengarantiefaktor)*12
76
87
  end
77
88
 
78
89
 
@@ -1,68 +1,204 @@
1
1
  require "drei_schichten_modell/version"
2
- require "betriebliche_altersvorsorge"
2
+
3
+ require "flex"
3
4
  require "riester"
5
+ require "betriebliche_altersvorsorge"
4
6
  require "basis"
7
+ require "gesetzlichen_rentenversicherung"
8
+
9
+ require "beitragsbemessungsgrenze"
10
+ require "investment"
11
+
5
12
 
6
13
  module DreiSchichtenModell
7
14
 
15
+
16
+
8
17
  class AltersvorsorgeMix
9
18
 
10
19
  def initialize(avatar_info)
11
20
  @avatar_info = avatar_info
12
- @riester = false
13
- @bav = false
14
- @basis = false
15
21
  end
16
22
 
17
23
 
18
- def riester
19
- riester = Riester.new(@avatar_info[:income])
20
- riester.kinder = @avatar_info[:children]
21
- riester.run
22
- return riester
23
- end
24
-
25
24
 
26
25
 
27
- def bav
28
- bav = BetrieblicheAltersvorsorge.new(@avatar_info[:income])
29
- bav.kinder = @avatar_info[:children]
30
- bav.steuerklasse = @avatar_info[:taxclass]
31
- bav.run
32
- return bav
26
+ def flex
27
+ if @avatar_info.verzinsung &&
28
+ @avatar_info.aufschubzeit
29
+
30
+ flex = Flex.new
31
+ flex.flex_pa = @avatar_info.flex_beitrag_pa
32
+ flex.verzinsung = @avatar_info.verzinsung
33
+ flex.aufschubzeit = @avatar_info.aufschubzeit
34
+ flex.rentengarantiefaktor = @avatar_info.rentengarantiefaktor
35
+ flex.run
36
+
37
+
38
+ if @avatar_info.flex_wunsch == nil
39
+ @empfehlung = false
40
+ else
41
+ @empfehlung = @avatar_info.flex_wunsch
42
+ end
43
+
44
+
45
+ return to_hash("flex", flex, @empfehlung)
46
+ else
47
+ puts 'es fehlen daten zur berechnung der Flexiblen Altersvorsorge'
48
+ end
33
49
  end
34
50
 
35
51
 
36
- def basis
37
- basis = Basis.new(@avatar_info[:income])
38
- basis.run
39
- return basis
40
- end
41
52
 
42
53
 
54
+ def riester
55
+ if @avatar_info.kinder &&
56
+ @avatar_info.verzinsung &&
57
+ @avatar_info.aufschubzeit &&
58
+ @avatar_info.job_status
59
+
60
+ riester = Riester.new(@avatar_info.einkommen)
61
+ riester.kinder = @avatar_info.kinder
62
+ riester.beitrag_pa = @avatar_info.riester_beitrag_pa if @avatar_info.riester_beitrag_pa
63
+ riester.job_status = @avatar_info.job_status
64
+ riester.verzinsung = @avatar_info.verzinsung
65
+ riester.aufschubzeit = @avatar_info.aufschubzeit
66
+ riester.rentengarantiefaktor = @avatar_info.rentengarantiefaktor
67
+ riester.run
68
+
69
+
70
+ if @avatar_info.riester_wunsch == nil
71
+ @empfehlung = @avatar_info.grv ? true : false
72
+ else
73
+ @empfehlung = @avatar_info.riester_wunsch
74
+ end
75
+
76
+ return to_hash("riester", riester, @empfehlung)
77
+ else
78
+ puts 'es fehlen daten zur berechnung der Riester Rente'
79
+ end
80
+ end
43
81
 
44
- def bestmix
45
- @riester = @avatar_info[:state_pension] ? riester : false
46
- @bav = @avatar_info[:compulsory_insurance] ? bav : false
47
- @basis = @avatar_info[:state_pension] ? false : basis
48
82
 
49
- return @riester, @bav, @basis
50
- end
51
83
 
52
84
 
53
85
 
54
86
 
55
87
 
56
- end
88
+ def bav
89
+ if @avatar_info.steuerklasse &&
90
+ @avatar_info.bav_beitrag_pa &&
91
+ @avatar_info.verzinsung &&
92
+ @avatar_info.aufschubzeit
93
+
94
+
95
+ bav = BetrieblicheAltersvorsorge.new(@avatar_info.einkommen)
96
+ bav.steuerklasse = @avatar_info.steuerklasse
97
+ bav.bav_pa = @avatar_info.bav_beitrag_pa
98
+ bav.verzinsung = @avatar_info.verzinsung
99
+ bav.aufschubzeit = @avatar_info.aufschubzeit
100
+ bav.rentengarantiefaktor = @avatar_info.rentengarantiefaktor
101
+ bav.run
102
+
103
+
104
+ if @avatar_info.bav_wunsch == nil
105
+ @empfehlung = @avatar_info.pflichtversichert ? true : false
106
+ else
107
+ @empfehlung = @avatar_info.bav_wunsch
108
+ end
109
+
110
+
111
+ return to_hash("bav", bav, @empfehlung )
112
+ else
113
+ puts 'es fehlen daten zur berechnung der Betriebliche Altersvorsorge'
114
+ end
115
+ end
116
+
57
117
 
58
-
59
-
60
118
 
61
119
 
62
120
 
121
+ def basis
122
+ if @avatar_info.basis_beitrag_pa &&
123
+ @avatar_info.steuerklasse &&
124
+ @avatar_info.verzinsung &&
125
+ @avatar_info.aufschubzeit
126
+
127
+ basis = Basis.new(@avatar_info.einkommen)
128
+ basis.basis_pa = @avatar_info.basis_beitrag_pa
129
+ basis.steuerklasse = @avatar_info.steuerklasse
130
+ basis.verzinsung = @avatar_info.verzinsung
131
+ basis.aufschubzeit = @avatar_info.aufschubzeit
132
+ basis.rentengarantiefaktor = @avatar_info.rentengarantiefaktor
133
+ basis.run
134
+
135
+ if @avatar_info.basis_wunsch == nil
136
+ @empfehlung = @avatar_info.grv ? false : true
137
+ else
138
+ @empfehlung = @avatar_info.basis_wunsch
139
+ end
140
+
141
+ return to_hash("basis", basis, @empfehlung)
142
+ else
143
+ puts 'es fehlen daten zur berechnung der Ruerup-Rente'
144
+ end
145
+ end
146
+
147
+
148
+
149
+
150
+ def grv
151
+ if @avatar_info.renteneintrittsalter &&
152
+ @avatar_info.geburtsjahr &&
153
+ @avatar_info.berufseinstieg &&
154
+ @avatar_info.bundesland
155
+
156
+ grv = GesetzlichenRentenversicherung.new(@avatar_info.einkommen)
157
+ grv.renteneintrittsalter = @avatar_info.renteneintrittsalter
158
+ grv.geburtsjahr = @avatar_info.geburtsjahr
159
+ grv.bundesland = @avatar_info.bundesland
160
+ grv.berufseinstieg = @avatar_info.berufseinstieg
161
+ grv.grv_pa = @avatar_info.grv_rente_pa ? @avatar_info.grv_rente_pa : 0
162
+ grv.run
163
+
164
+ @empfehlung = @avatar_info.grv ? true : false
165
+
166
+ return to_hash("grv", grv, @empfehlung)
167
+ else
168
+ puts 'es fehlen daten zur berechnung der gesetzlichen Rentenversicherung'
169
+ end
170
+ end
63
171
 
172
+
173
+
174
+
175
+
176
+ def to_hash(name, produkt, empfehlung)
177
+
178
+ {
179
+ empfehlung: empfehlung,
180
+ typ: name,
181
+ anlage: produkt.anlage,
182
+ rendite: produkt.rendite,
183
+ zulage: produkt.zulage,
184
+ eigenbeitrag: produkt.eigenbeitrag,
185
+ gesamt_eigenbeitrag: produkt.gesamt_eigenbeitrag,
186
+ ablaufleistung: produkt.ablaufleistung,
187
+ rente: produkt.rente.to_i
188
+ }
189
+ end
64
190
 
65
191
 
66
192
 
193
+ def produkte
194
+ return flex, riester, bav, basis, grv
195
+ end
196
+
197
+
198
+ end
199
+
67
200
 
201
+
202
+
203
+
68
204
  end
@@ -1,3 +1,3 @@
1
1
  module DreiSchichtenModell
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.5"
3
3
  end
data/lib/flex.rb CHANGED
@@ -1,42 +1,40 @@
1
1
  class Flex
2
2
 
3
- attr_reader :anlage, :rendite, :eigenbeitrag, :zulage
4
- attr_writer :partner, :kinder
5
-
6
- def initialize(bruttojahreseinkommen)
7
- @bruttojahreseinkommen = bruttojahreseinkommen
8
- @anlagebetrag = bruttojahreseinkommen/100*4 < 2100 ? bruttojahreseinkommen/100*4 : 2100
9
- @grundzulage = 154
10
- @partner = false
11
- @kinder = false
12
- @kinderzulage = 0
3
+ attr_reader :anlage, :rendite, :eigenbeitrag, :ablaufleistung, :zulage, :gesamt_eigenbeitrag, :rente
4
+ attr_writer :verzinsung, :flex_pa, :aufschubzeit, :rentengarantiefaktor
5
+
6
+ def initialize
7
+ @verzinsung = 2.0
8
+ @aufschubzeit = 1
9
+ @ablaufleistung = 0
13
10
  @zulage = 0
11
+ @flex_pa = 0
12
+ @gesamt_eigenbeitrag = 0
13
+ @rentengarantiefaktor = 36.51
14
+ @versicherungskosten = 10000
14
15
  end
15
-
16
-
17
16
 
18
- def eigenbeitrag
19
- eigenbeitrag = @anlagebetrag - @grundzulage - @kinderzulage
20
- return eigenbeitrag > 60 ? eigenbeitrag : 60
21
- end
22
17
 
23
18
 
24
-
19
+
25
20
  def run
21
+ invest = Investment.new
22
+ invest.p = @verzinsung
23
+ invest.r = @flex_pa
24
+ invest.n = @aufschubzeit
26
25
 
27
- @kinder.each do |geburtsjahr|
28
- @kinderzulage += geburtsjahr < 2008 ? 185 : 300
29
- end
30
-
31
- @zulage = @grundzulage + @kinderzulage
32
- @anlage = @anlagebetrag + @zulage
33
- @eigenbeitrag = eigenbeitrag
34
- @rendite = @zulage*100/@anlagebetrag
35
-
26
+ @ablaufleistung = invest.rn.to_i-@versicherungskosten
27
+ @anlage = @flex_pa
28
+ @eigenbeitrag = @flex_pa
29
+ @rendite = @verzinsung
30
+ @gesamt_eigenbeitrag = @anlage*@aufschubzeit
31
+
32
+ prozehntausend = @ablaufleistung/10000
33
+ @rente = (prozehntausend*@rentengarantiefaktor)*12
36
34
  end
37
-
38
-
39
-
40
-
35
+
36
+
37
+
38
+
41
39
 
42
40
  end
@@ -0,0 +1,38 @@
1
+ # http://www.focus.de/finanzen/altersvorsorge/rente/tid-8425/rentenrechner_aid_231122.html
2
+
3
+ class GesetzlichenRentenversicherung
4
+
5
+ attr_reader :anlage, :rendite, :eigenbeitrag, :ablaufleistung, :zulage, :gesamt_eigenbeitrag, :rente
6
+ attr_writer :grv_pa, :aufschubzeit, :berufseinstieg, :geburtsjahr, :renteneintrittsalter, :bundesland
7
+
8
+ def initialize(bruttojahresgehalt)
9
+ @renteneintrittsalter = 67
10
+ @geburtsjahr = 0
11
+ @brutto_pa = bruttojahresgehalt
12
+ @verzinsung = 2.0
13
+ @grv_pa = 0
14
+ @zulage = 0
15
+ @ablaufleistung = 0
16
+ @anlage = 0
17
+ end
18
+
19
+
20
+ def run
21
+ @rentenanwartschaftszeit = (@geburtsjahr + @renteneintrittsalter) - @berufseinstieg
22
+ @entgeltpunkte = 1.0*@rentenanwartschaftszeit
23
+ @zugangsfaktor = 1
24
+ @rentenartfaktor = 1
25
+ @rentenwert = 26.56
26
+
27
+ @rendite = @verzinsung
28
+ @eigenbeitrag = (@brutto_pa/100)*9.95
29
+ @gesamt_eigenbeitrag = ((@brutto_pa/100)*9.95)*@rentenanwartschaftszeit
30
+ if @grv_pa == 0
31
+ @rente = (@entgeltpunkte*@zugangsfaktor*@rentenartfaktor*@rentenwert)*12
32
+ else
33
+ @rente = @grv_pa
34
+ end
35
+ end
36
+
37
+ end
38
+
data/lib/investment.rb CHANGED
@@ -1,20 +1,172 @@
1
1
  class Investment
2
- attr_accessor :jahresbeitrag, :jahre, :verzinsung, :kapitelanwuchs
2
+ attr_accessor :p, :r, :n, :k0, :inflation
3
+ attr_reader :i
4
+
5
+ # http://page.math.tu-berlin.de/~mrenesse/agromath/fima.pdf
6
+
7
+ # TODO
8
+ # S0 - Darlehen, Schuldsumme
9
+ # Sn - Restschuld
10
+ # T - Tildungsrate
11
+ # Z - Zinsbetrag
12
+ # A - Annuität
3
13
 
4
14
 
5
- def initialize(jahresbeitrag, jahre, verzinsung)
6
- @jahresbeitrag = jahresbeitrag
7
- @jahre = jahre + 1
8
- @verzinsung = verzinsung
9
- @kapitelanwuchs = []
15
+ def initialize
16
+ # p - Zinssatz in Prozent
17
+ @p = 0.0
10
18
 
11
- kapital = 0
12
- jahre.times do
13
- kapital += kapital/100*verzinsung
14
- kapital += jahresbeitrag + jahresbeitrag/100*verzinsung
15
- kapitelanwuchs << sprintf("%0.2f", kapital)
16
- end
19
+ @inflation = 0.0
17
20
 
21
+ # K0 - Anfangskapital
22
+ @k0 = 0
23
+
24
+ # n - Laufzeit (Jahre, Monate, Tage
25
+ # n - Anzahl der Rückzahlungsperioden
26
+ @n = 0
27
+ end
28
+
29
+
30
+
31
+ # r - Rente / Rate
32
+ def r(*rate)
33
+ if @r
34
+ return @r
35
+ else
36
+ return k0*((q-1)/(qn-1))
37
+ end
38
+ end
39
+
40
+
41
+ # q - Aufzinsungsfaktor ( q = 1 + i )
42
+ def q
43
+ 1+i
44
+ end
45
+
46
+
47
+ def qn
48
+ q**n
49
+ end
50
+
51
+
52
+ # v - Abzinsungsfaktor (v = 1 / q )
53
+ def v
54
+ 1/q
18
55
  end
56
+
57
+
58
+ # i - Zinssatz ( i = p / 100 )
59
+ def i
60
+ (@p-@inflation)/100
61
+ end
62
+
63
+
64
+ # Kn - Endkapital zinseszinslicher Verzinsung
65
+ def kn
66
+ k0*qn
67
+ end
68
+
69
+
70
+ # Kn - Endkapital einfacher Verzinsung
71
+ def kn_einfach
72
+ k0*(1+(i*n))
73
+ end
74
+
75
+
76
+ # Rn - Endwert der nachschüssigen Rente
77
+ def rn
78
+ r*((qn-1)/(q-1))
79
+ end
80
+
81
+
82
+ # Die nachschüssige Rentenbarwertformel (RBF) lautet
83
+ def rbf
84
+ rn*(1/qn)
85
+ end
86
+
19
87
 
88
+ # Barwert der nachschussigen ewigen Rente
89
+ def r0
90
+ r/i
91
+ end
92
+
93
+
20
94
  end
95
+
96
+
97
+
98
+
99
+ # Ein Betrag von 100 € wird bei einer einfachen Verzinsung von 2% genau drei Jahre
100
+ # lang ausgeliehen. Die Zinszahlung soll am Ende der Laufzeit erfolgen. Wie groß ist die
101
+ # am Ende der Laufzeit angesammelte Summe aus Kapital und Zinsen?
102
+ #invest = Investment.new
103
+ #invest.k0 = 100
104
+ #invest.p = 2.0
105
+ #invest.n = 3
106
+ #puts invest.kn_einfach.to_i
107
+
108
+
109
+
110
+ # Eine Spareinlage von 100 € wird für 4 Jahre angelegt und mit 6% verzinst. Welche
111
+ # Höhe hat das Kapital bei zinseszinslicher Verzinsung nach 4 Jahren?
112
+ # invest = Investment.new
113
+ # invest.k0 = 100
114
+ # invest.p = 6.0
115
+ # invest.n = 4
116
+ # puts "mit zinseszinslicher Verzinsung #{invest.kn.to_i} euro "
117
+ # puts "mit einfacher Verzinsung #{invest.kn_einfach.to_i} euro "
118
+ # Bei einfacher Verzinsung ist die Kapitalsumme am Ende des mehrjährigen
119
+ # Anlagezeitraums kleiner als bei der Zinseszinsrechnung.
120
+
121
+
122
+
123
+
124
+ # Theo Knapp bringt 5 Jahre lang einmal jährlich am Jahresende 100 €
125
+ # zur Bank, die diese Einzahlungen bei 5% Zinseszinsen ansammelt.
126
+ # Welcher Betrag wird Theo nach Ablauf von 5 Jahren zur Verfügung
127
+ # stehen (Rentenendwert)?
128
+ # invest = Investment.new
129
+ # invest.p = 5.0
130
+ # invest.r = 100
131
+ # invest.n = 5
132
+ # puts "der Rentenendwert von Theo Knapp betaegt nach 5 Jahren #{invest.rn.to_i} euro "
133
+
134
+
135
+
136
+
137
+
138
+ # Aus einem Lottogewinn stehen Berta Gierig für die nächsten 10 Jahre
139
+ # jährliche Zahlungen in Höhe von je 10.000 € zu. Welchen Wert hat dieser
140
+ # Lottogewinn heute, wenn von 6% Zinseszinsen ausgegangen wird, d.h.
141
+ # mit welchem Betrag könnte Berta heute ihre Rente kapitalisieren lassen
142
+ # (Rentenbarwert)?
143
+ # invest = Investment.new
144
+ # invest.p = 6.0
145
+ # invest.r = 10000
146
+ # invest.n = 10
147
+ # puts "Sie könnte sich also #{invest.rbf.to_i} € sofort auszahlen lassen."
148
+ # puts "Der Endwert von Berta Gierigs Lottogewinn beträgt #{invest.rn.to_i} euro."
149
+
150
+
151
+
152
+
153
+
154
+
155
+ # In 18 Jahren sollen dem neugeborenen Kind Benjamin der Familie
156
+ # Ver’Wöhn 25.000 € zur Verfügung stehen. Wie hoch müssen die
157
+ # jährlichen Raten sein, die die Ver’Wöhns während der nächsten 18 Jahre
158
+ # bei 5% Zinsen einzahlen müssen, damit nach 18 Jahren exakt der
159
+ # gewünschte Betrag für Benjamin zur Verfügung steht?
160
+ # invest = Investment.new
161
+ # invest.k0 = 25000
162
+ # invest.p = 5.0
163
+ # invest.n = 18
164
+ # puts "Familie Verwöhn müsste jährlich #{invest.r.to_i} € einzahlen, damit Benjamin nach 18 Jahren über 25.000 € verfügen kann"
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
+
@@ -0,0 +1,14 @@
1
+ module Renteneintrittsalter
2
+
3
+ def renteneintrittsalter
4
+ @regelaltersrente = 67
5
+ case @geburtsjahr
6
+ when 1946..1957 then @regelaltersrente = 65
7
+ when 1958..1963 then @regelaltersrente = 66
8
+ when 1964..Time.now.year then @regelaltersrente = 67
9
+ end
10
+ return @regelaltersrente
11
+ end
12
+
13
+ end
14
+
data/lib/riester.rb CHANGED
@@ -1,42 +1,82 @@
1
+ require 'investment'
1
2
  class Riester
2
3
 
3
- attr_reader :anlage, :rendite, :eigenbeitrag, :zulage
4
- attr_writer :partner, :kinder
4
+ attr_reader :anlage, :rendite, :zulage, :ablaufleistung, :eigenbeitrag, :gesamt_eigenbeitrag, :rente
5
+ attr_writer :kinder, :verzinsung, :aufschubzeit, :rentengarantiefaktor, :beitrag_pa, :job_status
6
+
5
7
 
6
8
  def initialize(bruttojahreseinkommen)
7
9
  @bruttojahreseinkommen = bruttojahreseinkommen
8
- @anlagebetrag = bruttojahreseinkommen/100*4 < 2100 ? bruttojahreseinkommen/100*4 : 2100
10
+ @maximalbeitrag = bruttojahreseinkommen/100*4 < 2100 ? bruttojahreseinkommen/100*4 : 2100
9
11
  @grundzulage = 154
10
- @partner = false
11
- @kinder = false
12
+ @kinder = []
12
13
  @kinderzulage = 0
13
14
  @zulage = 0
15
+ @verzinsung = 2.0
16
+ @aufschubzeit = 1
17
+ @rentengarantiefaktor = 36.51
18
+ @eigenbeitrag = ideal_beitrag
14
19
  end
15
20
 
16
21
 
17
-
18
- def eigenbeitrag
19
- eigenbeitrag = @anlagebetrag - @grundzulage - @kinderzulage
22
+ def ideal_beitrag
23
+ eigenbeitrag = @maximalbeitrag - @grundzulage - @kinderzulage
20
24
  return eigenbeitrag > 60 ? eigenbeitrag : 60
21
25
  end
22
26
 
23
27
 
28
+ def versicherungskosten(ablaufleistung)
29
+ @ablaufleistung = ablaufleistung
30
+ kosten = Investment.new
31
+ kosten.k0 = @ablaufleistung
32
+ kosten.p = 12.0 # 12% kosten
33
+ kosten.n = 1
34
+ return kosten.kn_einfach - @ablaufleistung
35
+ end
36
+
24
37
 
25
38
  def run
26
-
39
+ # brechnung der kinder zulage.
27
40
  @kinder.each do |geburtsjahr|
28
- @kinderzulage += geburtsjahr < 2008 ? 185 : 300
41
+ @kinderzulage += geburtsjahr < 2008 ? 185 : 300
29
42
  end
30
43
 
44
+ # die gesamte zulage p.a.
31
45
  @zulage = @grundzulage + @kinderzulage
32
- @anlage = @anlagebetrag + @zulage
33
- @eigenbeitrag = eigenbeitrag
34
- @rendite = @zulage*100/@anlagebetrag
46
+
47
+ # welche summe geht in die anlage p.a.
48
+ @anlage = @maximalbeitrag + @zulage
49
+
50
+ # berechnung der redite
51
+ @rendite = (@zulage * 100 / @maximalbeitrag) + @verzinsung
52
+
53
+ # was kostet mich das produkt efektiv. mit berucksichtigung der zulagen
54
+ @gesamt_eigenbeitrag = @eigenbeitrag * @aufschubzeit
55
+
56
+ # berechnung der ablaufleistung
57
+ invest = Investment.new
58
+ invest.p = @verzinsung
59
+ invest.r = @anlage
60
+ invest.n = @aufschubzeit
61
+ @ablaufleistung = (invest.rn - versicherungskosten(invest.rn.to_i)).to_i
35
62
 
63
+
64
+ # fiktive berechnung der rente p.a.
65
+ prozehntausend = @ablaufleistung/10000
66
+ @rente = (prozehntausend*@rentengarantiefaktor)*12
36
67
  end
68
+ end
37
69
 
38
70
 
39
71
 
40
72
 
41
-
42
- end
73
+ #riester = Riester.new(32000)
74
+ #riester.verzinsung = 6.0
75
+ #riester.beitrag_pa = 60
76
+ #riester.kinder = [1999,1980]#
77
+ #riester.aufschubzeit = 30
78
+ #riester.run
79
+ #puts riester.inspect
80
+
81
+
82
+
@@ -4,126 +4,38 @@ describe DreiSchichtenModell do
4
4
 
5
5
  it "get perfect dsm mix" do
6
6
 
7
-
8
-
9
- # Angelstelter mit zwei kindern
10
- avatar1 = {
11
- :income => 48000,
12
- :age => 30,
13
- :taxclass => 1,
14
- :churchtax => true,
15
- :obligation_insured => true,
16
- :health_insurance => 'g',
17
- :state_pension => true,
18
- :children => [1999,1980],
19
- :federal_state => 'hh',
20
- :pension_height => 1500,
21
- :pensionable_age => 67
7
+ avatar = {
8
+ einkommen: 27600,
9
+ geburtsjahr: 1980,
10
+ steuerklasse: 1,
11
+ kirchensteuer: false,
12
+ grv: true,
13
+ grv_rente_pa: 600*12,
14
+ wunschrente_pa: 2000*12,
15
+ pflichtversichert: true,
16
+ krankenversicherung: 'g',
17
+ kinder: [1999,2002],
18
+ bundesland: 'hh',
19
+ verzinsung: 5.0,
20
+ renteneintrittsalter: 67,
21
+ aufschubzeit: 30,
22
+ bav_beitrag_pa: 600
22
23
  }
23
24
 
24
25
 
25
-
26
- # freiberufler ohne kinder
27
- avatar2 = {
28
- :income => 72000,
29
- :age => 27,
30
- :taxclass => 1,
31
- :churchtax => false,
32
- :sozi_obligation => false,
33
- :health_insurance => 'p',
34
- :state_pension => false,
35
- :children => [],
36
- :federal_state => 'be',
37
- :pension_height => 3000,
38
- :pensionable_age => 67
39
-
40
- }
41
-
42
-
43
- # Lehrer(Beamte) verheiratet mit einem kind
44
- avatar3 = {
45
- :income => 36000,
46
- :age => 35,
47
- :taxclass => 1,
48
- :churchtax => true,
49
- :sozi_obligation => false,
50
- :health_insurance => 'g',
51
- :state_pension => true,
52
- :children => [1998],
53
- :federal_state => 'be',
54
- :pension_height => 1500,
55
- :pensionable_age => 67
56
-
57
- }
58
-
59
-
60
- # Student
61
- avatar4 = {
62
- :income => 5000,
63
- :age => 23,
64
- :taxclass => 1,
65
- :churchtax => false,
66
- :sozi_obligation => false,
67
- :health_insurance => 'p',
68
- :state_pension => true,
69
- :children => [],
70
- :federal_state => 'hh',
71
- :pension_height => 1500,
72
- :pensionable_age => 67
73
-
74
- }
75
-
76
-
77
- # Angelstelter mit zwei kindern
78
- avatar5 = {
79
- :income => 28600,
80
- :age => 23,
81
- :taxclass => 1,
82
- :churchtax => true,
83
- :sozi_obligation => true,
84
- :health_insurance => 'g',
85
- :state_pension => true,
86
- :children => [],
87
- :federal_state => 'hh',
88
- :pension_height => 1500,
89
- :pensionable_age => 67
90
- }
91
-
92
-
93
- avatar = avatar2
94
-
95
-
96
-
97
26
  altersvorsorge = DreiSchichtenModell::AltersvorsorgeMix.new( avatar )
98
- riester, bav, basis = altersvorsorge.bestmix
99
-
100
- @gesamt_anlage = 0
101
- @gesamt_zulage = 0
102
- @gesamt_eigenbeitrag = 0
103
27
 
104
- [riester, bav, basis].each do |item|
105
- if item
106
- puts item.inspect
107
- @gesamt_anlage += item.anlage
108
- @gesamt_zulage += item.zulage
109
- @gesamt_eigenbeitrag += item.eigenbeitrag
110
- end
28
+ altersvorsorge.produkte.each do |product|
29
+ puts product.inspect if product
111
30
  end
112
31
 
113
- puts @gesamt_anlage
114
- puts @gesamt_zulage
115
- puts @gesamt_eigenbeitrag
116
32
 
117
- puts '-- -- --'
118
33
 
119
- # jahresbeitrag, zeitraum, verzinsung
120
- invest = Investment.new(@gesamt_anlage, avatar[:pensionable_age]-avatar[:age], 8)
121
- endsumme = invest.kapitelanwuchs.last
122
- puts "endkapital mit #{avatar[:pensionable_age]} nach #{avatar[:pensionable_age]-avatar[:age]} jahren: #{endsumme} euro"
123
-
124
34
  end
125
35
 
126
36
 
127
37
 
128
38
 
129
39
  end
40
+
41
+
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'rubygems'
2
2
  require 'bundler/setup'
3
+ require 'beitragsbemessungsgrenze'
3
4
  require 'abgabenrechner'
4
5
  require 'drei_schichten_modell'
5
6
  require "investment"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: drei_schichten_modell
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-09-15 00:00:00.000000000Z
12
+ date: 2012-03-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70106178597940 !ruby/object:Gem::Requirement
16
+ requirement: &70328374313140 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,18 +21,18 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70106178597940
24
+ version_requirements: *70328374313140
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: abgabenrechner
27
- requirement: &70106178597440 !ruby/object:Gem::Requirement
27
+ requirement: &70328374312540 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - =
31
31
  - !ruby/object:Gem::Version
32
- version: 0.3.1
32
+ version: 0.3.3
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70106178597440
35
+ version_requirements: *70328374312540
36
36
  description: dieses rubygem berechnet den perfekten altersvorsorge mix aus allen drei
37
37
  schichten. und gibt angaben ueber die zulagenhoehe
38
38
  email:
@@ -50,11 +50,14 @@ files:
50
50
  - drei_schichten_modell.gemspec
51
51
  - lib/.DS_Store
52
52
  - lib/basis.rb
53
+ - lib/beitragsbemessungsgrenze.rb
53
54
  - lib/betriebliche_altersvorsorge.rb
54
55
  - lib/drei_schichten_modell.rb
55
56
  - lib/drei_schichten_modell/version.rb
56
57
  - lib/flex.rb
58
+ - lib/gesetzlichen_rentenversicherung.rb
57
59
  - lib/investment.rb
60
+ - lib/renteneintrittsalter.rb
58
61
  - lib/riester.rb
59
62
  - spec/altersvorsorgemix_spec.rb
60
63
  - spec/spec_helper.rb