loan_creator 0.8.1 → 0.8.2

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 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