# Plan de Pruebas (Antes de UX) — NexaReport

Este plan busca estabilizar el motor (viewer/designer/export) antes de invertir en UX.

## 1) Objetivo

- Confirmar que el viewer renderiza igual en pantalla y en export (PDF/Excel/Word/CSV).
- Cubrir paginación, bandas, bindings/expresiones, filtros, formatos condicionales, drilldown y subreportes.
- Detectar regresiones rápido con una rutina repetible.

## 2) Precondiciones

- Compilación OK:
  - `npm.cmd run build`
- Para desarrollo local:
  - `npm.cmd run dev`

## 3) Matriz de Escenarios (Checklist)

### A. Render/Paginación

- A4 portrait, A4 landscape, Letter, Ticket.
- Márgenes (cm) distintos: 0, 1, 2.5.
- Bandas:
  - ReportHeader, PageHeader, DataBand, DetailBand, PageFooter, ReportFooter.
  - `pageBreakBefore` y `pageBreakAfter` en banda intermedia.
- Paginación:
  - Dataset chico (1–5 filas).
  - Dataset mediano (50–200 filas).
  - Dataset grande (1000+ filas).
- Verificar:
  - Total de páginas calculado coincide con páginas renderizadas.
  - PageFooter aparece al final de cada página.

### B. Bindings/Expresiones

- Bindings:
  - `{{campoSimple}}`, `{{obj.campo}}`
- Variables sistema:
  - `{{Page}}`, `{{TotalPages}}`, `{{Today}}`, `{{Now}}`, `{{RowNumber}}`, `{{TotalRows}}`, `{{ReportName}}`
- Expresiones:
  - `{[FormatNumber(total, 'es-ES')]}`, `{[IIF(total>100,'OK','Bajo')]}`
  - Parámetros: `{[$fecha_desde]}` (si aplica)
- Verificar:
  - En pantalla y en PDF muestran el mismo valor.

### C. Tablas (Table)

- Tabla con 5–8 columnas y ancho variable (forzar wrap).
- 100+ filas para multipágina.
- Verificar:
  - Repite `thead` en cada página exportada.
  - No corta filas de manera extraña.
  - No se duplican tablas por fila (DataBand tabular por página).

### D. Crosstab / Chart

- Crosstab con:
  - 2 rowFields, 1 columnField, 2 valueFields (sum/count).
- Chart con:
  - bar/line/pie.
- Verificar:
  - Render en pantalla.
  - Export PDF: se ve completo (sin recortes/overflow).

### E. Imágenes / Barcodes / QR

- Imagen por URL y por binding.
- Barcode con binding (CODE128) y con displayValue on/off.
- QRCode (placeholder actual).
- Verificar:
  - En PDF respeta tamaño y posición.
  - Barcode se renderiza en export (si no, registrar issue).

### F. Formato condicional

- Operadores: `eq`, `gt`, `contains`, `starts_with`, `between`, `regex`.
- Verificar:
  - Se aplica igual en pantalla y en PDF.

### G. Filtros de DataSource y de Banda

- `dataSources[].filters` (por alias) y `band.filter`.
- Verificar:
  - La cantidad de filas cambia como corresponde.
  - PDF/Excel exporta el mismo conjunto filtrado.

### H. DrillDown

- DrillDown con:
  - Mapeo de parámetros desde fila actual.
  - Modal (showAsModal) y new tab (openInNewTab).
- Verificar:
  - Modal carga definición y datos del reporte destino.

### I. SubReport

- SubReport embebido (definition) y por `subReportId` si se usa.
- Verificar:
  - No rompe export.
  - Se renderiza con datos esperados (issue conocido si se requiere dataset distinto).

## 4) Set de Datos Recomendado

- `ventas` (main): id, cliente, fecha, total, categoria
- `detalle` (detail): venta_id, producto, cantidad, precio
- `clientes`: id, nombre, email

En pruebas rápidas, usar 3 tamaños: 10, 100, 1000 registros.

## 4.1) Reportes de ejemplo (JSON)

- `examples/report-ventas-logo-tabla.json` — logo (imagen) + tabla multipágina
- `examples/report-master-detail-ordenes.json` — master–detail (DataBand + DetailBand)
- `examples/report-agrupado-por-cliente.json` — agrupación (GroupHeader/GroupFooter)
- `examples/report-codigos-qr-barcode.json` — imágenes (URL/base64) + barcode + QR
- `examples/report-grafico-ventas-por-mes.json` — gráfico (bar)
- `examples/report-crosstab-categoria-mes.json` — crosstab (pivot)

## 5) Rutina de Smoke Test (10–15 min)

- Abrir un reporte ejemplo por cada formato de papel.
- Renderizar:
  - 1 DataBand (texto) + PageHeader/Footer
  - 1 Table (100 filas)
  - 1 Crosstab
- Exportar:
  - PDF (validar páginas y encabezados de tabla)
  - Excel (validar hojas)
  - CSV (validar delimitadores/UTF-8 BOM)

## 6) Criterios de Aceptación (Gate para UX)

- PDF fiel al visor (posiciones, fuentes, márgenes, sin páginas extra).
- Paginación consistente en visor y export.
- Table multipágina con encabezado repetido sin duplicación.
- DrillDown modal estable.
- Filtros y formato condicional coherentes.
