# Sistema de SLA Automático - Documentación

## Descripción General

El sistema de ticketera ahora calcula automáticamente la **fecha límite de respuesta** para cada ticket basándose en los valores de SLA (Service Level Agreement) configurados en cada proyecto.

## ¿Cómo Funciona?

### 1. Configuración de SLA en Proyectos

Cada proyecto puede tener configurado un SLA diferente para cada nivel de prioridad:

- **Baja**: Tiempo máximo para tickets de prioridad baja (ej: 72 horas = 3 días)
- **Media**: Tiempo máximo para tickets de prioridad media (ej: 48 horas = 2 días)
- **Alta**: Tiempo máximo para tickets de prioridad alta (ej: 24 horas = 1 día)
- **Crítica**: Tiempo máximo para tickets de prioridad crítica (ej: 4 horas)

### 2. Creación de Proyectos

Al crear o editar un proyecto, los administradores pueden configurar los valores de SLA en horas:

```
Proyecto: Sitio Web Corporativo
├── SLA Baja: 72 horas (3 días)
├── SLA Media: 48 horas (2 días)
├── SLA Alta: 24 horas (1 día)
└── SLA Crítica: 4 horas
```

**Valores por defecto** si no se especifican:
- Baja: 72 horas
- Media: 48 horas
- Alta: 24 horas
- Crítica: 4 horas

### 3. Creación de Tickets

Cuando un usuario crea un nuevo ticket:

1. **Selecciona el proyecto** asociado
2. **Selecciona la prioridad** del ticket
3. El sistema **muestra en tiempo real** la fecha límite que se calculará
4. El usuario puede:
   - **Dejar el campo vacío**: La fecha límite se calcula automáticamente según el SLA
   - **Especificar una fecha manual**: Se usa la fecha proporcionada (sobrescribe el SLA)

### 4. Cálculo Automático

El sistema utiliza el método `calculateDueDate()` del modelo `Project`:

```php
// Ejemplo: Ticket de prioridad "crítica" creado a las 10:00 AM
$project->calculateDueDate('critica', now());
// Resultado: 2:00 PM del mismo día (10:00 + 4 horas)

// Ejemplo: Ticket de prioridad "alta" creado el lunes
$project->calculateDueDate('alta', now());
// Resultado: Martes a la misma hora (24 horas después)
```

## Ejemplos de Uso

### Ejemplo 1: Proyecto con SLA Estándar

**Proyecto**: Sistema de Inventario
- SLA Baja: 96 horas (4 días)
- SLA Media: 48 horas (2 días)
- SLA Alta: 12 horas
- SLA Crítica: 2 horas

**Ticket creado**: Lunes 10:00 AM, Prioridad "Alta"
**Fecha límite calculada**: Lunes 10:00 PM (10:00 AM + 12 horas)

### Ejemplo 2: Proyecto con SLA Crítico

**Proyecto**: App Móvil Delivery
- SLA Baja: 48 horas (2 días)
- SLA Media: 24 horas (1 día)
- SLA Alta: 8 horas
- SLA Crítica: 1 hora

**Ticket creado**: Viernes 5:00 PM, Prioridad "Crítica"
**Fecha límite calculada**: Viernes 6:00 PM (5:00 PM + 1 hora)

### Ejemplo 3: Sin Proyecto Asociado

Si un ticket se crea **sin proyecto asociado**:
- El campo fecha límite debe ser completado **manualmente**
- No hay cálculo automático de SLA

## Interfaz de Usuario

### Vista de Creación de Ticket

La pantalla de creación muestra:

1. **Selector de Proyecto**: Lista de proyectos disponibles
2. **Selector de Prioridad**: Baja, Media, Alta, Crítica
3. **Información de SLA**: Texto dinámico que muestra:
   ```
   ⏰ Fecha límite automática: 30/10/2025 14:00 (4 horas desde ahora)
   ```
4. **Campo Fecha Límite (Opcional)**: 
   - Si está vacío: Se usa el cálculo automático
   - Si se completa: Se usa la fecha manual

### Ejemplo Visual

```
┌─────────────────────────────────────────────┐
│ Prioridad: [Crítica ▼]                      │
│ Proyecto:  [App Móvil Delivery ▼]          │
├─────────────────────────────────────────────┤
│ Fecha Límite (Opcional)                     │
│ [____/__/__] 📅                             │
│                                             │
│ ⏰ Fecha límite automática:                 │
│    30/10/2025 11:00 (1 hora desde ahora)   │
└─────────────────────────────────────────────┘
```

## Proyectos de Ejemplo

Los siguientes proyectos de prueba tienen SLA configurados:

### 1. Sitio Web Corporativo (Empresa ABC)
- **Baja**: 72 horas (3 días)
- **Media**: 48 horas (2 días)
- **Alta**: 24 horas (1 día)
- **Crítica**: 4 horas

### 2. Sistema de Inventario (Comercial XYZ)
- **Baja**: 96 horas (4 días)
- **Media**: 48 horas (2 días)
- **Alta**: 12 horas
- **Crítica**: 2 horas

### 3. App Móvil Delivery (Restaurantes Unidos)
- **Baja**: 48 horas (2 días)
- **Media**: 24 horas (1 día)
- **Alta**: 8 horas
- **Crítica**: 1 hora ⚡ (servicio crítico 24/7)

## Ventajas del Sistema

✅ **Consistencia**: Todos los tickets del mismo proyecto y prioridad tienen el mismo plazo de respuesta
✅ **Automatización**: No es necesario calcular manualmente las fechas límite
✅ **Transparencia**: Los clientes ven de inmediato cuándo recibirán respuesta
✅ **Flexibilidad**: Se puede sobrescribir manualmente si es necesario
✅ **Cumplimiento**: Facilita el seguimiento de los acuerdos de nivel de servicio

## Implementación Técnica

### Migración de Base de Datos

```sql
ALTER TABLE projects ADD COLUMN sla_baja INT NULL COMMENT 'SLA en horas para prioridad baja';
ALTER TABLE projects ADD COLUMN sla_media INT NULL COMMENT 'SLA en horas para prioridad media';
ALTER TABLE projects ADD COLUMN sla_alta INT NULL COMMENT 'SLA en horas para prioridad alta';
ALTER TABLE projects ADD COLUMN sla_critica INT NULL COMMENT 'SLA en horas para prioridad crítica';
```

### Modelo Project

```php
// Obtener las horas de SLA para una prioridad
$hours = $project->getSlaHours('alta'); // Retorna 24

// Calcular fecha límite
$dueDate = $project->calculateDueDate('critica', now());
// Retorna: Carbon instance con la fecha calculada
```

### Controlador TicketController

```php
// Al crear un ticket
if ($request->project_id) {
    $project = Project::find($request->project_id);
    $dueDate = $project->calculateDueDate($request->priority, now());
}
```

## Próximas Mejoras Sugeridas

🔮 **Dashboard de Cumplimiento de SLA**: Mostrar % de tickets resueltos dentro del SLA
🔮 **Alertas Automáticas**: Notificar cuando un ticket está próximo a vencer
🔮 **Reportes de SLA**: Generar reportes de cumplimiento por proyecto/técnico
🔮 **SLA Pausable**: Pausar el contador durante fines de semana o días festivos
🔮 **Escalamiento Automático**: Escalar tickets que están por vencer el SLA

## Usuarios de Prueba

Para probar el sistema, puedes usar estos usuarios:

**Cliente**:
- Email: `carlos@cliente.com`
- Password: `password123`
- Proyecto: Sitio Web Corporativo (SLA: 4h crítica, 24h alta)

**Administrador**:
- Email: `admin@ticketera.com`
- Password: `password123`
- Puede crear/editar proyectos y configurar SLA

---

**Fecha de implementación**: 30 de octubre de 2025
**Versión**: 1.0
