Curses waits up to 1 second after ESC to distinguish it from escape sequences (arrow keys, F-keys). Set ESCDELAY=25 before curses.initscr() so ESC responds near-instantly while still handling escape sequences. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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.
Requisitos
- Python 3.8+
- SQLite 3 (incluido con Python)
- Paquete
rich(solo para modo moderno)
pip install rich # Opcional, solo para --mode modern
Inicio Rápido
# Modo VT220 (clásico, verde sobre negro)
python -m console
# Modo moderno (Rich/TUI con colores)
python -m console --mode modern
# Especificar base de datos
python -m console --db /ruta/a/vehicle_database.db
# Ver versión
python -m console --version
Modos de Visualización
VT220 (por defecto)
- Terminal clásica verde sobre negro
- Caracteres de dibujo de cajas (box-drawing)
- Compatible con cualquier terminal
- Usa la librería
curses(incluida en Python)
Modern
- Interfaz moderna con colores y estilos Rich
- Tema azul/cian
- Requiere
pip install rich - Si
richno está instalado, cae automáticamente a modo VT220
Menú Principal
╔══════════════════════════════════════╗
║ AUTOPARTES v1.0.0 ║
║ Sistema de Catalogo de Autopartes ║
╠══════════════════════════════════════╣
║ 1. Buscar por Vehiculo ║
║ 2. Buscar por Numero de Parte ║
║ 3. Buscar por Texto ║
║ 4. Decodificar VIN ║
║ 5. Catalogo por Categoria ║
║ ────────────────────────── ║
║ 6. Admin: Partes ║
║ 7. Admin: Fabricantes ║
║ 8. Admin: Referencias Cruzadas ║
║ 9. Import/Export ║
║ ────────────────────────── ║
║ S. Estadisticas del Sistema ║
║ 0. Salir ║
╚══════════════════════════════════════╝
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, --mode vt220|modern
├── 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 # Modo VT220 (curses)
│ └── textual_renderer.py # Modo moderno (Rich)
│
├── 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
# 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