RepAttention
Historial de Cambios
Versión actual
v0.28.0
v0.28.0
ACTUAL
18/12/2025
-
🚀
FEATURE: Endpoint batch para recibir respuestas completas del LLM
-
📥
POST /api/v1/mentions/analysis/batch - Procesa múltiples análisis en una sola petición
-
🧠
Acepta rri_final, severity, impact directamente del LLM (sin recalcular en backend)
-
⏱️
Almacena metadata de tiempos: start_time, end_time, total_elapsed_time_seconds, average_time_seconds
-
🗃️
Nueva tabla analysis_batches: tracking de lotes procesados por el LLM
-
🗃️
Nueva tabla analysis_batch_mention: relación pivot batch-menciones con status individual
-
📊
Soporte para errores parciales: procesa menciones válidas, reporta errores individuales
-
🔐
FEATURE: Endpoint protegido para archivos de storage
-
📁
GET /api/v1/storage/{path} - Sirve archivos con autenticación JWT/API token
-
🔒
Archivos en storage/app/public ahora requieren autenticación
-
✅
8 nuevos tests para batch analysis LLM (50 assertions)
-
🚀
MAJOR: Sistema completo de notificaciones de usuario implementado
-
🔔
Notificaciones de Alertas: GET/PUT /api/v1/user/notifications/alert (realtime, in-app, email, Slack, Teams)
-
📢
Notificaciones del Sistema: GET/PUT /api/v1/user/notifications/system (team changes, billing, workspace, product updates)
-
💬
Notificaciones de Menciones: GET/PUT /api/v1/user/notifications/mentions (new mentions, only negative)
-
📧
Correos Resumen (Digest): GET/PUT /api/v1/user/notifications/digest (daily/weekly/monthly)
-
🌙
Horas Silenciosas: GET/PUT /api/v1/user/notifications/quiet-hours (timezone support)
-
👤
User Profile: PUT /api/v1/user/profile (name, phone), POST /api/v1/user/profile/avatar
-
🔐
Passwordless Auth: POST /api/v1/auth/request-code, POST /api/v1/auth/verify-code
-
⏰
SendDigestEmailJob: Job programado para envío de emails resumen (respeta timezone y quiet hours)
-
📬
DigestEmail Mailable: Template HTML responsive para correos resumen
-
🔑
AuthCode: Sistema de códigos de 6 dígitos con rate limiting y expiración
-
🗃️
Migración: create_user_notification_settings_table (configuraciones por usuario)
-
🗃️
Migración: add_profile_fields_to_users (phone_number, avatar_url)
-
🗃️
Migración: create_auth_codes_table (passwordless authentication)
-
🗃️
Migración: increase_security_logs_action_column (varchar 10 → 50)
-
🔧
FIX: Validación de status en alertas RRI (ACTIVE, INACTIVE, PAUSED)
-
✅
74 nuevos tests para el sistema de notificaciones
-
🚀
MAJOR: API de Studies extendida para sincronización completa con frontend
-
📊
Nuevos campos en studies: entity_type, term_matching, folder_id
-
🆕
Nuevo modelo StudyObjective: objetivos simples (trust, awareness, transparency, innovation, leadership, ethics, responsibility, proximity)
-
🆕
Nuevo modelo CalendarMilestone: hitos del calendario con fecha + descripción
-
🔧
StoreStudyRequest/UpdateStudyRequest: validación de keywords, objectives y calendar_milestones anidados
-
✨
StudyController: sync inteligente de keywords (crear/actualizar/eliminar) con variants y exclusions
-
✨
StudyController: sync de objectives (estrategia reemplazo) y calendar_milestones (estrategia sync por id)
-
📦
StudyResource actualizado: incluye entity_type, term_matching, folder_id, objectives como array de strings
-
📦
KeywordResource: ahora incluye avg_rri, last_mention_date, statistics, variants y exclusions como arrays
-
🆕
CalendarMilestoneResource: nuevo resource para milestones
-
🗃️
Migración: add_fields_to_studies_table (entity_type, term_matching, folder_id)
-
🗃️
Migración: create_study_objectives_table
-
🗃️
Migración: create_calendar_milestones_table
-
🗃️
Migración: convert_status_enum_to_varchar_in_mentions (status ENUM → VARCHAR)
-
🔧
FIX: Migraciones pendientes marcadas como ejecutadas (mentions_meta y convert_enums ya existían en BD)
-
🔧
REFACTOR: Sistema de versionado modular en storage/version/
-
📁
Estructura: manifest.json + changelog/*.x.json por serie
-
📦
Changelog compactado: 0.14.x.json contiene versiones 0.1.0 a 0.14.0
-
🧪
FIX: Test it_sets_error_status_when_calculation_fails actualizado para emociones parciales
-
🎯
FIX: Cálculo RRI ahora acepta feel_emotions parciales (1-4 emociones en lugar de exactamente 4)
-
✨
Emociones faltantes tratadas como neutral (0), no como errores de validación
-
📊
Añadido logging INFO para emociones parciales para monitorear patrones del proveedor NLP
-
🧪
Nuevos tests: it_accepts_partial_feel_emotions, it_rejects_empty_feel_emotions
-
🎨
UI: Secciones del changelog ahora expandidas por defecto para mejor UX
-
🎯
FIX: Adaptación al formato EXACTO del proveedor externo
-
✨
think_result ahora acepta scores array [{driver, score, reasoning}] + average_score
-
✨
feel_result ahora acepta scores array [{emotion, score, reasoning}] + average_score
-
✨
do_result ahora acepta clasification (con typo del proveedor) → behavior
-
✨
align_results (plural) en lugar de align_result
-
💾
Guardado de input, think_result, feel_result, do_result completos en mentions_meta
-
🔧
Helper methods adaptan scores arrays a campos de base de datos
-
📊
getThinkData(): Extrae driver con mayor score de scores array
-
📊
getFeelData(): Convierte scores array a emotions object normalizado
-
📊
getDoData(): Mapea clasification → do_behavior
-
🔧
audience_channel_score default 50.0 si no existe
-
🔧
severity guardada desde proveedor
-
🚀
MAJOR: Manejo flexible de JSON para servicios NLP externos
-
✨
StoreMentionAnalysisRequest rediseñado con helper methods (getThinkData, getFeelData, getDoData, getAlignData)
-
📊
Acepta estructuras JSON variables: objetos think_result, feel_result, do_result
-
💾
Preservación completa de JSON en tabla mentions_meta para auditoría/reentrenamiento de IA
-
🔧
UpdateMentionStatusRequest mejorado con campos metadata opcionales (error_code, objeto metadata)
-
🎯
MentionAnalysisController::store() reescrito para normalizar formatos flexibles de proveedores IA
-
🔐
Integración SecurityLog para tracking de análisis con atribución de proveedor
-
📝
Cumplimiento estándar API: Usando clases Response personalizadas (no response()->json() directo)
-
🐛
FIX: Corregida serialización de valores meta en ListMentionResponse
-
✨
Cambiado de ResourceCollection a interfaz Responsable
-
📊
Campos meta ahora retornan valores simples en lugar de arrays
-
🔧
Corregido problema de doble serialización con metadata de paginación
-
🔄
API: Estructura de respuesta unificada para endpoint de menciones pendientes
-
✨
/mentions/pending ahora retorna mismos datos que /studies/{id}/mentions
-
📦
Usa MentionResource y ListMentionResponse para consistencia
-
🎯
Incluye relaciones keyword y study con datos minimizados
-
📚
API DOCS: Reordenados tags de endpoints alfabéticamente en documentación Scramble
-
🔤
Tags ahora aparecen en orden A-Z: Alerts, Authentication, Keywords, Mentions, Studies, Users
-
✨
Mejorada navegación y usabilidad de documentación API
-
🔒
API: Optimizada exposición de datos de relaciones en MentionResource
-
✨
Creados MentionKeywordResource y MentionStudyResource para datos mínimos
-
📉
Eliminados deleted_at, timestamps y otros metadata de relaciones anidadas
-
🎯
Keyword: Solo muestra id, study_id, term, is_primary, total_mentions, avg_rri
-
🎯
Study: Solo muestra id, name, analyzed_brand, study_mode, status
-
🔒
API: Optimizada exposición de datos de usuario en StudyResource
-
✨
Creado StudyUserResource para datos mínimos de usuario en listados de estudios
-
📉
Reducido tamaño de payload API eliminando campos de usuario innecesarios
-
🔐
Eliminados campos sensibles: email_verified_at, global_role, status, timestamps, pivot
-
🔄
Sistema flexible de metadata para menciones (soporte análisis dinámicos de IA)
-
📊
Nueva tabla mentions_meta para campos no mapeados de proveedores externos
-
🔧
Conversión ENUM → VARCHAR en mentions (source_type, think_driver, do_behavior)
-
🤖
Auto-cálculo de external_context_score en MentionObserver (Decision 2C)
-
⚠️
Fallback a NEUTRAL con logging para do_behavior desconocido (Decision 1A)
-
🔍
Columna provider indexada en mentions_meta para queries eficientes (Decision 3B)
-
✨
MentionAnalysisController ahora guarda metadata de proveedores (model_used, reasoning, timing)
-
📝
StoreMentionAnalysisRequest acepta campos opcionales metadata (think_result, feel_result, do_result, source_analysis, context_analysis, performance)
-
🔗
MentionResource expone metadata agrupada por tipo (analysis_metadata, think_reasoning, feel_reasoning, etc.)
-
💾
Migración segura preservando datos existentes (temp column pattern)
-
🔌
Compatible con múltiples proveedores IA: ChatGPT4, Claude, modelos custom
-
✅
Fase 1 Completa: 100% Cumplimiento Estándar API Controller (Study, Keyword, RriAlert, ReputationSnapshot)
-
🔧
StudyController: Refactorizado con patrón FormRequest + Resource + Response
-
🔧
KeywordController: Refactorizado con autorización + validación completa en FormRequest
-
🔧
RriAlertController: Refactorizado con validación exhaustiva de configuración de alertas
-
🔧
ReputationSnapshotController: Refactorizado con soporte paginación + filtrado
-
📝
Creados 11 archivos FormRequest con autorización + reglas de validación apropiadas
-
📝
Creados 4 API Resources con documentación @property exhaustiva
-
📝
Creadas 12 clases Response para respuestas HTTP consistentes (Index/Show/Store/Update/Destroy)
-
🔐
Todos los controllers ahora siguen patrón de autorización FormRequest (movido desde controller)
-
✨
Todos los endpoints retornan clases Response personalizadas (sin response()->json() en controllers)
-
📊
Helpers de paginación en FormRequest (métodos getPagination, getFilters, getSorting)
-
🎯
Checklist de archivos relacionados: Controller → Request → Resource → Response → Migration → Scramble
-
📚
Ejemplo real: Fix de source_type (3 Requests + Resource + annotations + docs)
-
⚠️
Regla de oro: 1 cambio requiere validar 5+ archivos relacionados
-
🔗
Validación cruzada: Request rules ↔ Resource @property ↔ columnas DB ↔ valores ENUM
-
📋
Sincronización docs: Si cambia patrón → actualizar CHECKLIST + EXAMPLE + STANDARD
-
🔧
FIX: Corrección de validación source_type en menciones
-
✅
CreateMentionRequest: Valores ENUM correctos (NEWS_MEDIA, SOCIAL_MEDIA, BLOG, FORUM, DARKWEB, VIDEO, PODCAST, OTHER)
-
✅
ListMentionRequest: Filtros actualizados con valores correctos del ENUM
-
✅
UpdateMentionRequest: Ya tenía valores correctos, sin cambios
-
📝
PHPDoc actualizado: MentionResource, CreateMentionRequest, ListMentionRequest
-
📖
Scramble annotations: MentionController index() y store() con valores correctos
-
📚
Documentación: EXPLICACION_MENCIONES.md, EXPLICACION_RRI.md, SCRAMBLE_ANNOTATIONS.md actualizados
-
📁
Roadmap: STEP-4 y STEP-5 con ejemplos corregidos
-
🎯
Eliminados valores incorrectos: WEB, NEWS, REVIEW (no existen en DB)
-
✅
Agregado valor OTHER faltante en todas las validaciones
-
📚
DOCS: Estándar completo de implementación de controladores API
-
📄
API_CONTROLLER_STANDARD.md: Documento maestro con 8 secciones modulares
-
🏗️
FILE_STRUCTURE.md: Convenciones de nomenclatura (Controller/Request/Resource/Response)
-
🎯
CONTROLLER_PATTERNS.md: 5 métodos CRUD con patrones completos
-
🔐
REQUEST_PATTERNS.md: authorize() + rules() + helpers con ejemplos
-
📝
RESOURCE_PATTERNS.md: @property tags + transformaciones + relationships
-
📊
RESPONSE_PATTERNS.md: Códigos de estado + estructura meta + paginación
-
📖
SCRAMBLE_ANNOTATIONS.md: Guía completa @tags/@queryParam/@bodyParam/@response
-
✅
IMPLEMENTATION_CHECKLIST.md: 70 items en 11 fases para validación
-
💡
STUDY_CRUD_EXAMPLE.md: Ejemplo completo Study CRUD siguiendo estándar
-
🔗
Integración INDICE.md: 4 referencias cruzadas al estándar API
-
📚
DOCS: Documentación completa para Scramble en todos los controladores API
-
✅
AuthController: @tags Authentication, login/logout/me/refresh con ejemplos JWT
-
✅
StudyController: @tags Studies, CRUD completo con validaciones y roles
-
✅
KeywordController: @tags Keywords, gestión con variants y exclusions
-
✅
MentionController: @tags Mentions, 6 endpoints documentados (index, show, store, update, destroy, statistics)
-
✅
RriAlertController: @tags Alerts, 5 tipos de alertas con configs específicas
-
✅
ApiTokenController: @tags API Tokens, gestión de tokens para integraciones
-
✅
MentionAnalysisController: @tags Mention Analysis (External Services), endpoints para servicios NLP/MML externos
-
✅
ReputationSnapshotController: @tags Reputation Snapshots, agregaciones DAILY/WEEKLY/MONTHLY
-
🎯
@bodyParam completos: Todos los campos con tipos, ejemplos y valores permitidos
-
🎯
@queryParam completos: Filtros, ordenamiento, paginación con ejemplos
-
📝
@response con ejemplos reales: 200, 201, 204, 403, 404, 422, 500
-
🏷️
Tags organizados por funcionalidad: Authentication, Studies, Keywords, Mentions, Alerts, API Tokens, Mention Analysis, Reputation Snapshots
-
📖
PHPDoc descriptivo: Explicaciones claras de funcionalidad, flujo y requisitos
-
🔐
Documentación de autorización: Roles requeridos (ADMIN, EDITOR, ANALYST, VIEWER)
-
🔄
Documentación de flujos externos: Patrones de integración de servicios NLP
-
📊
Ejemplos de respuestas: Datos realistas con estructura completa
-
🏗️
REFACTOR: Separación arquitectónica Resources vs Responses
-
📁
Estructura: app/Http/Resources/ (transformaciones) + app/Http/Responses/ (wrappers HTTP)
-
📦
MentionResource movido a app/Http/Resources/ (raíz, sin subdirectorios)
-
📤
Responses en app/Http/Responses/Mention/ (ListMentionResponse, ShowMentionResponse, etc.)
-
🔄
Namespaces: App\Http\Resources vs App\Http\Responses\Mention
-
✅
Claridad semántica: Resources = Transformación de datos, Responses = Capa HTTP
-
🔧
REFACTOR: Reestructuración de Resources - eliminados subdirectorios Api/V1
-
📁
Estructura simplificada: app/Http/Resources/Mention/ y app/Http/Resources/
-
🔄
Namespaces actualizados: App\Http\Resources\Mention y App\Http\Resources
-
✅
Imports actualizados en MentionController y ReputationSnapshotController
-
📝
FEATURE: Nuevo estándar de implementación para controladores API
-
🔧
MentionController refactorizado: Custom Requests + Custom Resources por endpoint
-
🔐
Autorización: Movida de controlador a Request->authorize() (patrón FormRequest)
-
🎯
Parámetros estandarizados: Todos los endpoints usan 'int $id' en lugar de $studyId/$mentionId
-
📚
Documentación Scramble: PHPDoc completo con @queryParam, @bodyParam, @response
-
🏷️
Tags organizados: Mentions, Studies, Keywords, Alerts, Users, Authentication
-
📦
Request Classes: ListMentionRequest, ShowMentionRequest, CreateMentionRequest, UpdateMentionRequest, DeleteMentionRequest, MentionStatisticsRequest
-
📤
Response Classes: ListMentionResponse, ShowMentionResponse, CreateMentionResponse, UpdateMentionResponse, DeleteMentionResponse, MentionStatisticsResponse
-
🔍
MentionResource: Base resource con tipos de retorno específicos (array{...})
-
🎨
ScrambleServiceProvider: Custom tags con descripciones para organización de endpoints
-
✅
Query params documentados: Filtros (fecha, RRI, driver, behavior, source), ordenamiento, paginación
-
✅
Body params documentados: Todos los campos con tipos, validaciones y ejemplos
-
🔄
Helper methods: getFilters(), getSorting(), getPagination() en ListMentionRequest
-
🚫
Eliminados: StoreMentionRequest (reemplazado por CreateMentionRequest)
-
📋
Valores enum documentados: THINK drivers, DO behaviors, source types, status values
-
🛡️
FEATURE: Sistema completo de logs de seguridad ENS
-
🔎
Vista index: Filtros avanzados (usuario, acción, método, status, fechas, búsqueda)
-
🔍
Vista detail: Detalle completo de cada log con metadatos
-
📊
Exportar CSV: UTF-8 BOM con 12 columnas (ID, fecha, usuario, acción, método, ruta, status, IP, navegador, dispositivo, user agent)
-
🔉
Middleware automático: Registra TODAS las peticiones HTTP y API
-
🚫
Exclusiones: Assets (build/*, fonts/*), livewire, horizon, telescope
-
🔒
Campos capturados: method, path, status_code, user_id, ip_address, user_agent, details (JSON)
-
🌐
Detección IP: Soporte para X-Forwarded-For, X-Real-IP (proxies/balanceadores)
-
🧹
Sanitización: Redacta password, token, secret, api_key en logs
-
🎯
Badges semánticos: Actions (13 tipos) y códigos HTTP status con colores
-
📱
Detección dispositivo: Móvil, Tablet, Desktop + navegador (cURL, Postman, Chrome, Firefox, Safari, Edge)
-
👁️
Control de acceso: ADMIN ve todos, usuarios ven solo propios
-
🗑️
Prune: Eliminar logs antiguos (mínimo 30 días ENS)
-
🔒
Inmutabilidad: Sin UPDATED_AT, logs son permanentes
-
📈
Índices optimizados: (user_id, action, created_at), path
-
🔗
Navegación: Enlace en sidebar con icono shield, highlight activo
-
🔉
BREAKING: Cambio de hash SHA-256 a encriptación AES-256 reversible
-
🔐
FEATURE: Copiar token siempre disponible (desencripta desde BD)
-
🔒
Formato visual mejorado: [7 letras]******[5 últimas letras]
-
✅
Notificación toast: Confirma copia al portapapeles con icono check
-
🔓
Método getPlainTextToken(): Desencripta token almacenado
-
🗄️
Migración actualizada: Columna 'token' de string(128) a text
-
🔍
findByToken(): Busca desencriptando todos los tokens activos
-
⚠️
NOTA: Requiere php artisan migrate:fresh (regenera tokens)
-
🔐
FEATURE: Panel de gestión de API Tokens con CRUD completo
-
🔎
Listado de tokens: Nombre, estado (Activo/Inactivo/Nuevo/Expirado), último uso
-
➕
Crear token: Formulario con nombre descriptivo y prefijo 'rpa_'
-
🔒
Seguridad: Token solo se muestra una vez (SHA-256 hash almacenado)
-
📜
Historial detallado: Últimas 50 peticiones API por token
-
🌐
Tracking avanzado: IP, user-agent, endpoint, fecha/hora de cada petición
-
📱
Detección de dispositivo: Móvil/Tablet/Desktop + cliente (Chrome, cURL, Postman)
-
🎯
UI/UX: Badges de estado con colores semánticos, cards estadísticas
-
🗑️
Eliminar token: Confirmación de seguridad antes de borrar
-
🔒
Botón copiar: Copia token al portapapeles con feedback visual
-
🔉
Permisos: Solo ADMIN y ANALYST pueden gestionar tokens
-
🔔
Integración: SecurityLog registra uso de API (action: API_REQUEST)
-
✅
Navegación: Enlace en sidebar con highlight activo
-
🔧
HOTFIX: Excluir /public/build/* del control de versiones
-
🐛
FIX: Conflicto entre npm run dev y npm run build en manifest.json
-
🔥
Gitignore actualizado para evitar commits de assets compilados
-
⚙️
Assets ahora se generan localmente y en CI/CD (no en repo)
-
📜
FEATURE: Changelog con navegación tipo árbol lateral desplegable
-
✅
Scroll-spy: Resalta automáticamente la versión visible en el árbol
-
🔀
Dual layout: Panel admin (autenticados) vs página pública (invitados)
-
📱
Responsive: Sidebar 300px desktop, oculto en móvil (<1024px)
-
🌲
Árbol colapsable: Versiones agrupadas por serie (0.15.x, 0.14.x)
-
⬆️
Botón 'Volver arriba': Aparece tras scroll de segunda sección
-
⚡
Botón 'Volver al inicio': Sticky bottom en sidebar (solo invitados)
-
🔗
Copiar enlace: Botón en cada versión para compartir enlace directo
-
💾
Persistencia: Estado del árbol guardado en localStorage
-
🎨
Tokens semánticos: bg-bg-surface, text-fg-base, border-border-base
-
🎯
Alpine.js store 'changelogTree': Gestión de estado del árbol
-
🧩
Componente reutilizable: <x-ui.changelog-tree> con props
-
🔀
Partial compartido: changelog-content.blade.php para ambos layouts
-
👁️
Intersection Observer API: Detección automática de sección visible
-
🔧
HOTFIX: Corrección de error en método seed() de DatabaseSeeder
-
🐛
FIX: Actualizar llamadas a seeders en DatabaseSeeder
-
🔄
Renombrar seeders con sufijo Seeder estándar de Laravel
-
🔉
FEATURE: Sistema de autenticación dual (Web + API)
-
🎯
UI: Login con validación, dashboard estadístico, navbar + sidebar
-
🔒
JWT: Tokens para API REST con middleware personalizado
-
🔐
Sesiones: Laravel Breeze para rutas web autenticadas
-
✅
Guards: 'web' (sesiones) y 'api' (JWT) en config/auth.php
-
📱
Responsive: Sidebar colapsable (Alpine.js), tema dark
-
🛡️
ENS: Logs de auditoría en security_logs (login, acceso, cambios)
-
🔎
Dashboard: Cards con estadísticas dinámicas (usuarios, estudios, menciones)
-
👁️
Componentes: Badge, button, modal, alert, dropdown, theme-toggle
-
🔍
Detección IP real: Soporte X-Forwarded-For/X-Real-IP
-
🌐
API Docs: Scramble /docs/api con auto-discovery de endpoints
-
🔄
Comandos CLI: token:generate para testing rápido de API
-
🎯
FEATURE: Sistema de diseño completo con TailwindCSS 4 + SCSS
-
🌈
10 paletas de color + tokens semánticos (bg-base, fg-muted, border-base)
-
📈
Arquitectura @layer: variables, theme, typography, utilities
-
👁️
Componentes UI: navbar, sidebar, layouts (app.blade.php, admin.blade.php)
-
🌙
Dark mode: Sistema localStorage + Alpine.js con toggle
-
🔤
Tipografía: Familia Coftein (400-700) con rutas absolutas/dev y relativas/prod
-
⚙️
Layouts: Sistema Stack (@push meta/styles/scripts) para modularidad
-
⚡
Vite 7: HMR en puerto 5174, build optimizado con manifest.json
-
📱
Responsive: Breakpoints sm/md/lg/xl, sidebar colapsable
-
🔀
Alpine stores: sidebar (open/collapsed) con persistencia localStorage
-
🔒
FEATURE: Sistema de API Tokens con autenticación Bearer
-
⚙️
Tabla api_tokens: user_id, name, token (SHA-256), abilities, expires_at
-
🔉
Modelo ApiToken: generateFor(), findByToken(), markAsUsed()
-
🛡️
Middleware ApiAuth: Valida Bearer tokens y gestiona expiración
-
🔎
Factory + Seeder: Datos de prueba para desarrollo
-
🔍
Relationships: ApiToken->user(), User->apiTokens()
-
•
✓ Validación: Comprobación de expiración con Carbon (método isValid)
-
⚠️
FEATURE: Sistema de alertas RRI con 5 tipos de detección
-
🚨
Alertas: CRISIS, SENTIMENT_DROP, NEGATIVE_SPIKE, THRESHOLD_BREACH, KEYWORD_ANOMALY
-
⚙️
Tablas: rri_alerts (reglas), alert_triggers (disparos), alert_trigger_mention (pivot)
-
📧
Canales: EMAIL, SLACK, WEBHOOK (config JSON por canal)
-
⚡
ProcessAlertJob: Evaluación automática con queries optimizadas
-
🔎
Factories + Seeders: 3 alertas predefinidas con triggers
-
🔍
Relationships: RriAlert->triggers(), AlertTrigger->mentions() many-to-many
-
✅
Estados: ACTIVE, TRIGGERED, RESOLVED con metadata de evaluación
-
🔎
FEATURE: Sistema de snapshots reputacionales agregados
-
⚙️
Tabla reputation_snapshots: Agregación por estudio y periodo (DAILY/WEEKLY/MONTHLY)
-
📊
Métricas: avg_rri, min_rri, max_rri, total_mentions, sentiment_distribution
-
⚠️
Job GenerateReputationSnapshotJob: Cálculo asíncrono con agregaciones SQL
-
🔍
Índices optimizados: (study_id, period_type, period_start)
-
📅
Períodos: Snapshot diario (00:00), semanal (lunes), mensual (día 1)
-
🎯
Factory: Datos sintéticos para testing con sentimientos balanceados
-
🕵️
FEATURE: Monitoreo de exposiciones en dark web
-
⚙️
Tabla data_exposures: source_url, exposed_data (JSON), severity (LOW/MEDIUM/HIGH/CRITICAL)
-
🔗
Relationships: DataExposure->study(), Study->dataExposures()
-
🔎
Factory + Seeder: 15 exposiciones sintéticas con datos realistas
-
🔍
Índices: (study_id, discovered_at), (severity)
-
⚠️
Validación: Enum severity con 4 niveles, JSON para exposed_data
-
📅
FEATURE: Gestión de eventos de marca con contexto externo
-
⚙️
Tabla brand_events: title, description, event_date, event_type (INTERNAL/EXTERNAL/INDUSTRY/CRISIS)
-
🔗
Relationships: BrandEvent->study(), Study->brandEvents()
-
🔎
Factory + Seeder: 30 eventos realistas con tipos variados
-
✅
Uso: Contexto para análisis RRI y correlación temporal
-
📊
Índices: (study_id, event_date) para queries temporales
-
✅
FEATURE: Sistema de objetivos reputacionales para modo STRATEGIC
-
⚙️
Tabla reputation_objectives: description, target_score (0-100), priority (LOW/MEDIUM/HIGH/CRITICAL)
-
🔗
Relationships: ReputationObjective->study(), Study->reputationObjectives()
-
🔎
Factory + Seeder: 12 objetivos distribuidos en 3 estudios STRATEGIC
-
⚠️
Validación: Solo estudios en modo STRATEGIC pueden tener objetivos
-
🎯
Prioridades: 4 niveles con distribución 50% MEDIUM, 25% HIGH, 15% LOW, 10% CRITICAL
-
🔍
FEATURE: Sistema completo de keywords (primarias + variantes + exclusiones)
-
⚙️
Tablas: keywords, keyword_variants, keyword_exclusions con relaciones study_id
-
🔎
Seeder: 45 keywords (15 por estudio) con 3 variantes y 2 exclusiones cada una
-
🔗
Relationships: Study->keywords(), Keyword->variants/exclusions/mentions()
-
📊
Estadísticas: total_mentions calculado dinámicamente desde tabla mentions
-
✅
Uso: Sistema listo para scraping y análisis de menciones
-
🔎
FEATURE: Modelo de menciones con RRI V2 completo
-
⚙️
Tabla mentions: 18 columnas incluyendo scores, sentimientos, y metadata
-
🔗
Relationships: Mention->study(), Mention->keyword(), study/keyword inversos
-
📊
Cálculo RRI: think_score (40%), feel_score (28%), do_score (20%), align_score (12%)
-
⚠️
MentionObserver: Auto-cálculo de RRI en eventos save/update
-
🎯
Enums: DriverEnum (7 drivers), BehaviorEnum (5 behaviors)
-
🔍
Índices optimizados: content_hash unique, (study_id, collected_at), (study_id, rri_final)
-
🌐
Campos: source_type (NEWS_MEDIA/SOCIAL_MEDIA/BLOG/FORUM/DARKWEB/VIDEO/PODCAST/OTHER), content, URL, fecha colección
-
👥
FEATURE: Roles de usuario a nivel de estudio con tabla pivot user_study
-
🔉
Roles: OWNER (control total), COLLABORATOR (edición), VIEWER (solo lectura)
-
🔗
Many-to-many: User <-> Study con columna 'role' en pivot
-
🔎
Factory + Seeder: Asignación automática de usuarios a estudios
-
⚡
Métodos: User->studies(), Study->users() con withPivot('role')
-
📜
FEATURE: Modelo Study con modos ANALYTICAL y STRATEGIC
-
⚙️
Migración: Tabla studies con 8 campos (name, description, mode, active, config)
-
🔗
Relationships: Study->user() (belongsTo), User->studies() (hasMany)
-
🔎
Factory + Seeder: 3 estudios (2 ANALYTICAL, 1 STRATEGIC) con configuración JSON
-
⚡
Config: sources (WEB, SOCIAL_MEDIA, DARKWEB), languages, search params
-
🔉
FEATURE: Sistema de logs de auditoría compatible con ENS
-
⚙️
Tabla security_logs: action, user_id, ip_address, user_agent, details (JSON)
-
🔎
Acciones: LOGIN, LOGOUT, ACCESS, CREATE, UPDATE, DELETE, API_REQUEST
-
🔍
Índices: (user_id, created_at), (action, created_at) para queries rápidas
-
⚡
Modelo SecurityLog con cast JSON para 'details'
-
👥
FEATURE: Modelo User extendido con roles (ADMIN, ANALYST, VIEWER, API)
-
⚙️
Migración: Campo 'role' tipo enum en tabla users
-
🔎
Factory + Seeder: 10 usuarios (1 admin, 3 analistas, 3 viewers, 3 usuarios API)
-
🔉
Hashing contraseñas: Bcrypt por defecto en Laravel 11
-
⚡
Configuración: Guardia 'web' para autenticación de sesión
-
🎉
Inicialización del proyecto RepAttention Backend v3
-
⚙️
Laravel 12 con PHP 8.2, SQLite desarrollo, MySQL producción
-
⚡
Configuración base: Vite, TailwindCSS 4, SCSS, Alpine.js
-
🔥
Dependencias: JWT (tymon/jwt-auth), Laravel Pail, Scramble API Docs
-
🗄️
Migraciones base: users, cache, jobs, sessions
-
📚
Documentación: README.md
-
🔧
Scripts Composer: setup, dev, test para flujo de desarrollo