Standard IRRRL (0.5%)
Exempt (Disability/Purple Heart)
Analysis Results
VA Funding Fee:$0.00
Total New Loan Amount:$0.00
New Monthly P&I Payment:$0.00
Monthly Savings:$0.00
Recoupment Period (Break-Even):0 Months
VA Recoupment Test (36 Months):—
Understanding Your VA IRRRL Rate Analysis
The VA Interest Rate Reduction Refinance Loan (IRRRL), often called a "Streamline" refinance, is designed to lower your monthly payments by reducing your interest rate or converting an adjustable-rate mortgage (ARM) to a fixed rate.
Key Metrics Calculated:
Recoupment Period: The VA generally requires that the costs of the refinance (closing costs + funding fee) be recouped through monthly savings within 36 months. This calculator checks this requirement automatically.
Funding Fee: Most IRRRLs require a standard funding fee of 0.5% of the loan amount, which can be financed into the new loan. Veterans with a service-connected disability are typically exempt.
Net Tangible Benefit: Beyond just the rate, the VA requires a "Net Tangible Benefit," usually defined as a specific reduction in rate or payment, or moving to a more stable loan product.
Note: This tool estimates Principal & Interest (P&I) only. Taxes, insurance, and HOA fees generally remain the same but should be verified with your lender.
function calculateIRRRL() {
// 1. Get Input Values
var balance = parseFloat(document.getElementById('currentBalance').value);
var currentPayment = parseFloat(document.getElementById('currentPayment').value);
var newRate = parseFloat(document.getElementById('newNoteRate').value);
var termYears = parseFloat(document.getElementById('newTerm').value);
var closingCosts = parseFloat(document.getElementById('closingCosts').value);
var eemAmount = parseFloat(document.getElementById('eemAmount').value);
var feeRate = parseFloat(document.getElementById('fundingFeeType').value);
// 2. Validation
if (isNaN(balance) || isNaN(currentPayment) || isNaN(newRate) || isNaN(closingCosts)) {
alert("Please enter valid numbers for Balance, Current Payment, New Rate, and Closing Costs.");
return;
}
if (isNaN(eemAmount)) eemAmount = 0;
// 3. Calculate VA Funding Fee
// Fee is calculated on the Base Loan Amount (Balance + EEM + Closing Costs if financed).
// Usually, for IRRRL, Closing Costs are rolled in.
// Base Loan = Balance + EEM + Closing Costs.
var baseLoan = balance + eemAmount + closingCosts;
var fundingFee = baseLoan * feeRate;
// 4. Calculate Total New Loan Amount
var totalLoan = baseLoan + fundingFee;
// 5. Calculate New Monthly Payment
// Formula: P * (r(1+r)^n) / ((1+r)^n – 1)
var monthlyRate = (newRate / 100) / 12;
var numPayments = termYears * 12;
var newPayment = 0;
if (monthlyRate === 0) {
newPayment = totalLoan / numPayments;
} else {
newPayment = totalLoan * (monthlyRate * Math.pow(1 + monthlyRate, numPayments)) / (Math.pow(1 + monthlyRate, numPayments) – 1);
}
// 6. Calculate Savings
var monthlySavings = currentPayment – newPayment;
// 7. Calculate Recoupment
// Recoupment = (Closing Costs + Funding Fee + EEM) / Monthly Savings
// Note: Even if costs are rolled in, VA checks if the increase in loan balance is recouped by savings.
// Total costs to recoup = Closing Costs + Funding Fee + Discount Points (included in closing costs here).
// Some definitions exclude EEM from recoupment, but for simplicity we assume total costs added vs savings.
var totalCostsToRecoup = closingCosts + fundingFee; // Usually EEM is separate benefit.
var recoupmentMonths = 0;
if (monthlySavings > 0) {
recoupmentMonths = totalCostsToRecoup / monthlySavings;
} else {
recoupmentMonths = 999; // Infinite/Negative savings
}
// 8. Display Results
document.getElementById('resFundingFee').innerText = "$" + fundingFee.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resLoanAmount').innerText = "$" + totalLoan.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resNewPayment').innerText = "$" + newPayment.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
var savingsEl = document.getElementById('resSavings');
savingsEl.innerText = "$" + monthlySavings.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
if (monthlySavings > 0) {
savingsEl.className = "result-value highlight-green";
} else {
savingsEl.className = "result-value highlight-red";
}
var recoupEl = document.getElementById('resRecoupment');
if (monthlySavings 0 && recoupmentMonths <= 36) {
statusEl.innerText = "PASS (Within 36 Months)";
statusEl.className = "status-badge status-pass";
} else {
statusEl.innerText = "FAIL (Exceeds 36 Months)";
statusEl.className = "status-badge status-fail";
}
document.getElementById('results').style.display = 'block';
}