financial_maths 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ .DS_Store
data/.project ADDED
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <projectDescription>
3
+ <name>financial_maths</name>
4
+ <comment></comment>
5
+ <projects>
6
+ </projects>
7
+ <buildSpec>
8
+ </buildSpec>
9
+ <natures>
10
+ <nature>com.aptana.projects.webnature</nature>
11
+ <nature>org.radrails.rails.core.railsnature</nature>
12
+ <nature>com.aptana.ruby.core.rubynature</nature>
13
+ </natures>
14
+ </projectDescription>
data/CHANGELOG.md ADDED
@@ -0,0 +1,26 @@
1
+
2
+ #### [Current]
3
+
4
+ ####
5
+ * [29d39cb](../../commit/29d39cb) - __(Ruben Espinosa)__ Coderwalll profile
6
+ * [d39af4e](../../commit/d39af4e) - __(Ruben Espinosa)__ readme updated
7
+ * [799e918](../../commit/799e918) - __(Ruben Espinosa)__ Gem version budget
8
+ * [955354e](../../commit/955354e) - __(Ruben Espinosa)__ coverals icon
9
+ * [fd9f8d7](../../commit/fd9f8d7) - __(Ruben Espinosa)__ using coverals
10
+ * [1e00856](../../commit/1e00856) - __(Ruben Espinosa)__ delete unnecesary file
11
+ * [6566d95](../../commit/6566d95) - __(Ruben Espinosa)__ new unit tests
12
+ * [d67e8cb](../../commit/d67e8cb) - __(Ruben Espinosa)__ improve in readme
13
+ * [c83fd63](../../commit/c83fd63) - __(Ruben Espinosa)__ new test
14
+ * [17d4a56](../../commit/17d4a56) - __(Ruben Espinosa)__ amotizations anticipated and dues
15
+ * [6abcd52](../../commit/6abcd52) - __(Ruben Espinosa)__ new unit test
16
+ * [0105bc3](../../commit/0105bc3) - __(Ruben Espinosa)__ rspec
17
+ * [7facdde](../../commit/7facdde) - __(Ruben Espinosa)__ travis_ci
18
+ * [1c51a1c](../../commit/1c51a1c) - __(Ruben Espinosa)__ travis_ci
19
+ * [eff10c6](../../commit/eff10c6) - __(Ruben Espinosa)__ travis_ci
20
+ * [8ac3465](../../commit/8ac3465) - __(Ruben Espinosa)__ travis_ci
21
+ * [cb60c1f](../../commit/cb60c1f) - __(Ruben Espinosa)__ new methods, v004
22
+ * [05beff9](../../commit/05beff9) - __(Ruben Espinosa)__ 5 functions more
23
+ * [d408047](../../commit/d408047) - __(Ruben Espinosa)__ update gemspec
24
+ * [08810e5](../../commit/08810e5) - __(Ruben Espinosa)__ Update README.md
25
+ * [a59eb54](../../commit/a59eb54) - __(Ruben Espinosa)__ updated readme
26
+ * [37b9aaf](../../commit/37b9aaf) - __(Ruben Espinosa)__ first commit
data/Gemfile CHANGED
@@ -2,4 +2,5 @@ source 'http://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in financial_maths.gemspec
4
4
  gemspec
5
- gem 'rspec'
5
+ gem 'rspec'
6
+ gem 'coveralls', require: false
data/README.md CHANGED
@@ -1,24 +1,14 @@
1
- # FinancialMaths
1
+ ## FinancialMaths
2
2
  [![Build Status](https://travis-ci.org/rderoldan1/financial_maths.png?branch=master)](https://travis-ci.org/rderoldan1/financial_maths)
3
+ [![Coverage Status](https://coveralls.io/repos/rderoldan1/financial_maths/badge.png?branch=master)](https://coveralls.io/r/rderoldan1/financial_maths)
4
+ [![Gem Version](https://badge.fury.io/rb/financial_maths.png)](http://badge.fury.io/rb/financial_maths)
5
+ [![endorse](https://api.coderwall.com/rderoldan1/endorsecount.png)](https://coderwall.com/rderoldan1)
3
6
  more functions will be added soon
4
7
 
5
- #### New in version 0.0.4
6
-
7
- 1. Amortization tables
8
- 2. efective_given_nominal_due(nominal_rate, term)
9
- 3. efective_given_nominal_antipipated
10
- 4. nominal_antipiated_given_efective
11
- 5. nominal_due_given_efective
12
- 6. anticipated_fixed_payment
13
-
14
- #### New in version 0.0.3
15
-
16
- 1. future_given_present
17
- 2. present_given_future
18
- 3. annuity_given_present
19
- 4. annuity_given_future
20
- 5. present_given_annuity
21
- 6. future_given_annuity
8
+ #### New in version 0.0.5
9
+ 1. New functions for loan amortizations
10
+ 2. New payments calculations
11
+ 3. New unit tests
22
12
 
23
13
  #### Pending
24
14
  1. include more functions
@@ -46,39 +36,93 @@ include FinancialMaths
46
36
 
47
37
  ```
48
38
 
49
- ### Calculate Fixed payment equity
50
- A credit in a period of 15 years, the amount is $100.000.000 and the interest is 1.44594763%,
51
- call the method following the next instruction.
52
-
53
- ```ruby
54
- variable_payment_amortization(15,100000000,0.0144594763)
55
- ```
56
- The result is a hash with the plan of payments, it looks like that
57
-
58
- [{:period=>0, :monthly_payment=>nil, :interest=>nil, :payment=>nil, :balance=>100000000},
59
- {:period=>1, :payment=>2001502.63, :interest=>1445947.63, :monthly_payment=>555555, :balance=>99444445},
60
- {:period=>2, :payment=>1993469.5956441534, :interest=>1437914.5956441534, :monthly_payment=>555555, :balance=>98888890},
61
- ...
62
- ..
63
- .
64
- ]
65
-
66
- The lists of the methods and their params
67
-
68
- future_given_present(present_value, interest, term)
69
- present_given_future(future_value, interest, term)
70
- annuity_given_present(present_value, interest, term)
71
- annuity_given_future(future_value, interest, term)
72
- present_given_annuity(annuity, interest, term)
73
- future_given_annuity(annuity, interest, term)
74
- efective_given_nominal_due(nominal_rate, term)
75
- efective_given_nominal_antipipated(nominal_rate, term)
76
- nominal_antipiated_given_efective(nominal_rate, term)
77
- nominal_due_given_efective(nominal_rate, term)
78
- anticipated_fixed_payment(present_value, rate, term)
79
-
80
- variable_payment_amortization(periods, amount, rate)
81
- fixed_payment_amortization(periods, amount, rate, payment)
39
+ ## The lists of the methods and their params
40
+
41
+ #### Variable amortization payment due
42
+ due_variable_payment_amortization (periods, amount, rate, payment)
43
+
44
+ $ due_variable_payment_amortization(5,10000,1.8,2000)
45
+ $ [{:period=>0, :monthly_payment=>nil, :interest=>nil, :payment=>nil, :balance=>10000},
46
+ {:period=>1, :payment=>20000.0, :interest=>18000.0, :monthly_payment=>2000, :balance=>8000},
47
+ {:period=>2, :payment=>16400.0, :interest=>14400.0, :monthly_payment=>2000, :balance=>6000},
48
+ {:period=>3, :payment=>12800.0, :interest=>10800.0, :monthly_payment=>2000, :balance=>4000},
49
+ {:period=>4, :payment=>9200.0, :interest=>7200.0, :monthly_payment=>2000, :balance=>2000},
50
+ {:period=>5, :payment=>5600.0, :interest=>3600.0, :monthly_payment=>2000, :balance=>0}]
51
+
52
+
53
+ #### Variable payment amortization anticipated
54
+ anticipated_variable_payment_amortization (periods, amount, rate, payment)
55
+
56
+ $ anticipated_variable_payment_amortization(5,10000,1.8,2000)
57
+ $ [{:period=>0, :payment=>20000.0, :interest=>18000.0, :monthly_payment=>2000, :balance=>8000},
58
+ {:period=>1, :payment=>16400.0, :interest=>14400.0, :monthly_payment=>2000, :balance=>6000},
59
+ {:period=>2, :payment=>12800.0, :interest=>10800.0, :monthly_payment=>2000, :balance=>4000},
60
+ {:period=>3, :payment=>9200.0, :interest=>7200.0, :monthly_payment=>2000, :balance=>2000},
61
+ {:period=>4, :payment=>5600.0, :interest=>3600.0, :monthly_payment=>2000, :balance=>0}]
62
+
63
+ #### Amortization with fixed payment due
64
+ due_fixed_payment_amortization (periods, amount, rate, payment)
65
+
66
+ $ due_fixed_payment_amortization(5,10000,1.8,2109)
67
+ $ [{:period=>0, :monthly_payment=>nil, :interest=>nil, :payment=>nil, :balance=>10000},
68
+ {:period=>1, :payment=>2109, :interest=>18000.0, :monthly_payment=>-15891.0, :balance=>25891.0},
69
+ {:period=>2, :payment=>2109, :interest=>46603.8, :monthly_payment=>-44494.8, :balance=>70385.8},
70
+ {:period=>3, :payment=>2109, :interest=>126694.44, :monthly_payment=>-124585.44, :balance=>194971.24},
71
+ {:period=>4, :payment=>2109, :interest=>350948.232, :monthly_payment=>-348839.232, :balance=>543810.4720000001},
72
+ {:period=>5, :payment=>2109, :interest=>978858.8496000002, :monthly_payment=>-976749.8496000002, :balance=>1520560.3216000004}]
73
+
74
+
75
+ #### Variable payment amortization anticipated
76
+ anticipated_fixed_payment_amortization (periods, amount, rate, payment)
77
+
78
+
79
+ #### Find future given the present value
80
+ future_given_present (present_value, interest, term)
81
+
82
+ $ future_given_present(10000,1.8,5)
83
+ $ 1721036.8
84
+
85
+ #### Find present given the future
86
+ present_given_future (future_value, interest, term)
87
+
88
+ $ present_given_future(10000,1.8,5)
89
+ $ 58.1045
90
+
91
+ #### Find annuity present value given
92
+ annuity_given_present (present_value, interest, term)
93
+
94
+ $ annuity_given_present(10000,1.8,5)
95
+ $ 18105.1994
96
+
97
+ #### Find the future value annuity given
98
+ annuity_given_future (future_value, interest, term)
99
+
100
+ #### Find present given the annuity
101
+ present_given_annuity (annuity, interest, term)
102
+
103
+ #### Find future given the annuity
104
+ future_given_annuity (annuity, interest, term)
105
+
106
+ #### Find effective rate given the nominal rate due
107
+ efective_given_nominal_due (nominal_rate, term)
108
+
109
+ #### Find effective rate given the nominal rate anticipated
110
+ efective_given_nominal_antipipated (nominal_rate, term)
111
+
112
+ #### Find effective nominal rate given anticipated
113
+ nominal_antipiated_given_efective (nominal_rate, term)
114
+
115
+ #### Find effective nominal rate given anticipated
116
+ nominal_due_given_efective (nominal_rate, term)
117
+
118
+ #### Find the fixed anticipated
119
+ anticipated_fixed_payment (present_value, rate, term)
120
+
121
+ #### Finding variable amount
122
+ variable_payment (amount, periods)
123
+
124
+ $ variable_payment(10000,5)
125
+ $ 2000.0
82
126
 
83
127
  ## Contributing
84
128
 
@@ -1,3 +1,3 @@
1
1
  module FinancialMaths
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -106,25 +106,43 @@ module FinancialMaths
106
106
  (annuity * (((1 + interest.to_f) ** term) -1) / interest.to_f ).round(4)
107
107
  end
108
108
 
109
- # hallar tasa efectiva dado la tasa nominal vencida NVEF
110
- def efective_given_nominal_due(nominal_rate, term)
111
- (((1 + nominal_rate.to_f) ** term)-1).round(4)
112
- end
113
-
114
- # hallar tasa efectiva dado la tasa nominal anticipada NAEF
115
- def efective_given_nominal_antipipated(nominal_rate, term)
116
- (1 / ((1 - nominal_rate.to_f) ** term)).round(4) - 1
117
- end
118
-
119
- # hallar tasa nominal anticipada dado efectiva EFNV
120
- def nominal_antipiated_given_efective(nominal_rate, term)
121
- (1 - (1 / (1 + nominal_rate.to_f) ** (1 / term))).round(4)
122
- end
123
-
124
- # hallar tasa nominal anticipada dado efectiva EFNV
125
- def nominal_due_given_efective(nominal_rate, term)
126
- ((nominal_rate.to_f + 1) ** (1 / term)).round(4)
127
- end
109
+ # == Conversion rates
110
+
111
+ ##
112
+ # Description: Find effective rate given nominal rate expired - NVEF
113
+ # Formula: ((1 + (NOMINAL RATE / PERIODS)) ^ PERIODS) - 1
114
+ def efective_given_nominal_due(nominal_rate, term)
115
+ ((((1+((nominal_rate.to_f/100)/term))**term)-1).round(6))*100
116
+ end
117
+
118
+ ##
119
+ # Description: Find effective rate given anticipated nominal rate - NAEF
120
+ # Formula: ((1 / ((1- (NOMINAL RATE / PERIODS)) ^ PERIODS)) -1
121
+ def efective_given_nominal_anticipated(nominal_rate, term)
122
+ (((1/((1-((nominal_rate.to_f/100)/term))**term))-1)*100).round(4)
123
+ end
124
+
125
+ ##
126
+ # Description: Find nominal rate anticipated given effective rate - EFNV
127
+ # Formulas:
128
+ # nominalRate = (1 + EFFECTIVE RATE)^(1 / PERIODS) - 1
129
+ # toAnticipated = nominalRate / 1 + nominalRate
130
+ # Returned -> toAnticipated * PERIODS
131
+ def nominal_anticipated_given_efective(effective_rate, periods)
132
+ nominalRate = (1+(effective_rate.to_f/100))**(1/periods.to_f)-1;
133
+ toAnticipated = nominalRate / (1+nominalRate)
134
+ (toAnticipated * periods.to_f * 100).round(4)
135
+ end
136
+
137
+ ##
138
+ # Description: Find nominal rate expired given effective rate - EFNV
139
+ # Formula: ((1 + EFFECTIVE RATE) ^ (1 / PERIODS) - 1)* PERIODS
140
+ def nominal_due_given_efective(effective_rate, periods)
141
+ ((((1 + (effective_rate.to_f/100))**(1/periods.to_f)-1)*periods.to_f)*100).round(4)
142
+ end
143
+
144
+ # == End conversion rates
145
+
128
146
  # Hallar la cuota fija anticipada HCFA
129
147
  def anticipated_fixed_payment(present_value, rate, term)
130
148
  ((present_value.to_f * rate.to_f) / ((rate.to_f + 1) - (1 / (1 + rate) ** (term - 1)))).round(4)
@@ -134,7 +152,6 @@ module FinancialMaths
134
152
  amount.to_f / periods
135
153
  end
136
154
 
137
-
138
155
  end
139
156
 
140
157
 
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require 'rubygems'
2
2
  require 'bundler/setup'
3
3
  require 'financial_maths'
4
+ require 'coveralls'
5
+ Coveralls.wear!
4
6
 
5
7
  include FinancialMaths
6
8
  RSpec.configure do |config|
@@ -2,10 +2,65 @@ require 'rspec'
2
2
  require 'spec_helper'
3
3
 
4
4
  describe "fixed payment test" do
5
-
6
5
  it 'should be the monthly payment' do
7
-
8
6
  annuity_given_present(100000000, 0.0144594763, 180).should eq(1563975.1395)
7
+ end
8
+ end
9
+
10
+ describe "variable payment test" do
11
+ it "should be the monthly variable payment" do
12
+ variable_payment(10000000.0,40).should eq(250000)
13
+ end
14
+ end
15
+
16
+ describe "due variable payment amortization" do
17
+ it "should be a hash of payments" do
18
+ due_variable_payment_amortization(5,10000,1.8,2000).should be_an(Array)
19
+ end
20
+ end
21
+
22
+ describe "anticipated vabiable payment amortization" do
23
+ it "should be a hash of payments" do
24
+ anticipated_variable_payment_amortization(5,10000,1.8,2000).should be_an(Array)
25
+ end
26
+ end
27
+
28
+ describe "due fixed payment amortization" do
29
+ it "should be a hash of payments" do
30
+ due_fixed_payment_amortization(5,10000,1.8,2000).should be_an(Array)
31
+ end
32
+ end
33
+
34
+ describe "anticipated fixed payment amortization" do
35
+ it "should be a hash of payments" do
36
+ anticipated_fixed_payment_amortization(5,10000,1.8,2000).should be_an(Array)
37
+ end
38
+ end
9
39
 
40
+ describe "conversion rates" do
41
+ describe "Find effective rate given nominal rate expired" do
42
+ it "should be the respective rate in effective format" do
43
+ efective_given_nominal_due(15,12).should eql(16.0755)
44
+ end
45
+ end
46
+
47
+ describe "Find effective rate given anticipated nominal rate" do
48
+ it "should be the respective rate in effective format" do
49
+ nominal_anticipated_given_efective(15,12).should eql(13.8951)
50
+ end
51
+ end
52
+
53
+ describe "Find nominal rate anticipated given effective rate" do
54
+ it "should be the respective rate in nominal format" do
55
+ nominal_due_given_efective(15,12).should eql(14.0579)
56
+ end
10
57
  end
11
- end
58
+
59
+ describe "Find nominal rate expired given effective rate" do
60
+ it "should be the respective rate in nominal format" do
61
+ efective_given_nominal_anticipated(15,12).should eql(16.2933)
62
+ end
63
+ end
64
+ end
65
+
66
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: financial_maths
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-11 00:00:00.000000000 Z
12
+ date: 2013-10-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -51,10 +51,11 @@ extensions: []
51
51
  extra_rdoc_files:
52
52
  - README.md
53
53
  files:
54
- - .DS_Store
55
54
  - .gitignore
55
+ - .project
56
56
  - .rspec
57
57
  - .travis.yml
58
+ - CHANGELOG.md
58
59
  - Gemfile
59
60
  - LICENSE.txt
60
61
  - README.md
@@ -81,7 +82,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
81
82
  version: '0'
82
83
  segments:
83
84
  - 0
84
- hash: 3283559787131876594
85
+ hash: -4218256195000384150
85
86
  required_rubygems_version: !ruby/object:Gem::Requirement
86
87
  none: false
87
88
  requirements:
@@ -90,7 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
91
  version: '0'
91
92
  segments:
92
93
  - 0
93
- hash: 3283559787131876594
94
+ hash: -4218256195000384150
94
95
  requirements: []
95
96
  rubyforge_project:
96
97
  rubygems_version: 1.8.25
data/.DS_Store DELETED
Binary file