[{"data":1,"prerenderedAt":957},["ShallowReactive",2],{"guide:es:work-fulfillment/workorders":3},{"id":4,"title":5,"body":6,"description":949,"extension":950,"meta":951,"navigation":952,"path":953,"seo":954,"stem":955,"__hash__":956},"guide_es/es/user/work-fulfillment/workorders.md","Asignaciones",{"type":7,"value":8,"toc":933},"minimark",[9,13,17,22,33,40,80,85,99,104,130,134,137,142,156,161,179,183,190,195,205,210,224,229,243,249,255,258,269,273,279,283,289,294,308,313,324,328,337,340,345,372,377,398,403,409,440,445,451,460,471,475,481,487,495,501,509,515,523,529,540,544,547,552,558,562,568,573,581,585,594,599,631,636,647,651,656,670,675,689,693,698,727,732,749,753,756,790,794,797,802,810,815,826,831,845,849,854,865,870,881,886,897,902,917,922],[10,11,5],"h1",{"id":12},"asignaciones",[14,15,16],"p",{},"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.",[18,19,21],"h2",{"id":20},"estructura-de-asignación","Estructura de Asignación",[14,23,24,29],{},[25,26],"img",{"alt":27,"src":28},"Lista de Asignaciones","/guide/work-fulfillment/workorders-list.png",[30,31,32],"em",{},"Página de asignaciones mostrando asignaciones de trabajo activas con estado y códigos QR",[14,34,35,39],{},[36,37,38],"strong",{},"Campos Principales:","**",[41,42,43,50,56,62,68,74],"ul",{},[44,45,46,49],"li",{},[36,47,48],{},"Nombre"," - Nombre descriptivo de asignación",[44,51,52,55],{},[36,53,54],{},"Descripción"," - Instrucciones de trabajo o contexto",[44,57,58,61],{},[36,59,60],{},"Asignado A"," - Array de usuarios (soporta asignaciones de equipo)",[44,63,64,67],{},[36,65,66],{},"Estado"," - pending, in-progress, completed, cancelled",[44,69,70,73],{},[36,71,72],{},"Creado Por"," - Usuario que creó la asignación",[44,75,76,79],{},[36,77,78],{},"Timeline"," - Fecha de inicio, fecha de vencimiento, horas estimadas",[14,81,82],{},[36,83,84],{},"Definición de Trabajo:",[41,86,87,93],{},[44,88,89,92],{},[36,90,91],{},"Tareas Disponibles"," - Array de IDs de tarea que trabajador puede elegir (sobre-asignación 10x común)",[44,94,95,98],{},[36,96,97],{},"Objetivos de Recursos"," - Metas a lograr (no reservas duras)",[14,100,101],{},[36,102,103],{},"Gestión de Inventario:",[41,105,106,112,118,124],{},[44,107,108,111],{},[36,109,110],{},"Stock Planificado"," - Demanda esperada de inventario (planificación suave, sin bloqueos)",[44,113,114,117],{},[36,115,116],{},"Código de Recogida"," - JWT para transferencia de inventario autorizada",[44,119,120,123],{},[36,121,122],{},"Código de Recogida Expira"," - Cuando expiración autorizada",[44,125,126,129],{},[36,127,128],{},"Recogida Restante"," - Qué queda por recoger (después de recogidas parciales)",[18,131,133],{"id":132},"operación-en-tiempo-real","Operación en Tiempo Real",[14,135,136],{},"Las asignaciones bypass flujo de trabajo version/commit:",[14,138,139],{},[36,140,141],{},"Por qué Tiempo Real:",[41,143,144,147,150,153],{},[44,145,146],{},"Trabajadores necesitan respuesta inmediata: \"¿Tengo este trabajo?\"",[44,148,149],{},"Cálculo de pago requiere datos de asignación comprometidos",[44,151,152],{},"Sin valor en borrador offline (asignaciones son ejecución, no planificación)",[44,154,155],{},"Visibilidad de stock debe ser actual para validación de recogida QR",[14,157,158],{},[36,159,160],{},"API Directo:",[41,162,163,170,173,176],{},[44,164,165,166],{},"Crear/actualizar vía endpoint ",[167,168,169],"code",{},"/api/workorders/upsert",[44,171,172],{},"Cambios visibles inmediatamente a trabajadores asignados",[44,174,175],{},"Sin esperar commits de versión admin",[44,177,178],{},"Habilita reasignación de trabajo dinámica",[18,180,182],{"id":181},"objetivos-de-recursos-no-reservas","Objetivos de Recursos (No Reservas)",[14,184,185,186,189],{},"Array ",[167,187,188],{},"resourceTargets"," define metas de trabajo, NO bloqueos de inventario:",[14,191,192],{},[36,193,194],{},"Ejemplo:",[196,197,202],"pre",{"className":198,"code":200,"language":201},[199],"language-text","Asignación a John:\n  Objetivos de Recursos: [\n    { resource: \"Cable Cat6\", volume: 50, uom: \"metros\" },\n    { resource: \"Cajas de Conexión\", volume: 10, uom: \"unidades\" }\n  ]\n","text",[167,203,200],{"__ignoreMap":204},"",[14,206,207],{},[36,208,209],{},"Puntos Clave:",[41,211,212,215,218,221],{},[44,213,214],{},"NO reserva 50m cable del inventario",[44,216,217],{},"Otros trabajadores aún pueden recoger mismos materiales",[44,219,220],{},"Inventario asignado en tiempo de escaneo QR (primero en llegar, primero servido)",[44,222,223],{},"Permite flexibilidad cuando prioridades cambian a mitad de día",[14,225,226],{},[36,227,228],{},"Por qué No Reservas Duras:",[41,230,231,234,237,240],{},[44,232,233],{},"Prioridades cambian rápidamente en operaciones de campo",[44,235,236],{},"Trabajador podría llamar enfermo (stock reservado se vuelve no disponible)",[44,238,239],{},"Múltiples trabajadores podrían compartir mismo pool de inventario",[44,241,242],{},"Almacén no puede predecir timing exacto de recogida",[14,244,245,248],{},[36,246,247],{},"Stock Planificado (Opcional):","\nPronosticar demanda sin bloqueos:",[196,250,253],{"className":251,"code":252,"language":201},[199],"Stock Planificado: [\n  { stockItemId: warehouse_cable_id, resource: \"Cable Cat6\", volume: 50, uom: \"metros\" }\n]\n",[167,254,252],{"__ignoreMap":204},[14,256,257],{},"Ayuda a personal de almacén:",[41,259,260,263,266],{},[44,261,262],{},"Ver demanda total esperada a través de asignaciones",[44,264,265],{},"Prepara materiales para recogida (apartar sin bloquear)",[44,267,268],{},"Si stock insuficiente, advierte antes de que trabajador llegue",[18,270,272],{"id":271},"tareas-disponibles-flexibilidad-10x","Tareas Disponibles (Flexibilidad 10x)",[14,274,185,275,278],{},[167,276,277],{},"availableTasks"," proporciona elección de trabajador:",[14,280,281],{},[36,282,194],{},[196,284,287],{"className":285,"code":286,"language":201},[199],"Asignación:\n  Objetivos de Recursos: 50m cable\n  Tareas Disponibles: [Tarea1, Tarea2, Tarea3, ... Tarea30]\n  \nCada tarea requiere 2-10m cable\nTrabajador elige qué tareas completar para cumplir meta de 50m\n",[167,288,286],{"__ignoreMap":204},[14,290,291],{},[36,292,293],{},"Beneficios de Sobre-Asignación:",[41,295,296,299,302,305],{},[44,297,298],{},"Trabajador elige ruta óptima (tareas más cercanas primero)",[44,300,301],{},"Trabajar alrededor de obstáculos (edificio bloqueado, retraso por clima)",[44,303,304],{},"Adaptar a disponibilidad de inventario (algunas tareas necesitan materiales no en stock)",[44,306,307],{},"Autonomía aumentada (juicio de trabajador valorado)",[14,309,310],{},[36,311,312],{},"Ratio Típico:",[41,314,315,318,321],{},[44,316,317],{},"Sobre-asignación 10x común (10 unidades de trabajo, 100 unidades de opciones)",[44,319,320],{},"Asegura que trabajador nunca se quede sin tareas",[44,322,323],{},"Tareas incompletas pasan a siguiente asignación",[18,325,327],{"id":326},"códigos-qr-de-recogida","Códigos QR de Recogida",[14,329,330,334],{},[25,331],{"alt":332,"src":333},"Detalle de Asignación","/guide/work-fulfillment/assignment-detail.png",[30,335,336],{},"Detalle de asignación mostrando asignación de recursos, código QR, y seguimiento en tiempo real",[14,338,339],{},"Las asignaciones pueden generar códigos QR basados en JWT para autorización de inventario:",[14,341,342],{},[36,343,344],{},"Generación:",[346,347,348,351],"ol",{},[44,349,350],{},"Crear asignación con objetivos de recursos",[44,352,353,354,357,358],{},"Sistema genera ",[167,355,356],{},"pickupCode"," (JWT) conteniendo:\n",[41,359,360,363,366,369],{},[44,361,362],{},"IDs de usuario autorizados (de array assignedTo)",[44,364,365],{},"Objetivos de recursos (qué puede ser recogido)",[44,367,368],{},"Timestamp de expiración",[44,370,371],{},"IDs de artículo de stock fuente (opcional - stock específico)",[14,373,374],{},[36,375,376],{},"Visualización QR:",[41,378,379,382,388,391],{},[44,380,381],{},"Solo mostrado a destinatarios autorizados (usuarios assignedTo)",[44,383,384,385],{},"Backend enforces: usuarios no autorizados ven ",[167,386,387],{},"pickupCode: null",[44,389,390],{},"Imagen QR 200×200px en vista de detalle de asignación",[44,392,393,394,397],{},"Muestra fecha de expiración si ",[167,395,396],{},"pickupCodeExpires"," establecido",[14,399,400],{},[36,401,402],{},"Flujo de Escaneo:",[196,404,407],{"className":405,"code":406,"language":201},[199],"Flujo de Recogida QR:\n\nAsignación Creada → QR Generado (JWT) → Trabajador Escanea → Validación → Transacción de Transferencia\n       ↓                    ↓                   ↓              ↓              ↓\n  Objetivos de Recursos    Código de Recogida        Cámara/Escáner   Verificación Auth   Stock Actualizado\n                      Expiración                         Disponibilidad  GPS Registrado\n                                                        Firma\n",[167,408,406],{"__ignoreMap":204},[346,410,411,414,417,434,437],{},[44,412,413],{},"Trabajador abre escáner (app móvil o cámara)",[44,415,416],{},"Escanea código QR de asignación",[44,418,419,420],{},"Sistema valida:\n",[41,421,422,425,431],{},[44,423,424],{},"Firma JWT y expiración",[44,426,427,428],{},"Escáner es destinatario autorizado O tiene permiso ",[167,429,430],{},"canFacilitatePickups",[44,432,433],{},"Disponibilidad de stock en sitio fuente",[44,435,436],{},"Crea transacción de transferencia automáticamente",[44,438,439],{},"Sitio personal de trabajador recibe inventario",[14,441,442],{},[36,443,444],{},"Recogidas Parciales:",[196,446,449],{"className":447,"code":448,"language":201},[199],"Asignación solicita: 100 unidades\nSolo 60 disponibles → trabajador toma 60\npickupRemaining actualizado: 40 unidades\nMismo QR reutilizable cuando reabastecido (JWT aún válido)\n",[167,450,448],{"__ignoreMap":204},[14,452,453,456,457,459],{},[36,454,455],{},"Recogidas Asistidas por Personal:","\nPersonal de almacén con permiso ",[167,458,430],{},":",[41,461,462,465,468],{},[44,463,464],{},"Puede escanear QR en nombre de trabajador autorizado",[44,466,467],{},"Transacción registra: scanMethod = \"staff\", scannerUserId = staff_id",[44,469,470],{},"Habilita modelo de almacén desatendido (trabajador llega, personal facilita transferencia)",[18,472,474],{"id":473},"estado-de-asignación","Estado de Asignación",[196,476,479],{"className":477,"code":478,"language":201},[199],"Ciclo de Vida de Asignación:\n\npending → in-progress → completed\n   ↓           ↓            ↓\nCreada    Primer Reporte   Todas las Metas Cumplidas\n   ↓        Enviado     o Actualización Manual\n   └──────→ cancelled (trabajo redirigido/postpuesto)\n",[167,480,478],{"__ignoreMap":204},[14,482,483,486],{},[36,484,485],{},"pending"," - Creada, no iniciada",[41,488,489,492],{},[44,490,491],{},"Estado inicial para asignaciones nuevas",[44,493,494],{},"Trabajador no ha comenzado trabajo aún",[14,496,497,500],{},[36,498,499],{},"in-progress"," - Trabajo en marcha",[41,502,503,506],{},[44,504,505],{},"Al menos un reporte enviado",[44,507,508],{},"O trabajador actualizó estado manualmente",[14,510,511,514],{},[36,512,513],{},"completed"," - Todo trabajo terminado",[41,516,517,520],{},[44,518,519],{},"Todas las metas de recursos cumplidas (o excedidas)",[44,521,522],{},"Trabajador marcado como completo",[14,524,525,528],{},[36,526,527],{},"cancelled"," - Asignación ya no necesaria",[41,530,531,534,537],{},[44,532,533],{},"Trabajo redirigido a alguien más",[44,535,536],{},"Timeline cambiado, trabajo postpuesto",[44,538,539],{},"Aún visible en historial (opción soft delete)",[18,541,543],{"id":542},"cálculo-de-progreso","Cálculo de Progreso",[14,545,546],{},"Progreso de asignación basado en objetivos de recursos, no tareas disponibles:",[14,548,549],{},[36,550,551],{},"Fórmula:",[196,553,556],{"className":554,"code":555,"language":201},[199],"Para cada objetivo de recurso:\n  Sumar todo trabajo completado de reportes\n  Dividir por volumen objetivo\n  Cap en 100% por recurso\n  \nGeneral = Promedio a través de todos los objetivos de recursos\n",[167,557,555],{"__ignoreMap":204},[14,559,560],{},[36,561,194],{},[196,563,566],{"className":564,"code":565,"language":201},[199],"Objetivos de Recursos:\n  - 50m cable\n  - 10 cajas de conexión\n\nReportes enviados:\n  - Reporte A: 30m cable, 6 cajas de conexión\n  - Reporte B: 25m cable, 5 cajas de conexión\n\nProgreso:\n  Cable: (30 + 25) / 50 = 110% → capped en 100%\n  Cajas: (6 + 5) / 10 = 110% → capped en 100%\n  General: (100% + 100%) / 2 = 100%\n",[167,567,565],{"__ignoreMap":204},[14,569,570],{},[36,571,572],{},"Indicadores Visuales:",[41,574,575,578],{},[44,576,577],{},"Barra de progreso: Verde ≥100%, Amarillo ≥50%, Rojo \u003C50%",[44,579,580],{},"Usado en: Reportes y validaciones referenciando esta asignación",[18,582,584],{"id":583},"creando-asignaciones","Creando Asignaciones",[14,586,587,590,591],{},[36,588,589],{},"Acceso Requerido:"," derecho admin ",[167,592,593],{},"assignmentsCreate",[14,595,596],{},[36,597,598],{},"Flujo de Trabajo:",[346,600,601,604,607,610,613,616,619,622,625,628],{},[44,602,603],{},"Navegar a Cumplimiento → Asignaciones",[44,605,606],{},"Hacer clic en \"Agregar Asignación\"",[44,608,609],{},"Llenar info básica (nombre, descripción)",[44,611,612],{},"Arrastrar usuarios al campo \"Asignado A\" (soporta drag-and-drop)",[44,614,615],{},"Establecer timeline (fecha de inicio, fecha de vencimiento)",[44,617,618],{},"Agregar objetivos de recursos (qué trabajador debería lograr)",[44,620,621],{},"Arrastrar tareas al campo \"Tareas Disponibles\" (de página Tareas)",[44,623,624],{},"Opcionalmente establecer stock planificado (pronosticar demanda)",[44,626,627],{},"Generar código de recogida si inventario protegido necesario",[44,629,630],{},"Guardar (inmediatamente visible a trabajadores asignados)",[14,632,633],{},[36,634,635],{},"Soporte Drag-and-Drop:",[41,637,638,641,644],{},[44,639,640],{},"Arrastrar usuarios de página Usuarios → campo Asignado A",[44,642,643],{},"Arrastrar tareas de página Tareas → campo Tareas Disponibles",[44,645,646],{},"Funciona a través de tabs del navegador (setup multi-monitor)",[18,648,650],{"id":649},"filtrando-asignaciones","Filtrando Asignaciones",[14,652,653],{},[36,654,655],{},"Filtros Pre-Construidos:",[41,657,658,664],{},[44,659,660,663],{},[36,661,662],{},"Creado por mí"," - Asignaciones que creaste",[44,665,666,669],{},[36,667,668],{},"Asignado a mí"," - Tus asignaciones de trabajo",[14,671,672],{},[36,673,674],{},"Filtros Personalizados:",[41,676,677,680,683,686],{},[44,678,679],{},"Estado (pending, in-progress, completed, cancelled)",[44,681,682],{},"Rango de fecha (fecha de inicio, fecha de vencimiento)",[44,684,685],{},"Asignado a usuario específico",[44,687,688],{},"Contiene tarea específica",[18,690,692],{"id":691},"vista-de-detalle-de-asignación","Vista de Detalle de Asignación",[14,694,695],{},[36,696,697],{},"Información Mostrada:",[41,699,700,703,706,709,712,715,718,721,724],{},[44,701,702],{},"Detalles básicos (nombre, descripción, estado)",[44,704,705],{},"Usuarios asignados (objetos arrastrables)",[44,707,708],{},"Lista de objetivos de recursos",[44,710,711],{},"Lista de tareas disponibles",[44,713,714],{},"Barra de progreso y porcentaje",[44,716,717],{},"Código QR (si autorizado y pickupCode existe)",[44,719,720],{},"Recogida restante (después de recogidas parciales)",[44,722,723],{},"Reportes enviados para esta asignación",[44,725,726],{},"Historial de transacciones (recogidas realizadas)",[14,728,729],{},[36,730,731],{},"Acciones Disponibles:",[41,733,734,737,740,743,746],{},[44,735,736],{},"Actualizar estado",[44,738,739],{},"Editar timeline",[44,741,742],{},"Agregar/remover tareas",[44,744,745],{},"Regenerar código de recogida (si expirado)",[44,747,748],{},"Crear nuevo reporte (acción rápida desde asignación)",[18,750,752],{"id":751},"creando-reportes-desde-asignaciones","Creando Reportes desde Asignaciones",[14,754,755],{},"Flujo de trabajo rápido para reportar trabajo:",[346,757,758,761,764,778,781,784,787],{},[44,759,760],{},"Abrir vista de detalle de asignación",[44,762,763],{},"Hacer clic en botón \"Crear Reporte\" (en slot de acciones)",[44,765,766,767],{},"Formulario de reporte pre-llenado aparece:\n",[41,768,769,772,775],{},[44,770,771],{},"Asignado a: Mismo que asignación",[44,773,774],{},"Tareas disponibles: Auto-poblado desde asignación",[44,776,777],{},"Consumo sugerido: Basado en objetivos de recursos",[44,779,780],{},"Trabajador ajusta reales (qué realmente sucedió)",[44,782,783],{},"Enviar reporte",[44,785,786],{},"Transacciones de consumo creadas automáticamente",[44,788,789],{},"Progreso de asignación actualizado",[18,791,793],{"id":792},"notificaciones","Notificaciones",[14,795,796],{},"Notificaciones batch previenen spam:",[14,798,799],{},[36,800,801],{},"Batching Inteligente:",[41,803,804,807],{},[44,805,806],{},"10+ cambios de asignación en 1 hora → notificación de resumen única",[44,808,809],{},"Notificación individual para asignaciones urgentes/alta prioridad",[14,811,812],{},[36,813,814],{},"Horario de Digest:",[41,816,817,820,823],{},[44,818,819],{},"Digest horario (configurable por usuario)",[44,821,822],{},"Resumen fin de día",[44,824,825],{},"Conteo de badge en tiempo real en app",[14,827,828],{},[36,829,830],{},"Contenido de Notificación:",[41,832,833,836,839,842],{},[44,834,835],{},"Nuevas asignaciones creadas para ti",[44,837,838],{},"Cambios de estado en tus asignaciones",[44,840,841],{},"Fechas de vencimiento aproximándose",[44,843,844],{},"Códigos de recogida expirando pronto",[18,846,848],{"id":847},"mejores-prácticas","Mejores Prácticas",[14,850,851],{},[36,852,853],{},"Sobre-Asignar Tareas:",[41,855,856,859,862],{},[44,857,858],{},"Proporcionar 10x más tareas que requeridas para cumplir metas",[44,860,861],{},"Autonomía de trabajador mejora eficiencia",[44,863,864],{},"Reduce downtime \"me quedé sin trabajo\"",[14,866,867],{},[36,868,869],{},"Establecer Timelines Realistas:",[41,871,872,875,878],{},[44,873,874],{},"Considerar tiempo de viaje entre tareas",[44,876,877],{},"Contar retrasos de recogida de materiales",[44,879,880],{},"Pad para clima, tráfico, sitios bloqueados",[14,882,883],{},[36,884,885],{},"Usar Códigos de Recogida para Inventario Protegido:",[41,887,888,891,894],{},[44,889,890],{},"Equipo de alto valor",[44,892,893],{},"Materiales controlados requiriendo responsabilidad",[44,895,896],{},"Artículos con requisitos de seguimiento regulatorio",[14,898,899],{},[36,900,901],{},"Monitorear Recogidas Parciales:",[41,903,904,911,914],{},[44,905,906,907,910],{},"Verificar ",[167,908,909],{},"pickupRemaining"," regularmente",[44,912,913],{},"Reabastecer para que trabajadores puedan completar recogidas",[44,915,916],{},"Comunicar retrasos a trabajadores asignados",[14,918,919],{},[36,920,921],{},"Revisar Asignaciones Completadas:",[41,923,924,927,930],{},[44,925,926],{},"Comparar objetivos de recursos con consumo real (de reportes)",[44,928,929],{},"Identificar errores de estimación (demasiado/poco asignado)",[44,931,932],{},"Mejorar planificación de asignaciones futuras",{"title":204,"searchDepth":934,"depth":934,"links":935},2,[936,937,938,939,940,941,942,943,944,945,946,947,948],{"id":20,"depth":934,"text":21},{"id":132,"depth":934,"text":133},{"id":181,"depth":934,"text":182},{"id":271,"depth":934,"text":272},{"id":326,"depth":934,"text":327},{"id":473,"depth":934,"text":474},{"id":542,"depth":934,"text":543},{"id":583,"depth":934,"text":584},{"id":649,"depth":934,"text":650},{"id":691,"depth":934,"text":692},{"id":751,"depth":934,"text":752},{"id":792,"depth":934,"text":793},{"id":847,"depth":934,"text":848},"Asignar trabajo a usuarios con autorización de inventario y gestión de timeline","md",{},true,"/es/user/work-fulfillment/workorders",{"title":5,"description":949},"es/user/work-fulfillment/workorders","MAqh-8825IxGcoHp8Aqi03h__irEHm5oCidPb-EE6Cc",1780539291100]