Descripción General
Los permisos de caja son por usuario (no basados en roles) y controlan operaciones críticas del módulo de cajas:- Apertura de caja
- Cierre de caja
- Autorización de cierres
- Rechazo de cierres
- Registro de movimientos
- Visualización de reportes
Tabla de Permisos de Caja
database/migrations/2026_03_04_000009_create_permisos_caja_table.php
Cada usuario tiene un único registro por empresa. El constraint
UNIQUE (id_usuario, id_empresa) previene duplicados.Permisos Disponibles
puede_abrir_caja
Permite al usuario abrir una caja para iniciar operaciones del día:puede_cerrar_caja
Permite al usuario solicitar el cierre de caja al finalizar el turno:El cierre queda en estado PENDIENTE hasta que un supervisor con
puede_autorizar_cierre lo autorice.puede_autorizar_cierre
Permite autorizar cierres solicitados por otros usuarios (rol de supervisor):puede_rechazar_cierre
Permite rechazar cierres con inconsistencias:puede_registrar_movimientos
Permite registrar movimientos de efectivo (ingresos/egresos):puede_ver_reportes
Permite acceder a reportes detallados de caja:- Resumen de operaciones
- Ventas por método de pago
- Auditoría de movimientos
- Arqueo de caja
API de Gestión
Obtener Permisos de un Usuario
ID del usuario
Actualizar Permisos de un Usuario
Permitir apertura de caja
Permitir solicitar cierre
Permitir autorizar cierres (supervisor)
Permitir rechazar cierres
Permitir registrar ingresos/egresos
Permitir acceso a reportes detallados
Flujo de Trabajo: Apertura y Cierre
Cajero abre caja
Usuario con
puede_abrir_caja abre la caja ingresando:- Monto inicial en efectivo
- Desglose de billetes y monedas
- Observaciones del turno
Operaciones del día
Usuario registra:
- Ventas (automáticas desde módulo de facturación)
- Movimientos manuales (si tiene
puede_registrar_movimientos) - Ingresos y egresos diversos
Cajero solicita cierre
Usuario con
puede_cerrar_caja solicita cierre:- Cuenta el efectivo físico
- Ingresa desglose de billetes
- Sistema calcula diferencias
Supervisor revisa
Usuario con
puede_autorizar_cierre revisa:- Compara monto físico vs. sistema
- Verifica movimientos sospechosos
- Decide autorizar o rechazar
Perfiles de Usuario Recomendados
Cajero Junior
- Abrir su caja al inicio del turno
- Procesar ventas
- Solicitar cierre al finalizar
Cajero Senior
- Registrar ingresos/egresos manuales
- Ver reportes detallados de su caja
Supervisor de Caja
- Todas las operaciones de cajero
- Autorizar/rechazar cierres de otros usuarios
- Supervisar todas las cajas
Auditor (Solo Lectura)
- Solo visualización de reportes
- Sin capacidad de modificar datos
Validaciones de Seguridad
No puede abrir caja ya abierta
Error
No puede cerrar sin permiso
Error
No puede autorizar su propio cierre
Error
Diferencia de efectivo excede el umbral
Warning
Relación con Permisos de Rol
Los permisos de caja complementan (no reemplazan) los permisos de rol:| Permiso de Rol | Permiso de Caja | Resultado |
|---|---|---|
caja.view | puede_ver_reportes = true | ✅ Puede ver reportes |
caja.view | puede_ver_reportes = false | ❌ No puede ver reportes |
Sin caja.view | puede_ver_reportes = true | ❌ Rol lo bloquea primero |
caja.create | puede_abrir_caja = true | ✅ Puede abrir caja |
caja.edit | puede_cerrar_caja = true | ✅ Puede cerrar caja |
caja.autorizar | puede_autorizar_cierre = true | ✅ Puede autorizar |
Flujo de validación:
- Se verifica permiso de rol (middleware
permission:) - Se verifica permiso específico de caja (lógica del controlador)
- Ambos deben ser verdaderos para permitir la operación
Códigos de Error
| Código | Mensaje | Causa |
|---|---|---|
| 401 | No autenticado | Token inválido |
| 403 | No tienes permiso para cerrar cajas | Usuario sin puede_cerrar_caja |
| 403 | No puedes autorizar tu propio cierre | Intento de auto-autorización |
| 404 | Permisos de caja no encontrados | Usuario sin registro en permisos_caja |
| 422 | Diferencia excesiva en arqueo | Diferencia > umbral configurado |
| 500 | Error al actualizar permisos | Error de base de datos |
Mejores Prácticas
Principio de Segregación
Ningún usuario debe tener permisos para abrir, cerrar Y autorizar. Separa responsabilidades.
Rotación de Cajas
Asigna diferentes cajeros a diferentes cajas cada día para prevenir fraudes.
Auditoría Regular
Usuarios con
puede_ver_reportes deben revisar diariamente las diferencias de arqueo.Límites de Movimientos
Establece montos máximos para movimientos manuales sin autorización superior.