{"id":4167,"date":"2026-07-07T10:47:55","date_gmt":"2026-07-07T10:47:55","guid":{"rendered":"https:\/\/spirofit.de\/?page_id=4167"},"modified":"2026-07-24T08:24:00","modified_gmt":"2026-07-24T08:24:00","slug":"roi-rechner","status":"publish","type":"page","link":"https:\/\/spirofit.de\/de\/roi-rechner\/","title":{"rendered":"ROI Rechner"},"content":{"rendered":"\n<style data-wp-block-html=\"css\">\n#spirofit-roi-wrapper {\n  --bg: #0000004f;\n  --surface: rgba(71, 71, 71, 0.72);\n  --surface2: rgba(51, 51, 51, 0.9);\n  --border: rgba(110, 110, 110, 0.45);\n  --accent: #048797;\n  --accent-light: #06a5ba;\n  --text: #fbfbfb;\n  --text-muted: #b5b5b5;\n  --green: #22c55e;\n  --red: #ef4444;\n  --radius: 14px;\n  --radius-sm: 8px;\n  --font-heading: 'Roboto', sans-serif;\n  --font-body: 'Roboto', sans-serif;\n  --font-statement: local('Dinesqo 4F Ultra Light'), local('Dinesqo4F-UltraLight'), 'Raleway', sans-serif;\n  \n  background: var(--bg);\n  color: var(--text);\n  font-family: var(--font-body);\n  font-weight: 300;\n  min-height: 100vh;\n  font-size: 15px;\n  line-height: 1.3;\n  -webkit-font-smoothing: antialiased;\n  position: relative;\n  overflow: hidden;\n  border-radius: var(--radius);\n  margin-top: 30px;\n  margin-bottom: 30px;\n}\n\n#spirofit-roi-wrapper *, \n#spirofit-roi-wrapper *::before, \n#spirofit-roi-wrapper *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n\n#spirofit-roi-wrapper .bg-orbs {\n  position: absolute;\n  inset: 0;\n  z-index: 0;\n  pointer-events: none;\n  overflow: hidden;\n}\n\n#spirofit-roi-wrapper .bg-orbs span {\n  position: absolute;\n  border-radius: 50%;\n  filter: blur(90px);\n  animation: drift linear infinite;\n}\n\n#spirofit-roi-wrapper .bg-orbs span:nth-child(1) {\n  width: 650px; height: 650px; background: radial-gradient(circle, #048797, transparent 70%);\n  top: -20%; left: -10%; animation-duration: 28s; animation-delay: 0s; opacity: 0.28;\n}\n#spirofit-roi-wrapper .bg-orbs span:nth-child(2) {\n  width: 500px; height: 500px; background: radial-gradient(circle, #00515b, transparent 70%);\n  top: 30%; right: -12%; animation-duration: 34s; animation-delay: -10s; opacity: 0.22;\n}\n#spirofit-roi-wrapper .bg-orbs span:nth-child(3) {\n  width: 400px; height: 400px; background: radial-gradient(circle, #048797, transparent 70%);\n  bottom: 5%; left: 25%; animation-duration: 22s; animation-delay: -6s; opacity: 0.16;\n}\n#spirofit-roi-wrapper .bg-orbs span:nth-child(4) {\n  width: 350px; height: 350px; background: radial-gradient(circle, #474747, transparent 70%);\n  top: 55%; left: -8%; animation-duration: 30s; animation-delay: -18s; opacity: 0.35;\n}\n\n@keyframes drift {\n  0%   { transform: translate(0px, 0px) scale(1); }\n  25%  { transform: translate(60px, -40px) scale(1.05); }\n  50%  { transform: translate(30px, 60px) scale(0.97); }\n  75%  { transform: translate(-40px, 20px) scale(1.03); }\n  100% { transform: translate(0px, 0px) scale(1); }\n}\n\n#spirofit-roi-wrapper .calc-header {\n  position: relative;\n  z-index: 1;\n  background: rgba(0, 0, 0, 0.55);\n  backdrop-filter: blur(20px);\n  -webkit-backdrop-filter: blur(20px);\n  border-bottom: 1px solid var(--border);\n  padding: 48px 24px 40px;\n  text-align: center;\n}\n\n#spirofit-roi-wrapper .header-inner {\n  max-width: 900px;\n  margin: 0 auto;\n}\n\n#spirofit-roi-wrapper .calc-header h1 {\n  font-family: var(--font-heading);\n  font-size: 2rem;\n  font-weight: 700;\n  letter-spacing: 0.02em;\n  color: var(--text);\n  margin-bottom: 10px;\n  line-height: 1.3;\n}\n\n#spirofit-roi-wrapper .calc-header h1 span { color: var(--accent-light); }\n\n#spirofit-roi-wrapper .calc-header p {\n  font-family: var(--font-statement);\n  font-weight: 200;\n  color: var(--text-muted);\n  font-size: 0.9375rem;\n  letter-spacing: 0.02em;\n  line-height: 1.3;\n}\n\n#spirofit-roi-wrapper .calc-main {\n  position: relative;\n  z-index: 1;\n  max-width: 980px;\n  margin: 40px auto;\n  padding: 0 20px 60px;\n}\n\n#spirofit-roi-wrapper .calculator-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 20px;\n  align-items: start;\n}\n\n@media (max-width: 720px) {\n  #spirofit-roi-wrapper .calculator-grid { grid-template-columns: 1fr; }\n}\n\n#spirofit-roi-wrapper .inputs-panel,\n#spirofit-roi-wrapper .results-panel,\n#spirofit-roi-wrapper .chart-section {\n  background: var(--surface);\n  backdrop-filter: blur(24px);\n  -webkit-backdrop-filter: blur(24px);\n  border: 1px solid var(--border);\n  border-radius: var(--radius);\n}\n\n#spirofit-roi-wrapper .inputs-panel {\n  padding: 28px;\n  display: flex;\n  flex-direction: column;\n  gap: 18px;\n}\n\n#spirofit-roi-wrapper .results-panel {\n  padding: 28px;\n  display: flex;\n  flex-direction: column;\n  gap: 22px;\n  position: sticky;\n  top: 24px;\n}\n\n#spirofit-roi-wrapper .divider {\n  font-family: var(--font-heading);\n  font-size: 0.6875rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.02em;\n  color: var(--accent-light);\n  border-top: 1px solid var(--border);\n  padding-top: 14px;\n  margin-top: 4px;\n}\n\n#spirofit-roi-wrapper .input-group {\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n}\n\n#spirofit-roi-wrapper .input-group label {\n  font-family: var(--font-body);\n  font-size: 0.875rem;\n  font-weight: 300;\n  letter-spacing: 0.02em;\n  color: var(--text-muted);\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  line-height: 1.3;\n}\n\n#spirofit-roi-wrapper .val-badge {\n  background: var(--accent);\n  color: #fbfbfb;\n  font-size: 0.75rem;\n  font-weight: 700;\n  letter-spacing: 0.02em;\n  padding: 2px 9px;\n  border-radius: 20px;\n  min-width: 34px;\n  text-align: center;\n}\n\n#spirofit-roi-wrapper select,\n#spirofit-roi-wrapper input[type=\"number\"] {\n  background: var(--surface2);\n  border: 1px solid var(--border);\n  border-radius: var(--radius-sm);\n  color: var(--text);\n  font-family: var(--font-body);\n  font-weight: 300;\n  font-size: 0.9375rem;\n  letter-spacing: 0.02em;\n  padding: 10px 12px;\n  outline: none;\n  width: 100%;\n  transition: border-color 0.15s;\n}\n\n#spirofit-roi-wrapper select:focus,\n#spirofit-roi-wrapper input[type=\"number\"]:focus {\n  border-color: var(--accent);\n}\n\n#spirofit-roi-wrapper select option { background: #3a3a3a; }\n\n#spirofit-roi-wrapper input[type=\"range\"] {\n  -webkit-appearance: none;\n  appearance: none;\n  width: 100%;\n  height: 6px;\n  border-radius: 3px;\n  background: #fff;\n  outline: none;\n  cursor: pointer;\n}\n\n#spirofit-roi-wrapper input[type=\"range\"]::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  appearance: none;\n  width: 18px;\n  height: 18px;\n  border-radius: 50%;\n  background: var(--accent);\n  border: 2px solid #000;\n  box-shadow: 0 0 0 2px var(--accent);\n  cursor: pointer;\n}\n\n#spirofit-roi-wrapper .input-prefix {\n  position: relative;\n  display: flex;\n  align-items: center;\n}\n\n#spirofit-roi-wrapper .input-prefix .prefix {\n  position: absolute;\n  left: 12px;\n  color: var(--text-muted);\n  font-family: 'Roboto', sans-serif;\n  font-weight: 300;\n  font-size: 0.875rem;\n  pointer-events: none;\n  z-index: 1;\n}\n\n#spirofit-roi-wrapper .input-prefix input { padding-left: 28px; }\n\n#spirofit-roi-wrapper .results-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n}\n\n#spirofit-roi-wrapper .results-header h2 {\n  font-family: var(--font-heading);\n  font-size: 1.05rem;\n  font-weight: 700;\n  letter-spacing: 0.02em;\n  color: var(--text);\n  line-height: 1.3;\n}\n\n#spirofit-roi-wrapper .year-tabs {\n  display: flex;\n  background: var(--surface2);\n  border-radius: var(--radius-sm);\n  padding: 3px;\n  gap: 3px;\n}\n\n#spirofit-roi-wrapper .tab {\n  background: transparent;\n  border: none;\n  border-radius: 6px;\n  color: var(--text-muted);\n  cursor: pointer;\n  font-family: var(--font-heading);\n  font-size: 0.8125rem;\n  font-weight: 400;\n  letter-spacing: 0.02em;\n  padding: 5px 14px;\n  transition: background 0.15s, color 0.15s;\n}\n\n#spirofit-roi-wrapper .tab.active { background: var(--accent); color: #fbfbfb; }\n\n#spirofit-roi-wrapper .profit-card {\n  background: linear-gradient(135deg, #048797 0%, #00515b 100%);\n  border-radius: var(--radius);\n  padding: 30px 24px;\n  text-align: center;\n  position: relative;\n  overflow: hidden;\n  box-shadow: 0 8px 32px rgba(4, 135, 151, 0.25);\n}\n\n#spirofit-roi-wrapper .profit-card::after {\n  content: '';\n  position: absolute;\n  inset: 0;\n  background: linear-gradient(135deg, rgba(255,255,255,0.07) 0%, transparent 50%);\n  pointer-events: none;\n}\n\n#spirofit-roi-wrapper .profit-label {\n  font-family: var(--font-heading);\n  font-size: 0.75rem;\n  font-weight: 700;\n  letter-spacing: 0.02em;\n  text-transform: uppercase;\n  opacity: 0.85;\n  margin-bottom: 10px;\n  line-height: 1.3;\n}\n\n#spirofit-roi-wrapper .profit-amount {\n  font-family: var(--font-body);\n  font-size: 2.75rem;\n  font-weight: 400;\n  letter-spacing: 0.02em;\n  line-height: 1;\n  color: #fbfbfb;\n  transition: color 0.2s;\n}\n\n#spirofit-roi-wrapper .profit-amount.negative { color: #fca5a5; }\n\n#spirofit-roi-wrapper .profit-sub {\n  font-family: var(--font-statement);\n  font-size: 0.875rem;\n  font-weight: 200;\n  letter-spacing: 0.02em;\n  opacity: 0.75;\n  margin-top: 8px;\n  line-height: 1.3;\n}\n\n#spirofit-roi-wrapper .breakdown {\n  border-top: 1px solid var(--border);\n  padding-top: 16px;\n}\n\n#spirofit-roi-wrapper .breakdown h3 {\n  font-family: var(--font-heading);\n  font-size: 0.75rem;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.02em;\n  color: var(--text-muted);\n  margin-bottom: 12px;\n  line-height: 1.3;\n}\n\n#spirofit-roi-wrapper .breakdown-row {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  font-family: var(--font-body);\n  font-size: 0.9rem;\n  font-weight: 300;\n  letter-spacing: 0.02em;\n  color: var(--text-muted);\n  padding: 5px 0;\n  line-height: 1.3;\n}\n\n#spirofit-roi-wrapper .breakdown-row span:last-child { color: var(--text); font-weight: 400; }\n\n#spirofit-roi-wrapper .breakdown-row.total {\n  font-family: var(--font-heading);\n  font-weight: 700;\n  color: var(--text);\n  border-top: 1px solid var(--border);\n  margin-top: 4px;\n  padding-top: 8px;\n}\n\n#spirofit-roi-wrapper .breakdown-row.total span:last-child {\n  color: var(--accent-light);\n  font-weight: 700;\n}\n\n#spirofit-roi-wrapper .disclaimer {\n  font-family: var(--font-statement);\n  font-size: 0.8125rem;\n  font-weight: 200;\n  letter-spacing: 0.02em;\n  color: var(--text-muted);\n  opacity: 0.7;\n  line-height: 1.3;\n  border-top: 1px solid var(--border);\n  padding-top: 14px;\n}\n\n#spirofit-roi-wrapper .export-btn {\n  background: transparent;\n  border: 1px solid rgba(4, 135, 151, 0.5);\n  border-radius: var(--radius-sm);\n  color: var(--accent-light);\n  cursor: pointer;\n  font-family: var(--font-heading);\n  font-size: 0.875rem;\n  font-weight: 700;\n  letter-spacing: 0.02em;\n  padding: 11px;\n  text-align: center;\n  transition: background 0.15s, color 0.15s, border-color 0.15s;\n  width: 100%;\n}\n\n#spirofit-roi-wrapper .export-btn:hover { background: var(--accent); border-color: var(--accent); color: #fbfbfb; }\n\n#spirofit-roi-wrapper .chart-section {\n  margin-top: 20px;\n  padding: 28px;\n}\n\n#spirofit-roi-wrapper .chart-header {\n  margin-bottom: 24px;\n  padding-bottom: 16px;\n  border-bottom: 1px solid var(--border);\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-end;\n}\n\n#spirofit-roi-wrapper .chart-header h2 {\n  font-family: var(--font-heading);\n  font-size: 1rem;\n  font-weight: 700;\n  letter-spacing: 0.02em;\n  color: var(--text);\n  line-height: 1.3;\n}\n\n#spirofit-roi-wrapper .chart-header p {\n  font-family: var(--font-statement);\n  font-size: 0.8125rem;\n  font-weight: 200;\n  letter-spacing: 0.02em;\n  color: var(--text-muted);\n  line-height: 1.3;\n}\n\n#spirofit-roi-wrapper .chart-wrap {\n  position: relative;\n  height: 260px;\n}\n<\/style>\n\n<script data-wp-block-html=\"js\">\n(function() {\n  function initSpirofitCalculator() {\n    const currencySymbols = { USD: '$', CAD: '$', EUR: '\u20ac', GBP: '\u00a3' };\n    const exchangeRates = { USD: 1.0, CAD: 1.36, EUR: 0.92, GBP: 0.79 };\n    let activeCurrency = 'USD';\n    let profitChart = null;\n    const ANNUAL_SERVICE_COST = 695;\n    let activeYear = 1;\n\n    const inputs = {\n      gxtTests: document.getElementById('gxtTests'),\n      rmrTests: document.getElementById('rmrTests'),\n      gxtPrice: document.getElementById('gxtPrice'),\n      rmrPrice: document.getElementById('rmrPrice'),\n      hourlyRate: document.getElementById('hourlyRate'),\n      hoursPerTest: document.getElementById('hoursPerTest'),\n      overheadMonthly: document.getElementById('overheadMonthly'),\n      currency: document.getElementById('currency'),\n    };\n    \n    \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0447\u0442\u043e \u0431\u043b\u043e\u043a \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442\n    if (!inputs.gxtTests) return;\n\n    const outputs = {\n      gxtVal: document.getElementById('gxtVal'),\n      rmrVal: document.getElementById('rmrVal'),\n      profitAmount: document.getElementById('profitAmount'),\n      profitSub: document.getElementById('profitSub'),\n      gxtRevenue: document.getElementById('gxtRevenue'),\n      rmrRevenue: document.getElementById('rmrRevenue'),\n      totalRevenue: document.getElementById('totalRevenue'),\n      staffCost: document.getElementById('staffCost'),\n      overheadCost: document.getElementById('overheadCost'),\n      kitCost: document.getElementById('kitCost'),\n      kitRow: document.getElementById('kitRow'),\n      totalExpenses: document.getElementById('totalExpenses'),\n    };\n\n    function fmt(value) {\n      const sym = currencySymbols[inputs.currency.value] || '$';\n      const abs = Math.abs(value);\n      const formatted = abs.toLocaleString('en-US', { minimumFractionDigits: 0, maximumFractionDigits: 0 });\n      return (value < 0 ? '-' : '') + sym + formatted;\n    }\n\n    function calculate() {\n      const gxtPerMonth = parseInt(inputs.gxtTests.value);\n      const rmrPerMonth = parseInt(inputs.rmrTests.value);\n      const gxtPrice = parseFloat(inputs.gxtPrice.value) || 0;\n      const rmrPrice = parseFloat(inputs.rmrPrice.value) || 0;\n      const hourlyRate = parseFloat(inputs.hourlyRate.value) || 0;\n      const hoursPerTest = parseFloat(inputs.hoursPerTest.value) || 0;\n      const overheadMonthly = parseFloat(inputs.overheadMonthly.value) || 0;\n\n      const totalTestsPerMonth = gxtPerMonth + rmrPerMonth;\n      const totalTestsPerYear = totalTestsPerMonth * 12;\n\n      const annualGxtRevenue = gxtPerMonth * 12 * gxtPrice;\n      const annualRmrRevenue = rmrPerMonth * 12 * rmrPrice;\n      const annualRevenue = annualGxtRevenue + annualRmrRevenue;\n\n      const annualStaffCost = totalTestsPerMonth * 12 * hourlyRate * hoursPerTest;\n      const annualOverhead = overheadMonthly * 12;\n\n      const year1Expenses = annualStaffCost + annualOverhead;\n      const year2Expenses = annualStaffCost + annualOverhead + ANNUAL_SERVICE_COST;\n\n      const year1Profit = annualRevenue - year1Expenses;\n      const year2Profit = annualRevenue - year2Expenses;\n\n      const profit = activeYear === 1 ? year1Profit : year2Profit;\n      const expenses = activeYear === 1 ? year1Expenses : year2Expenses;\n\n      outputs.gxtVal.textContent = gxtPerMonth;\n      outputs.rmrVal.textContent = rmrPerMonth;\n\n      outputs.profitAmount.textContent = fmt(profit);\n      outputs.profitAmount.classList.toggle('negative', profit < 0);\n      outputs.profitSub.textContent = `Year ${activeYear}`;\n\n      outputs.gxtRevenue.textContent = fmt(annualGxtRevenue);\n      outputs.rmrRevenue.textContent = fmt(annualRmrRevenue);\n      outputs.totalRevenue.textContent = fmt(annualRevenue);\n\n      outputs.staffCost.textContent = fmt(annualStaffCost);\n      outputs.overheadCost.textContent = fmt(annualOverhead);\n      outputs.kitCost.textContent = fmt(ANNUAL_SERVICE_COST);\n      outputs.totalExpenses.textContent = fmt(expenses);\n\n      outputs.kitRow.style.display = activeYear === 2 ? 'flex' : 'none';\n\n      updateCurrencySymbols();\n      updateChart(annualRevenue, year1Expenses, year2Expenses);\n    }\n\n    function updateChart(annualRevenue, year1Expenses, year2Expenses) {\n      const monthlyRevenue = annualRevenue \/ 12;\n      const monthlyYear1Expense = year1Expenses \/ 12;\n      const monthlyYear2Expense = year2Expenses \/ 12;\n\n      const labels = [];\n      const data = [];\n      let cumulative = 0;\n\n      for (let m = 1; m <= 24; m++) {\n        const monthlyExpense = m <= 12 ? monthlyYear1Expense : monthlyYear2Expense;\n        cumulative += monthlyRevenue - monthlyExpense;\n        labels.push(`M${m}`);\n        data.push(Math.round(cumulative));\n      }\n\n      const canvas = document.getElementById('profitChart');\n      if (!canvas) return;\n      const ctx = canvas.getContext('2d');\n      const accentColor = '#048797';\n\n      if (profitChart) {\n        profitChart.data.labels = labels;\n        profitChart.data.datasets[0].data = data;\n        profitChart.update('none');\n        return;\n      }\n\n      profitChart = new Chart(ctx, {\n        type: 'line',\n        data: {\n          labels,\n          datasets: [{\n            label: 'Cumulative Profit',\n            data,\n            borderColor: accentColor,\n            borderWidth: 2,\n            pointRadius: 0,\n            pointHoverRadius: 5,\n            pointHoverBackgroundColor: accentColor,\n            fill: true,\n            backgroundColor: (ctx) => {\n              const gradient = ctx.chart.ctx.createLinearGradient(0, 0, 0, ctx.chart.height);\n              gradient.addColorStop(0, 'rgba(4, 135, 151, 0.22)');\n              gradient.addColorStop(1, 'rgba(4, 135, 151, 0)');\n              return gradient;\n            },\n            tension: 0.4,\n          }],\n        },\n        options: {\n          responsive: true,\n          maintainAspectRatio: false,\n          interaction: { mode: 'index', intersect: false },\n          plugins: {\n            legend: { display: false },\n            tooltip: {\n              backgroundColor: '#474747',\n              borderColor: 'rgba(110,110,110,0.45)',\n              borderWidth: 1,\n              titleColor: '#b5b5b5',\n              bodyColor: '#fbfbfb',\n              padding: 12,\n              callbacks: {\n                label: (item) => {\n                  const sym = currencySymbols[inputs.currency.value] || '$';\n                  const val = item.raw;\n                  const abs = Math.abs(val).toLocaleString('en-US', { maximumFractionDigits: 0 });\n                  return ` ${val < 0 ? '-' : ''}${sym}${abs}`;\n                },\n              },\n            },\n          },\n          scales: {\n            x: {\n              grid: { color: 'rgba(110, 110, 110, 0.2)' },\n              ticks: {\n                color: '#b5b5b5',\n                font: { size: 11, family: 'Roboto', weight: '300' },\n                maxTicksLimit: 12,\n              },\n              border: { color: 'rgba(110, 110, 110, 0.3)' },\n            },\n            y: {\n              grid: { color: 'rgba(110, 110, 110, 0.2)' },\n              ticks: {\n                color: '#b5b5b5',\n                font: { size: 11, family: 'Roboto', weight: '300' },\n                callback: (val) => {\n                  const sym = currencySymbols[inputs.currency.value] || '$';\n                  const abs = Math.abs(val);\n                  if (abs >= 1000) return (val < 0 ? '-' : '') + sym + (abs \/ 1000).toFixed(0) + 'k';\n                  return (val < 0 ? '-' : '') + sym + abs;\n                },\n              },\n              border: { color: 'rgba(110, 110, 110, 0.3)' },\n            },\n          },\n          animation: { duration: 200 },\n        },\n      });\n    }\n\n    function updateCurrencySymbols() {\n      const sym = currencySymbols[inputs.currency.value] || '$';\n      document.querySelectorAll('#spirofit-roi-wrapper .prefix').forEach(el => el.textContent = sym);\n    }\n\n    function convertCurrencyInputs(fromCurrency, toCurrency) {\n      if (fromCurrency === toCurrency) return;\n      const factor = exchangeRates[toCurrency] \/ exchangeRates[fromCurrency];\n      const currencyFields = [inputs.gxtPrice, inputs.rmrPrice, inputs.hourlyRate, inputs.overheadMonthly];\n      currencyFields.forEach(el => {\n        const converted = parseFloat(el.value) * factor;\n        el.value = Math.round(converted);\n      });\n    }\n\n    document.querySelectorAll('#spirofit-roi-wrapper .tab').forEach(tab => {\n      tab.addEventListener('click', () => {\n        document.querySelectorAll('#spirofit-roi-wrapper .tab').forEach(t => t.classList.remove('active'));\n        tab.classList.add('active');\n        activeYear = parseInt(tab.dataset.year);\n        calculate();\n      });\n    });\n\n    const exportBtn = document.getElementById('exportBtn');\n    if (exportBtn) {\n        exportBtn.addEventListener('click', () => {\n          window.print();\n        });\n    }\n\n    inputs.currency.addEventListener('change', () => {\n      const newCurrency = inputs.currency.value;\n      convertCurrencyInputs(activeCurrency, newCurrency);\n      activeCurrency = newCurrency;\n      calculate();\n    });\n\n    Object.values(inputs).forEach(el => {\n      if (el === inputs.currency) return;\n      el.addEventListener('input', calculate);\n      el.addEventListener('change', calculate);\n    });\n\n    calculate();\n  }\n\n  \/\/ \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u0441\u0442\u0430\u0440\u0442 \u0441\u043a\u0440\u0438\u043f\u0442\u0430\n  function loadChartJSAndInit() {\n    if (typeof Chart !== 'undefined') {\n      initSpirofitCalculator();\n    } else {\n      var script = document.createElement('script');\n      script.src = 'https:\/\/cdn.jsdelivr.net\/npm\/chart.js@4.4.0\/dist\/chart.umd.min.js';\n      script.onload = initSpirofitCalculator;\n      document.head.appendChild(script);\n    }\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', loadChartJSAndInit);\n  } else {\n    loadChartJSAndInit();\n  }\n})();\n<\/script>\n\n\n<div id=\"spirofit-roi-wrapper\">\n  <div class=\"bg-orbs\">\n    <span><\/span>\n    <span><\/span>\n    <span><\/span>\n    <span><\/span>\n  <\/div>\n\n  <div class=\"calc-header\">\n    <div class=\"header-inner\">\n      <h1>SpiroFit <span>ROI Calculator<\/span><\/h1>\n      <p>Estimate your Year 1 and Year 2 profit from offering metabolic assessments<\/p>\n    <\/div>\n  <\/div>\n\n  <div class=\"calc-main\">\n    <div class=\"calculator-grid\">\n      <section class=\"inputs-panel\">\n        <div class=\"input-group\">\n          <label for=\"facilityType\">Facility Type<\/label>\n          <select id=\"facilityType\">\n            <option value=\"gym\">Gym<\/option>\n            <option value=\"wellness\">Wellness Studio<\/option>\n            <option value=\"personal\">Personal Trainer<\/option>\n            <option value=\"corporate\">Corporate Wellness<\/option>\n            <option value=\"sports\">Sports Center<\/option>\n            <option value=\"physio\">Physiotherapist<\/option>\n            <option value=\"other\">Other<\/option>\n          <\/select>\n        <\/div>\n\n        <div class=\"input-group\">\n          <label for=\"currency\">Currency<\/label>\n          <select id=\"currency\">\n            <option value=\"USD\">$ USD<\/option>\n            <option value=\"CAD\">$ CAD<\/option>\n            <option value=\"EUR\">\u20ac EUR<\/option>\n            <option value=\"GBP\">\u00a3 GBP<\/option>\n          <\/select>\n        <\/div>\n\n        <div class=\"divider\">Testing Volume<\/div>\n\n        <div class=\"input-group\">\n          <label for=\"gxtTests\">Active tests \/ month\n            <span class=\"val-badge\" id=\"gxtVal\">10<\/span>\n          <\/label>\n          <input type=\"range\" id=\"gxtTests\" min=\"1\" max=\"100\" value=\"10\" \/>\n        <\/div>\n\n        <div class=\"input-group\">\n          <label for=\"rmrTests\">Resting tests \/ month\n            <span class=\"val-badge\" id=\"rmrVal\">5<\/span>\n          <\/label>\n          <input type=\"range\" id=\"rmrTests\" min=\"1\" max=\"100\" value=\"5\" \/>\n        <\/div>\n\n        <div class=\"divider\">Pricing Per Test<\/div>\n\n        <div class=\"input-group\">\n          <label for=\"gxtPrice\">Price charged per active test<\/label>\n          <div class=\"input-prefix\">\n            <span class=\"prefix\" id=\"currencyPrefix\">$<\/span>\n            <input type=\"number\" id=\"gxtPrice\" min=\"0\" value=\"150\" \/>\n          <\/div>\n        <\/div>\n\n        <div class=\"input-group\">\n          <label for=\"rmrPrice\">Price charged per resting test<\/label>\n          <div class=\"input-prefix\">\n            <span class=\"prefix\" id=\"currencyPrefix2\">$<\/span>\n            <input type=\"number\" id=\"rmrPrice\" min=\"0\" value=\"100\" \/>\n          <\/div>\n        <\/div>\n\n        <div class=\"divider\">Operating Costs<\/div>\n\n        <div class=\"input-group\">\n          <label for=\"hourlyRate\">Employee Hourly Rate<\/label>\n          <div class=\"input-prefix\">\n            <span class=\"prefix\" id=\"currencyPrefix3\">$<\/span>\n            <input type=\"number\" id=\"hourlyRate\" min=\"0\" value=\"25\" \/>\n          <\/div>\n        <\/div>\n\n        <div class=\"input-group\">\n          <label for=\"hoursPerTest\">Staff Hours Per Test<\/label>\n          <input type=\"number\" id=\"hoursPerTest\" min=\"0\" step=\"0.5\" value=\"1.5\" \/>\n        <\/div>\n\n        <div class=\"input-group\">\n          <label for=\"overheadMonthly\">Other Monthly Overhead<\/label>\n          <div class=\"input-prefix\">\n            <span class=\"prefix\" id=\"currencyPrefix4\">$<\/span>\n            <input type=\"number\" id=\"overheadMonthly\" min=\"0\" value=\"200\" \/>\n          <\/div>\n        <\/div>\n      <\/section>\n\n      <section class=\"results-panel\">\n        <div class=\"results-header\">\n          <h2>Projected Results<\/h2>\n          <div class=\"year-tabs\">\n            <button class=\"tab active\" data-year=\"1\">Year 1<\/button>\n            <button class=\"tab\" data-year=\"2\">Year 2<\/button>\n          <\/div>\n        <\/div>\n\n        <div class=\"profit-card\">\n          <div class=\"profit-label\">Estimated Profit<\/div>\n          <div class=\"profit-amount\" id=\"profitAmount\">$0<\/div>\n          <div class=\"profit-sub\" id=\"profitSub\">Year 1<\/div>\n        <\/div>\n\n        <div class=\"breakdown\">\n          <h3>Revenue Breakdown<\/h3>\n          <div class=\"breakdown-row\">\n            <span>Exercise Test Revenue<\/span>\n            <span id=\"gxtRevenue\">$0<\/span>\n          <\/div>\n          <div class=\"breakdown-row\">\n            <span>Resting Test Revenue<\/span>\n            <span id=\"rmrRevenue\">$0<\/span>\n          <\/div>\n          <div class=\"breakdown-row total\">\n            <span>Total Revenue<\/span>\n            <span id=\"totalRevenue\">$0<\/span>\n          <\/div>\n        <\/div>\n\n        <div class=\"breakdown\">\n          <h3>Expense Breakdown<\/h3>\n          <div class=\"breakdown-row\">\n            <span>Staff Costs<\/span>\n            <span id=\"staffCost\">$0<\/span>\n          <\/div>\n          <div class=\"breakdown-row\">\n            <span>Overhead<\/span>\n            <span id=\"overheadCost\">$0<\/span>\n          <\/div>\n          <div class=\"breakdown-row\" id=\"kitRow\" style=\"display:none\">\n            <span>Annual Service &amp; O2 Sensor<\/span>\n            <span id=\"kitCost\">$695<\/span>\n          <\/div>\n          <div class=\"breakdown-row total\">\n            <span>Total Expenses<\/span>\n            <span id=\"totalExpenses\">$0<\/span>\n          <\/div>\n        <\/div>\n\n        <p class=\"disclaimer\">This calculator provides estimates only. Actual financial results will vary based on your specific circumstances.<\/p>\n\n        <button class=\"export-btn\" id=\"exportBtn\">Export as PDF<\/button>\n      <\/section>\n    <\/div>\n\n    <div class=\"chart-section\">\n      <div class=\"chart-header\">\n        <h2>24-Month Cumulative Profit<\/h2>\n        <p>Your profit numbers account for your current inputs, \n           the Executive Bundle cost (year 1), \n          and the oxygen sensor replacement (year 2).<\/p>\n      <\/div>\n      <div class=\"chart-wrap\">\n        <canvas id=\"profitChart\"><\/canvas>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>SpiroFit ROI Calculator Estimate your Year 1 and Year 2 profit from offering metabolic assessments Facility Type GymWellness StudioPersonal TrainerCorporate<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-4167","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>ROI Rechner - Spirofit<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/spirofit.de\/roi-calculator\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ROI Rechner - Spirofit\" \/>\n<meta property=\"og:description\" content=\"SpiroFit ROI Calculator Estimate your Year 1 and Year 2 profit from offering metabolic assessments Facility Type GymWellness StudioPersonal TrainerCorporate\" \/>\n<meta property=\"og:url\" content=\"https:\/\/spirofit.de\/roi-calculator\/\" \/>\n<meta property=\"og:site_name\" content=\"Spirofit\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/share\/1DqXdN9hEr\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-24T08:24:00+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data1\" content=\"1\u00a0Minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/spirofit.de\\\/roi-calculator\\\/\",\"url\":\"https:\\\/\\\/spirofit.de\\\/roi-calculator\\\/\",\"name\":\"ROI Rechner - Spirofit\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/spirofit.de\\\/de\\\/#website\"},\"datePublished\":\"2026-07-07T10:47:55+00:00\",\"dateModified\":\"2026-07-24T08:24:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/spirofit.de\\\/roi-calculator\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/spirofit.de\\\/roi-calculator\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/spirofit.de\\\/roi-calculator\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/spirofit.de\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ROI Rechner\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/spirofit.de\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/spirofit.de\\\/de\\\/\",\"name\":\"Spirofit\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/spirofit.de\\\/de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/spirofit.de\\\/de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/spirofit.de\\\/de\\\/#organization\",\"name\":\"Spirofit\",\"url\":\"https:\\\/\\\/spirofit.de\\\/de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/spirofit.de\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/spirofit.de\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/logovertical.svg\",\"contentUrl\":\"https:\\\/\\\/spirofit.de\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/logovertical.svg\",\"width\":235,\"height\":240,\"caption\":\"Spirofit\"},\"image\":{\"@id\":\"https:\\\/\\\/spirofit.de\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/share\\\/1DqXdN9hEr\",\"https:\\\/\\\/www.instagram.com\\\/spirofit_official\",\"https:\\\/\\\/youtube.com\\\/@spirofit-channel\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"ROI Rechner - Spirofit","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/spirofit.de\/roi-calculator\/","og_locale":"de_DE","og_type":"article","og_title":"ROI Rechner - Spirofit","og_description":"SpiroFit ROI Calculator Estimate your Year 1 and Year 2 profit from offering metabolic assessments Facility Type GymWellness StudioPersonal TrainerCorporate","og_url":"https:\/\/spirofit.de\/roi-calculator\/","og_site_name":"Spirofit","article_publisher":"https:\/\/www.facebook.com\/share\/1DqXdN9hEr","article_modified_time":"2026-07-24T08:24:00+00:00","twitter_card":"summary_large_image","twitter_misc":{"Gesch\u00e4tzte Lesezeit":"1\u00a0Minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/spirofit.de\/roi-calculator\/","url":"https:\/\/spirofit.de\/roi-calculator\/","name":"ROI Rechner - Spirofit","isPartOf":{"@id":"https:\/\/spirofit.de\/de\/#website"},"datePublished":"2026-07-07T10:47:55+00:00","dateModified":"2026-07-24T08:24:00+00:00","breadcrumb":{"@id":"https:\/\/spirofit.de\/roi-calculator\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/spirofit.de\/roi-calculator\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/spirofit.de\/roi-calculator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/spirofit.de\/de\/"},{"@type":"ListItem","position":2,"name":"ROI Rechner"}]},{"@type":"WebSite","@id":"https:\/\/spirofit.de\/de\/#website","url":"https:\/\/spirofit.de\/de\/","name":"Spirofit","description":"","publisher":{"@id":"https:\/\/spirofit.de\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/spirofit.de\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/spirofit.de\/de\/#organization","name":"Spirofit","url":"https:\/\/spirofit.de\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/spirofit.de\/de\/#\/schema\/logo\/image\/","url":"https:\/\/spirofit.de\/wp-content\/uploads\/2025\/07\/logovertical.svg","contentUrl":"https:\/\/spirofit.de\/wp-content\/uploads\/2025\/07\/logovertical.svg","width":235,"height":240,"caption":"Spirofit"},"image":{"@id":"https:\/\/spirofit.de\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/share\/1DqXdN9hEr","https:\/\/www.instagram.com\/spirofit_official","https:\/\/youtube.com\/@spirofit-channel"]}]}},"_links":{"self":[{"href":"https:\/\/spirofit.de\/de\/wp-json\/wp\/v2\/pages\/4167","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spirofit.de\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/spirofit.de\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/spirofit.de\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spirofit.de\/de\/wp-json\/wp\/v2\/comments?post=4167"}],"version-history":[{"count":2,"href":"https:\/\/spirofit.de\/de\/wp-json\/wp\/v2\/pages\/4167\/revisions"}],"predecessor-version":[{"id":4205,"href":"https:\/\/spirofit.de\/de\/wp-json\/wp\/v2\/pages\/4167\/revisions\/4205"}],"wp:attachment":[{"href":"https:\/\/spirofit.de\/de\/wp-json\/wp\/v2\/media?parent=4167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}