- Migrate from SQLite to PostgreSQL with normalized schema - Add 11 lookup tables (fuel_type, body_type, drivetrain, transmission, materials, position_part, manufacture_type, quality_tier, countries, reference_type, shapes) - Rewrite dashboard/server.py (76 routes) using SQLAlchemy text() queries - Rewrite console/db.py (27 methods) using SQLAlchemy ORM - Add models.py with 27 SQLAlchemy model definitions - Add config.py for centralized DB_URL configuration - Add migrate_to_postgres.py migration script - Add docs/METABASE_GUIDE.md with complete data entry guide - Rebrand from "AUTOPARTS DB" to "NEXUS AUTOPARTS" - Fill vehicle data gaps via NHTSA API + heuristics: engines (cylinders, power, torque), brands (country, founded_year), models (body_type, production years), MYE (drivetrain, transmission, trim) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
167 lines
6.5 KiB
Markdown
167 lines
6.5 KiB
Markdown
# 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
|