Skip to content

feat(comercial): modal Detalle del widget Pipeline con drill por etapa

Alan Amox requested to merge comercial into qa

Agrega el modal de Detalle del widget donut-comercial-funnel con estructura distinta a los modales de KPIs operativos: KPI strip dinamico (1 card por etapa del funnel) y filas colapsables (1 por etapa) con 2 charts cada una.

Modal Pipeline (ModalComercialPipelineDetalle, nuevo):

  • Header con titulo Pipeline - Detalle por Etapa, subtitulo con filtros activos y boton cerrar.
  • KPI strip dinamico: 1 card por etapa con su color (Cerrado verde, Propuesta violeta, Perdido rojo, fallback indexado para etapas no mapeadas como Prospeccion). Usa grid con gridTemplateColumns dinamico (repeat N minmax 0 1fr) para mantener altura consistente con los otros modales (mismo padding y tipografia).
  • Orden fijo de etapas: Prospeccion/Prospectos, Propuesta, Cerrado/Cierres, Perdido, otras al final. Match por prefijo case-insensitive para tolerar variantes de spelling y plural. Aplica al KPI strip y al orden de las filas colapsables.
  • FilterBar interno: Portafolio + Empresa cascade + Limpiar + contador X registros.
  • Filas colapsables (default todas abiertas) ordenadas segun etapa. Header con chevron + dot color + nombre de la etapa + total. Click toggle expansion.
  • Cada fila expandida muestra grid 2-col: Area chart con gradient (count por mes seleccionado del page, zero-fill de meses sin data) y Bar chart horizontal Top 10 (por empresa default, o por linea de negocio cuando hay 1 empresa filtrada). Click en barra de empresa setea filtroEmpresa para drill rapido. En modo groupByLinea el click se desactiva.
  • Color de acento del modal: violeta #a78bfa (diferenciado de los 4 KPI modals).

Backend (comercial.py):

  • Nuevo bloque funnel_etapa_empresa_mes[] granular per-(etapa, empresa, linea, mes) sobre indicadores_sin_mes. Cuenta 1 indicador por record. Etapa vacia se bucketea como Sin etapa, linea vacia como Sin Linea. La granularidad por linea permite que el modal cambie a vista por linea de negocio cuando hay 1 empresa filtrada sin pedirle al backend datos adicionales.

Plumbing (ExecWidgetBlock.tsx):

  • comercial-pipeline agregado al union ModalKey.
  • Entrada en DRILL_MAP para donut-comercial-funnel con color violeta. Primer entry para un widget tipo donut (los anteriores eran kpi_card).
  • Render del modal con comercialData y filtroMeses.

Sin afectar otros widgets ni el resto del backend.

Merge request reports

Loading