Files
mercadodevida/spec/product.md
2026-08-22 11:43:42 +02:00

2.3 KiB
Raw Blame History

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ón from<to y semántica [from,to).
  • Parser parseReportingFilters + helper comparisonRange (none | previous_equal | previous_calendar).
  • Metadato REPORTING_FILTER_META (campos, modos de comparación, groupBy, paginación, dataAvailability) servido a GET /reporting/filters/schema.
  • Permisos backend REPORTING_* basados en roles (requireReportingPermission) con matriz admin/editor/pos_manager/pos_cashier/customer.
  • Rutas: GET /reporting/filters/schema (requiere REPORTING_VIEW), GET /reporting/filters/validate (requiere REPORTING_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 } }. Requiere REPORTING_VIEW.
  • GET /reporting/filters/validate?from=...&to=...&compare=...&...{ ok, filters, comparison: { range } }. Requiere REPORTING_SALES.

Seguridad (F-143 es parte de éste)

  • La matriz RBAC se impone en backend (requireReportingPermission sobre CurrentUser.role). El frontend no es autoridad.
  • customer → 0 permisos → 403 siempre.
  • Futuro: migrar a tabla backoffice_permissions sin cambiar requireReportingPermission(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.