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

RutaQué esPara qué se usa
/tasksEntrada principal.Abre el centro de tareas por defecto.
/tasks?view=centerCentro de tareas.Dar seguimiento diario: pendientes, hechos, estado, prioridad, responsable, asignados y notas.
/tasks?view=boardTablero de tareas.Buscar tareas y crear tareas nuevas con formulario completo.
/tasks?view=calendarCalendario 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 actividadNotificaciones.Ver avisos persistentes y abrir tareas, pedidos o lotes según metadata.

Estructura general de /tasks

La pantalla TasksDesktop decide que mostrar:

SituacionVista 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

VistaUso principalQuién la usa normalmente
CentroSeguimiento operativo de tareas existentes.Personas que ejecutan, coordinan o actualizan pendientes.
TableroAdministración y creación de tareas.Supervisores, soporte, operaciones o quién crea trabajo nuevo.
CalendarioPlanificacion visual por fecha/persona.Coordinacion de equipo, despacho, producción o agenda diaria/semanal.
DetalleRevision 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.

PermisoImpacto
tasks:readPermite consultar tareas, tipos, comentarios, detalle y estadísticas.
tasks:writePermite crear, editar, comentar, asignar/remover usuarios, cambiar responsable y borrar tareas.
edit_ordersEn 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:

ContadorQué significa
PendientesCantidad de tareas cuyo estado no es done.
CompletadasCantidad 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

FiltroQué muestraCuanto muestra
PendientesTareas que no están en done.Hasta 25 filas.
CompletadasTareas terminadas.Hasta 25 filas.
TodasMezcla 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:

ElementoQué significa
Título de la tareaEnlace a /tasks/{id}?view=center.
Pedido #...Pedido asociado a la tarea. Si aparece -, falta orden asociada o no vino en la respuesta.
NotasAbre 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.

EstadoSignificado operativo
todoLa tarea existe, pero aun no se está ejecutando.
in_progressLa tarea está activa. Alguien la está trabajando.
doneLa 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.

PrioridadUso recomendado
lowSeguimiento menor o no urgente.
mediumTrabajo normal del día.
highAlgo 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.

ElementoQué hace
Current responsable: #idMuestra el responsable actual por id.
Selector ResponsablePermite escoger el nuevo propietario principal.
ChangeLlama /tasks/change-responsable.
Remove junto a responsableLlama /tasks/change-responsable con responsable 0, es decir, deja la tarea sin responsable valido.
Selector UserPermite escoger un usuario asignado.
AssignLlama /tasks/assign-users con ese usuario.
Remove debajo de usuarioLlama /tasks/remove-users con ese usuario.

Responsable y assignees no son lo mismo:

ConceptoSignificado
ResponsableResponsable principal de la tarea. Es quién debería responder por el avance.
Usuarios asignadosPersonas 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.

BloqueUso
EncabezadoMuestra título de la tarea y pedido asociado.
HistorialLista comentarios existentes con autor y fecha.
Nueva notaCampo para escribir una nueva nota.
GuardarGuarda la nota si el usuario tiene tasks:write y el texto no está vacío.
CerrarCierra 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:

ColumnaQué muestra
TareaTítulo de la tarea; abre /tasks/{id}?view=board.
EstadoEstado traducido.
PrioridadPrioridad traducida.
ResponsableResponsable por id o -.
PedidoPedido asociado por id o -.
Fecha límiteFecha 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.

CampoRequisitoPara qué sirve
TítuloObligatorio, mínimo 3 caracteres en interfaz.Nombre corto de la tarea.
DescripciónObligatorio, mínimo 1 caracter en interfaz.Explica que se debe hacer.
PrioridadObligatorio, default medium.Define urgencia operativa.
EstadoObligatorio, default todo.Define estado inicial.
Tarea typeOpcional.Clasifica la tarea según catálogo.
ResponsableOpcional en interfaz; servidor usa creador si no se envía.Responsable principal.
Pedido relacionadoEn interfaz aparece como requerido; servidor también exige salesOrderId positivo.Conecta la tarea con un pedido.
Fecha límiteObligatorio.Fecha limite de seguimiento.
Usuarios asignadosOpcional.Usuarios colaboradores marcados en la tabla.

Qué pasa al guardar una tarea desde Tablero

  1. El usuario presiona Guardar.
  2. El interfaz valida título, descripción y due date.
  3. El interfaz llama /tasks/create.
  4. El servidor exige tasks:write.
  5. El servidor exige salesOrderId valido y que la orden exista.
  6. El servidor inserta en core.tasks.
  7. Si no se envío responsable, usa como responsable al usuario que creo la tarea.
  8. El servidor emite en tiempo real task:created.
  9. El servidor crea notificación persistente para usuarios de la tarea si hay usuarios relacionados.
  10. Si se marcaron usuarios asignados, el interfaz llama /tasks/assign-users.
  11. El servidor inserta/activa filas en core.task_assignments.
  12. El servidor emite en tiempo real task:users-assigned y task:assigned-to-me.
  13. El servidor crea notificaciones de asignacion para usuarios relacionados.
  14. El interfaz muestra alerta local task created.
  15. El interfaz refresca queries tasks y my-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ónQué hace
Volver a tareasVuelve a /tasks?view=center o /tasks?view=board según de dónde venia.
Abrir pedidoAbre /orders/{id} si la tarea tiene orden asociada.
Editar taskActiva modo edición si el usuario tiene tasks:write.
CancelarSale del modo edición sin guardar cambios.
GuardarGuarda cambios de tarea y diferencias de usuarios asignados.

Información visible sin editar

BloqueQué muestra
Etiquetas superioresEstado, prioridad y tipo de tarea.
DescripciónDescripcion completa.
Tarea IDIdentificador de tarea.
EstadoEstado actual.
PrioridadPrioridad actual.
Fecha límiteFecha limite.
Fecha de creaciónFecha/hora de creación.
Fecha de actualizaciónFecha/hora de ultima actualizacion.
Pedido relacionadoPedido asociado, estado del pedido, order for y cliente si existe.
PersonasResponsable, creador y usuarios asignados.
ComentariosHistorial de notas y campo para nueva nota.

Modo edición

Cuando se presiona Editar task, el detalle permite cambiar:

CampoRegla
TítuloDebe tener texto.
DescripciónPuede editarse, se envía trim.
Estadotodo, in_progress o done.
Prioridadlow, medium o high.
Tarea typePuede asignarse o dejarse sin tipo.
ResponsablePuede cambiarse o quedar sin responsable.
Pedido de ventaDebe tener orden asociada para guardar.
Fecha límiteDebe tener fecha.
Usuarios asignadosSe 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.

ElementoUso
Semana actualVer carga de trabajo en un rango semanal.
Navegacion de semanaMoverse entre semanas.
Fecha especificaSaltar a otro periodo.
Filtro de persona/equipoVer tareas asignadas por responsable o usuario.
Bloques de tareaEntender 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.

OrigenDónde ocurreResultado
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:

EfectoPor 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.

FlujoInteraccion
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:

CapaDónde viveQué hace
Alerta local (pushAlert)Interfaz, temporal.Confirma una acción inmediata cómo "task updated" o "comment created". No es historial permanente.
Notificacion persistenteServidor, 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:

TriggerEndpoint/servicioEvent typeA quién se notifica
Crear tarea./tasks/createtask_createdResponsable y usuarios asignados existentes de la tarea.
Actualizar tarea./tasks/updatetask_updatedResponsable y usuarios asignados.
Agregar comentario./tasks/comments/createtask_comment_createdResponsable y usuarios asignados.
Asignar usuarios./tasks/assign-userstask_assignments_updatedResponsable y usuarios asignados después de la asignacion.
Remover usuarios./tasks/remove-userstask_assignments_updatedResponsable y usuarios asignados restantes.
Cambiar responsable./tasks/change-responsabletask_owner_changedNuevo responsable y usuarios asignados.
Cambiar un pedido asociado.Servicios de Pedidos/Facturaciónorder_updatedUsuarios 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:

MetadataDestino
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 previoObligatorioDónde revisar
Usuario autenticadoSiLogin y token valido.
Permiso tasks:writeSi para crear/editar.Roles/permisos.
Pedido asociadoSi para /tasks/create.Debe existir en Pedidos.
Usuarios activosSolo si vas a asignar responsable/assignees.Administración users.
Tipo de tareaOpcional.Tarea types.
Fecha limiteSi.Se captura en el formulario.
Título y descripciónSi.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

ReglaDónde se validaEfecto
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ónTabla/área aproximadaQué cambia
Crear tarea.core.tasksTítulo, descripción, estado, prioridad, tipo, responsable, creador, due date y sales_order_id.
Crear tipo de tarea.core.task_typesNombre y color del tipo.
Asignar usuarios.core.task_assignmentsRelación task-user, assigned_by, activo/deleted_at según esquema.
Remover usuarios.core.task_assignmentsMarca inactive/deleted_at o elimina según soporte de columnas.
Cambiar responsable.core.tasks.owner_user_idCambia propietario principal.
Actualizar tarea.core.tasksCampos editables y updated_at.
Agregar nota.core.task_commentsComentario, autor y timestamps.
Notificar.core.notificationsAviso persistente con metadata para navegar.

Flujo recomendado para operar

  1. Entrar a /tasks.
  2. Revisar Pendientes en Centro.
  3. Abrir Notas si necesitas contexto rápido.
  4. Cambiar Estado y Prioridad si el trabajo avanzo.
  5. Usar Actualizar tarea para guardar.
  6. Cambiar responsable si la responsabilidad principal cambio.
  7. Asignar usuarios si alguien más debe participar.
  8. Abrir el título de la tarea si necesitas detalle completo.
  9. Usar Abrir pedido si la tarea depende de un pedido.
  10. Agregar comentario cuando haya decisión, bloqueo o avance.
  11. Usar Tablero para crear una tarea nueva o buscar histórico.
  12. Usar Calendario para planificar carga semanal.
  13. 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.

  1. En /orders/{id}, el usuario crea Nueva tarea.
  2. Selecciona responsable de operaciones.
  3. Define due date para el día siguiente.
  4. La tarea aparece en /tasks.
  5. Operaciones cambia estado a in_progress.
  6. Deja una nota: "Cliente confirma entrega manana".
  7. 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.

  1. El interfaz llama /tasks/comments/create.
  2. Servidor guarda en core.task_comments.
  3. Servidor emite en tiempo real task:comment-created.
  4. Servidor crea notificaciones persistentes para responsable/asignados.
  5. El feed de notificaciones se refresca cada 5 segundos.
  6. Al hacer click, la notificación abre /tasks/{id}.

Ejemplo 3: cambio de orden asociada

Una orden con tareas cambia desde Pedidos/Facturación.

  1. Se actualiza el pedido.
  2. El servicio llama notifyTaskUsersForOrderUpdate(orderId, action).
  3. Servidor busca tareas con ese sales_order_id.
  4. Para cada tarea, notifica responsable/asignados.
  5. La metadata incluye salesOrderId y taskId.
  6. El usuario puede abrir la tarea o el pedido según el tipo de metadata.

Problemas comunes

ProblemaDó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=calendar o /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.