Revisión — Cliente Esporádico

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.

Estado de validación
Tests
Screenshots
Observaciones
3

¿Dónde aparece la feature?

1
Crear cliente
Modal "Nuevo Cliente" desde /clientes — checkbox "Es esporádico"
2
Editar cliente
Modal "Modificar datos del Cliente" — toggle del checkbox
3
Iniciar operación
Banner rojo "Atención, este es un cliente esporádico" en /operaciones

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 flag esEsporadico 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:

¿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

Atención

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.

Atención

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.

Info

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)
ArchivoCambio
smac/model/database/Cliente.java:28Nuevo campo private Boolean esEsporadico
smac/model/dto/request/ClienteRequest.java:19Acepta esEsporadico en payload de POST/PUT
smac/model/dto/response/ClienteResponse.java:26Devuelve esEsporadico en respuestas
smac/service/impl/ClienteService.java:94updateCliente persiste el flag
smac/controller/ClienteController.java:101updateCliente incluye el flag en la respuesta
5.2 Frontend (React + Redux)
ArchivoCambio
components/custom/formNewCliente.component.js:38Estado inicial esEsporadico: true + checkbox UI
components/custom/formCliente.component.js:39Inicializa desde props.cliente.esEsporadico === true + checkbox UI
components/custom/formOperacion.component.js:267-282Banner rojo condicional {state.cliente?.esEsporadico && (...)}
components/user/operation.component.js:227ButtonPDF visible también en etapaIndex === 6
store/actions/cliente.action.js:80,113saveCliente 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:

EndpointCuándo se llamaMock 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.