Class: LoanCreator::Common
Constant Summary
collapse
- PERIODS_IN_MONTHS =
{
month: 1,
quarter: 3,
semester: 6,
year: 12
}.freeze
- REQUIRED_ATTRIBUTES =
[
:period,
:amount,
:annual_interests_rate,
:starts_on,
:duration_in_periods
].freeze
- REQUIRED_ATTRIBUTES_TERM_DATES =
[
:amount,
:annual_interests_rate,
:starts_on,
:duration_in_periods,
:term_dates
].freeze
- OPTIONAL_ATTRIBUTES =
{
deferred_in_periods: 0,
interests_start_date: nil,
initial_values: {},
realistic_durations: false,
multi_part_interests_calculation: true
}.freeze
BorrowerTimetable::BORROWER_FINANCIAL_ATTRIBUTES
Class Method Summary
collapse
Instance Method Summary
collapse
borrower_timetable
Constructor Details
#initialize(**options) ⇒ Common
Returns a new instance of Common.
42
43
44
45
46
47
48
49
50
51
|
# File 'lib/loan_creator/common.rb', line 42
def initialize(**options)
@options = options
require_attributes
reinterpret_attributes
set_attributes
validate_attributes
set_initial_values
validate_initial_values
prepare_custom_term_dates if term_dates?
end
|
Class Method Details
.bigd(value) ⇒ Object
79
80
81
|
# File 'lib/loan_creator/common.rb', line 79
def self.bigd(value)
BigDecimal(value, BIG_DECIMAL_DIGITS)
end
|
Instance Method Details
#bigd(value) ⇒ Object
83
84
85
|
# File 'lib/loan_creator/common.rb', line 83
def bigd(value)
self.class.bigd(value)
end
|
75
76
77
|
# File 'lib/loan_creator/common.rb', line 75
def lender_timetable
raise NotImplementedError
end
|
#periodic_interests_rate(start_date, end_date) ⇒ Object
53
54
55
56
57
58
59
60
|
# File 'lib/loan_creator/common.rb', line 53
def periodic_interests_rate(start_date, end_date)
if realistic_durations?
compute_realistic_periodic_interests_rate(start_date, end_date, annual_interests_rate)
else
@periodic_interests_rate ||=
annual_interests_rate.div(12 / PERIODS_IN_MONTHS[period], BIG_DECIMAL_DIGITS).div(100, BIG_DECIMAL_DIGITS)
end
end
|
62
63
64
65
66
67
68
69
70
71
72
73
|
# File 'lib/loan_creator/common.rb', line 62
def timetable_term_dates
@_timetable_term_dates ||= Hash.new do |dates, index|
dates[index] =
if index < 1
dates[index + 1].advance(months: -PERIODS_IN_MONTHS.fetch(period))
elsif index == 1
starts_on
else
starts_on.advance(months: PERIODS_IN_MONTHS.fetch(period) * (index - 1))
end
end
end
|