Spaces:
Sleeping
✅ Integración Frontend Completada - Análisis de Sentimientos
📝 Resumen
La integración del sistema de análisis de sentimientos con el frontend ha sido completada. El tab de "Análisis de Sentimientos" ahora obtiene datos reales del backend en lugar de usar datos simulados.
🔧 Cambios Realizados
1. Hook personalizado para análisis de sentimientos
Archivo creado: D:\Projects\Personal\proyecto-de-grado\src\features\patients\hooks\useAnalisisSentimiento.ts
Funcionalidad:
- Obtiene análisis agregado del backend mediante
/api/analisis/:pacienteId?periodo=X - Maneja estados de carga y error
- Permite cambiar el período de análisis (7, 14, 30 días)
- Proporciona función
refresh()para recargar datos
Ejemplo de uso:
const { analisis, loading, error, refresh } = useAnalisisSentimiento(pacienteId, 7);
2. Actualización del AnalisisSentimientoTab
Archivo modificado: D:\Projects\Personal\proyecto-de-grado\src\features\patients\components\tabs\AnalisisSentimientoTab.tsx
Cambios implementados:
- ✅ Reemplazado todos los datos mock con datos reales del backend
- ✅ Agregado manejo de estados de carga (CircularProgress)
- ✅ Agregado manejo de errores (Alert)
- ✅ Agregado manejo de datos vacíos
- ✅ Implementado mapeo de emociones a emojis (EMOTION_EMOJI_MAP)
- ✅ Implementado detección de sentimiento para palabras clave
- ✅ Cambiado selector de período de string a número (7, 30, 90 días)
- ✅ Integrado alertas e insights desde el backend
- ✅ Integrado distribución de emociones desde el backend
- ✅ Integrado evolución temporal desde el backend
- ✅ Integrado palabras clave desde el backend
🎨 Características Implementadas
Estados de UI
Loading State
Muestra CircularProgress mientras carga datos del backendError State
Muestra Alert con mensaje de error si falla la peticiónEmpty State
Muestra mensaje cuando no hay entradas del diario para analizarData State
Muestra todos los componentes visuales con datos reales
Mapeo de Datos
Sentimientos (backend → frontend):
esperanzador→ Color verde (#4CAF50) → "Esperanzador"desafiante→ Color rojo (#F44336) → "Desafiante"equilibrado→ Color naranja (#FF9800) → "Equilibrado"
Emociones → Emojis:
Ansioso → 😰
Tranquilo → 😌
Feliz → 😊
Estresado → 😫
Motivado → 🤩
Triste → 😢
Enojado → 😠
Frustrado → 😤
Esperanzado → 🙏
Cansado → 😴
Neutral → 😐
Palabras Clave - Detección de Sentimiento:
- Palabras positivas: familia, alegría, esperanza, gratitud, feliz, amor, logro → Color verde
- Palabras negativas: trabajo, preocupación, estrés, ansiedad, miedo, tristeza → Color rojo
- Palabras neutrales: todo lo demás → Color naranja
🧪 Próximos Pasos para Testing
Paso 1: Iniciar Microservicio Python
cd D:\Projects\Personal\sentiment-analysis-service
source venv/Scripts/activate # Git Bash
python -m uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
Verificar que funciona:
- Abrir: http://localhost:8000
- Debería mostrar:
{"service": "Sentiment Analysis API", "version": "0.1.0", "status": "running"}
Paso 2: Verificar Backend tiene Variable de Entorno
Archivo: D:\Projects\Personal\mdg-backend\.env
SENTIMENT_SERVICE_URL=http://localhost:8000
Paso 3: Ejecutar Migraciones (si no se hizo antes)
cd D:\Projects\Personal\mdg-backend
npm run migration:run
Debería crear:
- Tabla
analisis_sentimiento - Campo
estado_analisisen tabladiario_emocional
Paso 4: Iniciar Backend
cd D:\Projects\Personal\mdg-backend
npm run dev
Paso 5: Iniciar Frontend
cd D:\Projects\Personal\proyecto-de-grado
npm run dev
🎯 Flujo de Testing Completo
1. Como Paciente - Escribir Entrada de Diario
- Iniciar sesión como paciente
- Ir a "Mis Tareas" → "Diario Emocional"
- Seleccionar emoji
- Escribir texto (ejemplo: "Hoy me siento muy ansioso por el trabajo. Tengo miedo de no cumplir con los plazos.")
- Hacer clic en "Guardar Entrada"
- Esperar 2-5 segundos (análisis en background)
Qué sucede:
- Backend guarda entrada con
estado_analisis = "pendiente" - Backend llama async a microservicio Python
- Python analiza texto y devuelve: sentimiento, emoción, keywords, alertas
- Backend guarda análisis en tabla
analisis_sentimiento - Backend marca entrada como
estado_analisis = "analizado"
2. Como Psicólogo - Ver Análisis
- Iniciar sesión como psicólogo/administrador
- Ir a "Pacientes"
- Seleccionar el paciente que escribió la entrada
- Hacer clic en tab "Análisis de Sentimientos"
Qué deberías ver:
- ✅ Alertas Detectadas: Si hay palabras de alto riesgo
- ✅ Total de Entradas: Número de entradas analizadas
- ✅ Sentimiento General: Esperanzador/Desafiante/Equilibrado con score
- ✅ Emoción Predominante: Con emoji (ej: Ansioso 😰)
- ✅ Tendencia: Mejorando/Empeorando/Estable
- ✅ Distribución de Emociones: Gráfico de barras
- ✅ Evolución Temporal: Timeline con barras positivas/negativas
- ✅ Palabras Clave: Nube de palabras con colores según sentimiento
- ✅ Insights Clave: Observaciones automáticas
3. Cambiar Período de Análisis
- En el tab de Análisis de Sentimientos
- Cambiar el dropdown de "Últimos 7 días" (predeterminado) a "Últimos 14 días" o "Últimos 30 días"
- Los datos se recargan automáticamente
🔍 Verificación de Datos en Base de Datos
Ver entradas del diario:
SELECT
id,
fecha_entrada,
emocion_seleccionada,
estado_analisis
FROM diario_emocional
WHERE paciente_id = 'uuid-del-paciente'
ORDER BY fecha_entrada DESC;
Ver análisis guardados:
SELECT
fecha_analisis,
sentimiento_general,
emocion_predominante,
confianza,
palabras_clave,
alertas
FROM analisis_sentimiento
WHERE paciente_id = 'uuid-del-paciente'
ORDER BY fecha_analisis DESC;
Ver entradas pendientes de análisis:
SELECT
id,
fecha_entrada,
estado_analisis
FROM diario_emocional
WHERE estado_analisis = 'pendiente'
ORDER BY fecha_entrada DESC;
🐛 Troubleshooting
El tab muestra "No hay entradas del diario emocional para analizar"
Causas posibles:
- El paciente no ha escrito ninguna entrada
- Las entradas están pendientes de análisis
- El período seleccionado no tiene datos
Solución:
- Verificar que el paciente tenga entradas en la base de datos
- Forzar análisis de pendientes:
POST /api/analisis/:pacienteId/procesar-pendientes
El tab muestra error de conexión
Causas posibles:
- El microservicio Python no está corriendo
- El backend no tiene la variable SENTIMENT_SERVICE_URL correcta
- El backend no está corriendo
Solución:
- Verificar que http://localhost:8000/health responda
- Verificar .env del backend
- Reiniciar backend
Los datos no se actualizan al cambiar el período
Solución:
- Hacer refresh de la página
- Verificar la consola del navegador por errores
Las palabras clave no tienen el color correcto
Nota: El sistema usa heurísticas simples para asignar colores. Palabras ambiguas pueden aparecer como neutrales (naranja). Esto es normal y se puede mejorar con un modelo más avanzado en el futuro.
📊 Ejemplo de Respuesta del Backend
{
"total_entradas": 5,
"sentimiento_promedio": -0.35,
"distribucion_emociones": {
"Ansioso": 3,
"Tranquilo": 1,
"Feliz": 1
},
"palabras_clave": [
{"word": "trabajo", "frequency": 8},
{"word": "miedo", "frequency": 5},
{"word": "familia", "frequency": 3}
],
"alertas": [
{
"type": "warning",
"text": "Se detecta alta frecuencia de entradas con ansiedad (60% de las entradas)"
}
],
"evolucion_temporal": [
{
"fecha": "2026-01-25",
"sentimiento": "desafiante",
"score": -0.65,
"emocion": "Ansioso",
"confianza": 0.85
},
{
"fecha": "2026-01-24",
"sentimiento": "equilibrado",
"score": 0.15,
"emocion": "Tranquilo",
"confianza": 0.72
}
]
}
✨ Mejoras Futuras Posibles
- Exportar análisis como PDF para compartir con el paciente
- Comparación entre períodos (ej: comparar últimos 30 días vs 30 días anteriores)
- Alertas en tiempo real cuando se detecte riesgo crítico
- Gráficos más avanzados con bibliotecas como Chart.js o Recharts
- Análisis de temas mediante topic modeling
- Detección de patrones temporales (ej: ansiedad los lunes)
- Recomendaciones automáticas basadas en el análisis
📚 Documentación Relacionada
INSTALACION.md- Guía de instalación paso a pasoUSO.md- Guía de uso para usuarios, psicólogos y desarrolladoresARQUITECTURA_ANALISIS.md- Arquitectura técnica del sistema
✅ Checklist de Integración
- Hook useAnalisisSentimiento creado
- AnalisisSentimientoTab actualizado con datos reales
- Estados de loading, error y vacío implementados
- Mapeo de sentimientos implementado
- Mapeo de emociones a emojis implementado
- Detección de sentimiento para palabras clave implementada
- Selector de período funcional
- Integración con backend endpoints completada
- Testing end-to-end realizado
- Validación con datos reales de pacientes
- Documentación de usuario actualizada
Estado: ✅ INTEGRACIÓN FRONTEND COMPLETA
Próximo paso: Iniciar servicios y realizar testing end-to-end