NUEVA INFRAESTRUCTURA * SQL 010: tabla audit_log (id, fecha, user_email, user_name, modulo, accion, entity_type, entity_id, entity_label, detalles JSON, ip_addr) con índices por fecha/user/modulo/accion/entity. * src/AuditLog.php: helper estático con dos métodos: - log() lee actor de $_SESSION (uso normal post-auth) - logAs() recibe email/name explícito (para login/logout y CLI) Falla silenciosamente si la DB no responde — no rompe la operación principal por un fallo de logging. HOOKS EN MUTACIONES * Auth.php: registra 'login' al completar OAuth y 'logout' antes de destruir la sesión. * escrituras/api.php: registra create/update/delete con id+nombre. * tramites/api.php: registra 8 mutaciones — create/update/delete del trámite, set_status (con nuevo estatus en detalles), add_obs, add_hours/update_hours/delete_hours (con abogado y horas en detalles), todos referenciados por codigo (ADM-001, etc.). * admin/api.php: registra create_user/update_user/delete_user, con diff de cambios en update_user. * GETs (list_*) no se loguean — serían ruido. LECTOR * admin/api.php nuevo endpoint GET ?action=list_log que devuelve entradas con filtros from/to/user/modulo/accion/search (LIKE) + catálogos para dropdowns. Límite 500 por query. UI EN PANEL DE CONTROL * admin.html ahora tiene tabs: "Usuarios" (existente) y "Registro de transacciones" (nuevo). * Tab Registro: toolbar de filtros (rango fechas, usuario, módulo, acción, búsqueda libre, atajos Hoy/Semana/Mes/Todo) + tabla con Fecha·Hora · Usuario · Módulo (pill coloreado) · Acción · Entidad con label y tipo · Detalles JSON resumido.
27 lines
1.1 KiB
SQL
27 lines
1.1 KiB
SQL
-- ============================================================
|
|
-- Donna — Schema 010: audit_log para trazabilidad de transacciones
|
|
-- ============================================================
|
|
-- Registra login, logout, create, update, delete y demás mutaciones
|
|
-- de todos los módulos (escrituras, tramites, admin, etc.) con su
|
|
-- usuario, fecha, módulo, acción y referencia a la entidad afectada.
|
|
|
|
CREATE TABLE IF NOT EXISTS audit_log (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
fecha DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
user_email VARCHAR(255) NOT NULL DEFAULT '',
|
|
user_name VARCHAR(255) NOT NULL DEFAULT '',
|
|
modulo VARCHAR(50) NOT NULL,
|
|
accion VARCHAR(50) NOT NULL,
|
|
entity_type VARCHAR(50) NULL,
|
|
entity_id VARCHAR(50) NULL,
|
|
entity_label VARCHAR(255) NULL,
|
|
detalles TEXT NULL,
|
|
ip_addr VARCHAR(45) NULL,
|
|
|
|
INDEX idx_fecha (fecha DESC),
|
|
INDEX idx_user (user_email),
|
|
INDEX idx_modulo (modulo),
|
|
INDEX idx_accion (accion),
|
|
INDEX idx_entity (entity_type, entity_id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|