FIRE Rechner

Ein professioneller FIRE-Rechner (Financial Independence Retire Early) zur Berechnung Ihrer finanziellen Unabhängigkeit.

Datos financieros básicos

Ingrese sus ingresos netos después de todas las deducciones.
Todos los gastos mensuales de vida.
Sus activos ya ahorrados.
%
Rentabilidad realista esperada después de la inflación.

Circunstancias personales

Su país principal de residencia.
Su edad actual.
Su moneda de cálculo.
Afecta los gastos y la clase de impuestos.
Importante para la planificación de gastos.
Influye en la pensión y el seguro de salud.
Influye en la planificación de riesgos.

Objetivos y preferencias de FIRE

Determina su nivel de gasto en la jubilación.
Su edad objetivo de jubilación (vacío = lo antes posible).
Afecta a la tasa de retirada segura.
x Gasto anual
Ajustado automáticamente (Por defecto: 25x).

Cómo utilizar la calculadora FIRE

Con esta calculadora profesional FIRE (Financial Independence Retire Early) puedes calcular cuánto patrimonio necesitas para la independencia financiera y cuánto te falta para jubilarte anticipadamente.

1

Introduce tus datos

Ingresos mensuales, gastos, ahorros actuales y rentabilidad esperada.

2

Elige país y moneda

Selecciona tu país para tener en cuenta impuestos, inflación y coste de vida.

3

Ajusta tu situación

Estado familiar, vivienda, empleo y perfil de riesgo.

4

Elige el tipo de FIRE

LeanFIRE, FIRE clásico, FatFIRE, CoastFIRE o BaristaFIRE.

5

Inicia el cálculo

Haz clic en “Calcular” para ver tu objetivo FIRE y el tiempo estimado.

6

Analiza el resultado

Consulta el patrimonio necesario, la tasa de ahorro, los años hasta FIRE y recibe recomendaciones personalizadas.

Cómo funciona la herramienta

Calcule con precisión cuándo será financieramente independiente usando el principio FIRE — completamente gratis y científicamente fundamentado. La calculadora FIRE le ayuda a planificar su libertad financiera, optimizar la creación de patrimonio y comparar diferentes escenarios.

Cálculo del número FIRE

Cálculo automático de su número FIRE usando la probada regla 25x. Ingrese sus gastos anuales y la herramienta muestra instantáneamente cuánto patrimonio necesita para la independencia financiera — incluido ajuste por inflación.

3 escenarios

Compare proyecciones conservadoras, realistas y optimistas simultáneamente. Vea cómo diferentes rendimientos y tasas de inflación afectan su fecha FIRE — para decisiones financieras informadas.

Visualización cronológica

La línea de tiempo interactiva muestra el desarrollo de su patrimonio año por año. Vea exactamente cuándo alcanza varios hitos y cómo su patrimonio se mantiene después de FIRE a lo largo de los años.
Importante: Todos los cálculos se basan en el Estudio Trinity y la regla del 4%. No se almacenan datos — su planificación financiera permanece completamente privada y segura.

Ventajas sobre otras soluciones

La calculadora FIRE es más precisa, completa y científicamente fundamentada que simples calculadoras de ahorro u hojas de cálculo Excel.
3 escenarios
Conservador a optimista
Regla 4%
Basado en Estudio Trinity
5 idiomas
DE, EN, FR, ES, IT

Ventajas adicionales

  • Sin registro: Usable instantáneamente, sin inicio de sesión ni cuenta — cálculos ilimitados.
  • Científicamente fundamentado: Basado en el Estudio Trinity y más de 30 años de datos históricos del mercado.
  • Ajustado por inflación: Todos los valores en poder adquisitivo actual — sin cifras nominales engañosas.
  • Multilingüe: Soporte completo para alemán, inglés, francés, español e italiano.
  • Diseño responsive: Funciona perfectamente en escritorio, tablet y smartphone sin instalación.

¿Para quién es la herramienta?

Aspirantes FIRE y frugalistas

Perfecto para personas que buscan la independencia financiera y la jubilación anticipada. Calcule su fecha FIRE, optimice su tasa de ahorro y vea cómo diferentes estrategias afectan sus objetivos.

Inversores en ETF y ahorradores

Herramienta ideal para planificar inversiones a largo plazo en carteras de ETF. Vea cómo crece su patrimonio con diferentes rendimientos y cuándo puede vivir de los ingresos de capital — para estrategias de ingresos pasivos.

Planificadores financieros y asesores

Use la herramienta como base para consultas con clientes o para ilustrar conceptos FIRE. Muestre diferentes escenarios y ayude a los clientes a crear planes financieros realistas.

Consejos para uso óptimo

  1. Rendimientos realistas: Use 5-7% para carteras de ETF diversificadas (MSCI World históricamente ~7% real). Sea conservador con inversiones arriesgadas.
  2. Considerar la inflación: Calcule con 2-3% de inflación a largo plazo. La herramienta muestra todos los valores ajustados por inflación en poder adquisitivo actual.
  3. Aumentar la tasa de ahorro: Incluso pequeños aumentos (100-200€ más al mes) pueden ahorrar años hasta FIRE — ¡pruebe diferentes escenarios!
  4. Margen de seguridad: Planifique 10-20% más de patrimonio que el número FIRE puro para gastos inesperados y fluctuaciones del mercado.
  5. Actualizaciones regulares: Revise su planificación anualmente y ajuste las suposiciones a los desarrollos reales — ¡la flexibilidad es importante!

Preguntas frecuentes (FAQ)

La calculadora FIRE es una herramienta gratuita para calcular su independencia financiera según el principio FIRE (Financial Independence, Retire Early). Ingrese sus activos, ingresos, gastos y tasa de ahorro — la herramienta calcula automáticamente cuándo será financieramente independiente y cuánto durará su patrimonio. Utiliza la regla del 4% y considera la inflación, los rendimientos y varios escenarios.

FIRE significa "Financial Independence, Retire Early" — un concepto financiero donde acumula suficiente patrimonio para vivir de los rendimientos del capital. La regla del 4% establece que puede retirar el 4% de su patrimonio anualmente sin agotarlo. Para 40 000 € de gastos anuales, necesita 1 millón € en activos (40 000 ÷ 0,04 = 1 000 000).

Necesita: Activos actuales, ingreso neto mensual, gastos mensuales, tasa de ahorro mensual, rendimiento anual esperado (por ejemplo, 7% para ETF de acciones) y tasa de inflación (históricamente ~2-3%). Opcionalmente ingrese su edad, edad de jubilación y edad FIRE deseada — la herramienta luego calcula cronogramas individuales y muestra varios escenarios.

Los cálculos se basan en modelos financieros probados como el estudio Trinity y la regla del 4%. La precisión depende de sus suposiciones — los rendimientos y la inflación fluctúan en la realidad. La herramienta ofrece escenarios conservadores (bajo rendimiento) y optimistas (alto rendimiento). Use valores realistas: 5-7% de rendimiento para carteras ETF diversificadas, 2-3% de inflación para planificación a largo plazo.

El número FIRE es el patrimonio que necesita para la independencia financiera. Cálculo: Gastos anuales × 25 (equivalente a la regla del 4%). Ejemplo: Con 30 000 € de gastos anuales, su número FIRE es 750 000 € (30 000 × 25). La herramienta muestra cuánto tiempo lleva alcanzar este número según su tasa de ahorro actual y rendimientos esperados.

Sí, la herramienta ofrece tres escenarios: Conservador (bajo rendimiento, alta inflación), Realista (valores moderados) y Optimista (alto rendimiento, baja inflación). También puede cambiar parámetros como la tasa de ahorro o los rendimientos e ver inmediatamente cómo esto afecta su fecha FIRE. Esto le ayuda a probar diferentes estrategias y evaluar riesgos.

Sí, la calculadora FIRE tiene completamente en cuenta la inflación. Todos los valores futuros se muestran ajustados por inflación (en poder adquisitivo actual). Esto significa: Si la herramienta dice que necesita 800 000 €, son 800 000 € en euros de hoy, no euros nominales en 20 años. La inflación se integra automáticamente en el desarrollo del patrimonio y los planes de retiro.

Una tasa de ahorro más alta acorta drásticamente su tiempo hasta la independencia financiera. Ejemplo: Con una tasa de ahorro de 1 000 € en lugar de 500 €, la duración a menudo no solo se reduce a la mitad, sino que se acorta aún más (efecto del interés compuesto). La herramienta muestra inmediatamente cuántos años gana con tasas de ahorro más altas. Incluso pequeños aumentos (100-200 € más) pueden ahorrar años.

Sí, la calculadora FIRE también es adecuada para Barista FIRE o Coast FIRE. Para Barista FIRE (trabajo a tiempo parcial para cubrir costos corrientes), reduzca los retiros anuales y planifique ingresos secundarios. Para Coast FIRE (el patrimonio crece hasta la jubilación), establezca su tasa de ahorro en 0 y calcule cuánto tiempo crece el patrimonio existente hasta la jubilación.

Sí, la calculadora FIRE es 100% gratuita sin costos ocultos ni registro. Todos los cálculos se realizan localmente en su navegador — no se envían ni almacenan datos en servidores. Su información financiera permanece privada y segura. La herramienta cumple con el RGPD y puede usarse ilimitadamente para probar diferentes estrategias financieras.

Valoración

5.0 de 5 estrellas · 4 calificaciones
Anuncio
Anuncio
Anuncio
} public function shortcode_handler($atts) { errorContainer.style.display = 'block'; } else { errorContainer.style.display = 'none'; } return isValid; } function showValidationErrors() { const errors = []; if (!document.getElementById('monthlyIncome').value || parseFloat(document.getElementById('monthlyIncome').value) <= 0) { errors.push(tStrings.error_income); } if (!document.getElementById('monthlyExpenses').value || parseFloat(document.getElementById('monthlyExpenses').value) <= 0) { errors.push(tStrings.error_expenses); } if (!document.getElementById('currentSavings').value || parseFloat(document.getElementById('currentSavings').value) < 0) { errors.push(tStrings.error_savings); } if (!document.getElementById('expectedReturn').value || parseFloat(document.getElementById('expectedReturn').value) <= 0) { errors.push(tStrings.error_return); } if (errors.length > 0 && validationErrorsContainer) { const errorsList = errors.map(error => `
  • ${error}
  • `).join(''); validationErrorsContainer.innerHTML = `
    ${tStrings.error_headline}
    `; validationErrorsContainer.style.display = 'block'; } form.classList.add('was-validated'); } function generateCountrySpecificRecommendations(landConfig, savingsRate, yearsToFire) { const recommendations = []; if (landConfig.taxRate > 0.4) { recommendations.push('Nutzen Sie steuerbegünstigte Sparformen wie betriebliche Altersvorsorge oder ETF-Sparpläne'); } if (landConfig.inflationRate > 0.03) { recommendations.push('Investieren Sie in inflationsgeschützte Anlagen wie Immobilien-REITs oder Rohstoff-ETFs'); } if (landConfig.healthcareCost > 0.15) { recommendations.push('Planen Sie einen erhöhten Gesundheitskostenpuffer und private Krankenversicherung ein'); } if (landConfig.costOfLivingIndex > 120) { recommendations.push('Erwägen Sie geografische Arbitrage - Sparen in teurem Land, leben in günstigerem Land'); } if (savingsRate < 20) { recommendations.push('Erhöhen Sie Ihre Sparrate auf mindestens 20% für eine realistische FIRE-Strategie'); } if (yearsToFire > 30) { recommendations.push('Optimieren Sie Ihre Ausgaben oder erhöhen Sie Ihr Einkommen für einen schnelleren FIRE-Weg'); } if (landConfig.safeWithdrawalRate < 0.035) { recommendations.push('In diesem Land wird eine konservativere Entnahmestrategie empfohlen'); } return recommendations; } function generateAdvancedRecommendations(config) { const { landConfig, familyConfig, housingConfig, employmentConfig, careerConfig, riskConfig, savingsRate, yearsToFire, fireType, age, familyStatus, housingStatus } = config; const recommendations = []; // Länderspezifische Empfehlungen if (landConfig.taxRate > 0.4) { recommendations.push('Nutzen Sie steuerbegünstigte Sparformen wie betriebliche Altersvorsorge oder ETF-Sparpläne'); } if (landConfig.inflationRate > 0.03) { recommendations.push('Investieren Sie in inflationsgeschützte Anlagen wie Immobilien-REITs oder Rohstoff-ETFs'); } if (landConfig.healthcareCost > 0.15) { recommendations.push('Planen Sie einen erhöhten Gesundheitskostenpuffer und private Krankenversicherung ein'); } // FIRE-Typ spezifische Empfehlungen if (fireType === 'leanfire') { recommendations.push('LeanFIRE erfordert konsequente Ausgabenkontrolle - erwägen Sie geografische Arbitrage'); } else if (fireType === 'fatfire') { recommendations.push('FatFIRE benötigt höhere Einkommen oder längere Sparzeit - fokussieren Sie auf Einkommenssteigerung'); } else if (fireType === 'baristafire') { recommendations.push('BaristaFIRE ermöglicht frühere Teilzeit-Arbeit - planen Sie Übergangseinkommenquellen'); } // Familienstatus-spezifische Empfehlungen if (familyStatus.includes('family') || familyStatus === 'single_parent') { recommendations.push('Mit Kindern steigen die Ausgaben - berücksichtigen Sie Bildungskosten und längere Sparzeit'); recommendations.push('Sichern Sie Ihre Familie durch ausreichende Lebens- und Berufsunfähigkeitsversicherung ab'); } if (familyStatus === 'couple') { recommendations.push('Als Paar können Sie Dual-Income-Strategien und steuerliche Vorteile nutzen'); } // Wohnsituation-spezifische Empfehlungen if (housingStatus === 'renting') { recommendations.push('Als Mieter sollten Sie Immobilien-Investments für Diversifikation erwägen'); } else if (housingStatus === 'owned_with_mortgage') { recommendations.push('Erwägen Sie eine Balance zwischen Hypotheken-Tilgung und Investment-Aufbau'); } else if (housingStatus === 'owned_without_mortgage') { recommendations.push('Ohne Hypothek haben Sie mehr finanziellen Spielraum für Investments'); } // Beschäftigungstyp-spezifische Empfehlungen if (employmentConfig.incomeStability < 1.0) { recommendations.push('Bei unsicherem Einkommen bauen Sie einen größeren Notfallpuffer auf (6-12 Monate Ausgaben)'); } if (employmentConfig.pensionFactor > 1.2) { recommendations.push('Als Selbstständiger müssen Sie Ihre Rente komplett selbst finanzieren - erhöhen Sie die Sparrate'); } // Allgemeine Sparraten-Empfehlungen if (savingsRate < 20) { recommendations.push('Erhöhen Sie Ihre Sparrate auf mindestens 20% für eine realistische FIRE-Strategie'); } else if (savingsRate > 50) { recommendations.push('Ihre hohe Sparrate ist vorbildlich - achten Sie auf eine ausgewogene Work-Life-Balance'); } // Alter-spezifische Empfehlungen if (age < 25) { recommendations.push('Sie haben Zeit auf Ihrer Seite - nutzen Sie den Zinseszinseffekt mit langfristigen Investments'); } else if (age > 45) { recommendations.push('Später Start erfordert höhere Sparraten oder realistischere FIRE-Ziele'); } // Zeitrahmen-spezifische Empfehlungen if (yearsToFire > 30) { recommendations.push('Optimieren Sie Ihre Ausgaben oder erhöhen Sie Ihr Einkommen für einen schnelleren FIRE-Weg'); } else if (yearsToFire < 10) { recommendations.push('Sie sind auf einem sehr guten Weg - bleiben Sie konsequent bei Ihrer Strategie'); } return recommendations; } // PDF Export Funktion - Erweitert mit umfassenden Details window.exportFireToPDF = function() { console.log('📄 FIRE PDF Export gestartet...'); try { if (typeof window.jspdf === 'undefined' && typeof window.jsPDF === 'undefined') { alert('PDF-Bibliothek nicht verfügbar. Bitte versuchen Sie es später erneut.'); return; } const jsPDFInstance = window.jspdf || window.jsPDF; const doc = new jsPDFInstance.jsPDF({orientation:'p',unit:'pt',format:'a4'}); const pageWidth = doc.internal.pageSize.getWidth(); const pageHeight = doc.internal.pageSize.getHeight(); const margin = 40; let y = margin + 20; const lineHeight = 16; const sectionSpacing = 25; const primary = [30,90,160]; const secondary = [220,53,69]; const success = [40,167,69]; const grayText = [70,70,70]; const lightGray = [150,150,150]; // Aktuelle Daten für PDF sammeln const formData = { monthlyIncome: parseFloat(document.getElementById('monthlyIncome').value) || 0, monthlyExpenses: parseFloat(document.getElementById('monthlyExpenses').value) || 0, currentSavings: parseFloat(document.getElementById('currentSavings').value) || 0, expectedReturn: parseFloat(document.getElementById('expectedReturn').value) || 0, country: document.getElementById('country').value || '', age: parseInt(document.getElementById('age').value) || 0, currency: document.getElementById('currency').value || 'EUR', familyStatus: document.getElementById('familyStatus').value || '', housingStatus: document.getElementById('housingStatus').value || '', employmentType: document.getElementById('employmentType').value || '', fireType: document.getElementById('fireType').value || '', riskTolerance: document.getElementById('riskTolerance').value || '', retirementAge: parseInt(document.getElementById('retirementAge').value) || null, savingsGoal: parseFloat(document.getElementById('savingsGoal').value) || 25 }; // Berechnungen für PDF const monthlySavings = formData.monthlyIncome - formData.monthlyExpenses; const annualSavings = monthlySavings * 12; const savingsRate = formData.monthlyIncome > 0 ? (monthlySavings / formData.monthlyIncome) * 100 : 0; const targetAmount = formData.monthlyExpenses * 12 * formData.savingsGoal; // Funktion für neue Seite function addNewPage() { doc.addPage(); y = margin + 20; } // Funktion für Seitenumbruch prüfen function checkPageBreak(neededSpace) { if (y + neededSpace > pageHeight - margin) { addNewPage(); } } // Funktion für Überschriften function addHeading(text, level = 1) { checkPageBreak(30); // Abstand vor Überschrift (außer erste) if (y > margin + 20) { y += level === 1 ? 15 : 10; } doc.setFont('helvetica','bold'); doc.setFontSize(level === 1 ? 18 : 14); doc.setTextColor(primary[0],primary[1],primary[2]); doc.text(text, margin, y); y += level === 1 ? 25 : 20; } // Funktion für normalen Text function addText(text, color = grayText, size = 11) { checkPageBreak(lineHeight + 5); doc.setFont('helvetica','normal'); doc.setFontSize(size); doc.setTextColor(color[0], color[1], color[2]); const lines = doc.splitTextToSize(text, pageWidth - 2*margin); doc.text(lines, margin, y); y += lines.length * lineHeight + 5; } // Funktion für Werte-Paare function addValuePair(label, value, color = grayText) { checkPageBreak(lineHeight + 5); doc.setFont('helvetica','bold'); doc.setFontSize(11); doc.setTextColor(grayText[0], grayText[1], grayText[2]); doc.text(label + ':', margin, y); doc.setFont('helvetica','normal'); doc.setTextColor(color[0], color[1], color[2]); // Sicherstellen, dass value ein String ist const valueStr = typeof value === 'string' ? value : String(value); doc.text(valueStr, margin + 180, y); y += lineHeight + 3; } // Funktion für Formatierung function formatCurrency(amount) { return formatInternationalCurrency(amount, getCurrencyByBrowserLanguage(), true); } function formatPercent(value) { if (isNaN(value) || value === null || value === undefined) return '0%'; return (value * 100).toFixed(1) + '%'; } function formatNumber(value) { if (isNaN(value) || value === null || value === undefined) return '0'; return String(value); } // === PDF INHALT BEGINNT === // Header mit Logo-Bereich doc.setFont('helvetica','bold'); doc.setFontSize(24); doc.setTextColor(primary[0],primary[1],primary[2]); doc.text('FIRE-Berechnung', margin, y); y += 20; doc.setFont('helvetica','normal'); doc.setFontSize(12); doc.setTextColor(grayText[0],grayText[1],grayText[2]); doc.text('Financial Independence Retire Early - Persoenliche Analyse', margin, y); y += 12; // Datum und Quelle doc.setFont('helvetica','normal'); doc.setFontSize(10); doc.setTextColor(lightGray[0], lightGray[1], lightGray[2]); doc.text('Erstellt am: ' + new Date().toLocaleDateString('de-DE', { year: 'numeric', month: 'long', day: 'numeric', hour: '2-digit', minute: '2-digit' }), margin, y); y += 10; doc.setFont('helvetica','italic'); doc.setFontSize(9); doc.text('Berechnung von Toolkitdaily.com - Ihr Toolkit fuer Finanzrechner', margin, y); y += sectionSpacing; // Trennlinie doc.setDrawColor(lightGray[0], lightGray[1], lightGray[2]); doc.setLineWidth(1); doc.line(margin, y, pageWidth - margin, y); y += 20; // 1. ZUSAMMENFASSUNG addHeading('ZUSAMMENFASSUNG IHRER FIRE-ZIELE'); const fireResult = document.querySelector('.result-primary h3'); if (fireResult) { doc.setFont('helvetica','bold'); doc.setFontSize(16); doc.setTextColor(success[0], success[1], success[2]); checkPageBreak(25); const resultText = fireResult.textContent.trim().replace(/[^\x00-\x7F]/g, ""); doc.text('ZIEL: ' + resultText, margin, y); y += 25; } // Wichtige Kennzahlen addValuePair('Benoetigtes FIRE-Vermoegen', formatCurrency(targetAmount), primary); addValuePair('Aktueller Fortschritt', formatCurrency(formData.currentSavings), grayText); addValuePair('Noch zu sparen', formatCurrency(Math.max(0, targetAmount - formData.currentSavings)), secondary); addValuePair('Monatliche Sparrate', formatCurrency(monthlySavings), monthlySavings > 0 ? success : secondary); addValuePair('Sparquote', formatPercent(savingsRate / 100), savingsRate > 20 ? success : grayText); y += 10; // 2. PERSÖNLICHE ANGABEN addHeading('IHRE PERSOENLICHEN DATEN', 2); addValuePair('Alter', formatNumber(formData.age) + ' Jahre'); addValuePair('Land', formData.country.charAt(0).toUpperCase() + formData.country.slice(1)); addValuePair('Waehrung', formData.currency); addValuePair('Familienstatus', formData.familyStatus); addValuePair('Wohnsituation', formData.housingStatus); addValuePair('Beschaeftigungsart', formData.employmentType); addValuePair('FIRE-Strategie', formData.fireType.toUpperCase()); addValuePair('Risikobereitschaft', formData.riskTolerance); if (formData.retirementAge) { addValuePair('Gewuenschtes Rentenalter', formatNumber(formData.retirementAge) + ' Jahre'); } y += 10; // 3. FINANZIELLE SITUATION addHeading('IHRE FINANZIELLE SITUATION', 2); addValuePair('Monatliches Einkommen', formatCurrency(formData.monthlyIncome), success); addValuePair('Monatliche Ausgaben', formatCurrency(formData.monthlyExpenses), secondary); addValuePair('Monatliche Ersparnis', formatCurrency(monthlySavings), monthlySavings > 0 ? success : secondary); addValuePair('Jaehrliche Ersparnis', formatCurrency(annualSavings), monthlySavings > 0 ? success : secondary); addValuePair('Aktuelles Vermoegen', formatCurrency(formData.currentSavings)); addValuePair('Erwartete Rendite', formatNumber(formData.expectedReturn) + '% p.a.'); y += 10; // 4. DETAILIERTE BERECHNUNG addHeading('DETAILLIERTE BERECHNUNGSGRUNDLAGEN', 2); addText('Die FIRE-Berechnung basiert auf der wissenschaftlich fundierten 4%-Regel (Trinity-Studie). ' + 'Diese besagt, dass Sie bei einem Vermoegen von 25x Ihrer jaehrlichen Ausgaben dauerhaft ' + 'von den Ertraegen leben koennen, ohne das Kapital anzugreifen.'); addValuePair('Jaehrliche Ausgaben', formatCurrency(formData.monthlyExpenses * 12)); addValuePair('FIRE-Multiplikator', formatNumber(formData.savingsGoal) + 'x'); addValuePair('Zielvermoegen (Basis)', formatCurrency(formData.monthlyExpenses * 12 * formData.savingsGoal)); // Länderspezifische Anpassungen (falls verfügbar) if (typeof countryConfig !== 'undefined' && countryConfig[formData.country]) { const countryData = countryConfig[formData.country]; y += 10; addText('Laenderspezifische Anpassungen fuer ' + formData.country.charAt(0).toUpperCase() + formData.country.slice(1) + ':'); addValuePair('Durchschn. Steuersatz', formatPercent(countryData.taxRate)); addValuePair('Inflationsrate', formatPercent(countryData.inflationRate)); addValuePair('Lebenshaltungskosten-Index', formatNumber(countryData.costOfLivingIndex)); addValuePair('Gesundheitskosten-Anteil', formatPercent(countryData.healthcareCost)); addValuePair('Safe Withdrawal Rate', formatPercent(countryData.safeWithdrawalRate)); } // 5. ZEITBERECHNUNG checkPageBreak(100); addHeading('ZEITPLAN BIS ZUR FINANZIELLEN UNABHAENGIGKEIT', 2); if (monthlySavings > 0) { const monthsToFire = Math.log((targetAmount * (formData.expectedReturn/100/12)) / monthlySavings + 1) / Math.log(1 + formData.expectedReturn/100/12); const yearsToFire = monthsToFire / 12; const targetYear = new Date().getFullYear() + Math.ceil(yearsToFire); addValuePair('Zeit bis FIRE', formatNumber(Math.ceil(yearsToFire)) + ' Jahre (' + formatNumber(Math.ceil(monthsToFire)) + ' Monate)'); addValuePair('Voraussichtliches FIRE-Jahr', formatNumber(targetYear)); addValuePair('Ihr Alter bei FIRE', formatNumber(formData.age + Math.ceil(yearsToFire)) + ' Jahre'); // Meilensteine y += 10; addText('Wichtige Meilensteine auf Ihrem FIRE-Weg:'); const milestones = [0.25, 0.5, 0.75, 1.0]; milestones.forEach(milestone => { const milestoneAmount = targetAmount * milestone; const currentProgress = formData.currentSavings / targetAmount; if (milestone > currentProgress) { const monthsToMilestone = Math.log((milestoneAmount * (formData.expectedReturn/100/12)) / monthlySavings + 1) / Math.log(1 + formData.expectedReturn/100/12); const yearsToMilestone = monthsToMilestone / 12; const milestoneYear = new Date().getFullYear() + Math.ceil(yearsToMilestone); addValuePair( `${formatNumber(milestone * 100)}% erreicht (${formatCurrency(milestoneAmount)})`, `${formatNumber(milestoneYear)} (in ${formatNumber(Math.ceil(yearsToMilestone))} Jahren)` ); } }); } else { addText('WARNUNG: Mit aktuellen Ausgaben hoeher als Einnahmen ist FIRE nicht erreichbar. ' + 'Reduzieren Sie Ihre Ausgaben oder erhoehen Sie Ihr Einkommen.', secondary); } // 6. OPTIMIERUNGSEMPFEHLUNGEN checkPageBreak(150); addHeading('EMPFEHLUNGEN ZUR OPTIMIERUNG', 2); const recommendations = []; if (savingsRate < 10) { recommendations.push('NIEDRIGE SPARQUOTE: Versuchen Sie, mindestens 10-20% zu sparen.'); } else if (savingsRate < 20) { recommendations.push('VERBESSERUNG: Erhoehen Sie Ihre Sparquote auf mindestens 20% fuer schnelleren FIRE-Erfolg.'); } else if (savingsRate >= 50) { recommendations.push('HERVORRAGEND: Ihre Sparquote ist ausgezeichnet! Achten Sie auf Work-Life-Balance.'); } if (formData.expectedReturn < 4) { recommendations.push('RENDITE: Pruefen Sie risikoreichere Anlagen fuer hoehere Renditen (ETFs, Aktien).'); } else if (formData.expectedReturn > 10) { recommendations.push('WARNUNG: Ihre Rendite-Erwartung ist sehr optimistisch. Seien Sie konservativ.'); } if (formData.familyStatus.includes('family')) { recommendations.push('FAMILIE: Als Familie planen Sie zusaetzlich fuer Bildungskosten und hoehere Ausgaben.'); } if (formData.employmentType === 'self_employed') { recommendations.push('SELBSTSTAENDIG: Als Selbststaendiger bauen Sie einen groesseren Notfallpuffer auf (6-12 Monate).'); } if (formData.housingStatus === 'renting') { recommendations.push('MIETER: Als Mieter koennen Immobilien-Investments zur Diversifikation sinnvoll sein.'); } recommendations.push('BILDUNG: Bilden Sie sich kontinuierlich weiter: Buecher, Podcasts, Finanzblogs.'); recommendations.push('REVIEW: Ueberpruefen Sie Ihre FIRE-Strategie jaehrlich und passen Sie sie an.'); recommendations.push('DIVERSIFIKATION: Achten Sie auf Diversifikation: Nicht alles in eine Anlageklasse.'); recommendations.forEach(rec => { addText('• ' + rec); }); // 7. WICHTIGE HINWEISE checkPageBreak(100); addHeading('WICHTIGE HINWEISE UND DISCLAIMER', 2); addText('Diese Berechnung dient nur zur Orientierung und ersetzt keine professionelle Finanzberatung. ' + 'Folgende Faktoren sollten zusaetzlich beruecksichtigt werden:'); const disclaimers = [ 'Inflation kann Ihre Kaufkraft ueber die Jahre verringern', 'Steuern auf Kapitalertraege variieren je nach Land und Anlageart', 'Marktkrisen koennen Ihre Anlagen zeitweise stark beeintraechtigen', 'Gesundheitskosten koennen im Alter deutlich steigen', 'Lebenserwartung und Gesundheit sind individuelle Faktoren', 'Politische und wirtschaftliche Veraenderungen koennen Einfluss haben', 'Die historische 4%-Regel gilt nicht fuer alle Marktphasen', 'Diversifikation ueber verschiedene Anlageklassen ist wichtig' ]; disclaimers.forEach(disclaimer => { addText('• ' + disclaimer); }); // Footer auf jeder Seite function addFooter() { const totalPages = doc.internal.getNumberOfPages(); for (let i = 1; i <= totalPages; i++) { doc.setPage(i); doc.setFont('helvetica','italic'); doc.setFontSize(8); doc.setTextColor(lightGray[0], lightGray[1], lightGray[2]); doc.text('FIRE-Berechnung erstellt von Toolkitdaily.com', margin, pageHeight - 20); doc.text('Seite ' + formatNumber(i) + ' von ' + formatNumber(totalPages), pageWidth - margin - 60, pageHeight - 20); } } addFooter(); // PDF speichern const fileName = `FIRE-Berechnung_${formData.country}_${new Date().toISOString().split('T')[0]}.pdf`; doc.save(fileName); console.log('PDF erfolgreich erstellt:', fileName); } catch(err) { console.error('PDF Export Fehler:', err); alert('Fehler beim PDF-Export: ' + err.message); } }; // Link teilen Funktion - ohne Popup, zeigt Status direkt am Button window.shareFireResults = function() { console.log('🔗 FIRE Link teilen...'); const shareButton = document.getElementById('shareButton'); const originalText = shareButton.innerHTML; try { shareButton.innerHTML = ' Erstelle Link...'; shareButton.disabled = true; const formData = { monthlyIncome: document.getElementById('monthlyIncome').value, monthlyExpenses: document.getElementById('monthlyExpenses').value, currentSavings: document.getElementById('currentSavings').value, expectedReturn: document.getElementById('expectedReturn').value, country: document.getElementById('country').value, age: document.getElementById('age').value, currency: document.getElementById('currency').value, familyStatus: document.getElementById('familyStatus').value, housingStatus: document.getElementById('housingStatus').value, employmentType: document.getElementById('employmentType').value, fireType: document.getElementById('fireType').value, riskTolerance: document.getElementById('riskTolerance').value, retirementAge: document.getElementById('retirementAge').value, savingsGoal: document.getElementById('savingsGoal').value }; const params = new URLSearchParams(formData); const shareUrl = window.location.origin + window.location.pathname + '?' + params.toString(); if (navigator.clipboard) { navigator.clipboard.writeText(shareUrl).then(() => { shareButton.innerHTML = ' Link kopiert!'; shareButton.classList.remove('btn-info'); shareButton.classList.add('btn-success'); setTimeout(() => { shareButton.innerHTML = originalText; shareButton.classList.remove('btn-success'); shareButton.classList.add('btn-info'); shareButton.disabled = false; }, 3000); }).catch(() => { fallbackCopyToClipboard(shareUrl, shareButton, originalText); }); } else { fallbackCopyToClipboard(shareUrl, shareButton, originalText); } } catch (error) { console.error('❌ Link teilen Fehler:', error); shareButton.innerHTML = ' Fehler!'; shareButton.classList.remove('btn-info'); shareButton.classList.add('btn-danger'); setTimeout(() => { shareButton.innerHTML = originalText; shareButton.classList.remove('btn-danger'); shareButton.classList.add('btn-info'); shareButton.disabled = false; }, 3000); } }; // Fallback für ältere Browser - mit Button-Feedback function fallbackCopyToClipboard(text, button, originalText) { const textArea = document.createElement('textarea'); textArea.value = text; textArea.style.position = 'fixed'; textArea.style.left = '-999999px'; document.body.appendChild(textArea); textArea.focus(); textArea.select(); try { const successful = document.execCommand('copy'); if (successful) { button.innerHTML = ' Link kopiert!'; button.classList.remove('btn-info'); button.classList.add('btn-success'); } else { throw new Error('Copy command failed'); } } catch (error) { console.error('❌ Fallback Copy Fehler:', error); button.innerHTML = ' Fehler beim Kopieren'; button.classList.remove('btn-info'); button.classList.add('btn-warning'); } document.body.removeChild(textArea); setTimeout(() => { button.innerHTML = originalText; button.classList.remove('btn-success', 'btn-warning'); button.classList.add('btn-info'); button.disabled = false; }, 3000); } // Neue Berechnung starten window.resetFireForm = function() { console.log('🔄 FIRE Formular zurücksetzen...'); const form = document.getElementById('fireForm'); if (form) { form.reset(); // Validierungsmarkierungen entfernen document.querySelectorAll('.is-invalid').forEach(el => { el.classList.remove('is-invalid'); }); // Fehlermeldungen ausblenden const errorContainer = document.getElementById('validationErrorsContainer'); if (errorContainer) { errorContainer.style.display = 'none'; } // Ergebnis-Container ausblenden const resultContainer = document.getElementById('resultContainer'); if (resultContainer) { resultContainer.style.display = 'none'; } // URL-Parameter entfernen const url = window.location.origin + window.location.pathname; window.history.replaceState({}, document.title, url); // Zum Formular scrollen document.getElementById('fireForm').scrollIntoView({ behavior: 'smooth' }); } console.log('✅ FIRE Formular zurückgesetzt'); }; function displayResults(results) { if (!resultContainer) return; const formatCurrency = (amount) => { return formatInternationalCurrency(amount, getCurrencyByBrowserLanguage(), true); }; const formatPercent = (value) => { return (value * 100).toFixed(1) + '%'; }; const formatYears = (years) => { if (years < 1) { return `${Math.ceil(years * 12)} Monate`; } return `${Math.floor(years)} Jahre und ${Math.ceil((years % 1) * 12)} Monate`; }; // Empfehlungen als HTML formatieren const recommendationsHtml = results.recommendations.length > 0 ? results.recommendations.map(rec => `
  • ${rec}
  • `).join('') : '
  • Ihre aktuelle Strategie ist gut ausbalanciert für dieses Land.
  • '; // Aktualisiere die Werte im existierenden HTML-Template document.getElementById('fire-result-value').textContent = `${results.yearsToFire > 0 ? formatYears(results.yearsToFire) : 'Bereits erreicht!'}`; document.getElementById('jahre-display').textContent = results.yearsToFire > 0 ? Math.round(results.yearsToFire) : '0'; document.getElementById('vermoegen-display').textContent = formatCurrency(results.fireNumber); document.getElementById('sparrate-display').textContent = formatCurrency(results.monthlySavings); // Deadline-Check aktualisieren const deadlineCheck = document.getElementById('deadline-check'); const deadlineMessage = document.getElementById('deadline-message'); if (results.yearsToFire <= 0) { deadlineCheck.className = 'alert alert-success'; deadlineMessage.textContent = 'Gratulation! Sie haben bereits die finanzielle Unabhängigkeit erreicht!'; deadlineCheck.style.display = 'block'; } else if (results.yearsToFire > 50) { deadlineCheck.className = 'alert alert-warning'; deadlineMessage.textContent = `Mit der aktuellen Strategie dauert es ${Math.round(results.yearsToFire)} Jahre. Erhöhen Sie Ihre Sparrate oder überprüfen Sie Ihre Ausgaben.`; deadlineCheck.style.display = 'block'; } else { deadlineCheck.style.display = 'none'; } // Detaillierte FIRE-Analyse Tabelle befüllen const analysisTable = document.getElementById('fire-analysis-table'); analysisTable.innerHTML = `FIRE-Zahl (${results.savingsGoal.toFixed(1)}x Ausgaben)${formatCurrency(results.fireNumber)}Angepasst für ${results.selectedCountry}Aktueller Fortschritt${results.currentFireProgress.toFixed(1)}% ${results.currentFireProgress > 50 ? 'Gut' : results.currentFireProgress > 20 ? 'Mittel' : 'Niedrig'} Monatliches FIRE-Sparziel${formatCurrency(results.monthlyFireTarget)} ${results.monthlySavings >= results.monthlyFireTarget ? 'Erreicht' : 'Untererfüllt'} Sparquote${results.savingsRate.toFixed(1)}% ${results.savingsRate >= 50 ? 'Exzellent' : results.savingsRate >= 20 ? 'Gut' : 'Verbesserungsbedarf'} Safe Withdrawal Rate${formatPercent(results.countryConfig.safeWithdrawalRate)}Länderspezifisch `; // Optimierungsvorschläge befüllen const fireTips = document.getElementById('fire-tips'); const tipsList = results.recommendations.length > 0 ? results.recommendations : [ 'Ihre aktuelle Strategie ist gut ausbalanciert.', 'Überprüfen Sie regelmäßig Ihre Ausgaben.', 'Diversifizieren Sie Ihre Investitionen.', 'Berücksichtigen Sie Inflation in Ihrer Planung.', 'Bauen Sie einen Notfallfonds auf.' ]; fireTips.innerHTML = tipsList.map(tip => `
    ${tip}
    ` ).join(''); // FIRE-Interpretation aktualisieren const interpretation = document.getElementById('fire-interpretation'); let interpretationText = ''; let alertClass = 'alert-secondary'; if (results.yearsToFire <= 0) { interpretationText = 'Exzellent! Sie haben die finanzielle Unabhängigkeit bereits erreicht. Fokussieren Sie sich nun auf den Erhalt und das Management Ihres Vermögens.'; alertClass = 'alert-success'; } else if (results.yearsToFire <= 15) { interpretationText = `Sehr gut! Mit ${Math.round(results.yearsToFire)} Jahren bis zur FIRE sind Sie auf einem ausgezeichneten Weg. Ihre Sparquote von ${results.savingsRate.toFixed(1)}% ist beeindruckend.`; alertClass = 'alert-success'; } else if (results.yearsToFire <= 25) { interpretationText = `Gut! ${Math.round(results.yearsToFire)} Jahre bis zur FIRE ist ein realistisches Ziel. Überprüfen Sie regelmäßig Ihre Strategie und passen Sie sie bei Bedarf an.`; alertClass = 'alert-info'; } else if (results.yearsToFire <= 40) { interpretationText = `Solide Basis! Mit ${Math.round(results.yearsToFire)} Jahren haben Sie noch Zeit für Optimierungen. Erhöhen Sie schrittweise Ihre Sparrate oder reduzieren Sie Ausgaben.`; alertClass = 'alert-warning'; } else { interpretationText = `Herausforderung! ${Math.round(results.yearsToFire)} Jahre sind sehr lang. Überdenken Sie grundlegend Ihre Einnahmen- und Ausgabenstruktur. Professionelle Beratung kann hilfreich sein.`; alertClass = 'alert-danger'; } interpretation.className = `alert ${alertClass}`; interpretation.textContent = interpretationText; // Eingaben-Übersicht aktualisieren document.getElementById('einkommen-result').textContent = formatCurrency(parseFloat(document.getElementById('monthlyIncome').value) || 0); document.getElementById('ausgaben-result').textContent = formatCurrency(parseFloat(document.getElementById('monthlyExpenses').value) || 0); document.getElementById('ersparnisse-result').textContent = formatCurrency(parseFloat(document.getElementById('currentSavings').value) || 0); document.getElementById('rendite-result').textContent = (parseFloat(document.getElementById('expectedReturn').value) || 0) + '%'; document.getElementById('fire-typ-result').textContent = document.querySelector('select[name="fireType"] option:checked').textContent || '-'; document.getElementById('land-result').textContent = results.selectedCountry.charAt(0).toUpperCase() + results.selectedCountry.slice(1); document.getElementById('alter-result').textContent = (parseFloat(document.getElementById('currentAge').value) || 0) + ' Jahre'; document.getElementById('sparquote-result').textContent = results.savingsRate.toFixed(1) + '%'; resultContainer.style.display = 'block'; if (validationErrorsContainer) validationErrorsContainer.style.display = 'none'; } // Tooltips aktivieren if (typeof $ !== 'undefined' && $.fn.tooltip) { $('[data-toggle="tooltip"]').tooltip(); } });