loan_creator 0.7.1 → 0.8.0
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.
- 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: []
|