Skip to content

Plan de Pruebas — M1: Transacciones

Fecha: 2026-07-25 Módulo: doc/plans/2026-07-25-plan-desarrollo-modulos.md (M1) Ambiente: Dev local (./start-dev.sh) — http://localhost:5173

Antes de empezar

La base tiene datos de ejemplo (24 transacciones, 3 asientos de prefondeo). Si en algún momento querés arrancar de cero con los mismos datos:

bash
docker compose exec backend php artisan tinker --execute="App\Models\AuditLog::query()->delete(); App\Models\Transaction::query()->delete();"
docker compose exec backend php artisan db:seed --no-interaction

Esto deja: 24 transacciones (11 ACCEPTED, 8 PAID, 5 CANCELLED), saldo de prefondeo ≈ USD 53.915,61.

Actualizado 2026-07-25 — fix crítico aplicado: las ACCEPTED no tienen PDV (son una bolsa compartida por país, ver doc/plans/2026-07-25-fix-pdv-asignacion-transacciones.md). El PDV se asigna recién al resolverlas (PAID/CANCELLED). Las 13 ya resueltas del seed quedan repartidas entre los 4 PDVs: GT-CAP-001 (2), GT-QUE-002 (4), GT-MIX-003 (3), GT-ESC-004 (4).

Actualizado 2026-07-27 — el diálogo de confirmación de pagar/cancelar ya no es el confirm() nativo del navegador: ahora es un modal propio tipo recibo (monto en grande, ícono semántico verde/rojo), y el resultado (éxito, conflicto por concurrencia, saldo insuficiente) se muestra con notificaciones flotantes arriba a la derecha en vez de un cartel rojo fijo en la página. Ver doc/plans/2026-07-25-modal-confirmacion-rediseno.md. Afecta las secciones 5, 6, 7 y 8 de abajo.

Usuarios de prueba

EmailPasswordRolAlcance
admin@cislatam.testAdmin123!AdminGuatemala, todos los PDVs
supervisor@cislatam.testSuper123!SupervisorSolo GT-CAP-001 y GT-QUE-002
backoffice@cislatam.testBackoffice123!BackofficeSolo GT-CAP-001

Si el emulador de Firebase se reinició y el login falla con "usuario o contraseña incorrectos", correr docker compose exec backend php artisan db:seed de nuevo — el emulador es en memoria y pierde los usuarios en cada restart del contenedor.


1. Login y permisos por rol

#PasoResultado esperado
1.1Entrar a http://localhost:5173, loguearte como BackofficeCaés directo en Transacciones (no en Dashboard — Backoffice no tiene permiso de leerlo)
1.2Mirar el menú lateral como BackofficeSolo aparecen Transacciones y Prefondeo. Nada de Reportes ni del bloque Administración
1.3Escribir a mano en la barra de direcciones http://localhost:5173/admin/usuarios-accesos/usuarios estando logueado como BackofficeTe rebota a Transacciones — no se llega ni escribiendo la URL directo
1.4Cerrar sesión, entrar como SupervisorCaés en Dashboard. Menú: Dashboard, Transacciones, Prefondeo, Reportes, Auditoría (esta última sola, sin el resto de Administración — no tiene permiso de leer Usuarios y Accesos ni Ubicaciones)
1.5Cerrar sesión, entrar como AdminCaés en Dashboard. Menú completo: Dashboard, Transacciones, Prefondeo, Reportes, Usuarios y Accesos, Ubicaciones, Configuración, Auditoría (8 ítems — Usuarios/Roles y Permisos/Asignación de Roles y Países/Estaciones quedaron agrupados con tabs, ver doc/plans/2026-07-25-navegacion-admin-tabs.md)
1.6Con cualquier usuario, mirar arriba a la derechaSe ve el rol y país activo (ej. "Admin · GT") y el mail

2. Listado de Transacciones — bolsa compartida (ACCEPTED) vs. alcance por PDV (resueltas)

#PasoResultado esperado
2.1Como Backoffice (solo GT-CAP-001), ir a Transacciones sin filtrosVes 13: las 11 ACCEPTED (bolsa compartida — todas, sin importar PDV) + 2 ya resueltas de tu PDV
2.2Como Supervisor (GT-CAP-001 + GT-QUE-002), ir a Transacciones sin filtrosVes 17: las 11 ACCEPTED + 6 resueltas de tus 2 PDVs
2.3Como Admin, ir a TransaccionesVes las 24 (todo el país)
2.4Como Backoffice, filtrar estado = ACCEPTEDEl filtro de PDV queda deshabilitado (con tooltip explicando por qué) — no tiene sentido, ninguna ACCEPTED tiene PDV todavía
2.5Como Backoffice, filtrar estado = PAID o CANCELLEDAhí sí se habilita el filtro de PDV, y solo aparece tu PDV (GT-CAP-001) para elegir
2.6Como Admin, filtrar estado = PAID y PDV = GT-QUE-002Ves solo las resueltas de ese PDV específico

3. Listado — filtros y búsqueda

#PasoResultado esperado
3.1Filtrar por estado = PAIDSolo se ven las transacciones pagadas
3.2Filtrar por estado = CANCELLEDSolo las canceladas
3.3Buscar por un MTCN completo o parcial (ej. 0000000001)Aparece esa transacción puntual
3.4Buscar por apellido (ej. García)Filtra por nombre/apellido del beneficiario
3.5Combinar estado (PAID o CANCELLED) + PDV + búsqueda a la vezLos filtros se combinan (AND), no se pisan entre sí
3.6Borrar todos los filtrosVuelve a mostrar todo el alcance del usuario

4. Detalle de transacción

#PasoResultado esperado
4.1Click en cualquier fila del listadoAbre el detalle: nombre, MTCN, monto, país, PDV, contacto — sin comisión (información restringida, ver doc/plans/2026-07-25-restringir-comision.md)
4.2Mirar la sección Historial en una transacción recién creada (sin movimientos)Dice "Sin movimientos todavía"
4.3Como Backoffice, entrar al detalle de una transacción ACCEPTED cualquiera (aunque no sea de tu PDV — todavía no tiene PDV asignado)Se abre normalmente — es bolsa compartida, cualquiera con acceso al país la ve
4.4Como Backoffice, entrar al detalle de una transacción ya resuelta (PAID/CANCELLED) de otro PDV (pedile el link a un Admin)Pantalla de "Transacción no encontrada" — no un error de permiso, para no confirmar que existe. Acá sí aplica el acotamiento por PDV
4.5Como Backoffice, entrar al detalle de una transacción de otro país (si hubiera más de uno activo)Mismo resultado: "Transacción no encontrada"

5. Cambiar a PAID

#PasoResultado esperado
5.1Como Admin, abrir una transacción en estado ACCEPTED y click en "Cambiar a PAID"Aparece el modal de confirmación tipo recibo (monto en grande arriba, ícono verde, MTCN/beneficiario debajo, sin comisión) — no el diálogo nativo del navegador
5.2Click en "Confirmar pago"El modal se cierra, aparece una notificación verde de éxito arriba a la derecha ("Transacción pagada"), el estado pasa a PAID y aparece en el Historial "Cambio de estado" con tu usuario y la hora
5.3Con esa misma transacción ya PAID, mirar los botones"Cambiar a PAID" y "Cancelar transacción" quedan grises/deshabilitados, con el texto "Solo se puede operar sobre transacciones ACCEPTED"
5.4Como Backoffice o Supervisor, repetir 5.1–5.2 con una transacción de tu alcanceFunciona igual (ambos roles tienen permiso de Escribir en Transacciones)
5.5Como Backoffice (un solo PDV asignado), después de pagar una transacción, mirar el campo PDV en el detalleAhora muestra tu PDV — quedó asignado recién al resolverla, no antes
5.6Filtrar Transacciones por estado=PAID y tu PDVAhora aparece la que acabás de pagar (5.5) — antes de resolverla no hubiera aparecido en ningún filtro de PDV
5.7Activar el modo oscuro (ícono de luna arriba a la derecha) y repetir 5.1El modal se ve correctamente en oscuro (fondo y textos oscuros, no queda "transparente" ni con el tema claro de por dentro)

6. Saldo de prefondeo insuficiente

El saldo actual del país es ≈ USD 53.915. Para probar el bloqueo por saldo insuficiente hace falta una transacción cuyo monto+comisión supere eso — no hay ninguna así en el seed por defecto (los montos son moderados a propósito). Para forzar el caso:

bash
docker compose exec backend php artisan tinker --execute="
\$gt = App\Models\Country::where('iso_code','GT')->first();
App\Models\Transaction::create(['soterex_transaction_id'=>'STX-QA-001','mtcn'=>'5555555555','status'=>'ACCEPTED','country_id'=>\$gt->id,'first_name'=>'Prueba','last_name'=>'Saldo','amount'=>60000,'fee'=>2100,'origin_currency'=>'USD','destination_country'=>'GT','sender'=>'US']);
"
#PasoResultado esperado
6.1Buscar el MTCN 5555555555, abrir el detalle, click en "Cambiar a PAID" y confirmarEl modal se queda abierto (no se cierra solo, para que puedas reintentar) y aparece una notificación roja: "Saldo de prefondeo insuficiente — Disponible X — no alcanza para esta transacción." (sin el monto exacto requerido — junto al monto ya visible permitiría derivar la comisión, ver doc/plans/2026-07-25-restringir-comision.md)
6.2Cerrar el modal con "Cancelar" y recargar la páginaLa transacción sigue en ACCEPTED — el intento fallido no la modificó

Para limpiar esta transacción de prueba después: mismo comando de "Antes de empezar".

7. Cancelar transacción

#PasoResultado esperado
7.1Abrir una transacción ACCEPTED, click en "Cancelar transacción"Aparece el mismo modal tipo recibo, pero con ícono rojo y botón "Cancelar transacción" en rojo (para diferenciarlo visualmente de pagar)
7.1bClick en "Cancelar transacción" dentro del modalSe cierra, notificación verde de éxito ("Transacción cancelada"), pasa a CANCELLED y queda en el Historial
7.2Intentar cancelar una transacción que ya está CANCELLED o PAIDLos botones ya están deshabilitados — no se puede ni intentar desde la UI

8. Bolsa compartida y concurrencia (el fix de hoy)

El caso real: dos cajeros de PDVs distintos ven la misma transacción ACCEPTED en su listado (es compartida) y ambos intentan tomarla casi al mismo tiempo. Para probarlo hace falta abrir la misma transacción en dos pestañas/navegadores con usuarios distintos:

#PasoResultado esperado
8.1Abrir la misma transacción ACCEPTED en dos pestañas (ej. Admin en una, Supervisor en otra)Ambas pantallas la muestran ACCEPTED con los botones habilitados
8.2En la primera pestaña, pagarla y confirmarPasa a PAID normalmente
8.3En la segunda pestaña (sin recargar), click en "Cambiar a PAID" y confirmarEl modal se cierra solo y aparece una notificación naranja de advertencia con el mensaje del backend (algo como "Esta transacción ya no está ACCEPTED... probablemente la resolvió otro usuario") — y la pantalla se refresca sola mostrando el estado real (PAID) con los botones ya deshabilitados
8.4Revisar el saldo de prefondeo después de 8.2 y 8.3Se descontó una sola vez — el segundo intento no tocó el saldo

9. Listado — filtros de fecha, ordenamiento y paginado (mejoras 2026-07-27)

#PasoResultado esperado
9.1Filtrar por "Desde" y "Hasta" (ej. el mismo día en ambos)Solo aparecen transacciones creadas ese día — el filtro "Hasta" incluye el día completo, no corta a medianoche
9.2Poner una fecha "Desde" muy futura (ej. 2099-01-01)El listado queda vacío, con el mensaje "No hay transacciones con estos filtros"
9.3Click en cualquier encabezado de columna (MTCN, Beneficiario, Estado, País, PDV, Monto, Creada, Última actualización — sin Comisión, sacada del listado, ver doc/plans/2026-07-25-restringir-comision.md)Ordena por esa columna, ascendente, con una flechita ↑ junto al título
9.4Click de nuevo en el mismo encabezadoInvierte a descendente (flechita ↓)
9.5Click en un encabezado distinto al activoCambia el orden a esa columna, siempre arrancando en ascendente
9.6Mirar la columna "Creada"Muestra la fecha de creación de la transacción — distinta de "Última actualización"
9.7Entrar al detalle de una transacción desde el listadoEl ítem "Transacciones" del menú lateral se mantiene resaltado en naranja (antes se apagaba al entrar al detalle)
9.8Con más de 25 transacciones en el alcance, moverse entre páginas con el paginador de abajoCambia de página sin perder los filtros ni el orden activos

10. Qué NO es parte de este módulo (no reportar como bug)

  • Los datos de Dashboard, Prefondeo, Reportes y todos los ABMs de Administración son pantallas placeholder — se implementan en los próximos módulos (M2–M4).
  • No hay conexión real con Soterex todavía (M5) — el pago/cancelación queda en la base local, no se le avisa a Soterex.
  • No hay exportación a Excel/PDF todavía.

Cómo reportarme el feedback

Para cada punto que falle, con el número de la tabla alcanza (ej. "2.2 me mostró 10 en vez de 12"). Si es algo visual o poco claro, una captura ayuda pero no es obligatoria.

Documentación viva — se actualiza junto con el código, no es un anexo aparte.