0% found this document useful (0 votes)
20 views2 pages

Aaa

The function calculates a loan repayment schedule given parameters like interest rate, loan amount, installment frequency and tenure. It initializes arrays to store schedule data and calculates interest, principal and payment dates for each installment by iterating through the loan tenure.

Uploaded by

vishal.patel
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
20 views2 pages

Aaa

The function calculates a loan repayment schedule given parameters like interest rate, loan amount, installment frequency and tenure. It initializes arrays to store schedule data and calculates interest, principal and payment dates for each installment by iterating through the loan tenure.

Uploaded by

vishal.patel
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 2

function calculateSchedule(workingInterest, loanAmount, installmentFrequency,

installmentAmount, loanTenure, disbursementDate, actualRepaymentDates,


actualRepaidAmounts) {
// Convert string disbursementDate to Date object
disbursementDate = new Date(disbursementDate);

// Calculate total number of installments based on loan tenure


let totalInstallments;
switch (loanTenure) {
case '6':
totalInstallments = 6;
break;
case '12':
totalInstallments = 12;
break;
case '18':
totalInstallments = 18;
break;
case '24':
totalInstallments = 24;
break;
default:
totalInstallments = 12; // Default to 12 months
}

const masterDays = {
Monthly: 30,
weekly: 7,
['Bi-Weekly']: 14,
};

// Initialize arrays to store the schedule data


let schedule = [];
let currentDate = new Date(disbursementDate);

// Calculate schedule for each installment


for (let i = 1; i <= totalInstallments; i++) {
let days = masterDays[installmentFrequency];
// Calculate interest and principal components
let interest = (loanAmount * workingInterest * days) / (365 * 100);
let principal = installmentAmount - interest;

// Update outstanding principal


let outstandingPrincipal = loanAmount - principal;

// Calculate bi-weekly installment


let biWeeklyInstallment = installmentFrequency === 'Monthly' ?
installmentAmount * 12 / 26 : installmentAmount;

// Calculate the payment date


let paymentDate = new Date(currentDate.getTime());
paymentDate.setDate(paymentDate.getDate() + days);

// Check if there is an actual repayment date for the current installment


let actualRepaymentDate = actualRepaymentDates[i - 1];
let actualRepaidAmount = actualRepaidAmounts[i - 1];

// Adjust remaining principal and interest if there's a deviation in repaid


amount
if (actualRepaidAmount && actualRepaidAmount < installmentAmount) {
// Adjust principal and interest based on the actual repaid amount
principal = actualRepaidAmount;
interest = installmentAmount - principal;

// Update outstanding principal


outstandingPrincipal = loanAmount - principal;
}

// Push schedule data to the array


schedule.push({
"Outstanding": outstandingPrincipal.toFixed(2),
"Principal": principal.toFixed(2),
"Interest": interest.toFixed(2),
"Installment": installmentAmount.toFixed(2),
"Bi-Weekly Instt.": biWeeklyInstallment.toFixed(2),
"# Days": days,
"Actual Repayment Date": actualRepaymentDate ? actualRepaymentDate :
"-",
"Actual Repaid Amount": actualRepaidAmount ?
actualRepaidAmount.toFixed(2) : "-",
"Payment Date": paymentDate.toISOString().slice(0, 10) // Format
payment date as yyyy-mm-dd
});

// Update loan amount for next iteration


loanAmount = outstandingPrincipal;

// Move currentDate to the next installment date


currentDate.setDate(currentDate.getDate() + days);
}

return schedule;
}

// Sample input
let workingInterest = 25;
let loanAmount = 15000;
let installmentFrequency = 'Bi-Weekly';
let installmentAmount = 710;
let loanTenure = '24'; // 6, 12, 18, or 24 months
let disbursementDate = '2024-01-01';
let actualRepaymentDates = [null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null];
let actualRepaidAmounts = [null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null];

// Calculate and print schedule


let schedule = calculateSchedule(workingInterest, loanAmount, installmentFrequency,
installmentAmount, loanTenure, disbursementDate, actualRepaymentDates,
actualRepaidAmounts);
console.table(schedule);

You might also like