curl --request POST \
--url https://api.example.com/api/upload-excel \
--header 'Content-Type: <content-type>' \
--data '{}'{
"success": true,
"message": "<string>",
"count": 123,
"errors": [
{}
],
"transactions": [
{}
],
"error": "<string>",
"details": "<string>",
"hint": "<string>"
}Bulk import transactions from CSV files
curl --request POST \
--url https://api.example.com/api/upload-excel \
--header 'Content-Type: <content-type>' \
--data '{}'{
"success": true,
"message": "<string>",
"count": 123,
"errors": [
{}
],
"transactions": [
{}
],
"error": "<string>",
"details": "<string>",
"hint": "<string>"
}POST /api/upload-excel
multipart/form-data for file upload.csvYYYY-MM-DDExample: 2025-10-06gasto (expense) or ingreso (income)1200.50Efectivo, Tarjeta, TransferenciaDefault: EfectivoArmandofecha,tipo,categoria,monto,descripcion,num_pax,metodo_pago,registrado_por
2025-10-06,ingreso,Tours,1200,Tour grupal,15,Efectivo,Armando
2025-10-06,gasto,Alimentación,350,Comida para grupo,15,Tarjeta,Maria
2025-10-07,gasto,Transporte,450,Gasolina,,Efectivo,Carlos
2025-10-07,ingreso,Ventas,800,Venta de productos,,Transferencia,Armando
const formData = new FormData();
formData.append('file', csvFile);
const response = await fetch('/api/upload-excel', {
method: 'POST',
body: formData
});
const result = await response.json();
console.log(result);
// {
// success: true,
// message: "Se registraron 4 transacciones exitosamente",
// count: 4,
// transactions: [...]
// }
errors array:
{
"success": true,
"message": "Se registraron 3 transacciones exitosamente",
"count": 3,
"errors": [
"Fila 2: Tipo debe ser 'gasto' o 'ingreso'",
"Fila 5: Monto inválido"
],
"transactions": [...]
}
{
"error": "Faltan columnas requeridas: fecha, monto",
"hint": "Formato esperado: fecha,tipo,categoria,monto,descripcion,num_pax,metodo_pago,registrado_por"
}
{
"error": "Solo se permiten archivos CSV (.csv)"
}
{
"error": "El archivo está vacío o no tiene datos"
}
errors array, but valid rows are still imported.tipo must be exactly gasto or ingreso (case-insensitive)monto must be a valid positive numberfecha must be in valid date format (YYYY-MM-DD)Alimentacion (without accent) will fail validation.Número de columnas incorrecto
Tipo debe ser 'gasto' o 'ingreso'
tipo column contains an invalid value.Solution: Use only gasto or ingreso (case-insensitive).Monto inválido
monto column contains a non-numeric value or zero/negative number.Solution: Use positive numbers with decimal point (e.g., 150.50).Error al insertar en BD