feat: complete session — catalog, marketplace, WhatsApp, peer-to-peer, install scripts
Major features: - Pixel-Perfect glassmorphism design (landing + POS + public catalog) - OEM/Local catalog toggle with Nexpart taxonomy (14 groups, 108 subgroups, 558 part types) - Marketplace B2B Phase 1 (bodegas, POs, status machine, WA+email notifications) - Peer-to-peer inventory (multi-instance, LAN discovery) - WhatsApp: photo→Vision AI, voice→Whisper, conversational quotations - Smart unified search (VIN/plate/part_number/keyword auto-detect) - Shop Supplies tab (vehicle-independent parts) - Chatbot AI fallback chain (5 models) + response cache - CSV inventory import tool + setup_instance.sh installer - Tablet-responsive CSS + sidebar toggle - Filters, export CSV, employee edit, business data save - Quotation system (WA→POS) with auto-print on confirmation - Live stats on landing page Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -14,8 +14,20 @@ def decode_vin(vin):
|
||||
return {"error": "VIN debe tener exactamente 17 caracteres alfanumericos (sin I, O, Q)."}
|
||||
|
||||
url = f"https://vpic.nhtsa.dot.gov/api/vehicles/DecodeVinValues/{vin}?format=json"
|
||||
resp = requests.get(url, timeout=10)
|
||||
resp.raise_for_status()
|
||||
# NHTSA's free API can be slow (5-30s). Retry once on timeout.
|
||||
import time
|
||||
for attempt in range(2):
|
||||
try:
|
||||
resp = requests.get(url, timeout=25)
|
||||
resp.raise_for_status()
|
||||
break
|
||||
except requests.exceptions.Timeout:
|
||||
if attempt == 0:
|
||||
time.sleep(2)
|
||||
continue
|
||||
return {"error": "El servidor NHTSA no respondio. Intenta de nuevo en unos segundos."}
|
||||
except requests.exceptions.RequestException as e:
|
||||
return {"error": f"Error de conexion con NHTSA: {str(e)[:100]}"}
|
||||
data = resp.json()["Results"][0]
|
||||
|
||||
error_text = data.get("ErrorText", "") or ""
|
||||
|
||||
Reference in New Issue
Block a user