class Economics::Loan

Attributes

_cache[RW]
e_amount[RW]
e_duration[RW]
e_fee[RW]
e_rate[RW]
e_start_date[RW]
fee[RW]
ir[RW]
p_amount[RW]
p_ir[RW]
p_ps[RW]
ps[RW]
rate[RW]

Public Instance Methods

amortized_for(index) click to toggle source
# File lib/economics.rb, line 36
def amortized_for index
  cached __method__, index do
    score_1 = capital_for(index) / e_amount
    score_2 = score_1 * 100.0
  end
end
cached(method, index, &block) click to toggle source
# File lib/economics.rb, line 31
def cached method, index, &block
  _name = [method, index].join('-')
  _cache[_name].presence || _cache[_name] = block.call
end
capital_for(index) click to toggle source
# File lib/economics.rb, line 43
def capital_for index
  cached __method__, index do
    score_1 = 1 + e_rate
    score_2 = (score_1 ** (e_duration)) - 1
    score_3 = (score_1 ** index) - 1
    score_4 = (score_1 ** (index-1)) - 1
    score_5 = index == 0 ? 0 : (e_amount * (score_4 / score_2))
    score_6 = e_amount * (score_3 / score_2)
    score_7 = score_6 - score_5
  end
end
capital_left_for(index) click to toggle source
# File lib/economics.rb, line 55
def capital_left_for index
  cached __method__, index do
    return e_amount if index == 0
    score_1 = capital_left_for(index - 1)
    score_2 = capital_for(index)
    score_3 = score_1 - score_2
  end
end
fee_for(index) click to toggle source
# File lib/economics.rb, line 71
def fee_for index
  cached __method__, index do
    return 0 if index == 0
    score_1 = (index - 1) / 12
    score_2 = capital_left_for(12 * score_1)
    score_3 = e_fee * score_2
    score_4 = score_3 / 12.0
  end
end
interest_for(index) click to toggle source
# File lib/economics.rb, line 64
def interest_for index
  cached __method__, index do
    return 0 if index == 0
    score = capital_left_for(index - 1) * e_rate
  end
end
monthly_amount_for(index) click to toggle source
# File lib/economics.rb, line 81
def monthly_amount_for index
  cached __method__, index do
    return 0 if index == 0
    score_1 = (1 + e_rate) ** e_duration
    score_2 = fee_for(index)
    score_3 = e_amount * e_rate * score_1
    score_4 = score_1 - 1
    score_5 = score_3 / score_4
    score_6 = score_2 + score_5
  end
end
p_capital_rbt_for(index) click to toggle source
# File lib/economics.rb, line 93
def p_capital_rbt_for index
  cached __method__, index do
    score = amortized_for(index) * p_amount / 100.0
  end
end
p_check_for(index) click to toggle source
# File lib/economics.rb, line 99
def p_check_for index
  cached __method__, index do
    score_1 = p_amount / e_amount
    score_2 = capital_for(index)
    score_3 = score_1 * score_2
  end
end
p_fee_credit_for(index) click to toggle source
# File lib/economics.rb, line 124
def p_fee_credit_for index
  cached __method__, index do
    0.0
  end
end
p_interest_brut_for(index) click to toggle source
# File lib/economics.rb, line 107
def p_interest_brut_for index
  cached __method__, index do
    score_1 = p_amount / e_amount
    score_2 = interest_for(index)
    score_3 = score_1 * score_2
  end
end
p_interest_net_for(index) click to toggle source
# File lib/economics.rb, line 115
def p_interest_net_for index
  cached __method__, index do
    score_1 = p_interest_brut_for(index)
    score_2 = p_fee_credit_for(0)
    score_3 = p_ps_ir_for(index)
    score_4 = score_1 - score_2 - score_3
  end
end
p_m_brut_for(index) click to toggle source
# File lib/economics.rb, line 157
def p_m_brut_for index
  cached __method__, index do
    score_1 = p_check_for(index)
    score_2 = p_interest_brut_for(index)
    score_3 = score_1 + score_2
  end
end
p_m_net_for(index) click to toggle source
# File lib/economics.rb, line 149
def p_m_net_for index
  cached __method__, index do
    score_1 = p_capital_rbt_for(index)
    score_2 = p_interest_net_for(index)
    score_3 = score_1 + score_2
  end
end
p_pf_for(index) click to toggle source
# File lib/economics.rb, line 138
def p_pf_for index
  cached __method__, index do
    return p_amount if index == 0

    score_1 = index == 1 ? 0.0 : p_pf_for(index - 1)
    score_2 = p_interest_net_for(index)
    score_3 = p_capital_rbt_for(index)
    score_4 = score_1 + score_2 + score_3
  end
end
p_ps_ir_for(index) click to toggle source
# File lib/economics.rb, line 130
def p_ps_ir_for index
  cached __method__, index do
    score_1 = p_ps + p_ir
    score_2 = p_interest_brut_for(index)
    score_3 = score_1 * score_2
  end
end
table() click to toggle source
# File lib/economics.rb, line 165
def table
  setup && (0..e_duration).map do |index|
    record = OpenStruct.new
    record.execution_date = (Date.parse(e_start_date) + index.months).to_date
    record.capital_left = capital_left_for(index)
    record.fee = fee_for(index)
    record.monthly_amount = monthly_amount_for(index)
    record.capital = capital_for(index)
    record.interest = interest_for(index)
    record.p_amortized = amortized_for(index)
    record.p_capital_rbt = p_capital_rbt_for(index)
    record.p_check = p_check_for(index)
    record.p_interest_brut = p_interest_brut_for(index)
    record.p_ps_ir = p_ps_ir_for(index)
    record.p_interest_net = p_interest_net_for(index)
    record.p_pf = p_pf_for(index)
    record.p_m_net = p_m_net_for(index)
    record.p_m_brut = p_m_brut_for(index)
    record
  end
end

Private Instance Methods

setup() click to toggle source
# File lib/economics.rb, line 189
def setup
  self.e_fee      = fee.to_d / 100.00
  self.e_rate     = rate.to_d / 100.00 / 12.0
  self.e_amount   = e_amount.to_d
  self.e_duration = e_duration.to_i
  self.p_amount   = p_amount.to_d
  self.p_ps       = ps.to_d / 100.00
  self.p_ir       = ir.to_d / 100.00
  self._cache     = Hash.new
end