petter2025 commited on
Commit
b0403f2
·
verified ·
1 Parent(s): c5aff2a

Create business_logic.py

Browse files
Files changed (1) hide show
  1. utils/business_logic.py +234 -0
utils/business_logic.py ADDED
@@ -0,0 +1,234 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Business Value Demonstration
3
+ ROI Calculator, Tier Pricing, Upgrade Paths
4
+ """
5
+
6
+ from typing import Dict, List
7
+
8
+ class BusinessValueCalculator:
9
+ """Calculates business value and ROI for ARF tiers"""
10
+
11
+ def __init__(self):
12
+ # Industry benchmarks
13
+ self.benchmarks = {
14
+ "incident_cost": 100000, # Average incident cost
15
+ "incident_reduction": {
16
+ "oss": 0.0,
17
+ "trial": 0.5,
18
+ "starter": 0.7,
19
+ "professional": 0.85,
20
+ "enterprise": 0.92
21
+ },
22
+ "time_savings_minutes": 15, # Minutes saved per decision
23
+ "decisions_per_day": 20,
24
+ "engineer_cost_hourly": 150, # $/hour
25
+ "operating_days": 250, # Business days per year
26
+ "team_size": {
27
+ "oss": 1,
28
+ "starter": 5,
29
+ "professional": 15,
30
+ "enterprise": 50
31
+ }
32
+ }
33
+
34
+ # Tier pricing
35
+ self.tier_pricing = {
36
+ "oss": 0,
37
+ "starter": 2000,
38
+ "professional": 5000,
39
+ "enterprise": 15000
40
+ }
41
+
42
+ # Feature comparison
43
+ self.feature_comparison = {
44
+ "oss": {
45
+ "name": "OSS Edition",
46
+ "price": "$0",
47
+ "enforcement": "Advisory Only",
48
+ "mechanical_gates": "❌ None",
49
+ "approval_workflows": "❌ Manual",
50
+ "audit_trail": "❌ None",
51
+ "support": "Community",
52
+ "sla": "None",
53
+ "best_for": "Evaluation"
54
+ },
55
+ "starter": {
56
+ "name": "Starter",
57
+ "price": "$2,000/mo",
58
+ "enforcement": "Mechanical Gates",
59
+ "mechanical_gates": "✅ 3 Gates",
60
+ "approval_workflows": "✅ Basic",
61
+ "audit_trail": "✅ 30 days",
62
+ "support": "Business Hours",
63
+ "sla": "99.5%",
64
+ "best_for": "Small Teams"
65
+ },
66
+ "professional": {
67
+ "name": "Professional",
68
+ "price": "$5,000/mo",
69
+ "enforcement": "Advanced Gates",
70
+ "mechanical_gates": "✅ 5 Gates",
71
+ "approval_workflows": "✅ Advanced",
72
+ "audit_trail": "✅ 1 year",
73
+ "support": "24/7",
74
+ "sla": "99.9%",
75
+ "best_for": "Growing Companies"
76
+ },
77
+ "enterprise": {
78
+ "name": "Enterprise",
79
+ "price": "$15,000/mo",
80
+ "enforcement": "Full Mechanical",
81
+ "mechanical_gates": "✅ 7 Gates",
82
+ "approval_workflows": "✅ Custom",
83
+ "audit_trail": "✅ Unlimited",
84
+ "support": "Dedicated",
85
+ "sla": "99.99%",
86
+ "best_for": "Enterprise Scale"
87
+ }
88
+ }
89
+
90
+ def calculate_roi(self, current_tier: str, target_tier: str) -> Dict:
91
+ """Calculate ROI for upgrade"""
92
+ current_price = self.tier_pricing.get(current_tier, 0)
93
+ target_price = self.tier_pricing.get(target_tier, 0)
94
+
95
+ # Calculate incident cost savings
96
+ current_reduction = self.benchmarks["incident_reduction"].get(current_tier, 0)
97
+ target_reduction = self.benchmarks["incident_reduction"].get(target_tier, 0)
98
+
99
+ incident_savings = self.benchmarks["incident_cost"] * (target_reduction - current_reduction) * 12
100
+
101
+ # Calculate time savings
102
+ team_size_current = self.benchmarks["team_size"].get(current_tier, 1)
103
+ team_size_target = self.benchmarks["team_size"].get(target_tier, 1)
104
+
105
+ avg_team_size = (team_size_current + team_size_target) / 2
106
+
107
+ time_savings = (
108
+ self.benchmarks["time_savings_minutes"] / 60 * # Hours per decision
109
+ self.benchmarks["decisions_per_day"] * # Decisions per day
110
+ self.benchmarks["operating_days"] * # Days per year
111
+ self.benchmarks["engineer_cost_hourly"] * # Cost per hour
112
+ avg_team_size # Team size
113
+ )
114
+
115
+ # Total annual savings
116
+ annual_savings = incident_savings + time_savings
117
+
118
+ # Calculate ROI
119
+ price_difference = target_price - current_price
120
+ annual_price_difference = price_difference * 12
121
+
122
+ if annual_savings > 0:
123
+ roi_months = (annual_price_difference / annual_savings) * 12
124
+ else:
125
+ roi_months = 999
126
+
127
+ # Payback period
128
+ if annual_savings > annual_price_difference:
129
+ payback_months = (annual_price_difference / annual_savings) * 12
130
+ else:
131
+ payback_months = roi_months
132
+
133
+ return {
134
+ "current_tier": current_tier.upper(),
135
+ "target_tier": target_tier.upper(),
136
+ "annual_savings": f"${annual_savings:,.0f}",
137
+ "incident_savings": f"${incident_savings:,.0f}",
138
+ "time_savings": f"${time_savings:,.0f}",
139
+ "monthly_investment": f"${price_difference:,.0f}",
140
+ "roi_months": f"{roi_months:.1f}",
141
+ "payback_months": f"{payback_months:.1f}",
142
+ "annual_roi": f"{(annual_savings / max(annual_price_difference, 1)) * 100:.0f}%"
143
+ }
144
+
145
+ def get_tier_comparison(self) -> List[Dict]:
146
+ """Get tier comparison matrix"""
147
+ return [self.feature_comparison[tier] for tier in ["oss", "starter", "professional", "enterprise"]]
148
+
149
+ def calculate_enterprise_value(self, company_size: int = 100, incidents_per_year: int = 5) -> Dict:
150
+ """Calculate enterprise-specific value"""
151
+ # Incident cost avoidance
152
+ incident_avoidance = incidents_per_year * self.benchmarks["incident_cost"] * self.benchmarks["incident_reduction"]["enterprise"]
153
+
154
+ # Productivity savings
155
+ productivity_savings = (
156
+ company_size *
157
+ self.benchmarks["time_savings_minutes"] / 60 *
158
+ self.benchmarks["decisions_per_day"] *
159
+ self.benchmarks["operating_days"] *
160
+ self.benchmarks["engineer_cost_hourly"]
161
+ )
162
+
163
+ # Compliance value (estimated)
164
+ compliance_value = 500000 # Estimated value of compliance automation
165
+
166
+ total_value = incident_avoidance + productivity_savings + compliance_value
167
+ enterprise_cost = self.tier_pricing["enterprise"] * 12
168
+
169
+ return {
170
+ "company_size": company_size,
171
+ "incidents_prevented": incidents_per_year * self.benchmarks["incident_reduction"]["enterprise"],
172
+ "incident_avoidance": f"${incident_avoidance:,.0f}",
173
+ "productivity_savings": f"${productivity_savings:,.0f}",
174
+ "compliance_value": f"${compliance_value:,.0f}",
175
+ "total_annual_value": f"${total_value:,.0f}",
176
+ "enterprise_cost": f"${enterprise_cost:,.0f}",
177
+ "value_ratio": f"{total_value / enterprise_cost:.1f}x",
178
+ "monthly_roi": f"${(total_value - enterprise_cost) / 12:,.0f}"
179
+ }
180
+
181
+ def generate_upgrade_path(self, current_tier: str) -> List[Dict]:
182
+ """Generate upgrade path from current tier"""
183
+ tiers = ["oss", "starter", "professional", "enterprise"]
184
+
185
+ try:
186
+ current_index = tiers.index(current_tier)
187
+ except ValueError:
188
+ current_index = 0
189
+
190
+ path = []
191
+ for i in range(current_index + 1, len(tiers)):
192
+ target_tier = tiers[i]
193
+ roi_data = self.calculate_roi(current_tier, target_tier)
194
+
195
+ path.append({
196
+ "from": self.feature_comparison[current_tier]["name"],
197
+ "to": self.feature_comparison[target_tier]["name"],
198
+ "price_increase": f"${self.tier_pricing[target_tier] - self.tier_pricing[current_tier]:,.0f}/mo",
199
+ "annual_savings": roi_data["annual_savings"],
200
+ "payback_period": roi_data["payback_months"] + " months",
201
+ "key_features": self._get_upgrade_features(current_tier, target_tier)
202
+ })
203
+
204
+ return path
205
+
206
+ def _get_upgrade_features(self, from_tier: str, to_tier: str) -> List[str]:
207
+ """Get key features gained in upgrade"""
208
+ features = {
209
+ "oss→starter": [
210
+ "Mechanical gates (3 gates)",
211
+ "Basic approval workflows",
212
+ "30-day audit trail",
213
+ "Business hours support"
214
+ ],
215
+ "starter→professional": [
216
+ "Advanced gates (5 gates)",
217
+ "Custom approval workflows",
218
+ "1-year audit trail",
219
+ "24/7 support",
220
+ "99.9% SLA"
221
+ ],
222
+ "professional→enterprise": [
223
+ "Full mechanical gates (7 gates)",
224
+ "Custom gate development",
225
+ "Unlimited audit trail",
226
+ "Dedicated support engineer",
227
+ "99.99% SLA",
228
+ "On-prem deployment",
229
+ "SOC 2 compliance automation"
230
+ ]
231
+ }
232
+
233
+ key = f"{from_tier}→{to_tier}"
234
+ return features.get(key, ["Enhanced features and support"])