Academia Deltamontero · Documentación
Arquitectura

Discrepancias y puntos por confirmar

Diferencias entre la documentación del repositorio y el código, y datos de arquitectura que deben confirmarse antes del cierre.

Esta sección describe la arquitectura según el código. Cuando un documento del repositorio dice otra cosa, se siguió el código y la diferencia queda anotada aquí.

Documentación frente al código

TemaLo que dice el documentoLo que hace el código
Etiquetas de Traefik en producciónREADME.md: "los labels en docker-compose.yml se detectan automáticamente" en CoolifyLas etiquetas están comentadas a propósito: con Coolify producían dos servicios para el mismo router y un error 502. Coolify genera su propia ruta desde Domains
Cabeceras y límite de peticionesCLAUDE.md presenta moodle-headers (X-Forwarded-Proto) como configuración crítica de Traefikdynamic/moodle.yml solo se usa en modo standalone. En producción no se aplica; Moodle usa sslproxy y no depende de esa cabecera
Servicio RAGREADME.md: Python FastAPI + ChromaDB; docker-compose.yml conserva un bloque de ChromaDB comentadoLa decisión vigente (docs/roadmap.md, CLAUDE.md) es Dify. rag-service/ está vacío
Conector local_dify_syncCLAUDE.md lo muestra en la estructura de plugins/No existe
local_team_managementPlugin de la Fase 3 por desarrollarCarpeta vacía; la gestión de equipos está implementada en local_deltamodules
Pines de pluginsCLAUDE.md (banner) y roadmap_v4_gaps.md G-1: plugins en ramas o en HEAD sin fijar, tarea F1.0 pendienteEl Dockerfile fija core y plugins a commits exactos con git-at; solo local_ai_manager, tiny_ai y block_ai_chat van por etiqueta
Versiones de pluginsREADME.md: MOODLE_405_STABLE, stable, latest, etc.Commits exactos (ver Plugins y componentes)
Lista de pluginsREADME.md y CLAUDE.md no mencionan webservice_mcp, local_deltamodules, local_deltacerts, quizaccess_deltagate ni los dataformatTodos están en la imagen
Política de contraseñasREADME.md: mínimo 10 caracteres "mayúsculas + números"requireupper = 0: la mayúscula no es obligatoria; sí letras, números y minúsculas
MFACLAUDE.md lista "MFA (nativo)" como plugin confirmadoSolo se exige a los super administradores
Dirección de producciónCLAUDE.md, README.md y .env.example: https://learning.deltamontero.net detrás de CloudflareHoy la Academia se usa en la red interna de la empresa en http://192.168.0.192 (docs/drp.md). La publicación con dominio y Cloudflare está planificada
Estructura de cursosCLAUDE.md: módulos modulo_1 a modulo_7 y Formación Líderes, según academia_dm_contenido.jsonLa estructura vigente sigue los 12 módulos del Manual (manual-academia.json: m1_induccion_corporativa … m12_clientes_desarrollos), más la Prueba Técnica de Selección y el curso de apoyo de IA. "Formación Complementaria — Líderes" se integró al Módulo 6
Formato del respaldoREADME.md: .tar.gzbackup.sh genera .tar con su .sha256
Cron del respaldoREADME-backup.md, ejemplo manual con 0 2 * * *setup-backup.sh convierte la hora de Ecuador a la del servidor (en UTC, 0 7 * * *)
Portada sin sesiónComentario de db/hooks.php: "Portada sin sesión → login"La portada muestra la página institucional con los tres accesos (landing.php); ya no redirige al login
Acceso de postulantesconfigure-candidate-access.php: clave de grupo por área y consulta LOPDP como actividadEl flujo vigente es el de local_candidate_enrollment con códigos de acceso; el script anterior sigue en la imagen
RAG caseroEl plan oficial es DifyExisten la tabla local_deltamodules_chunks e import-rag-chunks.php (embeddings de Gemini), marcados para no ejecutarse aún

Discrepancias resueltas

TemaAntesEstado actual del código
Clave de GroqCLAUDE.md decía que la clave del chat se toma de la variable de entorno, pero configure-ai-groq.php solo corría a mano: cambiar GROQ_API_KEY en Coolify no actualizaba la clave guardadamoodle-config.sh ejecuta configure-ai-groq.php en cada despliegue (paso critico, antes de las cuotas de IA) cuando GROQ_API_KEY está definida. Cambiar la clave en Coolify y hacer Redeploy basta. Sin la variable se conservan la instancia y la clave guardadas
Datos personales y Groqroadmap_v4.md F6 pide que los datos personales no lleguen al LLM; el agente de acciones enviaba al modelo nombres, correos y cédulasEl agente de acciones reemplaza cédulas (10 dígitos), RUC (13 dígitos) y correos por marcadores (CEDULA_1, RUC_1, correo1@dato.oculto) antes de enviar el mensaje, el historial y los resultados de las herramientas; la tabla de equivalencias vive solo en la sesión y el dato real se restaura dentro de la plataforma. Los nombres sí viajan. El chat informativo general (respuestas sin herramientas) envía el texto tal como se escribe. Ver Inteligencia artificial
Proveedores de privacidadlocal_deltamodules se declaraba como plugin sin datos personales (null_provider) y local_candidate_enrollment no tenía proveedorAmbos tienen proveedores de privacidad completos: declaran sus tablas, exportan y borran o desvinculan los datos de una persona desde la herramienta de privacidad de Moodle
Huésped de producciónCLAUDE.md y README.md: máquina virtual de Proxmox; docs/drp.md: contenedor de ProxmoxConfirmado: contenedor LXC de Proxmox (172246) con Coolify dentro. TI preparó un segundo contenedor (12030) para la mudanza prevista
Datos personales en el códigoCédulas en people::USERNAME_FIXES, contraseñas publicadas en create-second-superadmin.php y listas de personas en scripts de aprovisionamientoYa no están en el código actual (assign-users-to-cohorts.php se eliminó). Siguen en el historial de Git: ver Pendientes operativos

Puntos por confirmar

PuntoCon quién
Sistema operativo y recursos asignados al contenedor de producción (172246)TI
Fecha de publicación con el dominio learning.deltamontero.net y Cloudflare (hoy solo red interna)TI
Endurecimiento CIS v8 y firewall ufw limitado a Cloudflare (al publicar con dominio)TI
Modo SSL de Cloudflare y origen del certificado del servidor (al publicar con dominio)TI
Controles equivalentes a moodle-headers y moodle-ratelimit en Coolify o CloudflareTI
Resolvedor de certificados TLS en el modo standalone (no está en traefik.yml)Desarrollo
Zona horaria del sistema operativo de los contenedores (no se define TZ)Desarrollo
Sincronización NTP del nodo Proxmox (reloj adelantado el 2026-10-06)TI
Orden de ejecución de los scripts de aprovisionamiento en una instalación desde ceroDesarrollo
Qué videos están en Cloudflare R2, cómo se insertan y migración de la cuenta a la empresaDesarrollo y TI
Destino de la copia externa cifrada de los respaldosTI
Snapshot de Proxmox y gestor de contraseñas para las variables de entornoTI
Servicio de la app móvil (enablemobilewebservice) y su alcanceDesarrollo
Texto final del aviso de datos del postulante y revisión legal de la frontera de datos con Groq (LOPDP; los nombres y el chat general sí llegan al proveedor)Talento Humano y asesoría legal
Política de retención de datos personales (fuera del registro de correos, que guarda 180 días)Talento Humano y asesoría legal
Protocolo de integración con PowerBuilderTI
Relación entre el RAG casero preparado y el plan con DifyDesarrollo

El estado general del proyecto y sus riesgos están en El proyecto; los pendientes de operación, en Operación.

En esta página