Ir al contenido

Analisis de Clientes

Agrupa y analiza las ventas por cliente para identificar los mas rentables.

  1. Accede a la pestana “Analisis” en Informes.
  2. Sub-pestana: “Por Cliente”.
  3. Selecciona el periodo (ano, trimestre o rango).
  4. Revisa la tabla ordenada por total facturado.
  5. Usa el grafico circular para visualizar la distribucion.
ColumnaDescripcion
ClienteNombre y CIF
Nº FacturasCantidad de documentos
Total FacturadoSuma de importes
Ticket MedioTotal / Nº Facturas
% del TotalProporcion sobre ingresos totales
Ultima FacturaFecha de ultima compra

Top 5 clientes: Representa normalmente el 80% de ingresos (regla de Pareto).

Clientes inactivos: Sin facturas en los ultimos 90 dias — oportunidad de reactivacion.

Ticket medio bajo: Clientes frecuentes con compras pequenas — potencial de upselling.

Detalles técnicos

Componente: src/features/accounting/sub-modules/reporting/components/analysis/CustomerAnalysisReport.tsx

Query de agregacion:

SELECT c.id,
c.name,
c.cif_nif,
COUNT(i.id) as invoice_count,
SUM(i.total_amount) as total_invoiced,
AVG(i.total_amount) as avg_ticket,
MAX(i.issue_date) as last_invoice_date
FROM customers c
LEFT JOIN invoices i ON c.id = i.customer_id
AND i.status != 'cancelled'
AND i.issue_date BETWEEN '<date_from>' AND '<date_to>'
WHERE c.business_id = '<business_id>'
GROUP BY c.id, c.name, c.cif_nif
HAVING COUNT(i.id) > 0
ORDER BY total_invoiced DESC;

Calculo de porcentaje:

const totalRevenue = data.reduce((sum, c) => sum + c.total_invoiced, 0);
const dataWithPercent = data.map(customer => ({
...customer,
percentage: (customer.total_invoiced / totalRevenue) * 100
}));