# Nexus Autoparts Sistema completo de gestión de base de datos de vehículos y nexus-autoparts con dashboard web, herramientas de web scraping y múltiples interfaces de consulta. ## Descripción **Nexus Autoparts** es una solución integral para la gestión de información de vehículos que incluye: - Base de datos SQLite normalizada con información de marcas, modelos, motores y años - Dashboard web moderno y responsivo para consultar y explorar datos - Herramientas de web scraping para recopilar datos de RockAuto.com - Interfaces de línea de comandos (CLI) y programática - Scripts de utilidad para gestión y mantenimiento de datos ## Estadísticas de la Base de Datos | Elemento | Cantidad | |----------|----------| | Marcas | 12 | | Modelos | 10,923 | | Motores | 10,919 | | Combinaciones modelo-año-motor | 12,075 | ## Tecnologías Utilizadas ### Backend - **Python 3** - Lenguaje principal - **SQLite 3** - Base de datos - **Flask 2.3.3** - Framework web - **BeautifulSoup4** - Web scraping - **requests** - HTTP client - **lxml** - Parser XML/HTML ### Frontend - **HTML5** - Estructura - **Bootstrap 5.3.0** - Framework CSS - **JavaScript (ES6+)** - Lógica cliente - **Font Awesome 6.0.0** - Iconos ## Estructura del Proyecto ``` Autopartes/ ├── vehicle_database/ # Sistema principal de base de datos │ ├── sql/ │ │ └── schema.sql # Esquema de la base de datos │ ├── scripts/ │ │ ├── database_manager.py # Gestión de la BD │ │ ├── query_interface.py # Interfaz CLI │ │ └── csv_importer.py # Importador CSV │ ├── data/ │ │ ├── brands.csv # Datos de marcas │ │ ├── engines.csv # Datos de motores │ │ └── models.csv # Datos de modelos │ ├── vehicle_database.db # Base de datos SQLite │ └── setup.sh # Script de inicialización │ ├── dashboard/ # Interfaz web │ ├── server.py # Backend Flask │ ├── index.html # Frontend HTML │ ├── dashboard.js # Lógica JavaScript │ └── start_dashboard.sh # Script de inicio │ ├── console/ # Consola Pick/VT220 │ ├── main.py # Punto de entrada │ ├── db.py # Capa de datos abstracta │ ├── core/ # Framework (app, screens, nav, keys) │ ├── screens/ # 14 pantallas (menú, CRUD, búsqueda) │ ├── renderers/ # Renderer VT220 (curses) │ ├── utils/ # Formato y API VIN │ └── tests/ # 116 tests │ ├── vehicle_scraper/ # Herramientas de web scraping │ ├── rockauto_scraper.py # Scraper RockAuto │ ├── rockauto_scraper_v2.py # Scraper mejorado │ ├── scrape_toyota.py # Scraper Toyota │ ├── scrape_nissan_ford_chevrolet.py │ └── manual_input.py # Ingreso manual │ ├── add_*.py # Scripts para agregar datos ├── remove_*.py # Scripts de limpieza └── QUICK_START.sh # Guía rápida de inicio ``` ## Consola Pick/VT220 Interfaz de terminal inspirada en los sistemas Pick/D3, 100% operada con teclado. Estética verde sobre negro con caracteres de caja, sin dependencias externas. ```bash python -m console ``` Funcionalidades: navegación por vehículo (marca→modelo→año→motor), búsqueda por número de parte, búsqueda full-text, decodificador VIN (NHTSA), catálogo por categorías, comparador OEM vs aftermarket, y administración CRUD completa. 116 tests automatizados. Ver [`console/README.md`](console/README.md) para documentación completa. ## Instalación ### Requisitos Previos - Python 3.8 o superior - pip (gestor de paquetes de Python) ### Pasos de Instalación 1. **Clonar el repositorio** ```bash git clone https://git.consultoria-as.com/[usuario]/Nexus-Autoparts.git cd Nexus-Autoparts ``` 2. **Instalar dependencias** ```bash pip install flask requests beautifulsoup4 lxml ``` 3. **Inicializar la base de datos (opcional - ya incluye datos)** ```bash cd vehicle_database ./setup.sh ``` ## Uso ### Iniciar el Dashboard Web ```bash cd dashboard python3 server.py ``` El dashboard estará disponible en: `http://localhost:5000` ### Iniciar la Consola Pick/VT220 ```bash python -m console ``` ### Usar la Interfaz CLI Legacy ```bash cd vehicle_database/scripts python3 query_interface.py ``` ### Ejecutar Web Scraping ```bash cd vehicle_scraper python3 rockauto_scraper_v2.py ``` ### Agregar Datos Manualmente ```bash cd vehicle_scraper python3 manual_input.py ``` ## API REST El dashboard expone los siguientes endpoints: | Endpoint | Método | Descripción | |----------|--------|-------------| | `/api/brands` | GET | Obtiene todas las marcas | | `/api/models?brand=X` | GET | Obtiene modelos por marca | | `/api/years` | GET | Obtiene años disponibles | | `/api/engines` | GET | Obtiene motores disponibles | | `/api/vehicles` | GET | Búsqueda con filtros | ### Ejemplo de Uso ```bash # Obtener todas las marcas curl http://localhost:5000/api/brands # Buscar vehículos por marca y año curl "http://localhost:5000/api/vehicles?brand=Toyota&year=2020" ``` ## Esquema de Base de Datos ### Tablas #### brands | Campo | Tipo | Descripción | |-------|------|-------------| | id | INTEGER | Clave primaria | | name | TEXT | Nombre de la marca | | country | TEXT | País de origen | | founded_year | INTEGER | Año de fundación | #### models | Campo | Tipo | Descripción | |-------|------|-------------| | id | INTEGER | Clave primaria | | brand_id | INTEGER | FK a brands | | name | TEXT | Nombre del modelo | | body_type | TEXT | Tipo de carrocería | | generation | TEXT | Generación | | production_start_year | INTEGER | Año inicio producción | | production_end_year | INTEGER | Año fin producción | #### engines | Campo | Tipo | Descripción | |-------|------|-------------| | id | INTEGER | Clave primaria | | name | TEXT | Nombre del motor | | displacement_cc | INTEGER | Cilindrada en cc | | cylinders | INTEGER | Número de cilindros | | fuel_type | TEXT | Tipo de combustible | | power_hp | INTEGER | Potencia en HP | | torque_nm | INTEGER | Torque en Nm | | engine_code | TEXT | Código del motor | #### years | Campo | Tipo | Descripción | |-------|------|-------------| | id | INTEGER | Clave primaria | | year | INTEGER | Año | #### model_year_engine | Campo | Tipo | Descripción | |-------|------|-------------| | id | INTEGER | Clave primaria | | model_id | INTEGER | FK a models | | year_id | INTEGER | FK a years | | engine_id | INTEGER | FK a engines | | trim_level | TEXT | Nivel de equipamiento | | drivetrain | TEXT | Tracción | | transmission | TEXT | Transmisión | ### Diagrama de Relaciones ``` brands ──┐ │ ├──< models ──┐ │ │ years ───┼─────────────┼──< model_year_engine │ │ engines ─┴─────────────┘ ``` ## Scripts Disponibles ### Scripts de Datos | Script | Descripción | |--------|-------------| | `add_toyota_data.py` | Agrega datos de Toyota | | `add_honda_data.py` | Agrega datos de Honda | | `add_nissan_data.py` | Agrega datos de Nissan | | `add_ford_data.py` | Agrega datos de Ford | | `add_chevrolet_data.py` | Agrega datos de Chevrolet | | `add_audi_data.py` | Agrega datos de Audi | | `add_acura_data.py` | Agrega datos de Acura | | ... | Y más marcas | ### Scripts de Mantenimiento | Script | Descripción | |--------|-------------| | `remove_brands_and_cleanup.py` | Limpia marcas innecesarias | | `check_and_remove_brands.py` | Verifica y elimina marcas | ## Funcionalidades del Dashboard ### Panel de Filtros - Selección de marca - Selección de modelo (dinámico según marca) - Filtro por año - Filtro por motor ### Panel de Resultados - Visualización en tarjetas - Información detallada del vehículo - Especificaciones del motor - Datos de transmisión y tracción ### Características - Diseño responsivo - Actualización en tiempo real - Animaciones y transiciones suaves - Soporte para múltiples idiomas ## Arquitectura del Sistema ``` ┌─────────────────┐ ┌──────────────────┐ │ RockAuto.com │────>│ Web Scraper │ └─────────────────┘ └────────┬─────────┘ │ v ┌─────────────────┐ ┌──────────────────┐ │ Manual Input │────>│ SQLite Database │ └─────────────────┘ └────────┬─────────┘ │ ┌───────────────────────┼───────────────────────┐ │ │ │ v v v ┌─────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ Flask API │ │ Pick Console │ │ CSV Importer │ └────────┬────────┘ │ (VT220/Rich) │ └──────────────────┘ │ └──────────────────┘ v ┌─────────────────┐ │ Web Dashboard │ │ (Browser) │ └─────────────────┘ ``` ## Contribuir 1. Fork el repositorio 2. Crea una rama para tu feature (`git checkout -b feature/nueva-funcionalidad`) 3. Commit tus cambios (`git commit -am 'Agrega nueva funcionalidad'`) 4. Push a la rama (`git push origin feature/nueva-funcionalidad`) 5. Crea un Pull Request ## Licencia Este proyecto es de uso interno. ## Contacto Para más información, contactar al equipo de desarrollo. --- **Nexus Autoparts** - Sistema de Gestión de Base de Datos de Vehículos