Auditoría sobre los documentos de compra o venta
¿Qué hace?
Registra cada creación, modificación y eliminación sobre 16 entidades de documentos comerciales:
| Cabeceras de venta | Cabeceras de compra |
|---|---|
PresupuestoCliente |
PresupuestoProveedor |
PedidoCliente |
PedidoProveedor |
AlbaranCliente |
AlbaranProveedor |
FacturaCliente |
FacturaProveedor |
| Líneas de venta | Líneas de compra |
|---|---|
LineaPresupuestoCliente |
LineaPresupuestoProveedor |
LineaPedidoCliente |
LineaPedidoProveedor |
LineaAlbaranCliente |
LineaAlbaranProveedor |
LineaFacturaCliente |
LineaFacturaProveedor |
Por cada evento guarda:
- Snapshot before (estado anterior, JSON completo)
- Snapshot after (estado nuevo, JSON completo)
- Diff por campo (qué cambió exactamente)
- Usuario (
nick), IP y ID de sesión (para agrupar acciones del mismo workflow) - Timestamp preciso
Y permite revertir cualquier cambio a un click.
Características principales
📋 Listado con filtros
Filtrá por rango de fecha, usuario, tipo de entidad, acción (creado/modificado/eliminado/revertido), código de documento, cliente/proveedor o estado de rollback.
🔍 Detalle con diff visual
Vista lado a lado rojo (antes) / verde (después) por cada campo modificado. Para create y delete muestra el snapshot completo.
📊 Timeline por documento
Línea de tiempo cronológica de todos los eventos sobre un documento — cabecera + líneas mezcladas, agrupadas por día. Estadísticas (creaciones / modificaciones / eliminaciones / rollbacks) y diff resumido en cada evento.
↩ Rollback unitario
Revertí cualquier evento al estado anterior con un click:
| Acción original | Qué hace el rollback |
|---|---|
update |
Restaura los campos al before_state |
delete |
Re-inserta la fila con before_state |
create |
Borra la fila creada |
El rollback queda registrado como nuevo evento action=rollback enlazado al original mediante rollback_of_id.
🛡 Auditoría a prueba de fallos
- Si la tabla
doc_audit_logno existe (deploy parcial) → corto-circuito silencioso, no rompe el save - Cualquier excepción interna del logger → catch & log a error_log, nunca propaga al request
- Cero impacto en el flujo normal de FacturaScripts si algo falla en el audit