Importación masiva (CSV)
Cuando arrancas con FinMova o cuando un proveedor te envía un catálogo grande, no quieres capturar productos uno por uno. La importación masiva te permite cargar hasta 2,000 productos por archivo desde un CSV, con validación por fila y reporte de errores.
Ubicación: Inventario → Productos y servicios → Importar.
Cuándo usar la importación masiva
- Carga inicial del catálogo al adoptar FinMova.
- Catálogo de proveedor que te llega en Excel.
- Migración desde otro sistema.
- Actualización masiva de precios o costos.
Formato del CSV
FinMova espera una fila por producto, con encabezados en la primera fila. Las columnas reconocidas:
| Columna | Obligatoria | Tipo | Valor por defecto |
|---|---|---|---|
code | — | Texto ≤ 64 | (vacío) |
barcode | — | Texto ≤ 64 | (vacío) |
name | ✅ | Texto ≤ 200 | — |
description | — | Texto ≤ 2,000 | (vacío) |
type | — | product o service | product |
price | ✅ | Número ≥ 0 | — |
cost | — | Número ≥ 0 | 0 |
taxRate | — | Número 0 – 100 | 18 |
taxIncluded | — | true / false | false |
trackInventory | — | true / false | true |
unitOfMeasure | — | Texto ≤ 16 | UND |
categoryName | — | Texto ≤ 120 | (vacío) |
isActive | — | true / false | true |
Importante.
nameypriceson los únicos campos estrictamente obligatorios. Si una fila no los lleva, se descarta como error.
Idempotencia — usa code como llave
El comportamiento de la importación depende de si la fila tiene
code o no:
¿Tiene code? | ¿code existe en BD? | Resultado |
|---|---|---|
| ✅ Sí | ✅ Sí | Actualiza el producto existente con los nuevos valores. |
| ✅ Sí | ❌ No | Inserta un producto nuevo con ese code. |
| ❌ No | — | Inserta un producto nuevo (sin código). Genera advertencia. |
Buena práctica. Usa siempre
codeen tus CSV. Te permite reimportar el mismo archivo para actualizar datos sin generar duplicados.
Plantilla CSV
Estructura mínima recomendada:
code,name,price,cost,taxRate,unitOfMeasure,categoryName
P-001,Café molido 1kg,750,500,18,UND,Alimentos
P-002,Té verde 100g,300,180,18,UND,Alimentos
P-003,Servicio consultoría,2500,0,18,HRS,ServiciosCuidado con Excel. Si abres un CSV en Excel y vuelves a guardar, puede:
- Cambiar el separador (de coma a punto y coma).
- Reformatear números (precio "1,000" interpretado como "1" y "000").
- Corromper UTF-8 (acentos se rompen).
Si vas a editar el CSV, hazlo con un editor de texto (VS Code, Sublime) o usa Google Sheets que respeta CSV mejor.
Categorías
Si el CSV trae categoryName:
- Si la categoría existe, asigna el producto a ella.
- Si no existe, FinMova la crea automáticamente (sin padre).
Buena práctica. Si tu catálogo tiene categorías jerárquicas, créalas primero a mano y deja
categoryNamesolo con el nombre de hoja. La importación no maneja "padre/hijo" en el CSV.
Hacer la importación
1 · Abre el flujo
Inventario → Productos y servicios → Importar.
2 · Sube el archivo
Adjunta el CSV. FinMova previsualiza las primeras filas para que confirmes que el formato es el esperado.
3 · Validación por fila
FinMova revisa cada fila:
- Campos obligatorios.
- Rangos numéricos.
- Largos máximos.
- Coherencia (precio ≥ 0, taxRate 0-100, etc.).
Si hay filas con errores:
- Las filas válidas se importan.
- Las filas con errores se reportan en pantalla con el número de fila y la causa.
Buena práctica. Después de la primera importación, revisa el reporte de errores y corrige el CSV antes de reimportar. Reimportar con
codecorrecto actualiza los productos previamente importados.
4 · Confirmación
Al terminar, FinMova muestra:
- Filas insertadas (productos nuevos).
- Filas actualizadas (productos con
codeexistente). - Filas con error y motivo.
Exportar el catálogo
El flujo inverso también está disponible: Exportar CSV descarga todo tu catálogo en el mismo formato. Útil para:
- Backup del catálogo.
- Editar masivamente en Excel / Sheets y reimportar.
- Compartir con tu contador o ERP externo.
Edición masiva (sin CSV)
Para cambios rápidos sin pasar por archivo, desde la lista de productos puedes:
- Seleccionar varios productos con el checkbox.
- Elegir acción:
price_set— fijar precio absoluto (todos los seleccionados al mismo precio).price_factor— multiplicar por un factor (1.05 = +5 %, 0.9 = −10 %).activate— marca activos.deactivate— marca inactivos.
- Aplicar.
Cuidado. La edición masiva no tiene "deshacer". Confirma tu selección antes de aplicar. Para reversiones grandes, mejor exportar antes, hacer la acción, e importar el CSV viejo si algo sale mal.
Límites
| Límite | Valor |
|---|---|
| Filas por archivo | 2,000 |
| Tamaño del archivo | depende del plan; típicamente unos pocos MB |
| Tiempo de procesamiento | depende del volumen; ~30 segundos para 1,000 filas |
Si tu catálogo supera las 2,000 filas, divídelo en varios archivos.
La idempotencia por code te permite combinar sin duplicar.
Existencias no se importan aquí
La importación masiva crea / actualiza productos, no existencias. Para cargar stock inicial masivo:
- Una pantalla por producto-almacén con Ajustar existencias.
- O coordina con soporte para una carga inicial asistida.
Quién puede importar
| Rol | Importar | Exportar | Edición masiva |
|---|---|---|---|
| owner / admin | ✅ | ✅ | ✅ |
| accountant | ✅ | ✅ | ✅ |
| sales | ❌ | ✅ | ❌ |
| viewer | ❌ | ✅ | ❌ |
Errores comunes
- "Nombre requerido" — la fila no tiene
name. - "Precio no puede ser negativo" — revisa el valor.
- "Sin filas para importar" — el CSV está vacío o el separador es incorrecto.
- Tildes / ñ aparecen rotas — el CSV no está en UTF-8; re-guardar con codificación UTF-8.
- "Valor demasiado alto" — precio o costo supera el tope (999,999,999,999).
Siguientes pasos
- Productos y servicios — para capturar uno a uno.
- Almacenes y existencias — el paso siguiente para cargar stock.
Manifiesto de capturas
assets/inventario/18-importar-csv-upload.png— pantalla para subir el archivo.assets/inventario/19-preview-csv.png— previsualización de las primeras filas.assets/inventario/20-reporte-errores.png— reporte tras importar (insertadas / actualizadas / errores).assets/inventario/21-edicion-masiva-acciones.png— selección múltiple + selector de acción (set / factor / activate / deactivate).
Última actualización: