Dashboard General

{{ periodoNombre }}

{{ formatCurrency(resumen.ventas_netas) }}
Ventas Netas
{{ resumen.clientes_activos }}
Clientes Activos
{{ resumen.operaciones }}
Operaciones
{{ formatCurrency(resumen.devoluciones) }}
Devoluciones
🏆 Top 10 Vendedores
VendedorVentasClientes
{{ v.nombre }} {{ formatCurrency(v.ventas) }} {{ v.clientes }}
💎 Top 10 Clientes
ClienteVentasVendedor
{{ truncate(c.nombre, 25) }} {{ formatCurrency(c.ventas) }} {{ truncate(c.vendedor, 15) }}

Vendedores

{{ periodoNombre }}

VendedorVentasClientesOperaciones
{{ v.nombre }}
Cód: {{ v.codigo }}
{{ formatCurrency(v.ventas) }} {{ v.clientes }} {{ v.operaciones }} Cartera Artículos

Top Clientes

{{ periodoNombre }}

ClienteVendedorVentas
{{ truncate(c.nombre, 35) }}
{{ c.codigo }}
{{ truncate(c.vendedor, 20) }} {{ formatCurrency(c.ventas) }}

📦 Top Artículos

{{ periodoNombre }}

ArtículoVentas $UnidadesClientes
{{ truncate(a.descripcion, 35) }}
{{ a.codigo }}
{{ formatCurrency(a.ventas) }} {{ formatNumber(a.unidades) }} {{ a.clientes }}

🏢 {{ clienteDetalle.cliente?.razon_social }}

Artículos comprados - {{ getNombreMes(rangoDesde) }} a {{ getNombreMes(rangoHasta) }}

{{ clienteDetalle.cliente?.codigo }}
Código Cliente
{{ (clienteDetalle.articulos || []).length }}
Artículos Comprados
{{ formatCurrency((clienteDetalle.articulos || []).reduce((a,c) => a + c.total_ventas, 0)) }}
Total Compras
Artículo {{ getNombreMesCorto(p) }} Total
{{ truncate(a.descripcion, 28) }}
{{ a.codigo }}
{{ a['m' + p + '_ventas'] > 0 ? formatCurrency(a['m' + p + '_ventas']) : '-' }} {{ formatCurrency(a.total_ventas) }}

📦 Artículos de {{ vendedorArticulos.vendedor?.nombre }}

{{ getNombreMes(rangoDesde) }} a {{ getNombreMes(rangoHasta) }}

{{ (vendedorArticulos.articulos || []).length }}
Artículos Vendidos
{{ formatCurrency((vendedorArticulos.articulos || []).reduce((a,c) => a + c.total_ventas, 0)) }}
Ventas Totales
{{ (vendedorArticulos.articulos || []).reduce((a,c) => a + c.clientes, 0) }}
Total Clientes
Artículo {{ getNombreMesCorto(p) }} Total Clientes
{{ truncate(a.descripcion, 28) }}
{{ a.codigo }}
{{ a['m' + p + '_ventas'] > 0 ? formatCurrency(a['m' + p + '_ventas']) : '-' }} {{ formatCurrency(a.total_ventas) }} {{ a.clientes }}

💡 Oportunidades para {{ articulosSugeridos.vendedor?.nombre }}

Artículos populares que tus clientes podrían comprar - {{ getNombreMes(rangoDesde) }} a {{ getNombreMes(rangoHasta) }}

{{ articulosSugeridos.total_mis_clientes || 0 }}
👥 Tus Clientes
{{ (articulosSugeridos.sugerencias || []).length }}
📦 Artículos Oportunidad
{{ formatCurrency((articulosSugeridos.sugerencias || []).reduce((a,c) => a + parseFloat(c.ventas_mercado || 0), 0)) }}
💰 Mercado Total
Artículo Tus Clientes
Compran
Oportunidad
No Compran
Penetración Vendedores
Mercado
Clientes
Mercado
Ventas Mercado
{{ truncate(a.descripcion, 28) }}
{{ a.codigo }}
{{ a.mis_clientes_compran }} {{ a.mis_clientes_no_compran }} {{ a.penetracion }}% {{ a.vendedores_venden }} {{ a.clientes_mercado }} {{ formatCurrency(a.ventas_mercado) }}

💡 Cómo leer esta tabla:
Tus Clientes Compran: De tus {{ articulosSugeridos.total_mis_clientes }} clientes, cuántos ya compran este artículo
Oportunidad (No Compran): Clientes tuyos que NO compran este artículo - ¡potenciales!
Penetración: % de tus clientes que compran (rojo=baja, amarillo=media, verde=alta)
Vendedores/Clientes Mercado: Cuántos venden y compran este artículo en total
Filas resaltadas: Artículos que NINGUNO de tus clientes compra

📊 Evolutivo Vendedores

{{ getNombreMes(rangoDesde) }} - {{ getNombreMes(rangoHasta) }} 2025

{{ formatCurrency(t.ventas) }}
{{ t.nombre.split(' ')[0] }}
{{ formatCurrency(evolutivo.totales?.reduce((a,t) => a + t.ventas, 0)) }}
Total
📥 Exportar Excel
Vendedor {{ getNombreMesCorto(p) }} $ Total Promedio
{{ v.nombre }} {{ formatCurrency(v['m' + p + '_ventas']) }} {{ formatCurrency(v.total_ventas) }} {{ formatCurrency(v.total_ventas / getCantidadMeses()) }}

📦 Evolutivo Artículos

{{ getNombreMes(rangoDesde) }} - {{ getNombreMes(rangoHasta) }} 2025

📥 Exportar Excel
Artículo {{ getNombreMesCorto(p) }} Total Promedio Clientes
{{ truncate(a.descripcion, 28) }}
{{ a.codigo }}
{{ a['m' + p + '_ventas'] > 0 ? formatCurrency(a['m' + p + '_ventas']) : '-' }} {{ formatCurrency(a.total_ventas) }} {{ formatCurrency(a.total_ventas / getCantidadMeses()) }} {{ a.total_clientes }}

💰 Resumen de Cobranzas

{{ getNombreMes(rangoDesde) }} - {{ getNombreMes(rangoHasta) }} 2025

{{ formatCurrency(p.total_cobrado) }}
{{ p.periodo.split(' ')[0] }}
{{ formatCurrency(cobranzasResumen.totales?.total) }}
Total
📊 Cobranzas por Vendedor
Vendedor {{ getNombreMesCorto(p) }} $ Ventas Cobros Promedio Índice
{{ v.vendedor }} {{ formatCurrency(v['c' + p]) }} {{ formatCurrency(v.total_ventas) }} {{ formatCurrency(v.total_cobros) }} {{ formatCurrency(v.total_cobros / getCantidadMeses()) }} {{ v.indice }}%

💰 Cobranzas de {{ cobranzasDetalle.vendedor?.nombre }}

Detalle por cliente - {{ getNombreMes(rangoDesde) }} a {{ getNombreMes(rangoHasta) }}

Cliente {{ getNombreMesCorto(p) }} Total Promedio
{{ truncate(c.nombre, 30) }}
{{ c.codigo }}
{{ c['c' + p] > 0 ? formatCurrency(c['c' + p]) : '-' }} {{ formatCurrency(c.total_cobros) }} {{ formatCurrency(c.total_cobros / getCantidadMeses()) }}

📊 Ventas vs Cobranzas

Comparativa por cliente - {{ getNombreMes(rangoDesde) }} a {{ getNombreMes(rangoHasta) }}

{{ formatCurrency(ventasCobranzas.reduce((a,c) => a + c.total_ventas, 0)) }}
Total Ventas
{{ formatCurrency(ventasCobranzas.reduce((a,c) => a + c.total_cobros, 0)) }}
Total Cobros
{{ formatCurrency(ventasCobranzas.reduce((a,c) => a + c.total_ventas - c.total_cobros, 0)) }}
Diferencia
{{ ventasCobranzas.reduce((a,c) => a + c.total_ventas, 0) > 0 ? Math.round(ventasCobranzas.reduce((a,c) => a + c.total_cobros, 0) / ventasCobranzas.reduce((a,c) => a + c.total_ventas, 0) * 100) : 0 }}%
Índice Cobranza
ClienteVendedorVentasCobrosDiferencia%
{{ truncate(c.razon_social, 28) }}
{{ c.cod_cliente }}
{{ truncate(c.vendedor, 15) }} {{ formatCurrency(c.total_ventas) }} {{ formatCurrency(c.total_cobros) }} {{ formatCurrency(c.total_ventas - c.total_cobros) }} {{ c.total_ventas > 0 ? Math.round(c.total_cobros / c.total_ventas * 100) : 0 }}%

Seleccioná un vendedor para ver su cartera

🎯 Cartera de {{ cartera.vendedor.nombre }}

{{ getNombreMes(rangoDesde) }} - {{ getNombreMes(rangoHasta) }} 2025

{{ cartera.metricas?.cartera_asignada }}
Cartera Asignada
{{ cartera.metricas?.fuera_cartera }}
Fuera Cartera
{{ (cartera.clientes || []).length }}
Total Clientes
{{ formatCurrency(cartera.metricas?.total_ventas) }}
Ventas Totales
📥 Exportar Excel
Cliente Cartera {{ getNombreMesCorto(p) }} Total Promedio
{{ truncate(c.nombre, 28) }}
{{ c.codigo }}
✓ SíOtro {{ c['m' + p + '_ventas'] > 0 ? formatCurrency(c['m' + p + '_ventas']) : '-' }} {{ formatCurrency(c.total_ventas) }} {{ formatCurrency(c.total_ventas / getCantidadMeses()) }}

📦 Análisis de Stock - Acciones Comerciales

Artículos con stock que necesitan atención - {{ getNombreMes(rangoDesde) }} a {{ getNombreMes(rangoHasta) }}

{{ stockAnalisis.resumen?.CRITICO || 0 }}
🔴 Crítico
Sin ventas
{{ stockAnalisis.resumen?.MUY_BAJA || 0 }}
🟠 Muy Baja
1 mes venta
{{ stockAnalisis.resumen?.BAJA || 0 }}
🟡 Baja
2 meses venta
{{ stockAnalisis.resumen?.EXCESO || 0 }}
📊 Exceso
Mucho stock
{{ stockAnalisis.resumen?.OK || 0 }}
✅ OK
📥 Exportar Excel
Estado Artículo Stock Ventas $ Vendedores Faltan Clientes Frecuencia $/Vendedor Acción
🔴 🟠 🟡 📊 {{ truncate(a.descripcion, 25) }}
{{ a.codigo }}
{{ formatNumber(a.stock) }} {{ a.ventas_total > 0 ? formatCurrency(a.ventas_total) : '-' }} {{ a.vendedores }} {{ a.vendedores_faltan }} {{ a.clientes }} {{ a.meses_con_venta }}/{{ a.total_meses }} {{ a.promedio_vendedor > 0 ? formatCurrency(a.promedio_vendedor) : '-' }} {{ a.accion }}

💡 Cómo usar esta información:
Crítico: Artículos con stock pero SIN ventas → Liquidar o promoción agresiva
Muy Baja/Baja: Poca frecuencia de venta → Asignar a más vendedores (ver columna "Faltan")
Faltan: De {{ stockAnalisis.total_vendedores }} vendedores activos, cuántos NO venden este artículo
$/Vendedor: Promedio de venta por vendedor → Si es alto, más vendedores deberían venderlo

🔄 Clientes a Recuperar

Clientes que dejaron de comprar (última compra hace 2+ meses)

{{ sugerenciasVentas.reduce((a, v) => a + v.clientes_perdidos, 0) }}
Clientes a Recuperar
{{ formatCurrency(sugerenciasVentas.reduce((a, v) => a + v.ventas_perdidas, 0)) }}
Ventas Previas
{{ sugerenciasVentas.length }}
Vendedores Afectados
{{ clientesSinVentas.reduce((a, v) => a + v.cantidad, 0) }}
Cartera Sin Ventas
👤 {{ vendedor.vendedor }}
{{ vendedor.clientes_perdidos }} clientes {{ formatCurrency(vendedor.ventas_perdidas) }}
UrgenciaClienteCarteraÚlt. VendedorVentas Prev.Último MesMeses Sin
🔴 CRÍTICA 🟠 ALTA 🟡 MEDIA {{ truncate(c.cliente, 25) }}
{{ c.cod_cliente }}
- {{ truncate(c.ultimo_vendedor, 15) }}- {{ formatCurrency(c.ventas_total) }} {{ getNombreMesCorto(c.ultimo_periodo) }} {{ c.meses_sin_compra }}

📋 Clientes de Cartera Sin Ventas en el Año

Clientes asignados que no registran compras

👤 {{ vendedor.vendedor }}
{{ vendedor.cantidad }} clientes
CódigoCliente
{{ c.cod_cliente }} {{ truncate(c.cliente, 40) }}
⏳ Cargando datos...