@prestamype/financial-functions
Version:
Implementación de funciones financieras
45 lines (37 loc) • 1.07 kB
JavaScript
/**
* Interface -> amort_payment function
* @param {Number} amount
* @param {Number} nper
* @param {Number} commission_rate
* @param {Number} i_rate
*
*/
export default class Payment {
static get_base_amortization(amount, nper, i_rate) {
return amount / ( ((1+i_rate)**nper - 1)/i_rate )
}
static gen_schedule(amount, nper, i_rate, commission_rate) {
const amort_amount = this.amort_payment(amount, commission_rate)
const base_amort = this.get_base_amortization(amort_amount, nper, i_rate)
const total_amount = amount + amount*commission_rate
let res = Array.from({ length: nper }, () => 0).reduce((c,a,i) => {
const item = {
i: c.amount * i_rate,
amortization: base_amort * (1+i_rate)**i,
}
return {
schedule: [ ...c.schedule, item ],
amount: c.amount - item.amortization,
}
}, { schedule: [], amount: total_amount })
const payments = res.schedule.map(a => {
a.fee = a.i + a.amortization
return a
})
payments[payments.length - 1].fee += res.amount
return {
payments,
total_amount,
}
}
}