data = {
const monthlyRatePct = mortgage.rate.value / 1200
const monthlyPayment = monthlyRatePct === 0 ? mortgage.amount.value / mortgage.years.value / 12 :
mortgage.amount.value * monthlyRatePct / (1 - Math.pow(1 / (1 + monthlyRatePct), mortgage.years.value * 12))
let balance = mortgage.amount.value
let baseline = mortgage.amount.value
let payments = [{ balance, baseline }]
let partial
for (let year = 0; year < mortgage.years.value; year++) {
for (let month = 1; month <= 12; month++) {
let interestMonth = balance * monthlyRatePct
balance -= monthlyPayment + mortgage.overpayment.value - interestMonth
baseline -= monthlyPayment - (baseline * monthlyRatePct)
if (balance <= 0) {
balance = 0;
if (partial === undefined && month !== 12) {
partial = month
}
}
}
payments.push({ baseline, balance, partial})
if (partial) partial = 0;
}
return { monthlyPayment, payments }
}