## Documentation - Align MCH-029 to MCH-032 with template-saas modules (SAAS-008 to SAAS-015) - Create MCH-034 (Analytics) and MCH-035 (Reports) from SAAS-016/017 - Update PLAN-DESARROLLO.md with Phase 7 and 8 - Update _MAP.md indexes (35 total epics) ## Database (5 new schemas, 14 tables) - Add storage schema: buckets, files, signed_urls - Add webhooks schema: endpoints, deliveries - Add audit schema: logs, retention_policies - Add features schema: flags, tenant_flags (14 seeds) - Add analytics schema: metrics, events, reports, report_schedules - Add auth.oauth_connections for MCH-030 - Add timestamptz_to_date() IMMUTABLE function - Update EXPECTED_SCHEMAS in recreate-database.sh ## Analysis Reports - ANALISIS-INTEGRACION-TEMPLATE-SAAS-2026-01-13.md - VALIDACION-COHERENCIA-2026-01-13.md - GAP-ANALYSIS-BD-2026-01-13.md - REPORTE-EJECUCION-2026-01-13.md Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
16 KiB
| id | type | title | code | status | phase | priority | created_at | updated_at | simco_version | dependencies | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| EPIC-MCH-035 | Epic | MCH-035: Sistema de Reportes | MCH-035 | Planificado | 8 | P2 | 2026-01-13 | 2026-01-13 | 4.0.1 |
|
MCH-035: Sistema de Reportes
Metadata
- Codigo: MCH-035
- Fase: 8 - Reportes y Analitica
- Prioridad: P2 (Media)
- Estado: Planificado
- Story Points: 21
- Sprint Objetivo: Sprint 8-9
Descripcion
Sistema de generacion y exportacion de reportes en multiples formatos (PDF, Excel, CSV) para MiChangarrito. Proporciona capacidades de exportacion de datos de ventas, fiados pendientes, inventario y clientes con filtros de fecha y paginacion. Los reportes permiten al dueno del changarrito tener visibilidad completa de su negocio para toma de decisiones.
Objetivos
- Generar reportes de ventas con desglose diario, semanal y mensual
- Exportar estado de fiados pendientes y pagos parciales
- Proporcionar reportes de inventario (stock bajo, rotacion de productos)
- Generar reportes de clientes (mejores clientes, deudores)
- Soportar multiples formatos de exportacion (PDF, Excel, CSV)
Alcance
Incluido
- Generacion de reportes PDF con formato profesional para changarritos
- Exportacion a Excel (XLSX) con estilos para analisis
- Exportacion a CSV para integracion con otras herramientas
- Reporte de ventas (diario, semanal, mensual)
- Reporte de fiados pendientes y abonos
- Reporte de inventario (stock bajo, productos mas vendidos)
- Reporte de clientes (mejores clientes, deudores)
- Filtros por fecha (dateFrom, dateTo)
- Paginacion (page, limit)
- Headers de descarga configurados
- Streaming de archivos
Excluido
- Reportes personalizados dinamicos (builder visual)
- Programacion de reportes automaticos
- Envio de reportes por email/WhatsApp
- Dashboard de reportes visuales interactivos
- Reportes de analytics avanzados
- Reportes comparativos multi-periodo
Formatos de Exportacion
| Formato | Extension | Content-Type | Libreria |
|---|---|---|---|
| application/pdf | PDFKit (opcional) | ||
| Excel | .xlsx | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet | ExcelJS (opcional) |
| CSV | .csv | text/csv | Nativo |
Fallback Implementations
El modulo incluye implementaciones de fallback cuando las librerias PDFKit o ExcelJS no estan disponibles:
- PDF Fallback: Genera un archivo de texto con formato PDF basico
- Excel Fallback: Genera SpreadsheetML (formato XML compatible con Excel)
Endpoints API
Reporte de Ventas
| Metodo | Endpoint | Descripcion |
|---|---|---|
| GET | /reports/sales/:format | Exportar reporte de ventas |
Parametros de Ruta:
format: Formato de exportacion (pdf,excel,csv)
Query Parameters:
dateFrom(opcional): Fecha inicio filtro (ISO 8601)dateTo(opcional): Fecha fin filtro (ISO 8601)period(opcional): Periodo de agrupacion (daily,weekly,monthly)page(opcional): Numero de pagina (default: 1)limit(opcional): Items por pagina (default: 100, max: 10000)
Response:
200: Archivo de reporte (StreamableFile)400: Formato invalido401: No autenticado
Reporte de Fiados
| Metodo | Endpoint | Descripcion |
|---|---|---|
| GET | /reports/fiados/:format | Exportar reporte de fiados pendientes |
Parametros de Ruta:
format: Formato de exportacion (pdf,excel,csv)
Query Parameters:
dateFrom(opcional): Fecha inicio filtro (ISO 8601)dateTo(opcional): Fecha fin filtro (ISO 8601)status(opcional): Estado de fiado (pending,partial,paid,overdue)page(opcional): Numero de pagina (default: 1)limit(opcional): Items por pagina (default: 100, max: 10000)
Response:
200: Archivo de reporte (StreamableFile)400: Formato invalido401: No autenticado
Reporte de Inventario
| Metodo | Endpoint | Descripcion |
|---|---|---|
| GET | /reports/inventory/:format | Exportar reporte de inventario |
Parametros de Ruta:
format: Formato de exportacion (pdf,excel,csv)
Query Parameters:
dateFrom(opcional): Fecha inicio filtro (ISO 8601)dateTo(opcional): Fecha fin filtro (ISO 8601)filter(opcional): Filtro especial (low_stock,best_sellers,slow_moving)page(opcional): Numero de pagina (default: 1)limit(opcional): Items por pagina (default: 100, max: 10000)
Response:
200: Archivo de reporte (StreamableFile)400: Formato invalido401: No autenticado
Tipos de Reportes
Reporte de Ventas
Permite visualizar el resumen de ventas del changarrito con diferentes niveles de agrupacion.
| Columna PDF | Columna Excel/CSV | Descripcion |
|---|---|---|
| Fecha | date | Fecha de la venta |
| Folio | sale_number | Numero de venta |
| Cliente | customer_name | Nombre del cliente (si aplica) |
| Productos | items_count | Cantidad de productos |
| Subtotal | subtotal | Subtotal sin descuentos |
| Descuento | discount | Descuento aplicado |
| Total | total | Total de la venta |
| Metodo Pago | payment_method | Efectivo, tarjeta, fiado |
Periodos disponibles:
- Diario: Desglose hora por hora del dia seleccionado
- Semanal: Desglose dia por dia de la semana
- Mensual: Desglose semana por semana del mes
Reporte de Fiados Pendientes
Muestra el estado actual de todos los fiados del changarrito.
| Columna PDF | Columna Excel/CSV | Descripcion |
|---|---|---|
| Cliente | customer_name | Nombre del cliente deudor |
| Telefono | customer_phone | Telefono de contacto |
| Fecha Fiado | created_at | Fecha en que se genero el fiado |
| Monto Original | original_amount | Monto total del fiado |
| Abonos | total_payments | Suma de abonos realizados |
| Saldo Pendiente | pending_balance | Monto pendiente por cobrar |
| Dias Vencido | days_overdue | Dias desde la fecha de vencimiento |
| Estado | status | Pendiente, parcial, vencido |
Reporte de Inventario
Proporciona visibilidad del estado actual del inventario.
| Columna PDF | Columna Excel/CSV | Descripcion |
|---|---|---|
| SKU | sku | Codigo del producto |
| Producto | product_name | Nombre del producto |
| Categoria | category_name | Categoria del producto |
| Stock Actual | current_stock | Cantidad en existencia |
| Stock Minimo | min_stock | Nivel de reorden |
| Precio Compra | purchase_price | Costo unitario |
| Precio Venta | sale_price | Precio al publico |
| Valor Inventario | inventory_value | Stock * precio compra |
Filtros especiales:
- Stock Bajo: Productos donde stock_actual <= stock_minimo
- Mas Vendidos: Top productos por cantidad vendida en periodo
- Baja Rotacion: Productos sin movimiento en 30+ dias
Reporte de Clientes
Analisis del comportamiento de clientes del changarrito.
| Columna PDF | Columna Excel/CSV | Descripcion |
|---|---|---|
| Cliente | customer_name | Nombre del cliente |
| Telefono | phone | Telefono de contacto |
| Total Compras | total_purchases | Suma de compras en periodo |
| Cantidad Visitas | visit_count | Numero de transacciones |
| Ticket Promedio | avg_ticket | Promedio por visita |
| Fiados Activos | active_fiados | Numero de fiados pendientes |
| Saldo Deudor | debt_balance | Total adeudado |
| Ultima Visita | last_visit | Fecha ultima compra |
Filtros especiales:
- Mejores Clientes: Top clientes por volumen de compra
- Deudores: Clientes con fiados pendientes o vencidos
Historias de Usuario
MCH-US-120: Reportes de Ventas
Como dueno de changarrito Quiero generar reportes de mis ventas en diferentes periodos Para conocer el desempeno de mi negocio y tomar decisiones
Story Points: 8
Criterios de Aceptacion:
- [CA-120-1] Generar reporte de ventas diario con desglose por hora
- [CA-120-2] Generar reporte de ventas semanal con desglose por dia
- [CA-120-3] Generar reporte de ventas mensual con desglose por semana
- [CA-120-4] Exportar a PDF con formato profesional y logo del changarrito
- [CA-120-5] Exportar a Excel con formulas de totales
- [CA-120-6] Exportar a CSV para importar a otras herramientas
- [CA-120-7] Filtrar por rango de fechas personalizado
- [CA-120-8] Incluir totales y promedios en el reporte
Tareas:
| ID | Tarea | Tipo | SP |
|---|---|---|---|
| MCH-TT-120-01 | Crear ReportsModule y estructura base | Backend | 0.5 |
| MCH-TT-120-02 | Implementar ReportsService con metodos de ventas | Backend | 1.5 |
| MCH-TT-120-03 | Implementar PdfService para ventas | Backend | 1.5 |
| MCH-TT-120-04 | Implementar ExcelService para ventas | Backend | 1.5 |
| MCH-TT-120-05 | Implementar CsvService para ventas | Backend | 0.5 |
| MCH-TT-120-06 | Crear ReportsController con endpoint ventas | Backend | 0.5 |
| MCH-TT-120-07 | DTOs de query y validaciones | Backend | 0.5 |
| MCH-TT-120-08 | Tests unitarios reportes ventas | Test | 1 |
| MCH-TT-120-09 | Documentacion API reportes ventas | Docs | 0.5 |
MCH-US-121: Reportes de Fiados e Inventario
Como dueno de changarrito Quiero generar reportes de fiados pendientes e inventario Para controlar mis cuentas por cobrar y existencias
Story Points: 13
Criterios de Aceptacion:
- [CA-121-1] Generar reporte de fiados pendientes con saldo por cliente
- [CA-121-2] Filtrar fiados por estado (pendiente, parcial, vencido)
- [CA-121-3] Generar reporte de inventario con stock actual
- [CA-121-4] Filtrar productos con stock bajo (alerta de reorden)
- [CA-121-5] Generar reporte de productos mas vendidos
- [CA-121-6] Generar reporte de mejores clientes por volumen
- [CA-121-7] Generar reporte de clientes deudores
- [CA-121-8] Exportar todos los reportes en PDF, Excel y CSV
- [CA-121-9] Incluir graficos basicos en PDF (opcional)
Tareas:
| ID | Tarea | Tipo | SP |
|---|---|---|---|
| MCH-TT-121-01 | Extender ReportsService con metodos de fiados | Backend | 2 |
| MCH-TT-121-02 | Extender PdfService para fiados | Backend | 1 |
| MCH-TT-121-03 | Extender ExcelService para fiados | Backend | 1 |
| MCH-TT-121-04 | Extender ReportsService con metodos de inventario | Backend | 2 |
| MCH-TT-121-05 | Extender PdfService para inventario | Backend | 1 |
| MCH-TT-121-06 | Extender ExcelService para inventario | Backend | 1 |
| MCH-TT-121-07 | Extender ReportsService con metodos de clientes | Backend | 1.5 |
| MCH-TT-121-08 | Crear endpoints fiados, inventario, clientes | Backend | 1 |
| MCH-TT-121-09 | Tests unitarios todos los reportes | Test | 1.5 |
| MCH-TT-121-10 | Documentacion API completa | Docs | 1 |
Resumen de Story Points
| Historia | SP | Sprint |
|---|---|---|
| MCH-US-120: Reportes de Ventas | 8 | 8 |
| MCH-US-121: Reportes de Fiados e Inventario | 13 | 8-9 |
| TOTAL | 21 | 8-9 |
Criterios de Aceptacion de Epica
- Reporte de ventas genera correctamente en los 3 formatos
- Reporte de fiados muestra saldos pendientes precisos
- Reporte de inventario identifica productos con stock bajo
- Reporte de clientes ordena por volumen de compra
- Filtros de fecha funcionan correctamente
- Paginacion funciona para grandes volumenes
- PDFs tienen formato profesional legible
- Excel incluye formulas de totales
- CSV es compatible con Excel/Google Sheets
- Cobertura de tests >80%
- Documentacion de API completa
Estructura de Archivos
apps/backend/src/modules/reports/
├── reports.module.ts
├── reports.controller.ts
├── index.ts
├── dto/
│ ├── report-query.dto.ts
│ ├── sales-report-query.dto.ts
│ ├── fiados-report-query.dto.ts
│ ├── inventory-report-query.dto.ts
│ └── index.ts
├── enums/
│ ├── report-format.enum.ts
│ ├── report-period.enum.ts
│ └── index.ts
├── interfaces/
│ ├── report-result.interface.ts
│ └── index.ts
└── services/
├── reports.service.ts
├── pdf.service.ts
├── excel.service.ts
├── csv.service.ts
└── index.ts
Entregables
| Entregable | Estado | Sprint | Ubicacion |
|---|---|---|---|
| reports.module.ts | Planificado | 8 | apps/backend/src/modules/reports/ |
| reports.controller.ts | Planificado | 8 | apps/backend/src/modules/reports/ |
| reports.service.ts | Planificado | 8 | apps/backend/src/modules/reports/services/ |
| pdf.service.ts | Planificado | 8 | apps/backend/src/modules/reports/services/ |
| excel.service.ts | Planificado | 8 | apps/backend/src/modules/reports/services/ |
| csv.service.ts | Planificado | 8 | apps/backend/src/modules/reports/services/ |
| report-query.dto.ts | Planificado | 8 | apps/backend/src/modules/reports/dto/ |
Dependencias
Depende de
- MCH-034 (Notificaciones Push) - Para alertas de reportes programados (futuro)
- MCH-021 (Inventario) - Datos de productos y stock
- MCH-014 (Ventas) - Datos de transacciones
- MCH-015 (Fiados) - Datos de cuentas por cobrar
- MCH-012 (Clientes) - Datos de clientes
Bloquea a
- Dashboards de analytics (futuro)
- Reportes programados automaticos (futuro)
- Exportacion masiva (futuro)
Seguridad
- Requiere autenticacion JWT (JwtAuthGuard)
- Datos filtrados por tenant_id del usuario autenticado
- No permite acceso cross-tenant
- Cache deshabilitado para evitar fugas de datos
- Limites de exportacion por plan
Limites por Plan
| Plan | Reportes/dia | Registros max |
|---|---|---|
| Changarrito | 5 | 1,000 |
| Tiendita | 20 | 5,000 |
| Tienda Pro | Ilimitado | 50,000 |
Headers de Respuesta
{
'Content-Type': '<content-type-segun-formato>',
'Content-Disposition': 'attachment; filename="<tipo>-report-<fecha>.ext"',
'Content-Length': '<tamano-buffer>',
'Cache-Control': 'no-cache, no-store, must-revalidate',
'Pragma': 'no-cache',
'Expires': '0'
}
Ejemplos de Uso
Exportar ventas del mes a PDF
curl -X GET \
'http://localhost:3000/reports/sales/pdf?dateFrom=2026-01-01&dateTo=2026-01-31&period=monthly' \
-H 'Authorization: Bearer <token>' \
-o ventas-enero-2026.pdf
Exportar fiados pendientes a Excel
curl -X GET \
'http://localhost:3000/reports/fiados/excel?status=pending' \
-H 'Authorization: Bearer <token>' \
-o fiados-pendientes.xlsx
Exportar inventario con stock bajo a CSV
curl -X GET \
'http://localhost:3000/reports/inventory/csv?filter=low_stock' \
-H 'Authorization: Bearer <token>' \
-o stock-bajo.csv
Referencia Template-SaaS
Esta epica esta basada en el siguiente modulo de template-saas:
| Modulo SAAS | Version | Elementos Integrados |
|---|---|---|
| SAAS-017 Reports | 1.0.0 | Estructura base, formatos PDF/Excel/CSV, filtros, paginacion |
Ver documentacion fuente en projects/template-saas/docs/01-modulos/SAAS-017-reports.md
Adaptaciones para MiChangarrito
| Aspecto | SAAS-017 (Original) | MCH-035 (Adaptado) |
|---|---|---|
| Reportes principales | Users, Billing, Audit | Ventas, Fiados, Inventario, Clientes |
| Contexto | SaaS empresarial | Punto de venta changarritos |
| Filtros adicionales | Solo fechas | Fechas + periodo + status + filtros especiales |
| Columnas | Genericas multi-tenant | Especificas para comercio minorista |
Ultima actualizacion: 2026-01-13 Autor: Architecture Team Alineacion: template-saas v1.0.0, SAAS-017