diff --git a/hub/services/static/css/roi-calculator.css b/hub/services/static/css/roi-calculator.css index f23c064..6626526 100644 --- a/hub/services/static/css/roi-calculator.css +++ b/hub/services/static/css/roi-calculator.css @@ -101,14 +101,109 @@ .chart-container { position: relative; - height: 400px; background: white; border-radius: 8px; - padding: 1rem; + padding: 1.5rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); margin-bottom: 1.5rem; } +/* Enhanced chart sizing for new layout */ +.chart-container canvas { + max-height: 400px; +} + +/* Full-width chart containers */ +.card-body canvas { + width: 100% !important; +} + +/* Primary chart gets extra height */ +#instanceGrowthChart { + height: 500px !important; +} + +/* Secondary charts get good height */ +#revenueChart, #cashFlowChart, #modelComparisonChart { + height: 400px !important; +} + +/* Enhanced layout styles for new design */ +.sticky-top { + z-index: 1020; +} + +.card { + transition: box-shadow 0.15s ease-in-out; +} + +.card:hover { + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15); +} + +/* Compact header controls */ +.form-range { + height: 4px; +} + +.input-group-sm .form-control, +.form-select-sm, +.btn-sm { + font-size: 0.825rem; +} + +/* Clean chart headers */ +.card-header { + background: white !important; + border: none !important; + padding-bottom: 0.5rem; +} + +.card-body { + padding: 1.5rem; +} + +/* Responsive chart heights */ +@media (max-width: 768px) { + #instanceGrowthChart { + height: 350px !important; + } + + #revenueChart, #cashFlowChart, #modelComparisonChart { + height: 300px !important; + } + + .card-body { + padding: 1rem; + } +} + +@media (max-width: 576px) { + #instanceGrowthChart { + height: 250px !important; + } + + #revenueChart, #cashFlowChart, #modelComparisonChart { + height: 200px !important; + } +} + +/* Manual collapse functionality */ +.collapse { + display: none; +} + +.collapse.show { + display: block; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + transition: height 0.35s ease; +} + .export-buttons { position: sticky; top: 20px; diff --git a/hub/services/static/js/roi-calculator/chart-manager.js b/hub/services/static/js/roi-calculator/chart-manager.js index 8e5834f..0e8d7e6 100644 --- a/hub/services/static/js/roi-calculator/chart-manager.js +++ b/hub/services/static/js/roi-calculator/chart-manager.js @@ -84,7 +84,7 @@ class ChartManager { }); // Model Comparison Chart (replaces generic Cash Flow Chart) - const modelComparisonCanvas = document.getElementById('cashFlowChart'); + const modelComparisonCanvas = document.getElementById('modelComparisonChart'); if (!modelComparisonCanvas) { console.error('Model comparison chart canvas not found'); return; @@ -98,7 +98,7 @@ class ChartManager { maintainAspectRatio: false, plugins: { legend: { position: 'top' }, - title: { display: true, text: 'Investment Model Performance Comparison' } + title: { display: true, text: 'Investment Model Comparison' } }, scales: { y: { @@ -111,6 +111,35 @@ class ChartManager { } } }); + + // Performance Comparison Chart (for cashFlowChart canvas) + const performanceCanvas = document.getElementById('cashFlowChart'); + if (!performanceCanvas) { + console.error('Performance comparison chart canvas not found'); + return; + } + const performanceCtx = performanceCanvas.getContext('2d'); + this.charts.performance = new Chart(performanceCtx, { + type: 'bar', + data: { labels: [], datasets: [] }, + options: { + responsive: true, + maintainAspectRatio: false, + plugins: { + legend: { position: 'top' }, + title: { display: true, text: 'Model Performance Comparison' } + }, + scales: { + y: { + beginAtZero: true, + title: { display: true, text: 'ROI (%)' } + }, + x: { + title: { display: true, text: 'Growth Scenario' } + } + } + } + }); } catch (error) { console.error('Error initializing charts:', error); this.showChartError('Failed to initialize charts. Please refresh the page.'); @@ -119,7 +148,7 @@ class ChartManager { showChartError(message) { // Show error message in place of charts - const chartContainers = ['instanceGrowthChart', 'revenueChart', 'cashFlowChart']; + const chartContainers = ['instanceGrowthChart', 'revenueChart', 'cashFlowChart', 'modelComparisonChart']; chartContainers.forEach(containerId => { const container = document.getElementById(containerId); if (container) { @@ -152,7 +181,7 @@ class ChartManager { // Update ROI Progression Chart this.charts.roiProgression.data.labels = monthLabels; - this.charts.roiProgression.data.datasets = scenarios.map(scenario => ({ + this.charts.roiProgression.data.datasets = scenarios.filter(s => this.calculator.results[s]).map(scenario => ({ label: `${this.calculator.scenarios[scenario].name} (${this.calculator.results[scenario].investmentModel})`, data: this.calculator.monthlyData[scenario].map(d => d.roiPercent), borderColor: colors[scenario], @@ -166,7 +195,7 @@ class ChartManager { // Update Net Position Chart (Break-Even Analysis) this.charts.netPosition.data.labels = monthLabels; - this.charts.netPosition.data.datasets = scenarios.map(scenario => ({ + this.charts.netPosition.data.datasets = scenarios.filter(s => this.calculator.results[s]).map(scenario => ({ label: `${this.calculator.scenarios[scenario].name} Net Position`, data: this.calculator.monthlyData[scenario].map(d => d.netPosition), borderColor: colors[scenario], @@ -180,37 +209,122 @@ class ChartManager { })); this.charts.netPosition.update(); - // Update Model Comparison Chart - const scenarioLabels = scenarios.map(s => this.calculator.scenarios[s].name); - const currentInvestmentModel = Object.values(this.calculator.results)[0]?.investmentModel || 'direct'; + // Update Model Comparison Chart - Side-by-side comparison of both models + const inputs = this.calculator.getInputValues(); - // Show comparison with both models for the same scenarios - this.charts.modelComparison.data.labels = scenarioLabels; - this.charts.modelComparison.data.datasets = [{ - label: `${currentInvestmentModel === 'loan' ? 'Loan Model' : 'Direct Investment'} - Final Return`, - data: scenarios.map(scenario => this.calculator.results[scenario].cspRevenue), - backgroundColor: scenarios.map(scenario => colors[scenario] + '80'), - borderColor: scenarios.map(scenario => colors[scenario]), - borderWidth: 2 - }]; + // Calculate loan model net profit (fixed return regardless of scenario) + const loanMonthlyPayment = this.calculateLoanPayment(inputs.investmentAmount, inputs.loanInterestRate, inputs.timeframe); + const loanTotalPayments = loanMonthlyPayment * (inputs.timeframe * 12); + const loanNetProfit = loanTotalPayments - inputs.investmentAmount; - // Add performance metrics for direct investment - if (currentInvestmentModel === 'direct') { - this.charts.modelComparison.data.datasets.push({ - label: 'Performance Bonus Impact', - data: scenarios.map(scenario => - this.calculator.results[scenario].avgPerformanceBonus * - this.calculator.results[scenario].cspRevenue - ), - backgroundColor: '#17a2b8', - borderColor: '#17a2b8', + // Prepare scenario-based comparison + const enabledScenarios = scenarios.filter(s => this.calculator.scenarios[s].enabled); + const comparisonLabels = enabledScenarios.map(s => this.calculator.scenarios[s].name); + + // Loan model data (same profit for all scenarios since it's fixed) + const loanModelData = enabledScenarios.map(() => loanNetProfit); + + // Direct investment data (varies by scenario performance) + const directInvestmentData = enabledScenarios.map(scenario => { + const scenarioResult = this.calculator.results[scenario]; + if (!scenarioResult) return 0; + return scenarioResult.cspRevenue - inputs.investmentAmount; + }); + + // Performance bonus data (shows the additional revenue from performance bonuses) + const performanceBonusData = enabledScenarios.map(scenario => { + const monthlyData = this.calculator.monthlyData[scenario] || []; + const totalPerformanceBonus = monthlyData.reduce((sum, month) => { + // Calculate the bonus revenue (difference from standard share) + const standardRevenue = month.monthlyRevenue * inputs.servalaShare; + const actualServalaRevenue = month.servalaRevenue; + const bonusAmount = Math.max(0, standardRevenue - actualServalaRevenue); // CSP gets this as bonus + return sum + bonusAmount; + }, 0); + return totalPerformanceBonus; + }); + + this.charts.modelComparison.data.labels = comparisonLabels; + this.charts.modelComparison.data.datasets = [ + { + label: `Loan Model (${(inputs.loanInterestRate * 100).toFixed(1)}% fixed return)`, + data: loanModelData, + backgroundColor: '#ffc107', + borderColor: '#e0a800', borderWidth: 2 - }); - } + }, + { + label: 'Direct Investment (base return)', + data: directInvestmentData, + backgroundColor: enabledScenarios.map(scenario => colors[scenario] + '80'), + borderColor: enabledScenarios.map(scenario => colors[scenario]), + borderWidth: 2 + }, + { + label: 'Performance Bonus Impact', + data: performanceBonusData, + backgroundColor: enabledScenarios.map(scenario => colors[scenario] + '40'), + borderColor: enabledScenarios.map(scenario => colors[scenario]), + borderWidth: 2, + borderDash: [5, 5] + } + ]; this.charts.modelComparison.update(); + + // Update Performance Comparison Chart (ROI comparison for both models) + this.charts.performance.data.labels = comparisonLabels; + + // Calculate ROI for loan model (same for all scenarios) + const loanROI = (loanNetProfit / inputs.investmentAmount) * 100; + const loanROIData = enabledScenarios.map(() => loanROI); + + // Get ROI for direct investment (varies by scenario) + const directROIData = enabledScenarios.map(scenario => { + const result = this.calculator.results[scenario]; + return result ? result.roi : 0; + }); + + this.charts.performance.data.datasets = [ + { + label: `Loan Model ROI (${(inputs.loanInterestRate * 100).toFixed(1)}% fixed)`, + data: loanROIData, + backgroundColor: '#ffc107', + borderColor: '#e0a800', + borderWidth: 2 + }, + { + label: 'Direct Investment ROI', + data: directROIData, + backgroundColor: enabledScenarios.map(scenario => colors[scenario] + '80'), + borderColor: enabledScenarios.map(scenario => colors[scenario]), + borderWidth: 2 + } + ]; + + this.charts.performance.update(); } catch (error) { console.error('Error updating charts:', error); } } + + // Helper method to calculate loan payment + calculateLoanPayment(principal, annualRate, years) { + try { + const monthlyRate = annualRate / 12; + const numberOfPayments = years * 12; + + if (monthlyRate === 0) { + return principal / numberOfPayments; + } + + const monthlyPayment = principal * (monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / + (Math.pow(1 + monthlyRate, numberOfPayments) - 1); + + return monthlyPayment; + } catch (error) { + console.error('Error calculating loan payment:', error); + return 0; + } + } } \ No newline at end of file diff --git a/hub/services/templates/calculator/csp_roi_calculator.html b/hub/services/templates/calculator/csp_roi_calculator.html index d221826..31622d8 100644 --- a/hub/services/templates/calculator/csp_roi_calculator.html +++ b/hub/services/templates/calculator/csp_roi_calculator.html @@ -40,449 +40,275 @@ function toggleCollapsible(elementId) { window.ROICalculatorApp?.toggleCollapsib function resetCalculator() { window.ROICalculatorApp?.resetCalculator(); } function toggleInvestmentModel() { window.ROICalculatorApp?.toggleInvestmentModel(); } function logout() { window.ROICalculatorApp?.logout(); } + +// Manual toggle functions for collapse elements +function toggleAdvancedControls() { + const element = document.getElementById('advancedControls'); + const button = document.getElementById('advancedToggleBtn'); + + console.log('Toggling advanced controls, current classes:', element.className); + + if (element.style.display === 'none' || element.style.display === '') { + element.style.display = 'block'; + button.innerHTML = ' Less'; + console.log('Showing advanced controls'); + } else { + element.style.display = 'none'; + button.innerHTML = ' More'; + console.log('Hiding advanced controls'); + } +} + +function toggleDataCollapse() { + const element = document.getElementById('dataCollapse'); + const button = document.getElementById('dataToggleBtn'); + + console.log('Toggling data collapse, current style:', element.style.display); + + if (element.style.display === 'none' || element.style.display === '') { + element.style.display = 'block'; + button.classList.remove('collapsed'); + button.setAttribute('aria-expanded', 'true'); + console.log('Showing data collapse'); + } else { + element.style.display = 'none'; + button.classList.add('collapsed'); + button.setAttribute('aria-expanded', 'false'); + console.log('Hiding data collapse'); + } +} + +// Initialize collapse states +document.addEventListener('DOMContentLoaded', function() { + // Ensure both sections start collapsed + const advancedControls = document.getElementById('advancedControls'); + const dataCollapse = document.getElementById('dataCollapse'); + + if (advancedControls) { + advancedControls.style.display = 'none'; + } + if (dataCollapse) { + dataCollapse.style.display = 'none'; + } + + console.log('Collapse elements initialized as hidden'); +}); {% endblock %} {% block content %} -
-
- -
-
-
-

CSP ROI Calculator

-

Calculate potential returns from investing in Servala platform

+
+ +
+
+ +
+
+

CSP ROI Calculator

+ Real-time investment analysis
-
- - - - -
-
-
- -
- -
- -
-
-
- How the Calculator Works - -
-
-
-
-
Calculator Overview
-

This ROI calculator models your investment in the Servala platform with two distinct approaches. Choose between guaranteed fixed returns through lending, or performance-based returns through direct investment that rewards your sales capabilities.

- -
Key Parameters
-
-

Investment Model: Loan (3-7% fixed returns) vs Direct Investment (15-40% performance-based returns).

-

Investment Amount: Higher amounts unlock progressive scaling benefits - 500k = 1.0x, 1M = 1.5x, 2M = 2.0x performance.

-

Dynamic Grace Period: Larger investments get longer 100% revenue retention (6+ months based on investment size).

-

Performance Bonuses: Direct Investment CSPs earn up to 15% additional revenue share for exceeding sales targets.

-

Monthly Revenue per Instance: Recurring revenue from managed services (typically CHF 50-200 per instance).

-
- -
Investment Models
-
-

Loan Model: Lend capital at fixed interest (3-7% annually). Predictable monthly payments, lower risk, but capped returns.

-

Direct Investment: Invest in operations with revenue sharing. Progressive scaling, performance bonuses, and extended grace periods reward larger investments and active sales participation.

-
- -
Growth Scenarios
-
-

Conservative: Steady growth with low churn (2%), suitable for established markets.

-

Moderate: Balanced growth with moderate churn (3%), typical for competitive markets.

-

Aggressive: Rapid expansion with higher churn (5%), for high-growth strategies.

-

Each scenario has 4 growth phases with customizable instance acquisition rates in Advanced Parameters.

-
- -
Understanding Results
-
-

Net Position: Your financial position after accounting for initial investment (above zero = profitable).

-

ROI Progression: How your returns develop over time - shows when investment becomes profitable.

-

Performance Multiplier: How much your actual results exceed baseline expectations (1.0x = baseline, 1.5x = 50% better).

-

Model Comparison: Direct side-by-side comparison of loan vs direct investment returns for your specific scenario.

-

Investment Scaling: Larger investments unlock operational advantages - better customer acquisition and retention capabilities.

-
-
-
-
- - -
-

Investment Settings

- -
- -
- CHF + + +
+ +
+ +
+ CHF
-
- -
- CHF 100,000 - CHF 2,000,000 - - -
-
-
- Investment Impact - -
-
-
-

How Investment Amount Affects Growth

-

Higher investments enable better growth through increased marketing, infrastructure, and customer success capabilities. This affects instance acquisition rates and reduces churn.

- -

Mathematical Impact

-
    -
  • Instance Scaling Factor = √(Investment Amount / CHF 500,000)
  • -
  • Churn Reduction Factor = max(0.7, 1 - (Investment - CHF 500,000) / CHF 2,000,000 × 0.3)
  • -
  • New Instances per Month = Base Rate × Scaling Factor
  • -
  • Adjusted Churn Rate = Base Churn × Reduction Factor
  • -
- -

Example: CHF 1M investment = 1.41× more instances + 25% lower churn than CHF 500K base.

-
-
+
- -
- - + + + + +
- - -
- + + +
+
- + - +
- - Direct Investment: Performance-based returns with progressive scaling, bonuses up to 15%, and dynamic grace periods -
- - - - -
- -
- CHF + + +
+ +
+ min="20" max="200" step="5" value="50" onchange="updateCalculations()"> + CHF
-
- -
- CHF 20 - CHF 200 +
- -
- - -
- + + +
+ +
+
+ + +
+
+ + +
+
+ + +
- 10% - 40% (Direct Investment only)
- -
- - -
- + + +
+ +
+ + + Help + +
+
+ + +
+
+
+
CHF 0
+
Net Position
+
+
+
0%
+
ROI
+
- 0 - 24 months (100% revenue to CSP - Direct Investment only)
- - -
-

Growth Scenarios

- -
-
- - + + +
+
+ + -

Steady, predictable growth with minimal risk

- Churn: 2% | New instances: 50-150/month (customizable below) -
- -
-
- - + + +
+ + +
-

Balanced approach with moderate risk/reward

- Churn: 3% | New instances: 100-400/month (customizable below) -
- -
-
- - + + +
+ + +
-

Rapid expansion with higher risk/reward

- Churn: 5% | New instances: 200-800/month (customizable below) -
- - -
-
-
- Advanced Parameters - -
-
-
-
-

Customize growth phases and churn rates for each scenario. Changes apply immediately to calculations.

- - -
-
Conservative Scenario Parameters
- -
-
- - -
-
- -
-
- - - instances/month -
-
- - - instances/month -
-
-
-
- - - instances/month -
-
- - - instances/month -
-
+ + +
+
+
+ +
- - -
-
Moderate Scenario Parameters
- -
-
- - -
-
- -
-
- - - instances/month -
-
- - - instances/month -
-
-
-
- - - instances/month -
-
- - - instances/month -
-
+
+ +
- - -
-
Aggressive Scenario Parameters
- -
-
- - -
-
- -
-
- - - instances/month -
-
- - - instances/month -
-
-
-
- - - instances/month -
-
- - - instances/month -
-
+
+ +
- -
- +
+
+
+
+ +
+
+ + +
+ + + + +
+
+
+
+
+
+
CHF 0
+
Your Total Revenue
+
+
+
N/A
+
Break-Even Time
+
+
+
Direct Investment
+
Investment Model
+
+
+
3 Scenarios
+
Active Comparisons
@@ -490,153 +316,99 @@ function logout() { window.ROICalculatorApp?.logout(); }
- -
- -
-
- Calculating... -
-

Calculating scenarios...

-
- - -
-
-
-
CHF 0
-
- Net Position - -
+ +
+
+
+
+
ROI Progression Over Time
+

Investment profitability timeline - when you'll break even and achieve target returns

-
-
-
-
CHF 0
-
- Your Revenue - -
-
-
-
-
-
0%
-
- ROI Performance - -
-
-
-
-
-
N/A
-
- Break-Even - -
+
+
+
- -
-
-
-
ROI Progression Over Time
-

Shows when your investment becomes profitable (crosses zero line) and how returns develop over time.

- + +
+
+
+
+
Net Financial Position
+

Cumulative profit/loss over time

+
+
+
- -
-
-
-
Net Financial Position (Break-Even Analysis)
-

Your cumulative profit/loss over time. Above zero = profitable, below zero = recovering investment.

- +
+
+
+
Performance Comparison
+

ROI performance across growth scenarios

-
-
-
-
Investment Model Performance Comparison
-

Direct comparison of returns across growth scenarios, showing performance bonuses for direct investment.

- +
+
+
- -
-
-
-
Investment Model Comparison
-

Compare guaranteed returns from loan model vs performance-based returns from direct investment. Grace period highlighted to show advantage of aggressive sales during 100% revenue retention period.

- + +
+
+
+
+
Investment Model Comparison
+

Net profit comparison: Fixed loan returns vs. performance-based direct investment across scenarios

+
+
+
+
- -
-
-
-
Financial Performance Comparison
-

Detailed comparison of investment returns across growth scenarios. Direct Investment shows performance multipliers and grace period benefits.

-
- - - - - - - - - - - - - - - - -
Scenario & PerformanceModelBusiness ScaleTotal RevenueYour RevenueServala ShareROI & BonusesBreak-even
-
-
-
-
- - -
-
-
-
-
- Monthly Financial Flow Analysis - -
-
-
-
-

Month-by-month financial performance showing revenue distribution, performance bonuses, and progress toward break-even.

+ +
+
+
+
+

+ +

+
+
+ +
Scenario Performance Summary
+
+ + + + + + + + + + + + + + + + +
ScenarioModelFinal ScaleTotal RevenueYour RevenueServala ShareROI & BonusesBreak-even
+
+ + +
Monthly Financial Flow
@@ -665,5 +437,4 @@ function logout() { window.ROICalculatorApp?.logout(); } -{% endblock %} - +{% endblock %} \ No newline at end of file diff --git a/hub/services/templates/calculator/roi_calculator_help.html b/hub/services/templates/calculator/roi_calculator_help.html new file mode 100644 index 0000000..e79ccec --- /dev/null +++ b/hub/services/templates/calculator/roi_calculator_help.html @@ -0,0 +1,399 @@ +{% extends 'base.html' %} +{% load static %} + +{% block title %}ROI Calculator Help - Servala Investment Models{% endblock %} + +{% block extra_css %} + + +{% endblock %} + +{% block content %} +
+
+
+
+
+

ROI Calculator Help

+

Understanding Servala's Investment Models

+
+ +
+
+
+ +
+ + +
+ +
+

Overview

+

The ROI Calculator helps you analyze potential returns from partnering with Servala through two distinct investment models:

+ +
+
+
+
Loan Model
+

3-7% Annual Returns

+

Fixed interest lending with guaranteed monthly payments. Low risk, predictable returns.

+
+
+
+
+
Direct Investment
+

15-40% Potential Returns

+

Performance-based revenue sharing with scaling bonuses and extended grace periods.

+
+
+
+
+ + +
+

Loan Model (3-7% Returns)

+ +

How It Works

+

You lend capital to Servala at a fixed interest rate, receiving guaranteed monthly payments regardless of business performance.

+ +

Key Features:

+
    +
  • Investment Range: CHF 100,000 - CHF 2,000,000
  • +
  • Interest Rates: Typically 3-7% annually
  • +
  • Payment Schedule: Fixed monthly payments
  • +
  • Risk Level: Very low - contractually guaranteed
  • +
  • Break-even: Typically 12-18 months
  • +
+ +

Payment Calculation:

+

Monthly payments use standard amortization:

+ Monthly Payment = P × [r(1+r)^n] / [(1+r)^n - 1] +

Where P = Principal, r = Monthly rate, n = Total payments

+ +

Best For:

+
    +
  • CSPs prioritizing predictable, guaranteed returns
  • +
  • Limited capacity for active sales involvement
  • +
  • Conservative risk tolerance
  • +
  • Need for steady cash flow
  • +
+
+ + +
+

Direct Investment (15-40% Returns)

+ +

How It Works

+

Invest directly in Servala's operations and earn returns through revenue sharing that scales with performance and investment size.

+ +

Progressive Scaling Benefits:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Investment AmountScaling FactorCustomer AcquisitionChurn Reduction
CHF 500,0001.0xBaseline0%
CHF 1,000,0001.5x+50% vs baseline20%
CHF 2,000,0002.0x+100% vs baseline40%
+
+ +

Grace Period Benefits:

+

Larger investments get longer periods of 100% revenue retention:

+
    +
  • CHF 500,000: 6 months grace period
  • +
  • CHF 1,000,000: 8 months grace period
  • +
  • CHF 2,000,000: 12 months grace period
  • +
+ +

Performance Bonuses:

+

CSPs exceeding 110% of baseline performance receive up to 15% additional revenue share.

+ +

Best For:

+
    +
  • CSPs wanting to maximize return potential
  • +
  • Ability to actively promote managed services
  • +
  • Moderate to high risk tolerance
  • +
  • Longer investment horizons (2-5 years)
  • +
+
+ + +
+

Model Comparison

+ +

CHF 1,000,000 Investment Over 3 Years Example:

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
ModelRisk LevelExpected ROIBreak-evenTotal Return
Loan Model (5%)Low8% over 3 years12-18 monthsCHF 80,000 profit
Direct InvestmentModerate-High35% over 3 years15-24 monthsCHF 540,000+ profit
+
+
+ + +
+

Using the Calculator

+ +

Key Parameters:

+
+
+
Investment Settings:
+
    +
  • Investment Amount: CHF 100K - 2M
  • +
  • Timeframe: 1-5 years
  • +
  • Investment Model: Loan vs Direct
  • +
  • Revenue/Instance: Monthly income per managed service
  • +
+
+
+
Advanced Controls:
+
    +
  • Loan Rate: Annual interest (3-8%)
  • +
  • Servala Share: Revenue split percentage
  • +
  • Grace Period: 100% revenue retention period
  • +
  • Churn Rates: Customer loss percentages
  • +
+
+
+
+ + +
+

Growth Scenarios

+ +
+
+
+
+
Safe (Conservative)
+
+
+

2% monthly churn

+

Steady growth: 50-150 new instances/month

+

Best for: Established markets, risk-averse CSPs

+
+
+
+
+
+
+
Balanced (Moderate)
+
+
+

3% monthly churn

+

Balanced growth: 100-400 new instances/month

+

Best for: Competitive markets, balanced approach

+
+
+
+
+
+
+
Fast (Aggressive)
+
+
+

5% monthly churn

+

Rapid growth: 200-800 new instances/month

+

Best for: High-growth strategies, active sales

+
+
+
+
+
+ + +
+

Understanding the Charts

+ +

1. ROI Progression Over Time

+

Shows when your investment becomes profitable (crosses zero line) and how returns develop month by month.

+ +

2. Net Financial Position

+

Your cumulative profit/loss over time. Above zero = profitable, below zero = still recovering initial investment.

+ +

3. Performance Comparison

+

ROI percentages across different growth scenarios, helping you understand best and worst-case outcomes.

+ +

4. Investment Model Comparison

+

Direct comparison of total returns between loan and direct investment models for your specific parameters.

+
+ + +
+

Frequently Asked Questions

+ +

What does "Net Position" mean?

+

Your final financial position: total CSP revenue minus your initial investment. Positive values indicate profitable investment.

+ +

How are performance bonuses calculated?

+

Bonuses apply when you exceed 110% of baseline instance growth, providing up to 15% additional revenue share.

+ +

Can I switch between models?

+

Model changes require mutual agreement and may involve restructuring. Generally evaluated at renewal periods.

+ +

What happens during the grace period?

+

You keep 100% of revenue during this period. Grace periods are longer for larger investments (6-12 months).

+ +

How accurate are the projections?

+

Projections are based on industry benchmarks and Servala's historical data, but actual results may vary based on market conditions and your sales performance.

+
+ + +
+
+
+{% endblock %} \ No newline at end of file diff --git a/hub/services/urls.py b/hub/services/urls.py index 2f098ea..b19ab8a 100644 --- a/hub/services/urls.py +++ b/hub/services/urls.py @@ -36,4 +36,9 @@ urlpatterns = [ views.csp_roi_calculator, name="csp_roi_calculator", ), + path( + "csp-roi-calculator/help/", + views.roi_calculator_help, + name="roi_calculator_help", + ), ] diff --git a/hub/services/views/calculator.py b/hub/services/views/calculator.py index 6834b9d..85b40ef 100644 --- a/hub/services/views/calculator.py +++ b/hub/services/views/calculator.py @@ -53,3 +53,16 @@ def csp_roi_calculator(request): } return render(request, "calculator/csp_roi_calculator.html", context) + + +def roi_calculator_help(request): + """ + ROI Calculator Help page - Shows detailed information about investment models + This page is publicly accessible without password protection + """ + context = { + "page_title": "ROI Calculator Help - Investment Models", + "page_description": "Understand Servala's Loan and Direct Investment models with detailed explanations and examples", + } + + return render(request, "calculator/roi_calculator_help.html", context)