Asignar Mesas a Meseros
Sistema flexible de asignación de mesas con soporte para números individuales, rangos y listas.
💡 Antes de comenzar: El sistema permite asignar mesas de forma flexible usando números individuales (ej: "5"), rangos (ej: "1-10") o listas (ej: "1,2,3,4,5"). El sistema detecta automáticamente conflictos de rangos y permite compartir mesas individuales.
Formatos de Asignación
📍 Individual
Una mesa específica
"5"📊 Rango
Mesas consecutivas
"1-10"📝 Lista
Mesas separadas por comas
"1,2,3,4,5"Asignar Mesas a un Mesero
Método 1: Desde Gestión de Empleados
- Ve a /[slug]/admin/employees
- Encuentra al mesero y haz clic en "Editar"
- Busca la sección "Mesas Asignadas"
- Ingresa las mesas en el formato que prefieras:
"1-5"- Mesas de la 1 a la 5"10,12,15"- Mesas 10, 12 y 15"VIP-1"- Mesa VIP-1- O combina varios:
["1-10", "VIP-1", "15,16"]
- El sistema verifica conflictos automáticamente
- Si hay conflictos de rangos → Error (debes corregir)
- Si hay mesas compartidas → Warning informativo (se permite)
- Haz clic en "Guardar"
Ejemplos de Asignación
Ejemplo 1: Restaurante con 30 Mesas
- Mesero A (Juan):
["1-10"]- Atiende mesas: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
- Mesero B (María):
["11-20"]- Atiende mesas: 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
- Mesero C (Pedro):
["21-30"]- Atiende mesas: 21 a 30
✅ Sin conflictos: Rangos no se solapan
Ejemplo 2: Con Mesas Especiales
- Mesero Senior:
["1-5", "VIP-1", "VIP-2", "Terraza-1"]- Mesas: 1, 2, 3, 4, 5, VIP-1, VIP-2, Terraza-1
- Mesero Junior:
["6-15"]- Mesas: 6 a 15
Detección de Conflictos
Conflictos REALES (Bloqueados por el Sistema)
Rangos que se solapan entre meseros:
❌ Ejemplo de Conflicto:
- Mesero A tiene:
"1-10" - Intentas asignar a Mesero B:
"8-15" - Conflicto en mesas: 8, 9, 10
- Error: "Rangos solapados con Mesero A"
Debes corregir para continuar. Por ejemplo, asignar "11-15" en su lugar.
Mesas COMPARTIDAS (Permitidas con Warning)
Mesas individuales asignadas a múltiples meseros:
⚠️ Ejemplo de Compartición:
- Mesero A tiene:
"5" - Asignas a Mesero B:
"5" - Warning: "Mesa 5 compartida con Mesero A"
- Permitido: Se guarda, pero te informa
Útil cuando dos meseros trabajan juntos o en turnos diferentes en la misma mesa.
Verificación Automática de Conflictos
El sistema verifica conflictos antes de guardar:
- Expande todos los rangos a números individuales
- Busca otros meseros con mesas asignadas
- Para cada mesero:
- Detecta rangos solapados (ERROR)
- Detecta mesas individuales compartidas (WARNING)
- Si hay errores → Bloquea guardado
- Si solo hay warnings → Permite con confirmación
Algoritmo de Expansión
El sistema expande las asignaciones para validación:
Ejemplo de Expansión
Entrada: ["1", "3-5", "VIP-1,VIP-2", "10"]
Procesamiento:
"1"→ ["1"]"3-5"→ ["3", "4", "5"]"VIP-1,VIP-2"→ ["VIP-1", "VIP-2"]"10"→ ["10"]
Salida ordenada: ["1", "3", "4", "5", "10", "VIP-1", "VIP-2"]
Números primero (orden numérico), luego strings (orden alfabético)
Modificar Mesas Asignadas
- Edita el mesero
- Modifica el campo de mesas asignadas
- Puedes:
- Agregar nuevas mesas
- Quitar mesas existentes
- Cambiar de individual a rango
- Cambiar de rango a lista individual
- El sistema verifica nuevamente conflictos
- Guarda los cambios
⚠️ Impacto en tiempo real: Si un mesero tiene turno activo y le quitas una mesa, no podrá tomar nuevos pedidos en esa mesa, pero los pedidos existentes se mantienen.
Validación al Tomar Pedidos
Cuando el mesero intenta crear un pedido:
- Mesero selecciona mesas: "3,4,5"
- Sistema expande: ["3", "4", "5"]
- Verifica cada mesa con
waiter.hasMesaAssigned(tableNumber) - Si TODAS las mesas están asignadas → Permite crear orden
- Si ALGUNA mesa NO está asignada → Error 403 Forbidden
💡 Método hasMesaAssigned(): Este método soporta verificación contra números individuales, rangos y listas. Si el mesero tiene "1-10", puede tomar pedidos de cualquier mesa del 1 al 10.
Casos de Uso Comunes
1. Restaurante con Zonas
Zona Interior: Mesas 1-15
Zona Terraza: Mesas 16-25
Asignación:
- Mesero A:
["1-15"](Interior) - Mesero B:
["16-25"](Terraza)
2. Mesas VIP con Mesero Dedicado
Mesero Senior: ["VIP-1", "VIP-2", "VIP-3"]
Otros meseros: Mesas numeradas normales
3. Turnos Compartidos
Turno Mañana (Mesero A): ["1-10"]
Turno Tarde (Mesero B): ["1-10"]
Aunque están asignadas las mismas mesas, cada mesero trabaja en horario diferente.
Sin Asignación de Mesas
Si un mesero NO tiene mesas asignadas:
- Campo
assignedTables = [](vacío) - Puede tomar pedidos de CUALQUIER mesa
- Útil para meseros de apoyo o flotantes
- No tiene restricciones al seleccionar mesas
Buenas Prácticas
✅ Usa rangos para eficiencia: Es más fácil escribir "1-20" que "1,2,3,4,5..." hasta 20.
✅ Agrupa mesas cercanas: Asigna mesas cercanas físicamente al mismo mesero para eficiencia en el servicio.
✅ Evita solapamientos de rangos: Planifica bien los rangos para evitar conflictos (1-10, 11-20, 21-30).
✅ Documenta mesas especiales: Si usas nombres como "VIP-1", mantén una lista documentada de qué representa cada nombre.
Solución de Problemas
Error: "Rangos solapados con otro mesero"
Hay un conflicto de rangos. Revisa qué mesas tiene asignado el otro mesero y ajusta tu rango. Ejemplo: Si otro mesero tiene "1-10" y tú intentas "8-15", cambia a "11-15".
El mesero no puede tomar pedidos de una mesa
Error "Forbidden": La mesa no está asignada a ese mesero. Verifica en el perfil del mesero qué mesas tiene asignadas. Si debe tener acceso, edita y agrega la mesa.
¿Puedo asignar la misma mesa a dos meseros?
Sí, si son mesas individuales (no rangos). El sistema permite compartir mesas individuales pero te avisa con un warning. Es útil para turnos diferentes o meseros que se apoyan mutuamente.
¿Cómo quito todas las mesas de un mesero?
Edita el mesero y deja el campo de mesas vacío (borra todo). Esto le dará acceso a TODAS las mesas sin restricción. Si quieres que no tenga acceso a ninguna, desactiva al mesero en lugar de quitarle las mesas.
¿Te fue útil este artículo?