Ir al contenido

Generación Masiva

Genera el mismo informe para múltiples clientes en una sola operación.

  1. Ve a Informes → “Generación masiva”
  2. Selecciona el tipo de informe y el período
  3. Marca los clientes incluidos (o selecciona todos)
  4. Haz clic en “Generar para todos”
  5. El sistema procesa en segundo plano y notifica cuando están listos
  6. Descarga el ZIP con todos los informes individuales
Detalles técnicos — Generación masiva
// Edge Function para generación masiva
export async function generateBulkReports(
reportType: string,
period: { year: number; quarter?: number },
businessIds: string[]
): Promise<string> {
const jobId = crypto.randomUUID();
// Encolar trabajos
for (const businessId of businessIds) {
await queue.add('generate-report', {
jobId,
reportType,
period,
businessId,
});
}
return jobId; // El cliente hace polling con este ID
}
SELECT
'emitidas' AS tipo,
i.invoice_number AS numero,
i.issue_date AS fecha,
c.name AS contraparte,
c.tax_id AS nif,
i.base_amount AS base_imponible,
i.tax_amount AS cuota_iva,
i.total_amount AS total
FROM invoices i
JOIN customers c ON c.id = i.customer_id
WHERE i.business_id = :business_id
AND EXTRACT(YEAR FROM i.issue_date) = :year
AND EXTRACT(QUARTER FROM i.issue_date) = :quarter
AND i.status != 'cancelled'
UNION ALL
SELECT
'recibidas',
e.document_number,
e.expense_date,
s.name,
s.tax_id,
e.base_amount,
e.tax_amount,
e.total_amount
FROM expenses e
JOIN suppliers s ON s.id = e.supplier_id
WHERE e.business_id = :business_id
AND EXTRACT(YEAR FROM e.expense_date) = :year
AND EXTRACT(QUARTER FROM e.expense_date) = :quarter
ORDER BY fecha ASC;