Aptli

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:

  1. Crear asignación con objetivos de recursos
  2. 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 pickupCodeExpires establecido

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
  1. Trabajador abre escáner (app móvil o cámara)
  2. Escanea código QR de asignación
  3. Sistema valida:
    • Firma JWT y expiración
    • Escáner es destinatario autorizado O tiene permiso canFacilitatePickups
    • Disponibilidad de stock en sitio fuente
  4. Crea transacción de transferencia automáticamente
  5. 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:

  1. Navegar a Cumplimiento → Asignaciones
  2. Hacer clic en "Agregar Asignación"
  3. Llenar info básica (nombre, descripción)
  4. Arrastrar usuarios al campo "Asignado A" (soporta drag-and-drop)
  5. Establecer timeline (fecha de inicio, fecha de vencimiento)
  6. Agregar objetivos de recursos (qué trabajador debería lograr)
  7. Arrastrar tareas al campo "Tareas Disponibles" (de página Tareas)
  8. Opcionalmente establecer stock planificado (pronosticar demanda)
  9. Generar código de recogida si inventario protegido necesario
  10. 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:

  1. Abrir vista de detalle de asignación
  2. Hacer clic en botón "Crear Reporte" (en slot de acciones)
  3. 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
  4. Trabajador ajusta reales (qué realmente sucedió)
  5. Enviar reporte
  6. Transacciones de consumo creadas automáticamente
  7. 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 pickupRemaining regularmente
  • 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