Public Service Loan Forgiveness (PSLF) Eligibility Estimator

Your Federal Student Loans

What types of federal student loans do you currently have? (Check all that apply)

Your Employment

Full-time for PSLF generally means working an average of 30+ hours/week for one or more qualifying employers, or what your employer considers full-time, whichever is greater.

Repayment Plan & Progress

This is your estimate. Qualifying payments are complex and include those made after Oct 1, 2007, on eligible loans, under eligible plans, while with eligible employment. Recent waivers and adjustments (like IDR Account Adjustment and COVID-19 pause) may affect your count. Refer to StudentAid.gov for official tracking.

PSLF Eligibility Estimate

Please complete all previous tabs to view your eligibility estimate.

This tool provides an estimate. For official PSLF tracking, employer certification, and to apply for forgiveness, always use the PSLF Help Tool on StudentAid.gov.

Est. Payments Made: ${pslfe_userInputs.paymentsMade !== undefined ? pslfe_userInputs.paymentsMade : 'Not specified'}

`; let resultsHtml = `

${eligibilityStatus}

`; resultsHtml += summaryHtml; if (advicePoints.length > 0) { resultsHtml += "
    "; advicePoints.forEach(point => { resultsHtml += `
  • ${point}
  • `; }); resultsHtml += "
"; } else if (statusClass === "likely-eligible" && paymentsMade >= 120) { resultsHtml += "

Congratulations! Based on your inputs, you appear to meet the key requirements. Proceed to StudentAid.gov to apply for forgiveness using the PSLF Help Tool.

"; } else if (statusClass === "more-info" && advicePoints.length === 0) { resultsHtml += "

Complete the previous tabs for an estimate.

"; } resultsHtml += "
"; if(pslfe_domElements.resultsContainer) pslfe_domElements.resultsContainer.innerHTML = resultsHtml; if(pslfe_domElements.pdfDownloadBtn) pslfe_domElements.pdfDownloadBtn.classList.remove('pslfe-hidden'); } function pslfe_hexToRgb(hex) { if (!hex || typeof hex !== 'string') return null; const shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; hex = hex.replace(shorthandRegex, function(m, r, g, b) { return r + r + g + g + b + b; }); const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); return result ? { r: parseInt(result[1], 16), g: parseInt(result[2], 16), b: parseInt(result[3], 16) } : null; } function pslfe_generatePdf() { if (typeof window.jspdf === 'undefined' || typeof window.jspdf.jsPDF === 'undefined' || typeof window.jspdf.jsPDF.API === 'undefined' || typeof window.jspdf.jsPDF.API.autoTable === 'undefined') { alert("PDF generation library is not loaded."); return; } // Re-run validations and estimate generation to ensure data is fresh for PDF if (!pslfe_validateTab1() || !pslfe_validateTab2() || !pslfe_validateTab3()) { alert("Please ensure all inputs are correctly filled before generating PDF."); if (!pslfe_validateTab1()) pslfe_navigateToTab('pslfe-tab1'); else if (!pslfe_validateTab2()) pslfe_navigateToTab('pslfe-tab2'); else if (!pslfe_validateTab3()) pslfe_navigateToTab('pslfe-tab3'); return; } pslfe_generateEligibilityEstimate(); if (pslfe_domElements.resultsContainer && pslfe_domElements.resultsContainer.innerHTML.includes("pslfe-error-message")) { alert("Cannot generate PDF due to errors in input or calculation."); return; } const ActualJsPDF = window.jspdf.jsPDF; const doc = new ActualJsPDF(); // Extract data from pslfe_userInputs and the generated HTML for consistency const resultsContainer = document.getElementById('pslfe-resultsContainer'); const estimateTitle = resultsContainer.querySelector('h4') ? resultsContainer.querySelector('h4').textContent : "PSLF Eligibility Estimate"; const adviceItems = []; resultsContainer.querySelectorAll('ul li').forEach(li => adviceItems.push(li.textContent)); doc.setFontSize(18); const primaryColorRGB = pslfe_hexToRgb(getComputedStyle(document.documentElement).getPropertyValue('--pslfe-primary-color').trim()); if (primaryColorRGB) doc.setTextColor(primaryColorRGB.r, primaryColorRGB.g, primaryColorRGB.b); else doc.setTextColor(0,94,162); doc.text("PSLF Eligibility Estimate Summary", 105, 22, null, null, "center"); doc.setFontSize(12); doc.setTextColor(27,27,27); let startY = 35; doc.setFontSize(13); const secondaryColorRGB = pslfe_hexToRgb(getComputedStyle(document.documentElement).getPropertyValue('--pslfe-secondary-color').trim()); if (secondaryColorRGB) doc.setTextColor(secondaryColorRGB.r, secondaryColorRGB.g, secondaryColorRGB.b); else doc.setTextColor(0,51,102); doc.text("Your Provided Information:", 14, startY); startY += 8; const inputDataBody = [ ["Loan Types:", pslfe_userInputs.loanTypesText ? pslfe_userInputs.loanTypesText.join(', ') : 'N/A'], ["Full-time Employment:", pslfe_userInputs.isFullTimeText || 'N/A'], ["Employer Type:", pslfe_userInputs.employerTypeText || 'N/A'], ["Repayment Plan:", pslfe_userInputs.repaymentPlanText || 'N/A'], ["Est. Qualifying Payments Made:", pslfe_userInputs.paymentsMade !== undefined ? pslfe_userInputs.paymentsMade.toString() : 'N/A'] ]; doc.autoTable({ startY: startY, theme: 'grid', headStyles: {fillColor: [secondaryColorRGB?.r||0, secondaryColorRGB?.g||51, secondaryColorRGB?.b||102], textColor: 255, fontSize:10}, body: inputDataBody, margin: { left: 14, right: 14 }, styles: { fontSize: 9, cellPadding: 2.5 }, columnStyles: { 0: { fontStyle: 'bold' } } }); startY = doc.autoTable.previous.finalY + 12; doc.setFontSize(13); if (secondaryColorRGB) doc.setTextColor(secondaryColorRGB.r, secondaryColorRGB.g, secondaryColorRGB.b); else doc.setTextColor(0,51,102); doc.text("Eligibility Estimate:", 14, startY); startY += 8; doc.setFontSize(11); doc.setTextColor(27,27,27); doc.text(estimateTitle, 14, startY, {fontStyle: 'bold'}); startY += 7; if (adviceItems.length > 0) { adviceItems.forEach(item => { const splitItem = doc.splitTextToSize(`• ${item}`, doc.internal.pageSize.width - 28 - 5); // 5 for bullet indent doc.text(splitItem, 18, startY); startY += (splitItem.length * (doc.getLineHeight() / doc.internal.scaleFactor * 0.85)) + 2; }); } startY += 5; doc.setFontSize(10); doc.setTextColor(27,27,27); doc.setFont(undefined, 'bold'); doc.text("Official Guidance:", 14, startY); startY += 5; doc.setFont(undefined, 'normal'); const officialGuidance = "This tool provides an estimate. For official PSLF tracking, employer certification, and to apply for forgiveness, always use the PSLF Help Tool on StudentAid.gov."; const splitGuidance = doc.splitTextToSize(officialGuidance, doc.internal.pageSize.width - 28); doc.text(splitGuidance, 14, startY); startY += (splitGuidance.length * (doc.getLineHeight() / doc.internal.scaleFactor * 0.85)) + 2; doc.setTextColor(primaryColorRGB?.r||0, primaryColorRGB?.g||94, primaryColorRGB?.b||162); doc.textWithLink("StudentAid.gov/pslf", 14, startY, {url: "https://studentaid.gov/pslf/"}); doc.setFontSize(9); doc.setTextColor(120); doc.text(`Report generated on: ${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()}`, 14, doc.internal.pageSize.height - 10); doc.save("PSLF_Eligibility_Estimate.pdf"); } window.pslfe_switchTab = pslfe_switchTab; window.pslfe_navigateToTab = pslfe_navigateToTab; window.pslfe_generatePdf = pslfe_generatePdf;
Scroll to Top