# DASH-REMOVE-VARIANTS-CARD — Implementer evidence > Implementer: build · Estado: ready for review ## Resumen ejecutivo He eliminado las 2 KPI cards del dashboard que referenciaban el concepto "variantes" de producto. El concepto variants ya no aplica desde F-108 (remove variants module), y la card "Alertas" era además redundante con la campanita `OrderNotifications` (NOTIF-INVENTORY-ALERTS cerrado en la sesión anterior, que ahora muestra todas las alertas de inventario). ## Cambios aplicados | Archivo | Δ | Descripción | |---|---|---| | `project/apps/admin/src/app/(dashboard)/page.tsx` | -19/+2 | Eliminada la KPI card "Sin stock" (sub "Variantes agotadas") de la fila primaria. Eliminada la KPI card "Alertas" (sub "X sin stock") de la fila secundaria. Grids rebalanceados: primaria `lg:grid-cols-4` → `lg:grid-cols-3`; secundaria `lg:grid-cols-3` → `lg:grid-cols-2`. | Total: 1 archivo, 2 líneas añadidas, 19 líneas eliminadas. ## Estado final del dashboard | Fila | Antes | Después | |---|---|---| | KPI primaria | Pedidos hoy, Ingresos hoy, Productos activos, **Sin stock** | Pedidos hoy, Ingresos hoy, Productos activos | | KPI secundaria | Clientes nuevos, Total pedidos, **Alertas** | Clientes nuevos, Total pedidos | | Pedidos por estado | (intacto) | (intacto) | | Acciones rápidas | (intacto) | (intacto) | ## Decisiones 1. **`outOfStockVariants` en el interface Stats se mantiene.** Aunque ya no se renderiza, sigue siendo parte del contrato con el backend. El endpoint `/api/admin/stats` sigue devolviéndolo (otros consumers pueden usarlo). Eliminarlo del interface sería un cambio de contrato de API innecesario para un chore visual. 2. **No reemplazo el card con algo nuevo.** El operador tiene la campanita en el header que ahora muestra todas las alertas de inventario (low stock, out of stock, caducados, por caducar, margen <30%). Duplicar esa info en el dashboard sería ruido. 3. **Backend intacto.** No se toca `/api/admin/stats` ni `admin-stats/api/stats.routes.ts`. Si en el futuro nadie consume `outOfStockVariants`, se limpiará en otra iteración. ## Evidencia de verificación ### 1. Typecheck admin ```bash $ cd project/apps/admin && npx tsc --noEmit (exit 0, sin output) ``` ### 2. verify.sh del orquestra ```bash $ ./scripts/verify.sh [OK] backlog válido (367 features) [OK] runtime-status válido [OK] Orquestra verificado. Puedes trabajar. ``` ### 3. Diff resumido ```text project/apps/admin/src/app/(dashboard)/page.tsx | 21 ++------------------- 1 file changed, 2 insertions(+), 19 deletions(-) ``` Cambios: - `lg:grid-cols-4` → `lg:grid-cols-3` (primaria). - `lg:grid-cols-3` → `lg:grid-cols-2` (secundaria). - Bloque `` eliminado. - Bloque `` eliminado. ## Cosas que NO hice (scope deliberado) - No toqué el backend `/api/admin/stats` (mantiene `outOfStockVariants`). - No reemplacé los cards eliminados con otros (campanita cubre el caso). - No eliminé `outOfStockVariants` del interface `Stats` (cambio de contrato innecesario). ## Próximo stage → **review_gate (reviewer)**: revisión técnica rápida. → **security_gate (security)**: trivially OK (solo UI removal, sin superficie de seguridad). → **qa_gate (qa)**: visual check.