The Support Tickets module (Soportes) gives Corpen staff a structured workflow for reporting, routing, and resolving internal and member-facing issues. Tickets move through configurable states, can carry file attachments stored in S3, and trigger email notifications when escalated. An automatic closure rule shuts tickets that have been in the En Revisión state for more than five consecutive days.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/corpentunida-org/corpen/llms.txt
Use this file to discover all available pages before exploring further.
Route Group
All routes share the/soportes prefix and require the auth middleware.
Sub-resources
Tickets
Route::resource('soportes', ScpSoporteController::class) — main ticket CRUD at /soportes/soportes. Parameters alias: scpSoporte.States
Route::resource('estados', ScpEstadoController::class) — ticket lifecycle states (Sin Asignar, En Proceso, En Revisión, Cerrado).Priorities
Route::resource('prioridades', ScpPrioridadController::class) — priority levels (Alta, Media, Baja) that control badge colour in the UI.Types & Sub-types
Route::resource('tipos', ScpTipoController::class) and Route::resource('subtipos', ScpSubTipoController::class) — two-level classification of issue nature.Categories
Route::resource('categorias', ScpCategoriaController::class) — top-level grouping; types are filtered by category via GET /soportes/tipos/filtro/{categoria}.Observation Types
Route::resource('tipoObservaciones', ScpTipoObservacionController::class) — classifies internal notes (e.g. Escalamiento triggers the email flow).Observations
POST /soportes/soportes/{scpSoporte}/observaciones — internal notes and state transitions. Owned by ScpSoporteController@storeObservacion.Board Parameters
GET /soportes/tablero — ScpTableroParametroController@index renders a paginated admin panel covering all configuration entities.Additional routes
| Route | Controller method | Description |
|---|---|---|
GET /soportes/estadisticas | ScpEstadisticaController@index | Ticket statistics dashboard |
GET /soportes/estadisticas/data | ScpEstadisticaController@getDashboardData | AJAX JSON for chart rendering |
GET /soportes/notificaciones | ScpSoporteController@getNotificaciones | Bell-icon count for the navbar |
GET /soportes/notificaciones/detalladas | ScpSoporteController@getNotificacionesDetalladas | Full breakdown by state |
GET /soportes/sin-asignar | ScpSoporteController@sinAsignar | Unassigned ticket queue |
GET /soportes/pendientes | ScpSoporteController@pendientes | Pending ticket view |
GET /soportes/descargar/{id} | ScpSoporteController@descargarSoporte | Download ticket attachment (S3 signed URL, 2 min) |
GET /soportes/ver/{id} | ScpSoporteController@verSoporte | View ticket attachment inline (S3 signed URL, 5 min) |
GET /soportes/enviar-correo-escalado/{id} | ScpNotificacionController@enviarCorreoEscalado | Manual escalation email re-send |
GET /soportes/subtipos/filtro/{tipo} | ScpSoporteController@getSubTipos | AJAX: sub-types for a given type |
GET /soportes/tipos/filtro/{categoria} | ScpSoporteController@getTiposByCategoria | AJAX: types for a given category |
Ticket Lifecycle
Create a ticket
Navigate to A new ticket is created with
GET /soportes/soportes/create. The form loads categories, types, priorities, and users from their respective catalogs. The controller pre-computes the next ticket ID for display.Submit to POST /soportes/soportes with the following required fields:estado = 1 (Sin Asignar). File attachments are uploaded to S3 under corpentunida/soportes/usuario_{id}/{year}/{month}/.Review and assign
Open the ticket via
GET /soportes/soportes/{scpSoporte} (show action). Managers can assign an agent using POST /soportes/{scpSoporte}/asignar or change state directly via POST /soportes/{scpSoporte}/cambiar-estado.Dynamic AJAX selects cascade category → type → sub-type to keep the forms consistent:Add an observation
Post an internal note at The
POST /soportes/soportes/{scpSoporte}/observaciones. Every observation simultaneously updates the ticket state:calcification field accepts a 1–5 satisfaction score and is stored on the observation record.Escalate
Set
id_tipo_observacion to the observation type named Escalamiento (type ID 3) and provide id_scp_usuario_asignado. The controller sends two emails via SoporteEscaladoMail:- One to the escalated user’s corporate email.
- One to the original ticket creator.
usuario_escalado field on the ticket is updated to track who currently owns it.Close the ticket
Change the state to Cerrado (estado This method is called at the start of every
4) through a new observation. If the ticket remains in En Revisión (estado 3) for five or more days, ScpSoporteController@cerrarTicketAutomatico will close it automatically and create a system observation:index() request.Board Parameters (Admin Panel)
GET /soportes/tablero (requires candirect:soporte.lista.administrador) renders a single paginated administration view managed by ScpTableroParametroController:
Notification Bell
The navbar notification bell callsGET /soportes/notificaciones which returns the count of open (non-closed) tickets for the authenticated user, including tickets escalated to them via the scp_usuarios table.
For a detailed breakdown by state, GET /soportes/notificaciones/detalladas returns grouped JSON:
The Note that
soportesEscalados relationship on the User model ties a user to all tickets where scp_soportes.usuario_escalado matches their ScpUsuario record:usuario_escalado stores the scp_usuarios.id (not users.id), so queries involving escalation always join through scp_usuarios first.