# NEXUS AUTOPARTS Console - Sistema Pick/VT220 Interfaz de consola para el catálogo de nexus-autoparts, inspirada en los sistemas Pick/D3 con estética de terminal VT220. Funciona 100% con teclado, verde sobre negro. ## Requisitos - Python 3.8+ - SQLite 3 (incluido con Python) No requiere dependencias externas. ## Inicio Rápido ```bash # Iniciar la consola python -m console # Especificar base de datos python -m console --db /ruta/a/vehicle_database.db # Ver versión python -m console --version ``` ## Menú Principal ``` ┌──────────────────────────────────────────┐ │ MENU PRINCIPAL │ ├──────────────────────────────────────────┤ │ ▸ 1. Consulta por Vehiculo │ │ 2. Busqueda por Numero de Parte │ │ 3. Busqueda por Descripcion │ │ 4. Decodificador VIN │ │ 5. Catalogo de Categorias │ ├──────────────────────────────────────────┤ │ 6. Administracion de Partes │ │ 7. Administracion de Fabricantes │ │ 8. Cross-References │ │ 9. Importar / Exportar Datos │ ├──────────────────────────────────────────┤ │ 0. Estadisticas del Sistema │ └──────────────────────────────────────────┘ ``` ## Teclas de Función | Tecla | Acción | |-------|--------| | `0-9` | Seleccionar opción del menú / saltar a campo | | `ENTER` | Confirmar selección | | `ESC` | Regresar / Cancelar | | `F1` | Ayuda / Lista de búsqueda | | `F2` | Modo edición | | `F3` | Buscar | | `F4` | Referencias cruzadas | | `F5` | Refrescar | | `F6` | Vehículos relacionados | | `F9` | Guardar | | `F10` | Menú principal | | `TAB` / `↓` | Siguiente campo | | `↑` | Campo anterior | | `PgUp/PgDn` | Navegación por páginas | | `←→` | Scroll horizontal (comparador) | ## Pantallas ### 1. Búsqueda por Vehículo Navegación jerárquica: Marca → Modelo → Año → Motor. Cada nivel muestra una lista filtrable con búsqueda incremental. ### 2. Búsqueda por Número de Parte Campo de entrada para número de parte. Busca en partes OEM, aftermarket y referencias cruzadas. ### 3. Búsqueda por Texto Búsqueda full-text (FTS5) en nombres y descripciones de partes con resultados paginados. ### 4. Decodificador VIN Ingresa un VIN de 17 caracteres. Consulta la API de NHTSA (con caché de 30 días) y muestra información del vehículo. ### 5. Catálogo por Categoría Navega: Categorías → Grupos → Partes, independiente de la selección de vehículo. ### 6-9. Administración - **Partes**: CRUD completo de partes OEM - **Fabricantes**: CRUD de fabricantes aftermarket - **Referencias Cruzadas**: CRUD de referencias cruzadas entre partes - **Import/Export**: Importar CSV, exportar JSON ### Detalle de Parte Vista completa de la parte con alternativas aftermarket. F4 para referencias cruzadas, F6 para vehículos compatibles. ### Comparador Columnas lado a lado: OEM vs alternativas aftermarket con barras de calidad, porcentaje de ahorro y scroll horizontal. ### Estadísticas Dashboard con contadores de la base de datos (marcas, modelos, partes, etc.) y métricas de cobertura. ## Arquitectura ``` console/ ├── main.py # Punto de entrada ├── config.py # Configuración (DB, colores, paginación) ├── db.py # Capa de datos abstracta (SQLite) │ ├── core/ │ ├── app.py # Controlador principal │ ├── screens.py # Clase base Screen │ ├── navigation.py # Pila de navegación y breadcrumbs │ └── keybindings.py # Constantes de teclas y registro │ ├── screens/ │ ├── menu_principal.py # Menú principal (12 opciones) │ ├── vehiculo_nav.py # Drill-down: marca → modelo → año → motor │ ├── buscar_parte.py # Búsqueda por número de parte │ ├── buscar_texto.py # Búsqueda full-text (FTS) │ ├── vin_decoder.py # Decodificador VIN (API NHTSA) │ ├── catalogo.py # Categorías → grupos → partes │ ├── parte_detalle.py # Detalle con alternativas │ ├── comparador.py # Comparador OEM vs aftermarket │ ├── estadisticas.py # Dashboard de estadísticas │ ├── admin_partes.py # CRUD partes │ ├── admin_fabricantes.py # CRUD fabricantes │ ├── admin_crossref.py # CRUD referencias cruzadas │ └── admin_import.py # Import/Export CSV/JSON │ ├── renderers/ │ ├── base.py # Interfaz abstracta BaseRenderer │ └── curses_renderer.py # Renderer VT220 (curses) │ ├── utils/ │ ├── formatting.py # Formato de tablas, moneda, números │ └── vin_api.py # Cliente API NHTSA │ └── tests/ ├── test_db.py # 36 tests - capa de datos ├── test_core.py # 31 tests - keybindings, navigation, screens ├── test_utils.py # 30 tests - utilidades de formato └── test_integration.py # 19 tests - integración con MockRenderer ``` ## Tests ```bash # Ejecutar todos los tests (116 total) python -m pytest console/tests/ -v # Ejecutar por módulo python -m pytest console/tests/test_db.py -v python -m pytest console/tests/test_core.py -v python -m pytest console/tests/test_utils.py -v python -m pytest console/tests/test_integration.py -v ``` ## Capa de Datos La clase `Database` en `db.py` abstrae todas las consultas SQL. Diseñada para migrar de SQLite a PostgreSQL cambiando solo la implementación interna. Métodos principales: - `get_brands()`, `get_models()`, `get_years()`, `get_engines()` - `get_categories()`, `get_groups()`, `get_parts()` - `get_part()`, `get_alternatives()`, `get_cross_references()` - `search_parts()`, `search_part_number()` - `decode_vin()`, `get_stats()` - Métodos CRUD para administración