feat(F-157): completed feature
This commit is contained in:
15
work/artifacts/F-157/architect.md
Normal file
15
work/artifacts/F-157/architect.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# F-157 — Diseño
|
||||
|
||||
## Decisión
|
||||
Usar un layout anidado de Next.js en `app/(dashboard)/reporting/layout.tsx` para alojar navegación local persistente, siguiendo el patrón visual de las pestañas internas de Ajustes.
|
||||
|
||||
## Cambios
|
||||
1. `permissions.ts`: el modelo del sidebar vuelve a ser plano; solo existe la entrada principal `/reporting`.
|
||||
2. Dashboard layout: renderiza únicamente entradas del menú principal, sin subitems.
|
||||
3. Reporting nested layout: lista local Dashboard, Ventas y Productos con estado activo según `usePathname`.
|
||||
4. `/reporting`: redirige a `/reporting/dashboard`, que actúa como apartado inicial.
|
||||
|
||||
## Riesgos
|
||||
- Evitar que `/reporting` se marque distinto: el sidebar usa `pathname.startsWith('/reporting')`.
|
||||
- Evitar duplicar paddings: el layout local solo añade estructura flex y deja a cada página su contenido.
|
||||
- Mantener RBAC existente; no se introducen rutas ni permisos nuevos.
|
||||
7
work/artifacts/F-157/documenter.md
Normal file
7
work/artifacts/F-157/documenter.md
Normal file
@@ -0,0 +1,7 @@
|
||||
# F-157 — Documentación
|
||||
|
||||
Cambio de comportamiento visible:
|
||||
|
||||
- El menú principal contiene únicamente **Reporting**.
|
||||
- Al abrir Reporting se selecciona **Dashboard** por defecto.
|
||||
- **Dashboard**, **Ventas** y **Productos** son apartados internos del módulo y se muestran en la navegación local de Reporting, igual que los apartados de Ajustes.
|
||||
23
work/artifacts/F-157/implementer.md
Normal file
23
work/artifacts/F-157/implementer.md
Normal file
@@ -0,0 +1,23 @@
|
||||
# F-157 — Implementer
|
||||
|
||||
## Implementación
|
||||
- Eliminados Dashboard, Ventas y Productos de `NAV_ITEMS`; el menú principal conserva una única entrada Reporting.
|
||||
- Simplificado el sidebar para renderizar solo `visibleNavItems`.
|
||||
- Añadido `reporting/layout.tsx` con navegación local persistente, estilo Ajustes, y estado activo accesible mediante `aria-current`.
|
||||
- `/reporting` redirige al apartado inicial `/reporting/dashboard`.
|
||||
- Eliminados los enlaces redundantes «← Reporting» de las páginas internas.
|
||||
- Corregido el contrato frontend de `sort` en productos para que el build del admin use el filtro backend existente en vez de enviar `groupBy=revenue`.
|
||||
|
||||
## Evidencia
|
||||
- `cd project/apps/admin && npm run build`: PASS, 29 rutas generadas.
|
||||
- `cd project && node_modules/.bin/tsc --noEmit`: PASS.
|
||||
- `git diff --check`: PASS.
|
||||
- `./scripts/verify.sh`: PASS.
|
||||
|
||||
## Archivos
|
||||
- `project/apps/admin/src/app/(dashboard)/layout.tsx`
|
||||
- `project/apps/admin/src/lib/permissions.ts`
|
||||
- `project/apps/admin/src/app/(dashboard)/reporting/layout.tsx`
|
||||
- `project/apps/admin/src/app/(dashboard)/reporting/page.tsx`
|
||||
- `project/apps/admin/src/app/(dashboard)/reporting/{dashboard,sales,products}/page.tsx`
|
||||
- `project/apps/admin/src/lib/reporting-client.ts`
|
||||
15
work/artifacts/F-157/leader-close.json
Normal file
15
work/artifacts/F-157/leader-close.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"feature_id": "F-157",
|
||||
"agent": "leader",
|
||||
"stage": "close",
|
||||
"verdict": "APPROVED",
|
||||
"summary": "Reporting queda como una entrada única del sidebar y sus tres apartados viven dentro del módulo.",
|
||||
"checks": [
|
||||
{ "item": "Reviewer approved", "ok": true },
|
||||
{ "item": "Security approved", "ok": true },
|
||||
{ "item": "QA approved", "ok": true },
|
||||
{ "item": "Admin build passed", "ok": true },
|
||||
{ "item": "verify.sh passed", "ok": true }
|
||||
],
|
||||
"issues": []
|
||||
}
|
||||
15
work/artifacts/F-157/qa.json
Normal file
15
work/artifacts/F-157/qa.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"feature_id": "F-157",
|
||||
"agent": "qa",
|
||||
"stage": "qa_gate",
|
||||
"verdict": "APPROVED",
|
||||
"summary": "Los cuatro criterios de aceptación quedan cubiertos.",
|
||||
"checks": [
|
||||
{ "item": "Only one Reporting sidebar entry", "ok": true, "evidence": "Static acceptance check passed" },
|
||||
{ "item": "Three page-local sections", "ok": true, "evidence": "Nested layout contains Dashboard, Ventas, Productos" },
|
||||
{ "item": "Active section marker", "ok": true, "evidence": "usePathname plus aria-current=page" },
|
||||
{ "item": "Admin build", "ok": true, "evidence": "Next.js production build passed" },
|
||||
{ "item": "Harness", "ok": true, "evidence": "verify.sh passed" }
|
||||
],
|
||||
"issues": []
|
||||
}
|
||||
14
work/artifacts/F-157/reviewer.json
Normal file
14
work/artifacts/F-157/reviewer.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"feature_id": "F-157",
|
||||
"agent": "reviewer",
|
||||
"stage": "review_gate",
|
||||
"verdict": "APPROVED",
|
||||
"summary": "El sidebar queda plano con una sola entrada Reporting y la navegación de secciones vive en el layout interno.",
|
||||
"checks": [
|
||||
{ "item": "Sidebar has only Reporting", "ok": true, "evidence": "permissions.ts contains no reporting child NAV_ITEMS" },
|
||||
{ "item": "Local section navigation", "ok": true, "evidence": "reporting/layout.tsx lists Dashboard, Ventas and Productos" },
|
||||
{ "item": "Admin production build", "ok": true, "evidence": "Next.js build generated 29 routes" },
|
||||
{ "item": "TypeScript", "ok": true, "evidence": "project tsc --noEmit passed" }
|
||||
],
|
||||
"issues": []
|
||||
}
|
||||
13
work/artifacts/F-157/security.json
Normal file
13
work/artifacts/F-157/security.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"feature_id": "F-157",
|
||||
"agent": "security",
|
||||
"stage": "security_gate",
|
||||
"verdict": "APPROVED",
|
||||
"summary": "Sin cambios de autenticación ni autorización; Reporting conserva el permiso reporting.read del menú principal y las rutas backend mantienen RBAC existente.",
|
||||
"checks": [
|
||||
{ "item": "RBAC unchanged", "ok": true, "evidence": "Only navigation presentation changed" },
|
||||
{ "item": "Static internal links", "ok": true, "evidence": "All section hrefs are hard-coded same-origin paths" },
|
||||
{ "item": "No secret or dependency change", "ok": true, "evidence": "No config secrets or packages modified" }
|
||||
],
|
||||
"issues": []
|
||||
}
|
||||
Reference in New Issue
Block a user