{"id":3521,"date":"2025-06-24T13:59:47","date_gmt":"2025-06-24T10:59:47","guid":{"rendered":"https:\/\/baytutumlu.com\/?p=3521"},"modified":"2025-06-24T14:09:47","modified_gmt":"2025-06-24T11:09:47","slug":"gelismis-finansal-ozgurluk-fire-hesaplayicisi","status":"publish","type":"post","link":"https:\/\/baytutumlu.com\/index.php\/2025\/06\/24\/gelismis-finansal-ozgurluk-fire-hesaplayicisi\/","title":{"rendered":"Geli\u015fmi\u015f Finansal \u00d6zg\u00fcrl\u00fck (FIRE) Hesaplay\u0131c\u0131s\u0131"},"content":{"rendered":"\n<p>Ne zaman emekli olabilirim ve emekli olmadan \u00f6nce ne kadar s\u00fcre birikim yapmam gerekir?<\/p>\n\n\n\n<p>\u0130\u015fte kilit soru bu! Bu interaktif FIRE hesaplay\u0131c\u0131s\u0131n\u0131, kendi verilerinizi girerek tasarruf oran\u0131 ile emeklilik harcamalar\u0131na ba\u011fl\u0131 olarak ne kadar s\u00fcrede finansal \u00f6zg\u00fcrl\u00fc\u011fe ula\u015fabilece\u011finizi hesaplaman\u0131za yard\u0131mc\u0131 olmas\u0131 i\u00e7in olu\u015fturdum.<\/p>\n\n\n\n<p>Hem standart oran hem de Monte Carlo sim\u00fclasyonu metodunu kullanarak hesaplama yapabilirsiniz. \u015eimdiden kolay gelsin!<\/p>\n\n\n\n<!DOCTYPE html>\n<html lang=\"tr\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Geli\u015fmi\u015f FIRE Hesaplay\u0131c\u0131s\u0131<\/title>\n    <!-- Tailwind CSS CDN -->\n    <script src=\"https:\/\/cdn.tailwindcss.com\"><\/script>\n    <!-- Chart.js CDN -->\n    <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js@3.9.1\"><\/script>\n    <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/chartjs-adapter-date-fns\/dist\/chartjs-adapter-date-fns.bundle.min.js\"><\/script>\n    <style>\n        \/* Gerekli olabilecek ek stiller *\/\n        .form-input {\n            @apply w-full px-3 py-2 text-gray-700 border rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 bg-gray-100 transition-colors duration-200;\n        }\n        .form-input:focus {\n            @apply bg-white;\n        }\n        .form-label {\n            @apply block text-sm font-medium text-gray-600 mb-1;\n        }\n    <\/style>\n<\/head>\n<body class=\"bg-gray-200 p-4 sm:p-6 md:p-8\">\n\n<div id=\"fire-calculator-container\" class=\"max-w-7xl mx-auto bg-white p-6 rounded-2xl shadow-xl border border-gray-200\">\n    <h1 class=\"text-3xl font-bold text-center text-gray-800 mb-8\">Geli\u015fmi\u015f Finansal \u00d6zg\u00fcrl\u00fck (FIRE) Hesaplay\u0131c\u0131s\u0131<\/h1>\n\n    <!-- Girdi Paneli -->\n    <div class=\"bg-white p-6 rounded-xl shadow-lg mb-8\">\n        <div class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6\">\n            \n            <!-- Finansal Bilgiler S\u00fctunu -->\n            <div class=\"space-y-4\">\n                <h2 class=\"text-lg font-semibold text-gray-700 border-b pb-2\">Finansal Bilgiler<\/h2>\n                <div>\n                    <label for=\"currentAge\" class=\"form-label\">Mevcut Ya\u015f<\/label>\n                    <input type=\"number\" id=\"currentAge\" class=\"form-input\" value=\"30\">\n                <\/div>\n                <div>\n                    <label for=\"initialSavings\" class=\"form-label\">Ba\u015flang\u0131\u00e7 Birikimi ($)<\/label>\n                    <input type=\"number\" id=\"initialSavings\" class=\"form-input\" value=\"50000\">\n                <\/div>\n                <div>\n                    <label for=\"monthlyNetIncome\" class=\"form-label\">Ayl\u0131k Net Gelir ($)<\/label>\n                    <input type=\"number\" id=\"monthlyNetIncome\" class=\"form-input\" value=\"5000\">\n                <\/div>\n                <div>\n                    <label for=\"monthlyExpenses\" class=\"form-label\">Ayl\u0131k Harcama ($)<\/label>\n                    <input type=\"number\" id=\"monthlyExpenses\" class=\"form-input\" value=\"3000\">\n                <\/div>\n                 <div>\n                    <label for=\"realIncomeGrowth\" class=\"form-label\">Y\u0131ll\u0131k Reel Gelir Art\u0131\u015f\u0131 (%)<\/label>\n                    <input type=\"number\" id=\"realIncomeGrowth\" class=\"form-input\" value=\"2\">\n                <\/div>\n            <\/div>\n\n            <!-- Emeklilik Hedefleri S\u00fctunu -->\n            <div class=\"space-y-4\">\n                <h2 class=\"text-lg font-semibold text-gray-700 border-b pb-2\">Emeklilik Hedefleri<\/h2>\n                <div>\n                    <label for=\"retirementSpending\" class=\"form-label\">Emeklilikte Ayl\u0131k Harcama ($)<\/label>\n                    <input type=\"number\" id=\"retirementSpending\" class=\"form-input\" value=\"4000\">\n                <\/div>\n                <div>\n                    <label for=\"otherRetirementIncome\" class=\"form-label\">Emeklilikte Di\u011fer Ayl\u0131k Gelirler ($)<\/label>\n                    <input type=\"number\" id=\"otherRetirementIncome\" class=\"form-input\" value=\"0\">\n                <\/div>\n                <div>\n                    <label for=\"otherIncomeStartAge\" class=\"form-label\">Ek Gelir Ba\u015flang\u0131\u00e7 Ya\u015f\u0131<\/label>\n                    <input type=\"number\" id=\"otherIncomeStartAge\" class=\"form-input\" value=\"65\">\n                <\/div>\n                <div>\n                    <label for=\"lifeExpectancy\" class=\"form-label\">Tahmini Ya\u015fam Beklentisi<\/label>\n                    <input type=\"number\" id=\"lifeExpectancy\" class=\"form-input\" value=\"90\">\n                <\/div>\n                <div>\n                    <label for=\"swr\" class=\"form-label\">G\u00fcvenli \u00c7ekim Oran\u0131 (%)<\/label>\n                    <input type=\"number\" id=\"swr\" class=\"form-input\" value=\"4\">\n                <\/div>\n            <\/div>\n            \n            <!-- Portf\u00f6y ve Ekonomik Varsay\u0131mlar S\u00fctunu -->\n            <div class=\"space-y-4\">\n                 <h2 class=\"text-lg font-semibold text-gray-700 border-b pb-2\">Portf\u00f6y Da\u011f\u0131l\u0131m\u0131 (%)<\/h2>\n                 <div>\n                    <label for=\"stockAllocation\" class=\"form-label\">Hisse Senedi<\/label>\n                    <input type=\"number\" id=\"stockAllocation\" class=\"form-input\" value=\"60\">\n                <\/div>\n                <div>\n                    <label for=\"bondAllocation\" class=\"form-label\">Tahvil<\/label>\n                    <input type=\"number\" id=\"bondAllocation\" class=\"form-input\" value=\"20\">\n                <\/div>\n                <div>\n                    <label for=\"goldAllocation\" class=\"form-label\">Alt\u0131n<\/label>\n                    <input type=\"number\" id=\"goldAllocation\" class=\"form-input\" value=\"15\">\n                <\/div>\n                <div>\n                    <label for=\"cashAllocation\" class=\"form-label\">Nakit<\/label>\n                    <input type=\"number\" id=\"cashAllocation\" class=\"form-input\" value=\"5\">\n                <\/div>\n                <div>\n                    <label for=\"inflation\" class=\"form-label\">Y\u0131ll\u0131k Enflasyon Oran\u0131 (%)<\/label>\n                    <input type=\"number\" id=\"inflation\" class=\"form-input\" value=\"3\">\n                <\/div>\n            <\/div>\n\n            <!-- Sim\u00fclasyon Ayarlar\u0131 S\u00fctunu -->\n            <div class=\"space-y-4\">\n                <h2 class=\"text-lg font-semibold text-gray-700 border-b pb-2\">Ekonomik Varsay\u0131mlar<\/h2>\n                <div>\n                    <label class=\"form-label\">Projeksiyon Metodu<\/label>\n                    <div class=\"flex items-center space-x-4 mt-2\">\n                        <label><input type=\"radio\" name=\"projectionMethod\" value=\"fixed\" checked> Sabit Oran<\/label>\n                        <label><input type=\"radio\" name=\"projectionMethod\" value=\"monte-carlo\"> Monte Carlo<\/label>\n                    <\/div>\n                <\/div>\n                \n                <div class=\"pt-4 mt-4 border-t\">\n                    <h3 class=\"text-md font-semibold text-gray-700 mb-2\">Beklenen Y\u0131ll\u0131k Getiriler<\/h3>\n                    <div id=\"asset-assumptions\" class=\"space-y-3\">\n                        <!-- Dinamik olarak doldurulacak -->\n                    <\/div>\n                <\/div>\n\n                <div id=\"monte-carlo-options\" class=\"space-y-4\" style=\"display: none;\">\n                    <div>\n                        <label for=\"simulationCount\" class=\"form-label\">Sim\u00fclasyon Say\u0131s\u0131<\/label>\n                        <input type=\"number\" id=\"simulationCount\" class=\"form-input\" value=\"1000\">\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n        \n        <div class=\"mt-8 text-center\">\n            <button id=\"calculateBtn\" class=\"bg-blue-600 hover:bg-blue-700 text-white font-bold py-3 px-10 rounded-lg shadow-md transition-transform transform hover:scale-105\">\n                Hesapla\n            <\/button>\n        <\/div>\n    <\/div>\n\n    <!-- Sonu\u00e7 ve Grafik Paneli -->\n    <div class=\"bg-white p-6 rounded-xl shadow-lg\">\n        <div id=\"loading-indicator\" class=\"text-center py-10\" style=\"display: none;\">\n            <p class=\"text-xl text-gray-600\">Sim\u00fclasyonlar \u00e7al\u0131\u015ft\u0131r\u0131l\u0131yor, l\u00fctfen bekleyin&#8230;<\/p>\n        <\/div>\n        <div id=\"results-container\" style=\"display: none;\">\n            <div id=\"results-summary\" class=\"mb-6 p-4 bg-blue-50 border border-blue-200 rounded-lg text-gray-700\"><\/div>\n            <div class=\"relative h-96\"> <!-- Grafik y\u00fcksekli\u011fini k\u0131s\u0131tlayan sarmalay\u0131c\u0131 -->\n                <canvas id=\"fireChart\"><\/canvas>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<script>\n\/\/ --- BA\u015eLANGI\u00c7: WORDPRESS UYUMLU \"\u0130NAT\u00c7I\" BA\u015eLATICI ---\nconst checkInterval = 100; \nconst timeout = 5000;\nlet elapsedTime = 0;\n\nconst stubbornInitializer = setInterval(() => {\n    const container = document.getElementById('fire-calculator-container');\n    elapsedTime += checkInterval;\n\n    if (container) {\n        clearInterval(stubbornInitializer);\n        initializeApp();\n    } else if (elapsedTime >= timeout) {\n        clearInterval(stubbornInitializer);\n        console.error(\"FIRE Hesaplay\u0131c\u0131: Gerekli HTML container ('fire-calculator-container') bulunamad\u0131.\");\n    }\n}, checkInterval);\n\/\/ --- SON: WORDPRESS UYUMLU \"\u0130NAT\u00c7I\" BA\u015eLATICI ---\n\nfunction initializeApp() {\n\n    \/\/ Varl\u0131k s\u0131n\u0131flar\u0131 ve varsay\u0131lan de\u011ferleri (Dolar bazl\u0131)\n    const assetClasses = {\n        stock: { label: 'Hisse Senedi', return: 9, stdDev: 18 },\n        bond: { label: 'Tahvil', return: 4, stdDev: 5 },\n        gold: { label: 'Alt\u0131n', return: 5, stdDev: 15 },\n        cash: { label: 'Nakit', return: 2, stdDev: 1 },\n    };\n\n    const assumptionsContainer = document.getElementById('asset-assumptions');\n    Object.keys(assetClasses).forEach(key => {\n        const asset = assetClasses[key];\n        const fieldset = document.createElement('div');\n        fieldset.innerHTML = `\n            <p class=\"font-medium text-sm text-gray-600\">${asset.label}<\/p>\n            <div class=\"flex space-x-2\">\n                <input type=\"number\" id=\"${key}Return\" class=\"form-input text-xs\" value=\"${asset.return}\" title=\"Ortalama Y\u0131ll\u0131k Getiri (%)\">\n                <input type=\"number\" id=\"${key}StdDev\" class=\"form-input text-xs std-dev-field\" value=\"${asset.stdDev}\" title=\"Standart Sapma (%)\">\n            <\/div>\n        `;\n        assumptionsContainer.appendChild(fieldset);\n    });\n    \n    \/\/ DOM Elementleri\n    const calculateBtn = document.getElementById('calculateBtn');\n    const methodRadios = document.querySelectorAll('input[name=\"projectionMethod\"]');\n    const monteCarloOptions = document.getElementById('monte-carlo-options');\n    const stdDevFields = document.querySelectorAll('.std-dev-field');\n    const resultsContainer = document.getElementById('results-container');\n    const resultsSummary = document.getElementById('results-summary');\n    const loadingIndicator = document.getElementById('loading-indicator');\n\n    let fireChart = null;\n\n    const toggleMethodOptions = () => {\n        const selectedMethod = document.querySelector('input[name=\"projectionMethod\"]:checked').value;\n        if (selectedMethod === 'monte-carlo') {\n            monteCarloOptions.style.display = 'block';\n            stdDevFields.forEach(f => f.style.display = 'block');\n        } else {\n            monteCarloOptions.style.display = 'none';\n            stdDevFields.forEach(f => f.style.display = 'none');\n        }\n    };\n\n    methodRadios.forEach(radio => radio.addEventListener('change', toggleMethodOptions));\n\n    calculateBtn.addEventListener('click', () => {\n        loadingIndicator.style.display = 'block';\n        resultsContainer.style.display = 'none';\n        \n        setTimeout(() => {\n            runSimulation();\n            loadingIndicator.style.display = 'none';\n            resultsContainer.style.display = 'block';\n        }, 50);\n    });\n\n    toggleMethodOptions();\n\n    function randomNormal(mean, stdDev) {\n        let u1 = Math.random();\n        let u2 = Math.random();\n        let z = Math.sqrt(-2.0 * Math.log(u1)) * Math.cos(2.0 * Math.PI * u2);\n        return z * stdDev + mean;\n    }\n\n    function getInputs() {\n        const inputs = {\n            currentAge: parseInt(document.getElementById('currentAge').value) || 30,\n            initialSavings: parseFloat(document.getElementById('initialSavings').value) || 0,\n            monthlyNetIncome: parseFloat(document.getElementById('monthlyNetIncome').value) || 0,\n            monthlyExpenses: parseFloat(document.getElementById('monthlyExpenses').value) || 0,\n            realIncomeGrowth: parseFloat(document.getElementById('realIncomeGrowth').value) \/ 100 || 0,\n            retirementSpending: parseFloat(document.getElementById('retirementSpending').value) || 0,\n            otherRetirementIncome: parseFloat(document.getElementById('otherRetirementIncome').value) || 0,\n            otherIncomeStartAge: parseInt(document.getElementById('otherIncomeStartAge').value) || 65,\n            lifeExpectancy: parseInt(document.getElementById('lifeExpectancy').value) || 90,\n            swr: parseFloat(document.getElementById('swr').value) \/ 100 || 0.04,\n            inflation: parseFloat(document.getElementById('inflation').value) \/ 100 || 0,\n            projectionMethod: document.querySelector('input[name=\"projectionMethod\"]:checked').value,\n            simulationCount: parseInt(document.getElementById('simulationCount').value) || 1000,\n            allocations: {\n                stock: parseFloat(document.getElementById('stockAllocation').value) \/ 100 || 0,\n                bond: parseFloat(document.getElementById('bondAllocation').value) \/ 100 || 0,\n                gold: parseFloat(document.getElementById('goldAllocation').value) \/ 100 || 0,\n                cash: parseFloat(document.getElementById('cashAllocation').value) \/ 100 || 0,\n            },\n            returns: {\n                stock: parseFloat(document.getElementById('stockReturn').value) \/ 100 || 0,\n                bond: parseFloat(document.getElementById('bondReturn').value) \/ 100 || 0,\n                gold: parseFloat(document.getElementById('goldReturn').value) \/ 100 || 0,\n                cash: parseFloat(document.getElementById('cashReturn').value) \/ 100 || 0,\n            },\n            stdDevs: {\n                stock: parseFloat(document.getElementById('stockStdDev').value) \/ 100 || 0,\n                bond: parseFloat(document.getElementById('bondStdDev').value) \/ 100 || 0,\n                gold: parseFloat(document.getElementById('goldStdDev').value) \/ 100 || 0,\n                cash: parseFloat(document.getElementById('cashStdDev').value) \/ 100 || 0,\n            }\n        };\n        const totalAllocation = Object.values(inputs.allocations).reduce((sum, val) => sum + val, 0);\n        if (totalAllocation > 0) {\n            for (const key in inputs.allocations) {\n                inputs.allocations[key] \/= totalAllocation;\n            }\n        }\n        return inputs;\n    }\n    \n    function runSimulation() {\n        const inputs = getInputs();\n        const fireTarget = (inputs.retirementSpending * 12) \/ inputs.swr;\n        \n        let labels = [];\n        for (let age = inputs.currentAge; age <= inputs.lifeExpectancy; age++) {\n            labels.push(age);\n        }\n\n        let results;\n        if (inputs.projectionMethod === 'fixed') {\n            results = runFixedRateProjection(inputs, fireTarget);\n        } else {\n            results = runMonteCarloProjection(inputs, fireTarget);\n        }\n        \n        updateChart(labels, results, fireTarget, inputs.projectionMethod);\n        updateSummary(results, inputs, fireTarget);\n    }\n\n    function runFixedRateProjection(inputs, fireTarget) {\n        let portfolioHistory = [];\n        let currentPortfolio = inputs.initialSavings;\n        let yearlyIncome = inputs.monthlyNetIncome * 12;\n        let yearlyExpenses = inputs.monthlyExpenses * 12;\n        let retirementAge = -1;\n\n        const weightedNominalReturn = (inputs.allocations.stock * inputs.returns.stock) +\n                                    (inputs.allocations.bond * inputs.returns.bond) +\n                                    (inputs.allocations.gold * inputs.returns.gold) +\n                                    (inputs.allocations.cash * inputs.returns.cash);\n        const weightedRealReturn = ((1 + weightedNominalReturn) \/ (1 + inputs.inflation)) - 1;\n\n        for (let age = inputs.currentAge; age <= inputs.lifeExpectancy; age++) {\n            if (currentPortfolio < 0) currentPortfolio = 0;\n            portfolioHistory.push(currentPortfolio);\n\n            let yearlyReturn = currentPortfolio * weightedRealReturn;\n            \n            if (currentPortfolio >= fireTarget) {\n                if (retirementAge === -1) retirementAge = age;\n                let yearlyWithdrawal = inputs.retirementSpending * 12;\n                let otherIncome = (age >= inputs.otherIncomeStartAge) ? (inputs.otherRetirementIncome * 12) : 0;\n                currentPortfolio += yearlyReturn - yearlyWithdrawal + otherIncome;\n            } else {\n                let yearlyContribution = yearlyIncome - yearlyExpenses;\n                currentPortfolio += yearlyReturn + yearlyContribution;\n                yearlyIncome *= (1 + inputs.realIncomeGrowth);\n            }\n        }\n\n        return {\n            median: portfolioHistory,\n            retirementAge: retirementAge\n        };\n    }\n\n    function runMonteCarloProjection(inputs, fireTarget) {\n        let allSimulations = [];\n        let retirementAges = [];\n\n        for (let i = 0; i < inputs.simulationCount; i++) {\n            let simPortfolioHistory = [];\n            let currentPortfolio = inputs.initialSavings;\n            let yearlyIncome = inputs.monthlyNetIncome * 12;\n            let yearlyExpenses = inputs.monthlyExpenses * 12;\n            let simRetirementAge = -1;\n\n            for (let age = inputs.currentAge; age <= inputs.lifeExpectancy; age++) {\n                if (currentPortfolio < 0) currentPortfolio = 0;\n                simPortfolioHistory.push(currentPortfolio);\n\n                const stockReturn = randomNormal(inputs.returns.stock, inputs.stdDevs.stock);\n                const bondReturn = randomNormal(inputs.returns.bond, inputs.stdDevs.bond);\n                const goldReturn = randomNormal(inputs.returns.gold, inputs.stdDevs.gold);\n                const cashReturn = randomNormal(inputs.returns.cash, inputs.stdDevs.cash);\n\n                const nominalReturn = (inputs.allocations.stock * stockReturn) +\n                                       (inputs.allocations.bond * bondReturn) +\n                                       (inputs.allocations.gold * goldReturn) +\n                                       (inputs.allocations.cash * cashReturn);\n\n                const realReturn = ((1 + nominalReturn) \/ (1 + inputs.inflation)) - 1;\n                let yearlyReturnAmount = currentPortfolio * realReturn;\n                \n                if (currentPortfolio >= fireTarget) {\n                    if (simRetirementAge === -1) simRetirementAge = age;\n                    let yearlyWithdrawal = inputs.retirementSpending * 12;\n                    let otherIncome = (age >= inputs.otherIncomeStartAge) ? (inputs.otherRetirementIncome * 12) : 0;\n                    currentPortfolio += yearlyReturnAmount - yearlyWithdrawal + otherIncome;\n                } else {\n                    let yearlyContribution = yearlyIncome - yearlyExpenses;\n                    currentPortfolio += yearlyReturnAmount + yearlyContribution;\n                    yearlyIncome *= (1 + inputs.realIncomeGrowth);\n                }\n            }\n            allSimulations.push(simPortfolioHistory);\n            if (simRetirementAge !== -1) retirementAges.push(simRetirementAge);\n        }\n\n        let percentiles = { p10: [], p25: [], p50: [], p75: [], p90: [] };\n        let years = allSimulations[0].length;\n\n        for (let year = 0; year < years; year++) {\n            let yearlyValues = allSimulations.map(sim => sim[year]).sort((a, b) => a - b);\n            percentiles.p10.push(yearlyValues[Math.floor(yearlyValues.length * 0.10)]);\n            percentiles.p25.push(yearlyValues[Math.floor(yearlyValues.length * 0.25)]);\n            percentiles.p50.push(yearlyValues[Math.floor(yearlyValues.length * 0.50)]);\n            percentiles.p75.push(yearlyValues[Math.floor(yearlyValues.length * 0.75)]);\n            percentiles.p90.push(yearlyValues[Math.floor(yearlyValues.length * 0.90)]);\n        }\n        \n        retirementAges.sort((a, b) => a - b);\n        const medianRetirementAge = retirementAges.length > 0 ? retirementAges[Math.floor(retirementAges.length * 0.5)] : -1;\n        \n        const successCount = allSimulations.filter(sim => sim[sim.length - 1] > 0).length;\n        const successRate = (successCount \/ inputs.simulationCount) * 100;\n\n        return {\n            median: percentiles.p50, p10: percentiles.p10, p25: percentiles.p25,\n            p75: percentiles.p75, p90: percentiles.p90,\n            retirementAge: medianRetirementAge, successRate: successRate\n        };\n    }\n\n    function formatCurrency(value) {\n        return '$' + value.toLocaleString('en-US', {minimumFractionDigits: 0, maximumFractionDigits: 0});\n    }\n\n    function updateChart(labels, data, fireTarget, method) {\n        if (fireChart) fireChart.destroy();\n        \n        const datasets = [];\n        if (method === 'monte-carlo') {\n             datasets.push({\n                label: '10-90 Y\u00fczdelik Dilim', data: data.p90,\n                borderColor: 'rgba(180, 210, 255, 0.5)', backgroundColor: 'rgba(180, 210, 255, 0.2)',\n                pointRadius: 0, fill: 1,\n            });\n             datasets.push({\n                label: '10. Y\u00fczdelik', data: data.p10,\n                pointRadius: 0, borderColor: 'transparent', backgroundColor: 'transparent'\n            });\n             datasets.push({\n                label: '25-75 Y\u00fczdelik Dilim', data: data.p75,\n                borderColor: 'rgba(100, 150, 255, 0.6)', backgroundColor: 'rgba(100, 150, 255, 0.3)',\n                pointRadius: 0, fill: 3,\n            });\n            datasets.push({\n                label: '25. Y\u00fczdelik', data: data.p25,\n                pointRadius: 0, borderColor: 'transparent', backgroundColor: 'transparent'\n            });\n        }\n       \n        datasets.push({\n            label: method === 'fixed' ? 'Birikim Projeksiyonu' : 'Medyan Birikim (50. Y\u00fczdelik)',\n            data: data.median, borderColor: '#1d4ed8', backgroundColor: '#1d4ed8',\n            tension: 0.1, borderWidth: 2, pointRadius: 0,\n        });\n\n        datasets.push({\n            label: 'Nihai FIRE Hedefi', data: Array(labels.length).fill(fireTarget),\n            borderColor: '#f59e0b', borderWidth: 2, borderDash: [5, 5],\n            pointRadius: 0, fill: false,\n        });\n\n        const ctx = document.getElementById('fireChart').getContext('2d');\n        fireChart = new Chart(ctx, {\n            type: 'line',\n            data: { labels: labels, datasets: datasets },\n            options: {\n                responsive: true, maintainAspectRatio: false,\n                scales: {\n                    y: {\n                        ticks: { callback: function(value) { return formatCurrency(value); } },\n                        title: { display: true, text: 'Portf\u00f6y De\u011feri' }\n                    },\n                    x: { title: { display: true, text: 'Ya\u015f' } }\n                },\n                plugins: {\n                    tooltip: {\n                        callbacks: {\n                            label: function(context) {\n                                let label = context.dataset.label || '';\n                                if (label) label += ': ';\n                                if (context.parsed.y !== null) label += formatCurrency(context.parsed.y);\n                                return label;\n                            }\n                        }\n                    },\n                    legend: { position: 'top' }\n                }\n            }\n        });\n    }\n\n    function updateSummary(data, inputs, fireTarget) {\n        var summaryText = '';\n        \n        var formattedFireTarget = formatCurrency(fireTarget);\n        summaryText += '<p><strong>FIRE Hedefiniz:<\/strong> ' + formattedFireTarget + '. Bu, y\u0131ll\u0131k ' + formatCurrency(inputs.retirementSpending * 12) + ' harcama ve %' + (inputs.swr * 100) + ' g\u00fcvenli \u00e7ekim oran\u0131na dayanmaktad\u0131r.<\/p>';\n\n        if (data.retirementAge > 0 && data.retirementAge <= inputs.lifeExpectancy) {\n            var retirementAgeText = '<strong>' + data.retirementAge + '<\/strong>';\n            if(inputs.projectionMethod === 'monte-carlo'){\n                retirementAgeText = 'Medyan olarak <strong>' + data.retirementAge + ' ya\u015f\u0131nda<\/strong>';\n            }\n            summaryText += '<p>Tahmini emeklilik ya\u015f\u0131n\u0131z: ' + retirementAgeText + '. ';\n            \n            var portfolioAtRetirement = data.median[data.retirementAge - inputs.currentAge];\n            summaryText += 'Bu ya\u015fta medyan birikiminizin <strong>' + formatCurrency(portfolioAtRetirement) + '<\/strong> olmas\u0131 bekleniyor.<\/p>';\n        } else {\n            summaryText += '<p>Mevcut varsay\u0131mlarla, ' + inputs.lifeExpectancy + ' ya\u015f\u0131na kadar finansal ba\u011f\u0131ms\u0131zl\u0131k hedefinize ula\u015fman\u0131z \u00f6ng\u00f6r\u00fclm\u00fcyor.<\/p>';\n        }\n\n        if (inputs.projectionMethod === 'monte-carlo') {\n            summaryText += '<p><strong>Monte Carlo Analizi:<\/strong> ' + inputs.simulationCount + ' farkl\u0131 gelecek senaryosu \u00fczerinden yap\u0131lan sim\u00fclasyonlar\u0131n ba\u015far\u0131 oran\u0131 <strong>%' + data.successRate.toFixed(1) + '<\/strong> olarak hesaplanm\u0131\u015ft\u0131r. Bu oran, ya\u015fam beklentisi sonunda portf\u00f6y\u00fcn\u00fcz\u00fcn s\u0131f\u0131r\u0131n \u00fczerinde kalma olas\u0131l\u0131\u011f\u0131n\u0131 g\u00f6sterir.<\/p>';\n        }\n        \n        resultsSummary.innerHTML = summaryText;\n    }\n}\n<\/script>\n\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>Ne zaman emekli olabilirim ve emekli olmadan \u00f6nce ne kadar s\u00fcre birikim yapmam gerekir? \u0130\u015fte kilit soru bu! Bu interaktif FIRE hesaplay\u0131c\u0131s\u0131n\u0131, kendi verilerinizi girerek&#8230;<\/p>\n","protected":false},"author":2,"featured_media":3527,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[8,6],"tags":[],"class_list":["post-3521","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-finansal-ozgurluk","category-fire","entry","double"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/baytutumlu.com\/wp-content\/uploads\/2025\/06\/f.i.r.e.jpg?fit=1920%2C1080&ssl=1","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/baytutumlu.com\/index.php\/wp-json\/wp\/v2\/posts\/3521","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/baytutumlu.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/baytutumlu.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/baytutumlu.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/baytutumlu.com\/index.php\/wp-json\/wp\/v2\/comments?post=3521"}],"version-history":[{"count":3,"href":"https:\/\/baytutumlu.com\/index.php\/wp-json\/wp\/v2\/posts\/3521\/revisions"}],"predecessor-version":[{"id":3524,"href":"https:\/\/baytutumlu.com\/index.php\/wp-json\/wp\/v2\/posts\/3521\/revisions\/3524"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/baytutumlu.com\/index.php\/wp-json\/wp\/v2\/media\/3527"}],"wp:attachment":[{"href":"https:\/\/baytutumlu.com\/index.php\/wp-json\/wp\/v2\/media?parent=3521"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/baytutumlu.com\/index.php\/wp-json\/wp\/v2\/categories?post=3521"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/baytutumlu.com\/index.php\/wp-json\/wp\/v2\/tags?post=3521"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}