feat(F-160): completed feature
This commit is contained in:
8
work/artifacts/F-160/architect.md
Normal file
8
work/artifacts/F-160/architect.md
Normal 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.
|
||||
3
work/artifacts/F-160/documenter.md
Normal file
3
work/artifacts/F-160/documenter.md
Normal 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.
|
||||
12
work/artifacts/F-160/implementer.md
Normal file
12
work/artifacts/F-160/implementer.md
Normal 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.
|
||||
1
work/artifacts/F-160/leader-close.json
Normal file
1
work/artifacts/F-160/leader-close.json
Normal 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":[]}
|
||||
1
work/artifacts/F-160/qa.json
Normal file
1
work/artifacts/F-160/qa.json
Normal 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":[]}
|
||||
1
work/artifacts/F-160/reviewer.json
Normal file
1
work/artifacts/F-160/reviewer.json
Normal 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":[]}
|
||||
1
work/artifacts/F-160/security.json
Normal file
1
work/artifacts/F-160/security.json
Normal 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":[]}
|
||||
Reference in New Issue
Block a user