Auditoría y Seguridad

Monitoreo de actividades, análisis de seguridad e incidentes críticos

Período de Consulta

{#each periodButtons as btn} {/each}
{#if periodFilter === 'custom'}
{/if}
{#if canSeeAllTenants}

Alcance de Visualización

{#if allTenants} Multi-tenant activo {/if}
{/if} {#if stats}

Resumen de Actividad

{#each statsCards as card}
{#if card.icon === 'clipboard'} {:else if card.icon === 'zap'} {:else if card.icon === 'calendar'} {:else if card.icon === 'alert'} {/if}
{card.label}
{card.value?.toLocaleString() || 0}
{#if card.action} {/if}

{card.desc}

{/each}
{/if}
{#if showAdvancedFilters}
{#if activeFiltersCount > 0}
{/if}
{/if}
{#if securityAnalysis}

Análisis de Seguridad Completo

Panel especializado de amenazas, riesgos y acciones

{securityAnalysis.overall_risk_level}
{securityAnalysis.failed_login_attempts}

Intentos fallidos

{securityAnalysis.suspicious_ips_count}

IPs sospechosas

{securityAnalysis.total_threats_detected || 0}

Amenazas detectadas

Ir al análisis detallado de seguridad
{/if}

Incidentes de Seguridad

Eventos de seguridad detectados
{totalIncidents} incidentes
{#if isLoadingIncidents}
Cargando incidentes...
{:else if incidents.length === 0}

No hay incidentes

No se encontraron incidentes de seguridad para los filtros seleccionados.

{:else}
{#each incidents as incident (incident.id)} {/each}
{#if incidentsTotalPages > 1}
Página {incidentsPage} de {incidentsTotalPages}
{/if} {/if}

Registros de Auditoría

Historial completo de actividades {totalLogs} registros
{#if isLoading}

Cargando registros...

{:else if logs.length === 0}

No hay registros

{periodFilter === 'today' ? 'No hay actividad registrada hoy.' : 'No se encontraron registros para el período seleccionado.'}

{:else}
{#each logs as log (log.id)}
{/each}
{#if totalPages > 1}
Página {currentPage} / {totalPages}
{/if} {/if}
{#if showIncidentModal && selectedIncident} (showIncidentModal = false)} >

Información General

Título:
{selectedIncident.title}
Severidad:
{selectedIncident.severity?.toUpperCase()}
Estado:
{selectedIncident.status?.toUpperCase()}
Fecha:
{formatDate(selectedIncident.created_at)}
{#if selectedIncident.affected_user}
Usuario Afectado:
{selectedIncident.affected_user}
{/if} {#if selectedIncident.source_ip}
IP Origen:
{selectedIncident.source_ip}
{/if}
{#if selectedIncident.description}

Descripción

{selectedIncident.description}
{/if} {#if selectedIncident.evidence && selectedIncident.evidence.length > 0}

Evidencia

    {#each selectedIncident.evidence as evidence}
  • {evidence}
  • {/each}
{/if} {#if selectedIncident.metadata && Object.keys(selectedIncident.metadata).length > 0}

Información Adicional

{JSON.stringify(
              selectedIncident.metadata,
              null,
              2
            )}
{/if}
{/if} {#if showDetailModal && selectedLog}} (showDetailModal = false)} >

Información General

Fecha y Hora:
{formatDate(selectedLog.created_at)}
Usuario:
{selectedLog.user_name || 'Sistema'}
Email:
{selectedLog.user_email || 'N/A'}
{#if selectedLog.user_role}
Rol:
{getRoleText(selectedLog.user_role)}
{/if}
IP:
{selectedLog.ip_address || 'N/A'}
Correlation ID:
{selectedLog.correlation_id || 'N/A'}

Acción

{selectedLog.action}

{formatActionText(selectedLog.action)}

Recurso Afectado

Tipo: {selectedLog.resource_type}
{#if selectedLog.resource_id}
ID: {selectedLog.resource_id}
{/if}
{#if selectedLog.user_agent}

Navegador / Dispositivo

{selectedLog.user_agent}
{/if} {#if selectedLog.old_values && Object.keys(selectedLog.old_values).length > 0}

Valores Anteriores

{JSON.stringify(
              selectedLog.old_values,
              null,
              2
            )}
{/if} {#if selectedLog.new_values && Object.keys(selectedLog.new_values).length > 0}

Valores Nuevos

{JSON.stringify(
              selectedLog.new_values,
              null,
              2
            )}
{/if} {#if selectedLog.metadata && Object.keys(selectedLog.metadata).length > 0}

Información Adicional

{JSON.stringify(
              selectedLog.metadata,
              null,
              2
            )}
{/if}
{/if}