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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 72a0b25211b0e4cff4c6089ed26ecde7f792eec8404ac58d459e769dcd275c87
4
- data.tar.gz: ea1836c498d837e62a8cfa389fd6d0041c2a6f71861c2a062ecc780980692170
3
+ metadata.gz: c39773817a99d44a421aac19ea019f43ba24bba4359f8f61630b480f47662c65
4
+ data.tar.gz: b645544fb96db2d5bf60c8b8e811e8b08e54d49d7c5fb62f2af4d54e4619d64d
5
5
  SHA512:
6
- metadata.gz: b45dd0f8944759ee36d58fb746522a7b2727ba8182a845b8387ff871c13df2494707ab7a7e03f8cd64f6b68d7495a25b1634ff980f81af57f31ee6f870374fe9
7
- data.tar.gz: b5a70c0ffc639f8afe638f47a423170eddfa0557e44936366895f14a1db9608a2657442dcfcdf2190576416bb215bb1e73776e6a6727304b7e1b4fbb500d2041
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
- capitalized_interests: 0
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
- :capitalized_interests_beginning_of_period,
11
- :capitalized_interests_end_of_period,
10
+ :due_interests_beginning_of_period,
11
+ :due_interests_end_of_period,
12
12
  :period_amount_to_pay
13
13
  ].freeze
14
14
 
@@ -16,23 +16,23 @@ module LoanCreator
16
16
  private
17
17
 
18
18
  def compute_last_term
19
- @crd_end_of_period = bigd('0')
20
- @capitalized_interests_beginning_of_period = @capitalized_interests_end_of_period
21
- @period_interests = @capitalized_interests_end_of_period + compute_capitalized_interests
22
- @capitalized_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
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 + @capitalized_interests_beginning_of_period).mult(periodic_interests_rate, BIG_DECIMAL_DIGITS)
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
- @capitalized_interests_beginning_of_period = @capitalized_interests_end_of_period
35
- @capitalized_interests_end_of_period += compute_capitalized_interests
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
@@ -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
- if self.is_a?(LoanCreator::Bullet)
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 ||= bigd('0')
120
- @total_paid_capital_end_of_period ||= bigd('0')
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
- @capitalized_interests_beginning_of_period ||= bigd('0')
123
- @crd_beginning_of_period = bigd('0')
124
- @crd_end_of_period = bigd('0')
125
- @period_theoric_interests = bigd('0')
126
- @capitalized_interests_end_of_period = @capitalized_interests_beginning_of_period
127
- @delta_interests = bigd('0')
128
- @amount_to_add = bigd('0')
129
- @period_interests = bigd('0')
130
- @period_capital = bigd('0')
131
- @period_amount_to_pay = bigd('0')
132
- @due_on = nil
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: @crd_beginning_of_period,
138
- crd_end_of_period: @crd_end_of_period,
139
- period_theoric_interests: @period_theoric_interests,
140
- delta_interests: @delta_interests,
141
- accrued_delta_interests: @accrued_delta_interests,
142
- capitalized_interests_beginning_of_period: @capitalized_interests_beginning_of_period,
143
- capitalized_interests_end_of_period: @capitalized_interests_end_of_period,
144
- amount_to_add: @amount_to_add,
145
- period_interests: @period_interests,
146
- period_capital: @period_capital,
147
- total_paid_capital_end_of_period: @total_paid_capital_end_of_period,
148
- total_paid_interests_end_of_period: @total_paid_interests_end_of_period,
149
- period_amount_to_pay: @period_amount_to_pay,
150
- due_on: @due_on,
151
- index: compute_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
 
@@ -17,11 +17,11 @@ module LoanCreator
17
17
  # Accrued interests' delta
18
18
  :accrued_delta_interests,
19
19
 
20
- # Capitalized interests at the beginning of the term (Bullet only)
21
- :capitalized_interests_beginning_of_period,
20
+ # Due interests at the beginning of the term (Bullet and UncapitalizedBullet only)
21
+ :due_interests_beginning_of_period,
22
22
 
23
- # Capitalized interests at the end of the term (Bullet only)
24
- :capitalized_interests_end_of_period,
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 << current_term }
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 = bigd('0')
20
- @period_interests = total_interests
21
- @period_capital = @crd_beginning_of_period
22
- @total_paid_capital_end_of_period = @period_capital
23
- @total_paid_interests_end_of_period = @period_interests
24
- @period_amount_to_pay = @period_capital + @period_interests
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 total_interests
28
- amount.mult(
29
- bigd(periodic_interests_rate) * bigd(duration_in_periods),
30
- BIG_DECIMAL_DIGITS
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
@@ -1,3 +1,3 @@
1
1
  module LoanCreator
2
- VERSION = '0.7.1'.freeze
2
+ VERSION = '0.8.0'.freeze
3
3
  end
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.7.1
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-01-11 00:00:00.000000000 Z
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: []