Skip to content

Plan de Pruebas — Módulo Caja y prefondeo en tres capas (E4 + E4b)

Fecha: 2026-08-06 Entregas: E4 y E4-multi (ya en main) + E4b.1/E4b.2/E4b.3 (PRs #9 a #12) ADR: doc/architecture/ADR-007-prefondeo-tres-capas.md Ambiente: Dev local (./start-dev.sh) — http://localhost:5173

Por qué existe este documento

El módulo Caja nunca tuvo plan de pruebas manual. M1 a M4 tienen uno cada uno; E1 a E4 no. Caja es, de todo el sistema, lo que más plata mueve — lleva el efectivo físico de cada punto de venta — y hasta hoy se validó solo con tests automáticos.

Además, E4b cambia cosas que un test no puede juzgar: si el desglose del prefondeo país se entiende, si el aviso de sobregiro se distingue de un error que bloquea, si alguien puede confundir un fondeo con un ajuste. Eso necesita ojos.

Estado de lo automático

263 tests de backend y 50 de frontend, más Pint, vue-tsc y el build de producción. Lo que no está verificado: nada de esto se abrió en un navegador. Las pantallas de E4b.3 (Prefondeo País) y los avisos nuevos de Caja no se vieron nunca renderizados.

Usuarios

EmailPasswordRolPara qué sirve acá
admin@cislatam.testAdmin123!AdminConfigurar países, ver todo
supervisor@cislatam.testSuper123!SupervisorFondear, ajustar, cargar prefondeo país
backoffice@cislatam.testBackoffice123!BackofficeAbrir/cerrar caja y pagar

Si hace falta un segundo Backoffice para las pruebas de concurrencia (sección 7), crealo desde Admin → Usuarios con rol Backoffice en Guatemala.

Preparación

  1. ./start-dev.sh y esperar a que levante todo.
  2. Como Admin → Ubicaciones → Países → Guatemala: módulo Caja activo, moneda local GTQ, y "Pagar en moneda local" apagado (es el escenario real: Guatemala paga en dólares).
  3. Verificar que Guatemala tenga al menos dos sucursales y una de ellas dos cajas (Ubicaciones → Estaciones → "+ agregar caja").

1. Configuración del país

#PasoResultado esperado
1.1Como Admin, editar GuatemalaAparecen "Módulo Caja activo", "Moneda local" y "Pagar en moneda local"
1.2Intentar activar el módulo Caja sin moneda local422 con mensaje claro, no se guarda
1.3Dejar "Pagar en moneda local" apagado y guardarSe guarda. La leyenda explica que apagado se paga en dólares y no hace falta TC
1.4Como Supervisor, entrar a UbicacionesNo tiene acceso — el ABM es solo de Admin

2. Apertura y cierre (E4b.1)

#PasoResultado esperado
2.1Como Backoffice, entrar a CajaSi hay más de una caja disponible, muestra el selector; con una sola, entra directo
2.2Elegir una caja cerrada y tocar "Abrir caja"Modal con el saldo inicial de solo lecturano hay campo para tipearlo, ni pide usuario/contraseña de un Supervisor
2.3Leer el texto del modalExplica que si la plata física no coincide se registra un ajuste, y que la plata nueva entra por fondeo
2.4Confirmar la aperturaCaja abierta. En la primera apertura el saldo inicial es 0,00
2.5Fondear 5.000 y cerrar la cajaEl diálogo de cierre dice que la plata queda en la caja y que la próxima apertura arranca con ese saldo. Ya no dice "va a quedar en cero"
2.6Volver a abrir la misma cajaEl saldo inicial es 5.000, heredado del cierre. Es el corazón de E4b.1
2.7Mirar el historial tras el cierreNo aparece ningún movimiento de "Cierre" — el cierre ya no retira la plata

2b. Una sola caja abierta por usuario

#PasoResultado esperado
2.8Con una caja ya abierta a tu nombre, ir a "Cambiar de caja" e intentar abrir otraError 409: "Ya tenés la caja N de <sucursal> abierta a tu nombre. Cerrala antes de abrir otra."
2.9Cerrar la primera y abrir la segundaFunciona — es cambio de turno, no un bloqueo permanente
2.10Con el segundo Backoffice, abrir otra caja mientras el primero tiene la suya abiertaFunciona: la regla es por usuario, no global

3. Fondeo y ajuste (E4b.1)

#PasoResultado esperado
3.1Como Supervisor, abrir el formulario de movimiento manualEl motivo es una lista desplegable cerrada — no se puede escribir uno nuevo
3.2Ver los motivos de FondeoFondeo inicial, Blindado, Transferencia financiero, Otro
3.3Cambiar el toggle a Ajuste y ver los motivosFaltante de arqueo, Sobrante de arqueo, Otro — y el motivo elegido antes se limpia
3.4Elegir motivo OtroAparece un campo de descripción. Sin completarlo no deja guardar
3.5Cargar un fondeo con Otro + descripciónSe guarda. En el historial se lee Otro — <descripción> bajo el tipo
3.6Cargar un ajuste negativo (ej. -120, Faltante de arqueo)Resta del saldo
3.7Intentar un ajuste que deje la caja negativa422 — no existe "menos cero" en un cajón real
3.8Como Backoffice, buscar el formulario de fondeoNo lo ve — fondeo y ajuste son de Supervisor/Admin

4. Filtros y export

#PasoResultado esperado
4.1Cargar más de 25 movimientos en una cajaAparecen los controles de paginación y el total. Antes se truncaba en silencio
4.2Navegar a la página 2 y volverLos datos cambian; "Anterior" está deshabilitado en la página 1
4.3Filtrar por tipo y por motivoEl listado responde al filtro
4.4Exportar a Excel con el filtro puestoEl archivo trae exactamente lo que estabas viendo, no todo
4.5Abrir el exportHay una columna Moneda. Con Guatemala pagando en dólares, no hay columna "TC aplicado"

5. Pago y moneda (E4b.2)

#PasoResultado esperado
5.1Con Guatemala pagando en dólares y sin ningún TC cargado, pagar una transacciónSe paga. Antes cortaba con "No hay tipo de cambio vigente"
5.2Mirar el movimiento en el historialEl monto descontado es el nominal en USD, sin convertir, y no muestra TC
5.3Ver los montos de la pantalla CajaTodos llevan la moneda al lado (1,500.00 USD), no números pelados
5.4Pagar sin tener ninguna caja abierta a tu nombre422 con mensaje claro
5.5Pagar con la caja sin saldo suficiente422 — la caja es el único freno

5b. Cambio de moneda (el escenario futuro)

Esto simula el día que Guatemala consiga la autorización de cambio de divisa. Hacelo sobre datos de prueba, no sobre una caja que quieras conservar.

#PasoResultado esperado
5.6Con la caja teniendo saldo en USD, como Admin prender "Pagar en moneda local" en Guatemala y cargar un TCSe guarda
5.7Volver a Caja y mirar el saldoEl saldo pasa a ser el de GTQ (probablemente 0), y aparece un aviso: "Además hay X USD de una moneda anterior en esta caja"
5.8Fondear en GTQ y pagar una transacciónEl descuento se hace convertido al TC, y el movimiento muestra el TC aplicado
5.9Mirar los movimientos viejosSiguen rotulados en USD, no reetiquetados como GTQ
5.10Volver a apagar la bandera al terminarEl saldo vuelve a mostrar el de USD

6. Prefondeo en tres capas (E4b.3)

#PasoResultado esperado
6.1Mirar el sidebarHay dos entradas: "Prefondeo Holding" y "Prefondeo País"
6.2Entrar a Prefondeo HoldingEl saldo se rotula como global de la Holding — suma de todos los países, no solo el que estás viendo
6.3Entrar a Prefondeo País como SupervisorMuestra el desglose de tres cifras
6.4Verificar el desgloseSaldo del país arriba, y debajo ├─ Distribuido en cajas y └─ Disponible para distribuir, visualmente colgando del primero
6.5Cargar un asiento de 100.000 con referenciaEl saldo del país sube a 100.000 y "Disponible para distribuir" también
6.6Fondear una caja con 20.000El saldo del país sigue en 100.000 (mover plata a una caja no es un gasto), "Distribuido en cajas" pasa a 20.000 y "Disponible" a 80.000
6.7Pagar una transacción de 500 desde esa cajaAhí sí el saldo del país baja a 99.500
6.8Como Backoffice, buscar Prefondeo PaísNo lo ve — es de Supervisor/Admin

6b. Saldo negativo y sobregiro

#PasoResultado esperado
6.9En un país sin asientos de prefondeo país, pagar desde una caja con saldoEl pago se hace igual. El país queda en negativo
6.10Mirar el saldo del paísEn rojo, con una leyenda que aclara que es la deuda pendiente y no un error
6.11Fondear una caja por encima de "Disponible para distribuir"El fondeo se hace, y aparece un banner ámbar persistente que dice que se registró correctamente y que avises a tesorería
6.12Comparar ese banner con un error real (ej. el ajuste negativo de 3.7)El aviso es ámbar, en pasado, con la operación hecha; el error es rojo, en imperativo, sin guardar nada. Se tienen que distinguir de un vistazo
6.13Descartar el banner con la ×Desaparece y no vuelve hasta el próximo fondeo con sobregiro

7. Permisos y aislamiento

#PasoResultado esperado
7.1Como Backoffice acotado a la sucursal A, entrar a CajaSolo ve las cajas de A
7.2Con el id de una caja de la sucursal B, pegarle a la API
GET /caja/<id-de-B>/movimientos
403. Este era el agujero del PR #9: antes respondía
7.3Lo mismo con POST .../apertura y POST .../fondeo403
7.4Como Admin (sin acotar por PDV)Puede operar cualquier caja del país

7b. Multipaís

Requiere un segundo país con módulo Caja. Si no lo tenés, saltealo y anotalo.

#PasoResultado esperado
7.5Con un usuario con acceso a dos países con Caja, abrir una caja del país BSe abre
7.6Intentar pagar una transacción del país A422: "La caja que tenés abierta es de otro país". Este era el peor de los bugs

8. Regresión — países sin módulo Caja

Es lo más importante de esta ronda: Ecuador está en producción y no debe cambiar nada.

#PasoResultado esperado
8.1En un país con módulo Caja apagado, pagar una transacciónSe paga sin pedir caja abierta ni TC
8.2Verificar que no se creó ningún movimiento de cajaEl flujo es idéntico al de M1
8.3Dejar el prefondeo país de ese país sin saldo e intentar pagar422 INSUFFICIENT_PREFUNDING — sin Caja, el país sí frena el pago
8.4Entrar a Prefondeo País de ese paísMuestra solo el saldo, sin las dos filas de distribución (no hay cajas)

9. Auditoría

#PasoResultado esperado
9.1Tras hacer aperturas, cierres, fondeos y ajustes, entrar a Admin → AuditoríaAparecen CASH_SESSION_OPENED, CASH_SESSION_CLOSED, CASH_FUNDED, CASH_ADJUSTED, COUNTRY_PREFUNDING_ENTRY_CREATED
9.2Abrir el detalle de una aperturaNo tiene datos de supervisor (ya no existe) y marca que el saldo fue heredado
9.3Abrir el detalle de un fondeo con motivo OtroGuarda motivo y descripción por separado

Qué reportar

Por cada paso que falle: número del paso, qué esperabas, qué pasó, y si podés, captura. Si algo te resulta confuso aunque técnicamente funcione —sobre todo en la sección 6, que es conceptualmente lo más denso— anotalo igual: el desglose de tres cifras existe justamente porque el número solo no se entendía.

Cosas que este plan NO cubre

  • Comprobantes membretados de apertura y cierre: las columnas existen pero nadie las escribe; llegan con E5. La app ya no promete que estén (se corrigió el mensaje del cierre).
  • La notificación a Soterex al pagar: sigue siendo un seam para M5, no ocurre.
  • Wizard de pago con documentos y papeleta: es E5.

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