POS — Empleados y Roles
¿Qué es?
El módulo de Empleados permite crear y gestionar el equipo de trabajo. Cada empleado tiene un rol que define sus permisos dentro del POS. También se puede asignar a empleados a sucursales específicas y configurar sus métodos de autenticación (PIN/QR).
Se accede desde "Empleados" en el sidebar (ícono de persona), URL: .../employees. Requiere permiso employees:read.
---
Lista de empleados (.../employees)
Encabezado
- Título "Empleados"
- Botón "Nuevo empleado" (requiere
employees:create)
Lista
Para cada empleado:
- Foto / avatar
- Nombre completo
- Rol asignado (Dueño, Administrador, Gerente, Cajero, Cocina, Repartidor, Mesero)
- Sucursales asignadas (o "Todas" si no tiene restricciones)
- Estado activo/inactivo
- Botones de editar y eliminar
---
Crear / Editar empleado
Información básica
- Nombre (requerido)
- Correo electrónico — se usa para invitar al empleado a Clerk (si se desea)
- Teléfono
- Rol — selector con los roles disponibles
Asignación de sucursales
- Todas las sucursales (por defecto): el empleado puede operar en cualquier sucursal
- Sucursales específicas: se seleccionan de la lista. El empleado solo verá y podrá operar en las sucursales asignadas
Método de autenticación para el POS
- PIN — se asigna un PIN de 4 o 6 dígitos (según configuración)
- QR — se genera un código QR descargable para que el empleado lo escanee
- Ambos — el empleado puede elegir
Si el método global es none, no se pide PIN/QR a ningún empleado.
Permisos individuales (overrides)
Si se tiene el permiso employees:manage_roles, se puede sobreescribir permisos individuales para un empleado específico:
- Se muestra una lista de todos los permisos disponibles
- Se puede conceder (
true) o denegar (false) un permiso específico, independientemente del rol - Los overrides individuales tienen prioridad sobre el rol
---
Roles disponibles
| Rol | Etiqueta | Acceso multi-sucursal |
|---|---|---|
owner | Dueño | Sí |
admin | Administrador | Sí |
manager | Gerente | No |
cashier | Cajero | No |
kitchen | Cocina | No |
delivery | Repartidor | No |
waiter | Mesero | No |
Los roles owner y admin tienen todos los permisos y pueden ver todas las sucursales. Los demás roles tienen permisos predeterminados que se pueden personalizar.
---
Gestión de roles y permisos (.../roles)
Desde Configuración → Roles y permisos, el administrador puede:
- Ver los permisos por defecto de cada rol
- Modificar los permisos de un rol completo para la empresa (sin afectar el comportamiento por defecto del sistema)
Cómo funciona la resolución de permisos
El sistema resuelve los permisos en este orden (el más específico gana):
- Overrides del empleado (campo
permissionOverridesen el empleado) — máxima prioridad - Permisos del rol en la empresa (
companies.rolePermissions[rol]) — si el administrador modificó el rol - Permisos por defecto del rol (
BUILT_IN_ROLES[rol].defaultPermissions) — definidos en el código
El rol `owner` siempre tiene todos los permisos y no puede ser restringido.
Lista de módulos y permisos
| Módulo | Permisos disponibles |
|---|---|
orders | read, create, update, approve, deliver, cancel, discount, process_courtesy |
articles | read, create, update, delete, branch_config |
categories | read, create, update, delete |
employees | read, create, update, delete, manage_roles |
customers | read, create, update, delete |
promotions | read, create, update, delete |
cash_register | read, open_shift, close_shift, movements |
inventory | read, create, update, delete, adjust, transfer |
coupons | read, create, update, delete |
settings | read, update, update_branch |
branches | read, create, update |
audit_log | read |
logistics | read, manage |
---
Pantalla de bloqueo / Sesión de empleado
Cuando el POS requiere autenticación (authMethod != "none"), aparece una pantalla de bloqueo sobre todo el contenido. El empleado se identifica con:
- Su PIN numérico (teclado en pantalla)
- Su código QR (cámara del dispositivo)
Una vez autenticado, el POS muestra su nombre en el encabezado y aplica sus permisos para determinar qué botones y secciones son accesibles.
Si autoLockMinutes > 0, la pantalla se bloquea automáticamente tras ese tiempo de inactividad. Si lockAfterSale = true, se bloquea inmediatamente después de completar una venta.