# Indice de Especificaciones Tecnicas - MGN-007 Audit

## Identificacion

| Campo | Valor |
|-------|-------|
| **Modulo** | MGN-007 |
| **Epic** | Audit & Logging |
| **Total ET** | 3 |
| **Story Points** | 34 |
| **Fecha** | 2025-12-05 |

---

## Especificaciones Tecnicas

| ID | Titulo | RF Cubiertos | Estado |
|----|--------|--------------|--------|
| [ET-AUDIT-database](./ET-AUDIT-database.md) | Schema core_audit | RF-001 a RF-004 | Documentado |
| [ET-AUDIT-backend](./ET-AUDIT-backend.md) | Servicios y API REST | RF-001 a RF-004 | Documentado |
| [ET-AUDIT-frontend](./ET-AUDIT-frontend.md) | Componentes React + Chart.js | RF-001 a RF-004 | Documentado |

---

## Resumen de Componentes

### Database (ET-AUDIT-database)

| Tabla | RF | Descripcion |
|-------|-----|-------------|
| audit_logs | RF-001 | Registro de cambios en entidades (particionado mensual) |
| access_logs | RF-002 | Logs de peticiones HTTP (particionado diario) |
| security_events | RF-003 | Eventos de seguridad detectados |
| security_alerts | RF-003 | Alertas enviadas por eventos |
| scheduled_reports | RF-004 | Reportes programados de auditoria |
| audit_alerts | RF-004 | Alertas configurables de auditoria |

**Total:** 6 tablas (2 particionadas + 4 simples)

**Funciones:**
- `log_entity_change()` - Registro de cambios con diff automatico
- `check_brute_force()` - Deteccion de intentos de fuerza bruta
- `create_monthly_partitions()` - Creacion automatica de particiones
- `archive_old_partitions()` - Archivado de particiones antiguas

### Backend (ET-AUDIT-backend)

| Servicio | Endpoints | RF |
|----------|-----------|-----|
| AuditLogsService | 5 | RF-001 |
| AccessLogsService | 4 | RF-002 |
| SecurityEventsService | 3 | RF-003 |
| SecurityAlertsService | 2 | RF-003 |
| ScheduledReportsService | 5 | RF-004 |

**Total:** 19 endpoints

**Interceptores:**
- AuditInterceptor - Logging automatico de cambios via decorador
- AccessLogInterceptor - Registro de peticiones HTTP

**Subscriber:**
- EntityAuditSubscriber - Auditoria automatica via TypeORM events

---

## Matriz de Trazabilidad RF -> ET

| RF | Database | Backend |
|----|----------|---------|
| RF-AUDIT-001 | audit_logs | AuditLogsService, AuditInterceptor, EntityAuditSubscriber |
| RF-AUDIT-002 | access_logs | AccessLogsService, AccessLogInterceptor |
| RF-AUDIT-003 | security_events, security_alerts | SecurityEventsService, SecurityAlertsService |
| RF-AUDIT-004 | scheduled_reports, audit_alerts | ScheduledReportsService |

---

## Estrategia de Particionamiento

| Tabla | Tipo | Particion | Retencion Sugerida |
|-------|------|-----------|-------------------|
| audit_logs | RANGE | Mensual | 24 meses |
| access_logs | RANGE | Diaria | 90 dias |

### Mantenimiento Automatico

- **Particiones futuras:** Job mensual crea particiones 1 mes por adelantado
- **Archivado:** Job semanal archiva particiones antiguas segun retencion

---

## Dependencias Tecnicas

### Externas
- PostgreSQL 15+ (Partitioning, JSONB, GIN, INET)
- TypeORM 0.3+
- NestJS 10+
- cls-hooked (Async context)
- cron-parser (Cron expressions)
- exceljs/pdfkit (Exportacion)

### Internas
- core_tenants.tenants (RLS)
- core_users.users (Referencias)
- core_auth.sessions (Access logs)
- MGN-001 Auth (Autenticacion)
- MGN-003 RBAC (Permisos)
- MGN-008 Notifications (Alertas)

---

## Permisos Requeridos

| Permiso | Descripcion |
|---------|-------------|
| audit.logs.read | Ver logs de auditoria |
| audit.logs.export | Exportar logs |
| audit.access.read | Ver logs de acceso |
| audit.security.read | Ver eventos de seguridad |
| audit.security.manage | Resolver eventos |
| audit.reports.read | Ver reportes programados |
| audit.reports.manage | Crear/editar reportes |
| admin.security.manage | Acceso global a seguridad |

---

## Historial

| Version | Fecha | Autor | Cambios |
|---------|-------|-------|---------|
| 1.0 | 2025-12-05 | Requirements-Analyst | Creacion inicial con 2 ET |
| 1.1 | 2025-12-05 | Requirements-Analyst | Agregado ET Frontend |
