GreenPlusbyGXS / web /backend /python /ewaste_analyzer.py
gaialive's picture
Upload 136 files
19bd8b9 verified
# FILE: web/backend/python/ewaste_analyzer.py
import sys
import json
from datetime import datetime
# --- FULL DATABASE AND MULTIPLIERS (FROM YOUR JS UTILITY) ---
device_database = {
'smartphones': {
'brands': {
'Apple': {
'models': {
'iPhone 15 Pro Max': {'basePrice': 800, 'releaseYear': 2023},
'iPhone 15 Pro': {'basePrice': 700, 'releaseYear': 2023},
'iPhone 15': {'basePrice': 500, 'releaseYear': 2023},
'iPhone 14 Pro Max': {'basePrice': 650, 'releaseYear': 2022},
'iPhone 14 Pro': {'basePrice': 550, 'releaseYear': 2022},
'iPhone 14': {'basePrice': 400, 'releaseYear': 2022},
'iPhone 13 Pro Max': {'basePrice': 500, 'releaseYear': 2021},
'iPhone 13 Pro': {'basePrice': 450, 'releaseYear': 2021},
'iPhone 13': {'basePrice': 350, 'releaseYear': 2021},
'iPhone 12 Pro Max': {'basePrice': 400, 'releaseYear': 2020},
'iPhone 12 Pro': {'basePrice': 350, 'releaseYear': 2020},
'iPhone 12': {'basePrice': 280, 'releaseYear': 2020},
'iPhone 11 Pro Max': {'basePrice': 300, 'releaseYear': 2019},
'iPhone 11 Pro': {'basePrice': 250, 'releaseYear': 2019},
'iPhone 11': {'basePrice': 200, 'releaseYear': 2019},
'iPhone XS Max': {'basePrice': 200, 'releaseYear': 2018},
'iPhone XS': {'basePrice': 180, 'releaseYear': 2018},
'iPhone XR': {'basePrice': 150, 'releaseYear': 2018},
'iPhone X': {'basePrice': 120, 'releaseYear': 2017},
'iPhone 8 Plus': {'basePrice': 100, 'releaseYear': 2017},
'iPhone 8': {'basePrice': 80, 'releaseYear': 2017},
'iPhone 7 Plus': {'basePrice': 70, 'releaseYear': 2016},
'iPhone 7': {'basePrice': 50, 'releaseYear': 2016}
}
},
'Samsung': {
'models': {
'Galaxy S24 Ultra': {'basePrice': 600, 'releaseYear': 2024},
'Galaxy S24+': {'basePrice': 500, 'releaseYear': 2024},
'Galaxy S24': {'basePrice': 400, 'releaseYear': 2024},
'Galaxy S23 Ultra': {'basePrice': 500, 'releaseYear': 2023},
'Galaxy S23+': {'basePrice': 400, 'releaseYear': 2023},
'Galaxy S23': {'basePrice': 320, 'releaseYear': 2023},
'Galaxy S22 Ultra': {'basePrice': 400, 'releaseYear': 2022},
'Galaxy S22+': {'basePrice': 320, 'releaseYear': 2022},
'Galaxy S22': {'basePrice': 250, 'releaseYear': 2022},
'Galaxy S21 Ultra': {'basePrice': 350, 'releaseYear': 2021},
'Galaxy S21+': {'basePrice': 280, 'releaseYear': 2021},
'Galaxy S21': {'basePrice': 220, 'releaseYear': 2021},
'Galaxy Note 20 Ultra': {'basePrice': 300, 'releaseYear': 2020},
'Galaxy Note 20': {'basePrice': 250, 'releaseYear': 2020},
'Galaxy S20 Ultra': {'basePrice': 280, 'releaseYear': 2020},
'Galaxy S20+': {'basePrice': 220, 'releaseYear': 2020},
'Galaxy S20': {'basePrice': 180, 'releaseYear': 2020},
'Galaxy Note 10+': {'basePrice': 200, 'releaseYear': 2019},
'Galaxy Note 10': {'basePrice': 170, 'releaseYear': 2019},
'Galaxy S10+': {'basePrice': 150, 'releaseYear': 2019},
'Galaxy S10': {'basePrice': 120, 'releaseYear': 2019}
}
},
'Google': {
'models': {
'Pixel 8 Pro': {'basePrice': 450, 'releaseYear': 2023},
'Pixel 8': {'basePrice': 350, 'releaseYear': 2023},
'Pixel 7 Pro': {'basePrice': 350, 'releaseYear': 2022},
'Pixel 7': {'basePrice': 280, 'releaseYear': 2022},
'Pixel 6 Pro': {'basePrice': 280, 'releaseYear': 2021},
'Pixel 6': {'basePrice': 220, 'releaseYear': 2021},
'Pixel 5': {'basePrice': 150, 'releaseYear': 2020},
'Pixel 4 XL': {'basePrice': 120, 'releaseYear': 2019},
'Pixel 4': {'basePrice': 100, 'releaseYear': 2019}
}
},
'OnePlus': {
'models': {
'OnePlus 12': {'basePrice': 400, 'releaseYear': 2024},
'OnePlus 11': {'basePrice': 320, 'releaseYear': 2023},
'OnePlus 10 Pro': {'basePrice': 280, 'releaseYear': 2022},
'OnePlus 9 Pro': {'basePrice': 220, 'releaseYear': 2021},
'OnePlus 9': {'basePrice': 180, 'releaseYear': 2021},
'OnePlus 8 Pro': {'basePrice': 150, 'releaseYear': 2020},
'OnePlus 8': {'basePrice': 120, 'releaseYear': 2020}
}
}
}
},
'laptops': {
'brands': {
'Apple': {
'models': {
'MacBook Pro 16" M3': {'basePrice': 1800, 'releaseYear': 2023},
'MacBook Pro 14" M3': {'basePrice': 1400, 'releaseYear': 2023},
'MacBook Air M3': {'basePrice': 900, 'releaseYear': 2024},
'MacBook Pro 16" M2': {'basePrice': 1500, 'releaseYear': 2022},
'MacBook Pro 14" M2': {'basePrice': 1200, 'releaseYear': 2022},
'MacBook Air M2': {'basePrice': 800, 'releaseYear': 2022},
'MacBook Pro 16" M1': {'basePrice': 1200, 'releaseYear': 2021},
'MacBook Pro 14" M1': {'basePrice': 1000, 'releaseYear': 2021},
'MacBook Air M1': {'basePrice': 650, 'releaseYear': 2020},
'MacBook Pro 16" Intel': {'basePrice': 800, 'releaseYear': 2019},
'MacBook Pro 13" Intel': {'basePrice': 600, 'releaseYear': 2020},
'MacBook Air Intel': {'basePrice': 400, 'releaseYear': 2020}
}
},
'Dell': {
'models': {
'XPS 15 (2024)': {'basePrice': 1000, 'releaseYear': 2024},
'XPS 13 (2024)': {'basePrice': 800, 'releaseYear': 2024},
'XPS 15 (2023)': {'basePrice': 900, 'releaseYear': 2023},
'XPS 13 (2023)': {'basePrice': 700, 'releaseYear': 2023},
'XPS 15 (2022)': {'basePrice': 800, 'releaseYear': 2022},
'XPS 13 (2022)': {'basePrice': 600, 'releaseYear': 2022},
'Inspiron 15 7000': {'basePrice': 400, 'releaseYear': 2023},
'Inspiron 14 5000': {'basePrice': 300, 'releaseYear': 2023},
'Latitude 7420': {'basePrice': 500, 'releaseYear': 2021},
'Latitude 5520': {'basePrice': 350, 'releaseYear': 2021}
}
},
'HP': {
'models': {
'Spectre x360 16': {'basePrice': 900, 'releaseYear': 2023},
'Spectre x360 14': {'basePrice': 700, 'releaseYear': 2023},
'EliteBook 850 G9': {'basePrice': 600, 'releaseYear': 2022},
'Pavilion 15': {'basePrice': 350, 'releaseYear': 2023},
'Envy 13': {'basePrice': 450, 'releaseYear': 2022},
'ProBook 450 G9': {'basePrice': 400, 'releaseYear': 2022}
}
},
'Lenovo': {
'models': {
'ThinkPad X1 Carbon Gen 11': {'basePrice': 1000, 'releaseYear': 2023},
'ThinkPad X1 Carbon Gen 10': {'basePrice': 850, 'releaseYear': 2022},
'ThinkPad T14 Gen 4': {'basePrice': 600, 'releaseYear': 2023},
'ThinkPad T14 Gen 3': {'basePrice': 500, 'releaseYear': 2022},
'IdeaPad 5 Pro': {'basePrice': 400, 'releaseYear': 2023},
'Legion 5 Pro': {'basePrice': 800, 'releaseYear': 2023},
'Yoga 9i': {'basePrice': 700, 'releaseYear': 2023}
}
},
'ASUS': {
'models': {
'ZenBook Pro 16X': {'basePrice': 1200, 'releaseYear': 2023},
'ZenBook 14': {'basePrice': 600, 'releaseYear': 2023},
'ROG Zephyrus G15': {'basePrice': 900, 'releaseYear': 2023},
'VivoBook S15': {'basePrice': 400, 'releaseYear': 2023},
'TUF Gaming A15': {'basePrice': 500, 'releaseYear': 2023}
}
}
}
},
'tablets': {
'brands': {
'Apple': {
'models': {
'iPad Pro 12.9" M4': {'basePrice': 800, 'releaseYear': 2024},
'iPad Pro 11" M4': {'basePrice': 650, 'releaseYear': 2024},
'iPad Air M2': {'basePrice': 450, 'releaseYear': 2024},
'iPad Pro 12.9" M2': {'basePrice': 700, 'releaseYear': 2022},
'iPad Pro 11" M2': {'basePrice': 550, 'releaseYear': 2022},
'iPad Air M1': {'basePrice': 400, 'releaseYear': 2022},
'iPad 10th Gen': {'basePrice': 250, 'releaseYear': 2022},
'iPad 9th Gen': {'basePrice': 200, 'releaseYear': 2021},
'iPad mini 6': {'basePrice': 350, 'releaseYear': 2021}
}
},
'Samsung': {
'models': {
'Galaxy Tab S9 Ultra': {'basePrice': 700, 'releaseYear': 2023},
'Galaxy Tab S9+': {'basePrice': 550, 'releaseYear': 2023},
'Galaxy Tab S9': {'basePrice': 450, 'releaseYear': 2023},
'Galaxy Tab S8 Ultra': {'basePrice': 600, 'releaseYear': 2022},
'Galaxy Tab S8+': {'basePrice': 450, 'releaseYear': 2022},
'Galaxy Tab S8': {'basePrice': 350, 'releaseYear': 2022},
'Galaxy Tab A8': {'basePrice': 150, 'releaseYear': 2022}
}
},
'Microsoft': {
'models': {
'Surface Pro 10': {'basePrice': 800, 'releaseYear': 2024},
'Surface Pro 9': {'basePrice': 650, 'releaseYear': 2022},
'Surface Pro 8': {'basePrice': 550, 'releaseYear': 2021},
'Surface Go 4': {'basePrice': 300, 'releaseYear': 2023},
'Surface Go 3': {'basePrice': 250, 'releaseYear': 2021}
}
}
}
}
}
condition_multipliers = {
'Like New': 0.9, 'Excellent': 0.8, 'Good': 0.65,
'Fair': 0.45, 'Poor': 0.25, 'For Parts': 0.15
}
storage_multipliers = {
'16GB': 0.7, '32GB': 0.8, '64GB': 0.9, '128GB': 1.0,
'256GB': 1.15, '512GB': 1.3, '1TB': 1.5, '2TB': 1.8
}
def calculate_price(device_type, brand, model, condition, storage, accessories):
device = device_database.get(device_type, {}).get('brands', {}).get(brand, {}).get('models', {}).get(model)
if not device:
raise ValueError(f"Device not found in database: {brand} {model}")
base_price = device['basePrice']
current_year = datetime.now().year
device_age = current_year - device['releaseYear']
if device_age <= 3:
age_multiplier = max(0.4, 1 - (device_age * 0.1))
else:
age_multiplier = max(0.2, 0.7 - ((device_age - 3) * 0.05))
condition_multiplier = condition_multipliers.get(condition, 0.5)
storage_multiplier = storage_multipliers.get(storage, 1.0)
estimated_value = base_price * age_multiplier * condition_multiplier * storage_multiplier
accessory_bonus = 0
if 'Original Box' in accessories: accessory_bonus += estimated_value * 0.05
if 'Charger' in accessories: accessory_bonus += estimated_value * 0.03
if 'Cables' in accessories: accessory_bonus += estimated_value * 0.02
if 'Manual' in accessories: accessory_bonus += estimated_value * 0.01
if 'Case/Cover' in accessories: accessory_bonus += estimated_value * 0.02
estimated_value += accessory_bonus
return {
'minPrice': round(estimated_value * 0.85),
'maxPrice': round(estimated_value * 1.15),
'estimatedValue': round(estimated_value)
}
def get_full_analysis(form_data):
price_result = calculate_price(
form_data.get('deviceType'),
form_data.get('brand'),
form_data.get('model'),
form_data.get('condition'),
form_data.get('storage', '128GB'),
form_data.get('accessories', [])
)
return {"priceAnalysis": price_result}
if __name__ == "__main__":
try:
form_data = json.load(sys.stdin)
analysis_data = get_full_analysis(form_data)
print(json.dumps(analysis_data))
except Exception as e:
print(json.dumps({"error": str(e)}), file=sys.stderr)
sys.exit(1)