Lista de modelos por marca para Mexico/USA/Canada (36 marcas). Toyota: 625 → 236, Nissan: 499 → 138, Ford: 288 → 114, Chevrolet: 470 → 207, VW: 283 → 143, Honda: 223 → 117. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
503 lines
19 KiB
Python
503 lines
19 KiB
Python
# /home/Autopartes/pos/services/na_models.py
|
|
"""North America model filter -- models sold in Mexico, USA, and Canada.
|
|
|
|
TecDoc includes models from all global markets (Europe, Asia, Middle East, etc.)
|
|
but our catalog only needs models actually sold in North America.
|
|
|
|
Usage:
|
|
from services.na_models import is_na_model
|
|
if is_na_model('TOYOTA', 'AGYA (B1_)'): # False -- not sold in NA
|
|
if is_na_model('TOYOTA', 'Corolla (_E21_)'): # True -- sold in NA
|
|
if is_na_model('NISSAN', 'TSURU'): # True -- Mexico-specific
|
|
|
|
Matching logic:
|
|
- Case-insensitive
|
|
- TecDoc model name must START WITH one of the listed base names
|
|
- e.g. base "COROLLA" matches "Corolla (_E21_)", "Corolla Hatchback", etc.
|
|
- Unknown brands (not in NA_MODELS) pass through unfiltered
|
|
"""
|
|
|
|
# ────────────────────────────────────────────────────────────────────────────
|
|
# Base model names sold in North America (case-insensitive prefix matching)
|
|
# Includes: current (2020-2026), recent discontinued (2010-2019),
|
|
# classic/legacy still serviced (2000-2009),
|
|
# and Mexico-specific models.
|
|
# ────────────────────────────────────────────────────────────────────────────
|
|
|
|
NA_MODELS = {
|
|
|
|
# ── TOYOTA ──────────────────────────────────────────────────────────────
|
|
'TOYOTA': [
|
|
'4 RUNNER', '86', 'AVALON', 'BZ4X',
|
|
'C-HR', 'CAMRY', 'CELICA', 'COROLLA', 'CORONA', 'CRESSIDA',
|
|
'ECHO', 'FJ CRUISER',
|
|
'GR86', 'GR SUPRA', 'GRAND HIGHLANDER',
|
|
'HIGHLANDER',
|
|
'LAND CRUISER',
|
|
'MATRIX', 'MIRAI', 'MR2',
|
|
'PASEO', 'PICKUP', 'PRIUS',
|
|
'RAV4', 'RAV 4',
|
|
'SEQUOIA', 'SIENNA', 'SOLARA', 'SUPRA',
|
|
'TACOMA', 'TERCEL', 'T100', 'TUNDRA',
|
|
'VENZA',
|
|
'YARIS',
|
|
],
|
|
|
|
# ── NISSAN ──────────────────────────────────────────────────────────────
|
|
'NISSAN': [
|
|
'200SX', '240SX', '300ZX', '350Z', '370Z',
|
|
'ALTIMA', 'APRIO', 'ARIYA', 'ARMADA',
|
|
'FRONTIER',
|
|
'GT-R',
|
|
'JUKE',
|
|
'KICKS',
|
|
'LEAF',
|
|
'MARCH', 'MAXIMA', 'MURANO',
|
|
'NOTE', 'NP300', 'NV',
|
|
'PATHFINDER', 'PLATINA',
|
|
'QUEST',
|
|
'ROGUE', 'ROGUE SPORT',
|
|
'SENTRA',
|
|
'TIIDA', 'TITAN', 'TSURU',
|
|
'V-DRIVE', 'VERSA',
|
|
'X-TRAIL', 'XTERRA',
|
|
'Z',
|
|
],
|
|
|
|
# ── FORD ────────────────────────────────────────────────────────────────
|
|
'FORD': [
|
|
'BRONCO', 'BRONCO SPORT',
|
|
'CONTOUR', 'CROWN VICTORIA',
|
|
'ECOSPORT', 'EDGE', 'ESCAPE', 'ESCORT', 'EXCURSION', 'EXPEDITION',
|
|
'EXPLORER',
|
|
'F 150', 'F-150', 'F 250', 'F-250', 'F 350', 'F-350', 'F 450', 'F-450',
|
|
'F 550', 'F-550', 'FIESTA', 'FIGO', 'FIVE HUNDRED', 'FLEX', 'FOCUS',
|
|
'FREESTAR', 'FREESTYLE', 'FUSION',
|
|
'IKON',
|
|
'LOBO',
|
|
'MAVERICK', 'MUSTANG',
|
|
'PROBE',
|
|
'RANGER',
|
|
'TAURUS', 'THUNDERBIRD', 'TRANSIT', 'TRANSIT CONNECT',
|
|
'WINDSTAR',
|
|
],
|
|
|
|
# ── CHEVROLET ───────────────────────────────────────────────────────────
|
|
'CHEVROLET': [
|
|
'ASTRA', 'ASTRO', 'AVALANCHE', 'AVEO',
|
|
'BEAT', 'BLAZER', 'BOLT',
|
|
'CAMARO', 'CAPTIVA', 'CAVALIER', 'CHEVY', 'COBALT', 'COLORADO',
|
|
'CORSA', 'CORVETTE', 'CRUZE',
|
|
'EQUINOX', 'EXPRESS',
|
|
'GROVE',
|
|
'HHR',
|
|
'IMPALA',
|
|
'LUMINA',
|
|
'MALIBU', 'MERIVA', 'MONTE CARLO',
|
|
'ONIX', 'ORLANDO',
|
|
'PRIZM',
|
|
'S-10', 'S10', 'SILVERADO', 'SONIC', 'SPARK', 'SPIN', 'SUBURBAN',
|
|
'TAHOE', 'TORNADO', 'TRACKER', 'TRAIL', 'TRAILBLAZER', 'TRAVERSE',
|
|
'TRAX',
|
|
'VENTURE',
|
|
'ZAFIRA',
|
|
],
|
|
|
|
# ── VW (VOLKSWAGEN) ────────────────────────────────────────────────────
|
|
'VW': [
|
|
'ATLAS',
|
|
'BEETLE', 'BORA',
|
|
'CABRIO', 'CC', 'CLASICO', 'CROSSFOX',
|
|
'DERBY',
|
|
'EOS', 'EUROVAN',
|
|
'GLI', 'GOL', 'GOLF', 'GTI',
|
|
'ID.4', 'ID.BUZZ',
|
|
'JETTA',
|
|
'LUPO',
|
|
'NEW BEETLE', 'NIVUS',
|
|
'PASSAT', 'POINTER', 'POLO',
|
|
'RABBIT', 'ROUTAN',
|
|
'SAVEIRO', 'SEDAN', 'SPORTVAN', 'SURAN',
|
|
'T-CROSS', 'TAOS', 'TIGUAN', 'TOUAREG',
|
|
'UP',
|
|
'VENTO', 'VIRTUS',
|
|
],
|
|
|
|
# ── HONDA ───────────────────────────────────────────────────────────────
|
|
'HONDA': [
|
|
'ACCORD',
|
|
'BR-V',
|
|
'CITY', 'CIVIC', 'CR-V', 'CR-Z', 'CROSSTOUR',
|
|
'DEL SOL',
|
|
'ELEMENT',
|
|
'FIT',
|
|
'HR-V',
|
|
'INSIGHT',
|
|
'ODYSSEY',
|
|
'PASSPORT', 'PILOT', 'PRELUDE', 'PROLOGUE',
|
|
'RIDGELINE',
|
|
'S2000',
|
|
],
|
|
|
|
# ── HYUNDAI ─────────────────────────────────────────────────────────────
|
|
'HYUNDAI': [
|
|
'ACCENT', 'AZERA',
|
|
'CRETA',
|
|
'ELANTRA', 'ENTOURAGE',
|
|
'GENESIS',
|
|
'IONIQ',
|
|
'KONA',
|
|
'NEXO',
|
|
'PALISADE',
|
|
'SANTA CRUZ', 'SANTA FE', 'SONATA', 'STAREX',
|
|
'TIBURON', 'TUCSON',
|
|
'VELOSTER', 'VENUE', 'VERACRUZ',
|
|
'XG',
|
|
],
|
|
|
|
# ── KIA ─────────────────────────────────────────────────────────────────
|
|
'KIA': [
|
|
'AMANTI',
|
|
'CARNIVAL', 'CERATO',
|
|
'EV6', 'EV9',
|
|
'FORTE',
|
|
'K5',
|
|
'NIRO',
|
|
'OPTIMA',
|
|
'RIO',
|
|
'SEDONA', 'SELTOS', 'SORENTO', 'SOUL', 'SPECTRA', 'SPORTAGE',
|
|
'STINGER',
|
|
'TELLURIDE',
|
|
],
|
|
|
|
# ── MAZDA ───────────────────────────────────────────────────────────────
|
|
'MAZDA': [
|
|
'2', '3', '5', '6',
|
|
'323', '626', '929',
|
|
'B-SERIE', 'B2300', 'B2500', 'B3000', 'B4000',
|
|
'CX-3', 'CX-30', 'CX-5', 'CX-50', 'CX-7', 'CX-70', 'CX-9', 'CX-90',
|
|
'MIATA', 'MILLENIA', 'MPV', 'MX-3', 'MX-5', 'MX-30',
|
|
'PROTEGE',
|
|
'RX-7', 'RX-8',
|
|
'TRIBUTE',
|
|
],
|
|
|
|
# ── BMW ─────────────────────────────────────────────────────────────────
|
|
'BMW': [
|
|
'1', '2', '3', '4', '5', '6', '7', '8',
|
|
'I3', 'I4', 'I7', 'I8', 'IX', 'IX3',
|
|
'M2', 'M3', 'M4', 'M5', 'M6', 'M8',
|
|
'X1', 'X2', 'X3', 'X4', 'X5', 'X6', 'X7', 'XM',
|
|
'Z3', 'Z4', 'Z8',
|
|
],
|
|
|
|
# ── MERCEDES-BENZ ──────────────────────────────────────────────────────
|
|
'MERCEDES-BENZ': [
|
|
'A', 'AMG GT',
|
|
'B',
|
|
'C', 'CL', 'CLA', 'CLK', 'CLS',
|
|
'E', 'EQB', 'EQE', 'EQS',
|
|
'G', 'GL', 'GLA', 'GLB', 'GLC', 'GLE', 'GLK', 'GLS',
|
|
'MAYBACH', 'METRIS', 'ML',
|
|
'R',
|
|
'S', 'SL', 'SLC', 'SLK', 'SPRINTER',
|
|
],
|
|
|
|
# ── AUDI ────────────────────────────────────────────────────────────────
|
|
'AUDI': [
|
|
'A1', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8',
|
|
'E-TRON', 'ETRON',
|
|
'Q3', 'Q4', 'Q5', 'Q7', 'Q8',
|
|
'R8', 'RS', 'RS3', 'RS4', 'RS5', 'RS6', 'RS7',
|
|
'S3', 'S4', 'S5', 'S6', 'S7', 'S8', 'SQ5', 'SQ7', 'SQ8',
|
|
'TT',
|
|
],
|
|
|
|
# ── ACURA ───────────────────────────────────────────────────────────────
|
|
'ACURA': [
|
|
'CL', 'CSX',
|
|
'EL',
|
|
'ILX', 'INTEGRA', 'INTEGRA (2023)',
|
|
'MDX',
|
|
'NSX',
|
|
'RDX', 'RL', 'RLX', 'RSX',
|
|
'TL', 'TLX', 'TSX',
|
|
'ZDX',
|
|
],
|
|
|
|
# ── LEXUS ───────────────────────────────────────────────────────────────
|
|
'LEXUS': [
|
|
'CT',
|
|
'ES',
|
|
'GS', 'GX',
|
|
'IS',
|
|
'LC', 'LFA', 'LS', 'LX',
|
|
'NX',
|
|
'RC', 'RX', 'RZ',
|
|
'SC',
|
|
'TX',
|
|
'UX',
|
|
],
|
|
|
|
# ── INFINITI ────────────────────────────────────────────────────────────
|
|
'INFINITI': [
|
|
'EX', 'FX',
|
|
'G', 'I',
|
|
'JX',
|
|
'M',
|
|
'Q40', 'Q50', 'Q60', 'Q70', 'QX30', 'QX50', 'QX55', 'QX56',
|
|
'QX60', 'QX70', 'QX80',
|
|
],
|
|
|
|
# ── CHRYSLER ────────────────────────────────────────────────────────────
|
|
'CHRYSLER': [
|
|
'200', '300',
|
|
'ASPEN',
|
|
'CIRRUS', 'CONCORDE', 'CROSSFIRE',
|
|
'GRAND VOYAGER',
|
|
'NEON',
|
|
'PACIFICA', 'PT CRUISER',
|
|
'SEBRING',
|
|
'TOWN', 'TOWN & COUNTRY',
|
|
'VOYAGER',
|
|
],
|
|
|
|
# ── DODGE ───────────────────────────────────────────────────────────────
|
|
'DODGE': [
|
|
'ATOS', 'ATTITUDE', 'AVENGER',
|
|
'CALIBER', 'CARAVAN', 'CHALLENGER', 'CHARGER',
|
|
'DAKOTA', 'DART', 'DURANGO',
|
|
'GRAND CARAVAN',
|
|
'HORNET',
|
|
'I10',
|
|
'JOURNEY',
|
|
'MAGNUM',
|
|
'NEON', 'NITRO',
|
|
'RAM', 'STRATUS',
|
|
'VIPER', 'VISION',
|
|
],
|
|
|
|
# ── JEEP ────────────────────────────────────────────────────────────────
|
|
'JEEP': [
|
|
'CHEROKEE', 'COMMANDER', 'COMPASS',
|
|
'GLADIATOR', 'GRAND CHEROKEE', 'GRAND WAGONEER',
|
|
'LIBERTY',
|
|
'PATRIOT',
|
|
'RENEGADE',
|
|
'WAGONEER', 'WRANGLER',
|
|
],
|
|
|
|
# ── RAM ─────────────────────────────────────────────────────────────────
|
|
'RAM': [
|
|
'1500', '2500', '3500', '4500', '5500',
|
|
'700',
|
|
'PROMASTER',
|
|
],
|
|
|
|
# ── GMC ─────────────────────────────────────────────────────────────────
|
|
'GMC': [
|
|
'ACADIA',
|
|
'CANYON',
|
|
'ENVOY',
|
|
'HUMMER EV',
|
|
'JIMMY',
|
|
'SAFARI', 'SAVANA', 'SIERRA', 'SONOMA',
|
|
'TERRAIN',
|
|
'YUKON',
|
|
],
|
|
|
|
# ── BUICK ───────────────────────────────────────────────────────────────
|
|
'BUICK': [
|
|
'CENTURY',
|
|
'ENCLAVE', 'ENCORE', 'ENVISION', 'ENVISTA',
|
|
'LACROSSE', 'LESABRE', 'LUCERNE',
|
|
'PARK AVENUE',
|
|
'RAINIER', 'REGAL', 'RENDEZVOUS', 'RIVIERA',
|
|
'TERRAZA',
|
|
'VERANO',
|
|
],
|
|
|
|
# ── CADILLAC ────────────────────────────────────────────────────────────
|
|
'CADILLAC': [
|
|
'ATS',
|
|
'CT4', 'CT5', 'CT6', 'CTS',
|
|
'DEVILLE', 'DTS',
|
|
'ELDORADO', 'ESCALADE',
|
|
'LYRIQ',
|
|
'SEVILLE', 'SRX', 'STS',
|
|
'XT4', 'XT5', 'XT6', 'XTS',
|
|
],
|
|
|
|
# ── LINCOLN ─────────────────────────────────────────────────────────────
|
|
'LINCOLN': [
|
|
'AVIATOR',
|
|
'CONTINENTAL', 'CORSAIR',
|
|
'LS',
|
|
'MKC', 'MKS', 'MKT', 'MKX', 'MKZ',
|
|
'NAUTILUS', 'NAVIGATOR',
|
|
'TOWN CAR',
|
|
'ZEPHYR',
|
|
],
|
|
|
|
# ── SUBARU ──────────────────────────────────────────────────────────────
|
|
'SUBARU': [
|
|
'ASCENT',
|
|
'BAJA', 'BRZ',
|
|
'CROSSTREK',
|
|
'FORESTER',
|
|
'IMPREZA',
|
|
'LEGACY',
|
|
'OUTBACK',
|
|
'SOLTERRA',
|
|
'TRIBECA',
|
|
'WRX',
|
|
'XV',
|
|
],
|
|
|
|
# ── MITSUBISHI ──────────────────────────────────────────────────────────
|
|
'MITSUBISHI': [
|
|
'ECLIPSE', 'ECLIPSE CROSS', 'ENDEAVOR',
|
|
'GALANT',
|
|
'L200', 'LANCER',
|
|
'MIRAGE', 'MONTERO',
|
|
'OUTLANDER',
|
|
'RAIDER', 'RVR',
|
|
],
|
|
|
|
# ── SUZUKI ──────────────────────────────────────────────────────────────
|
|
'SUZUKI': [
|
|
'AERIO',
|
|
'CIAZ',
|
|
'EQUATOR',
|
|
'FORENZA',
|
|
'GRAND VITARA',
|
|
'IGNIS',
|
|
'KIZASHI',
|
|
'RENO',
|
|
'S-CROSS', 'SWIFT', 'SX4',
|
|
'VITARA',
|
|
'XL-7', 'XL7',
|
|
],
|
|
|
|
# ── RENAULT ─────────────────────────────────────────────────────────────
|
|
'RENAULT': [
|
|
'CAPTUR', 'CLIO', 'COLEOS',
|
|
'DUSTER',
|
|
'FLUENCE',
|
|
'KANGOO', 'KOLEOS', 'KWID',
|
|
'LOGAN',
|
|
'MEGANE',
|
|
'OROCH',
|
|
'SAFRANE', 'SANDERO', 'SCENIC', 'STEPWAY',
|
|
],
|
|
|
|
# ── PEUGEOT ─────────────────────────────────────────────────────────────
|
|
'PEUGEOT': [
|
|
'2008', '206', '207', '208', '3008', '301', '306', '307', '308',
|
|
'405', '5008', '508',
|
|
'MANAGER', 'PARTNER', 'RCZ', 'RIFTER',
|
|
],
|
|
|
|
# ── SEAT ────────────────────────────────────────────────────────────────
|
|
'SEAT': [
|
|
'ARONA', 'ATECA',
|
|
'CORDOBA',
|
|
'IBIZA',
|
|
'LEON',
|
|
'TARRACO', 'TOLEDO',
|
|
],
|
|
|
|
# ── FIAT ────────────────────────────────────────────────────────────────
|
|
'FIAT': [
|
|
'124', '500', '500L', '500X',
|
|
'DUCATO',
|
|
'FREEMONT',
|
|
'LINEA',
|
|
'MOBI',
|
|
'PALIO', 'PUNTO', 'PULSE',
|
|
'TIPO', 'TORO',
|
|
'UNO',
|
|
],
|
|
|
|
# ── MINI ────────────────────────────────────────────────────────────────
|
|
'MINI': [
|
|
'CLUBMAN', 'CONVERTIBLE', 'COUNTRYMAN', 'COUPE',
|
|
'HARDTOP', 'MINI',
|
|
'PACEMAN',
|
|
],
|
|
|
|
# ── VOLVO ───────────────────────────────────────────────────────────────
|
|
'VOLVO': [
|
|
'C30', 'C40', 'C70',
|
|
'EX30', 'EX90',
|
|
'S40', 'S60', 'S70', 'S80', 'S90',
|
|
'V40', 'V50', 'V60', 'V70', 'V90',
|
|
'XC40', 'XC60', 'XC70', 'XC90',
|
|
],
|
|
|
|
# ── PORSCHE ─────────────────────────────────────────────────────────────
|
|
'PORSCHE': [
|
|
'718', '911',
|
|
'BOXSTER',
|
|
'CAYENNE', 'CAYMAN',
|
|
'MACAN',
|
|
'PANAMERA',
|
|
'TAYCAN',
|
|
],
|
|
|
|
# ── JAGUAR ──────────────────────────────────────────────────────────────
|
|
'JAGUAR': [
|
|
'E-PACE',
|
|
'F-PACE', 'F-TYPE',
|
|
'I-PACE',
|
|
'S-TYPE',
|
|
'X-TYPE', 'XE', 'XF', 'XJ', 'XK',
|
|
],
|
|
|
|
# ── LAND ROVER ──────────────────────────────────────────────────────────
|
|
'LAND ROVER': [
|
|
'DEFENDER', 'DISCOVERY', 'DISCOVERY SPORT',
|
|
'FREELANDER',
|
|
'LR2', 'LR3', 'LR4',
|
|
'RANGE ROVER',
|
|
],
|
|
|
|
# ── TESLA ───────────────────────────────────────────────────────────────
|
|
'TESLA': [
|
|
'CYBERTRUCK',
|
|
'MODEL 3', 'MODEL S', 'MODEL X', 'MODEL Y',
|
|
],
|
|
}
|
|
|
|
# Pre-compute upper-cased sets for fast lookup
|
|
_NA_MODELS_UPPER = {
|
|
brand: [m.upper() for m in models]
|
|
for brand, models in NA_MODELS.items()
|
|
}
|
|
|
|
|
|
def is_na_model(brand_name, model_name):
|
|
"""Check if a TecDoc model is sold in North America.
|
|
|
|
Args:
|
|
brand_name: Brand name (e.g. 'TOYOTA', 'VW')
|
|
model_name: TecDoc model name (e.g. 'Corolla (_E21_)', 'AGYA (B1_)')
|
|
|
|
Returns:
|
|
True if the model is sold in NA, or if the brand is not in our list
|
|
(unknown brands pass through unfiltered).
|
|
"""
|
|
brand_upper = brand_name.upper().strip()
|
|
model_upper = model_name.upper().strip()
|
|
|
|
# If brand not in our list, allow all models (don't filter unknown brands)
|
|
if brand_upper not in _NA_MODELS_UPPER:
|
|
return True
|
|
|
|
# Check if model name starts with any known NA model
|
|
for na_model in _NA_MODELS_UPPER[brand_upper]:
|
|
if model_upper.startswith(na_model):
|
|
return True
|
|
|
|
return False
|