← back to StudentLoanTracker
src/lib/calculators/poverty-guidelines.ts
65 lines
/**
* 2026 Federal Poverty Guidelines (HHS)
* Source: Federal Register / HHS ASPE
*
* The poverty guideline is used to calculate "discretionary income"
* for income-driven repayment plans:
* - SAVE/IBR/PAYE: AGI minus 225% of poverty guideline (SAVE uses 225%, others 150%)
* - ICR: AGI minus 100% of poverty guideline
*
* Update annually when HHS publishes new guidelines (typically January).
* Alaska and Hawaii have separate, higher guidelines.
*/
interface PovertyData {
baseAmount: number; // For 1-person household
perAdditional: number; // Additional amount per person beyond 1
}
const POVERTY_2026: Record<string, PovertyData> = {
// 48 contiguous states + DC
default: { baseAmount: 15650, perAdditional: 5530 },
// Alaska
AK: { baseAmount: 19560, perAdditional: 6910 },
// Hawaii
HI: { baseAmount: 18010, perAdditional: 6360 },
};
/**
* Get the federal poverty guideline for a given family size and state.
*/
export function getPovertyGuideline(familySize: number, state: string = 'CA'): number {
const upperState = state.toUpperCase();
const data = POVERTY_2026[upperState] || POVERTY_2026.default;
const size = Math.max(1, Math.round(familySize));
return data.baseAmount + data.perAdditional * (size - 1);
}
/**
* Calculate discretionary income.
*
* @param agi - Adjusted gross income
* @param familySize - Household size
* @param state - 2-letter state code
* @param povertyMultiplier - 1.5 for most IDR plans, 2.25 for SAVE, 1.0 for ICR
*/
export function getDiscretionaryIncome(
agi: number,
familySize: number,
state: string,
povertyMultiplier: number
): number {
const guideline = getPovertyGuideline(familySize, state);
return Math.max(0, agi - guideline * povertyMultiplier);
}
/**
* Poverty multipliers by plan type.
*/
export const POVERTY_MULTIPLIERS: Record<string, number> = {
SAVE: 2.25, // 225% of poverty line
IBR: 1.5, // 150% of poverty line
PAYE: 1.5, // 150% of poverty line
ICR: 1.0, // 100% of poverty line
};