Expense Forecasting for Life Milestones

Expense Forecasting for Life Milestones

Financial Assumption

This rate will be used to project the future cost of your milestones.

Define Life Milestones & Estimate Current Costs

No milestones added yet.

Forecasted Future Costs

Add milestones and set inflation rate to see the forecast.

Milestone Expense Forecast Report

A summary of your milestone expense forecast will appear here.

The full PDF will contain a detailed table.

`; previewDiv.innerHTML = html; } function eflm_generatePdf() { const forecastData = eflm_calculateAndDisplayFutureCosts(); if (!forecastData || !forecastData.processedMilestones || forecastData.processedMilestones.length === 0) { alert("Please add milestones and set an inflation rate before generating PDF."); return; } const { jsPDF } = window.jspdf; const doc = new jsPDF(); let yPos = 20; const primaryColor = getComputedStyle(document.documentElement).getPropertyValue('--primary-color').trim(); const textColor = getComputedStyle(document.documentElement).getPropertyValue('--text-color').trim(); const toCurrency = (num) => `$${num.toFixed(2)}`; doc.setFontSize(18); doc.setTextColor(primaryColor); doc.text("Life Milestones Expense Forecast", doc.internal.pageSize.getWidth() / 2, yPos, { align: 'center' }); yPos += 15; doc.setFontSize(12); doc.setTextColor(textColor); doc.text(`Assumed Annual Inflation Rate: ${forecastData.inflationRate.toFixed(2)}%`, 14, yPos); yPos += 10; if (forecastData.processedMilestones.length > 0) { doc.setFontSize(14); doc.setTextColor(primaryColor); doc.text("Forecasted Milestone Costs", 14, yPos); yPos += 8; const tableBody = forecastData.processedMilestones.map(m => [ m.name, m.yearsUntil, toCurrency(m.currentCost), toCurrency(m.futureCost) ]); doc.autoTable({ startY: yPos, head: [['Milestone Name', 'Years Until', 'Current Cost ($)', 'Forecasted Future Cost ($)']], body: tableBody, theme: 'grid', headStyles: { fillColor: primaryColor, textColor: '#ffffff' }, styles: { fontSize: 9, cellPadding: 2 }, columnStyles: { 0: {cellWidth: 'auto'}, 1: {halign:'center'}, 2: {halign:'right'}, 3:{halign:'right'}}, didDrawPage: (d) => { yPos = d.cursor.y; } }); // yPos = doc.lastAutoTable.finalY + 10; // Not needed if nothing follows } else { doc.setFontSize(10); doc.text("No milestones were defined for this forecast.", 14, yPos); } doc.save('life_milestones_expense_forecast.pdf'); } // Initialize document.addEventListener('DOMContentLoaded', () => { eflm_showTab(0); eflm_renderMilestonesList(); // Demo Data eflm_milestones.push({id:'m_001', name:'New Car Purchase', currentCost:25000, yearsUntil:3}); eflm_milestones.push({id:'m_002', name:'International Vacation', currentCost:8000, yearsUntil:2}); eflm_milestones.push({id:'m_003', name:'Home Renovation', currentCost:30000, yearsUntil:5}); eflm_renderMilestonesList(); });
Scroll to Top