Spaces:
Running
Running
File size: 13,398 Bytes
19bd8b9 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 |
# 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) |