Aptli

Tareas

Las tareas definen trabajo planificado con requisitos específicos de recursos y ubicaciones geográficas. Las tareas usan el flujo de trabajo version/commit para planificación colaborativa offline y capacidad de rollback.

Estructura de Tarea

Página de tareas mostrando trabajo planificado con seguimiento de progreso y requisitos multi-recurso

Campos Básicos:**

  • Nombre - Nombre descriptivo de tarea
  • Descripción - Instrucciones detalladas de trabajo
  • Geometría - Punto, línea, o polígono mostrando ubicación de trabajo
  • Orden - Orden de trabajo padre agrupando tareas relacionadas
  • Recursos - Array de materiales/labor requeridos (soporte multi-recurso)

Requisitos de Recursos: Cada entrada de recurso incluye:

  • resource - Referencia a definición de recurso
  • volume - Cantidad/amount requerido
  • uom - Unidad de medida
  • assignedTo - Persona responsable de recoger esta línea de recurso específica (opcional)

Ejemplo:

Tarea: "Instalar caja de conexión de red en Edificio 42"
Geometría: Punto (lat: 40.7128, lng: -74.0060)
Recursos: [
  { resource: "Caja de Conexión", volume: 1, uom: "unidades" },
  { resource: "Cable Cat6", volume: 15, uom: "metros" },
  { resource: "Tornillos de Montaje", volume: 8, uom: "unidades" },
  { resource: "Electricista", volume: 2, uom: "horas" }
]

Tareas Multi-Recurso

Sistema anterior: Un recurso por tarea

  • Problema: Trabajo complejo crea marcadores de mapa excesivos
  • Ejemplo: 100 instalaciones × 4 recursos = 400 puntos de mapa

Sistema actual: Múltiples recursos por tarea

  • Solución: Un marcador de mapa único representa trabajo completo
  • Mismo ejemplo: 100 puntos de mapa (uno por instalación)
  • Mapa más limpio, planificación espacial más fácil

Beneficios:

  • Clutter de mapa reducido
  • Materiales relacionados agrupados (puerta + tornillos + adhesivo = una tarea)
  • Progreso rastreado a través de todos los recursos

Asignación por Recurso

Cada línea de recurso en una tarea puede asignarse a una persona específica. Esto permite a los planificadores designar quién es responsable de recoger cada material o completar cada componente de labor, a nivel de línea, no únicamente a nivel de orden de trabajo.

Funcionamiento de la asignación:

  • En el detalle de la tarea, cada fila de recurso cuenta con una columna Asignado a
  • La columna aparece automáticamente cuando alguna fila de la tarea lleva una asignación; permanece oculta en tipos de registro como reportes donde la asignación no aplica
  • Asignar a alguien una línea de recurso no reserva inventario — registra quién tiene previsto recoger y entregar ese artículo
  • El estado real de recogida (quién recogió, cuánto, cuándo) se registra en el libro de transacciones, no en la tarea en sí

¿Por qué hacer el seguimiento a nivel de recurso?

Las órdenes de trabajo agrupan muchas tareas y las asignan a personas, pero una sola orden puede cubrir decenas de líneas de recurso distribuidas entre múltiples tareas. La asignación por recurso llena ese vacío: el planificador puede indicar "Alicia recoge los 50 m de conducto para esta tarea, Roberto se encarga de las cajas de empalme." Cada persona recibe una vista delimitada exactamente a lo que debe recoger, sin ambigüedad sobre quién es responsable de qué artículo.

Acción Enviar Asignaciones:

Una vez establecidas las asignaciones de recursos, la acción Enviar Asignaciones en la página de tareas despacha notificaciones a todos los asignados. Cada persona recibe un único mensaje consolidado con sus órdenes de trabajo (nombre, fecha límite, enlace) y un código QR por cada línea de recurso asignada. El código QR es la autorización de recogida: el trabajador lo escanea en el almacén para retirar su artículo específico. La recogida queda registrada como transacción automáticamente al escanear.

La acción Enviar Asignaciones está disponible tanto como acción de fila sobre tareas individuales como en forma de operación masiva cuando se seleccionan varias tareas en la tabla.

Las Tareas Son Versionadas

A diferencia de asignaciones/reportes, las tareas usan flujo de trabajo version/commit:

Por qué Versionadas:

  • Admins diseñan áreas de trabajo offline (túneles de metro, sitios remotos)
  • Detección de conflicto espacial necesaria (geografía superpuesta)
  • Operaciones batch comunes (rediseñar campaña completa)
  • Rollback valioso (deshacer cambio de planificación completo)

Flujo de Trabajo:

  1. Crear versión (modo borrador)
  2. Agregar/editar tareas en borrador
  3. Validación espacial (verificar superposiciones)
  4. Commit versión → tareas se vuelven "oficiales"
  5. Trabajadores ven tareas committed en asignaciones

Colaboración Offline: Múltiples admins pueden crear versiones separadas:

  • Admin A: Planificar tareas de región norte
  • Admin B: Planificar tareas de región sur
  • Ambos trabajan offline, commitean después
  • Resolución de conflicto si geografía superpuesta

Tipos de Geometría de Tarea

Tareas de Punto

Trabajo de ubicación única (instalación de equipo, inspección).

Ejemplo: Instalar caja de conexión

Geometría: { type: "Point", coordinates: [lng, lat] }

Tareas de Línea

Trabajo lineal (corridas de cable, instalación de tubería).

Ejemplo: Correr 500m de cable de fibra óptica

Geometría: { type: "LineString", coordinates: [[lng1,lat1], [lng2,lat2], ...] }

Tareas de Polígono

Trabajo basado en área (zonas de cobertura, áreas de servicio).

Ejemplo: Alcance puerta a puerta en vecindario

Geometría: { type: "Polygon", coordinates: [[[lng1,lat1], ...]] }

Filtrado por Proximidad

Encontrar tareas cerca de ubicaciones específicas:

Caso de Uso: Trabajador en almacén quiere tareas cercanas

  1. Abrir página Tareas
  2. Hacer clic en botón "Filtrar Cercano"
  3. Arrastrar marcador de mapa a ubicación de almacén
  4. Establecer distancia (ej. 5 km)
  5. Tabla muestra solo tareas dentro del radio

Acción de Fila: Hacer clic "Filtrar Cercano" en fila de tarea → auto-establece proximidad a la ubicación de esa tarea

Uso de Tarea en Asignaciones

Las tareas aparecen en asignaciones como opciones de trabajo disponibles:

Asignación Flexible:

  • Asignación podría tener 10 tareas disponibles
  • Objetivos de recursos requieren completar 1-2 de esas tareas
  • Trabajador elige qué tareas completar (flexibilidad)
  • Sobre-asignación por 10x común (más opciones que objetivos)

Ejemplo:

Asignación a John:
  Objetivos de Recursos: 50m cable, 20 cajas de conexión
  Tareas Disponibles: [Tarea1, Tarea2, Tarea3, ... Tarea30]
  
John completa:
  Tarea 5: 30m cable, 12 cajas de conexión
  Tarea 12: 20m cable, 8 cajas de conexión
  Total: Cumplió objetivo cable, cumplió objetivo cajas de conexión

Trabajador tuvo 30 opciones de tarea para cumplir objetivos - alta flexibilidad.

Seguimiento de Progreso de Tarea

Cálculo: Progreso = Promedio de completación a través de todos los recursos

Ejemplo:

Tarea con 3 recursos:
  - Cable Cat6: 10m requerido, 5m completado = 50%
  - Tornillos: 8 requerido, 8 completado = 100%
  - Labor: 2 horas requerido, 0 horas reportado = 0%
  
Progreso general = (50% + 100% + 0%) / 3 = 50%

Indicadores Visuales:

  • Barra de progreso: Verde ≥100%, Amarillo ≥50%, Rojo <50%
  • Indicador de geometría: Marca verde si punto/línea/polígono válido
  • Usado en: Muestra qué asignaciones/reportes referencian esta tarea

Creando Tareas

Acceso Requerido: derecho admin tasksCreate

Flujo de Trabajo:

  1. Navegar a Cumplimiento → Tareas
  2. Crear nueva versión (o editar borrador existente)
  3. Hacer clic "Agregar Tarea" en versión
  4. Llenar info básica (nombre, descripción)
  5. Seleccionar orden (agrupamiento padre)
  6. Hacer clic en mapa para establecer geometría
  7. Agregar recursos (puede agregar múltiples)
  8. Guardar tarea en borrador
  9. Commit versión cuando planificación completa

Mejores Prácticas:

  • Agrupar materiales relacionados en tarea única (reduce clutter de mapa)
  • Usar nomenclatura consistente (ej. "Instalar - Caja de Conexión - Edificio 42")
  • Establecer volúmenes de recursos realistas (informa planificación de inventario)
  • Incluir recursos de labor (ayuda cálculos de personal)

Generación Bulk de Tareas

Crear muchas tareas similares eficientemente:

Escenario: Instalar 100 cajas de conexión en diferentes edificios

Método 1: Importar desde GeoJSON

  1. Crear GeoJSON con 100 puntos
  2. Cada feature tiene propiedades: nombre, descripción, recursos
  3. Importar → crea 100 tareas en una versión

Método 2: Generar desde Selección de Mapa

  1. Seleccionar 100 features de edificio existentes en mapa
  2. Hacer clic "Generar Tareas"
  3. Elegir template de tarea (requisitos de recursos)
  4. Crea tarea en cada ubicación de edificio

Método 3: Copiar Tarea Existente

  1. Seleccionar tarea con configuración correcta de recursos
  2. Hacer clic "Duplicar Tarea"
  3. Editar geometría a nueva ubicación
  4. Repetir para instalaciones similares

Impresión en Lote de Tareas

Un proyecto puede contener decenas o cientos de tareas. En lugar de imprimir cada una desde su página de detalle, usa la acción Imprimir todas las tareas a nivel de proyecto:

  1. Abre la página de detalle del proyecto padre (/fulfillment/projects/:id)
  2. Haz clic en Imprimir todas las tareas en el encabezado
  3. La vista de impresión en lote se abre en /fulfillment/tasks/batch/[ids] — una lista de IDs de tareas separada por comas en la URL
  4. La pantalla muestra 10 tareas por página (paginado con CSS — todos los registros están en el DOM, por lo que al imprimir se emite todo)
  5. Imprime la página — cada tarea está separada por un salto de página forzado, por lo que obtienes una tarea por página impresa

Notas:

  • Límite de seguridad: la vista en lote está limitada a 200 tareas por ejecución de impresión. Si el proyecto supera este número, un aviso te lo indica y las tareas más allá de 200 se truncan — divide la impresión en lotes más pequeños si es necesario.
  • No se requiere trabajo nuevo en el servidor — la vista en lote lee el endpoint existente /api/tasks/get?_id=csv y renderiza cada tarea usando los mismos componentes RecordDetail* que la página de tarea individual, por lo que el contenido impreso coincide con lo que obtendrías al imprimir las tareas una a una.

Validación de Tarea

Antes de commit de versión, sistema valida:

Conflictos Espaciales:

  • Polígonos superpuestos (dos tareas cubriendo misma área)
  • Tareas de punto demasiado cerca (umbral configurable)
  • Tareas de línea cruzando zonas restringidas

Disponibilidad de Recursos:

  • Advertencia si recursos requeridos no en inventario
  • No bloquea commit (tareas pueden ser futuras)
  • Ayuda planificación de procurement

Validez de Geometría:

  • Puntos deben tener coordenadas válidas
  • Líneas deben tener al menos 2 puntos
  • Polígonos deben cerrar (primer punto = último punto)

Ciclo de Vida de Asignación de Tarea

Flujo Típico:

  1. Planificación - Admin crea tareas en versión borrador
  2. Commit - Versión committed, tareas se vuelven oficiales
  3. Asignación - Tareas agregadas a asignaciones de trabajador (array availableTasks)
  4. Ejecución - Trabajador completa algunas de las tareas disponibles
  5. Reporte - Trabajador referencia taskRef en reporte workCompleted
  6. Progreso - Progreso de tarea actualizado basado en trabajo completado
  7. Completación - Cuando todos los recursos en 100%, tarea marcada completa

Reuso de Tarea: Las tareas pueden aparecer en múltiples asignaciones:

  • Misma tarea asignada a múltiples trabajadores (trabajo dividido)
  • Tarea parcialmente completada por un trabajador, terminada por otro
  • Progreso agregado a través de todos los reportes

Viendo Detalles de Tarea

Página de Detalle de Tarea Muestra:

  • Información básica y geometría
  • Lista de requisitos de recursos
  • Barra de progreso y porcentaje
  • Usado en: Asignaciones y reportes referenciando esta tarea
  • Historial de versiones (qué versiones modificaron esta tarea)
  • Relación espacial con tareas cercanas

Vista de Mapa:

  • Color-coded por progreso (rojo = no iniciado, amarillo = parcial, verde = completo)
  • Indicadores de tipo de geometría (ícono para punto, estilo de línea, relleno de polígono)
  • Clickable para popup de detalle rápido
  • Filtrable por orden, progreso, proximidad