michangarrito/docs/01-epicas/MCH-031-auditoria-empresarial.md
rckrdmrd 5a49ad0185 [INTEGRATION] feat: Integrate template-saas scopes and database objects
## Documentation
- Align MCH-029 to MCH-032 with template-saas modules (SAAS-008 to SAAS-015)
- Create MCH-034 (Analytics) and MCH-035 (Reports) from SAAS-016/017
- Update PLAN-DESARROLLO.md with Phase 7 and 8
- Update _MAP.md indexes (35 total epics)

## Database (5 new schemas, 14 tables)
- Add storage schema: buckets, files, signed_urls
- Add webhooks schema: endpoints, deliveries
- Add audit schema: logs, retention_policies
- Add features schema: flags, tenant_flags (14 seeds)
- Add analytics schema: metrics, events, reports, report_schedules
- Add auth.oauth_connections for MCH-030
- Add timestamptz_to_date() IMMUTABLE function
- Update EXPECTED_SCHEMAS in recreate-database.sh

## Analysis Reports
- ANALISIS-INTEGRACION-TEMPLATE-SAAS-2026-01-13.md
- VALIDACION-COHERENCIA-2026-01-13.md
- GAP-ANALYSIS-BD-2026-01-13.md
- REPORTE-EJECUCION-2026-01-13.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 07:10:55 -06:00

11 KiB

id type title code status phase priority created_at updated_at simco_version dependencies
EPIC-MCH-031 Epic MCH-031: Auditoria Empresarial MCH-031 Planificado 7 P1 2026-01-10 2026-01-10 4.0.1
blocks depends_on

MCH-031: Auditoria Empresarial

Metadata

  • Codigo: MCH-031
  • Fase: 7 - Expansion
  • Prioridad: P1
  • Estado: Planificado
  • Story Points: 5
  • Sprint Objetivo: Sprint 7

Descripcion

Implementar sistema de auditoria completo con registro de todas las acciones CRUD, politica de retencion configurable y capacidad de exportacion para compliance. Permite trazabilidad completa de operaciones y deteccion de actividades sospechosas.

Objetivos

  1. Registrar todas las acciones de usuarios en el sistema
  2. Mantener historial de cambios con valores antes/despues
  3. Configurar politicas de retencion por tenant
  4. Exportar logs para auditorias externas
  5. Visualizar actividad en dashboard admin

Alcance

Incluido

  • Audit logs para CREATE, UPDATE, DELETE
  • Activity logs para acciones de usuario (login, logout, view)
  • Interceptor global NestJS
  • Politica de retencion (30, 90, 365 dias)
  • Exportacion CSV
  • Visor de logs en admin

Excluido

  • SIEM integration (futuro)
  • Real-time alerting (ver notificaciones)
  • Forensic analysis tools

Arquitectura

                    ┌─────────────────────────────────────┐
                    │      MCH-031: Auditoria             │
                    └─────────────────────────────────────┘
                                      │
              ┌───────────────────────┴───────────────────────┐
              ▼                                               ▼
   ┌─────────────────────┐                      ┌─────────────────────┐
   │    Audit Logs       │                      │   Activity Logs     │
   │  (data changes)     │                      │  (user actions)     │
   └──────────┬──────────┘                      └──────────┬──────────┘
              │                                            │
              └──────────────────┬─────────────────────────┘
                                 ▼
              ┌─────────────────────────────────────────┐
              │           AuditInterceptor              │
              │    (NestJS Global Interceptor)          │
              └─────────────────────────────────────────┘
                                 │
              ┌──────────────────┼──────────────────┐
              ▼                  ▼                  ▼
        ┌──────────┐      ┌──────────┐      ┌──────────┐
        │  schema  │      │ Retencion│      │  Export  │
        │  audit   │      │  Policy  │      │   CSV    │
        └──────────┘      └──────────┘      └──────────┘

Entregables

Entregable Estado Sprint Ubicacion
Schema audit (DDL) Planificado 7 database/schemas/14-audit.sql
AuditInterceptor Planificado 7 apps/backend/src/common/interceptors/
AuditService Planificado 7 apps/backend/src/modules/audit/
AuditController Planificado 7 apps/backend/src/modules/audit/
Retention Job Planificado 7 apps/backend/src/jobs/
UI Visor logs Planificado 7 apps/web/src/pages/admin/audit/

Dependencias

Depende de

  • Ninguna (puede ejecutarse en paralelo con MCH-029)

Bloquea a

  • Ninguna

Historias de Usuario

MCH-US-107: Registro de Acciones

Como administrador Quiero ver un registro de todas las acciones realizadas en el sistema Para tener trazabilidad y detectar actividades sospechosas

Story Points: 3

Criterios de Aceptacion:

  • [CA-107-1] Registra CREATE, UPDATE, DELETE automaticamente
  • [CA-107-2] Incluye: usuario, timestamp, IP, user-agent
  • [CA-107-3] Guarda valor anterior y nuevo en cambios (old_value, new_value)
  • [CA-107-4] Filtrable por usuario, accion, entidad, rango de fechas
  • [CA-107-5] Exportable a CSV con columnas seleccionables

Tareas:

ID Tarea Tipo SP
MCH-TT-107-01 DDL schema audit (audit_logs, activity_logs) DDL 0.5
MCH-TT-107-02 AuditInterceptor global Backend 0.5
MCH-TT-107-03 AuditService con metodos log/query Backend 0.5
MCH-TT-107-04 AuditController (GET /audit/logs) Backend 0.25
MCH-TT-107-05 UI visor de logs con filtros Frontend 0.5
MCH-TT-107-06 Exportacion CSV Backend 0.25
MCH-TT-107-07 Tests Test 0.25
MCH-TT-107-08 Documentacion Docs 0.25

MCH-US-108: Politica de Retencion

Como administrador Quiero configurar cuanto tiempo se guardan los logs Para cumplir con politicas de retencion y optimizar almacenamiento

Story Points: 2

Criterios de Aceptacion:

  • [CA-108-1] Configuracion de dias de retencion: 30, 90, 180, 365
  • [CA-108-2] Job automatico de limpieza (cron diario)
  • [CA-108-3] Opcion de archivar a storage antes de eliminar
  • [CA-108-4] Notificacion por email antes de purga (7 dias antes)

Tareas:

ID Tarea Tipo SP
MCH-TT-108-01 Configuracion de retencion en tenant_settings Backend 0.25
MCH-TT-108-02 Job de limpieza con BullMQ (cron) Backend 0.5
MCH-TT-108-03 Archivado opcional a storage (S3) Backend 0.5
MCH-TT-108-04 Tests Test 0.25
MCH-TT-108-05 Documentacion de politica de retencion Docs 0.5

Resumen de Story Points

Historia SP Sprint
MCH-US-107: Registro de Acciones 3 7
MCH-US-108: Politica de Retencion 2 7
TOTAL 5 7

Criterios de Aceptacion de Epica

  • Todas las acciones CRUD se registran automaticamente
  • Logs visibles en dashboard admin
  • Exportacion CSV funcional
  • Job de limpieza ejecutandose diariamente
  • Cobertura de tests >80%

Notas Tecnicas

Schema audit

CREATE SCHEMA IF NOT EXISTS audit;

CREATE TABLE audit.audit_logs (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    tenant_id UUID NOT NULL,
    user_id UUID,
    action VARCHAR(20) NOT NULL, -- CREATE, UPDATE, DELETE
    entity_type VARCHAR(100) NOT NULL, -- Product, Order, User
    entity_id UUID NOT NULL,
    old_value JSONB,
    new_value JSONB,
    ip_address INET,
    user_agent TEXT,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

CREATE INDEX idx_audit_logs_tenant_date ON audit.audit_logs(tenant_id, created_at DESC);
CREATE INDEX idx_audit_logs_entity ON audit.audit_logs(entity_type, entity_id);

Configuracion de Retencion

// En tenant_settings
{
  "audit": {
    "retention_days": 90,
    "archive_before_delete": true,
    "notify_before_purge": true
  }
}

ADRs Relacionados


Especificaciones Tecnicas Detalladas (Ref: SAAS-008)

Esta seccion documenta las especificaciones del modulo de auditoria segun template-saas para garantizar alineacion arquitectonica.

Estructura de Tabla audit_logs

Campo Tipo Descripcion
id UUID Identificador unico
tenant_id UUID Tenant al que pertenece
user_id UUID Usuario que realizo la accion
action VARCHAR Tipo de accion (create/update/delete/read/auth)
entity_type VARCHAR Tipo de entidad afectada
entity_id UUID ID de la entidad afectada
changes JSONB Objeto con {before, after, diff}
ip_address INET Direccion IP del cliente
user_agent TEXT User agent del navegador
metadata JSONB Datos adicionales (requestId, location)
created_at TIMESTAMP Fecha de creacion

Tabla Adicional: auth_logs

Campo Tipo Descripcion
id UUID Identificador unico
tenant_id UUID Tenant al que pertenece
user_id UUID Usuario relacionado
action VARCHAR Tipo (login/logout/failed/mfa)
ip_address INET Direccion IP
user_agent TEXT User agent
location JSONB {country, city}
success BOOLEAN Si fue exitoso
failure_reason TEXT Razon de fallo si aplica
created_at TIMESTAMP Fecha de creacion

Endpoints API del Modulo

Metodo Endpoint Descripcion
GET /audit/logs Listar logs con paginacion y filtros
GET /audit/logs/:id Detalle de un log especifico
GET /audit/entity/:type/:id Logs de una entidad especifica
GET /audit/user/:id Logs de un usuario especifico
GET /audit/auth Logs de autenticacion
GET /audit/export Exportar logs (CSV/JSON)
GET /audit/stats Estadisticas de auditoria

Tipos de Acciones Soportadas

Acciones de Datos

Accion Descripcion
entity.created Registro creado
entity.updated Registro modificado
entity.deleted Registro eliminado
entity.viewed Registro consultado
bulk.import Importacion masiva
bulk.export Exportacion masiva

Acciones de Autenticacion

Accion Descripcion
auth.login Login exitoso
auth.logout Logout
auth.failed Login fallido
auth.mfa MFA verificado
auth.password_change Password cambiado
auth.session_revoked Sesion revocada

Politica de Retencion por Plan

Plan Retencion
Free 7 dias
Starter 30 dias
Pro 90 dias
Enterprise 1 año (configurable)

Estructura de Log Completa

interface AuditLog {
  id: string;
  tenantId: string;
  userId: string;
  userName: string;
  action: string;
  entityType: string;
  entityId: string;
  changes: {
    before: object | null;
    after: object | null;
    diff: object; // solo campos cambiados
  };
  metadata: {
    ip: string;
    userAgent: string;
    location?: {
      country: string;
      city: string;
    };
    requestId: string;
  };
  createdAt: Date;
}

Referencia

Documentacion fuente: /projects/template-saas/docs/01-modulos/SAAS-008-audit-logs.md Version: 1.0.0


Ultima actualizacion: 2026-01-13 Autor: Architecture Team