feat(juridico/marcas): widgets de Marcas en el Dashboard Ejecutivo OAE
Espeja el dashboard de Marcas como widgets individuales del OAE, en el picker de Mis Dashboards bajo la categoria Juridico - Corporativo, gateados a la sub-area Corporativo. Todos consumen el mismo endpoint marcas/dashboard/stats como unica fuente de verdad.
10 widgets:
- 6 KPIs: Total, Vigentes, Vencidas, Vigencia 90d, Declaracion de uso 90d, Renovacion 90d. Los 3 radares espejan los KPIs del MarcasDashboard.
- 3 donas: por estatus, por clase de Niza, por tipo de registro.
- 1 linea de tiempo de vencimientos: area apilada por tipo, selectores de ano y mes, granularidad adaptativa dia/semana/mes, marca Hoy y drill por periodo.
Drill-down: reutiliza el MarcasDetalleModal del portal juridico con su drill jerarquico Portafolio - Empresa - Razon Social, montado via alias del embed corporativo y portado a document.body para escapar el transform de react-grid-layout. No se construyo un modal nuevo, por eso no hay widget de distribucion por portafolio: se cubre con el drill del modal.
Linea de tiempo: reutiliza el componente MarcasVencimientosTimeline, montado self-chromed para no duplicar el card chrome. Se le agrego el prop fillHeight para que la grafica rellene la celda de altura fija del grid y no se desborde sobre otros widgets; el dashboard standalone lo deja en false.
Backend: helper flatten_csv en stats y detalle para aceptar los filtros CSV que mandan los widgets. Los radares, subsets y la linea de tiempo ya existian.
Doc: portal_juridico/docs/CORPORATIVO.md seccion 5.6 mas bitacora.
Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com