Home Loan Affordability Calculatorvar AFC={income:12000,debts:0,ptype:"private",tenure:25,rate:2.5};var AFC_STRESS=0.04,AFC_LTV=0.75;function afcFmt(n){return"S$"+Math.round(n).toLocaleString("en-US")} function afcLoanFromMonthly(m,annualRate,years){var r=annualRate/12,n=years*12;if(m<=0)return 0;if(r===0)return m*n;return m*(Math.pow(1+r,n)-1)/(r*Math.pow(1+r,n))} function afcMonthlyFromLoan(p,annualRate,years){var r=annualRate/12,n=years*12;if(p<=0)return 0;if(r===0)return p/n;return p*r*Math.pow(1+r,n)/(Math.pow(1+r,n)-1)} function afcBSD(p){var tiers=[[180000,0.01],[180000,0.02],[640000,0.03],[500000,0.04],[1500000,0.05],[null,0.06]];var rem=p,t=0;for(var i=0;i25){AFC.tenure=25;tEl.value=25;document.getElementById("tenureVal").textContent="Loan Tenure:25 yrs"}}else{tEl.max=30} afcRender()} function afcRender(){var income=AFC.income,debts=AFC.debts,ptype=AFC.ptype,tenure=AFC.tenure,rate=AFC.rate;var tdsrCap=income*0.55,msrCap=income*0.30;var isHdbEc=(ptype==="hdb"||ptype==="ec");var avail,constraint;if(isHdbEc){var byTdsr=tdsrCap-debts;avail=Math.min(msrCap,byTdsr);constraint=(avail===msrCap&&msrCap<=byTdsr)?"MSR(30%)":"TDSR(55%)"}else{avail=tdsrCap-debts;constraint="TDSR(55%)"} if(avail<0)avail=0;var maxLoan=afcLoanFromMonthly(avail,AFC_STRESS,tenure);var maxPrice=maxLoan/AFC_LTV;var downPay=maxPrice*(1-AFC_LTV);var bsd=afcBSD(maxPrice);var upfront=downPay+bsd;var monthlyActual=afcMonthlyFromLoan(maxLoan,rate/100,tenure);var monthlyStress=afcMonthlyFromLoan(maxLoan,AFC_STRESS,tenure);document.getElementById("maxPrice").textContent=afcFmt(maxPrice);document.getElementById("maxLoan").textContent=afcFmt(maxLoan);document.getElementById("downPay").textContent=afcFmt(downPay);document.getElementById("monthlyActual").textContent=afcFmt(monthlyActual);document.getElementById("monthlyStress").textContent="Stress test:"+afcFmt(monthlyStress);document.getElementById("constraintPill").textContent="\u2713 Limited by"+constraint;document.getElementById("dIncome").textContent=afcFmt(income);document.getElementById("dTdsr").textContent=afcFmt(tdsrCap);document.getElementById("dDebts").textContent="\u2212"+afcFmt(debts);document.getElementById("dAvail").textContent=afcFmt(avail);document.getElementById("dTenure").textContent=tenure;document.getElementById("dMaxLoan").textContent=afcFmt(maxLoan);document.getElementById("dBsd").textContent=afcFmt(bsd);document.getElementById("dUpfront").textContent=afcFmt(upfront);var msrRow=document.getElementById("msrRow");if(isHdbEc){msrRow.style.display="flex"document.getElementById("dMsr").textContent=afcFmt(msrCap)}else{msrRow.style.display="none"}} if(document.getElementById("maxPrice")){afcRender()}else{document.addEventListener("DOMContentLiteSpeedLoaded",afcRender)}