24 de abril de 2026
Tareas
Recorrido completo por el centro de tareas de Ballista: seguimiento, tablero, calendario, detalle, asignaciones, notas, permisos y notificaciones.
Tareas es el módulo dónde Ballista convierte pendientes operativos en trabajo asignado. No es una lista decorativa: es el lugar dónde una orden, un problema de inventario, una revisión de facturación o una acción de soporte se vuelve una tarea con responsable, fecha, estado, prioridad, comentarios, asignados y notificaciones.
La ruta principal es /tasks. Desde ahí la página puede mostrar tres vistas: Centro, Tablero y Calendario. Si se abre una tarea especifica, la ruta cambia a /tasks/{id} y aparece el detalle profundo de esa tarea.
Rutas del flujo
| Ruta | Qué es | Para qué se usa |
|---|---|---|
/tasks | Entrada principal. | Abre el centro de tareas por defecto. |
/tasks?view=center | Centro de tareas. | Dar seguimiento diario: pendientes, hechos, estado, prioridad, responsable, asignados y notas. |
/tasks?view=board | Tablero de tareas. | Buscar tareas y crear tareas nuevas con formulario completo. |
/tasks?view=calendar | Calendario de tareas. | Planificar trabajo por semana, fecha y persona. |
/tasks/{id} | Detalle de tarea. | Revisar o editar una tarea completa, su orden asociada, personas y comentarios. |
/orders/{id} | Detalle del pedido. | Crear tareas asociadas a una orden o volver desde una tarea a su pedido. |
/notifications / panel de actividad | Notificaciones. | Ver avisos persistentes y abrir tareas, pedidos o lotes según metadata. |
Estructura general de /tasks
La pantalla TasksDesktop decide que mostrar:
| Situacion | Vista que se renderiza |
|---|---|
Sin taskId y sin view. | Centro, porque es la vista diaria por defecto. |
?view=center. | MyTasksPanel. |
?view=board. | TaskBoardPanel. |
?view=calendar. | DashboardAssignedCalendarPanel. |
/tasks/{id} o ?taskId={id}. | TaskDetailPanel. |
El encabezado muestra tres botones: Centro, Tablero y Calendario. Estos botones si son acciones reales: cambian el query param y por eso cambian la vista.
Para qué sirve cada vista
| Vista | Uso principal | Quién la usa normalmente |
|---|---|---|
| Centro | Seguimiento operativo de tareas existentes. | Personas que ejecutan, coordinan o actualizan pendientes. |
| Tablero | Administración y creación de tareas. | Supervisores, soporte, operaciones o quién crea trabajo nuevo. |
| Calendario | Planificacion visual por fecha/persona. | Coordinacion de equipo, despacho, producción o agenda diaria/semanal. |
| Detalle | Revision profunda de una tarea. | Cualquier usuario que necesita contexto, comentarios, orden asociada o edición completa. |
Criterio útil: usa Centro para trabajar el día a día, Tablero para crear y buscar, Calendario para planificar capacidad, y Detalle para explicar una tarea especifica de principio a fin.
Permisos visibles
Tareas respeta permisos del usuario.
| Permiso | Impacto |
|---|---|
tasks:read | Permite consultar tareas, tipos, comentarios, detalle y estadísticas. |
tasks:write | Permite crear, editar, comentar, asignar/remover usuarios, cambiar responsable y borrar tareas. |
edit_orders | En Centro, habilita la columna de responsable/asignados porque esa vista usa ese permiso para cargar usuarios asignables. |
Si una persona ve tareas pero no puede escribir comentarios, guardar cambios o asignar usuarios, normalmente falta tasks:write o el permiso que habilita esa acción en la vista.
Centro de tareas
Centro es la vista que aparece en la captura. Su objetivo es concentrar tareas activas, responsables, notas y seguimiento sin mezclarlo con el formulario de creación.
Contadores superiores
Arriba del bloque aparecen dos conteos:
| Contador | Qué significa |
|---|---|
Pendientes | Cantidad de tareas cuyo estado no es done. |
Completadas | Cantidad de tareas cuyo estado es done. |
Estos conteos vienen de /tasks/mine. Sirven para saber rápidamente si el usuario/equipo tiene trabajo abierto o cerrado.
Filtros Pendientes, Completadas y Todas
| Filtro | Qué muestra | Cuanto muestra |
|---|---|---|
Pendientes | Tareas que no están en done. | Hasta 25 filas. |
Completadas | Tareas terminadas. | Hasta 25 filas. |
Todas | Mezcla pendientes y terminadas. | Hasta 25 filas. |
Si la pantalla viene enfocada desde una notificación o un taskId, el centro cambia a Todas para que la tarea pueda aparecer aunque ya este cerrada.
Columna Tarea
Cada fila muestra:
| Elemento | Qué significa |
|---|---|
| Título de la tarea | Enlace a /tasks/{id}?view=center. |
Pedido #... | Pedido asociado a la tarea. Si aparece -, falta orden asociada o no vino en la respuesta. |
Notas | Abre el modal de comentarios de esa tarea. |
El link del título abre el detalle. El botón Notas no cambia de página: abre historial y escritura de notas en un modal.
Columna Estado
Si el usuario tiene tasks:write, el estado se puede cambiar desde un selector.
| Estado | Significado operativo |
|---|---|
todo | La tarea existe, pero aun no se está ejecutando. |
in_progress | La tarea está activa. Alguien la está trabajando. |
done | La tarea se considera terminada. |
Cambiar el selector no guarda solo. Para persistir el cambio también se usa Actualizar tarea en la columna de prioridad, porque el update manda estado y prioridad juntos.
Columna Prioridad
La prioridad se edita junto con el estado.
| Prioridad | Uso recomendado |
|---|---|
low | Seguimiento menor o no urgente. |
medium | Trabajo normal del día. |
high | Algo que bloquea entrega, producción, facturación o atencion al cliente. |
El botón Actualizar tarea se habilita cuando cambia el estado o la prioridad. Al presionarlo, el interfaz llama /tasks/update, refresca my-tasks, task-detail, notifications-feed y notification-counter, y muestra una alerta local de exito.
Columna Assignees / Responsable
Esta columna aparece cuando el usuario puede asignar.
| Elemento | Qué hace |
|---|---|
Current responsable: #id | Muestra el responsable actual por id. |
Selector Responsable | Permite escoger el nuevo propietario principal. |
Change | Llama /tasks/change-responsable. |
Remove junto a responsable | Llama /tasks/change-responsable con responsable 0, es decir, deja la tarea sin responsable valido. |
Selector User | Permite escoger un usuario asignado. |
Assign | Llama /tasks/assign-users con ese usuario. |
Remove debajo de usuario | Llama /tasks/remove-users con ese usuario. |
Responsable y assignees no son lo mismo:
| Concepto | Significado |
|---|---|
| Responsable | Responsable principal de la tarea. Es quién debería responder por el avance. |
| Usuarios asignados | Personas involucradas o colaboradoras. Pueden participar aunque no sean responsables principales. |
Notas en Centro de tareas
El botón Notas abre un modal con dos partes: historial y nueva nota.
| Bloque | Uso |
|---|---|
| Encabezado | Muestra título de la tarea y pedido asociado. |
| Historial | Lista comentarios existentes con autor y fecha. |
| Nueva nota | Campo para escribir una nueva nota. |
| Guardar | Guarda la nota si el usuario tiene tasks:write y el texto no está vacío. |
| Cerrar | Cierra el modal sin cambiar la tarea. |
Guardar una nota llama /tasks/comments/create. El servidor valida que la tarea exista y que el comentario no este vacío. Luego inserta en core.task_comments, emite en tiempo real task:comment-created y crea notificaciones para usuarios relacionados con la tarea.
Tablero de tareas
Tablero es la vista para buscar y crear tareas. Se abre con /tasks?view=board.
Tabla del tablero
El tablero muestra una DataGrid con búsqueda, paginación y columnas:
| Columna | Qué muestra |
|---|---|
| Tarea | Título de la tarea; abre /tasks/{id}?view=board. |
| Estado | Estado traducido. |
| Prioridad | Prioridad traducida. |
| Responsable | Responsable por id o -. |
| Pedido | Pedido asociado por id o -. |
| Fecha límite | Fecha limite en formato YYYY-MM-DD. |
La búsqueda filtra por id, título, descripción, estado, prioridad, responsable, orden y fecha.
Botón Create task
Create task abre un modal. Este formulario crea trabajo nuevo desde cero o asociado a una orden.
| Campo | Requisito | Para qué sirve |
|---|---|---|
Título | Obligatorio, mínimo 3 caracteres en interfaz. | Nombre corto de la tarea. |
Descripción | Obligatorio, mínimo 1 caracter en interfaz. | Explica que se debe hacer. |
Prioridad | Obligatorio, default medium. | Define urgencia operativa. |
Estado | Obligatorio, default todo. | Define estado inicial. |
Tarea type | Opcional. | Clasifica la tarea según catálogo. |
Responsable | Opcional en interfaz; servidor usa creador si no se envía. | Responsable principal. |
Pedido relacionado | En interfaz aparece como requerido; servidor también exige salesOrderId positivo. | Conecta la tarea con un pedido. |
Fecha límite | Obligatorio. | Fecha limite de seguimiento. |
Usuarios asignados | Opcional. | Usuarios colaboradores marcados en la tabla. |
Qué pasa al guardar una tarea desde Tablero
- El usuario presiona
Guardar. - El interfaz valida título, descripción y due date.
- El interfaz llama
/tasks/create. - El servidor exige
tasks:write. - El servidor exige
salesOrderIdvalido y que la orden exista. - El servidor inserta en
core.tasks. - Si no se envío responsable, usa como responsable al usuario que creo la tarea.
- El servidor emite en tiempo real
task:created. - El servidor crea notificación persistente para usuarios de la tarea si hay usuarios relacionados.
- Si se marcaron usuarios asignados, el interfaz llama
/tasks/assign-users. - El servidor inserta/activa filas en
core.task_assignments. - El servidor emite en tiempo real
task:users-assignedytask:assigned-to-me. - El servidor crea notificaciones de asignacion para usuarios relacionados.
- El interfaz muestra alerta local
task created. - El interfaz refresca queries
tasksymy-tasks.
Importante: crear la tarea y asignar usuarios son dos llamadas distintas desde el interfaz. Por eso puede existir una tarea creada aunque falle la asignacion posterior. En soporte, revisa si fallo /tasks/create o /tasks/assign-users.
Detalle de tarea
El detalle se abre desde el título de una tarea o desde una notificación. La ruta es /tasks/{id}.
Acciones superiores
| Acción | Qué hace |
|---|---|
Volver a tareas | Vuelve a /tasks?view=center o /tasks?view=board según de dónde venia. |
Abrir pedido | Abre /orders/{id} si la tarea tiene orden asociada. |
Editar task | Activa modo edición si el usuario tiene tasks:write. |
Cancelar | Sale del modo edición sin guardar cambios. |
Guardar | Guarda cambios de tarea y diferencias de usuarios asignados. |
Información visible sin editar
| Bloque | Qué muestra |
|---|---|
| Etiquetas superiores | Estado, prioridad y tipo de tarea. |
| Descripción | Descripcion completa. |
| Tarea ID | Identificador de tarea. |
| Estado | Estado actual. |
| Prioridad | Prioridad actual. |
| Fecha límite | Fecha limite. |
| Fecha de creación | Fecha/hora de creación. |
| Fecha de actualización | Fecha/hora de ultima actualizacion. |
| Pedido relacionado | Pedido asociado, estado del pedido, order for y cliente si existe. |
| Personas | Responsable, creador y usuarios asignados. |
| Comentarios | Historial de notas y campo para nueva nota. |
Modo edición
Cuando se presiona Editar task, el detalle permite cambiar:
| Campo | Regla |
|---|---|
| Título | Debe tener texto. |
| Descripción | Puede editarse, se envía trim. |
| Estado | todo, in_progress o done. |
| Prioridad | low, medium o high. |
| Tarea type | Puede asignarse o dejarse sin tipo. |
| Responsable | Puede cambiarse o quedar sin responsable. |
| Pedido de venta | Debe tener orden asociada para guardar. |
| Fecha límite | Debe tener fecha. |
| Usuarios asignados | Se agregan o remueven comparando selección actual contra asignados existentes. |
Al guardar, el interfaz llama /tasks/update y después llama /tasks/assign-users o /tasks/remove-users solo para las diferencias. Luego invalida task-detail, my-tasks y tasks.
Calendario
Calendario se abre con /tasks?view=calendar. Usa el calendario asignado del panel para planificar por tiempo y persona.
| Elemento | Uso |
|---|---|
| Semana actual | Ver carga de trabajo en un rango semanal. |
| Navegacion de semana | Moverse entre semanas. |
| Fecha especifica | Saltar a otro periodo. |
| Filtro de persona/equipo | Ver tareas asignadas por responsable o usuario. |
| Bloques de tarea | Entender que trabajo cae en cada fecha/slot. |
Esta vista no reemplaza Centro. Sirve para planificar capacidad. Si quieres cambiar responsable, prioridad, estado o notas, abre la tarea o vuelve a Centro.
Cómo se crean tareas desde Pedidos
Hay dos formas principales de que Pedidos alimente Tareas.
| Origen | Dónde ocurre | Resultado |
|---|---|---|
Crear pedido con Incluir tarea. | Wizard de creación completa de pedido. | El servidor crea la orden y una tarea vinculada dentro del mismo flujo. |
Nueva tarea desde /orders/{id}. | Detalle de un pedido. | Crea una tarea asociada a esa orden. |
Cuando una tarea viene de una orden, debe quedar con salesOrderId. Eso permite que:
| Efecto | Por qué importa |
|---|---|
La tarea muestre Pedido #id. | El usuario entiende de que pedido viene el trabajo. |
Abrir pedido funcione en detalle. | Se puede volver al contexto completo del pedido. |
| Cambios del pedido notifiquen tareas asociadas. | Si una orden cambia, los usuarios de tareas relacionadas pueden recibir aviso. |
| Reportes crucen pedidos y tareas. | Se puede evaluar seguimiento operativo por pedido. |
Cómo interactua con Pedidos
Tareas no descuenta inventario ni factura. Su papel es coordinar trabajo alrededor de otros módulos.
| Flujo | Interaccion |
|---|---|
| Pedido creado con follow-up. | La tarea queda ligada al pedido para que alguien prepare, revise o cierre una acción. |
| Pedido cambia de estado/datos. | Servicios de billing/orders llaman notifyTaskUsersForOrderUpdate; se notifican usuarios de tareas asociadas. |
| Tarea abre pedido. | Abrir pedido navega a /orders/{id}. |
| Pedido muestra tareas. | Pedido Detalle consulta tareas y filtra las que tienen salesOrderId igual al pedido actual. |
| Facturación necesita revisión. | Se puede crear tarea vinculada al pedido antes de emitir o después de un error. |
Ejemplo: ventas crea el pedido #506 y activa una tarea "Cerrar pedido". En Tareas, aparece Pedido #506. Si soporte abre la tarea, puede usar Abrir pedido para revisar líneas, inventario y facturación del pedido.
Notificaciones: dos capas distintas
En Ballista hay que distinguir dos cosas:
| Capa | Dónde vive | Qué hace |
|---|---|---|
Alerta local (pushAlert) | Interfaz, temporal. | Confirma una acción inmediata cómo "task updated" o "comment created". No es historial permanente. |
| Notificacion persistente | Servidor, core.notifications. | Queda guardada, aparece en feed/counter y puede abrir tarea, pedido o lote. |
Si una persona dice "no me llego notificación", primero hay que preguntar si habla del toast temporal o de la notificación persistente del panel.
Cuando se activan notificaciones persistentes de Tareas
El servidor crea notificaciones de sistema para usuarios relacionados con la tarea en estos casos:
| Trigger | Endpoint/servicio | Event type | A quién se notifica |
|---|---|---|---|
| Crear tarea. | /tasks/create | task_created | Responsable y usuarios asignados existentes de la tarea. |
| Actualizar tarea. | /tasks/update | task_updated | Responsable y usuarios asignados. |
| Agregar comentario. | /tasks/comments/create | task_comment_created | Responsable y usuarios asignados. |
| Asignar usuarios. | /tasks/assign-users | task_assignments_updated | Responsable y usuarios asignados después de la asignacion. |
| Remover usuarios. | /tasks/remove-users | task_assignments_updated | Responsable y usuarios asignados restantes. |
| Cambiar responsable. | /tasks/change-responsable | task_owner_changed | Nuevo responsable y usuarios asignados. |
| Cambiar un pedido asociado. | Servicios de Pedidos/Facturación | order_updated | Usuarios de tareas ligadas a ese pedido. |
La funcion clave del servidor es notifyTaskUsers. Primero busca usuarios relacionados por core.task_assignments y por owner_user_id; luego crea una notificación para cada uno.
Cómo abre una notificación el lugar correcto
El panel de notificaciones lee metadata. La navegación se decide asi:
| Metadata | Destino |
|---|---|
eventType empieza con task_ y hay taskId. | /tasks/{taskId} |
Hay taskId. | /tasks/{taskId} |
Hay salesOrderId. | /orders/{salesOrderId} |
Hay lotId o rawMaterialLotId. | /lote_producto?id={lotId} |
Cuando el usuario hace click en una notificación no leída, el interfaz primero llama /notifications/mark-read. Si eso sale bien, navega al destino. Si no hay destino resoluble, la notificación se muestra pero no funciona como link.
Requisitos antes de crear una tarea
| Dato previo | Obligatorio | Dónde revisar |
|---|---|---|
| Usuario autenticado | Si | Login y token valido. |
Permiso tasks:write | Si para crear/editar. | Roles/permisos. |
| Pedido asociado | Si para /tasks/create. | Debe existir en Pedidos. |
| Usuarios activos | Solo si vas a asignar responsable/assignees. | Administración users. |
| Tipo de tarea | Opcional. | Tarea types. |
| Fecha limite | Si. | Se captura en el formulario. |
| Título y descripción | Si. | Se captura en el formulario. |
Aunque el formulario muestra Responsable cómo opcional, el servidor usa el usuario creador como responsable si no se envía responsable. En cambio, salesOrderId si es obligatorio para crear o guardar una tarea desde el flujo actual.
Reglas de validación importantes
| Regla | Dónde se valida | Efecto |
|---|---|---|
| Título de creación debe tener al menos 3 caracteres. | Interfaz Tablero. | No habilita Guardar. |
| Descripcion debe tener texto. | Interfaz Tablero. | No habilita Guardar. |
| Fecha límite debe existir. | Interfaz Tablero/Detalle. | No habilita Guardar. |
salesOrderId debe ser positivo. | Servidor. | Rechaza create/update. |
| La orden debe existir. | Servidor. | Rechaza create/update. |
| Comentario no puede estar vacío. | Interfaz y servidor. | No guarda nota. |
| Tarea debe existir para comentar/editar/asignar. | Servidor. | Responde tarea no encontrada. |
Usuario debe tener tasks:write. | Servidor. | Rechaza acciones de escritura. |
Qué se guarda en base de datos
| Acción | Tabla/área aproximada | Qué cambia |
|---|---|---|
| Crear tarea. | core.tasks | Título, descripción, estado, prioridad, tipo, responsable, creador, due date y sales_order_id. |
| Crear tipo de tarea. | core.task_types | Nombre y color del tipo. |
| Asignar usuarios. | core.task_assignments | Relación task-user, assigned_by, activo/deleted_at según esquema. |
| Remover usuarios. | core.task_assignments | Marca inactive/deleted_at o elimina según soporte de columnas. |
| Cambiar responsable. | core.tasks.owner_user_id | Cambia propietario principal. |
| Actualizar tarea. | core.tasks | Campos editables y updated_at. |
| Agregar nota. | core.task_comments | Comentario, autor y timestamps. |
| Notificar. | core.notifications | Aviso persistente con metadata para navegar. |
Flujo recomendado para operar
- Entrar a
/tasks. - Revisar
PendientesenCentro. - Abrir
Notassi necesitas contexto rápido. - Cambiar
EstadoyPrioridadsi el trabajo avanzo. - Usar
Actualizar tareapara guardar. - Cambiar responsable si la responsabilidad principal cambio.
- Asignar usuarios si alguien más debe participar.
- Abrir el título de la tarea si necesitas detalle completo.
- Usar
Abrir pedidosi la tarea depende de un pedido. - Agregar comentario cuando haya decisión, bloqueo o avance.
- Usar
Tableropara crear una tarea nueva o buscar histórico. - Usar
Calendariopara planificar carga semanal. - Revisar notificaciones para saltar a tareas, pedidos o lotes afectados.
Ejemplos reales
Ejemplo 1: tarea de pedido pendiente
Un pedido queda pendiente porque falta confirmar entrega.
- En
/orders/{id}, el usuario creaNueva tarea. - Selecciona responsable de operaciones.
- Define due date para el día siguiente.
- La tarea aparece en
/tasks. - Operaciones cambia estado a
in_progress. - Deja una nota: "Cliente confirma entrega manana".
- Cuando termina, cambia estado a
done.
Ejemplo 2: notificación por comentario
Una persona agrega una nota a una tarea dónde hay responsable y asignados.
- El interfaz llama
/tasks/comments/create. - Servidor guarda en
core.task_comments. - Servidor emite en tiempo real
task:comment-created. - Servidor crea notificaciones persistentes para responsable/asignados.
- El feed de notificaciones se refresca cada 5 segundos.
- Al hacer click, la notificación abre
/tasks/{id}.
Ejemplo 3: cambio de orden asociada
Una orden con tareas cambia desde Pedidos/Facturación.
- Se actualiza el pedido.
- El servicio llama
notifyTaskUsersForOrderUpdate(orderId, action). - Servidor busca tareas con ese
sales_order_id. - Para cada tarea, notifica responsable/asignados.
- La metadata incluye
salesOrderIdytaskId. - El usuario puede abrir la tarea o el pedido según el tipo de metadata.
Problemas comunes
| Problema | Dónde revisar |
|---|---|
| No puedo crear tarea. | Permiso tasks:write, título, descripción, due date y orden asociada. |
Guardar no se habilita en Tablero. | Título menor a 3 caracteres, descripción vacía o due date vacío. |
| La tarea no aparece en Centro. | Revisa filtro Pendientes/Completadas/Todas y si /tasks/mine devuelve esa tarea para el usuario. |
| No aparece un usuario para asignar. | Revisa lista de admin users y permisos para cargar usuarios. |
| Cambie status pero no guardo. | Hay que presionar Actualizar tarea; cambiar selector solo prepara el valor. |
| La notificación no abre la tarea. | Revisa metadata: debe tener taskId o eventType task_*. |
| La tarea no abre pedido. | Falta salesOrderId o la orden asociada no existe. |
| Un comentario no se guarda. | Texto vacío, falta tasks:write o tarea inexistente. |
| Se creo tarea pero no asignados. | Revisa si fallo la segunda llamada /tasks/assign-users. |
Para soporte
Cuando reportes un problema de Tareas, incluye:
- ruta exacta:
/tasks,/tasks?view=center,/tasks?view=board,/tasks?view=calendaro/tasks/{id}; - id de la tarea;
- id del pedido asociado;
- usuario responsable y usuarios asignados esperados;
- estado y prioridad antes/después;
- si el problema fue en Centro, Tablero, Calendario, Detalle o Notificaciones;
- si fue alerta local o notificación persistente;
- metadata de la notificación si el problema es navegación;
- mensaje de error del servidor si aparece.
Cómo se conecta
Tareas conecta con Pedidos y ventas, porque una tarea puede nacer desde una orden y volver a ella. También conecta con Inventario y producción, porque las tareas pueden coordinar preparación, compras, faltantes o revisión de lotes. Finalmente conecta con Reportes y decisiones, porque estados, fechas, responsables y tareas cerradas alimentan seguimiento operativo.
Resumen
Tareas es el centro de seguimiento de Ballista. Centro sirve para trabajar pendientes, cambiar estado/prioridad, responsable, asignados y notas. Tablero sirve para crear y buscar tareas. Calendario sirve para planificar. /tasks/{id} sirve para entender una tarea completa. Las notificaciones persistentes se crean desde servidor cuando se crea, actualiza, comenta, asigna o cambia responsable de una tarea, y también cuando cambia una orden asociada.