diff --git a/hub/services/templates/calculator/csp_roi_calculator.html b/hub/services/templates/calculator/csp_roi_calculator.html index d50dd2f..4a88412 100644 --- a/hub/services/templates/calculator/csp_roi_calculator.html +++ b/hub/services/templates/calculator/csp_roi_calculator.html @@ -334,7 +334,7 @@

Steady, predictable growth with minimal risk

- Churn: 2% | New instances: 50-200/month + Churn: 2% | New instances: 50-150/month (customizable below)
@@ -345,7 +345,7 @@

Balanced approach with moderate risk/reward

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

Rapid expansion with higher risk/reward

- Churn: 5% | New instances: 200-800/month + Churn: 5% | New instances: 200-800/month (customizable below) @@ -369,7 +369,154 @@
- +

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 +
+
+
+ +
+ +
@@ -1039,6 +1186,69 @@ function updateCalculations() { } } +// Advanced parameter functions +function updateScenarioChurn(scenarioKey, churnRate) { + calculator.scenarios[scenarioKey].churnRate = parseFloat(churnRate) / 100; + updateCalculations(); +} + +function updateScenarioPhase(scenarioKey, phaseIndex, newInstancesPerMonth) { + calculator.scenarios[scenarioKey].phases[phaseIndex].newInstancesPerMonth = parseInt(newInstancesPerMonth); + updateCalculations(); +} + +function resetAdvancedParameters() { + if (confirm('Reset all advanced parameters to default values?')) { + // Reset Conservative + calculator.scenarios.conservative.churnRate = 0.02; + calculator.scenarios.conservative.phases = [ + { months: 6, newInstancesPerMonth: 50 }, + { months: 6, newInstancesPerMonth: 75 }, + { months: 12, newInstancesPerMonth: 100 }, + { months: 12, newInstancesPerMonth: 150 } + ]; + + // Reset Moderate + calculator.scenarios.moderate.churnRate = 0.03; + calculator.scenarios.moderate.phases = [ + { months: 6, newInstancesPerMonth: 100 }, + { months: 6, newInstancesPerMonth: 200 }, + { months: 12, newInstancesPerMonth: 300 }, + { months: 12, newInstancesPerMonth: 400 } + ]; + + // Reset Aggressive + calculator.scenarios.aggressive.churnRate = 0.05; + calculator.scenarios.aggressive.phases = [ + { months: 6, newInstancesPerMonth: 200 }, + { months: 6, newInstancesPerMonth: 400 }, + { months: 12, newInstancesPerMonth: 600 }, + { months: 12, newInstancesPerMonth: 800 } + ]; + + // Update UI inputs + document.getElementById('conservative-churn').value = '2.0'; + document.getElementById('conservative-phase-0').value = '50'; + document.getElementById('conservative-phase-1').value = '75'; + document.getElementById('conservative-phase-2').value = '100'; + document.getElementById('conservative-phase-3').value = '150'; + + document.getElementById('moderate-churn').value = '3.0'; + document.getElementById('moderate-phase-0').value = '100'; + document.getElementById('moderate-phase-1').value = '200'; + document.getElementById('moderate-phase-2').value = '300'; + document.getElementById('moderate-phase-3').value = '400'; + + document.getElementById('aggressive-churn').value = '5.0'; + document.getElementById('aggressive-phase-0').value = '200'; + document.getElementById('aggressive-phase-1').value = '400'; + document.getElementById('aggressive-phase-2').value = '600'; + document.getElementById('aggressive-phase-3').value = '800'; + + updateCalculations(); + } +} + // Scenario management function toggleScenario(scenarioKey) { const enabled = document.getElementById(scenarioKey + '-enabled').checked; @@ -1318,7 +1528,10 @@ function resetCalculator() { document.getElementById(scenario + '-card').classList.remove('disabled'); }); - // Recalculate + // Reset advanced parameters + resetAdvancedParameters(); + + // Recalculate (this will be called by resetAdvancedParameters, but we ensure it happens) updateCalculations(); } }