1.Overview
Esta feature agrega la capacidad de marcar a un cliente como "esporádico": un cliente que opera ocasionalmente y que merece una alerta visual destacada en pantalla cuando se inicia una operación con él. El usuario puede activar o desactivar esta marca al crear o editar un cliente, y verá un banner rojo de aviso al operar con clientes esporádicos.
¿Dónde aparece la feature?
2.Comportamiento validado
2.1 Marcar cliente como esporádico al crearlo—
¿Qué hace el usuario?
Va a/clientes → click en "Nuevo Cliente" → completa nombre, número de referencia, observaciones y decide si marcar el checkbox "Es esporádico" → click en Guardar.
¿Qué debería ver?
El checkbox aparece marcado por defecto. Al guardar, el cliente se persiste con el flagesEsporadico según lo elegido. La API responde 2xx y el cliente queda en el listado.
Observado
Resultado de los tests: —2.2 Cambiar el flag en cliente existente—
¿Qué hace el usuario?
En el listado de clientes hace click en el ícono de edición (lápiz) → se abre modal con los datos del cliente → activa o desactiva el checkbox "Es esporádico" → click en Guardar.¿Qué debería ver?
El estado actual del flag se refleja en el checkbox al abrir el modal. Cualquier cambio se persiste — al volver a abrir el modal el flag conserva el último valor guardado.Observado
Resultado de los tests: —2.3 Aviso visual al operar con cliente esporádico—
¿Qué hace el usuario?
Inicia una operación cuyo cliente está marcado como esporádico (ej. desde una carpeta importada en/operaciones).
¿Qué debería ver?
Antes del título "Operación" aparece un banner rojo bien visible con el texto "Atención, este es un cliente esporádico". Si el cliente NO es esporádico, el banner no aparece.Observado
Resultado de los tests:
Validación E2E real: el revisor mockea las llamadas a Importsys
(GET /api/importsysdatas) en el navegador para devolver carpetas
que matcheen con clientes locales fixtures (RANSA esporádico / TASA no esporádico).
Esto permite recorrer el wizard "Nueva Operación" de punta a punta y observar
el banner real del formOperacion en lugar de un render aislado.
3.Evidencia visual
Galería completa de capturas—
Click en cualquier imagen para ampliarla.
4.Hallazgos / Observaciones
Default esEsporadico = true al crear cliente
En formNewCliente.component.js:38 el estado inicial del checkbox es
true. Como consecuencia, todos los clientes nuevos quedan marcados como
esporádicos por defecto a menos que el operador desmarque explícitamente el checkbox.
Confirmar si es intencional o conviene invertir el default.
app-config.js apunta a localhost:9091
En smac-control-frontend/src/app-config.js:1-2 la línea de producción
(API_URL = "/api") fue comentada y se activó la línea de desarrollo
("http://localhost:9091/api"). Si se mergea así el frontend en deploy
no podrá hablar con el backend. Recomendado revertir antes del merge.
Cambio colateral en operation.component.js
La condición de visibilidad de ButtonPDF incluye ahora la etapa
6 (A_Regularizar) además de 7 (Cerrada) y 8 (Archivo).
Este cambio no se valida E2E en este revisor porque requiere atravesar todas las
etapas previas del workflow de operación. Se documenta para revisión funcional manual.
5.Detalle técnico
5.1 Backend (Spring Boot / JPA)
| Archivo | Cambio |
|---|---|
| smac/model/database/Cliente.java:28 | Nuevo campo private Boolean esEsporadico |
| smac/model/dto/request/ClienteRequest.java:19 | Acepta esEsporadico en payload de POST/PUT |
| smac/model/dto/response/ClienteResponse.java:26 | Devuelve esEsporadico en respuestas |
| smac/service/impl/ClienteService.java:94 | updateCliente persiste el flag |
| smac/controller/ClienteController.java:101 | updateCliente incluye el flag en la respuesta |
5.2 Frontend (React + Redux)
| Archivo | Cambio |
|---|---|
| components/custom/formNewCliente.component.js:38 | Estado inicial esEsporadico: true + checkbox UI |
| components/custom/formCliente.component.js:39 | Inicializa desde props.cliente.esEsporadico === true + checkbox UI |
| components/custom/formOperacion.component.js:267-282 | Banner rojo condicional {state.cliente?.esEsporadico && (...)} |
| components/user/operation.component.js:227 | ButtonPDF visible también en etapaIndex === 6 |
| store/actions/cliente.action.js:80,113 | saveCliente y updateCliente propagan el flag al backend |
| app-config.js:1-2 | (Hallazgo) API_URL apuntando a localhost en dev |
5.3 Llamadas a API capturadas durante la suite
Cada test que invoca la API directamente registra request/response. Los datos provienen
de reporte/api-calls.json.
5.4 Mock de Importsys (técnica habilitadora del E2E)
La pantalla formOperacion consume una carpeta proveniente de
Importsys (sistema externo). Como no controlamos qué carpetas devuelve
ni qué clientes traen, validar el banner E2E sin un mock requeriría seedear datos en
Importsys o esperar coincidencias casuales.
El revisor instala interceptores con BrowserContext.route() sobre los dos
endpoints involucrados:
| Endpoint | Cuándo se llama | Mock devuelve |
|---|---|---|
| GET /api/importsysdatas | Al abrir el wizard "Nueva Operación" | Lista con las carpetas fixture (RANSA, TASA) |
| GET /api/importsysdatas/:codOp/:codFolio | Al click en una row del wizard | El detalle de la carpeta con campos completos para formOperacion |
Modo manual exploratorio: el mismo helper puede usarse fuera de los tests
automatizados. npm run manual abre Chromium loggueado, instala el mock con
ambas carpetas y deja la ventana abierta para QA manual sin depender de Importsys real.
cd revisor npm run manual # Click "Nueva Operación" → ver MOCK-RANSA / MOCK-TASA # Cerrá el browser para terminar.
6.Reproducibilidad
Cómo correr el revisor (modo automático)
Prerequisitos:
- Backend corriendo en
http://localhost:9091 - Frontend corriendo en
http://localhost:3000 - Usuario admin/123456 disponible
- Node.js 18+
Comandos:
cd D:\files\projects\asap\SMAC\implementacion\clientes-esporadicos-revision\revisor npm install npm run install-browsers npm run all # abrir reporte: ../reporte/index.html
6.1 Modo manual exploratorio (QA en vivo con mock)
Para hacer pruebas manuales en Chrome aprovechando el mismo mock de Importsys que usan los tests automatizados:
cd revisor npm run manual
Abre Chromium con la sesión admin y dos carpetas fixture (RANSA, TASA) listas en el wizard "Nueva Operación". Cerrá la ventana cuando termines y el proceso finaliza solo.
Nota: requiere haber corrido al menos una vez los tests automáticos (o solo el spec
01-login) para generar la sesión cacheada en .auth/admin.json.