Files
consultoria-as 2c6b6e0160 fix(console): fix PostgreSQL connection + add Metabase Actions guide
- Fix console/main.py: import DB_URL instead of missing DB_PATH
- Add sqlalchemy text() import for connection test
- Replace file-exists check with actual PostgreSQL connection test
- Mask password in startup banner
- Add docs/METABASE_ACTIONS.md: complete guide for data entry via
  Metabase Actions (models, forms, dashboard layout, workflows)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 05:52:12 +00:00
..

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

# 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

# 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