245 lines
7.3 KiB
Python
245 lines
7.3 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
GPS Pricing Calculator
|
||
Arizona Computer Guru - MSP Pricing Tool
|
||
"""
|
||
|
||
# Pricing Constants
|
||
GPS_TIERS = {
|
||
'basic': {
|
||
'name': 'GPS-BASIC: Essential Protection',
|
||
'price_per_endpoint': 19,
|
||
'features': [
|
||
'24/7 System Monitoring & Alerting',
|
||
'Automated Patch Management',
|
||
'Remote Management & Support',
|
||
'Endpoint Security (Antivirus)',
|
||
'Monthly Health Reports'
|
||
]
|
||
},
|
||
'pro': {
|
||
'name': 'GPS-PRO: Business Protection (MOST POPULAR)',
|
||
'price_per_endpoint': 26,
|
||
'features': [
|
||
'All GPS-Basic features',
|
||
'Advanced EDR',
|
||
'Email Security',
|
||
'Dark Web Monitoring',
|
||
'Security Training',
|
||
'Cloud Monitoring (M365/Google)'
|
||
]
|
||
},
|
||
'advanced': {
|
||
'name': 'GPS-ADVANCED: Maximum Protection',
|
||
'price_per_endpoint': 39,
|
||
'features': [
|
||
'All GPS-Pro features',
|
||
'Advanced Threat Intelligence',
|
||
'Ransomware Rollback',
|
||
'Compliance Tools (HIPAA, PCI-DSS, SOC 2)',
|
||
'Priority Response',
|
||
'Enhanced SaaS Backup'
|
||
]
|
||
}
|
||
}
|
||
|
||
EQUIPMENT_PACK = {
|
||
'base_price': 25, # Up to 10 devices
|
||
'base_devices': 10,
|
||
'additional_device_price': 3
|
||
}
|
||
|
||
SUPPORT_PLANS = {
|
||
'essential': {
|
||
'name': 'Essential Support',
|
||
'price': 200,
|
||
'hours_included': 2,
|
||
'effective_rate': 100,
|
||
'response_time': 'Next business day',
|
||
'coverage': 'Business hours'
|
||
},
|
||
'standard': {
|
||
'name': 'Standard Support (MOST POPULAR)',
|
||
'price': 380,
|
||
'hours_included': 4,
|
||
'effective_rate': 95,
|
||
'response_time': '8-hour guarantee',
|
||
'coverage': 'Business hours'
|
||
},
|
||
'premium': {
|
||
'name': 'Premium Support',
|
||
'price': 540,
|
||
'hours_included': 6,
|
||
'effective_rate': 90,
|
||
'response_time': '4-hour guarantee',
|
||
'coverage': 'After-hours emergency'
|
||
},
|
||
'priority': {
|
||
'name': 'Priority Support',
|
||
'price': 850,
|
||
'hours_included': 10,
|
||
'effective_rate': 85,
|
||
'response_time': '2-hour guarantee',
|
||
'coverage': '24/7 emergency'
|
||
}
|
||
}
|
||
|
||
BLOCK_TIME = {
|
||
'10hr': {'hours': 10, 'price': 1500, 'rate': 150},
|
||
'20hr': {'hours': 20, 'price': 2600, 'rate': 130},
|
||
'30hr': {'hours': 30, 'price': 3000, 'rate': 100}
|
||
}
|
||
|
||
OVERAGE_RATE = 175
|
||
|
||
|
||
def calculate_equipment_pack(num_devices):
|
||
"""Calculate equipment pack pricing"""
|
||
if num_devices == 0:
|
||
return 0
|
||
if num_devices <= EQUIPMENT_PACK['base_devices']:
|
||
return EQUIPMENT_PACK['base_price']
|
||
else:
|
||
additional = num_devices - EQUIPMENT_PACK['base_devices']
|
||
return EQUIPMENT_PACK['base_price'] + (additional * EQUIPMENT_PACK['additional_device_price'])
|
||
|
||
|
||
def calculate_gps_quote(endpoints, tier='pro', equipment_devices=0, support_plan=None, block_time=None):
|
||
"""
|
||
Calculate a complete GPS quote
|
||
|
||
Args:
|
||
endpoints: Number of endpoints
|
||
tier: GPS tier (basic, pro, advanced)
|
||
equipment_devices: Number of equipment devices
|
||
support_plan: Support plan key (essential, standard, premium, priority)
|
||
block_time: Block time key (10hr, 20hr, 30hr)
|
||
|
||
Returns:
|
||
dict with pricing breakdown
|
||
"""
|
||
# GPS Monitoring
|
||
gps_tier_data = GPS_TIERS.get(tier, GPS_TIERS['pro'])
|
||
gps_cost = endpoints * gps_tier_data['price_per_endpoint']
|
||
|
||
# Equipment Pack
|
||
equipment_cost = calculate_equipment_pack(equipment_devices)
|
||
|
||
# Support Plan
|
||
support_cost = 0
|
||
support_hours = 0
|
||
support_data = None
|
||
if support_plan:
|
||
support_data = SUPPORT_PLANS.get(support_plan)
|
||
if support_data:
|
||
support_cost = support_data['price']
|
||
support_hours = support_data['hours_included']
|
||
|
||
# Block Time (one-time or as needed)
|
||
block_cost = 0
|
||
block_hours = 0
|
||
if block_time:
|
||
block_data = BLOCK_TIME.get(block_time)
|
||
if block_data:
|
||
block_cost = block_data['price']
|
||
block_hours = block_data['hours']
|
||
|
||
# Calculate totals
|
||
monthly_total = gps_cost + equipment_cost + support_cost
|
||
annual_total = monthly_total * 12
|
||
|
||
# Per endpoint cost
|
||
total_endpoints = endpoints + equipment_devices
|
||
per_endpoint_cost = monthly_total / total_endpoints if total_endpoints > 0 else 0
|
||
|
||
return {
|
||
'gps': {
|
||
'tier': gps_tier_data['name'],
|
||
'endpoints': endpoints,
|
||
'price_per_endpoint': gps_tier_data['price_per_endpoint'],
|
||
'monthly_cost': gps_cost
|
||
},
|
||
'equipment': {
|
||
'devices': equipment_devices,
|
||
'monthly_cost': equipment_cost
|
||
},
|
||
'support': {
|
||
'plan': support_data['name'] if support_data else 'None',
|
||
'monthly_cost': support_cost,
|
||
'hours_included': support_hours,
|
||
'effective_rate': support_data['effective_rate'] if support_data else 0
|
||
},
|
||
'block_time': {
|
||
'hours': block_hours,
|
||
'cost': block_cost
|
||
},
|
||
'totals': {
|
||
'monthly': monthly_total,
|
||
'annual': annual_total,
|
||
'per_endpoint': round(per_endpoint_cost, 2)
|
||
}
|
||
}
|
||
|
||
|
||
def print_quote(quote):
|
||
"""Print formatted quote"""
|
||
print("\n" + "="*60)
|
||
print("GPS PRICING QUOTE")
|
||
print("="*60)
|
||
|
||
print(f"\nGPS Monitoring: {quote['gps']['tier']}")
|
||
print(f" {quote['gps']['endpoints']} endpoints × ${quote['gps']['price_per_endpoint']}/month = ${quote['gps']['monthly_cost']}")
|
||
|
||
if quote['equipment']['devices'] > 0:
|
||
print(f"\nEquipment Pack:")
|
||
print(f" {quote['equipment']['devices']} devices = ${quote['equipment']['monthly_cost']}/month")
|
||
|
||
if quote['support']['monthly_cost'] > 0:
|
||
print(f"\nSupport Plan: {quote['support']['plan']}")
|
||
print(f" ${quote['support']['monthly_cost']}/month ({quote['support']['hours_included']} hours included)")
|
||
print(f" Effective rate: ${quote['support']['effective_rate']}/hour")
|
||
|
||
if quote['block_time']['hours'] > 0:
|
||
print(f"\nPrepaid Block Time:")
|
||
print(f" {quote['block_time']['hours']} hours = ${quote['block_time']['cost']} (never expires)")
|
||
|
||
print("\n" + "-"*60)
|
||
print(f"MONTHLY TOTAL: ${quote['totals']['monthly']}")
|
||
print(f"ANNUAL TOTAL: ${quote['totals']['annual']}")
|
||
print(f"Per Endpoint/Device Cost: ${quote['totals']['per_endpoint']}/month")
|
||
print("="*60 + "\n")
|
||
|
||
|
||
# Example usage
|
||
if __name__ == "__main__":
|
||
print("GPS PRICING CALCULATOR - Arizona Computer Guru")
|
||
print("="*60)
|
||
|
||
# Example 1: Small Office
|
||
print("\nExample 1: Small Office (10 endpoints + 4 devices)")
|
||
quote1 = calculate_gps_quote(
|
||
endpoints=10,
|
||
tier='pro',
|
||
equipment_devices=4,
|
||
support_plan='standard'
|
||
)
|
||
print_quote(quote1)
|
||
|
||
# Example 2: Growing Business
|
||
print("\nExample 2: Growing Business (22 endpoints)")
|
||
quote2 = calculate_gps_quote(
|
||
endpoints=22,
|
||
tier='pro',
|
||
support_plan='premium'
|
||
)
|
||
print_quote(quote2)
|
||
|
||
# Example 3: Established Company
|
||
print("\nExample 3: Established Company (42 endpoints)")
|
||
quote3 = calculate_gps_quote(
|
||
endpoints=42,
|
||
tier='pro',
|
||
support_plan='priority'
|
||
)
|
||
print_quote(quote3)
|