loan_creator 0.8.1 → 0.8.2

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: 4dcaafbce29a00ebcdea57133619e566cc210be6ed613003af14e0a199cc126a
4
- data.tar.gz: 2da6fe223cfc40fd8455a5c1ec0d8ef857bfd48effb22b285f46da7c3800a81b
3
+ metadata.gz: f175586a927e2dd609903b79ed629c1ab5bc3aecde02b1cc5809629d33c5b852
4
+ data.tar.gz: fd695b7fba80c64efa7b5c0cefc9a1092ed6c74aa4ac070da3cb25771740e3bf
5
5
  SHA512:
6
- metadata.gz: 215f9a9b34c5ac6f9eef09f8658bbcd7c322e1964f0d4a0c9f55d3f97c99d1c9fc804c9e69f2c5509085bca9ec6ed848e92561ce456d6348d7b5ea343e38ada6
7
- data.tar.gz: 98b6cf146fd802777c156266cd9378d8816ef00d4c4ab8aafdc092f4b52b001e2b8862d61a260502803f888f3b7f0f1b34bea5e29ea4a5843f8b01b5d99ce729
6
+ metadata.gz: 6de1a02fc201dd985c0c255ee7b96989d477723607015647f9608228174f9bfdd4aa7f667ea9d74425a251b4912dae0430e1edd84623b7a8c1953e28ce1797f9
7
+ data.tar.gz: b3b3e8d4a1d007b1f8481238df1d021b5f597d2a46b887495f4099320dcd20711ccc2fb9e2ed2fa34775a99c33826c9de2d4a5b7ede12d7eb8e978d45df017f1
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ v0.8.2
2
+ -------------------------
3
+
4
+ - manage initial value `due_interests` for Linear and InFine loan types
5
+
1
6
  v0.8.1
2
7
  -------------------------
3
8
  - add `realistic_durations` option
@@ -116,7 +116,8 @@ module LoanCreator
116
116
  end
117
117
 
118
118
  def set_initial_values
119
- @starting_index = initial_values[:starting_index] || 1
119
+ @starting_index = initial_values[:starting_index] || 1
120
+ @initial_due_interests = bigd(initial_values[:due_interests] || 0)
120
121
 
121
122
  return if initial_values.blank?
122
123
 
@@ -223,5 +224,9 @@ module LoanCreator
223
224
  def realistic_durations?
224
225
  !!@realistic_durations
225
226
  end
227
+
228
+ def compute_period_generated_interests(interests_rate)
229
+ (@crd_beginning_of_period + @due_interests_beginning_of_period).mult(interests_rate, BIG_DECIMAL_DIGITS)
230
+ end
226
231
  end
227
232
  end
@@ -27,7 +27,8 @@ module LoanCreator
27
27
 
28
28
  # Reminder: CRD beginning of period = CRD end of period **of previous period**
29
29
  @crd_beginning_of_period = @crd_end_of_period
30
- @period_theoric_interests = @crd_beginning_of_period * computed_periodic_interests_rate
30
+ @due_interests_beginning_of_period = @due_interests_end_of_period
31
+ @period_theoric_interests = period_theoric_interests(computed_periodic_interests_rate)
31
32
  @delta_interests = @period_theoric_interests - @period_theoric_interests.round(2)
32
33
  @accrued_delta_interests += @delta_interests
33
34
  @amount_to_add = bigd(
@@ -46,18 +47,44 @@ module LoanCreator
46
47
  @total_paid_interests_end_of_period += @period_interests
47
48
  @period_amount_to_pay = @period_interests + @period_capital
48
49
  @crd_end_of_period -= @period_capital
50
+ @due_interests_end_of_period -= reimbursed_due_interests
49
51
 
50
52
  current_term
51
53
  end
52
54
 
55
+ def period_theoric_interests(computed_periodic_interests_rate)
56
+ if @due_interests_beginning_of_period > 0
57
+ reimbursed_due_interests + compute_period_generated_interests(computed_periodic_interests_rate)
58
+ else
59
+ compute_period_generated_interests(computed_periodic_interests_rate)
60
+ end
61
+ end
62
+
53
63
  def period_capital
54
64
  if @last_period
55
65
  @crd_beginning_of_period
56
66
  elsif @deferred_period
57
67
  bigd(0)
68
+ elsif @due_interests_beginning_of_period > 0
69
+ compute_period_capital - reimbursed_due_interests
58
70
  else
59
- (amount / (duration_in_periods - deferred_in_periods)).round(2)
71
+ compute_period_capital
60
72
  end
61
73
  end
74
+
75
+ def reimbursed_due_interests
76
+ if @deferred_period
77
+ bigd(0)
78
+ else
79
+ [
80
+ @due_interests_beginning_of_period,
81
+ compute_period_capital
82
+ ].min
83
+ end
84
+ end
85
+
86
+ def compute_period_capital
87
+ ((amount + @initial_due_interests) / (duration_in_periods - deferred_in_periods)).round(2)
88
+ end
62
89
  end
63
90
  end
@@ -1,3 +1,3 @@
1
1
  module LoanCreator
2
- VERSION = '0.8.1'.freeze
2
+ VERSION = '0.8.2'.freeze
3
3
  end
data/loan_creator.gemspec CHANGED
@@ -24,6 +24,8 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency 'rspec', '~> 3.0'
25
25
  spec.add_development_dependency 'simplecov', '~> 0.16'
26
26
  spec.add_development_dependency 'byebug', '~> 11.0'
27
+ spec.add_development_dependency 'pry', '~> 0.13.1'
28
+ spec.add_development_dependency 'table_print', '~> 1.5'
27
29
 
28
30
  spec.add_runtime_dependency 'bigdecimal'
29
31
  spec.add_runtime_dependency 'activesupport'
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.8.1
4
+ version: 0.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - thibaulth
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: exe
14
14
  cert_chain: []
15
- date: 2021-04-02 00:00:00.000000000 Z
15
+ date: 2021-05-05 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: bundler
@@ -84,6 +84,34 @@ dependencies:
84
84
  - - "~>"
85
85
  - !ruby/object:Gem::Version
86
86
  version: '11.0'
87
+ - !ruby/object:Gem::Dependency
88
+ name: pry
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - "~>"
92
+ - !ruby/object:Gem::Version
93
+ version: 0.13.1
94
+ type: :development
95
+ prerelease: false
96
+ version_requirements: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - "~>"
99
+ - !ruby/object:Gem::Version
100
+ version: 0.13.1
101
+ - !ruby/object:Gem::Dependency
102
+ name: table_print
103
+ requirement: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - "~>"
106
+ - !ruby/object:Gem::Version
107
+ version: '1.5'
108
+ type: :development
109
+ prerelease: false
110
+ version_requirements: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - "~>"
113
+ - !ruby/object:Gem::Version
114
+ version: '1.5'
87
115
  - !ruby/object:Gem::Dependency
88
116
  name: bigdecimal
89
117
  requirement: !ruby/object:Gem::Requirement