feat(F-160): completed feature

This commit is contained in:
chattie
2026-08-22 18:05:33 +02:00
parent f802a83773
commit 83a44980c6
12 changed files with 87 additions and 45 deletions

View File

@@ -0,0 +1,8 @@
# F-160 — Diseño
Corrección mínima en `ReportingService.runSalesQuery`:
1. `selectExpr` representa cuatro columnas dimensionales y debe terminar con coma antes de métricas agregadas.
2. Para dimensión `terminal`, el resultado incluye tienda y terminal; ambas columnas deben estar en `GROUP BY`.
3. Las expresiones dinámicas permanecen limitadas al enum `GroupBy`; filtros siguen parametrizados `$1..$8`.
4. Verificación runtime autenticada de `day`, `channel`, `store` y `terminal` mediante proxy admin.

View File

@@ -0,0 +1,3 @@
# F-160
Corregido el error 500 de `/reporting/sales` para agrupaciones por día, canal, tienda y terminal. No cambia el contrato HTTP.

View File

@@ -0,0 +1,12 @@
# F-160 — Implementer
## Fix
- Añadida la coma ausente entre columnas dimensionales y agregados en `runSalesQuery`.
- `groupBy=terminal` agrupa por `store_id, terminal_id` porque ambas columnas se seleccionan.
- Añadidos 2 tests de regresión sobre SQL generado.
## Evidencia
- Reporting service: 16/16 tests PASS.
- TypeScript PASS.
- Runtime autenticado vía `:3004`: day=200, channel=200, store=200, terminal=200.
- Filtros continúan parametrizados; dimensiones proceden de enum controlado.

View File

@@ -0,0 +1 @@
{"feature_id":"F-160","agent":"leader","stage":"close","verdict":"APPROVED","summary":"Reporting sales grouped endpoints fixed and validated.","checks":[{"item":"all gates","ok":true},{"item":"runtime HTTP 200","ok":true},{"item":"verify","ok":true}],"issues":[]}

View File

@@ -0,0 +1 @@
{"feature_id":"F-160","agent":"qa","stage":"qa_gate","verdict":"APPROVED","summary":"Todos los agrupamientos usados por Dashboard responden 200.","checks":[{"item":"day","ok":true},{"item":"channel","ok":true},{"item":"store","ok":true},{"item":"terminal","ok":true},{"item":"unit regression","ok":true,"evidence":"16/16"}],"issues":[]}

View File

@@ -0,0 +1 @@
{"feature_id":"F-160","agent":"reviewer","stage":"review_gate","verdict":"APPROVED","summary":"SQL corregido mínimamente con cobertura de regresión.","checks":[{"item":"tests","ok":true,"evidence":"16/16"},{"item":"runtime groups","ok":true,"evidence":"day/channel/store/terminal HTTP 200"}],"issues":[]}

View File

@@ -0,0 +1 @@
{"feature_id":"F-160","agent":"security","stage":"security_gate","verdict":"APPROVED","summary":"Sin nueva superficie de inyección SQL.","checks":[{"item":"values parameterized","ok":true,"evidence":"Filters remain $1..$8"},{"item":"dimension allowlist","ok":true,"evidence":"Group expressions selected from GroupBy switch"}],"issues":[]}