# RF-AUDIT-004: Consulta y Reportes de Auditoria ## Identificacion | Campo | Valor | |-------|-------| | **ID** | RF-AUDIT-004 | | **Modulo** | MGN-007 Audit | | **Titulo** | Consulta y Reportes de Auditoria | | **Prioridad** | P1 - Alta | | **Estado** | Draft | | **Fecha** | 2025-12-05 | --- ## Descripcion El sistema debe proporcionar capacidades avanzadas de consulta, busqueda y generacion de reportes sobre los logs de auditoria, permitiendo analisis forense, cumplimiento normativo y monitoreo operacional. --- ## Requisitos Funcionales ### RF-AUDIT-004.1: Busqueda Avanzada El sistema permite buscar en todos los tipos de logs: ```typescript interface AuditSearchQuery { // Filtros temporales from: Date; to: Date; // Filtros de entidad entityType?: string; entityId?: UUID; // Filtros de usuario userId?: UUID; userEmail?: string; // Filtros de accion action?: AuditAction[]; eventType?: SecurityEventType[]; severity?: Severity[]; // Filtros de origen ipAddress?: string; countryCode?: string; // Busqueda de texto searchText?: string; // Busca en description, metadata // Paginacion page: number; limit: number; sortBy: string; sortOrder: 'asc' | 'desc'; } ``` ### RF-AUDIT-004.2: Tipos de Reportes | Reporte | Descripcion | Programable | |---------|-------------|-------------| | Activity Report | Actividad por usuario/periodo | Si | | Security Report | Eventos de seguridad | Si | | Compliance Report | Accesos a datos sensibles | Si | | Change Report | Cambios en entidades criticas | Si | | Access Report | Accesos por recurso | Si | ### RF-AUDIT-004.3: Exportacion de Datos Formatos soportados: ```typescript enum ExportFormat { CSV = 'csv', XLSX = 'xlsx', PDF = 'pdf', JSON = 'json' } // Limites const EXPORT_LIMITS = { csv: 100000, // 100k registros max xlsx: 50000, // 50k registros max pdf: 1000, // 1k registros max json: 100000 // 100k registros max }; ``` ### RF-AUDIT-004.4: Reportes Programados ```typescript interface ScheduledReport { id: UUID; name: string; reportType: ReportType; filters: AuditSearchQuery; format: ExportFormat; schedule: CronExpression; // "0 8 * * 1" = Lunes 8am recipients: string[]; // Emails isActive: boolean; lastRunAt: TIMESTAMPTZ; nextRunAt: TIMESTAMPTZ; } ``` ### RF-AUDIT-004.5: Dashboard de Auditoria Metricas en tiempo real: ```typescript interface AuditDashboard { // Volumetria totalRecords: number; recordsToday: number; recordsThisWeek: number; // Actividad activeUsers: number; topUsers: { userId: UUID; name: string; count: number }[]; // Cambios entitiesModified: number; topEntities: { type: string; count: number }[]; // Seguridad securityEventsCount: number; unresolvedEvents: number; // Tendencias activityTrend: { date: string; count: number }[]; } ``` ### RF-AUDIT-004.6: Retencion y Archivado Politicas de retencion: | Tipo de Log | Retencion Online | Archivo | |-------------|------------------|---------| | Audit Trail | 1 año | 7 años | | Access Logs | 90 dias | 1 año | | Security Events | 2 años | 7 años | ```typescript // Proceso de archivado interface ArchiveJob { logType: 'audit' | 'access' | 'security'; olderThan: Date; destination: 's3' | 'glacier'; compression: 'gzip' | 'zstd'; encryption: boolean; } ``` ### RF-AUDIT-004.7: Alertas de Auditoria Alertas configurables basadas en patrones: ```typescript interface AuditAlert { id: UUID; name: string; condition: { logType: 'audit' | 'access' | 'security'; field: string; operator: '=' | '>' | '<' | 'contains'; value: any; windowMinutes: number; threshold: number; }; actions: { notify: string[]; // Emails webhook?: string; severity: Severity; }; isActive: boolean; } // Ejemplo: Alertar si hay mas de 100 deletes en 5 minutos { condition: { logType: 'audit', field: 'action', operator: '=', value: 'delete', windowMinutes: 5, threshold: 100 } } ``` --- ## Operaciones ### Busqueda en Logs ```typescript POST /api/v1/audit/search { "from": "2025-12-01", "to": "2025-12-05", "entityType": "users", "action": ["update", "delete"], "page": 1, "limit": 50 } Response: { "data": [...], "meta": { "total": 250, "page": 1, "limit": 50, "queryTime": 45 // ms } } ``` ### Generar Reporte ```typescript POST /api/v1/audit/reports { "reportType": "activity", "filters": { ... }, "format": "xlsx" } Response: { "jobId": "uuid", "status": "processing", "estimatedTime": 30 // segundos } // Luego: GET /api/v1/audit/reports/:jobId Response: { "jobId": "uuid", "status": "completed", "downloadUrl": "https://...", "expiresAt": "2025-12-05T12:00:00Z" } ``` ### Crear Reporte Programado ```typescript POST /api/v1/audit/reports/scheduled { "name": "Reporte Semanal de Actividad", "reportType": "activity", "filters": { "entityType": "users" }, "format": "pdf", "schedule": "0 8 * * 1", "recipients": ["admin@company.com"] } ``` --- ## Reglas de Negocio | ID | Regla | Severidad | |----|-------|-----------| | BR-001 | Exportaciones grandes son asincronas | Performance | | BR-002 | Reportes PDF limitados a 1000 registros | Performance | | BR-003 | Archivos expirados se eliminan despues de 24h | Storage | | BR-004 | Solo admins pueden crear reportes programados | Security | | BR-005 | Archivado respeta politicas de retencion legal | Compliance | --- ## Criterios de Aceptacion - [ ] Busqueda con multiples filtros - [ ] Exportacion a CSV, XLSX, PDF, JSON - [ ] Reportes programados con email - [ ] Dashboard con metricas en tiempo real - [ ] Archivado automatico de logs antiguos - [ ] Alertas configurables - [ ] Performance < 1s para consultas tipicas --- ## Historial | Version | Fecha | Autor | Cambios | |---------|-------|-------|---------| | 1.0 | 2025-12-05 | Requirements-Analyst | Creacion inicial |