Partial Financial Hardship Loan Eligibility Tool

Step 1: Your Financial & Federal Student Loan Information

This tool helps estimate if you might meet the "Partial Financial Hardship" (PFH) criteria for certain U.S. Federal Income-Driven Repayment (IDR) plans like IBR or PAYE.

Typically found on your most recent federal tax return.
Number of people in your household (including yourself). This affects poverty guideline calculations.
You MUST look this up. Find current guidelines at the official ASPE HHS Poverty Guidelines website. Enter the 100% annual figure.
The total principal balance of your federal student loans eligible for IDR plans.
If unsure, use the rate for your largest loan or check StudentAid.gov.

Step 2: Partial Financial Hardship (PFH) Estimate & Guidance

Important Disclaimer: This tool provides an estimate based on your inputs and general U.S. federal student loan program rules. It is NOT an official determination of Partial Financial Hardship or IDR plan eligibility. PFH and IDR plan terms are complex and subject to change. You MUST consult the official StudentAid.gov website, contact your loan servicer(s), or speak with a qualified financial advisor for official information, eligibility confirmation, and to apply for any repayment plan. This tool is for informational purposes only and is not financial or legal advice.

(Calculated as AGI of ${pfh_formatCurrency(agi)} - 150% of Poverty Guideline of ${pfh_formatCurrency(povertyGuideline150)})

Estimated Monthly Payment on Selected IDR Plan (${idrPlanName}): ${pfh_formatCurrency(estimatedIdrMonthlyPayment)}

Estimated Monthly Payment on 10-Year Standard Plan: ${pfh_formatCurrency(standardMonthlyPayment10Yr)}

PFH Status: ${pfhStatus}

${pfhExplanation}

`; } } function pfh_generatePDF() { if (typeof window.jspdf === 'undefined' || typeof window.jspdf.jsPDF === 'undefined') { alert('PDF generation library (jsPDF) is not loaded.'); return; } const JSPDF_CONSTRUCTOR = window.jspdf.jsPDF; const tempDoc = new JSPDF_CONSTRUCTOR(); if (typeof tempDoc.autoTable !== 'function') { alert('jsPDF AutoTable plugin is not loaded.'); return; } if (Object.keys(pfh_dataForPdf).length === 0 || !pfh_dataForPdf.pfhStatus) { alert('Please estimate PFH first to generate a PDF report.'); return; } const doc = new JSPDF_CONSTRUCTOR({ orientation: 'p' }); const data = pfh_dataForPdf; let yPos = 15; const pageMargin = 15; const pageWidth = doc.internal.pageSize.getWidth(); const usableWidth = pageWidth - (2 * pageMargin); const primaryColor = [59, 130, 246]; // #3b82f6 const headingColor = [30, 64, 175]; // #1e40af const textColor = [55, 65, 81]; // #374151 function addMainHeader(text) { doc.setFontSize(16); doc.setFont(undefined, 'bold'); doc.setTextColor(headingColor[0], headingColor[1], headingColor[2]); doc.text(text, pageWidth / 2, yPos, { align: 'center' }); yPos += 12; } function addSectionHeader(text) { if (yPos > doc.internal.pageSize.getHeight() - 30) { doc.addPage(); yPos = pageMargin; } doc.setFontSize(12); doc.setFont(undefined, 'bold'); doc.setTextColor(primaryColor[0], primaryColor[1], primaryColor[2]); doc.text(text, pageMargin, yPos); yPos += 8; doc.setFont(undefined, 'normal'); } function addParagraph(text, fontSize = 9.5, options = {}) { doc.setFontSize(fontSize); doc.setTextColor(options.color ? options.color[0] : textColor[0], options.color ? options.color[1] : textColor[1], options.color ? options.color[2] : textColor[2]); if (options.fontStyle) doc.setFont(undefined, options.fontStyle); const lines = doc.splitTextToSize(text, usableWidth - (options.indent || 0)); if (yPos + (lines.length * (fontSize * 0.4)) + (options.spacingAfter || 3) > doc.internal.pageSize.getHeight() - 20) { doc.addPage(); yPos = pageMargin; } doc.text(lines, pageMargin + (options.indent || 0), yPos); yPos += (lines.length * (fontSize * 0.4)) + (options.spacingAfter || 3); if (options.fontStyle) doc.setFont(undefined, 'normal'); } addMainHeader("Partial Financial Hardship (PFH) Estimate"); addSectionHeader("Your Financial & Loan Information:"); const inputDataForPdf = [ ["Adjusted Gross Income (AGI):", pfh_formatCurrency(data.agi)], ["Family Size:", data.familySize.toString()], ["100% Annual Poverty Guideline Entered:", pfh_formatCurrency(data.povertyGuideline100)], ["Total Federal Student Loan Debt:", pfh_formatCurrency(data.totalDebt)], ["Weighted Average Interest Rate:", `${data.averageAnnualRate.toFixed(2)}%`], ["IDR Plan Selected for PFH Check:", data.idrPlanChoiceText], ]; doc.autoTable({ startY: yPos, body: inputDataForPdf, theme: 'grid', styles: { fontSize: 9, cellPadding: 2.5, textColor: textColor }, columnStyles: { 0: { fontStyle: 'bold', cellWidth: usableWidth * 0.55 }, 1 : { halign: 'right', cellWidth: usableWidth * 0.45} }, didDrawPage: function (hookData){ yPos = hookData.cursor.y ? hookData.cursor.y +10 : pageMargin; } }); yPos = doc.lastAutoTable.finalY ? doc.lastAutoTable.finalY + 10 : yPos; if (yPos > doc.internal.pageSize.getHeight() - 70) { doc.addPage(); yPos = pageMargin; } addSectionHeader("PFH Estimate Results:"); let statusColor = [55, 65, 81]; // default text color if (data.pfhStatus === "Likely" || data.pfhStatus.includes("Very Likely")) statusColor = [6, 95, 70]; // Tailwind green-700 else if (data.pfhStatus === "Unlikely") statusColor = [153, 27, 27]; // Tailwind red-700 else if (data.pfhStatus === "Check Details") statusColor = [154, 52, 18]; // Tailwind orange-700 const resultsData = [ ["Calculated Discretionary Income (Annual):", pfh_formatCurrency(data.discretionaryIncomeAnnual)], ["Est. Monthly Payment (10-Yr Standard):", pfh_formatCurrency(data.standardMonthlyPayment10Yr)], ["Est. Monthly Payment (Selected IDR Plan):", pfh_formatCurrency(data.estimatedIdrMonthlyPayment)], [{content: "PFH Status:", styles:{fontStyle:'bold'}}, {content: data.pfhStatus, styles:{fontStyle:'bold', textColor: statusColor}}], ]; doc.autoTable({ startY: yPos, body: resultsData, theme: 'grid', styles: { fontSize: 9, cellPadding: 2.5, textColor: textColor }, columnStyles: { 0: { fontStyle: 'bold', cellWidth: usableWidth * 0.55 }, 1 : { halign: 'right', cellWidth: usableWidth * 0.45} }, didParseCell: function(hookData){ if(hookData.row.index === 3 && hookData.column.index === 1){ // PFH Status Value Cell Object.assign(hookData.cell.styles, hookData.cell.raw.styles); } }, didDrawPage: function (hookData){ yPos = hookData.cursor.y ? hookData.cursor.y +10 : pageMargin; } }); yPos = doc.lastAutoTable.finalY ? doc.lastAutoTable.finalY + 5 : yPos; addParagraph(data.pfhExplanation, 9, {fontStyle:'italic', spacingAfter: 10}); // Explanation (abbreviated for PDF) if (yPos > doc.internal.pageSize.getHeight() - 50) { doc.addPage(); yPos = pageMargin; } addSectionHeader("Understanding PFH for IBR/PAYE:"); addParagraph("PFH means your estimated IDR payment is less than your 10-year Standard Plan payment, making you eligible for income-based payments under these plans. This status is reviewed annually. Other IDR plans like SAVE have different eligibility and payment calculations and should also be explored on StudentAid.gov.", 9); yPos +=5; // Disclaimer if (yPos > doc.internal.pageSize.getHeight() - 35) { doc.addPage(); yPos = pageMargin; } const disclaimerText = document.querySelector('#pfh-container .pfh-disclaimer-main p').textContent; doc.setFontSize(8); doc.setTextColor(180, 83, 9); // #b45309 (text color from HTML disclaimer) const lines = doc.splitTextToSize("Disclaimer: " + disclaimerText, usableWidth); doc.setFillColor(255,251,235); // #fffbeb (bg from HTML disclaimer) doc.rect(pageMargin - 2, yPos -2, usableWidth + 4, (lines.length * 3.5) + 4, 'F'); doc.text(lines, pageMargin, yPos); doc.save("Partial_Financial_Hardship_Estimate.pdf"); }
Scroll to Top