Ir al contenido

Auditoría ITSS (`audit/`)

Ruta: /owner/hr/audit

Registro inmutable de todas las operaciones sensibles del sistema.

Fichajes:

  • Entrada y salida de empleados
  • Correcciones de fichajes
  • Firmas digitales generadas

Ausencias:

  • Solicitudes creadas
  • Aprobaciones/Rechazos
  • Modificaciones de saldos

Nóminas:

  • Generación de nóminas
  • Modificaciones de conceptos
  • Exportaciones realizadas

Empleados:

  • Altas y bajas
  • Modificaciones de datos
  • Cambios de permisos

Cada evento contiene:

{
"id": "uuid",
"timestamp": "2024-01-15T10:30:45Z",
"action": "attendance_correction_approved",
"actor": {
"user_id": "uuid",
"name": "María García",
"role": "manager"
},
"target": {
"employee_id": "uuid",
"employee_name": "Juan Pérez"
},
"changes": {
"before": {...},
"after": {...}
},
"metadata": {
"ip_address": "192.168.1.1",
"user_agent": "Mozilla/5.0...",
"device": "desktop"
},
"compliance_flags": {
"itss_relevant": true,
"lopd_sensitive": false
}
}

El sistema mantiene trazabilidad completa de modificaciones.

Para cada registro modificado, se mantiene:

  1. Versión Original: Registro inicial
  2. Versión Actual: Estado actual
  3. Historial: Todas las modificaciones intermedias
  4. Responsables: Quién hizo cada cambio
  5. Motivos: Razón de cada modificación
1. Acceder a auditoría ITSS
2. Seleccionar rango de fechas
3. Filtrar por empleado (opcional)
4. Click en "Generar Informe ITSS"
5. Sistema genera PDF con:
- Todos los fichajes del período
- Firmas digitales
- Correcciones aplicadas
- Responsables de cada cambio
6. Descargar informe
7. Preparado para entrega a inspección
Detalles Técnicos

Tabla: hr_audit_logs

CREATE TABLE hr_audit_logs (
id UUID PRIMARY KEY,
timestamp TIMESTAMP DEFAULT NOW(),
action TEXT NOT NULL,
actor_id UUID NOT NULL,
employee_id UUID,
business_id UUID NOT NULL,
changes JSONB NOT NULL,
metadata JSONB,
ip_address INET,
user_agent TEXT,
-- Inmutabilidad garantizada por RLS
-- Solo inserción, nunca actualización o borrado
CHECK (created_at IS NOT NULL)
);
-- Política RLS de solo inserción
CREATE POLICY "Audit logs are insert only"
ON hr_audit_logs FOR INSERT
WITH CHECK (true);
CREATE POLICY "Audit logs are read only for authorized"
ON hr_audit_logs FOR SELECT
USING (
business_id IN (
SELECT business_id FROM employees
WHERE user_id = auth.uid()
AND role IN ('owner', 'hr_admin', 'auditor')
)
);
-- NUNCA permitir UPDATE ni DELETE

Componente: AuditTrailViewer.tsx

Búsqueda y Filtrado:

// Búsqueda por texto completo en JSONB
SELECT * FROM hr_audit_logs
WHERE changes @> '{"employee_name": "Juan"}';
// Filtro por tipo de acción
SELECT * FROM hr_audit_logs
WHERE action LIKE 'attendance_%';
// Filtro por rango de fechas
SELECT * FROM hr_audit_logs
WHERE timestamp BETWEEN '2024-01-01' AND '2024-01-31';