Importar Productos
Exportar contenido
Carga masiva de productos desde Excel con validación automática y detección de errores.
- En la lista de productos, clic en “Importar” (botón superior).
- Clic en “Descargar Plantilla” para obtener el formato correcto.
- Completa el archivo Excel con tus productos.
- Arrastra el archivo al área de carga o clic en “Seleccionar archivo”.
- Revisa los errores de validación (si los hay).
- Clic en “Importar” — productos cargados.
Columnas de la plantilla
Sección titulada «Columnas de la plantilla»Obligatorias:
| Columna | Formato | Ejemplo |
|---|---|---|
| nombre | Texto (max 200 chars) | Camiseta Básica |
| tipo | producto o servicio | producto |
| precio | Número decimal | 15.00 |
| iva | Número (0-100) | 21 |
| unidad | Texto (max 20 chars) | und |
Opcionales:
| Columna | Formato | Ejemplo |
|---|---|---|
| descripcion | Texto (max 1000 chars) | Camiseta 100% algodón |
| sku | Texto (max 50 chars, único) | CAM-BAS-001 |
| categoria | Texto (max 100 chars) | Ropa |
| precio_coste | Número decimal | 8.50 |
| stock_actual | Número entero | 100 |
| stock_minimo | Número entero | 10 |
Cómo sé que lo hice bien
Sección titulada «Cómo sé que lo hice bien»- La validación muestra “N producto(s) listos para importar”.
- Todos los productos importados aparecen en la lista con estado activo.
- Toast de confirmación: “N productos importados correctamente”.
Errores comunes
Sección titulada «Errores comunes»| Mensaje | Causa | Solución |
|---|---|---|
| ”Formato inválido” | Archivo no es Excel | Usa archivo .xlsx o .xls |
| ”El nombre es requerido (fila N)“ | Fila sin nombre | Completa el campo nombre |
| ”Precio inválido (fila N)“ | Precio negativo o texto | Introduce número válido ≥ 0 |
| ”IVA inválido (fila N)“ | IVA fuera de rango 0-100 | Corrige el porcentaje de IVA |
| ”SKU duplicado (fila N)“ | SKU ya existe | Usa código único o deja vacío |
🔧 Detalles Técnicos — Importar Productos
Librería usada:
xlsxoread-excel-filepara parsear archivos Excel- Validación con schema Zod del producto
Componente:
ProductImportModal.tsx- Drag & drop con
react-dropzone - Validación en tiempo real
Funciones de utilidad:
- Ubicación:
/src/features/products/utils/productImportExport.ts validateImportData(file: File)— Parsea y valida el ExcelconvertToDbFormat(data: ProductImportRow[])— Transforma a formato BDgenerateProductTemplate()— Genera plantilla Excel
Tipo de dato:
interface ProductImportRow { nombre: string; descripcion?: string; sku?: string; tipo: 'producto' | 'servicio'; precio: number; precio_coste?: number; iva: number; unidad: string; categoria?: string; stock_actual?: number; stock_minimo?: number;}
interface ValidationError { row: number; field: string; message: string;}Flujo de validación:
- Parse del archivo Excel → Array de objetos
- Validación de cada fila con
productSchema - Verificación de SKUs duplicados (contra BD)
- Generación de reporte de errores
- Inserción masiva con
supabase.from('products').insert()
Queries de diagnóstico:
-- Productos importados recientemente (última hora)SELECT id, name, sku, created_atFROM productsWHERE business_id = '<business_id>' AND created_at >= NOW() - INTERVAL '1 hour'ORDER BY created_at DESC;