Files
Nurfog e88fd571f0 feat: add mentorship assignments and peer review enhancements
- Create `mentorship_assignments` table with relevant fields and indexes.
- Add `peer_review_settings` table for lesson-specific peer review configurations.
- Enhance `peer_reviews` and `course_submissions` tables with additional fields for instructor reviews and final scores.
- Implement My Notes page to display user annotations with delete functionality.
- Create Lesson Annotations component for managing notes with editing and deletion capabilities.
- Develop Mentor Panel component to display mentor and mentee information.
- Add Course Mentorships page for assigning mentors to students with modal for selection.

Co-authored-by: Copilot <copilot@github.com>
2026-04-28 12:23:22 -04:00

14 KiB

OpenCCB: Hoja de Ruta (Roadmap) del Proyecto

Fase 1: Cimientos

  • Configuración del Workspace de Rust (Edición 2024)
  • Estructura de Microservicios (CMS y LMS)
  • Infraestructura Multi-Base de Datos
  • Inicialización del Frontend (Studio y Experience)
  • Dockerización y Script de instalación unificado

Fase 2: Funcionalidades Core del CMS

  • Editor de Estructura de Cursos
  • Sistema de Carga de Archivos
  • Constructor de Actividades Interactivas
  • Tipos de evaluación avanzada (Secuenciación, Emparejamiento, etc.)

Fase 3: Autenticación y Seguridad

  • Autenticación basada en JWT
  • Control de Acceso Basado en Roles (RBAC)
  • Registro e Interfaz de Auditoría

Fase 4: Experiencia LMS y Calificaciones

  • Portal del Estudiante (Experience)
  • Sistema de Calificación Holístico con pesos
  • Políticas de Evaluación e Intentos
  • Umbrales de Aprobación Dinámicos
  • Generación de Certificados básicos

Fase 5: Analíticas e Insights

  • Dashboard de Analíticas para Instructores
  • Dashboard de Progreso del Estudiante

Fase 6: Refactorización a Single-Tenant

  • Reposicionamiento como módulo premium
  • Personalización de Marca (Branding Premium)
  • Interfaz de Usuario e Inicio de Sesión Simplificados

Fase 7: Compromiso y Social

  • Analíticas de Vanguardia (Cohortes, Retención, Heatmaps)
  • Integración de IA (Resúmenes, Quices, Tutor RAG)
  • Rutas de Aprendizaje Personalizadas
  • Gamificación Base (XP, Niveles, Leaderboards)

Fase 8: Funcionalidades Enterprise

  • Perfil de Usuario y Ciclo de Vida
  • Reportes Avanzados exportables a CSV
  • SSO (Google, Okta, Azure AD)
  • LTI 1.3 Tool Provider (Interoperabilidad)

Fase 9: Portabilidad de Cursos

  • Esquema JSON Universal y Portabilidad de contenidos

Fase 10: Consola de Administración Global

  • Panel de control para organizaciones y auditoría universal

Fase 11 - 14: IA y Gamificación Avanzada

  • Quices de Código y Puntos Calientes (Hotspots)
  • Evaluaciones por Audio con IA
  • Generador de Cursos "Mágico"
  • Juegos para niños e Internacionalización (EN, ES, PT)

Fase 15 - 19: UI Adaptativa y Monetización

  • Dynamic API Resolution (Acceso LAN)
  • Optimización móvil completa
  • Monetización con Mercado Pago
  • Analíticas Predictivas (Riesgo de Abandono)
  • Integración de Videoconferencia (Jitsi)
  • Landing Pages para Marketing de Cursos

Fase 20 - 21: IA Generativa y Búsqueda Semántica

  • Diagramas Mermaid automáticos
  • Búsqueda Semántica con PGVector (Representación de 768 dim)
  • Detección de duplicados y RAG mejorado

Fase 22: Estabilidad y Funcionalidades Pendientes 🛠️ (En Ejecución)

  • Generación de Certificados Premium: Mejorar UI de configuración de templates en Studio.
  • Tracking de Progreso Atómico: Reemplazar hardcodes por cálculo real de completitud.
  • Notificaciones de Foros: Implementar despacho de alertas vía SMTP.
  • Importación Masiva (Excel): Finalizar soporte para Question Bank.

Fase 23 - 27: Infraestructura Crítica (Completado)

  • Integración SMTP: Password reset, notificaciones transaccionales (inscripción, completitud) y emails de marketing.
  • Búsqueda Global Unificada: Endpoint /search en LMS (cursos, lecciones, foros, anuncios) con full-text e índices GIN. Barra de búsqueda en navbar del Experience.
  • Soporte SCORM/xAPI: Player nativo (iframe) para lecciones content_type=scorm|xapi y bloque scorm, con tracking de statements xAPI en LMS.
  • Accesibilidad WCAG 2.1: Auditoría y ajustes de contraste/navegación.
  • PWA y Soporte Offline: Service workers para aprendizaje sin conexión. (MVP base implementado: registro SW, caché estático, navegación network-first con fallback offline y API GET network-first; UX añadida: prompt de instalación PWA y banner online/offline; cola offline para progreso (grades/interactions/xAPI) con flush automático al reconectar; panel visible de sync, deduplicación por huella de mutación y pruebas E2E offline→online para grades/interactions; validado en producción con endpoints /manifest.webmanifest, /sw.js y /offline.html en HTTP 200).

🚀 Fases Estratégicas (Nuevas)

Fase 32: IA de Moderación y Ética 🛡️

  • Auditoría de IA: Sistema de validación para prevenir "halucinaciones" en el Tutor RAG. (MVP backend + UI Studio: endpoints protegidos para listar logs de chat con señales de riesgo y marcar revisión humana en ai_usage_logs.request_metadata, con panel operativo en Admin. Señales endurecidas a 10 reglas con score ponderado + endpoint GET /ai/audit/metrics con distribución de scores y ranking de señales.)
  • Moderación Automática: Detección de lenguaje ofensivo o inapropiado en foros y chats. (MVP backend por diccionario en creación de hilos/respuestas de foro y mensajes de chat tutor/role-play).
  • Ética de Datos: Herramientas para transparencia en el uso de datos por los modelos de IA local. (MVP backend + UI Studio: endpoint protegido /ai/data-ethics/summary con métricas de uso, eventos recientes y campos almacenados; panel Admin en /admin/data-ethics.)

Fase 33: Aprendizaje Colaborativo Síncrono 🤝

  • Pizarras Compartidas: Espacio de dibujo colaborativo integrado en lecciones. (MVP completo: backend REST + UI Experience con polling, autosave debounce 1.5s, control de conflictos optimista revision/409 y panel de resolución con diff local vs remoto.)
  • Edición Multiusuario: Soporte para documentos compartidos en tiempo real (tipo Google Docs).
  • Salas de Estudio: Grupos efímeros para resolución de dudas grupales por video.

Fase 34: Análisis Pedagógico Profundo 📊

  • Métricas de Calidad: Análisis automático de la efectividad de las lecciones (completion_rate, failure_rate, abandonment, avg_attempts). (Backend GET /courses/{id}/pedagogical/quality-metrics + UI Studio con barras proporcionales.)
  • Índice de Discriminación: Estadísticas sobre qué preguntas de quiz discriminan mejor el conocimiento. (Backend GET /courses/{id}/pedagogical/discrimination-index con agrupación por metadata.block_scores + clasificación Excelente/Buena/Aceptable/Revisar.)
  • Sugerencias Curriculares: Reglas automáticas (5 tipos) recomendando cambios en la estructura del curso basada en rendimiento real. (Backend GET /courses/{id}/pedagogical/suggestions + panel Studio con severidad alta/media/info/positivo.)

Fase 35: Ecosistema de Plugins 🔌

  • Arquitectura Modular: Tabla org_plugins con CRUD completo en cms-service (GET /plugins, POST /plugins, PUT /plugins/{id}, DELETE /plugins/{id}). Validación HTTPS obligatoria.
  • Soporte para Web Components: Bloque plugin en Experience carga el componente en <iframe sandbox> seguro con postMessage para config; sin acceso al DOM de OpenCCB.
  • OpenCCB Market: Galería en Studio (/admin/plugins) con toggle habilitado/deshabilitado, registro de nuevos plugins y tarjetas con estado visual.

Fase 36: LTI 1.3 Tool Consumer 🔗

  • Consumo de herramientas externas: MVP implementado con lti_external_tools por curso, gestión en Studio (/courses/[id]/lti-tools), selector visual en editor de lecciones y bloque embebido lti-tool en Experience vía iframe sandbox.
  • Delegación de Calificaciones: MVP implementado con endpoint público POST /lti/tools/{tool_id}/grade-passback, firma HMAC-SHA256 (x-openccb-lti-signature + x-openccb-lti-timestamp), registro de eventos y sincronización a user_grades.

Estado Actual: Plataforma madura con IA generativa integrada, arquitectura Premium Single-Tenant, búsqueda semántica y monetización operativa.

Fase 37: Tiempo Real y Seguridad Operacional

  • SSE para Pizarras Colaborativas: Reemplazado polling de 5s por EventSource en CollaborativeWhiteboard.tsx. Endpoint GET /lessons/{id}/collaborative-canvas/stream en lms-service usa canal tokio::sync::mpsc + ReceiverStream; el servidor consulta la DB cada 2s y emite eventos SSE solo cuando cambia la revision. El cliente cierra la conexión al desmontar el componente.
  • Rotación de Secretos LTI: Endpoint POST /courses/{id}/lti-tools/{tool_id}/rotate-secret genera un nuevo secreto alfanumérico de 32 chars, actualiza la DB y lo retorna una sola vez. UI en Studio (/courses/[id]/lti-tools) con botón 🔑 por herramienta, modal de confirmación de riesgo, y panel de copia-única del nuevo secreto con botón clipboard.

Fase 38: Salas de Estudio con BigBlueButton 🎥

  • Tabla study_rooms: migración con campos status (pending/active/ended), bbb_meeting_id, attendee_pw, moderator_pw, max_participants, scheduled_at, started_at, ended_at.
  • Integración BBB: handlers_study_rooms.rs construye URLs BBB con checksum SHA256 (action + params + BBB_SECRET). Endpoints: GET /courses/{id}/study-rooms, POST /courses/{id}/study-rooms, POST .../join, POST .../end, DELETE .../. Variables de entorno: BBB_URL y BBB_SECRET.
  • Studio: página /courses/[id]/study-rooms — crear sala, lista con estado, botones Iniciar/Unirse (BBB en nueva pestaña)/Finalizar/Eliminar, instrucciones de configuración integradas. Tab "Salas de Estudio" en CourseEditorLayout.
  • Experience: página /courses/[id]/study-rooms con lista de salas activas/programadas y botón "Unirse". Acceso directo desde la página del curso como tarjeta de navegación.

Fase 39: Grabaciones BBB + OAuth2 AGS

  • Grabaciones BBB: GET /courses/{id}/study-rooms/{room_id}/recordings — llama a getRecordings de la API BBB y parsea XML de respuesta. Struct BbbRecording con record_id, name, state, start_time, end_time, participants, playback_url, duration_minutes.
  • Studio study-rooms: botón "Grabaciones" en salas finalizadas — panel expandible con lista de grabaciones + links de reproducción.
  • Experience study-rooms: sección de grabaciones en salas finalizadas con botón toggle y lista de grabaciones con links.
  • OAuth2 AGS (handlers_lti_consumer.rs): POST /lti/tools/{tool_id}/ags-score — token caching en tabla lti_ags_tokens, client_credentials grant, POST de scores al ags_lineitem_url del LMS externo. Modo dual: HMAC legacy sigue funcionando.
  • Migración AGS: ALTER TABLE lti_external_tools agrega campos ags_client_id, ags_client_secret, ags_token_url, ags_lineitem_url. CREATE TABLE lti_ags_tokens.
  • Studio lti-tools: sección AGS colapsable en el formulario de creación — 4 campos opcionales (client_id, client_secret, token_url, lineitem_url).
  • api.ts: Interface BbbRecording, getStudyRoomRecordings() en Studio y Experience. Campos AGS en LtiExternalTool, CreateLtiExternalToolPayload, UpdateLtiExternalToolPayload.

Fase 40: Edición Colaborativa de Documentos 📝

  • Tabla lesson_collaborative_docs: migración con campos content TEXT, revision BIGINT, last_modified_by UUID. Índice único por (lesson_id, organization_id).
  • Backend: 3 endpoints — GET /lessons/{id}/collaborative-doc, PUT /lessons/{id}/collaborative-doc (concurrencia optimista por revision), GET /lessons/{id}/collaborative-doc/stream (SSE, polling 2s). Respuesta 409 con server_content/server_revision en conflicto.
  • Experience — CollaborativeDocEditor: componente SSE con autosave debounce 1.5s, toolbar Markdown básico (negrita, cursiva, H1/H2, listas), resolución de conflictos con diff visual (conservar la mía / usar la del servidor). Solo actualiza desde SSE si no hay cambios locales pendientes.
  • Experience — Lesson Player: sección "Documento Colaborativo" integrada en la página de la lección, después de la pizarra colaborativa.
  • Studio: página /courses/[id]/lessons/[lessonId]/collaborative-doc con metadatos (revisión, palabras, caracteres, última edición) + vista previa + botón "Borrar documento". Link desde el breadcrumb del editor de lección.
  • api.ts Studio + Experience: funciones getLessonCollaborativeDoc, updateLessonCollaborativeDoc, interfaces CollaborativeDoc, UpdateCollaborativeDocPayload, UpdateCollaborativeDocResponse.

Próximas Prioridades:

  1. Notificaciones en tiempo real — SSE GET /notifications/stream en LMS emite actualizaciones cada 3s cuando cambia el recuento de no leídas o llega una nueva notificación. NotificationCenter.tsx reemplaza polling de 5 min por EventSource; se cierra al desmontar el componente.
  2. Progreso del curso — Endpoint ligero GET /courses/{id}/progress en LMS con progress_percentage, completed_lessons, total_lessons. Barra de progreso integrada en la página del curso (visible solo al estar inscrito): muestra % actual, verde al completar 100%. getCourseProgress() en api.ts.

Fase 41: Operaciones de Instructor y Experiencia del Estudiante 🎓

  • A. Panel de Instructor Operacional — Vista unificada por curso: lista de alumnos con % de progreso en tiempo real, alertas de "estudiante en riesgo" (sin actividad en X días / bajo rendimiento), acción rápida para enviar notificación. (Implementado: tabla enriquecida en Studio con progreso, promedio, última actividad, semáforo de riesgo y modal de notificación directa al alumno.)
  • B. Anotaciones en Lecciones — Los alumnos pueden dejar notas privadas en lecciones (timestamp en video, posición en texto). Panel "Mis Notas" para repasar todo el contenido anotado.
  • C. Sistema de Mentoría — Asignación de instructor/tutor a grupos de alumnos. Panel de seguimiento con mensajería 1-a-1 y visibilidad del progreso del grupo asignado.
  • D. Importación/Exportación de Cursos — Backup completo en JSON portátil (estructura + contenido + preguntas). Restauración/duplicación de cursos.
  • F. Evaluación entre Pares Mejorada — Asignación automática con rúbricas configurables. Calificación promediada pares + instructor con peso configurable.

Fase 42: Dashboard Financiero 💰 (Pendiente)

  • Dashboard Financiero (Mercado Pago) — Resumen de ingresos por curso, conversión inscripción gratuita → paga, reembolsos, proyección mensual. Solo visible para admin.