Hay dos permisos distintos:
- Tomar (
incidents.take): asignárselo a uno mismo, y solo si nadie lo tiene. Lo usan los agentes. - Asignar (
incidents.assign): elegir a cualquier persona que pueda recibir incidentes, cambiarla o dejarlo sin asignar. Lo usan supervisión y el Super admin.
Los dos van por el mismo endpoint; la API decide cuál aplica.
Paso a paso
- PersonaPulsa Tomar, Asignar o Reasignar
En la ficha del detalle. "Asignar" abre
AssignDialogcon las personas deGET /incidents/assignees(solo activas y con permiso de recibir incidentes). - NavegadorEnvía PUT /incidents/{id}/assignee
Con el ULID de la persona (o vacío para dejarlo sin asignar) y la versión conocida.
- API¿Lo puede ver y la persona existe?
Si no lo ve, 404. Si la persona elegida no puede recibir incidentes, 422.
- API¿Se lo asigna a sí mismo y puede tomarlo?
Si sí, se evalúa como "tomar"; cualquier otro caso se evalúa como "asignar".
- API¿Sigue sin asignar y no terminó?
- API¿Tiene permiso de asignar y no terminó?
- API¿Versión actual?
Si dos personas lo toman a la vez, la segunda llega con una versión vieja y recibe el conflicto.
- Base de datosGuarda el asignado e historial
Entrada
assignedounassignedcon la persona de antes y la de después (id y nombre, para que el historial no cambie si luego cambia su nombre). Si ya era la misma persona, no escribe nada. - Cola y avisosAvisa a quien lo recibe
incident.changeda los canales que pueden verlo, incluido el de "sin asignar" si lo estaba antes;incident.assignedcon "Te asignaron TZ-26-0142" a quien lo recibe (no si se lo tomó él mismo) y su notificación. - NavegadorMuestra la persona asignada
Qué ve la persona en cada error
| Código | HTTP | Cuándo | Mensaje en pantalla |
|---|---|---|---|
INCIDENT_ALREADY_ASSIGNED | 409 | Otra persona lo tomó antes | Otra persona tomó este incidente hace un momento. Recarga la página para ver quién lo tiene. |
VERSION_CONFLICT | 409 | Alguien guardó otro cambio antes | Alguien más guardó cambios en este incidente mientras lo tenías abierto. Recarga para ver la versión actual antes de seguir. |
INVALID_ASSIGNEE | 422 | La persona elegida no puede recibir incidentes | Esta persona no puede recibir incidentes. Elige a alguien de la lista. |
INCIDENT_FINALIZED | 409 | Está cerrado o cancelado | Este incidente ya está cerrado o cancelado, así que no se puede modificar. |
FORBIDDEN_ACTION | 403 | No puede asignar a otros | No tienes permiso para hacer esta acción. Si crees que deberías tenerlo, habla con un administrador. |
Dónde está en el código
AssignIncident: tomar o asignar y transacción.IncidentAccess: reglasTakeyAssign.EloquentAssigneeDirectory: quién puede recibir incidentes.AssignDialogyuseAssignees.- Explicación del módulo: Módulo Incidents.