Un incidente cerrado o cancelado no se mueve con un cambio de estado normal. Hay dos caminos:
- Solicitud: cualquiera que lo vea (
incidents.reopen.request) pide reabrirlo con un motivo. Queda pendiente hasta que otra persona conincidents.reopen.approve(Supervisor y Super admin) la aprueba o la rechaza. - Directo: quien puede aprobar lo reabre de una vez con su propio motivo (
POST /incidents/{id}/reopen).
Solo puede haber una solicitud pendiente por incidente: lo garantiza la base con una columna calculada única (pending_incident_id).
Paso a paso
- SolicitantePide reabrir y escribe el motivo
En el detalle de un incidente cerrado o cancelado, botón "Solicitar reapertura".
- NavegadorEnvía POST /incidents/{id}/reopen-request
- API¿Terminado, sin otra solicitud y con permiso?
- Base de datosGuarda la solicitud y anota "reopen_requested"
El motivo va en la nota del historial. El listado lo marca "Reapertura pendiente" y se puede filtrar (
?reopen=1). Quien puede decidir recibe la notificación "reapertura pendiente". - SupervisiónVe la solicitud en el detalle o la vista previa
El aviso
ReopenRequestNoticemuestra quién la pidió, cuándo y por qué, con Aprobar y Rechazar. - API¿Es su propia solicitud?
Nadie decide la suya; el botón no aparece y la API responde 403 si se intenta.
- Supervisión¿Aprueba?
- Base de datosCierra la solicitud como rechazada, con motivo
El incidente sigue como estaba. Historial
reopen_rejected; avisa a quien pidió. Si otra persona la decidió primero, responde 409REOPEN_NOT_REQUESTED. - NavegadorQueda terminado con el rechazo en el historial
- Base de datosCierra la solicitud y reabre el incidente
En una sola transacción y con la versión en el
UPDATE: vuelve a En progreso si tiene asignado o al estado inicial si no,resolved_atvacío y vencimiento nuevo según la prioridad. Historialreopenedcon el motivo de quien pidió. - NavegadorEl incidente vuelve a estar en curso
Notificación a quien lo creó, al asignado y a quien pidió la reapertura.
Qué ve la persona en cada error
| Código | HTTP | Cuándo | Mensaje en pantalla |
|---|---|---|---|
INCIDENT_NOT_FINALIZED | 409 | El incidente sigue en curso | Este incidente sigue en curso, así que no hay nada que reabrir. Recarga la página para ver su estado actual. |
REOPEN_ALREADY_REQUESTED | 409 | Ya hay una solicitud pendiente | Ya hay una solicitud para reabrir este incidente esperando respuesta. Recarga la página para verla. |
REOPEN_NOT_REQUESTED | 409 | Otra persona ya respondió la solicitud | Esta solicitud de reapertura ya fue respondida por otra persona. Recarga la página para ver cómo quedó. |
REOPEN_OWN_REQUEST | 403 | Quien pidió intenta decidir | No puedes decidir tu propia solicitud de reapertura. Otra persona con ese permiso debe hacerlo. |
VERSION_CONFLICT | 409 | El incidente cambió mientras se decidía | Alguien más guardó cambios en este incidente mientras lo tenías abierto. Recarga para ver la versión actual antes de seguir. |
Dónde está en el código
RequestIncidentReopen,ReopenIncident(handledirecto yapprove) yRejectIncidentReopen.IncidentAccess: reglasRequestReopen,ReopenyDecideReopen.EloquentReopenRequests: una pendiente por incidente y decisión condicional.ReopenRequestNoticeyuseReopenDecision.- Explicación del módulo: Módulo Incidents.