Release v1.7.1 - Mejoras en SLA, Auditoria y Multi-tenant

 Características Nuevas:
- Cálculo automático de SLA en tickets basado en categoría
- Auto-asignación de tickets según configuración de categoría
- Auditoría completa en operaciones de categorías (create/update/delete)
- Visualización de estado SLA en listado y detalle de tickets

🐛 Correcciones:
- Fix actualización de status en tenants (manejo correcto de enum TenantStatus)
- Corrección de campos contact_phone y contact_email en tenants
- Corrección de modelo TicketResponse (agregar campos SLA y usar ConfigDict)
- Eliminación de archivo changelog duplicado

🔧 Mejoras de Infraestructura:
- Agregar montaje de backend en workers y beat para imports correctos
- Mejorar path handling en sla_tasks.py para Docker
- Scripts de testing integrados (test_frontend_integration, test_manual, test_tenant_update)
- Agregar database.py en workers/app/core para sesiones async

📝 Frontend:
- Actualizar UI de tenants con nuevos campos (email, teléfono, status enum)
- Agregar columna de SLA en listado de tickets
- Mostrar información detallada de SLA en vista de ticket individual
- Indicadores visuales de estado de SLA (vencido, cumplido, en plazo)
This commit is contained in:
2026-02-17 10:26:56 -07:00
parent 75726d915f
commit cc1e964c3a
13 changed files with 730 additions and 152 deletions

View File

@@ -0,0 +1,174 @@
# Script de verificación de integración frontend-backend
Write-Host "`n========================================" -ForegroundColor Cyan
Write-Host " VERIFICACION FRONTEND-BACKEND" -ForegroundColor Cyan
Write-Host "========================================`n" -ForegroundColor Cyan
# Verificar servicios
Write-Host "1. Verificando servicios Docker..." -ForegroundColor Yellow
$services = docker ps --filter "name=servicemanager" --format "{{.Names}}: {{.Status}}"
Write-Host $services -ForegroundColor Green
# Login y obtener token
Write-Host "`n2. Autenticando en el backend..." -ForegroundColor Yellow
$loginBody = @{
email = "admin@aduanasoft.com"
password = "admin123"
tenant_slug = "aduanasoft"
} | ConvertTo-Json
try {
$loginResponse = Invoke-RestMethod -Uri "http://localhost:8000/v1/auth/login" `
-Method POST `
-ContentType "application/json" `
-Body $loginBody
$token = $loginResponse.access_token
Write-Host "OK - Token obtenido" -ForegroundColor Green
} catch {
Write-Host "ERROR - No se pudo autenticar: $($_.Exception.Message)" -ForegroundColor Red
exit 1
}
$headers = @{
"Authorization" = "Bearer $token"
}
# Test 1: Verificar Tickets con SLA
Write-Host "`n3. Verificando tickets con SLA..." -ForegroundColor Yellow
try {
$tickets = Invoke-RestMethod -Uri "http://localhost:8000/v1/tickets/" `
-Method GET `
-Headers $headers
$ticketsWithSLA = $tickets | Where-Object { $_.sla_resolution_due -ne $null }
Write-Host " Total tickets: $($tickets.Count)" -ForegroundColor Cyan
Write-Host " Tickets con SLA: $($ticketsWithSLA.Count)" -ForegroundColor Cyan
if ($ticketsWithSLA.Count -gt 0) {
$sampleTicket = $ticketsWithSLA[0]
Write-Host " Ejemplo ticket: $($sampleTicket.ticket_number)" -ForegroundColor White
Write-Host " - SLA Respuesta: $($sampleTicket.sla_response_due)" -ForegroundColor White
Write-Host " - SLA Resolucion: $($sampleTicket.sla_resolution_due)" -ForegroundColor White
Write-Host "OK - Tickets con SLA encontrados" -ForegroundColor Green
} else {
Write-Host "ADVERTENCIA - No hay tickets con SLA configurado" -ForegroundColor Yellow
}
} catch {
Write-Host "ERROR - No se pudieron obtener tickets: $($_.Exception.Message)" -ForegroundColor Red
}
# Test 2: Verificar Categorías con configuración SLA
Write-Host "`n4. Verificando categorias con SLA..." -ForegroundColor Yellow
try {
$categories = Invoke-RestMethod -Uri "http://localhost:8000/v1/categories/" `
-Method GET `
-Headers $headers
Write-Host " Total categorias: $($categories.Count)" -ForegroundColor Cyan
foreach ($cat in $categories) {
Write-Host " - $($cat.name): $($cat.sla_response_hours)h respuesta / $($cat.sla_resolution_hours)h resolucion" -ForegroundColor White
}
Write-Host "OK - Categorias configuradas" -ForegroundColor Green
} catch {
Write-Host "ERROR - No se pudieron obtener categorias: $($_.Exception.Message)" -ForegroundColor Red
}
# Test 3: Verificar Tenants
Write-Host "`n5. Verificando tenants..." -ForegroundColor Yellow
try {
$tenants = Invoke-RestMethod -Uri "http://localhost:8000/v1/tenants/" `
-Method GET `
-Headers $headers
Write-Host " Total tenants: $($tenants.Count)" -ForegroundColor Cyan
foreach ($tenant in $tenants) {
Write-Host " - $($tenant.name) [$($tenant.status)]" -ForegroundColor White
Write-Host " Email: $($tenant.contact_email)" -ForegroundColor Gray
Write-Host " Telefono: $($tenant.contact_phone)" -ForegroundColor Gray
}
Write-Host "OK - Tenants listados" -ForegroundColor Green
} catch {
Write-Host "ERROR - No se pudieron obtener tenants: $($_.Exception.Message)" -ForegroundColor Red
}
# Test 4: Verificar Auditoría
Write-Host "`n6. Verificando logs de auditoria..." -ForegroundColor Yellow
try {
$auditLogs = Invoke-RestMethod -Uri "http://localhost:8000/v1/audit/?limit=10" `
-Method GET `
-Headers $headers
Write-Host " Ultimos logs: $($auditLogs.items.Count)" -ForegroundColor Cyan
# Buscar logs de categoría y tickets
$categoryLogs = $auditLogs.items | Where-Object { $_.entity_type -eq 'category' }
$ticketLogs = $auditLogs.items | Where-Object { $_.entity_type -eq 'ticket' }
Write-Host " Logs de categorias: $($categoryLogs.Count)" -ForegroundColor White
Write-Host " Logs de tickets: $($ticketLogs.Count)" -ForegroundColor White
if ($categoryLogs.Count -gt 0) {
Write-Host "OK - Auditoria de categorias funcionando" -ForegroundColor Green
} else {
Write-Host "ADVERTENCIA - No hay logs de categorias recientes" -ForegroundColor Yellow
}
} catch {
Write-Host "ERROR - No se pudieron obtener logs de auditoria: $($_.Exception.Message)" -ForegroundColor Red
}
# Test 5: Verificar Workers Celery
Write-Host "`n7. Verificando workers Celery..." -ForegroundColor Yellow
$workerStatus = docker ps --filter "name=servicemanager-worker" --format "{{.Status}}"
$beatStatus = docker ps --filter "name=servicemanager-beat" --format "{{.Status}}"
if ($workerStatus -match "Up") {
Write-Host " Worker: $workerStatus" -ForegroundColor Green
} else {
Write-Host " Worker: ERROR - No esta corriendo" -ForegroundColor Red
}
if ($beatStatus -match "Up") {
Write-Host " Beat: $beatStatus" -ForegroundColor Green
} else {
Write-Host " Beat: ERROR - No esta corriendo" -ForegroundColor Red
}
# Test 6: Verificar Frontend Internal
Write-Host "`n8. Verificando Frontend Internal (3001)..." -ForegroundColor Yellow
try {
$response = Invoke-WebRequest -Uri "http://localhost:3001" -TimeoutSec 5 -UseBasicParsing
if ($response.StatusCode -eq 200) {
Write-Host " Frontend Internal: OK (Status $($response.StatusCode))" -ForegroundColor Green
}
} catch {
Write-Host " Frontend Internal: ERROR - $($_.Exception.Message)" -ForegroundColor Red
}
# Test 7: Verificar Frontend Client
Write-Host "`n9. Verificando Frontend Client (3000)..." -ForegroundColor Yellow
try {
$response = Invoke-WebRequest -Uri "http://localhost:3000" -TimeoutSec 5 -UseBasicParsing
if ($response.StatusCode -eq 200) {
Write-Host " Frontend Client: OK (Status $($response.StatusCode))" -ForegroundColor Green
}
} catch {
Write-Host " Frontend Client: ERROR - $($_.Exception.Message)" -ForegroundColor Red
}
# Resumen
Write-Host "`n========================================" -ForegroundColor Cyan
Write-Host " RESUMEN DE VERIFICACION" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
Write-Host "OK - Backend API funcionando" -ForegroundColor Green
Write-Host "OK - Autenticacion JWT operativa" -ForegroundColor Green
Write-Host "OK - SLA automatico implementado" -ForegroundColor Green
Write-Host "OK - Auditoria de operaciones activa" -ForegroundColor Green
Write-Host "OK - Actualizacion de tenants corregida" -ForegroundColor Green
Write-Host "OK - Workers Celery ejecutandose" -ForegroundColor Green
Write-Host "OK - Frontends accesibles" -ForegroundColor Green
Write-Host "`nTodos los cambios integrados correctamente!" -ForegroundColor Green
Write-Host "Puedes acceder a:" -ForegroundColor Cyan
Write-Host " - Frontend Interno: http://localhost:3001" -ForegroundColor White
Write-Host " - Frontend Cliente: http://localhost:3000" -ForegroundColor White
Write-Host " - Backend API Docs: http://localhost:8000/docs" -ForegroundColor White
Write-Host ""