Asignaciones
Las asignaciones asignan trabajo a usuarios, definen objetivos de recursos, y gestionan autorización de inventario a través de códigos QR de recogida. Las asignaciones operan en tiempo real (no versionadas) para confirmación inmediata de trabajador.
Estructura de Asignación
Página de asignaciones mostrando asignaciones de trabajo activas con estado y códigos QR
Campos Principales:**
- Nombre - Nombre descriptivo de asignación
- Descripción - Instrucciones de trabajo o contexto
- Asignado A - Array de usuarios (soporta asignaciones de equipo)
- Estado - pending, in-progress, completed, cancelled
- Creado Por - Usuario que creó la asignación
- Timeline - Fecha de inicio, fecha de vencimiento, horas estimadas
Definición de Trabajo:
- Tareas Disponibles - Array de IDs de tarea que trabajador puede elegir (sobre-asignación 10x común)
- Objetivos de Recursos - Metas a lograr (no reservas duras)
Gestión de Inventario:
- Stock Planificado - Demanda esperada de inventario (planificación suave, sin bloqueos)
- Código de Recogida - JWT para transferencia de inventario autorizada
- Código de Recogida Expira - Cuando expiración autorizada
- Recogida Restante - Qué queda por recoger (después de recogidas parciales)
Operación en Tiempo Real
Las asignaciones bypass flujo de trabajo version/commit:
Por qué Tiempo Real:
- Trabajadores necesitan respuesta inmediata: "¿Tengo este trabajo?"
- Cálculo de pago requiere datos de asignación comprometidos
- Sin valor en borrador offline (asignaciones son ejecución, no planificación)
- Visibilidad de stock debe ser actual para validación de recogida QR
API Directo:
- Crear/actualizar vía endpoint
/api/workorders/upsert - Cambios visibles inmediatamente a trabajadores asignados
- Sin esperar commits de versión admin
- Habilita reasignación de trabajo dinámica
Objetivos de Recursos (No Reservas)
Array resourceTargets define metas de trabajo, NO bloqueos de inventario:
Ejemplo:
Asignación a John:
Objetivos de Recursos: [
{ resource: "Cable Cat6", volume: 50, uom: "metros" },
{ resource: "Cajas de Conexión", volume: 10, uom: "unidades" }
]
Puntos Clave:
- NO reserva 50m cable del inventario
- Otros trabajadores aún pueden recoger mismos materiales
- Inventario asignado en tiempo de escaneo QR (primero en llegar, primero servido)
- Permite flexibilidad cuando prioridades cambian a mitad de día
Por qué No Reservas Duras:
- Prioridades cambian rápidamente en operaciones de campo
- Trabajador podría llamar enfermo (stock reservado se vuelve no disponible)
- Múltiples trabajadores podrían compartir mismo pool de inventario
- Almacén no puede predecir timing exacto de recogida
Stock Planificado (Opcional): Pronosticar demanda sin bloqueos:
Stock Planificado: [
{ stockItemId: warehouse_cable_id, resource: "Cable Cat6", volume: 50, uom: "metros" }
]
Ayuda a personal de almacén:
- Ver demanda total esperada a través de asignaciones
- Prepara materiales para recogida (apartar sin bloquear)
- Si stock insuficiente, advierte antes de que trabajador llegue
Tareas Disponibles (Flexibilidad 10x)
Array availableTasks proporciona elección de trabajador:
Ejemplo:
Asignación:
Objetivos de Recursos: 50m cable
Tareas Disponibles: [Tarea1, Tarea2, Tarea3, ... Tarea30]
Cada tarea requiere 2-10m cable
Trabajador elige qué tareas completar para cumplir meta de 50m
Beneficios de Sobre-Asignación:
- Trabajador elige ruta óptima (tareas más cercanas primero)
- Trabajar alrededor de obstáculos (edificio bloqueado, retraso por clima)
- Adaptar a disponibilidad de inventario (algunas tareas necesitan materiales no en stock)
- Autonomía aumentada (juicio de trabajador valorado)
Ratio Típico:
- Sobre-asignación 10x común (10 unidades de trabajo, 100 unidades de opciones)
- Asegura que trabajador nunca se quede sin tareas
- Tareas incompletas pasan a siguiente asignación
Códigos QR de Recogida
Detalle de asignación mostrando asignación de recursos, código QR, y seguimiento en tiempo real
Las asignaciones pueden generar códigos QR basados en JWT para autorización de inventario:
Generación:
- Crear asignación con objetivos de recursos
- Sistema genera
pickupCode(JWT) conteniendo:- IDs de usuario autorizados (de array assignedTo)
- Objetivos de recursos (qué puede ser recogido)
- Timestamp de expiración
- IDs de artículo de stock fuente (opcional - stock específico)
Visualización QR:
- Solo mostrado a destinatarios autorizados (usuarios assignedTo)
- Backend enforces: usuarios no autorizados ven
pickupCode: null - Imagen QR 200×200px en vista de detalle de asignación
- Muestra fecha de expiración si
pickupCodeExpiresestablecido
Flujo de Escaneo:
Flujo de Recogida QR:
Asignación Creada → QR Generado (JWT) → Trabajador Escanea → Validación → Transacción de Transferencia
↓ ↓ ↓ ↓ ↓
Objetivos de Recursos Código de Recogida Cámara/Escáner Verificación Auth Stock Actualizado
Expiración Disponibilidad GPS Registrado
Firma
- Trabajador abre escáner (app móvil o cámara)
- Escanea código QR de asignación
- Sistema valida:
- Firma JWT y expiración
- Escáner es destinatario autorizado O tiene permiso
canFacilitatePickups - Disponibilidad de stock en sitio fuente
- Crea transacción de transferencia automáticamente
- Sitio personal de trabajador recibe inventario
Recogidas Parciales:
Asignación solicita: 100 unidades
Solo 60 disponibles → trabajador toma 60
pickupRemaining actualizado: 40 unidades
Mismo QR reutilizable cuando reabastecido (JWT aún válido)
Recogidas Asistidas por Personal:
Personal de almacén con permiso canFacilitatePickups:
- Puede escanear QR en nombre de trabajador autorizado
- Transacción registra: scanMethod = "staff", scannerUserId = staff_id
- Habilita modelo de almacén desatendido (trabajador llega, personal facilita transferencia)
Estado de Asignación
Ciclo de Vida de Asignación:
pending → in-progress → completed
↓ ↓ ↓
Creada Primer Reporte Todas las Metas Cumplidas
↓ Enviado o Actualización Manual
└──────→ cancelled (trabajo redirigido/postpuesto)
pending - Creada, no iniciada
- Estado inicial para asignaciones nuevas
- Trabajador no ha comenzado trabajo aún
in-progress - Trabajo en marcha
- Al menos un reporte enviado
- O trabajador actualizó estado manualmente
completed - Todo trabajo terminado
- Todas las metas de recursos cumplidas (o excedidas)
- Trabajador marcado como completo
cancelled - Asignación ya no necesaria
- Trabajo redirigido a alguien más
- Timeline cambiado, trabajo postpuesto
- Aún visible en historial (opción soft delete)
Cálculo de Progreso
Progreso de asignación basado en objetivos de recursos, no tareas disponibles:
Fórmula:
Para cada objetivo de recurso:
Sumar todo trabajo completado de reportes
Dividir por volumen objetivo
Cap en 100% por recurso
General = Promedio a través de todos los objetivos de recursos
Ejemplo:
Objetivos de Recursos:
- 50m cable
- 10 cajas de conexión
Reportes enviados:
- Reporte A: 30m cable, 6 cajas de conexión
- Reporte B: 25m cable, 5 cajas de conexión
Progreso:
Cable: (30 + 25) / 50 = 110% → capped en 100%
Cajas: (6 + 5) / 10 = 110% → capped en 100%
General: (100% + 100%) / 2 = 100%
Indicadores Visuales:
- Barra de progreso: Verde ≥100%, Amarillo ≥50%, Rojo <50%
- Usado en: Reportes y validaciones referenciando esta asignación
Creando Asignaciones
Acceso Requerido: derecho admin assignmentsCreate
Flujo de Trabajo:
- Navegar a Cumplimiento → Asignaciones
- Hacer clic en "Agregar Asignación"
- Llenar info básica (nombre, descripción)
- Arrastrar usuarios al campo "Asignado A" (soporta drag-and-drop)
- Establecer timeline (fecha de inicio, fecha de vencimiento)
- Agregar objetivos de recursos (qué trabajador debería lograr)
- Arrastrar tareas al campo "Tareas Disponibles" (de página Tareas)
- Opcionalmente establecer stock planificado (pronosticar demanda)
- Generar código de recogida si inventario protegido necesario
- Guardar (inmediatamente visible a trabajadores asignados)
Soporte Drag-and-Drop:
- Arrastrar usuarios de página Usuarios → campo Asignado A
- Arrastrar tareas de página Tareas → campo Tareas Disponibles
- Funciona a través de tabs del navegador (setup multi-monitor)
Filtrando Asignaciones
Filtros Pre-Construidos:
- Creado por mí - Asignaciones que creaste
- Asignado a mí - Tus asignaciones de trabajo
Filtros Personalizados:
- Estado (pending, in-progress, completed, cancelled)
- Rango de fecha (fecha de inicio, fecha de vencimiento)
- Asignado a usuario específico
- Contiene tarea específica
Vista de Detalle de Asignación
Información Mostrada:
- Detalles básicos (nombre, descripción, estado)
- Usuarios asignados (objetos arrastrables)
- Lista de objetivos de recursos
- Lista de tareas disponibles
- Barra de progreso y porcentaje
- Código QR (si autorizado y pickupCode existe)
- Recogida restante (después de recogidas parciales)
- Reportes enviados para esta asignación
- Historial de transacciones (recogidas realizadas)
Acciones Disponibles:
- Actualizar estado
- Editar timeline
- Agregar/remover tareas
- Regenerar código de recogida (si expirado)
- Crear nuevo reporte (acción rápida desde asignación)
Creando Reportes desde Asignaciones
Flujo de trabajo rápido para reportar trabajo:
- Abrir vista de detalle de asignación
- Hacer clic en botón "Crear Reporte" (en slot de acciones)
- Formulario de reporte pre-llenado aparece:
- Asignado a: Mismo que asignación
- Tareas disponibles: Auto-poblado desde asignación
- Consumo sugerido: Basado en objetivos de recursos
- Trabajador ajusta reales (qué realmente sucedió)
- Enviar reporte
- Transacciones de consumo creadas automáticamente
- Progreso de asignación actualizado
Notificaciones
Notificaciones batch previenen spam:
Batching Inteligente:
- 10+ cambios de asignación en 1 hora → notificación de resumen única
- Notificación individual para asignaciones urgentes/alta prioridad
Horario de Digest:
- Digest horario (configurable por usuario)
- Resumen fin de día
- Conteo de badge en tiempo real en app
Contenido de Notificación:
- Nuevas asignaciones creadas para ti
- Cambios de estado en tus asignaciones
- Fechas de vencimiento aproximándose
- Códigos de recogida expirando pronto
Mejores Prácticas
Sobre-Asignar Tareas:
- Proporcionar 10x más tareas que requeridas para cumplir metas
- Autonomía de trabajador mejora eficiencia
- Reduce downtime "me quedé sin trabajo"
Establecer Timelines Realistas:
- Considerar tiempo de viaje entre tareas
- Contar retrasos de recogida de materiales
- Pad para clima, tráfico, sitios bloqueados
Usar Códigos de Recogida para Inventario Protegido:
- Equipo de alto valor
- Materiales controlados requiriendo responsabilidad
- Artículos con requisitos de seguimiento regulatorio
Monitorear Recogidas Parciales:
- Verificar
pickupRemainingregularmente - Reabastecer para que trabajadores puedan completar recogidas
- Comunicar retrasos a trabajadores asignados
Revisar Asignaciones Completadas:
- Comparar objetivos de recursos con consumo real (de reportes)
- Identificar errores de estimación (demasiado/poco asignado)
- Mejorar planificación de asignaciones futuras