2.3 KiB
2.3 KiB
F-143 — Reporting: contracts, filters and RBAC
Estado
Diseño aprobado (ver work/artifacts/F-143/architect.md). Implementación backend-only.
Producto (alcance)
El módulo reporting expone el contrato compartido de filtros de reporte y la matriz de permisos REPORTING_* como código, para que los endpoints de reporte futuros (F-144+) consuman un parser único y estén consistentes. No genera reportes ni lectura de datos (esas son F-144+).
Alcance (entregable)
- Schema zod reusable
reportingFiltersSchema(from,to,compare,channel,storeId,terminalId,cashierId,paymentMethodId,productId,categoryId,brandId,customerId,state,groupBy,page,pageSize,sort) con validaciónfrom<toy semántica[from,to). - Parser
parseReportingFilters+ helpercomparisonRange(none | previous_equal | previous_calendar). - Metadato
REPORTING_FILTER_META(campos, modos de comparación, groupBy, paginación,dataAvailability) servido aGET /reporting/filters/schema. - Permisos backend
REPORTING_*basados en roles (requireReportingPermission) con matrizadmin/editor/pos_manager/pos_cashier/customer. - Rutas:
GET /reporting/filters/schema(requiereREPORTING_VIEW),GET /reporting/filters/validate(requiereREPORTING_SALES).
Fuera de alcance (F-144+)
- Lectura de datos transaccionales, agregaciones, dashboards, exportaciones, tabla de permisos en BD (F-142 §9 la marca como migración futura; hoy es role-based con los mismos call sites).
API (contrato HTTP)
GET /reporting/filters/schema→{ filterSchema, comparison, dataAvailability, permissions: { role, grants } }. RequiereREPORTING_VIEW.GET /reporting/filters/validate?from=...&to=...&compare=...&...→{ ok, filters, comparison: { range } }. RequiereREPORTING_SALES.
Seguridad (F-143 es parte de éste)
- La matriz RBAC se impone en backend (
requireReportingPermissionsobreCurrentUser.role). El frontend no es autoridad. customer→ 0 permisos → 403 siempre.- Futuro: migrar a tabla
backoffice_permissionssin cambiarrequireReportingPermission(user, permission).
Referencias
- Arquitectura Reporting (F-142):
docs/reporting/REPORTING_ARCHITECTURE.md(§4–§11). - Patrones:
src/modules/pricing/api/pricing.routes.ts,src/shared/auth.ts,src/shared/http-input.ts.