drei_schichten_modell 0.0.3 → 0.0.5

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.
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