loan_creator 0.7.1 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +16 -0
- data/README.md +3 -1
- data/lib/loan_creator/borrower_timetable.rb +2 -2
- data/lib/loan_creator/bullet.rb +11 -11
- data/lib/loan_creator/common.rb +29 -31
- data/lib/loan_creator/term.rb +4 -4
- data/lib/loan_creator/uncapitalized_bullet.rb +17 -12
- data/lib/loan_creator/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c39773817a99d44a421aac19ea019f43ba24bba4359f8f61630b480f47662c65
|
4
|
+
data.tar.gz: b645544fb96db2d5bf60c8b8e811e8b08e54d49d7c5fb62f2af4d54e4619d64d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e24e2f465c85252f8654a62fc252f0f82f75ffd0690b90ee586517769ad7055d24cecd4e7694f73dc6e54f2260969bffff01f65864e161e2cd89e5bb817477ac
|
7
|
+
data.tar.gz: 7428313e7ca37b6f10b5f20375c007ea1af3d00a1dc7ed95f0d82a56543267a7c37f7604a931f541c2a93ca1bb953d15d774fa7cad064ef08c846c40adfa8ca0
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,19 @@
|
|
1
|
+
v0.8.0
|
2
|
+
-------------------------
|
3
|
+
|
4
|
+
### FEATURE
|
5
|
+
- due interests to date are now store into `due_interests_` columns for `LoanCreator::UncapitalizedBullet`
|
6
|
+
|
7
|
+
### BUGFIX
|
8
|
+
- fix `initial_values` not taking `paid_capital` and `paid_interests` into account for `LoanCreator::UncapitalizedBullet`
|
9
|
+
and `LoanCreator::Bullet`
|
10
|
+
|
11
|
+
### BREAKING CHANGES
|
12
|
+
- rename columns `capitalized_interests_beginning_of_period` and `capitalized_interests_end_of_period` for
|
13
|
+
`due_interests_beginning_of_period` and `due_interests_end_of_period`
|
14
|
+
- rename `capitalized_interests` option in `:inital_values` into `due_interests`
|
15
|
+
|
16
|
+
|
1
17
|
v0.7.1
|
2
18
|
-------------------------
|
3
19
|
|
data/README.md
CHANGED
@@ -57,7 +57,7 @@ Initial values must be a hash with specific keys, like so:
|
|
57
57
|
paid_interests: 11000.0,
|
58
58
|
accrued_delta_interests: 0,
|
59
59
|
starting_index: 2,
|
60
|
-
|
60
|
+
due_interests: 0
|
61
61
|
}
|
62
62
|
```
|
63
63
|
|
@@ -148,9 +148,11 @@ Capital share shall be repaid in full at loan's end.
|
|
148
148
|
`Bullet` loan generates terms where terms' payments are zero. \
|
149
149
|
Interests are capitalized, i.e. added to the borrowed capital on each term.\
|
150
150
|
Capital share shall be repaid in full and all interests paid at loan's end.
|
151
|
+
N.b.: Due capitalized interests to date are stored into terms under `due_intesrests_` columns
|
151
152
|
|
152
153
|
`UncapitalizedBullet` same as bullet, the only difference is the interests\
|
153
154
|
are NOT capitalized.
|
155
|
+
N.b.: Due interests to date are stored into terms under `due_intesrests_` columns
|
154
156
|
|
155
157
|
There is no deferred time for `InFine` and `Bullet` loans as it would be equivalent to increasing loan's duration.
|
156
158
|
|
@@ -7,8 +7,8 @@ module LoanCreator
|
|
7
7
|
:period_capital,
|
8
8
|
:total_paid_capital_end_of_period,
|
9
9
|
:total_paid_interests_end_of_period,
|
10
|
-
:
|
11
|
-
:
|
10
|
+
:due_interests_beginning_of_period,
|
11
|
+
:due_interests_end_of_period,
|
12
12
|
:period_amount_to_pay
|
13
13
|
].freeze
|
14
14
|
|
data/lib/loan_creator/bullet.rb
CHANGED
@@ -16,23 +16,23 @@ module LoanCreator
|
|
16
16
|
private
|
17
17
|
|
18
18
|
def compute_last_term
|
19
|
-
@crd_end_of_period
|
20
|
-
@
|
21
|
-
@period_interests
|
22
|
-
@
|
23
|
-
@period_capital
|
24
|
-
@total_paid_capital_end_of_period
|
25
|
-
@total_paid_interests_end_of_period
|
26
|
-
@period_amount_to_pay
|
19
|
+
@crd_end_of_period = bigd('0')
|
20
|
+
@due_interests_beginning_of_period = @due_interests_end_of_period
|
21
|
+
@period_interests = @due_interests_end_of_period + compute_capitalized_interests
|
22
|
+
@due_interests_end_of_period = 0
|
23
|
+
@period_capital = @crd_beginning_of_period
|
24
|
+
@total_paid_capital_end_of_period += @period_capital
|
25
|
+
@total_paid_interests_end_of_period += @period_interests
|
26
|
+
@period_amount_to_pay = @period_capital + @period_interests
|
27
27
|
end
|
28
28
|
|
29
29
|
def compute_capitalized_interests
|
30
|
-
(amount + @
|
30
|
+
(amount + @due_interests_beginning_of_period).mult(periodic_interests_rate, BIG_DECIMAL_DIGITS)
|
31
31
|
end
|
32
32
|
|
33
33
|
def compute_term(timetable)
|
34
|
-
@
|
35
|
-
@
|
34
|
+
@due_interests_beginning_of_period = @due_interests_end_of_period
|
35
|
+
@due_interests_end_of_period += compute_capitalized_interests
|
36
36
|
timetable << current_term
|
37
37
|
end
|
38
38
|
end
|
data/lib/loan_creator/common.rb
CHANGED
@@ -110,45 +110,43 @@ module LoanCreator
|
|
110
110
|
(@total_paid_capital_end_of_period = bigd(initial_values[:paid_capital]))
|
111
111
|
(@total_paid_interests_end_of_period = bigd(initial_values[:paid_interests]))
|
112
112
|
(@accrued_delta_interests = bigd(initial_values[:accrued_delta_interests]))
|
113
|
-
|
114
|
-
(@capitalized_interests_beginning_of_period = bigd(initial_values[:capitalized_interests] || 0))
|
115
|
-
end
|
113
|
+
(@due_interests_beginning_of_period = bigd(initial_values[:due_interests] || 0))
|
116
114
|
end
|
117
115
|
|
118
116
|
def reset_current_term
|
119
|
-
@accrued_delta_interests
|
120
|
-
@total_paid_capital_end_of_period
|
117
|
+
@accrued_delta_interests ||= bigd('0')
|
118
|
+
@total_paid_capital_end_of_period ||= bigd('0')
|
121
119
|
@total_paid_interests_end_of_period ||= bigd('0')
|
122
|
-
@
|
123
|
-
@crd_beginning_of_period
|
124
|
-
@crd_end_of_period
|
125
|
-
@period_theoric_interests
|
126
|
-
@
|
127
|
-
@delta_interests
|
128
|
-
@amount_to_add
|
129
|
-
@period_interests
|
130
|
-
@period_capital
|
131
|
-
@period_amount_to_pay
|
132
|
-
@due_on
|
120
|
+
@due_interests_beginning_of_period ||= bigd('0')
|
121
|
+
@crd_beginning_of_period = bigd('0')
|
122
|
+
@crd_end_of_period = bigd('0')
|
123
|
+
@period_theoric_interests = bigd('0')
|
124
|
+
@due_interests_end_of_period = @due_interests_beginning_of_period
|
125
|
+
@delta_interests = bigd('0')
|
126
|
+
@amount_to_add = bigd('0')
|
127
|
+
@period_interests = bigd('0')
|
128
|
+
@period_capital = bigd('0')
|
129
|
+
@period_amount_to_pay = bigd('0')
|
130
|
+
@due_on = nil
|
133
131
|
end
|
134
132
|
|
135
133
|
def current_term
|
136
134
|
LoanCreator::Term.new(
|
137
|
-
crd_beginning_of_period:
|
138
|
-
crd_end_of_period:
|
139
|
-
period_theoric_interests:
|
140
|
-
delta_interests:
|
141
|
-
accrued_delta_interests:
|
142
|
-
|
143
|
-
|
144
|
-
amount_to_add:
|
145
|
-
period_interests:
|
146
|
-
period_capital:
|
147
|
-
total_paid_capital_end_of_period:
|
148
|
-
total_paid_interests_end_of_period:
|
149
|
-
period_amount_to_pay:
|
150
|
-
due_on:
|
151
|
-
index:
|
135
|
+
crd_beginning_of_period: @crd_beginning_of_period,
|
136
|
+
crd_end_of_period: @crd_end_of_period,
|
137
|
+
period_theoric_interests: @period_theoric_interests,
|
138
|
+
delta_interests: @delta_interests,
|
139
|
+
accrued_delta_interests: @accrued_delta_interests,
|
140
|
+
due_interests_beginning_of_period: @due_interests_beginning_of_period,
|
141
|
+
due_interests_end_of_period: @due_interests_end_of_period,
|
142
|
+
amount_to_add: @amount_to_add,
|
143
|
+
period_interests: @period_interests,
|
144
|
+
period_capital: @period_capital,
|
145
|
+
total_paid_capital_end_of_period: @total_paid_capital_end_of_period,
|
146
|
+
total_paid_interests_end_of_period: @total_paid_interests_end_of_period,
|
147
|
+
period_amount_to_pay: @period_amount_to_pay,
|
148
|
+
due_on: @due_on,
|
149
|
+
index: compute_index
|
152
150
|
)
|
153
151
|
end
|
154
152
|
|
data/lib/loan_creator/term.rb
CHANGED
@@ -17,11 +17,11 @@ module LoanCreator
|
|
17
17
|
# Accrued interests' delta
|
18
18
|
:accrued_delta_interests,
|
19
19
|
|
20
|
-
#
|
21
|
-
:
|
20
|
+
# Due interests at the beginning of the term (Bullet and UncapitalizedBullet only)
|
21
|
+
:due_interests_beginning_of_period,
|
22
22
|
|
23
|
-
#
|
24
|
-
:
|
23
|
+
# Due interests at the end of the term (Bullet and UncapitalizedBullet only)
|
24
|
+
:due_interests_end_of_period,
|
25
25
|
|
26
26
|
# Adjustment of -0.01, 0 or +0.01 cent depending on accrued_delta_interests
|
27
27
|
:amount_to_add,
|
@@ -7,7 +7,7 @@ module LoanCreator
|
|
7
7
|
reset_current_term
|
8
8
|
@crd_beginning_of_period = amount
|
9
9
|
@crd_end_of_period = amount
|
10
|
-
(duration_in_periods - 1).times { timetable
|
10
|
+
(duration_in_periods - 1).times { |period| compute_term(timetable) }
|
11
11
|
compute_last_term
|
12
12
|
timetable << current_term
|
13
13
|
timetable
|
@@ -16,19 +16,24 @@ module LoanCreator
|
|
16
16
|
private
|
17
17
|
|
18
18
|
def compute_last_term
|
19
|
-
@crd_end_of_period
|
20
|
-
@
|
21
|
-
@
|
22
|
-
@
|
23
|
-
@
|
24
|
-
@
|
19
|
+
@crd_end_of_period = bigd('0')
|
20
|
+
@due_interests_beginning_of_period = @due_interests_end_of_period
|
21
|
+
@period_interests = @due_interests_end_of_period + compute_interests
|
22
|
+
@due_interests_end_of_period = 0
|
23
|
+
@period_capital = @crd_beginning_of_period
|
24
|
+
@total_paid_capital_end_of_period += @period_capital
|
25
|
+
@total_paid_interests_end_of_period += @period_interests
|
26
|
+
@period_amount_to_pay = @period_capital + @period_interests
|
25
27
|
end
|
26
28
|
|
27
|
-
def
|
28
|
-
amount.mult(
|
29
|
-
|
30
|
-
|
31
|
-
|
29
|
+
def compute_interests
|
30
|
+
amount.mult(bigd(periodic_interests_rate), BIG_DECIMAL_DIGITS)
|
31
|
+
end
|
32
|
+
|
33
|
+
def compute_term(timetable)
|
34
|
+
@due_interests_beginning_of_period = @due_interests_end_of_period
|
35
|
+
@due_interests_end_of_period += compute_interests
|
36
|
+
timetable << current_term
|
32
37
|
end
|
33
38
|
end
|
34
39
|
end
|
data/lib/loan_creator/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: loan_creator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- thibaulth
|
@@ -9,10 +9,10 @@ authors:
|
|
9
9
|
- younes.serraj
|
10
10
|
- Antoine Becquet
|
11
11
|
- Jerome Drevet
|
12
|
-
autorequire:
|
12
|
+
autorequire:
|
13
13
|
bindir: exe
|
14
14
|
cert_chain: []
|
15
|
-
date: 2021-
|
15
|
+
date: 2021-02-23 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: bundler
|
@@ -112,7 +112,7 @@ dependencies:
|
|
112
112
|
- - ">="
|
113
113
|
- !ruby/object:Gem::Version
|
114
114
|
version: '0'
|
115
|
-
description:
|
115
|
+
description:
|
116
116
|
email:
|
117
117
|
- thibault@capsens.eu
|
118
118
|
- nicolas.besnard@capsens.eu
|
@@ -157,7 +157,7 @@ homepage: https://github.com/CapSens/loan-creator
|
|
157
157
|
licenses:
|
158
158
|
- MIT
|
159
159
|
metadata: {}
|
160
|
-
post_install_message:
|
160
|
+
post_install_message:
|
161
161
|
rdoc_options: []
|
162
162
|
require_paths:
|
163
163
|
- lib
|
@@ -173,7 +173,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
173
173
|
version: '0'
|
174
174
|
requirements: []
|
175
175
|
rubygems_version: 3.1.2
|
176
|
-
signing_key:
|
176
|
+
signing_key:
|
177
177
|
specification_version: 4
|
178
178
|
summary: Create and update timetables from input data
|
179
179
|
test_files: []
|