Foreclosure Risk Estimator

Your Financial Situation

Your total monthly income before taxes and deductions.
Includes principal, interest, property taxes, homeowner's insurance (PITI), and any HOA fees.
Sum of car loans, student loans, credit card minimums, personal loans, etc. (excluding housing payment).
Cash or assets easily convertible to cash for emergencies (e.g., savings account, money market).

Current Status & Recent Changes

Financial Stress Indication

Please complete all previous steps to view your financial stress indication.

Error: Tool components missing.

"; return; } if (this.elements.downloadPdfButton) { this.elements.downloadPdfButton.addEventListener('click', this.downloadPdf.bind(this)); } }, _validateInput: function(element, isRequired = true, minVal = 0) { // Standard validation logic if (!element) return true; element.classList.remove('error'); const errorContainer = element.closest('.fre-form-group') || element.parentNode; const existingErrorMsg = errorContainer.querySelector('.fre-error-message'); if (existingErrorMsg) existingErrorMsg.remove(); const valueStr = element.value.trim(); if (isRequired && valueStr === '') { this._addErrorMessage(element, 'This field is required.'); return false; } if (valueStr === '' && !isRequired) return true; const value = parseFloat(valueStr); let errorMsgText = ''; if (isNaN(value)) errorMsgText = 'Please enter a valid number.'; else if (value < minVal) errorMsgText = `Value must be at least ${minVal}.`; if (errorMsgText !== '') { this._addErrorMessage(element, errorMsgText); return false; } return true; }, _addErrorMessage: function(element, message) { /* Standard _addErrorMessage */ element.classList.add('error'); const errorMsgEl = document.createElement('p'); errorMsgEl.className = 'fre-error-message'; errorMsgEl.textContent = message; let parent = element.closest('.fre-form-group') || element.parentNode; parent.appendChild(errorMsgEl); }, openTab: function(event, tabName) { /* Standard openTab */ if (!this.elements.tabContents || !this.elements.tabLinks) return; this.elements.tabContents.forEach(tc => tc.style.display = "none"); this.elements.tabLinks.forEach(tl => tl.classList.remove("active")); const selectedTabContent = document.getElementById(tabName); if (selectedTabContent) selectedTabContent.style.display = "block"; const buttonToActivate = event ? event.currentTarget : Array.from(this.elements.tabLinks).find(btn => btn.getAttribute('onclick').includes(tabName)); if (buttonToActivate) buttonToActivate.classList.add("active"); }, navigateToTab: function(tabName, buttonIdKey) { /* Standard navigateToTab */ this.openTab(null, tabName); const buttonElement = this.elements[buttonIdKey]; if (buttonElement) { this.elements.tabLinks.forEach(tl => tl.classList.remove("active")); buttonElement.classList.add("active"); } }, validateAndNavigate: function(currentTabId, nextTabId, nextTabButtonIdKey, requiredFieldIds) { let allValid = true; requiredFieldIds.forEach(id => { const field = this.elements[id]; if (field) { let min = (id === 'freMonthlyGrossIncome') ? 1 : 0; allValid = this._validateInput(field, true, min) && allValid; } else { console.warn(`Validation: Field ${id} not found in elements map.`); } }); // Also validate non-required debt/savings fields if they have values ['totalOtherMonthlyDebtPayments', 'liquidSavingsAmount'].forEach(id => { const field = this.elements[id]; if (field && field.value.trim() !== '') { allValid = this._validateInput(field, false, 0) && allValid; } }); const nextTabButton = this.elements[nextTabButtonIdKey]; if (allValid) { if (nextTabButton) nextTabButton.disabled = false; this.navigateToTab(nextTabId, nextTabButtonIdKey); } else { if (nextTabButton) nextTabButton.disabled = true; const currentTabButtonIdKey = currentTabId.replace('Tab', 'TabButton'); // e.g. FreFinancialsTab -> financialsTabButton this.navigateToTab(currentTabId, currentTabButtonIdKey); } }, estimateStress: function() { // Validate Tab 2 (Current Status) - though select fields are always "valid" with a selection // For robustness, we could check if a default "select" option is still chosen if we had one. Here, default is first option. // Re-validate Tab 1 let financialsValid = ['freMonthlyGrossIncome', 'freTotalMonthlyHousingPayment'].every(id => this._validateInput(this.elements[id])); ['totalOtherMonthlyDebtPayments', 'liquidSavingsAmount'].forEach(id => { const field = this.elements[id]; if (field && field.value.trim() !== '') { financialsValid = this._validateInput(field, false, 0) && financialsValid; } }); if (!financialsValid) { if (this.elements.stressAnalysisTabButton) this.elements.stressAnalysisTabButton.disabled = true; if (this.elements.analysisOutput) this.elements.analysisOutput.innerHTML = '

Please correct errors in Financial Situation.

'; this.navigateToTab('FreFinancialsTab', 'financialsTabButton'); return; } const grossIncome = parseFloat(this.elements.monthlyGrossIncome.value); const housingPayment = parseFloat(this.elements.totalMonthlyHousingPayment.value); const otherDebts = parseFloat(this.elements.totalOtherMonthlyDebtPayments.value) || 0; const savings = parseFloat(this.elements.liquidSavingsAmount.value) || 0; const paymentsBehindStatus = this.elements.paymentsBehind.value; const incomeLossStatus = this.elements.recentIncomeLoss.value; let score = 0; // Calculate Front-End DTI (Housing Cost Ratio) const frontEndDTI = grossIncome > 0 ? (housingPayment / grossIncome) * 100 : Infinity; let frontEndDTIText = ""; if (frontEndDTI <= 28) { frontEndDTIText = "Comfortable (<28%)"; } else if (frontEndDTI <= 36) { frontEndDTIText = "Manageable (28-36%)"; score += 2; } else if (frontEndDTI <= 43) { frontEndDTIText = "Stretched (37-43%)"; score += 5; } else { frontEndDTIText = "High Burden (>43%)"; score += 10; } // Calculate Back-End DTI (Total Debt Ratio) const totalMonthlyDebts = housingPayment + otherDebts; const backEndDTI = grossIncome > 0 ? (totalMonthlyDebts / grossIncome) * 100 : Infinity; let backEndDTIText = ""; if (backEndDTI <= 36) { backEndDTIText = "Healthy (<36%)"; } else if (backEndDTI <= 43) { backEndDTIText = "Manageable (36-43%)"; score += 3; } else if (backEndDTI <= 50) { backEndDTIText = "Concerning (44-50%)"; score += 7; } else { backEndDTIText = "High (>50%)"; score += 15; } // Calculate Savings Buffer const savingsBufferMonths = housingPayment > 0 ? savings / housingPayment : Infinity; let savingsBufferText = ""; if (savingsBufferMonths >= 6) { savingsBufferText = "Adequate (6+ months)"; } else if (savingsBufferMonths >= 3) { savingsBufferText = "Fair (3-5 months)"; score += 3; } else if (savingsBufferMonths >= 1) { savingsBufferText = "Low (1-2 months)"; score += 7; } else { savingsBufferText = "Very Low (<1 month)"; score += 15; } // Score for Payments Behind if (paymentsBehindStatus === 'yes_1') score += 5; else if (paymentsBehindStatus === 'yes_2') score += 10; else if (paymentsBehindStatus === 'yes_3_plus') score += 25; // Higher penalty // Score for Income Loss if (incomeLossStatus === 'yes_minor') score += 5; else if (incomeLossStatus === 'yes_significant') score += 15; let overallStressLevel = ""; let stressClass = ""; let considerations = []; if (score <= 10) { overallStressLevel = "Low Financial Stress Indicated"; stressClass = "fre-stress-low"; considerations.push("Your current financial indicators appear relatively stable based on the inputs."); if(backEndDTI > 36 && backEndDTI <=43) considerations.push("Monitor your overall debt (Back-End DTI) to maintain this stability."); if(savingsBufferMonths < 6 && savingsBufferMonths >=3) considerations.push("Consider gradually increasing your emergency savings for a stronger buffer."); } else if (score <= 25) { overallStressLevel = "Moderate Financial Stress Indicated"; stressClass = "fre-stress-moderate"; considerations.push("Your inputs suggest some areas of financial pressure. Reviewing your budget and debt management strategies may be beneficial."); if(backEndDTI > 43) considerations.push("Your Back-End DTI is elevated; explore ways to reduce non-housing debts if possible."); if(savingsBufferMonths < 3) considerations.push("Your savings buffer is low; prioritizing building an emergency fund is recommended."); if(paymentsBehindStatus !== 'no') considerations.push("Being behind on payments is a significant concern; contact your lender immediately to discuss options."); if(incomeLossStatus !== 'no') considerations.push("Recent income loss can strain finances; adjust your budget and explore income recovery options."); } else { // score > 25 overallStressLevel = "High Financial Stress Indicated"; stressClass = "fre-stress-high"; considerations.push("The information provided indicates significant financial stress, which could increase the risk of difficulty with mortgage payments. Prompt action is advisable."); if(paymentsBehindStatus !== 'no') considerations.push("Being behind on payments requires immediate attention. Contact your lender or a housing counselor without delay."); else considerations.push("Even if current on payments, your DTI ratios and/or savings buffer suggest a vulnerable financial position."); considerations.push("It is strongly recommended to seek advice from a non-profit credit counseling agency or a financial advisor."); considerations.push("Explore all options to reduce expenses, manage debts, and/or increase income."); } this.calculatedData = { grossIncome, housingPayment, otherDebts, savings, paymentsBehindStatus, incomeLossStatus, frontEndDTI, frontEndDTIText, backEndDTI, backEndDTIText, savingsBufferMonths, savingsBufferText, score, overallStressLevel, stressClass, considerations }; const fNum = (num, dec=1) => (typeof num !== 'number' || isNaN(num) || !isFinite(num)) ? 'N/A' : num.toLocaleString(undefined, {minimumFractionDigits:dec, maximumFractionDigits:dec}); let outputHTML = `
Financial Indicators

Front-End DTI (Housing Costs to Income): ${fNum(frontEndDTI)}% (${frontEndDTIText})

Back-End DTI (Total Debts to Income): ${fNum(backEndDTI)}% (${backEndDTIText})

Savings Buffer (covers housing payments for): ${savingsBufferMonths === Infinity ? 'N/A (no housing payment)' : fNum(savingsBufferMonths) + ' months'} (${savingsBufferText})

${paymentsBehindStatus !== 'no' ? `

Payment Status: Currently ${paymentsBehindStatus.replace('yes_','').replace('_plus','+')} month(s) behind

` : ''} ${incomeLossStatus !== 'no' ? `

Recent Income Loss: ${incomeLossStatus.replace('yes_','')}

` : ''}
${overallStressLevel}
General Considerations:
    ${considerations.map(c => `
  • ${c}
  • `).join('')}

This tool provides an estimation of financial stress indicators based on your inputs. It is not financial advice and does not predict foreclosure. Actual risk depends on many individual factors and local regulations. If you have concerns, please contact your lender, a HUD-approved housing counselor, or a qualified financial advisor promptly.

`; this.elements.analysisOutput.innerHTML = outputHTML; if(this.elements.pdfDownloadContainer) this.elements.pdfDownloadContainer.style.display = 'block'; this.navigateToTab('FreStressAnalysisTab', 'stressAnalysisTabButton'); }, downloadPdf: function() { try { if (typeof window.jspdf === 'undefined' || typeof window.jspdf.jsPDF === 'undefined') { alert('PDF generation library (jsPDF core) is not loaded.'); return; } const { jsPDF: JSPDF_CONSTRUCTOR } = window.jspdf; const doc = new JSPDF_CONSTRUCTOR(); if (typeof doc.autoTable !== 'function' && this.calculatedData.considerations && this.calculatedData.considerations.length > 0) { // Only check autotable if we might use it // For this PDF, autoTable might be overkill, simple text may suffice. // If we use it for considerations: // alert('PDF generation plugin (jsPDF-Autotable) is not loaded.'); return; } if (!this.calculatedData || Object.keys(this.calculatedData).length === 0) { alert('Error: Calculation data missing for PDF.'); return; } const data = this.calculatedData; if (typeof data.frontEndDTI === 'undefined') { alert('Error: Essential calculation data missing for PDF.'); return; } const primaryColor = '#5c4b99'; const textColor = '#414042'; const fNum = (num, dec=1) => (typeof num !== 'number' || isNaN(num) || !isFinite(num)) ? 'N/A' : num.toLocaleString(undefined, {minimumFractionDigits:dec, maximumFractionDigits:dec}); doc.setFontSize(16); doc.setTextColor(primaryColor); doc.text("Financial Stress Indication Summary", 14, 22); doc.setFontSize(10); doc.setTextColor(textColor); doc.text(`Report Generated: ${new Date().toLocaleDateString('en-US', {year:'numeric', month:'long', day:'numeric'})}`, 14, 30); let currentY = 45; const addLine = (label, value, color = textColor) => { doc.setFont(undefined, 'bold'); doc.setTextColor(textColor); doc.text(label, 14, currentY); doc.setFont(undefined, 'normal'); doc.setTextColor(color); doc.text(value, 85, currentY); currentY += 7; }; const addSubHeader = (text) => { doc.setFontSize(12); doc.setFont(undefined, 'bold'); doc.setTextColor(primaryColor); doc.text(text, 14, currentY); currentY += 8; doc.setFontSize(10); doc.setFont(undefined, 'normal'); doc.setTextColor(textColor); }; addSubHeader("Input Financial Snapshot:"); addLine("Gross Monthly Income:", `$${fNum(data.grossIncome,0)}`); addLine("Total Monthly Housing Payment:", `$${fNum(data.housingPayment,0)}`); addLine("Other Monthly Debts:", `$${fNum(data.otherDebts,0)}`); addLine("Liquid Savings:", `$${fNum(data.savings,0)}`); currentY +=3; addSubHeader("Calculated Indicators:"); addLine("Front-End DTI:", `${fNum(data.frontEndDTI)}% (${data.frontEndDTIText})`); addLine("Back-End DTI:", `${fNum(data.backEndDTI)}% (${data.backEndDTIText})`); addLine("Savings Buffer:", `${data.savingsBufferMonths === Infinity ? 'N/A' : fNum(data.savingsBufferMonths) + ' months'} (${data.savingsBufferText})`); if (data.paymentsBehindStatus !== 'no') addLine("Payment Status:", data.paymentsBehindStatus.replace('yes_','').replace('_plus','+') + " month(s) behind", '#c0392b'); if (data.incomeLossStatus !== 'no') addLine("Recent Income Loss:", data.incomeLossStatus.replace('yes_',''), '#dd6b20'); currentY += 5; doc.setFontSize(12); doc.setFont(undefined, 'bold'); let stressColor = textColor; if (data.stressClass === "fre-stress-low") stressColor = '#2e856e'; else if (data.stressClass === "fre-stress-moderate") stressColor = '#d68910'; else if (data.stressClass === "fre-stress-high") stressColor = '#c0392b'; doc.setTextColor(stressColor); doc.text(`Overall Indication: ${data.overallStressLevel}`, 14, currentY); currentY += 10; doc.setTextColor(textColor); addSubHeader("General Considerations:"); doc.setFontSize(9); data.considerations.forEach(item => { const splitItem = doc.splitTextToSize(`• ${item}`, doc.internal.pageSize.width - 28 - 14); if (currentY + splitItem.length * 5 > doc.internal.pageSize.height - 30) { doc.addPage(); currentY = 20; } doc.text(splitItem, 14, currentY); currentY += splitItem.length * 5; }); currentY += 5; doc.setFontSize(8); doc.setTextColor('#6d6875'); const finalNote = "IMPORTANT: This tool provides an estimation of financial stress indicators based on your inputs. It is not financial advice and does not predict foreclosure, which is a complex legal process. Actual risk depends on many individual factors and local regulations. If you have concerns about your mortgage or financial situation, please contact your lender, a HUD-approved housing counselor (in the US), or a qualified financial advisor promptly for personalized assistance."; const splitFinalNote = doc.splitTextToSize(finalNote, doc.internal.pageSize.width - 28); if (currentY + splitFinalNote.length * 4 > doc.internal.pageSize.height - 15) { doc.addPage(); currentY = 20; } doc.text(splitFinalNote, 14, currentY); doc.save("Financial_Stress_Indicator_Summary.pdf"); } catch (error) { console.error("PDF Generation Error:", error); alert("An error occurred while generating the PDF: " + error.message + "\nPlease check the console (F12)."); } } }; document.addEventListener('DOMContentLoaded', function() { freApp.init(); });

The thought of foreclosure can be a source of significant stress for any homeowner, representing the potential loss of your most valuable asset. Understanding your personal risk factors and taking proactive steps to mitigate them is crucial for maintaining housing stability. Our Foreclosure Risk Estimator at WorkTool.com is a compassionate and practical tool designed to help homeowners assess their vulnerability to foreclosure by analyzing key aspects of their financial situation. We know that facing financial challenges can be daunting, which is why this tool provides clear, understandable insights to empower you to identify potential issues and seek solutions before they escalate.

This intuitive estimator guides you through an assessment of your financial health, focusing on the core elements that determine your ability to sustain mortgage payments. You’ll begin by inputting your gross monthly income, which is your total income before taxes and deductions. Next, you’ll provide your total monthly housing payment, which includes principal, interest, property taxes, homeowner’s insurance (PITI), and any HOA fees. To complete the picture of your financial obligations, the tool also asks for your total other monthly debt payments, encompassing sums like car loans, student loans, and credit card minimums, excluding housing. Finally, you’ll input your readily available liquid savings, representing cash or easily convertible assets for emergencies.

By systematically gathering these crucial financial details, our Foreclosure Risk Estimator provides a realistic appraisal of your current financial standing relative to your obligations. It helps you see how factors like your debt-to-income ratio, your emergency savings buffer, and the proportion of your income dedicated to housing costs contribute to your overall financial resilience. The tool is designed to highlight areas of potential strain, indicating if your current financial setup might put you at higher risk during unexpected life events, such as job loss, medical emergencies, or significant income reduction. It serves as an early warning system, allowing you to address vulnerabilities proactively.

The true benefit of using this Foreclosure Risk Estimator lies in its ability to empower you with knowledge and encourage preventative action. It’s not about predicting a definite outcome, but rather about providing a stress indication that can prompt you to strengthen your financial foundations. By understanding your estimated risk, you can explore options like building up emergency savings, reducing discretionary spending, or reaching out to your lender for assistance programs long before you fall behind on payments. This tool is an essential resource for homeowners committed to protecting their home and financial well-being, offering a pathway to greater security and peace of mind. Assess your risk today and fortify your financial future.

Scroll to Top