Remove the Rich-based textual renderer and all --mode modern references. The console now runs exclusively in VT220 curses mode (green on black). No external dependencies required. Removed: console/renderers/textual_renderer.py, --mode flag, DEFAULT_MODE Updated: main.py, config.py, README.md, console/README.md Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
167 lines
6.5 KiB
Markdown
167 lines
6.5 KiB
Markdown
# AUTOPARTES Console - Sistema Pick/VT220
|
|
|
|
Interfaz de consola para el catálogo de autopartes, 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
|