Servicio técnico
Asignación de técnicos de campo desde un tablero compartido
Un coordinador reparte trabajos entre personas que ya están en ruta, con franjas de llegada prometidas, competencias necesarias y un día que rara vez sale según lo previsto. El tablero tiene que hacer rápida la asignación y segura la reasignación, y dejar las rutas y las estimaciones de desplazamiento a los sistemas que conocen la geografía.
Una cola a un lado, un día en movimiento al otro
El trabajo entra sin parar: la reparación de una caldera reservada ayer, una visita de garantía, un aviso urgente a las 10:40. Cada trabajo tiene un cliente, una dirección, una franja de llegada prometida a ese cliente y un conjunto de competencias o certificaciones que exige. Hasta que se asigna, espera en una cola que el coordinador va resolviendo.
Los técnicos no son intercambiables. Uno está certificado para gas, otro lleva las piezas de un modelo concreto, una instalación pesada necesita un equipo de dos y cada uno tiene su zona. Mientras tanto, los trabajos se alargan, las furgonetas se averían y alguien avisa de que está enfermo, así que la tarde se rehace varias veces al día.
Una línea de tiempo es la herramienta adecuada para «quién hace qué y cuándo». No lo es para «qué orden de visitas reduce al mínimo el tiempo al volante», y un tablero de asignación debería ser honesto con esa diferencia.
Las decisiones del coordinador
- 01
Quién se queda el trabajo
Las competencias, las certificaciones, la zona y las piezas de la furgoneta acotan la lista. El coordinador elige entre los técnicos que quedan según su carga de trabajo y dónde van a estar.
- 02
Si la franja prometida sigue en pie
Una franja de llegada de 08:00 a 12:00 es un compromiso. Un hueco a las 11:30 después de una instalación larga puede verse libre en pantalla y ser un retraso en la práctica.
- 03
Cuánto desplazamiento prever
Dos trabajos en extremos opuestos de una ciudad no son consecutivos en la realidad. Los coordinadores dejan huecos o insertan bloques de desplazamiento según lo que saben de la ruta.
- 04
Qué hacer cuando un trabajo se alarga
Cuando una instalación lleva dos horas más de lo previsto, el resto del día de ese técnico tiene que desplazarse, pasar a otra persona o volver a concertarse con el cliente.
Cómo modelar el tablero de asignación
Mantén el trabajo sin asignar fuera de la rejilla y el asignado dentro, y haz que soltarlo de un lado a otro sea el momento en que tu backend registra la asignación.
- Recursos
- Las filas son técnicos, agrupados opcionalmente por equipo o región en un árbol de recursos, con columnas para la zona, las competencias o la furgoneta. La aplicación reduce las filas a los candidatos con rows.filter y onRowFilter.
- Eventos
- Un trabajo asignado es un evento en la fila de un técnico, con la referencia del cliente, la franja de llegada y el estado como campos propios. El desplazamiento puede aparecer como un evento bloqueado aparte, con moveDisabled y resizeDisabled, que tu código crea y mantiene.
- Escala temporal
- Usa celdas de una hora para la asignación de hoy y celdas de un día para la semana siguiente, como dos niveles de zoom. Deshabilita las celdas fuera del turno de cada técnico para que no se puedan soltar trabajos en su tiempo libre.
- Reglas
- La lista de trabajos sin asignar usa makeDraggable, así que soltar un elemento sobre un técnico crea un evento y dispara onEventMoved con args.external activado. En onEventMoving, rechaza soltarlo sobre un técnico sin la competencia necesaria o fuera de la franja de llegada, con un mensaje que explique el motivo. Activa la selección de eventos y allowMultiMove para que varios trabajos se muevan juntos.
El tablero y el back office
- Arrastrar trabajos desde una lista externa hasta un técnico y una hora
- Filtrado de filas por competencia, región o equipo
- Multiselección y movimiento de varios trabajos a la vez
- Rechazo con mensaje cuando soltar un trabajo incumple tu regla
- Tarjetas de trabajo y paneles de detalle renderizados como componentes React
- Optimización de rutas, estimación de tiempos de desplazamiento y mapas: la librería no planifica rutas
- La entrada de trabajos, la comunicación con el cliente y las franjas de llegada que prometes
- La app móvil de los técnicos y las actualizaciones de estado desde el terreno
- Competencias, certificaciones y zonas como datos, y las reglas de emparejamiento
- La sincronización entre coordinadores y la resolución de conflictos en el servidor
- La conversión de zonas horarias para equipos repartidos entre regiones
Ejemplos que funcionan
Errores que repiten los tableros de asignación
Leer la línea de tiempo como un mapa
Dos barras contiguas no dicen nada de la distancia. Sin bloques de desplazamiento ni una comprobación de tu servicio de rutas, un día puede verse libre en pantalla y ser imposible en la carretera.
Quitar el trabajo de la cola demasiado pronto
Saca el elemento de la lista de trabajos sin asignar solo cuando el backend confirme la asignación. Si se vuelve a soltar un elemento con un id que ya está cargado, se ignora con un aviso en la consola, lo que puede ocultar un problema real de duplicados.
Mezclar zonas horarias en un mismo tablero
Las horas son civiles y no llevan zona. Un equipo repartido entre zonas necesita una única zona de visualización elegida por la aplicación, con la conversión hecha antes de que los datos lleguen a la línea de tiempo.
Validar solo en el tablero
Dos coordinadores pueden dar el mismo hueco al mismo técnico en el mismo instante. Decide el servidor, y el tablero recarga el resultado.
Preguntas
¿SuperScheduler optimiza las rutas de los técnicos?
No. No tiene motor de rutas, de geocodificación ni de tiempos de desplazamiento. Muestra el plan y deja que los coordinadores lo cambien; tu aplicación o un servicio de rutas propone el orden de las visitas y las estimaciones de desplazamiento, que puedes dibujar como eventos.
¿Cómo arrastro trabajos sin asignar desde una lista hasta la planificación?
Llama a SuperScheduler.Scheduler.makeDraggable sobre cada elemento de la lista con un id, un texto y una duración. Al soltarlo en una fila se crea un evento y se dispara onEventMoved con args.external a true, que es donde envías la asignación a tu backend.
¿Puedo mostrar solo los técnicos que tienen una competencia concreta?
Sí. Guarda las competencias en cada recurso, llama a rows.filter con la competencia elegida y decide la visibilidad en onRowFilter. El filtro cambia qué filas se muestran, no a quién se puede asignar, así que valida también las asignaciones en el servidor.
¿Puede un coordinador mover varios trabajos a la vez?
Sí. Con la selección de eventos y allowMultiMove activados, los trabajos seleccionados se mueven juntos al arrastrar uno de ellos, y el cambio llega por los handlers habituales para que tu backend lo acepte o lo rechace.
Prueba la demo de Fieldwork
Fieldwork, una empresa de servicios ficticia, asigna a un equipo un trabajo pendiente de una lista y comprueba la disponibilidad en el tablero. No pretende optimizar rutas.
Ejemplos que funcionan