Tabla de Auditoría: `AuditTrail`
Esta tabla es el corazón del sistema de auditoría. Almacena un registro inmutable de todos los eventos críticos que ocurren en el sistema.
| Campo | Tipo de Dato | Descripción |
|---|---|---|
| `Id` | `BIGINT` | Identificador único autoincremental del registro de auditoría. |
| `Timestamp` | `DATETIME` | Fecha y hora exactas en que se registró el evento. |
| `EventType` | `NVARCHAR(50)` | Tipo de evento registrado (p. ej., 'INVOICE_CREATED', 'PAYMENT_ADDED'). |
| `TableName` | `NVARCHAR(128)` | Nombre de la tabla donde ocurrió el evento (p. ej., 'Facturas', 'Pagos'). |
| `RecordId` | `NVARCHAR(255)` | Clave primaria del registro afectado en la tabla original. |
| `Data` | `NVARCHAR(MAX)` | Contenido completo del registro en formato JSON o XML en el momento del evento. |
| `PreviousHash` | `NVARCHAR(64)` | Hash SHA256 del registro de auditoría inmediatamente anterior. Este es el campo que encadena los registros. |
| `CurrentHash` | `NVARCHAR(64)` | Hash SHA256 de este registro de auditoría (calculado a partir de todos los campos anteriores). |
Triggers de Auditoría
Los triggers son los guardianes de la base de datos. Se activan automáticamente ante cualquier operación de escritura en las tablas críticas y se encargan de registrar el evento en la tabla `AuditTrail`.
Eventos Registrados:
- INSERT: Se registra la creación de un nuevo registro (una nueva factura, un nuevo cliente, etc.).
- UPDATE: Se registra la modificación de un registro existente. Es crucial para el control de facturas ya emitidas.
- DELETE: Se registra la anulación o eliminación de un registro. En muchos casos, las normativas prohíben el borrado físico, por lo que este trigger es fundamental para registrar intentos de borrado o anulaciones lógicas.
Tablas Protegidas:
Los triggers se aplican a tablas como `Facturas`, `LineasFactura`, `Pagos`, `Clientes`, y cualquier otra tabla que contenga información sensible para la facturación.
Flujo de Ejecución de los Triggers
El siguiente diagrama muestra el proceso completo que siguen los triggers cuando se activan.
graph TD
%% Entrada común por inserción en tablas auditadas
A1[Inicio: Inserción en tabla LineasFactura] --> B1[Trigger TRG_Audit_LineasFactura activado]
A2[Inicio: Inserción en tabla Factura] --> B2[Trigger TRG_Audit_Facturas activado]
A3[Inicio: Inserción en tabla Factura_IVA] --> B3[Trigger TRG_Audit_Factura_IVA activado]
A4[Inicio: Inserción en tabla Factura_Prepago] --> B4[Trigger TRG_Audit_Factura_Prepago activado]
%% Flujo común de auditoría
subgraph Flujo_Común[Flujo de Auditoría]
C[Paso 1: Recopilar datos del nuevo registro insertado]
D[Paso 2: Serializar datos a JSON]
E[Paso 3: Obtener CurrentHash del último registro en AuditTrail]
F[Paso 4: Construir nuevo registro de auditoría: Timestamp, EventType, Data, PreviousHash]
G[Paso 5: Calcular CurrentHash del nuevo registro]
H[Paso 6: Insertar nuevo registro en AuditTrail]
I[Fin del proceso de auditoría]
end
%% Conexiones desde cada trigger al flujo común
B1 --> C
B2 --> C
B3 --> C
B4 --> C
%% Flujo interno
C --> D --> E --> F --> G --> H --> I
Diagrama de flujo de la ejecución de un trigger de auditoría.