POS — Cajas Registradoras
¿Qué es?
El módulo de Cajas gestiona los turnos de apertura y cierre de cajas registradoras, los movimientos de efectivo (entradas y salidas), y el historial de cierres. También incluye la gestión de sesiones de efectivo de repartidores.
Se accede desde "Cajas" en el sidebar (ícono de edificio bancario), URL: .../cash-register. Solo visible si enableCashRegister = true en la configuración.
Requiere permiso cash_register:read.
---
Layout y pestañas
La pantalla tiene tres pestañas en la parte superior derecha:
| Pestaña | Contenido |
|---|---|
| Sucursales (cuadrícula) | Tarjetas de cada caja registradora con su turno actual |
| Repartidores (bicicleta) | Sesiones de efectivo de los repartidores |
| Historial (reloj) | Registro de todos los turnos cerrados |
El botón "Nueva caja" aparece solo en la pestaña de Sucursales, en el encabezado.
---
Pestaña: Sucursales (Cajas)
Lista de cajas
Cuadrícula responsiva (auto-fill de 280px mínimo por columna). Cada caja muestra una tarjeta con:
Si el turno está cerrado:
- Nombre de la caja
- Estado: "Sin turno activo"
- Botón "Abrir turno"
Si el turno está abierto:
- Nombre de la caja
- Estado: "Turno abierto" con tiempo transcurrido
- Balance inicial del turno
- Saldo esperado actual (inicial + entradas - salidas)
- Últimos movimientos del turno
- Botón "Cerrar turno"
- Botón "Agregar movimiento"
Crear una nueva caja
El botón "Nueva caja" del encabezado abre un diálogo con:
- Campo de nombre (ej. "Caja 1", "Mostrador principal")
- Si ya hay una caja seleccionada para editar, permite renombrarla
---
Abrir un turno
Al pulsar "Abrir turno" en una caja cerrada:
- Se pide el balance inicial (cuánto efectivo hay físicamente al inicio)
- Al confirmar, se crea un registro en
cash_shiftsconstatus = open,openingBalance = monto ingresado - El turno queda ligado a esa caja y a la sucursal activa
---
Movimientos de efectivo
Mientras el turno está abierto, el cajero puede registrar movimientos:
- Entrada de efectivo: depósito o ingreso adicional (ej. cambio recibido de banco)
- Salida de efectivo: retiro o gasto (ej. pago a proveedor, envío de efectivo)
Cada movimiento requiere:
- Tipo (entrada/salida)
- Monto
- Descripción / concepto
Los movimientos se suman al saldo esperado para el cálculo de cierre.
---
Cerrar un turno
Al pulsar "Cerrar turno":
- Se muestra el resumen del turno:
- Balance inicial
- Total de ventas en efectivo del turno (suma de órdenes pagadas en efectivo durante el turno)
- Entradas manuales
- Salidas manuales
- Saldo esperado = inicial + ventas en efectivo + entradas - salidas
- El cajero ingresa el efectivo contado (lo que hay físicamente en la caja)
- El sistema calcula la diferencia = contado - esperado
- Al confirmar, el turno queda en
status = closedcon los montos registrados
---
Pestaña: Repartidores (Sesiones de efectivo)
Muestra las sesiones de efectivo activas o históricas de los repartidores de la sucursal. Una sesión de repartidor acumula el efectivo que el repartidor recibe de órdenes con pago contra entrega (pay_on_delivery).
Para cada repartidor activo:
- Nombre y foto
- Estado de la sesión (abierta/cerrada)
- Monto esperado (suma de órdenes contra entrega entregadas)
- Botón para abrir nueva sesión (si no tiene una activa)
- Botón para cerrar sesión y registrar el depósito
Cerrar sesión de repartidor
Al cerrar:
- Se ingresa el monto que el repartidor entrega físicamente
- El sistema calcula diferencia (faltante/sobrante)
- Se registra el depósito como movimiento de entrada en la caja registradora activa (
driver_handover)
---
Pestaña: Historial
Lista cronológica de todos los turnos cerrados de la sucursal. Para cada turno:
- Fecha de apertura y cierre
- Nombre de la caja
- Empleado que lo abrió
- Balance inicial, saldo esperado, efectivo contado
- Diferencia (en verde si positivo, rojo si negativo)
- Botón "Ver detalle" para ver todos los movimientos del turno
Se puede filtrar por caja usando el selector de cajas disponible.
---
Vinculación con órdenes
Cuando se crea una orden:
- El sistema detecta si hay un turno abierto en la sucursal activa
- Si hay uno, la orden se liga a ese turno mediante
cashShiftId - Al cerrar el turno, las ventas en efectivo de esas órdenes se incluyen en el cálculo del saldo esperado
---
Configuración relacionada
Desde /settings (Configuración POS):
enableCashRegister: activa/desactiva el módulo completorequireOpenShiftToSell: si está activo, no se pueden crear órdenes sin un turno abierto en esa sucursalrequireCloseShiftOnLogout: muestra aviso al cambiar de empleado con turno sin cerrar