# F-146 — Implementer evidence ## What F-146 build evidence: `ReportingService` (summary + sales) con CTEs SQL parametrizados, rutas `GET /reporting/summary` y `GET /reporting/sales`, tests unitarios 44/44 (reporting-service.test.ts 14 + reporting.routes.test.ts 15 + existing tests). Backend-only, no schema migration. ## Files - `src/modules/reporting/application/reporting-service.ts` (created) — ReportingService con métodos summary() y sales(). - `src/modules/reporting/api/reporting.routes.ts` (updated) — añade summary + sales endpoints. - `src/modules/reporting/api/reporting.routes.test.ts` (updated) — 8 tests nuevos para summary/sales. - `src/modules/reporting/tests/reporting-service.test.ts` (created) — 14 unit tests con mock pg.Pool. - `src/modules/reporting/index.ts` (updated) — re-exports ReportingService y tipos. - `src/app/build-app.ts` (updated) — pasa pool a registerReportingRoutes. ## Tests - reporting-service.test.ts: 14 unit tests (mock pg.Pool) cubriendo summary(), sales(), filtros, paginación, groupBy (day/week/month/channel/store), dataAvailability. - reporting.routes.test.ts: 15 route tests (7 pre-existentes + 8 nuevos para summary/sales con mock pool). - Módulo completo: 44 tests passing. ## Verification - `npm run build` → 0 TypeScript errors. - `node scripts/check-module-boundaries.mjs src` → 0 NEW violations. - `./scripts/verify.sh` → green (F-146 in_progress, runtime-consistent). - Backlog: F-146 in_progress started via new_ticket.py --start F-146. ## AC traceability | AC | Estado | Evidencia | |----|--------|-----------| | AC1 summary endpoint | ✅ | route test 200 + DTO fields | | AC2 sales grouped | ✅ | route test + unit test groupBy day/month/channel/store | | AC3 filtros | ✅ | unit tests verify channel/storeId/terminalId in SQL params | | AC4 paginación | ✅ | LIMIT $7 OFFSET $8 con page*pageSize | | AC5 dataAvailability | ✅ | 14 tests verifican availability flags (available/unavailable) | | AC6 compare range | ✅ | filtros + unit test verify compare=none/null | | AC7 validation errors | ✅ | route tests 400 en fechas invertidas/channel inválido | | AC8 RBAC | ✅ | customer forbidden 403 en summary y sales | | AC9 tsc/tests/verify | ✅ | tsc 0, 44 tests, verify verde |