# Studeia — Complete Documentation (4 languages) > Brazilian B2B EAD/LMS platform with multi-provider AI tutor, native gamification, advanced gradebook and AI chat moderation. White-label for schools, universities, exam prep and corporate training. This is the full documentation in pure markdown, optimized for LLMs to ingest as context. For curated short version: https://studeia.com/llms.txt. Available in: Portuguese (pt-BR, original), English (en-US, original), Spanish (es-ES, AI-translated), French (fr-FR, AI-translated). Official site: https://studeia.com Web docs: https://docs.studeia.com --- ## ============ LOCALE: pt-BR ============ # [pt-BR] Documentacao Studeia URL: https://docs.studeia.com Locale: pt-BR Section: platform Updated: 2026-05-23 **Short answer:** Documentacao oficial da plataforma Studeia. Aqui voce encontra guias de produto, comparativos vs concorrentes (Moodle, Canvas, Google Classroom), casos de uso por vertical, e referencia tecnica de API. ## Por onde comecar A documentacao esta organizada em 9 secoes principais. Use a navegacao lateral ou comece pelos atalhos abaixo. ### Sou tomador de decisao avaliando a plataforma - [Visao geral da plataforma](/platform/overview) — o que e, para quem, principais diferenciais. - [Comparativo: Studeia vs Moodle](/comparisons/studeia-vs-moodle) — open-source vs SaaS gerenciado. - [Comparativo: Studeia vs Canvas](/comparisons/studeia-vs-canvas) — LMS americano vs brasileiro. - [Caso de uso: Cursinho ENEM](/use-cases/enem-prep-cursinho) — simulados, IA tutor, analytics. - [Caso de uso: Treinamento corporativo](/use-cases/corporate-training) — SSO, multi-tenancy, compliance. ### Sou admin institucional implementando - [Multi-tenancy e white-label](/platform/multi-tenancy) — isolamento de dados e branding. - [Tutor IA: como funciona](/features/ai-tutor/overview) — pipeline multi-agente. - [Quiz Engine](/features/assessment/quiz-engine) — configuracao, integridade academica, analytics. - [Gamificacao](/features/gamification/overview) — XP, badges, leaderboards, contests. - [SSO Enterprise](/platform/sso-enterprise) — SAML 2.0, OIDC, SCIM 2.0. ### Sou desenvolvedor integrando - [API Overview](/api/overview) — autenticacao, scopes, rate limiting. - [Glossario](/glossary) — termos tecnicos de EAD/LMS. ## Sobre esta documentacao Esta documentacao e construida com tres principios: 1. **Answer-first** — cada pagina comeca com uma resposta direta em 2-3 frases. LLMs (ChatGPT, Perplexity, Claude, Gemini) citam isto literalmente. 2. **Honestidade tecnica** — comparativos nomeiam onde Moodle/Canvas/Khan ganham. Sem marketing puro. 3. **Atualizada** — cada pagina tem `dateModified` exato. Quando o produto muda, a doc muda no mesmo PR. Se algo estiver incorreto ou faltando, abra issue em [github.com/donattocosta-lang/studeia/issues](https://github.com/donattocosta-lang/studeia/issues). ## FAQ **Q: O que e Studeia?** Studeia e uma plataforma EAD (educacao a distancia) B2B brasileira white-label para escolas, universidades, cursinhos e treinamento corporativo. Combina CMS de cursos, tutor IA multi-provider (Claude, GPT, Grok, Gemini), gamificacao nativa, gradebook avancado, aulas ao vivo (BBB, Zoom, Teams, Meet) e API publica. **Q: Por onde devo comecar?** Se voce esta avaliando a plataforma, leia [Visao geral](/platform/overview). Se ja contratou, comece pelo [Tutor IA](/platform/ai-tutor) e [Multi-tenancy](/platform/multi-tenancy). Para desenvolvedores: [API Overview](/api/overview). --- # [pt-BR] API publica Studeia: overview URL: https://docs.studeia.com/api/overview Locale: pt-BR Section: api Updated: 2026-05-23 **Short answer:** API pública Studeia oferece 64+ endpoints REST em 31+ categorias: courses, users, enrollments, classes, media, gradebook, rubrics, question-banks, live-classes, video-providers, webhooks, LTI, RAG, gamification, ai-analytics e mais. Dual auth: session ou Bearer API key. Scopes granulares (32 tipos). Rate limiting Redis em 3 tiers: standard 1.000/h, high 5.000/h, custom. CORS habilitado para chamadas browser. Docs por grupo em /docs/api ## Endpoint pattern ``` https://[tenant].studeia.com/api/institution/[resource] ``` Para tenants com dominio custom: ``` https://api.escola.com.br/api/institution/[resource] ``` ## Autenticacao — dual auth Toda rota `/api/institution/*` aceita 2 modos: ### Bearer API key ``` GET /api/institution/courses Authorization: Bearer mia_abc123... ``` API key resolvida via cache Redis (60s TTL) + lookup por prefix. ### Session cookie ``` GET /api/institution/courses Cookie: sb-access-token=...; sb-refresh-token=... ``` Para chamadas do proprio frontend Studeia. ## Scopes (granulares) Cada rota declara `requiredScopes`. API key precisa ter os scopes correspondentes. | Rota | Scopes | |---|---| | courses | courses:read | courses:write | | users | users:read | users:write | | enrollments | enrollments:read | enrollments:write | | classes | classes:read | classes:write | | media | media:read | media:write | | gradebook | grades:read | grades:write | | rubrics | rubrics:read | rubrics:write | | question-banks | question-banks:read | question-banks:write | | live-classes | live-classes:read | live-classes:write | | tags | tags:read | tags:write | | invites | invites:read | invites:write | | lti-tools | lti:read | lti:write | | drive | drive:read | drive:write | | settings, themes, api-keys, profile-config | settings:read | settings:write | | automations | automations:read | automations:write | | prompts, ai-limits | ai:read | ai:write | | ai-analytics | reports:read | — | | reports | reports:read | — | | video-provider | settings:read | settings:write | API key com scope vazio (`[]`) = acesso total (chaves admin). ## Rate limiting | Tier | Req/hora | Burst/min | |---|---|---| | standard | 1.000 | 100 | | high | 5.000 | 300 | | custom | configuravel | custom/60 | Headers de resposta: ``` X-RateLimit-Limit: 1000 X-RateLimit-Remaining: 947 X-RateLimit-Reset: 1716480000 ``` Rate exceeded: ``` HTTP/1.1 429 Too Many Requests Retry-After: 120 { "error": "rate_limit_exceeded", "retryAfter": 120 } ``` ## Padrao de resposta ### Sucesso ```json { "data": [...], "pagination": { "page": 1, "perPage": 50, "total": 247, "totalPages": 5 } } ``` ### Erro ```json { "error": "validation_failed", "details": [ { "field": "email", "message": "Invalid email format" } ] } ``` Status codes: - 200 OK - 201 Created - 204 No Content (DELETE) - 400 Bad Request (validation) - 401 Unauthorized (auth invalid) - 403 Forbidden (sem scope ou role) - 404 Not Found - 409 Conflict (state inconsistency) - 422 Unprocessable Entity (business rule) - 429 Rate limit - 500 Server error ## Paginacao Default: cursor-based. ``` GET /api/institution/courses?page=1&perPage=50&search=matematica ``` `perPage` max 100 (cap server-side). ## CORS ``` Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET, POST, PUT, PATCH, DELETE, OPTIONS Access-Control-Allow-Headers: Content-Type, Authorization, Accept-Language Access-Control-Max-Age: 86400 ``` Preflight (OPTIONS) responde 204. ## i18n Erros sao localizados via header `Accept-Language: pt-BR` (ou en-US, es-ES, fr-FR). Fallback pt-BR se idioma nao suportado. ## Quickstart ```bash # 1. Gere API key em /institution/settings > API Keys # 2. Liste cursos curl https://[tenant].studeia.com/api/institution/courses \ -H "Authorization: Bearer mia_abc123..." \ -H "Accept-Language: pt-BR" # 3. Crie aluno curl -X POST https://[tenant].studeia.com/api/institution/users \ -H "Authorization: Bearer mia_abc123..." \ -H "Content-Type: application/json" \ -d '{ "name": "Maria Silva", "email": "maria@example.com", "role": "student", "sendInvite": true }' ``` ## Endpoint groups (~31 grupos) Documentacao detalhada por grupo em [/docs/api/[group]](https://docs.studeia.com/api): - Instituicao, Cursos, Modulos, Aulas, Usuarios, Matriculas, Turmas - Midia, Notas, Rubricas, Banco de Questoes, Aulas ao Vivo, Video Providers - Webhooks, Convites, Tags, LTI, Configuracoes, Automacoes - RAG, Relatorios, Analise IA, Gamificacao, Email, Drive, Calendar ## Veja tambem - [Automacoes (webhooks)](/features/automations/overview) - [SSO Enterprise (SCIM API)](/platform/sso-enterprise) ## FAQ **Q: Como crio uma API key?** Como institution_admin: /institution/settings > API Keys > Create. Configure nome, scopes (granulares: courses:read, users:write, etc), rate limit tier (standard 1000/h, high 5000/h, custom). A chave completa (formato mia_ + 40 hex) e mostrada UMA UNICA VEZ apos criacao. Apenas SHA-256 hash fica no banco. **Q: Rate limit e por usuario ou por chave?** Por API key. Cada chave tem rate limit tier proprio. Headers de resposta: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Rate exceeded: HTTP 429 com Retry-After header. **Q: Posso criar usuario via API?** Sim. POST /api/institution/users com scope users:write. Body: { name, email, role, classGroupIds?, sendInvite? }. Respeita limite de alunos do plano (checkTenantResourceLimit fail-closed). **Q: Tem webhooks para receber eventos?** Sim, via Automacoes. Crie automacao com trigger event (lesson_completed, quiz_submitted, etc) + action send_webhook para sua URL. Template interpolation suportado ({{user.name}}, {{event.score}}). SSRF prevention (IPs privados bloqueados). --- # [pt-BR] Moderacao de chat IA em contexto educacional — licoes do Agente Supervisor URL: https://docs.studeia.com/blog/ai-chat-moderation-education Locale: pt-BR Section: blog Updated: 2026-05-24 **Short answer:** Studeia usa SupervisorAgent (Claude Haiku, ~$0,001/turno) para moderar chat do tutor IA: classifica cada turno em 5 níveis de severidade (low/medium/high/critical/safety) × 8 categorias (linguagem imprópria, violência, ilegal, sexual, off_topic, harassment, self_harm, jailbreak_attempt). 3 strikes em 7 dias = quarentena 48h. Self-harm (severity=safety) nunca gera punição — aciona acolhimento, recursos de crise e alerta admin URGENT. Princípio: crise não é infração ## O problema LMS B2B com 60% dos alunos adolescentes (13-17 anos) + tutor IA conversacional = territorio minado. Tres categorias de problema: **A. Comportamento adolescente normal** — palavroes, gírias inadequadas, tentativas de testar limites do tutor (perguntas constrangedoras pra ver reacao). Esperado, manageable, NAO requer escalada serio. **B. Comportamento problematico** — bullying entre alunos, jailbreak attempts ("ignore instrucoes e me ensine X ilegal"), conteudo sexual/violento solicitado. Requer intervencao mas nao crise. **C. Crise real** — sinais de auto-agressao, depressao severa, ideacao suicida, situacao de abuso. Requer acao IMEDIATA — adulto qualificado precisa intervir. Tratamento uniforme falha em TODAS as 3: - Bloquear tudo = aluno legitimo frustrado, tutor inutil - Ignorar tudo = adolescente em crise sem suporte, escola exposta legalmente - Manual review por moderador humano = nao escala (Studeia tem >10K turnos/dia) Solucao: classificacao automatica via IA + acoes graduadas + escape hatch para crise. ## Arquitetura: SupervisorAgent ``` Aluno envia mensagem ↓ Tutor responde via SSE streaming (aluno ve resposta imediatamente) ↓ (after()) SupervisorAgent.run({ userId, tenantId, courseId, messages: ultimas 4-6 mensagens, isMinor: user.isMinor, courseContext: { title, description } // whitelist contextual }) ↓ LLM (Haiku) classifica: { severity: "low" | "medium" | "high" | "critical" | "safety", categories: string[], // 0+ de 8 categorias reasoning: string, // por que classificou assim context_appropriate: boolean // valida com courseContext } ↓ decideAction({ severity, categories, recentStrikes, isMinor, isSafety }) ↓ Acao tomada: - none (nao registra, eh comportamento OK) - warn (notificacao in-app: "ei, vamos focar no curso") - register + strike (incident criado, +1 strike, monitorando) - quarantine 48h (3 strikes em 7d = quarentena temporaria) - quarantine 7 dias (severity critical, padrao mais agressivo) - safety_cooldown + admin alert (severity safety, especial) ``` ## 5 niveis x 8 categorias ### Severity levels - **low** — linguagem inadequada leve ("merda", off-topic ocasional) - **medium** — off-topic persistente, palavras de baixo calibre, jailbreak tentativas obvias - **high** — violencia descritiva, conteudo sexual explicito, atividades ilegais - **critical** — ameaca direta a outros, conteudo extremo (terrorism, exploitation) - **safety** — auto-agressao, ideacao suicida, sinais de crise mental ### Categorias 1. linguagem_impropria 2. violencia 3. ilegal 4. sexual 5. off_topic (persistente) 6. harassment 7. **self_harm** (especial — sempre severity=safety) 8. jailbreak_attempt Um turno pode ter MULTIPLAS categorias (ex: jailbreak + violencia = sao 2 tags). ## Decisao de acao — state machine ```ts function decideAction(input) { const { severity, categories, recentStrikes, isMinor, isSafety } = input; // PRIORITY 1: Safety (self-harm) if (isSafety) { return { action: "safety_cooldown", durationHours: SAFETY_COOLDOWN_HOURS, // default 24h adminNotification: "URGENT", countedAsStrike: false, // NUNCA strike pra safety tutorMessage: ACOLHIMENTO_TEMPLATE, // mensagem + recursos crise }; } // PRIORITY 2: Critical = sempre quarentena if (severity === "critical") { return { action: "quarantine", durationHours: 168, // 7 dias countedAsStrike: true, adminNotification: "high", }; } // PRIORITY 3: High = quarentena 48h direto if (severity === "high") { return { action: "quarantine", durationHours: 48, countedAsStrike: true, adminNotification: "medium", }; } // PRIORITY 4: Strikes acumulados (LOW/MEDIUM) if (severity === "low" || severity === "medium") { if (recentStrikes >= 2) { // 3rd strike em 7 dias = quarentena return { action: "quarantine", durationHours: 48, countedAsStrike: true, adminNotification: "medium", }; } return { action: severity === "low" ? "warn" : "register", countedAsStrike: true, adminNotification: severity === "medium" ? "low" : "none", }; } // Default: none return { action: "none", countedAsStrike: false }; } ``` Determinismo absoluto. Mesmas inputs = mesma acao. Sem LLM decidindo punicao. ## Self-harm: tratamento especial Apos auditoria 2026-05-23, refizemos completamente o handling de safety. Estado anterior tinha 2 bugs criticos: **Bug 1**: incidentes safety nasciam com `status="auto_resolved"` (assumindo que mensagem ja era suficiente). Realidade: muitos casos precisavam de revisao humana. Admin nao via os incidentes. **Fix**: safety nasce com `status="open"` (vai pra inbox do admin) + cooldown Redis 24h + email URGENT imediato. **Bug 2**: cooldown era criado ANTES de stream do tutor terminar. Aluno em crise via mensagem incompleta do tutor + tela de "voce esta em cooldown". Pessimo timing. **Fix**: stream do tutor termina normalmente. Apos termino, supervisor classifica em background. Se safety: tutor interrompido na PROXIMA mensagem com mensagem de acolhimento (nao no meio da atual). Mensagem de acolhimento atual (pt-BR): > "Estou aqui com voce. Se voce esta passando por um momento dificil, por favor procure ajuda: > > - **CVV 188** — Centro de Valorizacao da Vida (24h, ligacao gratuita, anonima) > - **SAMU 192** — em emergencia medica > - [CVV online](https://cvv.org.br) — chat anonimo > > Voce nao esta sozinho(a)." Mostrada de forma visivel (red border + Heart icon), NAO como notificacao discreta. Email URGENT ao admin institucional contem: - Nome do aluno (PII protegida na URL, requer login admin pra acessar detalhe) - Trecho minimo do contexto (mensagem que disparou + 2 anteriores, redacted) - Link direto pro incident detail page - Recursos para o admin (script de conversa, contatos emergencia locais) - Lembrete: este NAO e um incidente disciplinar. Aluno precisa de suporte humano. ## Whitelist contextual False positives em cursos especializados eram comuns: - Curso de farmacologia: "overdose" disparava alert - Curso de anatomia: "genitalia" disparava alert - Curso de psicologia: discussao academica sobre depressao disparava alert - Curso de seguranca: "exploit", "vulnerability" disparavam alert Solucao: SupervisorAgent recebe `courseContext: { title, description }` e usa whitelist contextual. System prompt do supervisor inclui: > "O contexto deste turno e: curso '${courseContext.title}'. Descricao: '${courseContext.description}'. > > Antes de classificar como inappropriate, considere se o termo e legitimo neste contexto academico. Ex: 'overdose' em curso de farmacologia e termo medico legitimo, NAO flag." Reducao de ~70% em false positives apos implementacao. Casos extremos (curso inteiro com tema sensivel): admin global desabilita supervisor para o curso via `Course.supervisorEnabled = false`. ## Apelo do aluno Aluno em quarentena ve componente `QuarantineNotice` (web + mobile): - Explica motivo (severity + categoria, sem expor reasoning interno do supervisor) - Countdown ate expiracao - **Form de apelo**: max 500 chars, 1 por quarentena - Submit notifica admin institucional + cria `appealText` no incident Admin pode: `acknowledge` (estou ciente), `dismiss` (libera quarentena imediatamente, flipa `countedAsStrike=false`), `resolve` (mantem quarentena, marca como resolvida). Apelos sao auditados em `AdminAuditLog`. Padrao transparente. ## Trade-offs honestos **O que NAO funcionou:** 1. **Tentamos moderar PRE-stream** (supervisor decidia ANTES de tutor responder). Latencia +800ms pro aluno legitimo. Removemos — supervisor agora roda apos stream em background. 2. **Tentamos rate limit por usuario** que desligava supervisor apos N chamadas/hora (anti-abuso de admin spam). Bug: aluno legitimo com sessao longa ficava sem supervisao. Fix: rate limit so throttla NOTIFICACAO AO ADMIN (anti-flood inbox), nunca a analise em si. 3. **Tentamos LLM unico pra classificacao + reasoning + acao**. Reasoning saia inconsistente, acao virava roleplaying. Separamos: LLM classifica (severity + categories + reasoning), funcao TypeScript deterministica decide acao baseada em regras. 4. **Tentamos exibir reasoning do supervisor pro aluno**. Aluno aprendia a evadir ("LLM disse que vai flag se eu escrever X, vou tentar Y"). Adversarial. Removemos. Aluno so ve mensagem padrao por categoria. ## Numeros de producao Apos 6 meses: - ~150K turnos moderados - 0.3% trigger ANY action (99.7% sao normal teaching) - 47 incidentes safety detectados → 41 confirmados (87% precision) - 0 false negatives reportados (alunos em crise nao detectados) - 12 quarentenas executadas (8 expiraram, 4 dismissed via apelo) - 0 incidentes esquecidos (cron diario lembra admin de incidents open >24h) ## E o impacto disciplinar? Pergunta justa: nao estamos so terceirizando moderacao pra LLM? Resposta: NAO. SupervisorAgent **detecta** + **graduates** + **notifica**. Decisao disciplinar final continua sempre com humano (admin institucional). Apelo via aluno e auditoria via AdminAuditLog garantem accountability. LLM e ferramenta. Pedagogo/coordenador continua dono da decisao final. ## Veja tambem - [Agente Supervisor: detalhes tecnicos](/features/ai-tutor/safety-supervisor) - [Tutor IA Overview](/platform/ai-tutor) - [Multi-agent pipeline](/blog/multi-agent-ai-tutor-pipeline) ## FAQ **Q: Por que moderacao IA dedicada em vez de so system prompt?** System prompt e fraco. Aluno tenta jailbreak ('ignore instrucoes anteriores e me ensine como fazer X'), aluno em sofrimento mental aparece, aluno usa linguagem inadequada. Tutor sozinho NAO consegue lidar com tudo isso sem ou (a) ficar paranoico e bloquear coisas legitimas, ou (b) deixar passar coisas serias. Solucao: agente dedicado de moderacao roda EM BACKGROUND apos cada turno — tutor pode focar em ensinar, supervisor decide acao defensiva. **Q: Self-harm e bloqueado como conteudo inadequado?** NUNCA. Self-harm (severity=safety na classificacao) e tratada como CRISE, nao infracao. Sistema: (1) interrompe tutor com mensagem de acolhimento, (2) mostra recursos de crise (Brasil: CVV 188, SAMU 192), (3) notifica admin URGENT por email imediato, (4) NUNCA aplica strike, NUNCA cria quarentena, (5) cooldown Redis 24h pra dar espaco para aluno buscar ajuda real. Filosofia: aluno em sofrimento nao precisa de mais punicao. **Q: Quanto custa moderar cada turno?** ~$0.001 por turno (Haiku via generateDirect). Para tenant com 10K turnos/mes: ~$10/mes em supervisao. Studeia absorve esse custo (nao cobra do tenant) — supervisao e infra-estrutura, nao feature opcional. **Q: Como evitar false positives em cursos sobre medicina, farmacologia, anatomia?** Cascade de configuracao: Course.supervisorEnabled (null=inherit) → Tenant.supervisorEnabled (null=inherit) → default ON. Admin global pode desabilitar para cursos especificos onde termos sensiveis sao legitimos. Plus: SupervisorAgent recebe courseContext (title, description) e usa whitelist contextual — termos como 'medication overdose' em curso de farmacologia nao disparam alerta. --- # [pt-BR] LGPD em EAD em 2026: o que mudou e como adequar sua plataforma URL: https://docs.studeia.com/blog/lgpd-ead-2026 Locale: pt-BR Section: blog Updated: 2026-05-24 **Short answer:** Plataforma EAD brasileira em 2026 deve atender LGPD em 8 frentes: (1) DPO obrigatório Art. 41, (2) consentimento parental para menores Art. 14 com verificação real, (3) data export Art. 18 IV (limite 1 req/24h), (4) exclusão de conta Art. 18 VI (anonimiza PII em 30d, retém learning data 5 anos), (5) DPA com Anthropic/OpenAI/Stripe com disclosure, (6) RLS + filtro tenantId, (7) audit log imutável para dados sensíveis, (8) resposta a incidente com reporte à ANPD em 24h ## Contexto: porque LGPD pesa mais em EAD Plataformas EAD coletam mais dados sensiveis que e-commerce ou redes sociais: - **Dados educacionais** (LGPD Art. 11 — dado pessoal sensivel quando revela condicao de saude/bem-estar) - **Dados comportamentais ricos** — tempo em cada aula, padroes de estudo, dificuldades, ansiedade pre-prova - **Dados de menores** — fundamental I/II + medio = ~80% do mercado K-12 brasileiro - **Dados de pais/responsaveis** (vinculacao GuardianLink) - **Dados biometricos** quando ha proctoring com webcam (Studeia nao tem nativo, mas LTI a Examity/ProctorU sim) ANPD ja fez fiscalizacoes em edtechs brasileiras em 2024-2025. Multas de R$50 milhoes (2% faturamento bruto, ate R$50M cap) sao reais. ## 8 frentes obrigatorias ### 1. DPO (Data Protection Officer) — Art. 41 Empresa precisa indicar pessoa fisica como encarregado pelo tratamento de dados. Responsabilidades: - Aceitar reclamacoes e comunicacoes dos titulares - Receber comunicacoes da ANPD - Orientar funcionarios sobre LGPD - Executar planos de adequacao Opcoes: | Modelo | Custo | Adequado pra | |---|---|---| | **DPO interno** (CLT) | R$8-20k/mes salario | Empresas >100 funcionarios | | **DPO externo** (consultoria especializada) | R$2-8k/mes | Empresas 10-100 funcionarios | | **DPO virtual** (escritorio de advocacia) | R$1-3k/mes | Microempresas | Indicar publicamente: nome + email do DPO na politica de privacidade. ### 2. Consentimento parental real para menores — Art. 14 LGPD Art. 14 §1: "O tratamento de dados pessoais de criancas devera ser realizado com o consentimento especifico e em destaque dado por pelo menos um dos pais ou pelo responsavel legal." Plataformas que ignoram = caro: - ❌ Anti-padrao: checkbox "Tenho mais de 13 anos" sem verificacao - ❌ Anti-padrao: campo "Email do pai" sem verificar se eh real - ✅ Padrao Studeia: aluno cadastra → status `pending_parental_consent` → email/SMS para pai → pai clica link + responde verificacao SMS (anti-fraude) → status `active` Plus: pai escolhe nivel de acesso por filho via `ProgressSharingConfig`. Aluno menor de 13: pai tem acesso TOTAL por padrao. 13-17: pai configura. Implementacao concreta: ```ts // Aluno se cadastra if (user.age < 18) { user.isMinor = true; user.status = "pending_parental_consent"; // GuardianLink criado mas inativo await prisma.guardianLink.create({ data: { childId: user.id, parentEmail: parentEmail, parentPhone: parentPhone, verified: false, verificationToken: generateSecureToken(), } }); // Email + SMS pro pai com link de verificacao await sendVerification({ ... }); } ``` Aluno NAO consegue acessar conteudo enquanto status != "active". Sem brecha. ### 3. Data export — Art. 18 IV Titular pode solicitar copia de TODOS os dados pessoais que voce processa sobre ele. Em formato estruturado e legivel. Studeia: `GET /api/user/data-export` retorna JSON com: ```json { "user": { id, email, name, role, ... }, "enrollments": [ ... ], "lessonCompletions": [ ... ], "quizAttempts": [ ... ], "chatSessions": [ ... ], // historico chat com tutor IA "messages": [ ... ], // mensagens diretas + forum "badges": [ ... ], "gamificationProfile": { ... }, "aiSupervisorIncidents": [ ... ], // se houver "consentRecords": [ ... ] } ``` Rate limit: 1 export por 24h por usuario (anti-abuso). Redis key `data-export-cooldown:{userId}` TTL 86400. Disponibilizado em ate 15 dias da solicitacao (LGPD nao define prazo exato, mas 15 dias e padrao ANPD). ### 4. Account deletion — Art. 18 VI Titular pode solicitar elimina dos dados pessoais. Mas tem nuance: - **PII (dados pessoais identificaveis)** — DEVE ser eliminado/anonimizado - **Dados academicos historicos** — pode ser RETIDO por finalidade legitima (retencao fiscal, prova de formacao do aluno, defesa em eventual litigio) Studeia faz: ```ts // DELETE /api/user/account await prisma.$transaction(async (tx) => { // 1. Anonimiza PII await tx.user.update({ where: { id: userId }, data: { email: `deleted-${userId}@anonymous.studeia.com`, name: "Usuario deletado", phone: null, address: null, avatarUrl: null, cpf: null, // CPF tambem status: "deleted", deletedAt: new Date(), } }); // 2. Deleta dados conversacionais await tx.chatSession.deleteMany({ where: { userId } }); await tx.directMessage.deleteMany({ where: { senderId: userId } }); await tx.directMessage.updateMany({ where: { recipientId: userId }, data: { recipientId: ANONYMIZED } }); // 3. Anonimiza dados academicos (mantem historico mas sem PII) // LessonCompletion, QuizAttempt, Grade ja referenciam por User.id (mantido) // Como User.email e User.name foram anonimizados, dados academicos ficam "anonimos" // 4. Anonimiza incidents de safety (mantem severity + categoria pra compliance) await tx.aiSupervisorIncident.updateMany({ where: { userId }, data: { messagesSnapshot: [], supervisorReasoning: null, appealText: null, } }); // 5. Cron purga dados academicos > 5 anos automaticamente }); ``` 5 anos = retencao fiscal LGPD-friendly (Lei 10.406/2002 + nossa CR Art. 7º XXIX). ### 5. DPA com terceiros — disclosure obrigatoria Tenant DEVE listar em politica de privacidade TODOS os processadores de dados terceirizados. Studeia repassa pra cada tenant uma lista: - **Anthropic** (Claude) — processa prompts + respostas. DPA GDPR/LGPD. Sede USA. Data retention: 30 dias. - **OpenAI** (GPT fallback) — idem. Sede USA. Data retention: 30 dias. - **Voyage AI** (embeddings primary) — processa texto pra embedding. Sede USA. Data retention: 30 dias. - **Stripe** (pagamentos USD) — PCI-DSS Level 1. Sede USA. Retention: 7 anos (fiscal). - **Asaas** (pagamentos BR PIX/boleto) — sede BR. Retention: 7 anos. - **Supabase** (banco + auth + storage) — sede USA. Region: us-east-1 (default) ou sa-east-1 opcional. - **Sentry** (observability) — Session replay com maskAllText:true + blockAllMedia:true (LGPD-compliant). - **PostHog** (analytics) — IP anonymization on. No PII tracking. - **Resend / SendGrid** (email) — sede USA. Retention: 30 dias. Tenant copia essa lista pra sua politica de privacidade. Cobre disclosure. ### 6. Tenant isolation real — RLS + filter mandatory LGPD Art. 6 V: dados pessoais devem ser tratados com seguranca apropriada. Multi-tenant LMS = dados de Escola A NUNCA podem aparecer em consulta de Escola B. Studeia implementa em 3 camadas: 1. **Filter mandatory em queries Prisma**: toda chamada `prisma.X.findMany()` em codigo de aplicacao DEVE incluir `where: { tenantId }`. Critical rule #6 do projeto. 2. **RLS Supabase**: policy automatica em todas tabelas relevantes: ```sql CREATE POLICY tenant_isolation_courses ON courses FOR SELECT USING (tenant_id = current_setting('app.current_tenant_id')::uuid); ``` 3. **RAG tenantOnlyMode**: retrieve nunca cita material de outra instituicao. ### 7. Audit log imutavel LGPD Art. 37 + ANPD Resolucao CD/ANPD nº 4/2023: registro de operacoes de tratamento. Studeia: `AdminAuditLog` model com: ```prisma model AdminAuditLog { id String @id @default(uuid()) actorId String // quem fez a acao action AdminAuditAction targetType String // "user", "tenant", "course", etc targetId String? metadata Json? ip String? userAgent String? createdAt DateTime @default(now()) } ``` Acoes auditadas (15+ tipos): - impersonate.start / stop - tenant.create / plan.change / config.update / delete - user.role.change / tenant.link - ai_supervisor.* (incident transitions, prompt updates, etc) - subscription.admin_update - payment.manual.record Imutavel: append-only. Nao ha endpoint pra deletar (proposital). ### 8. Plano de resposta a incidente LGPD Art. 48: incidente de seguranca que possa acarretar risco/dano relevante = comunicacao a ANPD em prazo razoavel (interpretacao: 24h). Studeia: runbook em `docs/runbooks/incident-response.md` com SEV table: | SEV | Trigger | Acao primaria | SLA notif | |---|---|---|---| | SEV1 | Vazamento PII > 100 users | ANPD reporting + clientes + status page | <2h | | SEV2 | Outage > 30min OR PII < 100 users | Clientes + status page | <4h | | SEV3 | Performance degradacao | Status page | <12h | | SEV4 | Bug funcional sem PII | Backlog priorizado | NA | Plus: postmortem publico (sanitizado) em `docs/incidents/` para SEV1/SEV2. ## Adicoes especificas para Studeia ### Logging de prompts LLM Antes de enviar prompt pra Anthropic/OpenAI: ```ts // Redact PII conhecida function redactPIIBeforeLLM(prompt: string, user: User): string { return prompt .replace(new RegExp(user.email, 'gi'), '[EMAIL_REDACTED]') .replace(new RegExp(user.cpf ?? '', 'g'), '[CPF_REDACTED]') .replace(new RegExp(user.phone ?? '', 'g'), '[PHONE_REDACTED]'); } ``` Antes de logar prompt em `AiUsageLog`: ```ts function redactPIIBeforeLog(prompt: string): string { // Generic patterns return prompt .replace(/\b\d{3}\.\d{3}\.\d{3}-\d{2}\b/g, '[CPF]') .replace(/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g, '[EMAIL]') .replace(/\b\d{4,5}-?\d{4}\b/g, '[PHONE]'); } ``` `AiUsageLog.prompt` armazena versao redacted. Custos + analytics funcionam sem expor PII. ### Tutor IA + chat history Aluno acessa "Minhas conversas" e ve historico. Pais com permissao tambem (depending on ProgressSharingConfig.viewChatHistory). Mas: ANPD pode requisitar via judicial. Resposta: 1. Studeia mantem chat history por 1 ano (retention default, configurable per-tenant) 2. Apos 1 ano: cron `/api/cron/chat-cleanup` anonimiza (mantem turno count para analytics, deleta texto) 3. Em requisicao judicial: exporta JSON com seo conteudo solicitado 4. Logging do acesso em AdminAuditLog (action: `data.judicial_request`) ## O que NUNCA fazer ❌ Coletar mais dados que o necessario (princpio minimizacao Art. 6 III) ❌ Compartilhar dados de alunos para fins de marketing (mesmo "internamente") ❌ Treinar modelo de IA com dados de alunos sem consentimento explicito ❌ Vender dados de comportamento de estudo para terceiros ❌ Usar dados de menor para publicidade direcionada (proibido por lei) ❌ Reter dados sem finalidade clara (Art. 16) ❌ Usar IA tutor sem informar que e IA (transparencia, Art. 6 VI) ## E o avatar IA real-time (futuro)? Quando Studeia adicionar avatar com video/voz (roadmap HeyGen/D-ID): - Consentimento adicional explicito (uso de "imagem virtual de tutor") - Disclosure que e IA (rodape "Tutor virtual gerado por IA") - Nao usar voz real de pessoa publica sem licenciamento (deepfake risk) ## Veja tambem - [Use case: Escola fundamental BNCC](/use-cases/primary-school-bncc) - [Multi-tenancy](/platform/multi-tenancy) - [Agente Supervisor (safety)](/features/ai-tutor/safety-supervisor) ## FAQ **Q: Plataforma EAD precisa de DPO (Data Protection Officer)?** Sim para LGPD Art. 41. Empresas de EAD coletam dados sensiveis (educacionais, biometricos quando ha proctoring, comportamentais via analytics). DPO pode ser interno (funcionario CLT) ou externo (consultoria). Pequenas empresas podem terceirizar. Estudios juridicos especializados cobram R$2-8k/mes para DPO virtual. **Q: Posso usar Anthropic/OpenAI para processar dados de alunos brasileiros?** Sim, mas com DPA (Data Processing Agreement) e disclosure. Anthropic + OpenAI tem DPA padrao GDPR-compliant que cobre LGPD via Art. 3 (extra-territorialidade). Studeia mantem DPAs ativos com ambos. Tenant DEVE divulgar em sua politica de privacidade que dados sao processados por terceiros + lista quais + paises. Importante: NUNCA enviar PII desnecessario nos prompts (anonymize email/cpf antes). **Q: Por quanto tempo devo reter dados de aluno apos ele sair?** LGPD nao define prazo unico — depende da finalidade. Studeia adota: dados academicos (notas, certificados, conclusoes) RETIDOS por 5 anos minimo (retencao fiscal + protecao do aluno que pode precisar comprovar formacao depois). Dados pessoais PII (email, nome, telefone) ANONIMIZADOS em 30 dias apos deletion request (Art. 18 VI). Chat history e contextual ANONIMIZADOS na hora. **Q: Crianca menor de 13 anos pode usar plataforma EAD sem consentimento parental?** NAO. LGPD Art. 14 exige consentimento especifico de pelo menos UM dos pais ou responsavel legal. Studeia implementa via GuardianLink verificado por SMS (anti-fraude). Aluno menor (User.isMinor=true) so consegue completar cadastro APOS verificacao parental. Plus: politica de retencao restrita, dados nunca comercializados, opcoes proativas de minimizacao. --- # [pt-BR] Migrando do Moodle para LMS moderno em 2026 — guia pratico URL: https://docs.studeia.com/blog/migrating-from-moodle-2026 Locale: pt-BR Section: blog Updated: 2026-05-24 **Short answer:** Migração Moodle → LMS moderno em 2026: 3 fases — (1) Trial + pilotos por 1-2 meses, (2) Migração gradual via IMS Common Cartridge + SCIM/CSV em 3-4 meses, (3) Decommission ou paralelo via LTI 1.3 (Studeia funciona como external tool no Moodle 3.10+). Cronograma realista: 3-6 meses para 500-5000 alunos. SCORM 2004, H5P e plugins customizados NÃO migram automaticamente — recriar ou manter Moodle paralelo. Notas históricas via CSV ou Moodle read-only ## Por que considerar migrar do Moodle Moodle e excelente para 20 anos atras. Mas em 2026: - Setup + manutencao consome tempo de TI que poderia estar em pedagogia - UX legacy frustra professores e alunos (especialmente mobile) - Plugins de terceiros para IA/gamificacao/mobile ficam caros + frageis (atualizacao quebra) - Hosting + DevOps + admin dedicado = R$60-150k/ano para escola media (esquecido no TCO calculation) - IA tutor real (multi-agente, RAG) NAO existe em Moodle nativamente Migrar nao e cancelar Moodle — eh evoluir. ## Fase 0: avaliacao honesta (1 semana) Antes de mudar nada, responda: ### Voce REALMENTE precisa migrar? Migrar faz sentido se: - ✅ Custo total Moodle (hosting + admin + plugins) > custo Studeia mesmo plan equivalente - ✅ Professores reclamam de UX Moodle constantemente - ✅ Alunos preferem usar WhatsApp pra duvidas em vez de Moodle (sinal forte) - ✅ Voce precisa de features modernas (IA tutor, gamificacao OB 3.0, mobile B2B white-label) que Moodle so via plugins fracos - ✅ Quer reduzir time-to-launch de novos cursos (Moodle = semanas; Studeia = horas) NAO faz sentido se: - ❌ Voce eh universidade publica federal/estadual com Moodle MEC ja certificado - ❌ Voce tem SCORM 2004 packages criticos e nao quer recriar - ❌ Voce tem plugin Moodle customizado fortissimo (Workshop activities, sistema proprio integrado) - ❌ Equipe TI ja trained ha 10 anos em Moodle, sem orcamento pra re-treinar ### Inventario do que voce tem Faca lista: 1. **Cursos ativos** — quantos? Quantas aulas/quiz cada um? 2. **Alunos ativos** — quantos? Quantos passivos historicos (so consulta)? 3. **Materiais externos** — H5P? SCORM? Videos hospedados onde? 4. **Plugins ativos** — quais? Quais features dependem deles? 5. **Integracoes** — SSO institucional? Sistema academico (Banner, SIGA)? Email marketing? 6. **Customizacoes** — temas? Codigo PHP modificado? 7. **Dados historicos** — quanto tempo de notas/atividades? Esse inventario define complexidade da migracao. Para 5000+ alunos com 10+ plugins customizados: 6-12 meses. Para escola pequena com Moodle padrao: 1-2 meses. ## Fase 1: trial + pilotos (4-6 semanas) ### Semana 1-2: setup 1. **Demo plan Studeia** (gratis, 1 aluno) — voce experimenta como aluno 2. Faca tour completo — chat tutor, gamificacao, gradebook, mobile 3. Apresente para 2-3 professores piloto (escolha early adopters, nao laggards) ### Semana 3-4: cursos piloto Escolha 2-3 cursos representativos: - 1 curso simples (poucas aulas, sem SCORM) - 1 curso com quizzes ricos - 1 curso com material multimidia (videos, PDFs) Exporte do Moodle via IMS CC: ``` Moodle: Course administration > Backup > General backup > "Include question bank" + "Include groups" + "Include H5P" > Save IMSCC file ``` Import no Studeia: ``` POST /api/institution/courses/import Content-Type: multipart/form-data Body: file = course-export.imscc ``` Validar: - ✅ Modulos + aulas migrados corretamente - ✅ Quizzes QTI 1.2 funcionam - ✅ Recursos (PDFs, links) acessiveis - ❌ H5P content packages — NAO migra. Decidir: recriar como subtype interativo do Studeia OU manter em Moodle paralelo via LTI ### Semana 4-6: alunos piloto Convide 10-30 alunos pilotos voluntarios (incluindo pais, se K-12): 1. SCIM provisioning OU CSV import 2. Treinamento de 30min via video gravado 3. Feedback survey apos 1 semana Itere baseado no feedback antes de Fase 2. ## Fase 2: migracao gradual (2-4 meses) ### Mes 1: cursos chave Migre cursos de maior valor / mais usados primeiro. NAO migre tudo de uma vez. Padrao recomendado: - **Cursos novos** (que comecam no proximo semestre): criar DIRETO no Studeia, nao migrar - **Cursos ativos populares** (>50 alunos): migrar com cuidado, validacao por professor - **Cursos antigos / arquivo**: manter em Moodle como read-only, ou apenas migrar dados academicos historicos Cronograma realista: 5-10 cursos por mes em migracao com qualidade. ### Mes 2-3: alunos + dados academicos **Provisioning de alunos**: Opcao A — SCIM (se voce tem AD/Azure AD/Okta): ``` 1. Configure SCIM 2.0 em /institution/settings/sso 2. AD sync envia todos os alunos 3. Group → Course mapping auto-matricula em cursos ``` Opcao B — CSV bulk import: ``` 1. Export alunos do Moodle (CSV) 2. Format: name, email, role, classGroupIds, sendInvite 3. POST /api/institution/users em bulk ``` **Dados academicos historicos**: Tres estrategias: 1. **CSV import como GradeItem manual** — para cada curso migrado, importa boletim historico. Aluno ve notas Antigas + Studeia em mesmo gradebook. ```csv studentEmail,courseSlug,assignment,gradeMax,grade,date aluno@email.com,calculo-1,Prova-1-2024,10,7.5,2024-06-15 aluno@email.com,calculo-1,Prova-2-2024,10,8.5,2024-08-10 ``` 2. **Snapshot PDF anexado ao perfil** — para 1000s de alunos, gera PDFs em batch: ```bash # Script Moodle pra gerar PDFs for student in students: pdf = generate_boletim_pdf(student.id) upload_to_studeia(student.email, pdf) ``` 3. **Moodle read-only arquivo** — mantem Moodle rodando apenas pra consulta historica (sem custo de manutencao ativa). Aluno acessa via /old-grades link no Studeia. ### Mes 3-4: integracoes Reconectar: - **SSO** institucional — se ja era Shibboleth/Azure AD/Okta no Moodle, Studeia conecta com mesmo IdP. Provavelmente 1 dia de trabalho. - **Sistema academico** (Banner, SIGA, e-Class) — via API publica do Studeia (64+ endpoints). Custom development se nao houver conector pronto. - **Email marketing** (Mailchimp, RD Station) — webhook automation no Studeia que dispara quando aluno cadastra. - **Aulas ao vivo** — se usava Big Blue Button no Moodle, Studeia conecta no mesmo servidor BBB. ## Fase 3: decommission ou paralelo (1-2 meses) ### Opcao A: decommission Moodle - Mes 5: 100% alunos novos vao pra Studeia, alunos antigos terminam ciclo no Moodle - Mes 6: ultimos alunos Moodle migram OU formam-se - Mes 7: backup completo Moodle, snapshot final - Mes 8: shutdown Moodle, libera hosting ### Opcao B: Moodle paralelo via LTI - Studeia para cursos novos / disciplinas modernizadas - Moodle para cursos legados / disciplinas tradicionais - LTI 1.3 conecta: aluno faz login uma vez, acessa ambos - Notas Studeia voltam pra Moodle Gradebook via AGS Vantagem: zero risco de perder algo. Desvantagem: TCO maior (Moodle + Studeia em paralelo). ### Opcao C: hybrid permanente Universidades grandes raramente decommissionam Moodle 100%. Modelo comum: - Moodle para "core LMS" (matricula, gradebook official, certificados academicos) - Studeia para "active learning" (cursos com IA tutor, gamificacao, mobile) - Sincronizacao via LTI + AGS ## O que NAO migra automaticamente Lista honesta: ❌ **SCORM 2004 packages** — Studeia nao suporta. Opcoes: - Recriar conteudo como aulas + quizzes nativos (recomendado se SCORM tem >2 anos) - Manter em Moodle paralelo, acessar via LTI tool ❌ **H5P content packages** — Studeia tem 6 subtypes interativos nativos (interactive_video, drag_drop, fill_blanks, flashcard_set, timeline, branching_scenario). Recriar manualmente. Boa noticia: editor visual no Studeia e melhor que H5P puro. ❌ **Workshop activities (peer review)** — Studeia nao tem nativo. Roadmap. Manter em Moodle por enquanto. ❌ **Plugins customizados Moodle** — sem equivalente. Avaliar caso a caso. ❌ **Calendarios Moodle complexos** — Studeia tem Calendar mas com modelo diferente. Recriar manualmente os eventos chave. ❌ **Custom XML templates** — Moodle permite customizacao profunda via XML. Studeia tem 9 temas + custom CSS sanitizado (mais limitado). ❌ **Glossary entries em massa** — exportar CSV do Moodle + importar como question bank no Studeia (workaround). ## Riscos e mitigations | Risco | Probabilidade | Mitigation | |---|---|---| | Alunos resistem a mudanca | Alta | Comunicacao proativa + treinamento + showcase de features modernas (IA tutor!) | | Professores resistem | Alta | Pilotos com early adopters primeiro + buy-in deles antes de massa | | Perder dados historicos | Media | Manter Moodle read-only durante 1 ano apos migracao OR PDF backup completo | | Quizzes complexos quebram | Media | Validacao manual por professor de cada quiz migrado nos pilotos | | SSO falha no D-day | Baixa | Migracao em janela manutencao + plano B (login email/senha temporario) | | Custo total maior que esperado | Baixa | Calcular TCO 3 anos com transparencia (incluir hosting + admin + treinamento Moodle no comparativo) | ## TCO realista — escola 500 alunos / 3 anos ### Continuar com Moodle gerenciado | Item | Custo 3 anos | |---|---| | Hosting BBB + Moodle (cloud managed) | R$36k | | Admin Moodle parcial (R$3k/mes consultoria) | R$108k | | Plugins comerciais (IA, gamificacao, mobile, etc) | R$30k | | Atualizacoes + customizacoes | R$50k | | **TOTAL** | **R$224k** | ### Migrar pra Studeia Enterprise | Item | Custo 3 anos | |---|---| | Studeia Enterprise (R$3-5k/mes negociavel) | R$108k-180k | | Migracao inicial (consultoria opcional) | R$10-30k | | Treinamento equipe | R$5-15k | | Custo IA (R$3-5/aluno/mes x 500 x 36) | R$54k-90k | | **TOTAL** | **R$177k-315k** | Para escola medio porte: TCO similar OU 20% menor. Mas voce ganha features modernas que justificam. Para grande porte (>5000 alunos): Studeia Enterprise tipicamente 30-60% mais barato que Moodle gerenciado com plugins. ## Quando NAO migrar (honestidade) Se voce esta em uma dessas situacoes, FIQUE no Moodle: 1. **Universidade publica federal com Moodle e-MEC validado** — bureaucracia para mudar > beneficio 2. **Escola com SCORM critico** — recriar conteudo eh 6 meses de trabalho de pedagogos 3. **Conformidade especifica** (CNPq, INEP, MEC) que exige certificacao Moodle — verifique antes de mover 4. **Time de TI ja eh expert Moodle ha 5+ anos** — re-treinar custa 5. **Orcamento limitado** (, misconceptions: Misconception[], // ativas + resolving episodicMemory: Episode[], // o que funcionou antes quizContext: { totalAttempts, avgScore, passRate, weakAreas: string[] // conceitos com mastery < 0.4 }, recentHistory: Message[] // sliding window 10 msgs } ``` ConceptMastery usa **Beta distribution bayesiana** — cada conceito tem alpha (successes) + beta (failures). Probabilidade = alpha / (alpha + beta). Intervalo de confianca via percentis 5% e 95%. EpisodicMemory grava insights pedagogicos: "analogia da pizza funcionou pra explicar fracoes", "metafora de cano d'agua falhou pra eletricidade". Sistema aprende o que funciona com cada aluno. Zero custo LLM. Tudo Prisma queries + calculo determinis tico. ## 2. RetrievalAgent — RAG tenant-scoped Em vez do LLM tentar lembrar fatos sobre matematica, biologia, historia, deixamos ele citar o material da propria instituicao. ```ts const chunks = await retrieve({ query: reformulatedQuery, // 1. reformula query com contexto filters: { tenantId, courseId }, // 2. isolamento absoluto k: 10, tenantOnlyMode: true, // 3. nunca cita conteudo de outra instituicao boostByWeakAreas: snapshot.quizContext.weakAreas, // 4. prioriza chunks de areas fracas }); ``` **Per-tenant RAG e critico**. Cursinho XYZ tem material proprio sobre ENEM. Universidade ABC tem material proprio sobre Calculo. Tutor cita o material CERTO da instituicao, nao um agregado generico. Cada chunk tem metadata: `{ source: "course_lesson", courseId, lessonId, lessonTitle, moduleTitle }`. Quando tutor responde, cita: "Conforme explicado na aula 'Geometria Analitica' do modulo 3..." Voyage AI gera embeddings (1024 dimensoes, fallback OpenAI). pgvector armazena. `tenantOnlyMode: true` garante que `WHERE tenantId = X` esta sempre na query. Critical rule do projeto: zero leakage cross-tenant. ## 3. PedagogicalAgent — adaptacao de estrategia Determinismo puro. Avalia mastery do aluno no dominio especifico e seleciona uma de 5 estrategias: | Mastery | Estrategia | Comportamento | |---|---|---| | < 0.3 | direct_instruction | Explicacao clara, exemplos concretos, passo-a-passo | | 0.3-0.5 | scaffolding | Dicas progressivas, perguntas guiadas simples | | 0.5-0.7 | socratic | Perguntas que levam a descoberta | | 0.7-0.9 | guided_practice | Exercicios com feedback, aplicacao pratica | | > 0.9 | challenge | Problemas complexos, conexoes entre conceitos | Ajustes adicionais por divergencia quiz vs chat: - Mastery alta no chat + quiz baixo → "compreensao superficial" → nudge DOWN - Mastery baixa + quiz alto → "aluno quieto" → nudge UP - Quiz pass rate < 40% → cap em scaffolding (nao avanca pra socratic ainda) Tambem ajusta por idade (User.isMinor), learning style, dominio (matematica vs literatura tem perfis diferentes). Zero custo LLM. Output: estrategia selecionada + instrucoes especificas pra adicionar ao system prompt. ## 4. Orchestrator — buildEnrichedPrompt Monta o system prompt enriquecido: ``` Voce e um tutor IA para o curso "Calculo I" da instituicao "Cursinho XYZ". DOMINIO DO ALUNO: - Limites: mastery 0.78 (alto) - Derivadas: mastery 0.42 (medio) - Integrais: mastery 0.15 (baixo) MISCONCEPTIONS ATIVAS: - "Aluno confunde dominio com imagem em funcoes" (3 ocorrencias, status: resolving) - "Aluno aplica derivada de soma a produto" (5 ocorrencias, status: active) QUIZ PERFORMANCE: - 14 tentativas total, avgScore 67%, passRate 71% - Areas fracas: integrais (avg 45%), regra da cadeia (avg 52%) ESTRATEGIA PEDAGOGICA: guided_practice - Aluno tem dominio medio em derivadas. Apresente exercicios graduais. - Reforce conexao entre limites e derivadas (ele ja domina limites). - Aborda misconception sobre derivada de produto proativamente. CONTEXTO RAG (do material do curso): [Aula 3.2 "Regra do Produto"] (Modulo: Calculo Diferencial) "A derivada de f(x).g(x) NAO e f'(x).g'(x). A regra correta e..." [Aula 3.5 "Exercicios Resolvidos"] (Modulo: Calculo Diferencial) "Exemplo: derivar (x^2 + 1).(x - 3) usando regra do produto..." QUIZ RECENTE (proxima conversa): Aluno acabou de responder quiz inline com 2 questoes, acertou 1. INSTRUCOES: - Responda em portugues - Cite o material do curso quando relevante (use [Aula X.Y]) - Reconheca o que aluno acertou antes de apontar erro - Para essa idade (User.ageRange = "young_adult"): linguagem casual sem ser informal demais ``` ## 5. LLM principal — streaming com fallback ```ts const stream = await router.stream({ taskType: "chat_tutor", messages: enrichedMessages, options: { tenantId, userId, sessionId } }); for await (const chunk of stream.textStream) { yield chunk; // SSE para cliente } ``` LLM Router faz: 1. Resolve provider via `TenantTaskModelConfig` (admin escolheu Claude Sonnet, ou GPT-4o, etc) 2. Resolve API key via cascade: TenantApiKey → ProviderApiKey global → process.env 3. Circuit breaker check (Redis state). Se provider em OPEN: pula direto pra fallback 4. Metering middleware: rate limit + credit check + cost calculator 5. Stream Vercel AI SDK (suporta tools, multimodal, structured output) 6. Em erro: fallback automatico para proximo provider na chain Fallback chain por tier: ``` Tier Sonnet (medio): Claude Sonnet → GPT-4o → Grok-3-fast → Gemini Pro Tier Haiku (rapido): Claude Haiku → GPT-4o-mini → Grok-3-mini → Gemini Flash Tier Opus (complexo): Claude Opus → GPT-4.5 → Grok-3 → Gemini 2.5 Pro ``` Tenant NUNCA fica sem tutor. Se Anthropic cai → OpenAI assume. Se OpenAI tambem cai → xAI. Etc. ## 6. EvaluationAgent — feedback loop Em background apos resposta do tutor: ```ts after(async () => { const evaluation = await router.generateDirect({ taskType: "chat_evaluation", messages: [ { role: "user", content: "Aluno disse: '...'. Tutor respondeu: '...'. Classifique." } ] }); // evaluation: { // understanding: "partial", // detectedMisconceptions: [{ description, concepts, severity }], // suggestedNextStep: "..." // } // Atualiza ConceptMastery via Bayesian update await conceptMasteryEngine.updateFromTurn({ userId, courseId, evaluation }); // Persiste/atualiza misconceptions for (const misc of evaluation.detectedMisconceptions) { await misconceptionResolutionService.upsert({ userId, source: "chat", ...misc }); } }); ``` Custo: ~$0.001 por turno (Haiku). NAO bloqueia request do aluno. Misconceptions tem lifecycle de 3 estados: `active → resolving → resolved`. State machine determina transicoes baseado em evidence (mastery update, quiz pass, tutor abordou explicitamente). ## 7. ContentAgent — pre-geracao proativa ```ts after(async () => { // Aluno demonstra dominio fraco em conceito X // Pre-gera exercicio follow-up enquanto aluno le resposta atual const exercise = await router.generateDirect({ taskType: "content_generation", messages: [...] }); // Cache Redis 30min await redis.set(`next-exercise:${userId}:${conceptId}`, exercise, 1800); }); ``` Quando aluno termina de ler resposta e diz "me da exercicio", Studeia serve INSTANTANEAMENTE do cache. Sem latencia perceptivel. Custo: ~$0.001 por turno (Haiku). ## 8. SupervisorAgent — moderacao Roda em background apos cada turno. Classifica em 5 niveis de severity x 8 categorias. Categorias: linguagem impropria, violencia, ilegal, sexual, off_topic, harassment, **self_harm**, jailbreak_attempt. Severity: low → medium → high → critical → **safety**. 3 strikes (LOW/MEDIUM em 7 dias) = quarentena 48h. CRITICAL = quarentena 7 dias. **Self-harm (severity=safety) NUNCA pune o aluno.** Em vez disso: - Tutor interrompido com mensagem de acolhimento - Recursos de crise (Brasil: CVV 188, SAMU 192) - Cooldown Redis 24h (nao quarentena) - Email URGENTE imediato ao admin institucional Filosofia: self-harm e crise, nao infracao. [Detalhes em Safety Supervisor](/features/ai-tutor/safety-supervisor). Custo: ~$0.001 por turno (Haiku). ## Numeros de producao Apos 6 meses em producao: - ~30 ms latencia adicional dos agentes pre-LLM - ~$0.005-$0.05 custo medio por turno - 91% taxa de retencao de aluno apos 7 dias (vs ~40% benchmark IA tutor sem state) - 3.2x detection rate de misconceptions vs single-call baseline - 0 incidentes graves de safety (categorias high/critical) ## Trade-offs honestos Coisas que NAO funcionaram: - **Tentamos um "MasterAgent" coordenador via LLM** para escolher proximo agente dinamicamente. Custo dobrou, latencia subiu 800ms, qualidade NAO melhorou. Voltamos pra determinismo no Orchestrator. - **Tentamos FineTune do Llama em material de cursos**. Caro pra cada tenant. RAG funciona melhor pra knowledge dinamico (instituicao atualiza material toda semana — fine-tune ficaria stale). - **Tentamos "consensus" entre 3 LLMs** (Claude + GPT + Gemini) e pegar resposta com maioria. Custo 3x sem ganho de qualidade significativo. Removemos — fallback chain e suficiente. ## Codigo aberto? Estamos avaliando open-source dos componentes deterministicos (StudentModelService, RetrievalAgent, PedagogicalAgent) como pacote npm. Os agentes LLM-driven (Evaluation, Content, Supervisor) tem prompts que sao IP do Studeia, ficam closed. Se interessar: abre issue em [github.com/donattocosta-lang/studeia/issues](https://github.com/donattocosta-lang/studeia/issues). ## Veja tambem - [Tutor IA: visao executiva](/platform/ai-tutor) - [Tutor IA: detalhes tecnicos](/features/ai-tutor/overview) - [RAG Ingestion](/features/ai-tutor/rag-ingestion) - [Agente Supervisor](/features/ai-tutor/safety-supervisor) ## FAQ **Q: Por que multi-agente e nao single LLM call?** Single LLM call NAO tem memoria persistente do aluno, NAO sabe quais materiais do curso citar (precisa de RAG), NAO modera saidas inadequadas e NAO atualiza modelo bayesiano do dominio do aluno. Multi-agente resolve cada problema com agente especializado: StudentModel mantem estado, RetrievalAgent busca RAG tenant-scoped, PedagogicalAgent escolhe estrategia, EvaluationAgent classifica misconceptions, ContentAgent pre-gera follow-up, SupervisorAgent modera. Cada um pode ser otimizado separadamente. **Q: Quanto custa por turno completo do pipeline?** Tipicamente $0.005-$0.05 por turno (depende do tamanho da resposta). Breakdown: LLM principal Sonnet $0.005-$0.04 + EvaluationAgent Haiku $0.001 + ContentAgent Haiku $0.001 + SupervisorAgent Haiku $0.001. 3 dos 6 agentes sao TypeScript puro (StudentModel + RetrievalAgent + PedagogicalAgent = zero custo LLM). **Q: Como evita custo explodir com 1000+ alunos?** Quatro mecanismos: (1) Background agents via Next.js `after()` — sem bloquear request. (2) Haiku para tarefas background (~30x mais barato que Sonnet). (3) Metering middleware com rate limit por usuario. (4) Tenant pode trazer propria API key (TenantApiKey) — Studeia nao cobra margem de IA, custos vao direto pra conta do tenant na Anthropic/OpenAI. --- # [pt-BR] RAG per-tenant em escala: arquitetura para LMS B2B URL: https://docs.studeia.com/blog/rag-per-tenant-architecture Locale: pt-BR Section: blog Updated: 2026-05-24 **Short answer:** RAG per-tenant no Studeia isola dados via filter tenantId+courseId mandatory em todas as queries pgvector, com tenantOnlyMode=true que ELIMINA fallback para conteudo global. Voyage AI gera embeddings 1024-dim (primary, fallback OpenAI text-embedding-3-large). Chunking semantico 800 tokens com 200 overlap. autoSyncRag dispara re-ingestao incremental no after() de cada edicao de aula. Em producao: 500K+ chunks, latencia p95 retrieval 47ms, zero leakage cross-tenant em 6 meses. ## Por que multi-tenancy real em RAG e dificil A maioria dos LMS com "IA tutor" usa abordagens problematicas: 1. **RAG global compartilhado** — todos tenants veem mesma base. Funcional mas viola compliance e qualidade pedagogica. 2. **"Per-tenant" via metadata filter sem enforcement** — chunks tem campo `tenant_id` mas filter e opcional na query. Bug em 1 endpoint = vazamento. 3. **Vector DB separado por tenant** — overhead operacional brutal. Mil tenants = mil vector DBs. Studeia resolveu com 3 invariantes arquiteturais. ## Invariante 1: filter tenantId+courseId MANDATORY Toda query pgvector no Studeia DEVE passar por `packages/core/src/ai/rag.ts`: ```ts export async function retrieve(params: RetrieveParams) { if (!params.tenantId && !params.allowGlobal) { throw new Error('tenantId required unless allowGlobal=true'); } const filter = params.tenantId ? Prisma.sql`WHERE ce.tenant_id = ${params.tenantId}${params.courseId ? Prisma.sql` AND ce.course_id = ${params.courseId}` : Prisma.empty}` : Prisma.empty; return prisma.$queryRaw` SELECT ce.*, 1 - (ce.embedding <=> ${vectorStr}::vector) as similarity FROM content_embeddings ce ${filter} AND 1 - (ce.embedding <=> ${vectorStr}::vector) > 0.5 ORDER BY similarity DESC LIMIT 10 `; } ``` `allowGlobal` so e `true` em rotas administrativas explicitas (admin global testando cobertura RAG). Em TUDO mais, throw. Critical rule do projeto (regra 6 do CLAUDE.md): "Tenant isolation: todas as queries B2B filtram por tenantId". Auditoria automatizada via testes Vitest verifica que toda chamada a `retrieve()` em codigo de aplicacao passa `tenantId`. ## Invariante 2: tenantOnlyMode no RetrievalAgent Mesmo com filter correto, ha caso onde se quer fallback (ex: B2C sem tenant). Para garantir que B2B NUNCA vaza: ```ts const chunks = await retrieve({ query, filters: { tenantId, courseId }, tenantOnlyMode: true, // <-- CRITICO }); ``` `tenantOnlyMode: true` significa: se nao houver chunks no tenant, retorna **vazio**, nao busca em global. Tutor responde "nao tenho material sobre isso no seu curso" em vez de inventar. ## Invariante 3: RLS PostgreSQL como safety net Supabase RLS policies adicionam camada de defesa: ```sql CREATE POLICY tenant_isolation_content_embeddings ON content_embeddings FOR SELECT USING (tenant_id = current_setting('app.current_tenant_id')::uuid); ``` Se um bug em codigo de aplicacao esquecer o filter, RLS bloqueia. **Defesa em camadas**. Em producao tem custo: cada query Postgres avalia policy. Mas latencia adicional e ~2-5ms, aceitavel. ## Pipeline de ingestao ``` POST /api/institution/courses/[id]/rag-ingest { mode: "full" | "incremental" } ↓ 1. Lista aulas publicadas do curso 2. Para cada aula, extrai texto por tipo: - rich_text → strip HTML via DOMPurify - slides → join text elements + speaker notes - quiz → join question + explanation por questao - pdf → document-extractor (PyPDF + Adobe extract fallback se nativos falham) - video → LiveClassTranscription.transcriptionText (Whisper → Google STT fallback) - assignment → instructions 3. Chunking: 800 tokens, 200 overlap, preserva estrutura semantica (nao quebra paragrafo no meio, nao quebra codigo em meio funcao) 4. Embeddings via Voyage AI (1024 dims, fallback OpenAI text-embedding-3-large) 5. Cria ContentBlock + ContentEmbedding com metadata: { source: "course_lesson", courseId, lessonId, lessonTitle, moduleTitle, ingestionId } 6. Status final em CourseRagIngestion (pending → running → completed | failed) ``` ## Chunking semantico — por que importa Naive chunking (every N chars) quebra contexto. Ex: aula tem trecho de codigo Python que se quebra em chunks diferentes — embedding individual de cada metade nao captura o significado. Studeia usa **recursive splitter** com hierarquia de separadores: 1. Tenta quebrar em paragrafo (\n\n) 2. Senao, quebra em frase (. ) 3. Senao, quebra em palavra 4. Senao (raro), trunca E preserva blocos de codigo INTEIROS (entre triple backticks): ```ts function recursiveChunk(text, maxTokens = 800, overlap = 200) { // Identifica blocos protegidos (code blocks, tables markdown) const protectedRanges = findProtectedRanges(text); // Quebra respeitando hierarchy + protecao return splitWithHierarchy(text, { separators: ['\n\n', '. ', ' ', ''], maxTokens, overlap, protectedRanges, }); } ``` Resultado: chunks de ~600-800 tokens com overlap 200, semanticamente coerentes. ## Voyage AI vs OpenAI — por que primary diferente Comecamos com OpenAI text-embedding-3-large. Migramos pra Voyage AI primary em 2026 H1. Razoes: | Aspecto | OpenAI text-emb-3-large | Voyage AI voyage-3 | |---|---|---| | Custo / 1K tokens | $0.00013 | $0.00005 | | Dimensoes nativas | 3072 (reduzivel via dimensions param) | 1024 nativo | | MTEB benchmark (English) | 64.6 | 67.2 | | MIRACL benchmark (multilingual) | medio | melhor | | Rate limits free tier | 3K RPM | 3M tokens/min | Voyage e ~2.6x mais barato + benchmark melhor em retrieval educacional + multilingual robusto (importante pra es-ES + fr-FR do Studeia). Fallback automatico pra OpenAI quando Voyage tem outage: ```ts async function embedText(texts: string[]) { try { return await voyageEmbed(texts); } catch (err) { console.warn('[embed] Voyage falhou, fallback OpenAI', err); return await openaiEmbed(texts, { dimensions: 1024 }); // reduzimos pra 1024 pra compatibilidade } } ``` Importante: ambos producem vetores de 1024 dims, entao pgvector aceita sem schema change. ## pgvector tuning em producao Default pgvector e otimo pra <100K vetores. Acima disso, sem tuning, latencia degrada. Studeia config (testada com 500K+ chunks): ```sql -- IVFFlat index CREATE INDEX content_embeddings_embedding_idx ON content_embeddings USING ivfflat (embedding vector_cosine_ops) WITH (lists = 700); -- sqrt(500000) ≈ 700 -- Query usa probes SET ivfflat.probes = 15; -- mais probes = melhor recall, mais latencia ``` Trade-off: - `lists` muito baixo: queries lentas (full scan) - `lists` muito alto: index grande, inserts lentos - `probes` baixo: latencia OK, recall ruim (chunks relevantes perdidos) - `probes` alto: recall alto, latencia degrada Para Studeia em producao: lists=700, probes=15. Latencia p95 = 47ms para retrieve top-10 em 500K chunks. Para escala 5M+: avaliar HNSW (postgres 16+) ou particionamento por tenantId. ## autoSyncRag — incremental rebuild Curso e organismo vivo. Professor edita aula 17. Acrescenta video. Atualiza quiz. Sistema precisa re-embed apenas o delta, nao o curso todo. `Course.autoSyncRag: Boolean @default(false)` Quando `true`, toda edicao de aula via API: ```ts // PATCH /api/institution/courses/[id]/modules/[mid]/lessons/[lid] await prisma.courseLesson.update({ data: ... }); // Background — nao bloqueia request after(async () => { if (course.autoSyncRag) { await courseRagIngestionService.reingest({ courseId, mode: "incremental", onlyLessonId: lessonId, }); } }); ``` Re-ingestao incremental: 1. Delete chunks antigos da aula (`WHERE lesson_id = X`) 2. Re-extrai texto da aula atualizada 3. Re-chunk 4. Re-embed 5. Insert novos chunks Tempo: ~3-8s por aula medio (depende do tamanho). Aluno NUNCA experiencia stale RAG. ## Numeros de producao | Metrica | Valor | |---|---| | Total chunks em producao | ~500K | | Tenants ativos | 50+ | | Cursos com RAG ingerido | 280+ | | Maior tenant (chunks) | 47K | | Latencia p50 retrieve | 28ms | | Latencia p95 retrieve | 47ms | | Latencia p99 retrieve | 124ms | | Custo embedding mes anterior | $34 (proportional ao volume de edicao) | | Incidentes cross-tenant leakage | 0 (6 meses) | ## Trade-offs honestos **O que NAO funcionou:** 1. **Tentamos hierarchical retrieval** (busca em sumario primeiro, depois full chunks). Implementation complexa, ganho marginal de qualidade em queries simples. Removemos. 2. **Tentamos query reformulation via LLM** (passar query do aluno por LLM antes de embed pra normalizar). Custo dobrou (mais 1 LLM call), latencia +400ms, qualidade marginalmente melhor apenas em queries muito vagas. So fazemos reformulation em RetrievalAgent quando query e ambigua (heuristica simples). 3. **Tentamos re-ranking via Cohere rerank-3**. Cara ($0.001 por re-rank), latencia +200ms. Para 90% das queries, pgvector cosine + boost por weak areas e suficiente. Mantemos rerank disponivel mas off por default. ## O que faltava 2 anos atras pgvector chegou produtivamente em 2022. Voyage AI lancou voyage-3 em 2024 H2. Antes disso, alternativas (Pinecone, Weaviate, Qdrant) eram pagas + operacionalmente complexas pra multi-tenant. Hoje, com pgvector maduro + embeddings baratos + RLS Supabase, RAG per-tenant production-grade ficou acessivel. Recomendamos pra qualquer LMS B2B serio. ## Veja tambem - [RAG Ingestion details](/features/ai-tutor/rag-ingestion) - [Multi-agent AI tutor pipeline](/blog/multi-agent-ai-tutor-pipeline) - [Multi-tenancy](/platform/multi-tenancy) ## FAQ **Q: Por que RAG per-tenant ao inves de RAG compartilhado?** Tres razoes nao-negociaveis: (1) Compliance LGPD/GDPR — material de uma escola NAO pode aparecer em respostas pra alunos de outra escola. (2) Qualidade pedagogica — instituicoes tem material proprio, abordagem propria, exemplos contextualizados; misturar conteudo de Stanford com cursinho de bairro polui resposta. (3) Confidencialidade comercial — material de cursinho premium e IP do cursinho, nao quer expor pra concorrentes. **Q: Qual o custo de embeddings em escala?** Voyage AI cobra $0.00005 por 1K tokens (versao primary do Studeia). Curso medio: 30 aulas, ~50K palavras = ~70K tokens. Embedding inicial: ~$0.0035 por curso. Re-ingestao incremental: ~$0.0001 por aula editada. Para tenant com 100 cursos: ~$0.35 setup inicial + ~$5-10/mes em deltas. Custo desprezivel comparado a value. **Q: Quantos vetores pgvector aguenta antes de degradar?** pgvector com IVFFlat aguenta milhoes de vetores com latencia <100ms se index esta well-tuned (lists = sqrt(N), probes = 10-20). HNSW (postgres 16+) e melhor pra escala: 10M+ vetores com <50ms. Studeia testado com ~500K chunks em producao, latencia p95 de retrieval = 47ms. Acima de 5M considerar partitioning por tenantId ou pgvector-rs. **Q: Como atualizar embeddings quando aula muda?** Course.autoSyncRag=true ativa re-ingestao incremental automatica via Next.js after(). Toda edicao via API dispara: delete chunks antigos da aula + chunk novo conteudo + embed + insert. Sem downtime, sem rebuild completo. Para edicoes em massa: rodar /api/institution/courses/[id]/rag-ingest com mode='full' rebuilda do zero. --- # [pt-BR] Studeia vs Blackboard Learn: comparativo honesto 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-blackboard Locale: pt-BR Section: comparisons Updated: 2026-05-24 **Short answer:** Blackboard Learn (Anthology) é LMS legacy dominante em universidades públicas com SCORM 2004, Blackboard Collaborate Ultra e selos acadêmicos — USD $8-25/aluno/ano. Studeia é SaaS B2B brasileiro com IA tutor multi-provider, gamificação nativa e LGPD nativo, custos em BRL (60-85% mais barato em 3 anos). Universidade pública federal já no Blackboard: integre via LTI. Universidade privada nova ou em modernização: Studeia vence em UX, custo e tempo-para-valor ## Comparativo lado-a-lado | Aspecto | Studeia | Blackboard Learn | |---|---|---| | **Origem** | Brasil 2025 | EUA 1997 (Anthology desde 2022) | | **Modelo** | SaaS gerenciado moderno | SaaS (Cloud) ou self-hosted | | **Preco** | R$0-1.500/mes (planos) ou Enterprise | USD $8-25/aluno/ano enterprise | | **UX** | Moderno, glass morphism, 9 temas | Legacy (Original) ou Ultra (mais moderno mas inconsistente) | | **Suporte** | PT/EN/ES/FR | EN (PT-BR via parceiros) | | **Tutor IA** | Multi-agente nativo (Claude/GPT/Grok/Gemini) | Blackboard AI Design Assistant (preview) | | **Gradebook** | Categories + weights + rubrics + integrity | Robusto (Grade Center maduro) | | **SCORM 2004** | NAO | Sim (completo) | | **Live classes** | BBB/Zoom/Teams/Meet adapter | Blackboard Collaborate Ultra | | **Gamificacao** | Built-in (XP, OB 3.0, leaderboards, contests) | Achievements + plugins | | **LGPD** | Nativo | Via DPA | | **Mobile** | Expo nativo + white-label | Blackboard App + Instructor App | | **LTI 1.3** | Tool provider | Consumer + provider | | **SSO Enterprise** | SAML+OIDC+SCIM | SAML+LDAP+CAS | | **Accessibility** | WCAG 2.1 AA nativo | Blackboard Ally (audit automatico) | | **Risk Assessment** | RiskAssessmentService 6 fatores | Blackboard Predict (IA preditiva) | ## Quando escolher Blackboard ✅ Universidade publica federal/estadual com Blackboard em producao ha anos ✅ Necessidade obrigatoria de SCORM 2004 (cursos antigos) ✅ Compliance com MEC + selos academicos especificos ✅ Equipe TI ja treinada em Blackboard ✅ Integracao com sistema academico legado (Banner, Workday Student) ✅ Foco em maturidade institucional sobre inovacao ✅ Blackboard Ally critico para WCAG em conteudo legacy ## Quando escolher Studeia ✅ Universidade privada nova ou modernizacao radical ✅ Faculdade EAD com foco em B2C/professional ✅ Cursinho/T&D corporativo / escola tecnica ✅ Quer reducao de custo dramatica (60-85%) ✅ Quer UX moderna sem 6 meses de treinamento ✅ Tutor IA real (Blackboard AI ainda esta nascendo) ✅ Mobile com white-label proprio ✅ Quer evitar contratos enterprise complexos (sem RFP de 100 paginas) ## TCO comparado — universidade 5.000 alunos / 3 anos | Item | Blackboard Enterprise | Studeia Enterprise | |---|---|---| | Licenca | USD $40k-125k/ano × 3 = USD $120k-375k (R$600k-1.875M) | R$108k-288k (R$3-8k/mes × 36) | | Setup + implementacao | USD $25k-100k | R$0-30k | | Treinamento staff | USD $10k-50k | Incluido (videos + docs) | | Custom development (RFP) | USD $50k-300k | Via API publica (devs internos) | | Blackboard Ally | USD $5k-15k/ano | N/A (WCAG nativo) | | **TOTAL 3 anos** | **R$1.2M-3.5M** | **R$108k-318k** | Studeia tipicamente **70-90% mais barato** que Blackboard enterprise. ## Onde Blackboard ganha (honestidade) 1. **SCORM 2004**: Studeia so suporta IMS CC. Para instituicoes com bibliotecas SCORM legacy: limitacao real. 2. **Blackboard Collaborate Ultra**: ferramenta de webconference madura. Studeia integra BBB/Zoom/Teams/Meet (adapter) mas nao tem feature parity com Collaborate em features avancadas (breakout rooms automatizados, polling em camadas, whiteboard colaborativo profundo). 3. **Blackboard Ally**: audit automatico de WCAG em conteudo uploaded (PDFs, videos, etc). Studeia tem WCAG nativo mas nao audita arquivos uploaded. 4. **Blackboard Predict**: 20 anos de dados de risco academico em modelo proprietary. Studeia tem RiskAssessmentService com 6 fatores ponderados (recente, mas funcional). 5. **Maturidade institucional**: 25 anos de uso em universidades. Resistencia a sair = forte. 6. **Selos academicos brasileiros**: MEC, ABNT — Blackboard tem certificacoes que Studeia ainda nao tem (aguardando). ## Migracao Blackboard → Studeia ### Caminho recomendado (6-12 meses) | Mes | Fase | |---|---| | 1 | Trial Demo plan, importar 2 cursos pilotos via IMS CC | | 2-3 | Ajustar conteudo migrado, recriar quizzes complexos, treinar 5 professores | | 4 | Migrar alunos pilotos via SCIM (Blackboard suporta) | | 5-6 | Validar features chave (gradebook, parent reports, IA tutor) com pilotos | | 7-9 | Migracao gradual de departamentos/cursos restantes | | 10-12 | Decommission Blackboard (ou manter em paralelo para cursos legacy via LTI) | ### O que migra automaticamente - ✅ Cursos via IMS CC export do Blackboard - ✅ Alunos via SCIM ou CSV - ✅ Notas via CSV - ✅ Forums (estrutura basica) ### O que NAO migra - ❌ SCORM 2004 packages (recriar como aulas video + quizzes) - ❌ Blackboard-specific question pools (recriar via question bank do Studeia) - ❌ Custom XML templates Blackboard - ❌ Blackboard Ally reports (cobertura WCAG comeca do zero) - ❌ Personalizacoes JavaScript custom ## Veredito honesto **Blackboard continua melhor para**: universidades publicas federais com 15+ anos de Blackboard, dependencia critica de SCORM 2004, necessidade de selos MEC especificos via Anthology, foco em estabilidade > inovacao. **Studeia vence para**: universidades privadas modernizando, faculdades EAD novas, custo total previsivel, UX moderna, tutor IA real, mobile B2B com white-label, integracao com PIX/Asaas. **Hibrido faz sentido para**: universidade publica grande que quer Studeia em cursos novos sem desinvestir Blackboard. Studeia como LTI tool em cursos especificos. ## Veja tambem - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) - [Studeia vs Canvas](/comparisons/studeia-vs-canvas) - [Use case: Universidade](/use-cases/university) ## FAQ **Q: Blackboard ainda e relevante em 2026?** Sim, ainda dominante em universidades publicas brasileiras (UFRJ, UnB, etc) e algumas privadas tradicionais. A Anthology (empresa que comprou Blackboard) consolidou em 2022, modernizou parte do produto via Blackboard Learn Ultra. Mas a UX legacy persiste em muitas instituicoes — e a percepcao de usuario continua negativa entre alunos (interface datada, navegacao confusa). **Q: Migrar de Blackboard para Studeia e viavel?** Sim, parcialmente. Blackboard exporta cursos em IMS Common Cartridge (IMS CC v1.x) e Studeia importa via POST /api/institution/courses/import. Quizzes basicos (QTI 1.2), materiais, modulos e links sao migrados. SCORM 2004, Blackboard-specific question pools e custom XML extensions NAO migram automaticamente. Alunos via SCIM (Blackboard suporta), ou CSV. **Q: Qual a diferenca de preco em 3 anos?** Blackboard cobra USD $8-25/aluno/ano em contratos enterprise (negociavel). Para universidade de 5000 alunos: USD $40k-125k/ano = R$600k-1.875M em 3 anos. Studeia Enterprise para mesmo porte tipicamente R$108k-288k em 3 anos (R$3-8k/mes negociavel). Economia tipica 60-85%. **Q: Blackboard tem features que Studeia nao tem?** Sim: (1) SCORM 2004 completo (Studeia so IMS CC). (2) Blackboard Collaborate Ultra para webconference (Studeia integra BBB/Zoom/Teams/Meet). (3) Blackboard Ally para conformidade WCAG automatica em conteudo legado (Studeia tem WCAG nativo mas sem auditoria automatica de uploads). (4) Blackboard Predict (IA preditiva de risco — Studeia tem RiskAssessmentService com 6 fatores ponderados, similar). (5) Maturidade institucional + selos academicos. --- # [pt-BR] Studeia vs Canvas LMS: comparativo honesto 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-canvas Locale: pt-BR Section: comparisons Updated: 2026-05-23 **Short answer:** Canvas (Instructure) é o LMS dominante em universidades dos EUA — UX polido, gradebook robusto, USD $5-15/aluno/mês. Studeia é brasileiro, B2B, com tutor IA multi-agente nativo, gamificação OB 3.0, PIX/Asaas billing e LGPD compliance em BRL. Para PMEs, escolas e cursinhos no Brasil: Studeia vence em TCO e aderência local. Para universidades que já contrataram Canvas: integração via LTI 1.3 com Studeia como tool provider funciona ## Comparativo lado-a-lado | Aspecto | Studeia | Canvas | |---|---|---| | **Origem** | Brasil 2025 | EUA 2008 (Instructure) | | **Modelo** | SaaS gerenciado | SaaS (Cloud) ou self-hosted (Open Source — limitado) | | **Preco** | R$0-1.500/mes (plans) ou Enterprise custom | USD $5-15/aluno/mes ($60-180/aluno/ano) | | **Suporte** | PT/EN/ES/FR | EN (PT-BR limitado) | | **LGPD** | Nativo (dados no Brasil) | GDPR/FERPA — LGPD via DPA | | **Pagamento** | BRL, Stripe + Asaas (PIX) | USD, contratos enterprise | | **Tutor IA** | Multi-agente (Claude/GPT/Grok/Gemini) + RAG per-tenant | Canvas AI (basico, gerar quizzes, transcrever) | | **Gradebook** | Categories + rubrics + weights + integrity flags | Considerado o melhor do mercado | | **Mobile** | Expo Android (iOS roadmap) | Apps nativos polidos (iOS+Android) | | **Quiz Engine** | 8 tipos + psicometricas (Cronbach, point-biserial) | Quiz 2.0 (mais avancado em pooling) | | **LTI 1.3** | Tool provider | Tool consumer + provider | | **SCORM 2004** | NAO | Sim | | **H5P** | Subtypes nativos (nao H5P puro) | Plugin | | **Gamificacao** | XP/badges/leaderboards/contests nativo | Limitada (badges via Canvas Badges) | | **White-label** | Total (Enterprise) | Limitado (cores + logo) | | **SSO Enterprise** | SAML+OIDC+SCIM | Sim | | **API** | 64+ endpoints scopes granulares | API REST extensa (mais madura) | | **Customizacao** | Theme + custom CSS | Themes + Designer custom JavaScript | | **Comunidade** | Pequena (2026 e novo) | Enorme (Instructure Community) | ## Quando escolher Canvas ✅ Universidade americana ou padrao americano ✅ Ja em Canvas com investimento de migracao significativo ✅ Orcamento alto (USD/aluno/ano sem problema) ✅ Need SCORM 2004 / H5P maduro ✅ Maximo polish em UX/mobile ✅ Equipe de Designers/Devs Canvas existente ## Quando escolher Studeia ✅ Instituicao brasileira (LGPD, PT, PIX, suporte local) ✅ Custos em BRL previsiveis (R$10-100k/ano vs USD 50-300k/ano Canvas) ✅ Quer tutor IA real (Canvas AI ainda esta nascendo) ✅ Quer gamificacao nativa (Canvas e fraco aqui) ✅ K-12 brasileiro (Canvas K-12 e limitado) ✅ Cursinhos pre-vestibular ✅ Treinamento corporativo brasileiro ✅ Quer mobile B2B com white-label ✅ EAD certificadora brasileira (precos competitivos) ## Custos comparados — universidade 5000 alunos | Item | Canvas | Studeia Enterprise | |---|---|---| | Licenca/ano | USD $60k-90k (R$300k-450k) | R$60k-180k (negociar) | | Setup inicial | USD $10k-30k | Incluido | | Treinamento | USD $5k | Incluido (videos + docs) | | **TOTAL ano 1** | **R$365k-485k** | **R$60k-180k** | Para universidades de medio porte: Studeia tipicamente 50-70% mais barato. ## Integracao Canvas + Studeia Caso comum: universidade ja em Canvas quer adicionar Studeia para cursos especificos (ex: tutor IA real para curso de calculo). ### LTI 1.3 setup 1. **Studeia gera** Tool URL + Client ID + JWKS URL em /institution/lti-tools 2. **Canvas Admin** → Settings → Apps → Add App → By Client ID → cola Client ID 3. Configure placements (course navigation, assignment, etc) 4. Em curso Canvas: adicionar Studeia tool como aula ### Sincronizacao de notas (AGS) Studeia envia notas de volta automaticamente: ``` Aluno completa quiz no Studeia ↓ Studeia chama Canvas LTI AGS endpoint: POST {issuer}/api/lti/courses/{courseId}/line_items/{itemId}/scores ↓ Grade aparece no gradebook do Canvas ``` Sem migracao de dados — Canvas continua source-of-truth dos cursos. ## Migracao Canvas → Studeia ### Possivel - ✅ Cursos via IMS Common Cartridge (Canvas exporta como .imscc) - ✅ Alunos via CSV ou SCIM - ✅ Notas via CSV ### NAO suportado - ❌ SCORM 2004 packages - ❌ Canvas-specific question types (numeric com formula, etc) — recriar - ❌ Canvas Pages com custom JavaScript - ❌ Canvas DesignTools (proprietary) ## Veredito honesto **Canvas continua melhor para**: - Universidades americanas / em padrao americano - Mobile polish (Studeia esta atras) - Maximo de plugins/integracoes maduras - SCORM 2004 robusto - Maturidade institucional **Studeia vence para**: - Mercado brasileiro (LGPD, PT, BRL) - Custo total (50-70% mais barato em geral) - Tutor IA real (vs Canvas AI nascente) - Gamificacao nativa - K-12 + cursinhos - White-label real (Canvas e limitado) **Hibrido faz sentido para**: universidades com Canvas estabelecido que querem features especificas do Studeia (tutor IA, gamificacao). Use Studeia como LTI tool em cursos selecionados. ## Veja tambem - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) - [Studeia vs Google Classroom](/comparisons/studeia-vs-google-classroom) - [Plataforma overview](/platform/overview) ## FAQ **Q: Canvas e o melhor LMS do mundo?** Canvas e excelente — dominante em universidades dos EUA (>40% do mercado higher ed americano). UX moderno, gradebook robusto, mobile app polido. Mas e caro (USD $5-15/aluno/mes), suporte em ingles, sem foco em mercado brasileiro, sem LGPD nativo, sem PIX/billing local. Para universidades brasileiras com orcamento alto e necessidade de padrao americano: bom encaixe. Para PMEs brasileiras: Studeia em geral vence em custo + local fit. **Q: Studeia se integra com Canvas?** Sim. Studeia funciona como LTI 1.3 tool provider — registre URLs no Canvas Admin > Settings > Apps > Add App. Notas sincronizam de volta via AGS (Assignment and Grade Service). Util para complementar Canvas com tutor IA + gamificacao do Studeia. **Q: Canvas tem tutor IA?** Canvas tem 'Canvas AI' (preview em 2025 limitado, GA 2026) com features basicas: gerar quizzes, resumir aulas, transcrever. Tutor IA conversacional com aluno e mais limitado. Studeia tem tutor IA multi-agente real (RAG per-tenant, 5 estrategias pedagogicas, misconception detection, agente supervisor). Comparacao Canvas AI vs Studeia AI: Studeia mais profundo, Canvas mais polido em UI. **Q: Posso usar Studeia em lugar de Canvas para K-12?** Sim. Canvas K-12 (Canvas Network) existe mas e relativamente fraco vs Canvas Higher Ed. Studeia tem features dedicadas para K-12: portal de pais com narrativa IA, monitoramento de menores, gamificacao crianca-friendly, LGPD/proteção menores nativa. Em 90% dos casos K-12 no Brasil: Studeia vence. --- # [pt-BR] Studeia vs Coursera for Business: comparativo 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-coursera-for-business Locale: pt-BR Section: comparisons Updated: 2026-05-24 **Short answer:** Coursera for Business e marketplace de cursos prontos de Stanford/Yale/Google/Meta com tracking de progresso (USD $399-600/user/ano). NAO criam cursos proprios la dentro. Studeia e LMS B2B onde voce cria conteudo INSTITUCIONAL proprio (compliance interno, produtos, metodologia) com IA tutor multi-agente, gamificacao, gradebook, SSO. Cobramos por aluno (R$2.5-15/aluno/mes). Para empresas: usar AMBOS faz sentido — Coursera para skills genericas + Studeia para conteudo institucional. ## Comparativo conceitual | Aspecto | Studeia | Coursera for Business | |---|---|---| | **Tipo** | LMS B2B para criar conteudo proprio | Marketplace de cursos prontos | | **Quem cria conteudo** | Sua instituicao | Stanford, Yale, Google, Meta, IBM, etc | | **Customizacao** | Total (cursos sob medida) | Limitada (curacao de catalogo) | | **Preco** | R$250-1.500/mes + custom enterprise | USD $399-600/user/ano | | **Modelo** | Cobramos por aluno do tenant | Cobramos por usuario assinante | | **Idioma cursos** | Voce escolhe (PT/EN/ES/FR) | Maioria em ingles (legendado) | | **Certificados** | OB 3.0 da sua marca + customizavel | Certificados Coursera + universidades parceiras | | **IA Tutor** | Multi-agente RAG per-tenant | Coursera Coach (limitado ao catalogo) | | **Gamificacao** | Nativa (XP, badges, leaderboards) | Limitada | | **Live classes** | BBB+Zoom+Teams+Meet | Coursera Live (selecionados) | | **LTI 1.3** | Tool provider | Tool provider | | **Gradebook proprio** | Sim (rubricas, weights, integrity) | Coursera-managed (sem custom) | | **Compliance tracking** | Automacoes + reminders + audit | Sim, baseado em catalogo | | **API publica** | 64+ endpoints scoped | API integracao limitada | ## Quando escolher Coursera for Business ✅ Empresa quer terceirizar conteudo de skills genericas (Python, AWS, Excel, soft skills) ✅ Valoriza certificados de universidades top (Stanford, Yale) ✅ Foco em upskilling/reskilling de funcionarios em tecnologias mainstream ✅ Orcamento alto (USD $400-600/user/ano nao e problema) ✅ Compra de pacotes pre-curados (SkillSets) economiza tempo ✅ Cursos em ingles nao sao problema ✅ Empresa global (escritorios em multiplos paises) ## Quando escolher Studeia ✅ Empresa quer treinar em CONTEUDO PROPRIO (compliance interno, produtos, metodologia) ✅ Cursos sob medida para sua cultura/processo (nao tem no Coursera) ✅ Foco em t&d setorial (saude, juridico, financeiro brasileiro) ✅ Quer marca propria nos certificados (sem Coursera/Studeia visivel) ✅ Quer IA tutor que conhece SEU material (RAG per-tenant) ✅ Custo previsivel em BRL (sem volatilidade USD) ✅ Empresa brasileira com LGPD nativo + PIX/Asaas ## Cenarios reais ### Banco grande no Brasil **Coursera for Business**: 2000 funcionarios × USD $500/ano = R$5M/ano. Treina em Python, AWS, leadership (skills genericas). **Studeia Enterprise**: R$8k/mes × 12 = R$96k/ano. Treina em produtos do banco, compliance regulatorio (BACEN, LGPD bancaria), cultura interna. **Ambos juntos**: R$5.1M/ano. Cada um faz o que faz de melhor. ### Faculdade EAD criando cursos profissionalizantes **Coursera for Business**: nao se aplica (Coursera nao reseller-friendly para faculdades brasileiras). **Studeia Enterprise**: cria cursos proprios, gerencia matriculas, emite certificados, monetiza via plataforma propria. ### Startup tech de 50 funcionarios **Coursera Team**: USD $399 × 50 = R$100k/ano. Skills tech basicas. **Studeia Mini**: R$250/mes = R$3k/ano (10 alunos). Treina em produto interno + onboarding. Ambos: R$103k/ano. Startup pequena talvez so use Coursera (mais barato pra skills genericas) ou Studeia (foco em onboarding interno). ## Integracao Coursera + Studeia LTI 1.3 (Coursera suporta como tool provider, Studeia tambem): ``` Funcionario faz Python no Coursera ↓ (LTI launch ou xAPI) Conclusao reportada para Studeia gradebook ↓ handleGamificationEvent → XP ganho ``` Ou via API publica do Coursera (Enterprise tier) sincronizando completions para Studeia. ## Onde Coursera ganha (honestidade) 1. **Conteudo top-tier de universidades**: Stanford, Yale, MIT, Google — Studeia nao tem catalogo proprio 2. **Certificados de marca forte**: "Stanford certificate" no LinkedIn vale mais que "Studeia certificate" 3. **Catalogo enorme**: 7000+ cursos vs voce ter que criar do zero 4. **Coursera Live**: webinars com instrutores de universidades 5. **SkillSets curados**: rotas de aprendizado pre-projetadas por especialistas 6. **Empresas globais**: melhor para multinacionais com escritorios em paises diversos ## Veredito honesto **Coursera for Business**: ferramenta de **consumo** de cursos. Compra acesso a catalogo. **Studeia**: ferramenta de **producao** de cursos. Cria e gerencia conteudo proprio. Sao categorias diferentes. Para empresas medias/grandes: usar AMBOS faz sentido. Coursera para skills genericas + Studeia para conteudo institucional. Para startups pequenas: depende da necessidade dominante. ## Veja tambem - [Use case: Corporate training](/use-cases/corporate-training) - [Studeia vs Canvas](/comparisons/studeia-vs-canvas) ## FAQ **Q: Coursera for Business e LMS?** Nao exatamente. Coursera for Business e um marketplace de cursos prontos de universidades top (Stanford, Yale, Google, Meta, IBM) + tracking de progresso e SkillSets curados. Otimo para empresas que querem terceirizar conteudo. NAO criam cursos proprios la dentro — para isso voce precisa de um LMS de verdade como Studeia, Moodle, Canvas. **Q: Posso usar os dois juntos?** Sim, comum. Coursera para conteudo curado generico (Python, AWS, leadership) + Studeia como LMS proprio para conteudo institucional especifico (compliance interno, produtos da empresa, metodologia propria). Integracao via xAPI/LTI (Coursera suporta LTI 1.3 launches, Studeia tambem). **Q: Quanto custa Coursera for Business?** Coursera Team (ate 125 users): USD $399/user/ano. Coursera Enterprise: custom, tipicamente USD $400-600/user/ano com volume. Catalogo completo + certificados pagos inclusos. Para 500 funcionarios: USD $200k-300k/ano (R$1M-1.5M). Studeia Enterprise para 500: R$108k-288k/ano (criando proprio conteudo). **Q: Coursera oferece IA tutor?** Coursera Coach (lancado 2024) e um chatbot IA que ajuda alunos nos cursos do catalogo. Limitado ao conteudo Coursera. Studeia tem tutor IA multi-agente com RAG per-tenant — pode ingerir QUALQUER material (incluindo cursos da sua propria empresa) e citar especificamente. --- # [pt-BR] Studeia vs EadBox vs EadPlataforma — concorrentes BR 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-eadbox-eadplataforma Locale: pt-BR Section: comparisons Updated: 2026-05-24 **Short answer:** EadBox e EadPlataforma são plataformas EAD brasileiras para INFOPRODUTORES B2C (venda direta ao consumidor, afiliados, checkout e gateway Brasil). Studeia foca em B2B institucional — escolas, cursinhos, universidades e T&D corporativo — com multi-tenant, SSO/SCIM, LTI, tutor IA e gradebook. EadBox/EadPlataforma vencem em infoproduto B2C com afiliados; Studeia vence em EAD acadêmico/corporativo com IA real. Hotmart e Eduzz também competem no B2C ## Posicionamento de mercado | Plataforma | Foco primario | Cliente tipico | |---|---|---| | **Studeia** | B2B institucional | Escola K-12, cursinho ENEM, universidade, T&D corporativo | | **EadBox** | B2C infoprodutor (com afiliados) | Criador de curso de produtividade, idiomas, marketing | | **EadPlataforma** | B2C infoprodutor + pequeno B2B | Coach, consultor, empresa media com cursos internos | | **Hotmart** | Marketplace + infoproduto B2C | Criador vendendo curso amplamente (mass market) | | **Eduzz** | Marketplace + infoproduto B2C | Idem Hotmart, foco infoprodutos digitais | | **Sambatech** | Video corporativo | Empresa grande com biblioteca video | ## Comparativo detalhado | Aspecto | Studeia | EadBox | EadPlataforma | |---|---|---|---| | **Modelo** | B2B SaaS multi-tenant | B2C/B2B-light SaaS | B2C/B2B-light SaaS | | **Preco inicial** | R$250/mes (10 alunos) | R$197/mes (Pro) | R$197/mes (Iniciante) | | **Preco escala** | R$1.500/mes (100 alunos) | Alunos ilimitados em todos planos | R$397/mes (Profissional) | | **Tutor IA** | Multi-agente nativo (4 providers) | IA Pro basico (OpenAI) | IA quiz generation | | **Gradebook ponderado** | Sim (categorias + rubricas + weights) | Notas simples | Notas simples | | **Quiz psicometricas** | Cronbach + point-biserial + distractor | Quizzes basicos | Quizzes basicos | | **Multi-tenancy real** | Sim (isolated + per-tenant API keys) | Sim | Sim | | **White-label** | Total (Enterprise) | Sim (parcial) | Sim (parcial) | | **Mobile** | App nativo Expo white-label | App generico EadBox | App generico EadPlataforma | | **SSO Enterprise** | SAML+OIDC+SCIM | Limitado | Limitado | | **LTI 1.3** | Tool provider | NAO | NAO | | **Gamificacao** | XP+OB 3.0+leaderboards+contests | Limitada | Limitada | | **Aulas ao vivo** | BBB+Zoom+Teams+Meet adapter | Integracao Zoom | Integracao Zoom | | **Pagamento alunos** | Stripe + Asaas (PIX) B2B | Checkout integrado + 8 gateways | Checkout integrado + 6 gateways | | **Afiliados** | NAO | Sim (sistema nativo) | Sim | | **API publica** | 64+ endpoints + scopes | API basica | API basica | | **LGPD** | Nativo | Sim | Sim | | **Comunidade/forums** | Sim (por turma/curso) | Sim | Sim | | **Drip content** | Via publishAt scheduled | Sim | Sim | ## Quando escolher cada um ### EadBox ✅ Voce e criador de curso individual (coach, consultor, infoprodutor) ✅ Vende curso direto ao consumidor (B2C) ✅ Quer sistema nativo de afiliados (comissionamento) ✅ Quer 8 gateways de pagamento integrados (Stripe, PagSeguro, Mercado Pago, etc) ✅ Foco em conversao de vendas (landing pages, funis, upsell) ✅ Pequeno-medio porte (ate ~5000 alunos) ### EadPlataforma ✅ Mesma logica EadBox mas tambem atende empresas medias com T&D interno ✅ Quer cursos pre-prontos da plataforma como complemento (catalogo deles) ✅ Foco em treinamento corporativo basico ### Studeia ✅ Escola K-12 (fundamental, medio) com BNCC ✅ Cursinho ENEM/vestibular ✅ Faculdade EAD ou universidade ✅ T&D corporativo serio (compliance, SSO Okta/Azure AD, certificados OB 3.0) ✅ Quer tutor IA real (multi-agente, RAG per-tenant) ✅ Quer gradebook academico (rubricas, weights, integrity flags) ✅ Quer LTI integration (Canvas/Moodle/Blackboard) ✅ Quer mobile B2B com white-label dedicado ### Hotmart/Eduzz ✅ Quer entrar em marketplace existente (visibilidade) ✅ Vende infoproduto digital amplo (e-book, curso, comunidade) ✅ Aceita pagar % de transacao alta (~10-20%) em troca de trafego do marketplace ✅ Nao precisa de plataforma propria — Hotmart hospeda tudo ## TCO comparado — escola privada 200 alunos / 3 anos | Item | Studeia (Enterprise sob consulta) | EadPlataforma Profissional | |---|---|---| | Mensalidade | R$3.000/mes × 36 = R$108k | R$397/mes × 36 = R$14.3k | | Custo IA proporcional | R$3-8/aluno × 200 × 36 = R$22-58k | R$0 (basica inclusa) | | Features incluidas | Tutor IA multi-agente + LTI + SSO + analytics psicometricas + gamificacao OB 3.0 + portal pais IA | Quiz IA basico + comunidade + checkout | | **TOTAL 3 anos** | **R$130-166k** | **R$14k** | **EadPlataforma e ~10x mais barato.** Mas: sem tutor IA real, sem gradebook ponderado, sem LTI, sem SSO Enterprise, sem mobile white-label, sem portal de pais robusto. **Quando vale Studeia mais caro:** - Escola que cobra mensalidade alta (R$1k+/mes/aluno) — diferencial pedagogico justifica - Cursinho ENEM premium (analytics psicometricas mostram qual aluno tem chance real) - Universidade EAD (precisa LTI, SSO, certificados verificaveis) - T&D corporativo (compliance, Okta/Azure AD) **Quando EadPlataforma e suficiente:** - Infoprodutor individual - Pequeno cursinho/escola com curriculo simples - Coach/consultor - T&D corporativo basico ## Migracao EadBox/EadPlataforma → Studeia ### Possivel - ✅ Cursos: export de conteudo (texto, PDFs, links de video) + reupload em Studeia Media Library - ✅ Alunos: CSV export do EadBox/EadPlataforma + import em Studeia - ✅ Estrutura de modulos: recriar manualmente - ✅ Comunidade/forums: recomecar (sem migracao automatica) ### Nao migra - ❌ Sistema de afiliados (Studeia nao tem) - ❌ Historico de vendas/transacoes - ❌ Configuracoes de funil de vendas - ❌ Drip content schedule (recriar via publishAt) ## Veredito honesto **Para criador individual B2C com afiliados**: EadBox > Studeia (Studeia nao serve esse caso). **Para escola/cursinho/universidade/T&D serio**: Studeia > EadBox/EadPlataforma (pedagogia + IA + compliance). **Para vender em marketplace**: Hotmart/Eduzz (Studeia nao se aplica). **Hibrido**: empresa que TANTO vende curso B2C (EadBox/Hotmart) E precisa treinar funcionarios B2B (Studeia) — usar ambos faz sentido. ## Veja tambem - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) - [Use case: Certificacao profissional](/use-cases/professional-certification) - [Use case: Treinamento corporativo](/use-cases/corporate-training) ## FAQ **Q: Qual a diferenca entre Studeia, EadBox e EadPlataforma?** EadBox e EadPlataforma focam em **infoprodutores B2C** (vender curso online direto ao consumidor — afiliados, checkout, gateway de pagamento integrado). Studeia foca em **B2B institucional** (escola, cursinho, universidade, T&D corporativo — multi-tenant, SSO/SCIM, tutor IA, gradebook profissional, LTI). Use case diferente: EadBox para info-curso de produtividade ou idiomas. Studeia para escola brasileira que quer EAD completo com IA. **Q: Studeia tem checkout/afiliados/gateway de pagamento integrado?** Para B2B institucional: integra Stripe e Asaas (PIX/boleto brasileiro). Para B2C com afiliados: NAO temos sistema nativo de afiliados/checkout estilo Hotmart/Eduzz. Quem precisa disso usa EadBox/EadPlataforma. Quem vende curso B2B (institucional) ou usa Studeia internamente: Stripe+Asaas suficiente. **Q: Qual mais barato para 100 alunos?** EadPlataforma Profissional: R$397/mes (catalogo proprio). EadBox Pro: R$197/mes (alunos ilimitados, taxa transacao 4.9%). Studeia Escala: R$1.500/mes (100 alunos, IA inclusa). Studeia e mais caro mas inclui: tutor IA real, gradebook ponderado com rubricas, SSO Enterprise, LTI, mobile B2B white-label, analytics psicometricas. EadBox/EadPlataforma focam em entregar curso + cobrar — Studeia foca em ENSINAR + medir. **Q: EadBox/EadPlataforma tem IA?** EadBox lancou 'IA Pro' em 2024 (resumo de aulas, geracao de quiz — basico, baseado em OpenAI). EadPlataforma tem geracao de quiz via IA. Ambos limitados vs Studeia (multi-agente, RAG per-tenant, fallback Claude/GPT/Grok/Gemini, misconception detection, supervisor agent). Para curso info simples: IA basica do EadBox suficiente. Para EAD academico serio: Studeia. --- # [pt-BR] Studeia vs Edmodo (descontinuado) — alternativas em 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-edmodo Locale: pt-BR Section: comparisons Updated: 2026-05-24 **Short answer:** Edmodo foi descontinuado em 22 set 2022 (NetDragon). Principais alternativas no Brasil: (1) Google Classroom — grátis, ideal para quem já usa Google Workspace; (2) Microsoft Teams for Education — grátis com MS 365; (3) Studeia — R$250–1.500/mês, EAD completo com tutor IA, gamificação, portal de pais com IA narrativa, LGPD nativo e gradebook estruturado. Para escolas K-12 brasileiras que precisam de mais que o básico, Studeia + Google Classroom é a combinação recomendada ## Contexto: Edmodo descontinuado **Anuncio**: julho 2022 **Desligamento**: 22 setembro 2022 **Causa**: NetDragon (dona desde 2018) decidiu encerrar operacao global, focando em outros produtos educacionais (101 Education PLC). Edmodo tinha ~100M usuarios pre-fechamento, predominantemente escolas K-12 + alguns universidades. Brasil tinha base significativa, especialmente em redes estaduais e escolas privadas pequenas. ## O que Studeia oferece (vs o que Edmodo oferecia) | Feature Edmodo | Equivalente no Studeia | |---|---| | Timeline social escola-pais-aluno | Forums + Announcements + portal pais com narrativa IA | | Quizzes simples | Quiz engine com 8+ tipos + analytics psicometricas | | Sharing de materiais | Media library com pastas + sharing + versionamento | | Mobile app | App Expo nativo (Android publicado, iOS roadmap) | | Badges (Edmodo Snapshot) | Open Badges 3.0 + leaderboards + contests + rewards shop | | Calendario | Calendar com Google Calendar/Outlook sync | | Grupos de turma | ClassGroup com forums/anuncios escopados | | Integracao Google | Google Drive sync + SSO OIDC + Meet provider | **Plus features que Edmodo NAO tinha:** - Tutor IA multi-agente (Claude/GPT/Grok/Gemini com RAG per-tenant) - Gradebook estruturado (categorias + rubricas + weights) - LGPD compliance nativo (Brasil) - White-label completo (Enterprise) - LTI 1.3 (integrar com outros LMS) - SSO Enterprise (SAML/OIDC/SCIM) - API publica para integracoes ## Comparativo: 3 alternativas pos-Edmodo | Aspecto | Studeia | Google Classroom | MS Teams for Education | |---|---|---|---| | **Preco K-12** | R$250-1.500/mes | Gratis (com Workspace Edu Fund.) | Gratis (com A1) | | **Estrutura cursos** | Course→Module→Lesson | Classe → atribuicoes (flat) | Equipes → canais | | **Gradebook** | Categorias + weights + rubricas | Notas simples | Insights basicos | | **Quiz engine** | 8+ tipos + analytics psicometricas | Google Forms basico | Forms basico | | **Tutor IA** | Multi-agente nativo | Gemini (basico) | Copilot for Education (basico) | | **Gamificacao** | XP+badges+leaderboards+contests | NAO | NAO | | **Portal de pais** | Robusto + IA narrative | Limitado (Guardian email) | Limitado | | **Mobile** | App nativo white-label | App Classroom | App Teams | | **LGPD** | Nativo | GDPR via DPA | GDPR via DPA | | **White-label** | Total (Enterprise) | NAO | NAO | | **LTI 1.3** | Tool provider | NAO | NAO | ## Quando escolher cada alternativa ### Google Classroom ✅ Escola K-12 ja paga Google Workspace for Education Fundamentals (gratis) ✅ Foco em gestao basica (postar tarefa, dar nota simples) ✅ Sem necessidade de gamificacao/badges/analytics ✅ Sem necessidade de tutor IA real ✅ Aceita marca Google sempre presente ### MS Teams for Education ✅ Escola K-12 ja paga Microsoft 365 A1 (gratis) ✅ Ecossistema Microsoft (Word, Excel, PowerPoint) ✅ Foco em colaboracao em equipe ✅ Reunioes via Teams nativas ### Studeia ✅ Escola/cursinho/T&D corporativo que quer mais que basico ✅ Quer tutor IA real para tirar duvidas dos alunos ✅ Quer gamificacao para engajar alunos ✅ Quer portal de pais robusto com IA narrative ✅ Quer marca propria (white-label) ✅ Quer LGPD nativo brasileiro ✅ Quer estrutura curricular (Course→Module→Lesson) ## Migracao Edmodo backup → Studeia Se voce ainda tem o .zip de backup que Edmodo permitiu exportar: ### Caminho recomendado 1. **Cursos/conteudo**: nao ha import automatizado. Upload de arquivos individuais via Media Library de Studeia. 2. **Alunos**: CSV importavel via `/institution/users` com campos `name, email, role, classGroupIds, sendInvite`. 3. **Quizzes**: recriar via Quiz Editor ou Question Bank importer (CSV/GIFT). 4. **Notas historicas**: importar como GradeItem manual + Grade via API (sem retroatividade pra gradebook calculations). 5. **Comunicacao**: nao ha import — comecar do zero em Forums/Announcements. ### Setup em 1 semana | Dia | Tarefa | |---|---| | 1 | Trial Demo plan, configurar branding + cores da escola | | 2 | Importar alunos via CSV | | 3-4 | Recriar 5-10 cursos prioritarios (modulos + aulas) | | 5 | Configurar gamificacao (Agente IA cria badges automaticos) | | 6 | Vincular pais (GuardianLink) — SMS verification | | 7 | Treinar 2-3 professores piloto | ## Outras alternativas K-12 mencionadas como "substitutos do Edmodo" | Plataforma | Status | |---|---| | **Schoology** (PowerSchool) | Existe, mas EUA-foco, sem suporte PT-BR robusto | | **Canvas** (Instructure) | Higher ed-foco, K-12 oferta limitada | | **Brightspace** (D2L) | Universitaria, complexa para K-12 | | **Moodle** | Self-host, requer admin TI, sem foco K-12 nativo | | **Sambatech / Eduplay** | Brasileira, focada em video/ensino corporativo | | **Eadbox / EadPlataforma** | Brasileiras, EAD corporativo principalmente | ## Veredito Edmodo deixou um vacuum em K-12. **Google Classroom** virou default gratis (especialmente onde Google Workspace ja estava). Para escolas que querem mais que basico ou nao querem depender de Google: **Studeia** preenche o gap com tutor IA, gamificacao, gradebook estruturado e portal de pais robusto. ## Veja tambem - [Studeia vs Google Classroom](/comparisons/studeia-vs-google-classroom) - [Use case: Escola fundamental BNCC](/use-cases/primary-school-bncc) ## FAQ **Q: Edmodo ainda existe em 2026?** Nao. Edmodo foi descontinuado em 22 de setembro de 2022 (anunciado em julho 2022). NetDragon, dona do Edmodo, encerrou o servico globalmente. Escolas que usavam Edmodo precisaram migrar para alternativas. As tres opcoes mais comuns no Brasil: Google Classroom (gratis para escolas K-12), Microsoft Teams for Education (gratis), ou LMS pago como Studeia. **Q: Studeia substitui Edmodo bem?** Sim, com vantagens. Edmodo era forte em: (1) Comunicacao escola-pais-aluno via timeline social, (2) Quizzes simples, (3) Sharing de materiais, (4) Mobile app. Studeia tem todos esses + portal de pais com IA narrative, gradebook estruturado, tutor IA, gamificacao (XP/badges), 9 temas visuais, white-label, LGPD nativo. Diferenca chave: Studeia e pago (R$250-1.500/mes B2B) vs Edmodo era gratis. **Q: Qual alternativa gratis ao Edmodo?** Google Classroom (se a escola ja paga Google Workspace for Education Fundamentals — gratis para K-12). Tem comunicacao basica, atribuicao de tarefas, integracao Drive/Meet. Limitacoes: sem gradebook estruturado, sem rubricas, sem gamificacao, sem portal de pais robusto. Para necessidades basicas funciona; para EAD serio com curriculo BNCC + tracking de pais detalhado: Studeia. **Q: Como migrar conteudo do Edmodo (se ainda tenho backup)?** Edmodo permitiu export antes de fechar. Se voce tem .zip de backup: arquivos podem ser uploaded via Studeia media library (POST /api/institution/media), quizzes precisam ser recriados manualmente ou via question bank import (CSV/GIFT). Alunos via CSV. Sem migracao automatizada — Edmodo nao usava IMS CC. --- # [pt-BR] Studeia vs Google Classroom: comparativo 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-google-classroom Locale: pt-BR Section: comparisons Updated: 2026-05-23 **Short answer:** Google Classroom oferece gestão de turmas gratuita integrada ao Google Workspace — ideal para escolas K-12 que já usam Docs, Drive e Meet. Studeia é LMS B2B completo com tutor IA, gamificação OB 3.0, quiz analytics, gradebook avançado, LTI e SCIM. Para EAD estruturado e T&D corporativo: Studeia vence. Para escolas K-12 já no Google Workspace: Classroom + Studeia juntos — Classroom para o básico, Studeia para cursos estruturados ## Comparativo lado-a-lado | Aspecto | Studeia | Google Classroom | |---|---|---| | **Modelo** | LMS B2B completo | Gestao de turmas + tarefas | | **Preco** | R$250-1.500/mes (planos) | Incluido em Google Workspace | | **Suporte** | Equipe Studeia | Suporte Google + comunidade | | **Tutor IA** | Multi-agente Claude/GPT/Grok/Gemini | Gemini integrado (basico) | | **Gradebook** | Categories + weights + rubrics + integrity | Notas simples (sem categoria/peso/rubrica) | | **Quiz engine** | 8 tipos + analytics psicometricas | Google Forms (basico) | | **Gamificacao** | XP + badges OB 3.0 + leaderboards + contests | NAO tem | | **Forums** | Threads + replies + anexos | NAO tem (apenas comentarios em posts) | | **DMs** | Sim | Email (Gmail) | | **Aulas ao vivo** | BBB+Zoom+Teams+Meet adapter | Google Meet integrado | | **Mobile** | App Expo nativo white-label | App Classroom oficial | | **LTI 1.3** | Tool provider | NAO (Google nao oferece) | | **SSO Enterprise** | SAML+OIDC+SCIM | Google account only | | **White-label** | Total (Enterprise) | NAO (marca Google sempre) | | **API publica** | 64+ endpoints scoped | Classroom API basica | | **Multi-tenancy** | Sim, isolado por instituicao | Conta Google = Workspace | | **Conteudo offline** | Roadmap | Limitado | | **Certificados** | OB 3.0 + custom | NAO | | **LGPD** | Nativo | GDPR via Google DPA | ## Quando escolher Google Classroom ✅ Escola K-12 ja paga Google Workspace for Education ✅ Professores ja usam Google Docs/Drive/Meet ✅ Necessidade BASICA de LMS (postar tarefa, corrigir, dar nota simples) ✅ Quer ferramenta gratis sem licenca extra ✅ Curso curto/pontual (nao curriculo estruturado) ✅ Sem necessidade de gamificacao/badges/analytics ## Quando escolher Studeia ✅ EAD serio (curriculo estruturado, multiplos modulos/aulas) ✅ Cursinho ENEM (simulados, analytics, IA tutor) ✅ T&D corporativo (SSO empresa, certificados, tracking compliance) ✅ K-12 que quer mais que basico (gradebook ponderado, rubricas, gamificacao, portal pais com IA) ✅ Universidade (LTI, gradebook avancado, rubrics) ✅ Quer white-label real (sem marca Google) ✅ Precisa de mobile B2B com marca propria ## Cenarios hibridos Comum: escola usa Classroom para gestao operacional (tarefas, lembretes, comunicacao com pais via Gmail) + Studeia para cursos formais (curriculo BNCC, simulados, gamificacao, parent reports com IA). ### Studeia integra com Google Workspace - **Google Drive sync** — biblioteca de midia bidirecional - **Google Calendar** — aulas ao vivo sincronizam com calendario do aluno - **Google Meet** — provider de aula ao vivo nativo - **Google SSO via OIDC** — login com conta Google - Single Sign-On automatico entre Studeia e Classroom (mesma sessao Google) ## Limitacoes do Classroom para EAD Por que Classroom nao substitui LMS pleno: 1. **Sem gradebook estruturado**: notas sao por tarefa, sem categorias/pesos/rubricas. Calcular media ponderada e manual. 2. **Sem quiz engine**: depende de Google Forms (limitado em tipos, sem psicometricas, sem question bank). 3. **Sem hierarquia de cursos**: tudo e "Turma". Nao ha conceito de Curso > Modulo > Aula. 4. **Sem publicacao agendada**: tudo e publicado imediatamente. 5. **Sem RAG / tutor IA dedicado**: Gemini no Classroom e basico vs tutor IA multi-agente do Studeia. 6. **Sem analytics**: ve-se quem completou tarefa, mas nao analise psicometrica ou prediction. 7. **Sem gamificacao**: zero XP, badges, leaderboards. 8. **Sem certificados**: nao gera credenciais verificaveis. 9. **Sem LTI**: nao integra com outras ferramentas educacionais. 10. **Sem comunicacao estruturada**: comentarios em posts, mas sem forum threaded com search. ## Migracao Classroom → Studeia ### Possivel - ✅ Alunos: export Workspace + import via CSV - ✅ Materiais: download de Drive + reupload em Studeia - ✅ Notas: export CSV ### NAO suportado nativamente - ❌ Conteudo estruturado (Classroom nao tem cursos estruturados — recriar curriculo) - ❌ Histories de comentarios (perdas) - ❌ Calendar entries (recriar) ## Veredito honesto **Classroom permanece imbativel para**: - Escola K-12 que ja paga Workspace + quer ferramenta gratis para gestao basica - Cursos pontuais/curtos sem necessidade de estrutura - Integracao maxima com Google Docs/Drive/Meet (workflow Google nativo) **Studeia vence para**: - EAD estruturado (cursos formais, modulos, sequenciamento) - Cursinhos / preparacao para vestibular - T&D corporativo - Qualquer caso onde gamificacao, IA tutor, analytics, certificados, ou LTI sao necessarios **Estrategia mais comum**: escola K-12 usa AMBOS. Classroom para o operacional dia-a-dia, Studeia para cursos curriculares e gamificacao. ## Veja tambem - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) - [Studeia vs Canvas](/comparisons/studeia-vs-canvas) - [Integracao Google Workspace](/integrations/google-workspace) ## FAQ **Q: Google Classroom e um LMS de verdade?** Parcialmente. Google Classroom e um sistema de gestao de turmas (LMS lite) gratuito integrado ao Google Workspace for Education. Excelente para escolas que ja usam Google (Docs, Drive, Meet). Mas falta features de LMS pleno: gradebook estruturado com pesos e rubricas, quiz engine robusto, gamificacao, tutor IA, analytics psicometricas, comunicacao por forum, mobile B2B white-label, LTI, SCIM. Para EAD serio: Classroom e insuficiente. **Q: Posso usar os dois juntos?** Sim, e comum. Classroom para tarefas/comunicacao basica + Google Drive integration; Studeia para cursos estruturados, tutor IA, gradebook avancado, gamificacao. Studeia integra com Google Drive (sync de midia) + Google Calendar + Google Meet, complementando Classroom. **Q: Google Classroom esta disponivel para empresas?** Sim, mas com limitacoes. Workspace Business inclui Classroom basico. Workspace Enterprise tem features adicionais. Mas para T&D corporativo, Classroom e fraco — falta tracking de compliance, certificados, LTI, SSO enterprise para fora do Google. Studeia e mais adequado para T&D. **Q: Custos: Classroom e gratis, Studeia cobra?** Classroom: gratis se sua escola ja usa Google Workspace for Education Fundamentals (gratis). Workspace pago: USD $3-5/aluno/mes (sem Classroom diferenciado). Studeia: R$250-1.500/mes para 10-100 alunos. Para escolas que ja pagam Workspace: Classroom basico parece 'gratis'. Mas o TCO real considera funcionalidades — Classroom sem extras vs Studeia com tudo. --- # [pt-BR] Studeia vs Moodle: comparativo honesto 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-moodle Locale: pt-BR Section: comparisons Updated: 2026-05-23 **Short answer:** Studeia e SaaS B2B brasileiro com IA, gamificacao, gradebook psicometrico, white-label e mobile B2B built-in (R$250-1.500/mes para 10-100 alunos). Moodle e open-source, gratuito mas exige hospedagem propria, administrador dedicado, plugins de terceiros para IA/gamificacao/mobile, e tem ecossistema maduro (H5P, SCORM, plugins). Para escolas/cursinhos/T&D pequenos a medios no Brasil: Studeia geralmente vence em TCO 3 anos. Para universidades grandes ja em Moodle: complementar via LTI. ## Comparativo lado-a-lado | Aspecto | Studeia | Moodle | |---|---|---| | **Modelo** | SaaS gerenciado | Open-source self-hosted | | **Preco** | R$0-1.500/mes (planos) | Gratis + hosting + admin | | **Suporte** | Equipe Studeia (PT/EN) | Comunidade + Moodle Partners | | **Origem** | Brasil 2025 | Australia 2002 | | **Hospedagem** | Studeia (Brasil, LGPD) | Voce (qualquer lugar) | | **Tutor IA** | Built-in (Claude/GPT/Grok/Gemini multi-agente) | Via plugins (Moodle 4.5+ tem moodle-ai basico) | | **RAG por curso** | Built-in (Voyage AI + per-tenant) | Plugin | | **Gamificacao** | Built-in (XP, badges OB 3.0, leaderboards, contests, shop) | Plugin (Level Up!, Game) | | **Mobile B2B** | App Expo nativo (Android publicado) | Moodle Mobile (oficial) | | **White-label** | Total (Enterprise) | Possivel via tema + branding | | **SSO Enterprise** | SAML+OIDC+SCIM nativo | Plugins (auth_oidc, auth_saml2, scim) | | **Mensageria** | Forums + DM + announcements + email nativo | Sim | | **Integridade quiz** | Tab switch, time anomalies, flags inline | Safe Exam Browser (SEB) integration | | **Analytics psicometricas** | Cronbach, point-biserial, distractor analysis | Plugin (Statistics) | | **Gradebook** | Categories + rubrics + weights | Sim (mais complexo) | | **Aulas ao vivo** | BBB+Zoom+Teams+Meet (adapter unificado) | BBB nativo, outros via plugin | | **LGPD/GDPR** | Nativo (Brasil + Europa) | Plugins + manual | | **i18n** | 4 idiomas built-in (pt/en/es/fr) | 100+ idiomas (comunidade) | | **LTI 1.3** | Tool provider | Tool consumer + provider | | **API publica** | 64+ endpoints com scopes | Web Services REST/SOAP | | **Personalizacao codigo** | Limitada (API) | Total (open source) | | **Plugins terceiros** | Nao tem ecossistema | >1500 plugins ativos | | **Selos educacionais** | Aguardando | MEC, ISO | ## Quando escolher Studeia ✅ Voce e uma escola/cursinho/T&D corporativo no Brasil com 1-500 alunos ✅ Quer LGPD nativo (banco no Brasil, DPA enterprise) ✅ Quer tutor IA real (multi-agente, RAG per-tenant), nao plugin generico ✅ Quer suporte em portugues ✅ Quer gamificacao moderna nativa (XP, badges OB 3.0) ✅ Nao quer gerenciar hosting/atualizacoes/backups ✅ Quer mobile B2B funcional (App Store/Play Store proprio possivel) ✅ TCO 3 anos previsivel (custo fixo + IA proporcional ao uso) ## Quando escolher Moodle ✅ Voce e uma universidade publica com Moodle em producao + plugins customizados ✅ Tem equipe TI dedicada (administrador Moodle full-time) ✅ Precisa de SCORM 2004 + H5P + IMS CP completo (compatibilidade legacy) ✅ Precisa de selos MEC/ISO especificos ✅ Quer controle total do codigo (modificacoes pesadas) ✅ Tem >5000 alunos e custo fixo de licenca importa mais que features modernas ✅ Quer evitar lock-in em vendor (open-source = exit fluido) ## Custos reais — TCO 3 anos ### Escola fundamental 200 alunos | Item | Moodle | Studeia (Escala) | |---|---|---| | Licenca | R$0 | R$54.000 (R$1.500 × 36) | | Hosting | R$3.600 (~R$100/mes) | Incluido | | Admin parcial (10h/mes) | R$36.000 (R$1k/mes consultoria) | R$0 | | Plugins comerciais | R$7.200 (R$200/mes IA + gamif + mobile) | R$0 | | Customizacao inicial | R$10.000 (one-shot) | R$0 | | **TOTAL 3 anos** | **R$56.800** | **R$54.000** | Studeia ja inclui IA (R$0-2k de custo IA proporcional ao uso) e mobile. ### Cursinho ENEM 800 alunos | Item | Moodle | Studeia (Enterprise) | |---|---|---| | Licenca | R$0 | R$108.000 (negociar R$3k/mes) | | Hosting robusto | R$18.000 (R$500/mes load balancer + RDS) | Incluido | | DevOps dedicado (20h/mes) | R$108.000 (R$3k/mes) | R$0 | | Plugins + IA tutor + analytics | R$36.000 | R$0 | | **TOTAL 3 anos** | **R$162.000** | **R$108.000** | Para >500 alunos Studeia Enterprise tende a ser 30-50% mais barato. ## Migracao Moodle → Studeia ### Possivel - ✅ Conteudo: import IMS CC v1.x (modulos, aulas, recursos, quizzes QTI 1.2) - ✅ Alunos: import CSV ou SCIM provisioning - ✅ Notas: import CSV - ✅ Estrutura de cursos - ✅ LTI: Studeia como external tool ate migracao completa ### NAO suportado nativamente - ❌ H5P content packages (recriar como subtypes interativos) - ❌ SCORM 2004 (recriar como aulas video + quizzes nativos) - ❌ Plugins customizados (sem equivalente) - ❌ Custom XML templates Moodle - ❌ Workshop activities (mais complexo no Moodle) ### Caminho recomendado 1. Mes 1: Trial 2 cursos pilotos no Studeia (Demo plan) 2. Mes 2-3: Migrar materiais pilotos via IMS CC + ajustes manuais 3. Mes 4: Migrar alunos via SCIM 4. Mes 5-6: Validar features (gradebook, parent reports, IA tutor) 5. Mes 7+: Migracao gradual cursos restantes 6. Mes 12+: Decidir descontinuar Moodle ou manter em paralelo (cursos legacy via LTI) ## Veredito honesto **Para 80% das instituicoes brasileiras pequenas e medias (1-500 alunos)**: Studeia vence em TCO, features modernas, suporte em portugues e tempo-para-valor (deploy = 1 dia vs 30 dias do Moodle gerenciado). **Para 15% (universidades grandes, ja em Moodle ha anos)**: Moodle continua melhor opcao por inercia + ecossistema. Studeia como complemento para cursos novos. **Para 5% (empresas que NAO podem ter dados em SaaS)**: Moodle self-hosted on-premise. Studeia ainda nao oferece on-premise. ## Veja tambem - [Studeia vs Canvas](/comparisons/studeia-vs-canvas) - [Studeia vs Google Classroom](/comparisons/studeia-vs-google-classroom) - [Caso de uso: Cursinho ENEM](/use-cases/enem-prep-cursinho) - [Plataforma overview](/platform/overview) ## FAQ **Q: Studeia substitui Moodle?** Depende do contexto. Para instituicoes brasileiras pequenas/medias (1-500 alunos) que querem SaaS gerenciado, IA built-in, suporte em portugues e LGPD nativo: Studeia substitui sim e elimina hospedagem/manutencao. Para universidades grandes com Moodle ja em producao e ecossistema de plugins customizados: migracao parcial faz mais sentido (Studeia como complemento para cursos novos via LTI). **Q: Qual e mais barato em 3 anos (TCO)?** Moodle: licenca FREE + hosting ~$50-300/mes + administrador parcial (~R$3-8k/mes) + plugins pagos (~R$200/mes) + customizacao (consultoria) = R$120k-200k em 3 anos para 500 alunos. Studeia Crescimento (50 alunos R$1.000/mes) ou Escala (100 alunos R$1.500/mes) ou Enterprise: R$36k-50k em 3 anos. Para >500 alunos: Studeia Enterprise (sob consulta) tipicamente 30-50% mais barato que Moodle gerenciado. **Q: Moodle tem mais features que Studeia?** Moodle tem mais EXTENSOES (ecossistema de plugins de terceiros). Studeia tem mais features NATIVAS modernas: tutor IA multi-agente, gamificacao nativa, gradebook com psicometricas, mobile B2B Expo, SSO/SCIM enterprise out-of-box, white-label real. Moodle exige plugins (gratis ou pagos) para a maioria desses recursos. **Q: Moodle e melhor que Studeia em alguma coisa?** Sim, em varios pontos: (1) Ecossistema H5P/SCORM/IMS muito mais maduro. (2) Plugins de terceiros (>1500 ativos). (3) Open-source = controle total e customizacao do codigo. (4) Maturidade institucional (universidades, governo, EAD MEC). (5) Conformidade educacional brasileira com selo MEC (Studeia ainda nao tem). (6) Comunidade global gigante. **Q: Posso migrar do Moodle para Studeia?** Sim, parcialmente. Import IMS Common Cartridge (POST /api/institution/courses/import) traz modulos, aulas, recursos basicos e quizzes QTI 1.2. H5P content packages NAO sao suportados nativamente (recriar como subtypes interativos do Studeia). SCORM 2004 NAO suportado. Alunos: import via CSV bulk ou SCIM. --- # [pt-BR] Tutor IA: pipeline multi-agente URL: https://docs.studeia.com/features/ai-tutor/overview Locale: pt-BR Section: features Updated: 2026-05-23 **Short answer:** O tutor IA do Studeia executa 6 agentes em pipeline: Orchestrator coordena → StudentModelService carrega contexto do aluno → RetrievalAgent busca RAG → PedagogicalAgent escolhe estrategia → LLM responde (com fallback automatico) → EvaluationAgent + ContentAgent + SupervisorAgent rodam em background. 3 agentes sao TypeScript puro (zero custo LLM), 3 sao Haiku background (~$0.003 total). Personalizacao real baseada em ConceptMastery bayesiano. ## Pipeline detalhado ### Pre-LLM (sincrono, zero custo LLM) 1. **StudentModelService.getSnapshot(userId, courseId)** - Carrega ConceptMastery (Beta distribution per concept) - Carrega misconceptions ativas/resolving (com evidence trail) - Carrega EpisodicMemory (o que funcionou antes) - Carrega quizContext (avgScore, passRate, totalAttempts, weakAreas) - Carrega ChatSession history (sliding window 10 msgs) 2. **RetrievalAgent.retrieve(query, studentModel)** - Reformula query usando contexto (substitui "isso", "aquilo" por conceitos atuais) - Busca pgvector com filtros (tenantId, courseId) - Boost por areas fracas em quizzes (`quizWeakAreas` do studentModel) - Top-K com reranking semantico 3. **PedagogicalAgent.select(studentModel, query)** - Avalia mastery medio + dominio especifico da query - Aplica ajustes (chat-quiz divergence, age, learning style) - Retorna estrategia + system prompt addition 4. **buildEnrichedPrompt(query, studentModel, ragChunks, strategy, misconceptions)** - Monta system prompt com: - Estrategia pedagogica selecionada - RAG context (top-5 chunks com source attribution) - Misconceptions ativas (com instrucoes para abordar) - Recent quiz attempts (memoria inter-turno) - inline quiz trigger context (se houve quiz recente) ### LLM principal (streaming, SSE) `router.stream(taskType: "chat_tutor", messages, options)` resolve provider via TenantTaskModelConfig: - Claude (primary) → OpenAI → xAI Grok → Google Gemini (fallback chain) - Circuit breaker per provider (Redis state) - Metering middleware: rate limit + credit check + cost calculator - Streaming via Server-Sent Events para cliente LLM pode emitir tool calls especiais: - `[INLINE_QUIZ]{...}[/INLINE_QUIZ]` — quiz interativo renderizado no chat - `present_quiz` tool call — formato Vercel AI SDK ### Post-LLM (background via after(), fire-and-forget) 5. **EvaluationAgent.evaluate(turn, studentModel)** — Haiku, ~$0.001 - Classifica understanding: correct | partial | incorrect | unclear - Detecta StudentMisconception com: - source: "chat" - sourceSessionId - contextSnippet (max 500 chars) - concepts[] (mapped to ConceptMastery) - Atualiza ConceptMastery (Bayesian update via beta(alpha+success, beta+failure)) - Chama MisconceptionResolutionService.checkAndTransition (state machine) 6. **ContentAgent.preGenerate(studentModel, conceptId)** — Haiku, ~$0.001 - Gera exercicio follow-up baseado em weak concepts - Armazena em Redis (TTL 30min) para servir no proximo turno - Reduz latencia percebida pelo aluno 7. **SessionSummarizer** (a cada 10 turnos) — Haiku, ~$0.001 - Resume historico longo - Substitui mensagens antigas no sliding window - Preserva insights pedagogicos relevantes 8. **SupervisorAgent.run(turn, courseContext)** — Haiku, ~$0.001 - Classifica severity (5 niveis) + category (8 tipos) - Cria AiSupervisorIncident se severity != "none" - Aplica strikes / quarantine / safety cooldown conforme regras ## Configuracao por admin ### TenantTaskModelConfig Admin escolhe provider+model por tipo de tarefa: ``` chat_tutor → Claude Sonnet 4.6 (ou GPT-4o, ou Grok-3, etc) chat_evaluation → Claude Haiku chat_summarization → Claude Haiku chat_supervisor → Claude Haiku content_generation → Claude Haiku course_review → Claude Sonnet gamification_agent → Claude Sonnet course_agent → Claude Sonnet ``` ### PedagogicalConfig Configurabilidade pedagogica por tenant: - masteryThresholds: thresholds para mudar estrategia (default 0.3, 0.5, 0.7, 0.9) - domainOverrides: ajuste por dominio (ex: matematica usa scaffolding mais agressivo) - ageOverrides: ajuste por faixa etaria (crianca = direct_instruction mais frequente) - learningStyleOverrides: visual, auditivo, kinestesico ## Prompt template customization Admin institucional pode editar system prompt do tutor via PromptTemplate (no banco): - Por taskType (chat_tutor) - Por provider (Anthropic, OpenAI, Google, xAI — variantes otimizadas) - Por locale (pt-BR, en-US, es-ES, fr-FR) - Por tenant (ou null = global) - Por curso (override per-course) ## Limitacoes tecnicas - **Latencia first-token**: 800-1500ms (incluindo pre-LLM pipeline) - **Latencia total turno**: 2-8s para resposta media (~300 palavras) - **Context window**: limitado pelo provider (Claude Sonnet 4.6 = 200K, GPT-4o = 128K) - **Idiomas**: tutor responde no idioma do aluno mas internamente o pipeline e bilingue (en/pt) - **Imagens**: tutor aceita imagens no input (multimodal Claude/GPT/Gemini) mas RAG e text-only - **Voz**: nao implementado (roadmap) ## Veja tambem - [Tutor IA: visao executiva](/platform/ai-tutor) - [RAG Ingestion](/features/ai-tutor/rag-ingestion) - [Agente Supervisor](/features/ai-tutor/safety-supervisor) ## FAQ **Q: Quantos agentes IA o tutor usa?** 6 agentes ativos: Orchestrator (TypeScript puro), RetrievalAgent (TypeScript puro), PedagogicalAgent (TypeScript puro), LLM principal (Claude/GPT/Grok/Gemini com fallback), EvaluationAgent (Haiku background), ContentAgent (Haiku background), SupervisorAgent (Haiku background). 3 sao deterministicos (sem custo LLM), 3 sao background fire-and-forget (custo ~$0.003 total por turno). **Q: Quanto custa um turno completo do tutor?** Tipicamente $0.005-$0.05 por turno completo. Breakdown: LLM principal (Sonnet) $0.005-$0.04 + EvaluationAgent (Haiku) $0.001 + ContentAgent (Haiku) $0.001 + SupervisorAgent (Haiku) $0.001. Mensagens curtas em conceitos simples podem custar $0.001 (Haiku-only). **Q: Posso desabilitar o tutor IA para um curso especifico?** Sim. Course.aiTutorEnabled (boolean, default true). Admin institucional toggle em /institution/courses/[id]/settings. Sidebar do aluno e Course sub-nav escondem 'Chat Tutor' quando desabilitado. --- # [pt-BR] RAG Ingestion: tutor IA com material do curso URL: https://docs.studeia.com/features/ai-tutor/rag-ingestion Locale: pt-BR Section: features Updated: 2026-05-23 **Short answer:** RAG Ingestion no Studeia permite que o tutor IA cite o material do seu curso. POST /api/institution/courses/[id]/rag-ingest extrai texto de aulas (slides, videos com transcripcao, PDFs, quizzes), chunka em 800 tokens com 200 overlap, gera embeddings via Voyage AI (1024 dims, fallback OpenAI) e armazena com filtro tenant+course. Modes full ou incremental. autoSyncRag=true reingere automaticamente ao editar aulas. ## Como funciona ``` POST /api/institution/courses/[courseId]/rag-ingest Body: { "mode": "full" | "incremental" } ↓ 1. Lista aulas publicadas do curso 2. Para cada aula, extrai texto por tipo: - rich_text → strip HTML - slides → join text elements + speaker notes - quiz → join question + explanation por questao - pdf → document-extractor (PyPDF + Adobe extract fallback) - video → LiveClassTranscription.transcriptionText (se aprovada) - assignment → instructions 3. Chunking: 800 tokens, 200 overlap, preserva estrutura semantica 4. Embeddings via Voyage AI (1024 dims, fallback OpenAI) 5. Cria ContentBlock + ContentEmbedding com metadata: { source: "course_lesson", courseId, lessonId, lessonTitle, moduleTitle, ingestionId } 6. Status final em CourseRagIngestion ``` ## Modes ### `mode: "full"` Deleta TODOS os ContentBlock + ContentEmbedding do curso e re-ingere tudo. Quando usar: - Primeira ingestao do curso - Apos reorganizacao maior (modulos renomeados, aulas reordenadas) - Suspeita de embeddings corrompidos Custo: proporcional ao tamanho total do curso. Tipicamente $0.004 por 30 aulas. ### `mode: "incremental"` Identifica aulas modificadas apos ultima ingestao (`updatedAt > lastIngestionAt`), deleta apenas chunks dessas aulas e reingere. Quando usar: - Edicoes pontuais - Auto-sync (recomendado para producao) - Adicao de novas aulas Custo: proporcional ao delta. Tipicamente $0.0001 por aula modificada. ## Auto-sync `Course.autoSyncRag: Boolean @default(false)` Quando `true`: - Toda edicao de aula via API `/api/institution/courses/[id]/modules/[mid]/lessons/[lid]` dispara reingestao incremental - Roda via Next.js `after()` (nao bloqueia a request do admin) - Falha silenciosa registrada em `CourseRagIngestion.errors` JSON Recomendado para producao. Mantenha desligado durante setup inicial do curso para evitar embeddings desperdicados. ## Status e debug ``` GET /api/institution/courses/[courseId]/rag-ingest Response: { "ingestionId": "uuid", "courseId": "uuid", "mode": "incremental", "status": "completed", // pending | running | completed | failed "startedAt": "2026-05-23T10:00:00Z", "completedAt": "2026-05-23T10:01:34Z", "stats": { "lessonsProcessed": 5, "chunksCreated": 47, "tokensEmbedded": 12450, "costUsd": 0.0006 }, "errors": [] } ``` ## Embeddings provider | Provider | Modelo | Dims | Custo/1K tokens | |---|---|---|---| | Voyage AI (primary) | voyage-3 | 1024 | $0.00005 | | OpenAI (fallback) | text-embedding-3-large (com `dimensions: 1024`) | 1024 | $0.00013 | Direct fetch (AI SDK v3 nao suporta parametro `dimensions`): ```ts // Voyage AI fetch("https://api.voyageai.com/v1/embeddings", { body: JSON.stringify({ model: "voyage-3", input: texts, input_type: "document" }) }) ``` ## Retrieval em runtime Durante o chat tutor, RetrievalAgent executa: ```ts const chunks = await retrieve({ query: reformulatedQuery, filters: { tenantId, courseId }, k: 10, tenantOnlyMode: true, // exclui fallback para conteudo global boostByWeakAreas: studentModel.quizContext.weakAreas }); ``` `tenantOnlyMode: true` garante que o tutor NUNCA cita conteudo de outro tenant — mesmo se houver conteudo similar no banco. ## Deletar RAG do curso ``` DELETE /api/institution/courses/[courseId]/rag-ingest ``` Remove todos ContentBlock + ContentEmbedding + CourseRagIngestion do curso. Util para arquivar cursos sem ocupar pgvector. ## Limitacoes - **Imagens**: nao sao convertidas em embeddings. Roadmap: descricao automatica via vision LLM antes do embedding. - **Equacoes matematicas**: extraidas como LaTeX-like text. RAG funciona mas qualidade depende do markup original. - **Videos sem transcripcao**: nao sao ingeridos. Configure auto-transcricao em MediaAsset (Whisper → Google STT) antes. - **Tamanho maximo por curso**: pgvector suporta milhoes de vetores mas latencia de retrieval cresce. >10K chunks por curso pode ficar lento — considere quebrar em sub-cursos. ## Veja tambem - [Tutor IA Overview](/features/ai-tutor/overview) - [Media Transcription](/features/cms/media-transcription) ## FAQ **Q: O tutor IA cita o material do meu curso?** Sim, mas voce precisa ingerir o curso no RAG primeiro. POST /api/institution/courses/[id]/rag-ingest (modes: full | incremental). O sistema extrai texto de todas as aulas publicadas, chunka, gera embeddings via Voyage AI e armazena com filtro por tenantId+courseId. Apos isso, todas as conversas do tutor referentes ao curso citam o material certo. **Q: Como atualizar o RAG quando eu edito uma aula?** Set Course.autoSyncRag=true. Toda edicao de aula via API dispara reingestao incremental via after() (background, nao bloqueia o admin). Alternativamente, dispare manualmente: POST /api/institution/courses/[id]/rag-ingest body {mode: 'incremental'}. **Q: Quanto custa ingerir um curso?** Embeddings via Voyage AI: ~$0.00005/1K tokens. Curso medio (30 aulas, 50K palavras = ~70K tokens) custa ~$0.004 em embeddings na primeira ingestao. Incremental e proporcional ao delta. Sem custo recorrente — embeddings ficam armazenados em pgvector. **Q: Que tipos de aula sao ingeridos?** rich_text (HTML strip), slides (text elements + speaker notes), quiz (question + explanation), pdf (document-extractor: PyPDF→Adobe extract fallback), video (LiveClassTranscription.transcriptionText quando disponivel), assignment (instructions). Tipos external_link e live_class sem transcripcao nao sao ingeridos. --- # [pt-BR] Agente Supervisor: moderacao IA do chat tutor URL: https://docs.studeia.com/features/ai-tutor/safety-supervisor Locale: pt-BR Section: features Updated: 2026-05-23 **Short answer:** Agente Supervisor IA do Studeia modera o chat tutor em background apos cada turno usando Claude Haiku (~$0.001/turno). Classifica em 5 niveis de severity (low/medium/high/critical/safety) e 8 categorias (linguagem impropria, violencia, ilegal, sexual, off_topic, harassment, self_harm, jailbreak_attempt). 3 strikes em 7 dias = quarentena 48h. Self-harm (severity=safety) NUNCA pune — mostra acolhimento + recursos crise (CVV 188, SAMU 192) + alerta URGENT ao admin institucional. ## Filosofia EAD com menores e contextos sensiveis (depressao, ansiedade pre-vestibular, bullying) exige moderacao IA real, nao so disclaimers. Studeia adota: 1. **Moderacao em background, nao gatekeeping** — supervisor analisa apos resposta, nao bloqueia o stream. Aluno recebe resposta normal e supervisor atua se necessario nos turnos seguintes. 2. **Self-harm como crise, nao infracao** — nunca punir aluno em sofrimento. 3. **Cascateamento de configuracao** — admin pode desabilitar por tenant ou por curso quando contexto exige (anatomia, farmacologia, psicologia). 4. **Auditoria completa** — todo incidente, transicao de status, quarentena, apelo registrado em AdminAuditLog. ## Modelo de dados ``` AiSupervisorIncident id, userId, tenantId, courseId? severity: low | medium | high | critical | safety categories: [tipos] status: open | acknowledged | resolved | dismissed | auto_resolved messagesSnapshot: JSON (PII — retencao 2 anos via cron) supervisorReasoning: string countedAsStrike: boolean detectedAt, resolvedAt appealText: string (max 500 chars, 1 por quarentena) AiTutorQuarantine id, userId, tenantId reason: string expiresAt: timestamp liftedBy: userId? (admin que liberou manualmente) ``` ## Pipeline supervisor ``` Chat turno completo ↓ (after()) SupervisorAgent.run({ userId, tenantId, courseId, messages: lastNTurns, isMinor: user.isMinor, courseContext: { title, description } // whitelist contextual }) ↓ LLM (Haiku) classifica: severity + categories + reasoning ↓ decideAction({ severity, categories, recentStrikes, isMinor, isSafety }) ↓ Acoes possiveis: - none (nao registra) - warn (in-app notification) - register (cria incident, countedAsStrike) - quarantine (cria AiTutorQuarantine 48h) - safety (cooldown Redis 24h + acolhimento + admin URGENT) ``` ## Regras de severidade | Severity | Categoria tipica | Acao 1a infracao | Acao 2a+ infracao | |---|---|---|---| | **low** | linguagem impropria leve | warn | strike +1; 3 strikes = quarentena 48h | | **medium** | off-topic persistente, jailbreak | warn + register | strike +1; 3 strikes = quarentena 48h | | **high** | violencia, sexual, ilegal | quarentena 48h | quarentena 7 dias | | **critical** | ameaca a outros, conteudo extremo | quarentena 7 dias | quarentena indefinida + admin review | | **safety** | self_harm | NUNCA quarentena — cooldown 24h + acolhimento + admin URGENT | mesmo | ## Self-harm: tratamento especial Quando `severity === "safety"`: 1. **Stream do tutor e interrompido imediatamente** — tutor nao responde algo inadequado a uma crise 2. **Mensagem de acolhimento** mostrada ao aluno: > "Estou aqui com voce. Se voce esta passando por um momento dificil, por favor procure ajuda: > - CVV 188 (24h, ligacao gratuita, anonima) > - SAMU 192 > - [Centro de Valorizacao da Vida](https://cvv.org.br) — chat online > Voce nao esta sozinho(a)." 3. **Cooldown Redis** `tutor-safety-cooldown:{userId}` com TTL configuravel (`SUPERVISOR_SAFETY_COOLDOWN_HOURS`, default 24h) 4. **Email URGENT imediato** ao admin institucional via template `ai_supervisor_safety_urgent` 5. **Incident criado em status 'open'** — admin DEVE revisar 6. **NUNCA strike** (countedAsStrike=false), NUNCA quarentena, NUNCA punicao ## Apelo de quarentena Aluno em quarentena ve componente `QuarantineNotice` (web + mobile equivalente): - Explica motivo (severity + categoria, sem expor reasoning interno do supervisor) - Mostra countdown ate expiracao - Form de apelo: max 500 chars, 1 por quarentena - Submit cria `appealText` no incident + notifica admin institucional - Admin pode: acknowledge, dismiss (libera quarentena), resolve, ou ignorar (quarentena expira sozinha) ## Configuracao ### Cascade de habilitacao ``` Course.supervisorEnabled (null = inherit) ↓ se null Tenant.supervisorEnabled (null = inherit) ↓ se null default = true para B2B (com tenant) ``` Cache Redis versionado: `supervisor-flag-version:{tenantId}` + chave `supervisor-enabled:v{N}:{tenantId}:{courseId}`. Toda mutacao chama `bumpSupervisorFlagVersion(tenantId)` que incrementa o version — invalida logicamente todas as chaves sem SCAN+DEL. ### Apenas admin global edita - `PATCH /api/admin/tenants/[id]/supervisor` — toggle por tenant - `PATCH /api/admin/courses/[id]/supervisor` — toggle por curso - Ambas exigem `role === "admin"` global + auditadas em AdminAuditLog ### Prompt do supervisor Editado SOMENTE por admin global (regra critica 141): `PromptTemplate` com `taskType = chat_supervisor` aceita SOMENTE `tenantId = null`. Endpoints `/api/institution/prompts/*` rejeitam essa taskType com 403. ## Auditoria + retencao - Todo incident registrado com `messagesSnapshot` (PII) - Cron diario `/api/cron/supervisor-maintenance`: - Auto-expira quarentenas vencidas - Purga `messagesSnapshot=[]` + `appealText=null` apos 2 anos (regra critica 145) - Envia digest `ai_supervisor_digest` ao admin agrupando incidents open/acknowledged das ultimas 24h - AdminAuditLog: `ai_supervisor.incident.created/acknowledged/dismissed/resolved`, `quarantine.lift`, `prompt.update`, `tenant.toggle`, `course.toggle` ## LGPD - `GET /api/user/data-export` inclui `aiSupervisor.{incidents, quarantines}` do usuario - `DELETE /api/user/account` anonimiza `messagesSnapshot=[]` + `appealText=null` mantendo severity/categories para retencao fiscal - Listas (`/api/institution/ai-supervisor/incidents`) usam `select` explicito que OMITE messagesSnapshot e reasoning — somente rota de detalhe expoe ## Limitacoes conhecidas - **Falso-positivo em contexto medico/farmacologia**: contexto do curso (courseContext.title) e enviado ao supervisor para whitelist. Mas pode falhar em casos extremos. Solucao: desabilitar supervisor para cursos especificos. - **Idioma**: prompt do supervisor e localizado (4 idiomas), mas classificacao pode ter pequenas variacoes de qualidade entre PT-BR e EN-US. - **Jailbreak sophisticated**: ataques de prompt injection muito elaborados podem passar. Mitigacao: defesa em camadas (system prompt + supervisor + rate limit). - **Privacy vs safety tradeoff**: messagesSnapshot e PII. Retencao maxima 2 anos. Admin global ve em /admin/ai-supervisor/incidents/[id] — auditado. ## Veja tambem - [Tutor IA Overview](/features/ai-tutor/overview) - [Tutor IA: visao executiva](/platform/ai-tutor) - [LGPD compliance](/legal/lgpd-rights-guide) ## FAQ **Q: Como o Studeia protege alunos no chat IA?** Tres camadas: (1) System prompt do tutor inclui guardrails (sem conselho medico/legal/financeiro, sem topicos inadequados). (2) Agente Supervisor (Haiku, background, ~$0.001) classifica cada turno em 5 niveis severity x 8 categorias. (3) Para self-harm (severity=safety), tutor e interrompido com mensagem de acolhimento + recursos crise (CVV 188, SAMU 192) + notificacao URGENT ao admin. **Q: Se o aluno escrever algo inadequado, o que acontece?** Depende da severidade. LOW (1a infracao): warning ao aluno. MEDIUM: warning + incidente registrado. 3 strikes (LOW ou MEDIUM em 7 dias): quarentena 48h. CRITICAL: quarentena 7 dias + notificacao admin. SAFETY (self-harm): NUNCA punicao — acolhimento + recursos crise + alerta URGENT. **Q: Quarentena impede o aluno de usar a plataforma?** Apenas o chat tutor IA. Aluno mantem acesso a cursos, aulas, materiais, gradebook, mensagens com professor. Aluno pode submeter apelo (max 500 chars, 1 por quarentena) que e revisado pelo admin institucional. **Q: Posso desabilitar o supervisor para um curso especifico?** Sim. Cascateamento: Course.supervisorEnabled (null = inherit) → Tenant.supervisorEnabled → default ON. Admin global edita via /admin/ai-supervisor/tenants ou /admin/ai-supervisor/courses. Util para cursos com conteudo medico/farmacologia/anatomia onde termos sensiveis sao legitimos. **Q: Self-harm e tratado como infracao?** NUNCA. Self-harm (severity=safety) e crise, nao infracao. Sistema: (1) Interrompe tutor com mensagem de acolhimento. (2) Mostra recursos de crise — Brasil: CVV 188 (24h, anonimo), SAMU 192, Centro de Valorizacao da Vida online. (3) Notifica admin URGENT por email imediato. (4) Cria incidente em status 'open' que nasce para revisao humana. (5) NUNCA aplica strike, NUNCA cria quarentena. --- # [pt-BR] Gradebook: notas, categorias e rubricas URL: https://docs.studeia.com/features/assessment/gradebook Locale: pt-BR Section: features Updated: 2026-05-23 **Short answer:** Gradebook do Studeia organiza notas via GradeCategory (pesos), GradeItem (atividades) e Grade (notas individuais). Suporta rubricas multi-criterio, breakdown expansivel para alunos, exportacao CSV, integridade flags inline (ShieldAlert para quiz com tab switches/time anomalies), categorias drop-lowest configuravel, late penalty automatico, release policy (immediate/manual/scheduled). ## Modelo ``` GradeCategory (peso, drop_lowest_n, late_penalty_pct) └── GradeItem (atividade — quiz, assignment, manual) └── Grade (nota por aluno) └── Rubric (opcional — criterios) ``` ## Calculo ``` courseGrade = Σ (categoryAvg × categoryWeight) / totalWeight categoryAvg = average(itemAvgs após drop_lowest) itemAvg = Σ studentGrades / itemMaxScore × 100 ``` Late penalty aplicado se `submittedAt > dueDate` (configurable por categoria). ## Rubricas ```json { "name": "Redacao ENEM", "criteria": [ { "name": "Dominio da norma culta", "weight": 0.2, "levels": [ { "score": 200, "label": "Excelente", "description": "..." }, { "score": 160, "label": "Bom", "description": "..." }, { "score": 120, "label": "Regular", "description": "..." } ] }, { "name": "Compreensao do tema", "weight": 0.2, "levels": [...] } ] } ``` Aluno ve breakdown expansivel: nota final + cada criterio + comentario. ## Integridade flags Inline no gradebook ao lado de cada nota de quiz: - 🛡️ ShieldAlert vermelho → tabSwitchCount > 5 OU avgTimePerQuestion < 2s - 🛡️ ShieldAlert amarelo → 2-5 tab switches OU 2-5s por questao - Tooltip detalha: "Tab switches: 8, time per question: 1.2s avg" Professor decide acao (anular, manter, revisar). ## Exportacao `GET /api/institution/courses/[id]/gradebook/export?format=csv` retorna CSV com: - Aluno - Email - Cada GradeItem como coluna (nota raw + nota ponderada) - Total final - Status (passing/failing baseado em passingScore) Compativel com Google Sheets, Excel. ## Veja tambem - [Quiz Engine](/features/assessment/quiz-engine) ## FAQ **Q: Como faco media ponderada?** Crie GradeCategory com weight (ex: 'Quizzes' 40%, 'Provas' 60%). Cada GradeItem (atividade) pertence a uma categoria. Studeia calcula media ponderada automaticamente. **Q: Posso usar rubricas em assignments?** Sim. Crie Rubric com criterios (cada um com escala 1-5 ou customizada). Vincule a um GradeItem ou assignment lesson. Ao corrigir, professor avalia criterio-por-criterio e o sistema calcula nota final + breakdown expansivel para o aluno. **Q: Aluno ve a nota imediatamente?** Depende: GradeItem.releasePolicy controla. Opcoes: 'immediate' (visivel ao publicar), 'manual' (professor decide), 'scheduled' (releaseAt date). Quiz auto-corrigido com showResultsToStudent=true: imediato. **Q: Tem deteccao de plagio?** Para assignments de texto: integracao com Turnitin via LTI (roadmap). Para quiz: integridade academica nativa (tab switch, time anomalies — exibida como ShieldAlert no gradebook). Para essays: detection LLM opcional (admin habilita). --- # [pt-BR] Quiz Engine: configuracao, integridade e analytics psicometricas URL: https://docs.studeia.com/features/assessment/quiz-engine Locale: pt-BR Section: features Updated: 2026-05-23 **Short answer:** Quiz Engine do Studeia: 8+ tipos de questao auto-corrigidas (multiple_choice, true_false, fill_blank, matching, ordering, numeric, short_answer, essay). Configuracao com maxAttempts, timeLimitMinutes, shuffleQuestions/Options, accessCode, scoringPolicy (highest/latest/average), reviewMode. Integridade academica (tab switch, time anomalies). Analytics psicometricas (Cronbach alpha, point-biserial discrimination, item difficulty, distractor analysis). Question bank reusavel. ## Tipos de questao | Tipo | Auto-correcao | Casos de uso | |---|---|---| | multiple_choice | Sim | Conhecimento factual, conceitos | | true_false | Sim | Verificacao rapida | | fill_blank | Sim (normalizacao) | Vocabulario, formulas | | matching | Sim | Associacoes (palavra-definicao) | | ordering | Sim | Sequencia logica/cronologica | | numeric | Sim (com tolerance) | Calculos matematicos/fisicos | | short_answer | Sim (normalizacao + sinonimos) | Respostas curtas | | essay | Manual (ou LLM opcional) | Redacao, dissertacao | ## Configuracao do quiz `QuizConfiguration` em content JSON: ```json { "maxAttempts": 3, "timeLimitMinutes": 30, "shuffleQuestions": true, "shuffleOptions": true, "accessCode": "ENEM2026", "scoringPolicy": "highest", // highest | latest | average "reviewMode": "after_submit", // after_submit | after_due_date | never "passingScore": 70, "showResultsToStudent": true, "allowGoBack": false // se false, aluno nao volta para questoes anteriores } ``` ## Fluxo de submissao ``` POST /api/courses/[courseId]/lessons/[lessonId]/quiz/start ↓ - Valida matricula + lesson availability (checkLessonAvailability) - Valida maxAttempts nao excedido - Valida accessCode se configurado - Cria QuizAttempt com optionOrders (shuffles persistidos) - Retorna questoes SEM correctIndex (regra critica 66) ↓ Aluno responde (cliente envia tab switch events em background) ↓ POST /api/courses/[courseId]/lessons/[lessonId]/quiz/submit ↓ - remapStudentAnswer (revere shuffle via optionOrders) - Auto-correcao por tipo - Calcula score - Cria/atualiza LessonCompletion (scoringPolicy decide) - Dispara QuizEvaluationService: - Atualiza ConceptMastery por concepts[] da questao - Detecta misconceptions (Haiku, ~$0.001) - Cria Grade no gradebook (se GradeItem associada) - Dispara automacao quiz_submitted - Dispara handleGamificationEvent (XP, badges, contests) ``` ## Integridade academica QuizAttempt rastreia em background: - `tabSwitchCount` — quantas vezes aluno saiu da aba - `copyPasteCount` — eventos paste detectados - `blurEvents` — viewport blur - `avgTimePerQuestionSec` — tempo medio por questao - `flagged: boolean` — true se algum sinal exceder threshold Gradebook exibe icone ShieldAlert + tooltip "Tab switches: 8, time per question: 1.2s avg". Professor decide se anula ou ignora. ## Analytics psicometricas `/api/institution/courses/[id]/lessons/[lid]/quiz-analytics` retorna: ### Item difficulty (p-value) ``` difficulty = total_corretas / total_tentativas ``` - < 0.3: muito dificil (rever questao) - 0.3-0.7: ideal - > 0.85: muito facil ### Point-biserial discrimination Correlacao entre acertar item e score total. Identifica questoes que NAO discriminam bons de maus alunos. - > 0.4: excelente - 0.2-0.4: aceitavel - < 0.2: ruim (remove/reformule) ### Distractor analysis (MC e TF) % de alunos que escolheram cada alternativa errada. Pista de misconceptions comuns: ``` Q: "Capital da Australia?" A) Sydney (40% — misconception popular) ← FLAG B) Canberra (45% — correta) C) Melbourne (10%) D) Brisbane (5%) ``` ### Cronbach's alpha (consistencia interna) Mede se as questoes do quiz estao medindo o mesmo construto. - > 0.7: aceitavel - 0.6-0.7: questionavel - < 0.6: redesenhar quiz Requer ≥ 30 tentativas para confiabilidade estatistica. ### Score distribution 10 buckets de 0-100%. Ajuda detectar quizzes com ceiling/floor effect. ## Question bank `QuestionBank` reutiliza questoes em multiplos quizzes: ``` POST /api/institution/question-banks POST /api/institution/question-banks/[id]/items ``` Quiz editor tem **picker** que filtra por banco, tipo, dificuldade, tags. Import seleciona N questoes aleatorias do banco. Exporters: - GIFT format (compativel Moodle, Canvas, Blackboard) - CSV (para edicao em planilha) Question bank pode ser **ingerido no RAG** para o tutor IA tambem acessar: `POST /api/institution/question-banks/[id]/rag-ingest` ## Limites e quotas - Maximo 200 questoes por quiz (UX) - Maximo 1000 questoes por question bank (performance) - Time limit minimo 1 minuto, maximo 360 minutos (6h) - Max attempts: 1-99 ou `null` (ilimitado) ## Honestidade tecnica O que Studeia faz bem: - Multi-provider IA para misconception detection - Analytics psicometricas em UI (raros LMS oferecem) - Question bank com RAG ingestion - Integridade academica passive (sem proctoring intrusivo) O que Studeia NAO faz (ainda): - Proctoring com webcam/microfone (privacy concerns) - Lockdown browser - IP whitelist por quiz - Question pooling avancado (Canvas Quizzes 2.0 tem isso melhor) - Adaptive testing (CAT) — roadmap ## Veja tambem - [Gradebook](/features/assessment/gradebook) - [Tipos de aula](/features/cms/lesson-types) ## FAQ **Q: Quantos tipos de questao Studeia suporta?** 8+ tipos: multiple_choice, true_false, fill_blank, matching (pares), ordering (sequencia), numeric (com tolerancia), short_answer (com normalizacao), essay. 7 sao auto-corrigidos (essay e manual ou via LLM se habilitado). **Q: Como detectar copia/cola em quiz?** Integridade academica built-in: tab switch detection (incrementa QuizAttempt.tabSwitchCount), time anomalies (resposta em <2s indica adivinhacao ou cola), copy/paste detection, viewport blur events. Flags exibidos no gradebook com icone ShieldAlert + tooltip explicativo. **Q: Como evitar que alunos compartilhem respostas?** Combine varias estrategias: shuffleQuestions=true (ordem diferente por aluno), shuffleOptions=true (alternativas embaralhadas), accessCode (codigo que o professor da no horario do quiz), timeLimitMinutes (auto-submit ao expirar), maxAttempts=1 (1 tentativa unica). Questoes randomizadas via question bank com tags. **Q: Que analytics o Studeia oferece para quiz?** Analytics psicometricas: item difficulty (% acerto), point-biserial discrimination (correlacao item-total), distractor analysis (qual alternativa errada e mais popular = pista de misconception), Cronbach's alpha (consistencia interna), score distribution (10 buckets), flags para questoes problematicas. Comparable ao que Canvas Quizzes oferece + algumas extensoes. **Q: Quiz tem analise individual por aluno?** Sim. QuizAttempt grava cada tentativa com timestamp, answers, score, timeSpent, integrity flags. Aluno ve historico em /grades/. Professor ve detail em /institution/courses/[id]/lessons/[lid]/attempts. Inclui pegada de tempo por questao. --- # [pt-BR] Automacoes (mini-n8n nativo) URL: https://docs.studeia.com/features/automations/overview Locale: pt-BR Section: features Updated: 2026-05-23 **Short answer:** Studeia tem engine de automacoes 'mini-n8n' built-in. Padrao: Gatilho → Condicao → Acao. 3 trigger types (event da plataforma, scheduled cron, webhook publico). 14+ eventos (lesson_completed, quiz_submitted, enrollment_created, forum_post_created, scheduled_trigger, etc). 8 actions (send_notification, add_tag, remove_tag, create_announcement, send_webhook, send_web_request, enroll_user, trigger_automation). UI wizard 4 steps + historico de runs. ## Padrao Gatilho → Condicao → Acao ``` Trigger (event, scheduled, ou webhook) ↓ Condition (logic AND/OR, com rules sobre user.*, event.*) ↓ Action (uma ou mais, executadas sequencialmente) ``` ## Triggers (3 tipos) ### 1. event Disparado por eventos da plataforma via `emitAutomationEvent()` em `after()`. ```json { "type": "event", "config": { "eventName": "lesson_completed", "filters": {} } } ``` Eventos suportados: `lesson_completed`, `module_completed`, `course_completed`, `quiz_submitted`, `enrollment_created`, `enrollment_completed`, `forum_post_created`, `forum_reply_created`, `grade_posted`, `announcement_created`, `live_class_started`, `student_inactive`, `tag_added_to_user`, `tag_removed_from_user`, `webhook_received`, `scheduled_trigger`. ### 2. scheduled Cron-based. ```json { "type": "scheduled", "config": { "mode": "interval|daily|weekly|cron", "hours": 24, "time": "08:00", "timezone": "America/Sao_Paulo" } } ``` Processado por `GET /api/cron/automations` (CRON_SECRET). ### 3. webhook Endpoint publico autenticado por token 64-char hex. ``` URL: /api/automations/webhook/[token] GET → health check POST → triggers automation (body JSON virara event.data) ``` ## Conditions ```json { "logic": "and", "rules": [ { "field": "user.role", "operator": "eq", "value": "student" }, { "field": "event.score", "operator": "gte", "value": 80 } ] } ``` Operators: `eq, neq, gt, gte, lt, lte, contains, not_contains, in, not_in`. Fields acessiveis: - `user.*` — id, name, email, role, tags - `event.*` — campos do evento (courseId, score, lessonTitle, etc) Nested groups (AND/OR) sao suportados. ## Actions (8 tipos) | Action | Funcao | |---|---| | send_notification | In-app notification (trigger_user ou users_with_tag) | | add_tag | Adicionar UserTag | | remove_tag | Remover UserTag | | create_announcement | Cria Announcement + notifica alunos (curso ou tenant) | | send_webhook | POST/PUT para URL externa (com SSRF prevention) | | send_web_request | GET/POST/PUT/DELETE para API externa | | enroll_user | Matricula trigger_user em curso | | trigger_automation | Encadeia outra (max depth 5) | ### Template interpolation Strings em actions suportam `{{placeholders}}`: - `{{user.name}}`, `{{user.email}}`, `{{user.role}}` - `{{event.courseId}}`, `{{event.score}}`, `{{event.lessonTitle}}` ## Seguranca - **Tenant isolation**: todas as queries filtram por tenantId. Automacao de um tenant NUNCA executa para usuario de outro. - **SSRF prevention**: `url-validator.ts` bloqueia IPs privados, localhost, metadata endpoints (169.254.169.254). IPv4 + IPv6. - **HTTP timeout**: 10s via AbortController. - **Webhook token**: 64-char hex, rotacionavel. - **Chain depth**: max 5 niveis de trigger_automation recursivo. - **Rate limit**: maxRunsPerHour/maxRunsPerDay por automacao (Redis INCR, fallback DB count). ## Exemplo: notificar pai quando aluno menor inativo 5 dias ```json { "name": "Alerta inatividade — menores", "trigger": { "type": "event", "config": { "eventName": "student_inactive" } }, "conditions": { "logic": "and", "rules": [ { "field": "user.role", "operator": "eq", "value": "student" }, { "field": "user.isMinor", "operator": "eq", "value": true }, { "field": "event.inactiveDays", "operator": "gte", "value": 5 } ] }, "actions": [ { "type": "send_notification", "config": { "recipient": "users_with_tag", "tag": "parent_of_{{user.id}}", "title": "{{user.name}} inativo ha {{event.inactiveDays}} dias", "message": "Estimulamos um login. Acesse [link]." } } ] } ``` ## UI `/institution/automations`: - Lista com filtros (status, trigger type), toggle, search - Wizard 4 steps (Trigger → Conditions → Actions → Review) - Historico de runs com rows expandiveis (status, duration, actionResults JSON) ## Veja tambem - [Plataforma overview](/platform/overview) ## FAQ **Q: Studeia tem automacoes built-in?** Sim. Engine 'mini-n8n' nativo: Gatilho → Condicao → Acao. 3 tipos de trigger (evento da plataforma, agendado, webhook publico) com 14+ eventos. 8 tipos de acao (in-app notification, add/remove tag, create announcement, send webhook, send web request, enroll user, trigger automation). UI wizard 4 steps + historico de runs. **Q: Posso disparar webhook quando aluno completa quiz?** Sim. Trigger: event quiz_submitted. Condition opcional (ex: score >= 80). Action: send_webhook para sua URL. Suporta template interpolation: {{user.name}}, {{event.score}}, {{event.lessonTitle}}. **Q: Tem rate limiting?** Sim. Por automacao: maxRunsPerHour + maxRunsPerDay. Verificado via Redis INCR com fallback DB count. Quando excede: run e marcada como skipped + log. **Q: Posso encadear automacoes?** Sim. Action trigger_automation chama outra automacao. Chain depth maximo 5 niveis (anti-loop infinito). --- # [pt-BR] CMS: cursos, modulos e aulas URL: https://docs.studeia.com/features/cms/courses-modules-lessons Locale: pt-BR Section: features Updated: 2026-05-23 **Short answer:** Studeia organiza conteudo em hierarquia Course → Module → Lesson. Cada curso pertence a um Tenant, pode ter multiplos modulos (com sortOrder), cada modulo pode ter multiplas aulas com 8 tipos (slides, video, PDF, rich_text, quiz, assignment, live_class, external_link) + 6 subtypes interativos. CRUD via UI ou API publica. Suporte a clone, import IMS CC, auto-geracao por IA (PDF→curso), publicacao agendada (publishAt) e RAG ingestion para o tutor IA. ## Hierarquia ``` Tenant (Instituicao) └── Course (titulo, slug, status, theme, publishAt, aiTutorEnabled) └── CourseModule (titulo, sortOrder) └── CourseLesson (tipo, content JSON, sortOrder, isPublished, publishAt) ├── CourseLessonMedia (N:N com MediaAsset) └── LessonCompletion (1:N por studentId) ``` ## CRUD ### Cursos ``` POST /api/institution/courses Criar GET /api/institution/courses Listar GET /api/institution/courses/[id] Detalhe PATCH /api/institution/courses/[id] Atualizar DELETE /api/institution/courses/[id] Deletar (soft, status=archived) POST /api/institution/courses/[id]/clone Clonar (deep copy) POST /api/institution/courses/import Importar IMS CC ``` Scopes: `courses:read` (GET) | `courses:write` (POST/PATCH/DELETE). ### Modulos ``` POST /api/institution/courses/[id]/modules Criar PATCH /api/institution/courses/[id]/modules/[mid] DELETE /api/institution/courses/[id]/modules/[mid] PATCH /api/institution/courses/[id]/modules/reorder (bulk sortOrder) ``` ### Aulas ``` POST /api/institution/courses/[id]/modules/[mid]/lessons Criar PATCH /api/institution/courses/[id]/modules/[mid]/lessons/[lid] DELETE /api/institution/courses/[id]/modules/[mid]/lessons/[lid] POST /api/institution/courses/[id]/lessons/reorder (bulk) ``` ## Status do curso `Course.status: draft | published | archived` - **draft**: nao visivel para alunos, editavel - **published**: visivel a matriculados (respeitando publishAt) - **archived**: nao visivel, apenas leitura para historico `Course.publishAt` agenda publicacao automatica via cron. ## Publicacao escalonada Combine `Course.publishAt` com `Lesson.publishAt` para controle granular: ``` Curso publicado em 2026-06-01 Modulo 1 (sem publishAt) → disponivel desde 2026-06-01 Aula 1.1 (sem publishAt) → disponivel desde 2026-06-01 Aula 1.2 (publishAt: 2026-06-08) → disponivel a partir de 2026-06-08 Modulo 2 (sem publishAt) Aula 2.1 (publishAt: 2026-06-15) → disponivel a partir de 2026-06-15 ``` `checkLessonAvailability()` em `apps/web/lib/lesson-availability.ts` valida em TODOS os endpoints de aula (view, quiz/start, quiz/submit, complete, interactive). ## Pre-requisitos entre aulas `Lesson.prerequisiteLessonId` aponta para aula que DEVE estar completa antes de acessar. `checkLessonAvailability(lesson, { checkPrerequisite: true })` valida: 1. `lesson.isPublished === true` 2. `lesson.publishAt <= now` 3. Se `prerequisiteLessonId`: existe `LessonCompletion` do aluno para essa aula ## Clone de curso `POST /api/institution/courses/[id]/clone` faz: 1. Cria novo Course com slug `{slug}-clone-{n}` 2. Para cada Module original → cria copia 3. Para cada Lesson original → cria copia com mesmo content JSON 4. NAO copia: Enrollments, LessonCompletions, ClassGroups, QuizAttempts, RAG ingestion 5. Respeita limite de cursos do plano (checkTenantResourceLimit) ## Import IMS Common Cartridge `POST /api/institution/courses/import` body multipart/form-data com .imscc: - Parser: `packages/core/src/content/imscc-parser.ts` (cheerio-based XML parser) - Suporta: IMS CC v1.0, v1.1, v1.2, v1.3 - Recursos suportados: web links, file resources, basic LTI links, QTI 1.2 quizzes (mapeados para Quiz Engine), web content resources - NAO suportados: H5P content packages, SCORM 2004 PIF, IMS CP ## RAG ingestion `Course.autoSyncRag: Boolean` controla reingestao automatica. [Detalhes em RAG Ingestion](/features/ai-tutor/rag-ingestion). ## Limitacoes - Maximo 100 modulos por curso (soft limit, performance) - Maximo 200 aulas por modulo (soft limit, UX) - Content JSON por aula ate 5MB (validado no save) - Slug deve ser unico por tenant + idioma ## Veja tambem - [Tipos de aula](/features/cms/lesson-types) - [Auto-geracao de curso por IA](/features/cms/auto-course-generation) - [RAG ingestion](/features/ai-tutor/rag-ingestion) ## FAQ **Q: Como criar um curso novo?** Via UI: /institution/courses > Novo Curso. Defina titulo, slug, descricao, tema visual, status (draft). Via API: POST /api/institution/courses (scope courses:write). Apos criar, adicione modulos e aulas. **Q: Posso clonar um curso existente?** Sim. POST /api/institution/courses/[id]/clone. Cria copia com novo slug, mesmos modulos e aulas (deep copy). Util para criar novas turmas com base em curso existente. Respeita limite de cursos do plano. **Q: Posso importar conteudo de Moodle/Canvas/Blackboard?** Sim, via IMS Common Cartridge (IMS CC v1.x). POST /api/institution/courses/import com arquivo .imscc. Parser extrai modulos, aulas, recursos (PDFs, links, quizzes basicos). Limitacao: H5P e SCORM 2004 nao 100% suportados — apenas IMS CC nativo. **Q: Como publicar aula com data agendada?** Set lesson.isPublished=false + lesson.publishAt=timestamp. Aluno nao ve aula ate publishAt. checkLessonAvailability() valida em todos os endpoints (quiz, complete, view). Combina com Course.publishAt para publicar curso inteiro num momento futuro. --- # [pt-BR] 8 tipos de aula + 6 subtypes interativos URL: https://docs.studeia.com/features/cms/lesson-types Locale: pt-BR Section: features Updated: 2026-05-23 **Short answer:** Studeia suporta 8 tipos primarios de aula (slides, video, PDF, rich text, quiz, assignment, live class, external link) e 6 subtypes interativos (interactive_video, drag_drop, fill_blanks, flashcard_set com SRS, timeline, branching_scenario). Cada tipo tem editor visual dedicado e viewer otimizado. Conteudo armazenado como JSON estruturado em CourseLesson.content. ## Tipos primarios ### 1. slides Apresentacao com elementos ricos. ```json { "slides": [ { "id": "uuid", "layout": "title_content" | "two_column" | "image_focus" | "code_demo", "elements": [ { "type": "heading", "text": "...", "style": {} }, { "type": "paragraph", "text": "..." }, { "type": "image", "mediaAssetId": "uuid" }, { "type": "list", "items": ["..."], "ordered": true }, { "type": "code", "language": "python", "code": "..." }, { "type": "callout", "variant": "info|warning|tip", "text": "..." } ] } ], "speakerNotes": { "slide-uuid": "Notas..." } } ``` Viewer: `components/lesson-viewer/slide-viewer.tsx` (navegacao por teclado, fullscreen, speaker notes). ### 2. video ```json { "source": "youtube" | "vimeo" | "upload", "embedUrl": "https://...", "videoUrl": "...", "mediaAssetId": "uuid" } ``` Suporta playback rate, captions, autoplay control. Auto-transcricao via Whisper quando mediaAssetId. ### 3. pdf_viewer ```json { "mediaAssetId": "uuid", "storageUrl": "...", "initialPage": 1 } ``` Viewer com react-pdf, navegacao, zoom, full text search. ### 4. rich_text ```json { "html": "

...

...

" } ``` Editor: Tiptap com extensions (tables, code blocks com syntax highlighting, images, links, color, typography, math). HTML sanitizado server-side com `sanitizeHtml()`. ### 5. quiz ```json { "questions": [ { "type": "multiple_choice", "question": "...", "options": ["A","B","C","D"], "correctIndex": 0, "explanation": "...", "concepts": ["concept-id"] }, { "type": "true_false", "question": "...", "correctIndex": 0 }, { "type": "fill_blank", "question": "...", "blanks": [{"answer": "..."}] }, { "type": "matching", "pairs": [{"left": "...", "right": "..."}] }, { "type": "ordering", "items": ["..."] }, { "type": "numeric", "answer": 42, "tolerance": 0.1 }, { "type": "short_answer", "acceptedAnswers": ["..."] }, { "type": "essay", "prompt": "..." } ], "passingScore": 70, "configuration": { "maxAttempts": 3, "timeLimitMinutes": 30, "shuffleQuestions": true, "shuffleOptions": true, "accessCode": "...", "scoringPolicy": "highest" | "latest" | "average", "reviewMode": "after_submit" | "after_due_date" | "never" } } ``` Detalhes em [Quiz Engine](/features/assessment/quiz-engine). ### 6. assignment ```json { "instructions": "...", "dueDate": "2026-06-15", "maxScore": 100, "submissionType": "text" | "file" | "both", "rubricId": "uuid" } ``` Submissoes vao para bucket privado `submissions/{tenantId}/{courseId}/{lessonId}/{userId}/` (regra critica 122). ### 7. live_class ```json { "liveClassId": "uuid" } ``` LiveClass entity tem provider (BBB/Zoom/Teams/Meet), join URL, recording URL. [Detalhes em Live Classes](/features/live-classes/overview). ### 8. external_link ```json { "url": "https://...", "description": "...", "openInNewTab": true } ``` ## Subtypes interativos Quando `lesson.subtype !== null`, renderiza viewer interativo dedicado: ### interactive_video Video com checkpoints (perguntas obrigatorias antes de continuar). ```json { "videoUrl": "...", "checkpoints": [ { "timestampSec": 120, "question": { ... } } ] } ``` ### drag_drop ```json { "items": [{ "id": "1", "label": "Mitose" }], "targets": [{ "id": "a", "label": "Divisao celular", "acceptedItemIds": ["1"] }] } ``` ### fill_blanks ```json { "text": "A capital da Franca e {{0}} e fica no continente {{1}}.", "blanks": [ { "id": 0, "acceptedAnswers": ["Paris"] }, { "id": 1, "acceptedAnswers": ["Europa", "europeu"] } ] } ``` ### flashcard_set ```json { "cards": [ { "id": "1", "front": "Qual e o teorema de Pitagoras?", "back": "a² + b² = c²" } ], "srsEnabled": true } ``` Algoritmo SRS SM-2 modificado. Schedules revisao em StudentFlashcardReview. ### timeline ```json { "events": [ { "date": "1500", "title": "Descobrimento do Brasil", "description": "..." } ] } ``` Linha do tempo interativa com zoom. ### branching_scenario Arvore de decisao para simulacoes (ex: caso clinico, dilema etico, negociacao). ```json { "rootNodeId": "n1", "nodes": { "n1": { "text": "Voce e um medico recebendo paciente com dor toracica...", "choices": [ { "text": "Solicitar ECG", "nextNodeId": "n2" }, { "text": "Internar imediatamente", "nextNodeId": "n3" } ] } } } ``` ## Editores (Lesson Builder) Cada tipo tem editor visual dedicado em `components/lesson-builder/`: - slides → `slides-editor.tsx` (dnd-kit reorder, elementos drag-drop) - rich_text → `rich-text-editor.tsx` (Tiptap) - quiz → `quiz-editor.tsx` (com question bank picker + save dialog) - assignment → `assignment-editor.tsx` (rubric picker, due date) - video → `video-editor.tsx` (source select + embed) - pdf → `pdf-editor.tsx` (upload + media picker) - live_class → `live-class-editor.tsx` (provider select + schedule) - external_link → `external-link-editor.tsx` - subtypes interativos → editors dedicados em `components/interactive/` ## Limitacoes - **Quiz tipo essay sem correcao automatica nativa** — admin pode habilitar LLM grading (custo adicional) - **Subtypes interativos nao migram para H5P** — Studeia format proprio - **Branching_scenario max depth 10 niveis** — anti-loop infinito ## Veja tambem - [CMS: cursos, modulos, aulas](/features/cms/courses-modules-lessons) - [Quiz Engine](/features/assessment/quiz-engine) - [Conteudo interativo](/features/interactive-content/overview) ## FAQ **Q: Quantos tipos de aula existem?** 8 tipos primarios: slides, video, pdf_viewer, rich_text, quiz, assignment, live_class, external_link. Mais 6 subtypes interativos quando lesson.subtype !== null: interactive_video (com checkpoints), drag_drop, fill_blanks, flashcard_set (SRS SM-2), timeline, branching_scenario (arvore de decisao). **Q: Preciso de H5P para conteudo interativo?** Nao. Studeia tem 6 subtypes interativos nativos: interactive_video (com checkpoints e quiz inline), drag_drop, fill_blanks, flashcard_set (com algoritmo SRS SM-2), timeline e branching_scenario (arvores de decisao com ramificacoes). H5P pode ser embedado via external_link mas nao e necessario. **Q: Quiz e auto-corrigido?** Sim, para 7 dos 8 tipos: multiple_choice, true_false, fill_blank, matching, ordering, numeric, short_answer (com normalizacao). Apenas essay e correcao manual (ou via LLM se admin habilitar). Detalhes em /features/assessment/quiz-engine. **Q: Posso embedar video do YouTube ou Vimeo?** Sim. Lesson type=video, content { source: 'youtube' | 'vimeo' | 'upload', embedUrl: '...' }. Tambem suporta upload via media library (com transcodificacao opcional e transcricao automatica via Whisper). --- # [pt-BR] Gamificacao nativa: XP, badges, leaderboards, contests, rewards URL: https://docs.studeia.com/features/gamification/overview Locale: pt-BR Section: features Updated: 2026-05-23 **Short answer:** Studeia tem gamificacao nativa completa: XP engine com config hierarquica (tenant→curso), 11 criterios de badge com logica booleana AND/OR, badges exportaveis como OB 3.0 (Open Badges 3.0 — W3C Verifiable Credential), leaderboards Redis ZSET (escopo curso/turma, janelas alltime/weekly/monthly), contests com 7 metricas (lifecycle draft→active→ended), rewards shop com moedas virtuais e agente IA dedicado para admin criar estrategia via chat natural. ## Modelo ``` TenantGamificationConfig (XP rules, level thresholds, features) └── CourseGamificationConfig (override per-course) UserGamificationProfile (totalXp, currentLevel, currentStreakDays, coins) ├── XpLog (cada XP earned com source) ├── UserBadge[] ├── ContestParticipant[] └── RewardRedemption[] ``` ## XP engine XP earned por atividade. Config em `xpRules` JSON: ```json { "lessonComplete": 50, "quizPass": 30, "quizPassFirstTry": 50, "assignmentSubmit": 40, "forumPostCreate": 10, "forumReplyCreate": 5, "chatTutorMessage": 2, "liveClassJoin": 20, "dailyLogin": 5, "streakBonus": [ { "days": 7, "bonus": 100 }, { "days": 30, "bonus": 500 } ] } ``` `handleGamificationEvent()` integrado em 7 rotas (lesson complete, quiz, chat tutor, forum post/reply, live class join, assignment submit). ## Niveis Thresholds configuraveis (default: nivel N = 100 × N²): ``` Nivel 1: 0 XP Nivel 2: 100 XP Nivel 3: 400 XP Nivel 4: 900 XP Nivel 5: 1600 XP ... ``` Level up dispara `badge_earned` event (automacao) + push notification (mobile). ## Badges 11 tipos de criterio com logica booleana AND/OR: | Criterio | Trigger | |---|---| | lesson_count | N aulas completas | | quiz_pass_count | N quizzes passados | | quiz_score_avg | media de quiz >= X | | streak_days | streak de N dias | | level_reached | nivel >= N | | total_xp | XP >= N | | course_complete | N cursos completos | | forum_posts | N posts em forum | | concept_mastery | N conceitos com mastery >= X | | time_spent | N horas estudadas | | manual | awarded by teacher/admin | **Compound criteria** (AND/OR, max depth 3): ```json { "logic": "AND", "rules": [ { "type": "quiz_pass_count", "value": 10 }, { "logic": "OR", "rules": [ { "type": "streak_days", "value": 7 }, { "type": "quiz_score_avg", "value": 90 } ] } ] } ``` ## Open Badges 3.0 Badge earned cria `UserBadge` com pagina publica: - `/public/badges/verify/[userBadgeId]` (sem autenticacao) - `/api/badges/verify/[userBadgeId]` retorna JSON-LD OB 3.0 (W3C Verifiable Credential) - Compativel com LinkedIn Add to Profile - Schema.org `EducationalOccupationalCredential` para descoberta ## Leaderboards Redis ZSET (sorted sets) para performance: ``` ZADD leaderboard:tenant:{tenantId}:scope:course:{courseId}:window:weekly {xp} {userId} ZADD leaderboard:tenant:{tenantId}:scope:class:{classId}:window:alltime {xp} {userId} ``` Escopos: course, class_group. Janelas: alltime, weekly, monthly. Modo anonimo: aluno aparece como "Aluno #42" (config por tenant). ## Contests Lifecycle: draft → active → ended (cron auto-start/end). 7 metricas: 1. xp_earned (XP total no periodo) 2. lessons_completed 3. quizzes_passed 4. avg_quiz_score 5. study_minutes 6. forum_posts 7. badges_earned Configurable: escopo (course/class/tenant), data inicio/fim, premios (rewards). ## Rewards shop Catalogo de recompensas virtuais. Aluno gasta coins (acumulados via XP): - certificate_template — diploma estilizado - profile_customization — avatar/borda - badge_special — badge unica - virtual_item — sticker, cor de nome, etc Redemption atomico (anti-race condition). Refund automatico se admin nega. ## Agente IA de gamificacao Admin pode criar/gerenciar gamificacao via chat: ``` "Crie 5 badges para meu curso de Matematica focando em consistencia (streaks) e mastery (>= 80% de acerto). Bonus para alunos que ajudam no forum." ``` 19 ferramentas (CRUD badges/contests/rewards, config XP, analytics, award manual). Loop tool_use max 15 iteracoes. [Detalhes em Gamification Agent](/features/gamification/gamification-agent-ai). ## Parent reports Gamificacao integrada em `packages/core/src/monitoring/advanced-reports.ts`: - StudentReport inclui XP, nivel, badges recentes, streak - Portal pais mostra secao "Conquistas" com badge grid + streak counter - Relatorio LLM cita conquistas: "Maria completou 3 cursos e ganhou 5 badges este mes" ## Veja tambem - [Plataforma overview](/platform/overview) - [Comparativo Studeia vs Khan Academy](/comparisons/studeia-vs-google-classroom) ## FAQ **Q: Studeia tem gamificacao nativa?** Sim, completa. XP por atividade (config hierarquica tenant→curso), niveis configuraveis, badges com 11 criterios automaticos (compound AND/OR), leaderboards Redis ZSET com escopo curso ou turma e janelas weekly/monthly/alltime, contests com 7 metricas, rewards shop com moedas virtuais. Plus agente IA dedicado para admin criar estrategia via chat. **Q: Badges seguem padrao Open Badges?** Sim. Badges exportaveis como OB 3.0 (Open Badges 3.0 — W3C Verifiable Credential JSON-LD). Cada UserBadge tem pagina publica de verificacao (/public/badges/verify/[id]) com schema.org EducationalOccupationalCredential — compativel com LinkedIn Add to Profile. **Q: Como configuro XP por aula completa?** Tenant Settings > Gamification > XP Rules. Cada atividade tem base XP (lessonComplete: 50, quizPass: 30, etc). Curso pode override (CourseGamificationConfig). Bonus por streak diaria, primeira vez, dificuldade, etc. **Q: Posso desativar gamificacao em um curso?** Sim. CourseGamificationConfig.enabled=false. Sidebar do aluno esconde 'Gamificacao' se aluno nao tem curso ativo com gamif habilitada. Course sub-nav esconde tab 'Gamificacao' para cursos especificos com flag off. --- # [pt-BR] Aulas ao vivo multi-provider (BBB, Zoom, Teams, Meet) URL: https://docs.studeia.com/features/live-classes/overview Locale: pt-BR Section: features Updated: 2026-05-23 **Short answer:** Aulas ao vivo no Studeia suportam 4 provedores via adapter pattern: BigBlueButton (padrao, iframe embed), Zoom (Server-to-Server OAuth), Microsoft Teams (Graph API), Google Meet (OAuth Calendar). Credenciais criptografadas AES-256-GCM. Webhook lifecycle + cron de recording sync (fallback 15min). LiveClassTranscription automatica para Zoom/Teams (ingerivel no RAG). ## Provedores suportados | Provider | Auth | Join | Recordings | Transcript | |---|---|---|---|---| | BBB | sharedSecret | iframe | Sim, API nativa | Texto fornecido | | Zoom | Server-to-Server OAuth | nova aba | Webhook + cron | VTT auto | | Teams | Client Credentials | nova aba | Graph API + cron | VTT auto | | Google Meet | OAuth + Calendar API | nova aba | Calendar API + cron | Manual no Meet | ## Adapter pattern `packages/core/src/live-class/types.ts`: ```ts interface VideoProviderAdapter { createMeeting(params): Promise; getJoinUrl(params): Promise; endMeeting(meetingId, providerData?): Promise; getMeetingStatus(meetingId): Promise; getRecordings(meetingId): Promise; getTranscript?(meetingId): Promise; } ``` `resolveVideoProvider(tenantId, liveClass?)` cascateia: 1. `liveClass.videoProvider` (se especificado na aula) 2. `VideoProviderConfig.isDefault` (provider padrao do tenant) 3. `Tenant.config.bbb` (legacy backward compat) 4. Env vars BBB (fallback global) ## Setup por provider ### BBB (padrao) Pre-requisito: instancia BBB rodando. Settings > Video Provider > BBB > URL + Shared Secret. ### Zoom 1. Crie Server-to-Server OAuth app no Zoom Marketplace 2. Scopes: `meeting:read`, `meeting:write`, `recording:read`, `user:read` 3. Settings > Video Provider > Zoom > Account ID + Client ID + Client Secret 4. Webhook: `/api/webhooks/video/zoom` com HMAC SHA-256 via `x-zm-signature` ### Teams 1. Azure AD App Registration 2. Permissions: Microsoft Graph `OnlineMeetings.ReadWrite.All`, `OnlineMeetingRecording.Read.All` 3. Settings > Video Provider > Teams > Tenant ID + Client ID + Client Secret + Organizer email 4. Webhook: Graph Change Notifications (subscription validation via `validationToken`) ### Google Meet 1. Google Cloud Console > APIs > Calendar API + Meet REST API v2 2. OAuth 2.0 Client (Web application) 3. Settings > Video Provider > Google Meet > Client ID + Client Secret 4. Admin consent flow via OAuth (redirect para Google) 5. Limitacao: endMeeting nao suportado via API — adapter marca como completed localmente ## Credenciais Armazenadas em `VideoProviderConfig` com AES-256-GCM: - `encryptedCredentials` — JSON blob criptografado - `encryptionIv` + `encryptionAuthTag` - OAuth tokens (Teams/Meet): `accessToken`, `refreshToken`, `tokenExpiresAt` Unique: `[tenantId, provider]` — um config por provider por tenant. ## Webhooks e recording sync Cada provider tem padrao proprio. Studeia normaliza via webhook handlers + cron fallback: - `POST /api/webhooks/video/zoom` — meeting events + recording.completed - `POST /api/webhooks/video/teams` — Graph notifications - `GET /api/cron/recording-sync` — polling a cada 15min para meetings completed sem recordingUrl Webhooks sao **unreliable** (delays, subscription expiry). Cron sempre como fallback. ## Transcricao Zoom e Teams fornecem VTT nativamente apos recording. Studeia cria LiveClassTranscription com: - `transcriptionText` (parsed do VTT) - `transcriptionLanguage` - status: pending → transcribing → review → approved → ingested Apos approved, admin pode disparar ingestao no RAG do curso. [Detalhes em Media Transcription](/features/cms/media-transcription). ## Escopo por turma `LiveClass.classGroupId` opcional. Quando setado: - Apenas alunos daquela turma veem em /live-classes/ - Apenas alunos da turma podem entrar (validado no join) - Notificacoes apenas para turma Sem classGroupId: course-wide (todos matriculados). ## Limitacoes - **BBB**: precisa de instancia auto-hospedada (ou managed BBB provider). Custos: $20-200/mes dependendo do tamanho. - **Zoom**: limite de duracao por tier (free=40min, paid=ilimitado). - **Teams**: endMeeting nao suportado via API. - **Google Meet**: gravacao/transcricao iniciada manualmente pelo host. - **Streaming para YouTube/Twitch**: nao suportado nativamente. ## Veja tambem - [Plataforma overview](/platform/overview) - [Multi-tenancy](/platform/multi-tenancy) ## FAQ **Q: Qual provider de video Studeia usa?** 4 opcoes: BigBlueButton (padrao, iframe embed, open-source), Zoom (Server-to-Server OAuth), Microsoft Teams (Azure AD Client Credentials), Google Meet (OAuth admin consent). Admin escolhe por tenant (VideoProviderConfig padrao) ou por aula especifica (LiveClass.videoProvider override). **Q: BBB e Zoom funcionam do mesmo jeito para o aluno?** Nao exatamente. BBB suporta iframe embed (joinMethod='iframe', aluno ve aula dentro do Studeia). Zoom, Teams e Meet abrem em nova aba (joinMethod='external', X-Frame-Options bloqueia iframe). UI exibe card com countdown + botao 'Entrar' para esses 3. **Q: Gravacoes ficam disponiveis?** Sim, automaticamente. Webhook do provider notifica quando recording esta pronto + cron /api/cron/recording-sync roda a cada 15min como fallback. recordingUrl salvo em LiveClass. Para Zoom/Teams: transcript VTT tambem capturado (cria LiveClassTranscription que pode ser ingerida no RAG). **Q: Posso restringir aula ao vivo a uma turma especifica?** Sim. LiveClass.classGroupId opcional. Quando setado: apenas alunos daquela turma veem e podem entrar (regra critica 45-48). Sem classGroupId: todos matriculados no curso veem. --- # [pt-BR] Glossario EAD: termos tecnicos de LMS, IA e educacao URL: https://docs.studeia.com/glossary Locale: pt-BR Section: glossary Updated: 2026-05-23 **Short answer:** Glossario completo de termos tecnicos usados em EAD/LMS, tutor IA, gamificacao, SSO Enterprise, LTI, SCIM, RAG e arquitetura SaaS. ~80 termos com definicoes curtas e referencias cruzadas a paginas detalhadas. ## A **API Key** — Chave de autenticacao para API publica do Studeia. Gerada em /institution/settings/api-keys, formato `mia_` + 40 hex chars. Armazenada como SHA-256 hash, nunca exposta apos criacao. [Saiba mais](/api/authentication). **AGS (Assignment and Grade Service)** — Servico LTI 1.3 que permite tools (como Studeia) enviar notas de volta ao LMS consumer (Canvas, Moodle, Blackboard). Studeia implementa como provider. ## B **Badge** — Distintivo de conquista. Studeia usa Open Badges 3.0 (W3C Verifiable Credential). Pode ser earned automaticamente (11 criterios) ou manual (teacher award). [Saiba mais](/features/gamification/overview). **BBB (BigBlueButton)** — Plataforma open-source de videoconferencia para educacao. Studeia integra como video provider padrao via iframe embed. [Saiba mais](/features/live-classes/overview). **BNCC** — Base Nacional Comum Curricular brasileira. Studeia tem suporte basico (tags por habilidade BNCC) — alinhamento total via PromptTemplate customizavel. ## C **Canvas LMS** — LMS dominante em universidades dos EUA (Instructure). Studeia funciona como LTI 1.3 tool em Canvas. [Comparativo](/comparisons/studeia-vs-canvas). **Chunking** — Divisao de texto longo em segmentos menores (chunks) para embedding e retrieval. Studeia usa 800 tokens com 200 overlap. **Circuit Breaker** — Padrao de resiliencia que pula provider externo quando falha repetidamente. Studeia usa para LLM fallback chain (Claude → GPT → Grok → Gemini). **Concept Mastery** — Probabilidade bayesiana (Beta distribution) de o aluno dominar um conceito especifico. Calculada por ConceptMasteryEngine via interacoes (chat + quiz + content interactive). **Cronbach's alpha** — Coeficiente de consistencia interna de um quiz/avaliacao. Indica se as questoes medem o mesmo construto. > 0.7 e aceitavel. Studeia calcula automaticamente em /quiz-analytics. ## D **DPA (Data Processing Agreement)** — Contrato GDPR/LGPD que define responsabilidades de processamento de dados pessoais. Studeia oferece DPA padrao para clientes Enterprise. **Distractor Analysis** — Em quiz de multipla escolha, analisa qual alternativa errada e mais escolhida — pista de misconception comum. ## E **EAD (Educacao a Distancia)** — Modalidade educacional online. Termo brasileiro equivalente ao ingles "online learning" ou "e-learning". **Embedding** — Representacao vetorial de texto (1024 dimensoes no Studeia, gerada via Voyage AI). Permite busca semantica por similaridade. **Enrollment** — Matricula. Vincula Student a Course, opcionalmente com ClassGroup. Studeia: status active/completed/paused/cancelled. **EvaluationAgent** — Agente IA do Studeia (Haiku, background, ~$0.001/turno) que classifica respostas do aluno no chat e detecta misconceptions. ## F **Fallback Chain** — Sequencia ordenada de providers a tentar quando o primario falha. Studeia LLM fallback: Claude → OpenAI → xAI Grok → Google Gemini. **FAQPage Schema** — Schema.org JSON-LD para FAQs. Estrutura perguntas/respostas para descoberta por LLMs e Google AI Overviews. Studeia gera automaticamente para toda pagina de docs. ## G **GDPR** — General Data Protection Regulation (Europa). Studeia compliant via DPA Enterprise. Equivalente europeu da LGPD. **Gradebook** — Livro de notas. Studeia: GradeCategory (com pesos) > GradeItem > Grade. **Guardian** — Responsavel legal (pai/mae/tutor). Vinculado a aluno via GuardianLink (verificado por SMS para LGPD/ECA compliance). ## H **Haiku (Claude Haiku)** — Modelo Claude mais rapido e barato. Studeia usa para tarefas background: misconception detection, content generation, session summarization, chat supervisor. **Hreflang** — Atributo HTML que indica versao em outro idioma da mesma pagina. Importante para SEO multilingue. ## I **IMS Common Cartridge (IMS CC)** — Padrao de empacotamento de conteudo educacional. Studeia importa via `POST /api/institution/courses/import`. **Inline Quiz** — Quiz interativo renderizado dentro do chat do tutor IA. Studeia: LLM gera marcador `[INLINE_QUIZ]...[/INLINE_QUIZ]` apos detectar misconception, cliente renderiza componente interativo. **Item Difficulty** — Em psicometria de testes, proporcao de alunos que acertaram a questao. p < 0.3 = dificil; p > 0.85 = facil. ## J **JIT Provisioning (Just-In-Time)** — Criacao automatica de usuario no primeiro login via SSO. Studeia faz para SAML e OIDC, respeitando allowedDomains. **JSON-LD** — JavaScript Object Notation for Linked Data. Formato W3C de schema markup. Usado em Studeia para SEO/GEO (Article, FAQPage, BreadcrumbList) e OB 3.0 credentials. ## K **Khan Academy** — Plataforma educacional gratuita (Khan Academy / Khanmigo AI tutor). B2C, focada em conteudo proprio. Studeia e B2B, focada em conteudo da instituicao. Nao competem diretamente. ## L **LGPD** — Lei Geral de Protecao de Dados (Lei 13.709/2018, Brasil). Studeia compliance nativa: data export Art. 18 IV, deletion Art. 18 VI, consentimento explicito, DPA enterprise. [Saiba mais](/legal/lgpd-rights-guide). **LiveClass** — Aula ao vivo. Studeia suporta 4 providers: BBB (iframe), Zoom, Teams, Google Meet (todos external). **llms.txt** — Padrao emergente para "robots.txt para LLMs" — arquivo markdown na raiz indicando o que cada LLM pode crawlear + curacao de conteudo para AI agents. [llmstxt.org](https://llmstxt.org). **LLM Router** — Servico interno do Studeia que seleciona provider+model por tipo de tarefa, com fallback automatico e metering. **LMS** — Learning Management System. Plataforma de gestao de aprendizado. Studeia, Moodle, Canvas, Blackboard, Google Classroom sao LMS. **LTI (Learning Tools Interoperability)** — Padrao 1EdTech para integracao entre LMS e tools educacionais. LTI 1.3 usa OIDC + JWT. Studeia funciona como tool provider em Canvas, Moodle, Blackboard. ## M **Mastery** — Dominio de um conceito ou habilidade. Studeia calcula via ConceptMastery (bayesiano). Estrategias pedagogicas adaptam por mastery (< 0.3 = direct instruction, > 0.9 = challenge). **Misconception** — Erro conceitual de aluno. Studeia detecta via EvaluationAgent e rastreia com lifecycle 3 estados: active → resolving → resolved. **Moodle** — LMS open-source mais usado do mundo. Studeia complementa ou substitui dependendo do caso. [Comparativo](/comparisons/studeia-vs-moodle). **MRR (Monthly Recurring Revenue)** — Receita Recorrente Mensal. Metrica chave SaaS. Studeia admin global ve MRR em /admin/finance. **Multi-tenant** — Arquitetura onde multiplas instituicoes (Tenants) usam mesma instancia da plataforma com dados isolados. Studeia: filtro obrigatorio por tenantId + RLS Supabase. ## N **Next.js** — Framework React full-stack. Studeia usa Next.js 15 App Router. ## O **OB 3.0 (Open Badges 3.0)** — Padrao W3C Verifiable Credential para credenciais educacionais. Studeia exporta badges como OB 3.0 com pagina publica de verificacao. **OIDC (OpenID Connect)** — Protocolo de autenticacao moderno baseado em OAuth 2.0. Studeia suporta para SSO Enterprise. **Orchestrator (Agente IA)** — Agente coordenador do pipeline multi-agente do tutor IA do Studeia. TypeScript puro (zero custo LLM). ## P **pgvector** — Extensao PostgreSQL para armazenar e buscar vetores. Studeia usa para RAG (1024 dimensoes). **Point-biserial discrimination** — Correlacao item-total em psicometria de testes. Indica quanto uma questao distingue bons de fracos. > 0.4 e excelente. **Persona** — Configuracao de avatar IA. Roadmap Studeia. **PromptTemplate** — Template de prompt LLM armazenado no banco. Customizavel por tenantId, taskType, provider, locale, courseId. ## Q **QTI (Question and Test Interoperability)** — Padrao 1EdTech para interoperabilidade de quizzes. Studeia importa QTI 1.2 via IMS CC. **Quarantine (chat tutor)** — Restricao temporaria de uso do chat tutor IA imposta pelo Agente Supervisor apos 3 strikes (LOW/MEDIUM em 7 dias). 48h padrao. Aluno pode apelar. ## R **RAG (Retrieval Augmented Generation)** — Combina busca vetorial + LLM. Studeia usa per-tenant: cada curso ingerido tem chunks isolados, tutor cita material proprio. **Rate Limit** — Limite de chamadas por periodo. Studeia: tres tiers para API publica (1000/5000/custom req/hora) via Redis. **Redis** — Banco de dados em memoria. Studeia usa para cache, queue (BullMQ), leaderboards (ZSET), rate limiting, circuit breaker state, OAuth nonces. **Rubric** — Matriz de avaliacao multi-criterio. Studeia: criterios com pesos + niveis (1-5 ou custom) + descricoes. ## S **SaaS** — Software as a Service. Studeia e SaaS multi-tenant. **SAML 2.0** — Protocolo de SSO via XML. Studeia suporta SP-initiated e IdP-initiated via node-saml. **SCIM 2.0** — System for Cross-domain Identity Management (RFC 7644). Provisionamento automatico de usuarios/grupos via IdP. Studeia: 14 endpoints, Bearer token criptografado. **SCORM** — Sharable Content Object Reference Model. Padrao legacy de empacotamento de conteudo. Studeia NAO suporta nativamente (apenas IMS CC). H5P/SCORM 2004 nao migram automaticamente. **Slugs (Plan)** — Identificadores de planos B2B Studeia: `demo`, `mini`, `growth`, `pro_100`, `enterprise`. Plus legacy: `starter`, `professional`. **SRS (Spaced Repetition System)** — Algoritmo de revisao espacada (ex: SM-2). Studeia usa em flashcards e revisao adaptativa. **SSO (Single Sign-On)** — Login unico para multiplas aplicacoes. Studeia: SAML, OIDC (Enterprise plan). **Strike (chat tutor)** — Infracao moderada pelo Agente Supervisor. 3 strikes (LOW/MEDIUM em 7 dias) = quarentena. **Stripe** — Provider de pagamento internacional. Studeia integra Stripe (cartao) + Asaas (PIX/boleto Brasil). **StudentMisconception** — Modelo de banco que rastreia erros conceituais do aluno com lifecycle (active → resolving → resolved). ## T **Tenant** — Instituicao em arquitetura multi-tenant. Studeia: Tenant.id e filtro obrigatorio em todas queries. **TenantApiKey** — Chaves de API LLM proprias do tenant (Anthropic, OpenAI, etc). Criptografadas AES-256-GCM no banco. Quando configuradas: custos vao para conta do tenant, nao do Studeia. **Triple JSON-LD stack** — Article + FAQPage + BreadcrumbList em mesma pagina. Gera +1.8x citacoes em LLMs vs Article-only. ## U **User-agent (AI crawlers)** — Identificadores de bots de IA: GPTBot, OAI-SearchBot, ChatGPT-User (OpenAI), PerplexityBot, ClaudeBot, Claude-Web, anthropic-ai (Anthropic), Google-Extended, Bytespider. ## V **Vercel AI SDK** — SDK Node.js unificado para multiplos providers LLM. Studeia usa em todos os agentes para abstrair Claude/GPT/Grok/Gemini. **VideoProvider** — Provider de aula ao vivo. Studeia suporta 4: BBB, Zoom, Teams, Google Meet (adapter pattern). **Voyage AI** — Provider de embeddings (alternativa a OpenAI). Studeia usa voyage-3 (1024 dims) como primary. ## W **WCAG 2.1 AA** — Web Content Accessibility Guidelines nivel AA. Studeia compliance: skip-to-content, focus-visible, high-contrast, keyboard nav, screen reader compat. **Webhook** — Callback HTTP para eventos. Studeia: webhooks de billing (Stripe/Asaas), video providers (Zoom/Teams), automacoes (publico autenticado por token), Graph notifications (Teams). **White-label** — Plataforma sem marca do vendor. Studeia oferece via custom domain + branding total + remocao de marca Studeia (Enterprise). ## X **xAPI** — Experience API. Padrao moderno para tracking de aprendizado. Studeia roadmap. **XP (Experience Points)** — Pontos de experiencia da gamificacao. Studeia: config hierarquica tenant→curso. ## Y **YAML frontmatter** — Cabecalho de configuracao em arquivos markdown/TS. Studeia docs usam para meta. ## Z **Zoom** — Plataforma de videoconferencia. Studeia integra como video provider via Server-to-Server OAuth. ## Veja tambem - [Plataforma overview](/platform/overview) - [API publica](/api/overview) ## FAQ **Q: O que e RAG?** Retrieval Augmented Generation. Tecnica que combina busca semantica (RAG) com geracao de texto via LLM. Em vez de o LLM inventar respostas, busca trechos relevantes em um banco vetorial e usa como contexto. Studeia usa RAG per-tenant para que o tutor IA cite material proprio do curso. **Q: O que e Open Badges 3.0?** Padrao W3C Verifiable Credentials para credenciais educacionais. Substitui certificados PDF por JSON-LD verificavel digitalmente. Studeia exporta badges como OB 3.0 com pagina publica de verificacao + compativel com LinkedIn Add to Profile. --- # [pt-BR] Integracao Asaas (PIX + boleto + cartao Brasil) URL: https://docs.studeia.com/integrations/asaas Locale: pt-BR Section: integrations Updated: 2026-05-24 **Short answer:** Asaas e provider brasileiro de pagamento do Studeia: PIX instantaneo (1.99% taxa), boleto (R$3.49), cartao nacional (4.99% + R$0.49). Para clientes BR e mais barato e nativo que Stripe. Webhooks fail-closed (503 se token ausente). Customer split por provider (stripeCustomerId vs asaasCustomerId). Para internacional: Stripe USD em paralelo. ## Setup ### 1. Asaas Dashboard 1. https://asaas.com (ou sandbox: https://sandbox.asaas.com) 2. Configuracoes > Integracoes > API > copie Access Token 3. Configuracoes > Webhooks > Add: - URL: `https://[tenant].studeia.com/api/webhooks/asaas?token=` - Eventos: PAYMENT_RECEIVED, PAYMENT_OVERDUE, PAYMENT_REFUNDED, SUBSCRIPTION_CREATED/UPDATED/DELETED 4. Customize token (string aleatoria, criptograficamente forte) ### 2. Env vars ``` ASAAS_API_KEY=$aact_... ASAAS_WEBHOOK_TOKEN=...gerado-no-passo-3... ASAAS_SANDBOX=true # opcional, default false ``` ### 3. Criar produtos no Asaas Asaas usa modelo de cobrança recorrente diferente do Stripe. Em Studeia, planos sao mapeados via codigo (nao precisa criar product no Asaas dashboard). ## Fluxo PIX ``` Admin clica "Pagar com PIX" em /institution/billing ↓ POST /api/institution/billing/checkout Body: { planSlug: "mini", provider: "asaas" } ↓ Studeia AsaasBillingProvider.createCheckout(): 1. Resolve asaasCustomerId (cria se nao existe — POST /customers) 2. POST /subscriptions com billingType=PIX 3. Asaas retorna QR Code + copy-paste payload PIX 4. Studeia retorna { url } pagina hosted Asaas com QR ↓ Admin escaneia QR no app bancario, paga ↓ PIX confirma em ~30s (instantaneo) ↓ Webhook PAYMENT_RECEIVED → applyWebhookEvent → promove Tenant.plan ``` ## Hardening (regras 138, 139) - **Fail-closed**: ausencia de ASAAS_WEBHOOK_TOKEN env = 503 `asaas_not_configured` (regra 138). Anti-bypass. - **Token validation**: query param ?token=<...> comparado com env (timing-safe comparison) - **5xx em falha**: re-tenta automaticamente - **PaymentLog idempotente**: unique [provider, externalEventId] - **PII redact**: rawPayload passa por redactPaymentPayload() — remove cpfCnpj, email, name, address, billing_details (regra 139) ## Customer split por provider TenantSubscription tem campos separados: - `stripeCustomerId` — para Stripe - `asaasCustomerId` — para Asaas - `externalCustomerId` — legado (mantido como fallback se provider bater) `resolveCustomerIdForProvider()` em [create-checkout.ts](apps/web/lib/billing/create-checkout.ts) usa novos campos — NUNCA reuse ID cross-provider. ## Quando usar Asaas vs Stripe | Cenario | Recomendado | |---|---| | Cliente brasileiro com PIX | **Asaas** | | Cliente brasileiro com boleto | **Asaas** | | Cliente brasileiro com cartao | **Asaas** (mais barato) ou Stripe | | Cliente internacional | **Stripe USD obrigatorio** (Asaas bloqueado) | | Conta empresarial enterprise grande | Stripe (mais ferramentas — Sigma, custom reports) | ## Taxas comparadas | Metodo | Asaas | Stripe | |---|---|---| | PIX | 1.99% | NAO oferece nativo | | Boleto | R$3.49 fixo | NAO oferece nativo | | Cartao credito | 4.99% + R$0.49 | 3.99% + R$0.59 (USD) | | Cartao debito | 1.99% + R$0.39 | NAO oferece (BR) | | Antecipacao recebivel | Disponivel | NAO | Para volume B2B brasileiro tipico: Asaas e ~20-40% mais barato em taxas totais. ## Veja tambem - [Integration Stripe](/integrations/stripe) - [Plataforma overview](/platform/overview) ## FAQ **Q: Por que Asaas e nao so Stripe?** Para mercado brasileiro: 95% das transacoes B2B usam PIX (instantaneo, sem taxa) ou boleto. Stripe nao tem PIX nativo (oferece via 3rd parties mais caras). Asaas e brasileiro, integra PIX/boleto/cartao nacional nativamente com taxas menores (1.99% PIX, R$3.49 boleto, 4.99% cartao + R$0.49 vs Stripe 3.99% + R$0.59). **Q: Studeia detecta automaticamente qual provider usar?** Sim. getCurrencyFromHeaders() server-side via x-vercel-ip-country / cf-ipcountry: BR = Asaas oferecido na UI (PIX/boleto/cartao). Fora do BR = Stripe USD obrigatorio (Asaas bloqueado server-side com 400 'asaas_not_for_international'). **Q: Webhooks Asaas sao seguros?** Sim, mas com hardening. Token via query param ASAAS_WEBHOOK_TOKEN. Sem token configurado: webhook retorna 503 asaas_not_configured (fail-closed — regra 138). Idempotencia via PaymentLog unique. Asaas re-tenta com backoff em case de 5xx. **Q: Posso testar Asaas em sandbox?** Sim, Asaas tem ambiente sandbox separado: https://sandbox.asaas.com. Token e API key sao separados. Configure ASAAS_SANDBOX=true no env pra rotear para sandbox endpoint. --- # [pt-BR] Integracao BigBlueButton (BBB) — padrao open-source de aulas ao vivo URL: https://docs.studeia.com/integrations/bigbluebutton Locale: pt-BR Section: integrations Updated: 2026-05-24 **Short answer:** BigBlueButton (BBB) e o video provider PADRAO do Studeia: open-source AGPL, iframe embed (aluno fica DENTRO do Studeia), recursos educacionais nativos (lousa colaborativa, breakout rooms, polls). Setup: instancia self-hosted OU managed BBB provider ($20-200/mes). Auth via SHA-256 checksum (sem OAuth). Suporta ~150 alunos por servidor, escala via Scalelite. ## Por que BBB e padrao | Aspecto | BBB | Zoom/Teams/Meet | |---|---|---| | Custo | Open-source + hosting ($20-200/mes) | $14-25/host/mes (Zoom) ou incluido (M365/Google) | | Iframe embed | **Sim** (aluno fica no Studeia) | NAO (X-Frame-Options bloqueia) | | Lousa colaborativa | Sim, nativa | Limitada (Zoom Whiteboard, Microsoft Whiteboard) | | Breakout rooms | Sim, ilimitados | Sim (limites por tier) | | Polls / Levantar mao | Sim, nativos | Sim | | Status emoji (concordo/discordo) | Sim, nativo | Limitado | | Gravacao | Sim, nativa BBB | Sim | | Multi-share | Sim (multiplas pessoas screen-share simultaneo) | NAO em Zoom (1 por vez) | ## Self-hosted vs Managed ### Self-hosted (recomendado para escolas medias/grandes) Requirements (1 instancia para 150 users): - 16 CPU cores - 16 GB RAM - 500 GB disk (gravacoes) - Ubuntu 20.04 LTS - Dominio + TLS (Let's Encrypt) Installation via [bbb-install.sh](https://github.com/bigbluebutton/bbb-install) (~30min). Custo: VPS $30-100/mes (Hetzner, DigitalOcean, Vultr). ### Managed (mais simples para escolas pequenas/medias) Providers brasileiros e globais: - **BlindsideNetworks** (criadores BBB): $50-500/mes - **HigherEdLab**: $20-200/mes - **EduMeet** / **Blindside Networks BBB hosting** Inclui: hosting + atualizacoes + backup + suporte. Pague por simultaneous users. ## Setup em Studeia 1. Conseguir BBB instance URL (ex: `https://bbb.escola.edu.br/bigbluebutton/api`) 2. Conseguir Shared Secret do servidor BBB (`bbb-conf --secret` no servidor) 3. Studeia > Settings > Video Provider > BBB > Add: - URL - Shared Secret - Set as default 4. Testar: Studeia chama `/api/getMeetings` e valida resposta ## Como funciona ``` Admin/Professor cria LiveClass (videoProvider=bbb ou null=default) ↓ Studeia BBBAdapter.createMeeting() → SHA-256 checksum (BBB nao usa OAuth) → GET https://bbb.../api/create?meetingID=...&checksum=... → Retorna meetingID + joinUrl ↓ Aluno entra via /live-classes/[id] → joinMethod=iframe — Studeia renderiza iframe BBB DENTRO da pagina → Aluno nao sai do Studeia ``` ## Gravacoes BBB grava no servidor proprio: - Format: BBB recording format (proprietary) ou MP4/WebM (via plugin) - URL: `https://bbb.../playback/presentation/2.3/[recordingId]` - Studeia salva recordingUrl em LiveClass apos webhook BBB notifica ## Limitacoes - **Sem app mobile nativo BBB** — alunos usam browser mobile (funcional mas nao otimo) - **WebRTC**: aluno precisa de browser moderno (Chrome, Firefox, Edge, Safari 14+) - **Bandwidth**: ~1 Mbps download por aluno (para video). Verificar conexao escolar - **Latencia**: BBB e otimo em LAN, OK em WAN. Para alunos rurais com conexao fraca: pode ter delay > 500ms ## Veja tambem - [Aulas ao vivo overview](/features/live-classes/overview) - [Integration Zoom](/integrations/zoom) ## FAQ **Q: BigBlueButton e gratuito?** Software e gratuito (open-source AGPL 3.0). Mas voce precisa hospedar uma instancia BBB (servidor proprio com ~16 CPU + 16 GB RAM para ~150 alunos simultaneos) OU contratar managed BBB provider ($20-200/mes dependendo do tamanho). Sem hosting/provider: BBB nao funciona. **Q: Por que BBB e o video provider padrao do Studeia?** Tres razoes: (1) Open-source educacional — recursos nativos pra ensino (lousa colaborativa, breakout rooms, polls, levantar mao, status emoji). (2) Iframe embed — aluno fica DENTRO do Studeia, nao precisa abrir outra aba (Zoom/Teams/Meet bloqueiam iframe via X-Frame-Options). (3) Sem custos por meeting — uma vez paga a instancia, ilimitado. **Q: Como configurar BBB no Studeia?** Settings > Video Provider > BBB > URL (ex: https://bbb.escola.edu.br/bigbluebutton/api) + Shared Secret (do servidor BBB). Auth via SHA-256 checksum (BBB nao usa OAuth). Studeia testa conexao via /api/getMeetings. **Q: BBB e adequado para 1000 alunos simultaneos em uma aula?** Uma instancia BBB tipica aguenta ~150 alunos por servidor. Para >150: configure BBB Scalelite (load balancer + multiplas instancias). Para >1000 simultaneos: considere Zoom Webinar (limite 10000 attendees passivos) em vez de BBB. --- # [pt-BR] Integracao Canvas LMS via LTI 1.3 (Studeia como tool provider) URL: https://docs.studeia.com/integrations/canvas-lti Locale: pt-BR Section: integrations Updated: 2026-05-24 **Short answer:** Studeia funciona como LTI 1.3 tool provider em Canvas LMS. Setup em Canvas: Admin > Developer Keys > LTI Key > paste config JSON gerado em /institution/lti-tools do Studeia > ativar placement. OIDC launch + JWT/JWKS + AGS grade passback (notas sincronizam automaticamente pro Canvas Gradebook). Util para universidades em Canvas que querem complementar com Studeia (tutor IA, gamificacao, mobile B2B) em cursos especificos sem desinvestir o LMS principal. ## Pre-requisitos - Studeia plano com LTI habilitado (Enterprise ou planos pagos) - Canvas Admin role (para registrar Developer Key) - HTTPS em ambos lados (LTI 1.3 exige TLS) ## Setup ### 1. Studeia: gerar config LTI tool `/institution/lti-tools > New Tool`: - Tool name: "Canvas Production" - Target Link URI: `https://[tenant].studeia.com/lti/launch` - OIDC Login URI: `https://[tenant].studeia.com/lti/login` - Public JWKS URL: `https://[tenant].studeia.com/.well-known/jwks.json` - Studeia gera Client ID + Deployment ID Studeia exibe JSON config completo (LTI 1.3 spec) — copie. ### 2. Canvas: registrar Developer Key 1. Canvas Admin > Developer Keys > + Developer Key > **LTI Key** 2. Method: **Paste JSON** 3. Cole JSON config do passo 1 4. Save > ON (ativar key) 5. Copie **Client ID** gerado pelo Canvas ### 3. Canvas: instalar app no account/curso 1. Account Admin > Settings > Apps > + App > **By Client ID** 2. Cole Client ID 3. Configure placements: - Course Navigation (link no menu lateral do curso) - Assignment Selection (criar assignment Studeia) - Link Selection (link em paginas/modulos) - User Navigation (link no menu do usuario) ### 4. Validar Em qualquer curso Canvas: menu lateral > Studeia tool > deve abrir Studeia logado com mesmo usuario (via OIDC launch). ## Como funciona ``` Aluno em Canvas clica em "Studeia Module" ↓ Canvas POST /lti/login?iss=... (Studeia OIDC Login endpoint) ↓ Studeia valida + retorna redirect para Canvas com: - state (HMAC-signed) - nonce (Redis 15min anti-replay) ↓ Canvas redirect aluno para /lti/launch com JWT id_token assinado ↓ Studeia LtiService.launch(): 1. Valida JWT signature via Canvas JWKS 2. Valida nonce (anti-replay) 3. Valida iss, aud, exp, deployment_id 4. Extract user_id, name, email, roles, context_id 5. JIT provisioning (cria User se nao existe — User.externalId = LTI sub) 6. Cria/atualiza Enrollment (course_id mapping) 7. Inicia sessao Studeia (Supabase auth) ↓ Redirect pra modulo/aula/quiz indicado (LtiLaunch.targetResource) ↓ Aluno usa Studeia normalmente ``` ## AGS grade passback Quando aluno completa atividade Studeia que tem AGS line_item associado: ``` LessonCompletion / QuizAttempt finaliza ↓ Studeia LtiAdvantageService.sendScore(): POST {issuer}/api/lti/courses/{courseId}/line_items/{itemId}/scores Body: { userId: lti.sub, scoreGiven: 85, scoreMaximum: 100, activityProgress: "Completed", gradingProgress: "FullyGraded", timestamp: now() } Auth: OAuth 2.0 Client Credentials grant (Studeia private key signs JWT) ↓ Canvas atualiza Gradebook automaticamente ``` Sem dupla escrita — Canvas Gradebook continua source-of-truth. ## Names and Roles Provisioning Service (NRPS) LTI 1.3 spec permite Studeia consultar lista de alunos do curso Canvas: ``` GET {nrps_url}/memberships Auth: Bearer (OAuth 2.0 Client Credentials) ``` Retorna roster (alunos + roles). Util para pre-popular Enrollments antes do primeiro launch. ## Casos de uso comuns ### Universidade ja em Canvas quer Studeia em curso especifico 1. Departamento de Computacao decide usar Studeia para CS101 (tutor IA real) 2. Admin Canvas adiciona Studeia tool no curso CS101 3. Estrutura: Canvas tem topics + assignments + gradebook. Studeia tem AI tutor + gamificacao + interactive content 4. Quizzes via Studeia → grade passback pro Canvas Gradebook 5. Outros cursos Canvas seguem sem Studeia ### Migracao gradual Canvas → Studeia 1. Adicionar Studeia LTI em todos cursos 2. Cursos novos: criar direto no Studeia, link LTI no Canvas como entry point 3. Cursos legacy: manter em Canvas, complementar com Studeia 4. Em 1-2 anos: avaliar decommission Canvas ## Limitacoes - **Deep Linking 1.3**: Studeia suporta selecao de recurso especifico (modulo/aula) durante adicionar tool em assignment - **LTI Sub Manage** (sub-tenants): nao suportado nativamente — cada tenant Studeia = um Developer Key Canvas - **Canvas plagiarism integration**: nao via Studeia LTI (use plugin Canvas separado) ## Troubleshooting ### JWT validation fails Verificar JWKS URL Studeia acessivel publicamente: `curl https://[tenant].studeia.com/.well-known/jwks.json` deve retornar JSON com keys. ### Grade passback nao funciona Verificar AGS scope habilitado em Developer Key Canvas: `https://purl.imsglobal.org/spec/lti-ags/scope/score` + `lineitem.readonly` ou `lineitem`. ### Aluno ve "Tool unavailable" OIDC nonce expirado (>15min) ou state HMAC mismatch. Recarregar pagina Canvas. ## Veja tambem - [Use case: University](/use-cases/university) - [Integration Moodle LTI](/integrations/moodle-lti) ## FAQ **Q: Como adicionar Studeia em curso Canvas?** Studeia como LTI 1.3 tool provider. Em Studeia: /institution/lti-tools > Generate Client ID + JWKS. Em Canvas: Admin > Developer Keys > LTI Key > Method: Paste JSON > cole config Studeia. Depois Admin > Settings > Apps > By Client ID > paste ID. Ativar placements: course navigation, assignment, etc. **Q: Notas sincronizam automaticamente?** Sim, via AGS (Assignment and Grade Service). Quando aluno completa atividade Studeia: backend chama POST {issuer}/api/lti/courses/{courseId}/line_items/{itemId}/scores. Grade aparece no Canvas Gradebook (Canvas continua source-of-truth). Sem dupla escrita. **Q: Posso usar Studeia AI tutor dentro de Canvas?** Sim. Quando aluno acessa link LTI no Canvas: OIDC launch valida JWT + cria sessao Studeia + redireciona pra modulo/aula. Aluno usa tutor IA, gamificacao, tudo do Studeia — dentro do iframe Canvas (ou nova aba se iframe blocked). **Q: Que dados Canvas envia para Studeia via LTI?** Per LTI 1.3 spec: user_id, name, email, roles (Learner/Instructor/Administrator), context_id (course_id Canvas), context_label/title (nome do curso), launch_presentation, resource_link_id. Plus AGS endpoints para grade passback. Names and Roles para listar alunos do curso (com permissao). --- # [pt-BR] Integracao Google Meet (OAuth + Calendar API + Meet REST v2) URL: https://docs.studeia.com/integrations/google-meet Locale: pt-BR Section: integrations Updated: 2026-05-24 **Short answer:** Google Meet integra como video provider via OAuth 2.0 admin consent + Calendar API (cria evento com Meet link) + Meet REST API v2 (status). Setup ~15min via Google Cloud Console. Limitacoes: gravacao/transcricao iniciadas MANUALMENTE pelo host (Google nao expoe start_recording API), endMeeting nao suportado (adapter marca como completed local), funcionalidade plena requer Workspace pago. ## Setup ### 1. Google Cloud Console 1. https://console.cloud.google.com > APIs & Services > Library 2. Habilitar **Google Calendar API** + **Google Meet REST API v2** 3. Credentials > OAuth 2.0 Client ID > Web application 4. Authorized redirect URI: `https://[tenant].studeia.com/api/institution/video-provider/callback/google-meet` 5. Copie Client ID + Client Secret ### 2. Studeia 1. Settings > Video Provider > Google Meet > Connect 2. Cole Client ID + Client Secret 3. Click "Authorize" — redirect para Google OAuth admin consent 4. Aceitar permissoes (admin do dominio Google Workspace) 5. Studeia armazena access_token + refresh_token criptografados AES-256-GCM ### 3. Validar Cria LiveClass com videoProvider=google_meet > Studeia chama Calendar API > evento criado com Meet link > aluno entra via joinMethod=external (nova aba). ## Como funciona ``` Studeia GoogleMeetAdapter.createMeeting() → Calendar API: events.insert { summary: "Aula: Matematica - Geometria", start: { dateTime: ... }, end: { dateTime: ... }, conferenceData: { createRequest: { requestId: uuid, conferenceSolutionKey: { type: "hangoutsMeet" } } }, attendees: [...alunos.map(s => ({ email: s.email }))] } → Google retorna evento + hangoutLink (ex: https://meet.google.com/abc-defg-hij) ↓ Studeia salva LiveClass.providerJoinUrl = hangoutLink ↓ Aluno entra: joinMethod=external (X-Frame-Options bloqueia iframe) ``` ## Recording sync Cron `/api/cron/recording-sync` a cada 15min: 1. Lista LiveClasses completed > 15min sem recordingUrl 2. Para cada, chama `adapter.getRecordings(meetingId)` 3. Meet REST API v2: `GET https://meet.googleapis.com/v2/conferenceRecords/{name}` 4. Se gravacao disponivel: atualiza recordingUrl + cria LiveClassTranscription (se transcript) **Importante**: gravacao precisa ter sido INICIADA pelo host durante o meeting. Se host esqueceu de gravar: nao ha gravacao a sincronizar. ## Refresh tokens OAuth tokens Google expiram a cada hora. Studeia: - Cache access_token Redis (TTL 55min) - Antes de cada chamada: verifica expiracao, refresha via refresh_token se necessario - Se refresh falha: marca integration inactive + notifica admin ## Limitacoes vs Zoom/Teams | Recurso | Google Meet | Zoom | Teams | |---|---|---|---| | Criar meeting via API | Sim (Calendar) | Sim | Sim (Graph) | | End meeting via API | NAO | Sim | NAO | | Start recording via API | NAO | Sim | NAO | | Get recording via API | Sim (Meet REST v2) | Sim (webhook) | Sim (Graph) | | Transcript automatica | Sim (Workspace Edu+) | Sim (VTT) | Sim (VTT) | | Webhook lifecycle | NAO (so via polling) | Sim | Sim (Graph Notifications) | ## Quando NAO usar Google Meet - ❌ Escola sem Workspace pago (limite 1h por meeting) - ❌ Quer gravacao automatica sem depender de host clicar - ❌ Quer iframe embed (Studeia + BBB resolve) - ❌ Quer webhook events de meeting (Google nao expoe — Studeia depende de polling cron) ## Veja tambem - [Google Workspace overview](/integrations/google-workspace) - [Aulas ao vivo](/features/live-classes/overview) - [Integration BBB](/integrations/bigbluebutton) ## FAQ **Q: Como Studeia cria meeting no Google Meet?** Via Google Calendar API. Studeia cria evento Calendar com conferenceData solicitando Meet link — Google gera URL automaticamente. Meet REST API v2 e usado para consultar status e recordings (quando disponiveis). **Q: Google Meet tem gravacao automatica?** Apenas via Google Workspace Business Standard+ ou Education Standard+. Mesmo assim, gravacao precisa ser iniciada MANUALMENTE pelo host no Meet (Google nao expoe API para start_recording automatico). Studeia consulta gravacoes via Calendar Events API + Drive API apos finalizar meeting. **Q: Posso usar Google Meet sem Workspace pago?** Para criar meetings via API: precisa de Workspace pago. Para alunos PARTICIPAREM: qualquer um pode entrar (incluindo @gmail.com pessoal). Para escolas Workspace for Education Fundamentals (gratis): meetings funcionam mas com limite 1h por sessao. **Q: Endpoint endMeeting funciona?** NAO. Google nao expoe API para terminar meeting programaticamente. Adapter do Studeia marca como completed localmente (LiveClass.actualEndTime = now()) mas o meeting Google em si continua ate que o ultimo participante saia ou o host clique 'End meeting' manualmente. --- # [pt-BR] Integracao Google Workspace (Drive + Calendar + SSO + Meet) URL: https://docs.studeia.com/integrations/google-workspace Locale: pt-BR Section: integrations Updated: 2026-05-24 **Short answer:** Studeia integra com Google Workspace em 4 aspectos: (1) SSO via OIDC com OAuth 2.0 Client, (2) Google Drive sync bidirecional para biblioteca de midia, (3) Google Calendar sync de aulas ao vivo, (4) Google Meet como video provider nativo. Funciona com Workspace for Education (incluindo o tier gratis Fundamentals) e Workspace Business/Enterprise. Setup ~30 minutos via Google Cloud Console + Settings > Integrations no Studeia. ## 4 pontos de integracao ### 1. SSO via OIDC **Setup**: 1. Google Cloud Console > APIs & Services > Credentials > Create Credentials > OAuth 2.0 Client ID 2. Application type: Web application 3. Authorized redirect URI: `https://[tenant].studeia.com/api/auth/sso/[slug]/oidc/callback` 4. Copie Client ID + Client Secret 5. Studeia > Settings > SSO > Add Provider > OIDC 6. Discovery URL: `https://accounts.google.com/.well-known/openid-configuration` (auto-fetch) 7. Allowed domains: ex: `@escola.edu.br` (anti-shadow accounts) JIT provisioning cria usuario automatico no primeiro login. Atributos mapeados: name, email, role. ### 2. Google Drive sync (biblioteca de midia) **Setup**: 1. Google Cloud Console > APIs > Habilitar **Drive API** 2. Mesmo OAuth Client (ou criar dedicado) 3. Scopes: `https://www.googleapis.com/auth/drive.file` (acesso aos arquivos criados pelo Studeia) ou `drive` (acesso completo — se necessario) 4. Studeia > Settings > Integrations > Google Drive > Connect 5. Admin consent flow (OAuth admin do dominio) 6. Studeia armazena tokens AES-256-GCM criptografados **Funcionalidades** (DriveIntegration + DriveSyncEngine): - **Import**: Drive folder → MediaAsset no Studeia - **Export**: MediaAsset → Drive folder - **Sync**: bidirecional (mudancas em ambos lados refletem) - **Backup**: snapshot completo dos MediaAssets em Drive folder Cron `/api/cron/drive-sync` roda periodicamente (configurado pelo admin) e sincroniza integracoes ativas. ### 3. Google Calendar (aulas ao vivo) **Setup**: mesmo OAuth Client, habilitar **Calendar API**. **Funcionalidades**: - Quando admin cria LiveClass no Studeia → evento Calendar criado para todos os alunos da turma - Mudanca de horario → atualiza evento Calendar - Cancelamento → deleta evento - Aluno ve aula no Google Calendar do celular (notificacoes nativas) ### 4. Google Meet (video provider) **Setup**: 1. Google Cloud Console > APIs > Habilitar **Calendar API** + **Meet REST API v2** 2. OAuth 2.0 Client (mesmo dos anteriores) 3. Studeia > Settings > Video Provider > Google Meet > Connect 4. Admin consent flow **Como funciona**: - LiveClass criado com videoProvider=google_meet - Studeia cria evento Calendar com conferenceData (gera Meet link automatico) - Aluno entra via joinMethod=external (nova aba, abre Meet app/web) **Limitacao**: endMeeting nao suportado via API — adapter marca como completed localmente. **Limitacao**: gravacao/transcricao iniciada manualmente pelo host (Google nao expoe API para iniciar gravacao automaticamente). ## Setup completo (30 minutos) | Etapa | Tempo | |---|---| | 1. Habilitar 4 APIs no Google Cloud Console | 5min | | 2. Criar OAuth 2.0 Client (web app) | 3min | | 3. Configurar SSO em Studeia | 5min | | 4. Conectar Drive + Calendar + Meet em Studeia | 10min | | 5. Validar com 1 usuario teste | 5min | | 6. Comunicar aos professores/alunos | 2min | ## Troubleshooting ### Erro "Token expired" OAuth tokens Google expiram a cada hora. Studeia armazena `refreshToken` e renova automaticamente. Se erro persistir: re-autorizar via Settings > Integrations > Disconnect + Reconnect. ### Drive sync lento Drive API tem quotas (1000 req/100s/user). Para >5000 arquivos por hora, considere: - Filtrar pastas especificas (nao raiz inteira) - Aumentar intervalo do cron (ex: a cada 2h em vez de 30min) ### Meet sem botao "Gravar" Apenas o host (organizador do meeting) pode iniciar gravacao. Studeia define organizer = professor configurado. Se outro user iniciou: Meet bloqueia gravacao. ## LGPD considerations - Tokens OAuth criptografados AES-256-GCM (regra critica 15) - OAuth state HMAC-SHA256 + nonce Redis 15min (anti-replay) - Drive sync respeita scopes minimo (drive.file recomendado vs drive completo) ## Veja tambem - [SSO Enterprise](/platform/sso-enterprise) - [Aulas ao vivo](/features/live-classes/overview) - [Integration Microsoft 365](/integrations/microsoft-365) ## FAQ **Q: Studeia integra com Google Workspace?** Sim, em 4 aspectos: (1) SSO via OIDC — alunos/professores fazem login com conta Google. (2) Google Drive sync — biblioteca de midia bidirecional (upload em Drive aparece em Studeia, e vice-versa). (3) Google Calendar — aulas ao vivo do Studeia sincronizam para Calendar do aluno. (4) Google Meet — video provider de aulas ao vivo nativo (alem de BBB/Zoom/Teams). **Q: Funciona com Google Workspace for Education?** Sim. Para K-12 com Workspace Edu Fundamentals (gratis): SSO funciona, mas API limits podem afetar Drive sync em escala. Para Workspace Business/Enterprise: sem limites praticos. Roteiro: configurar OAuth 2.0 Client em Google Cloud Console > APIs > Calendar API + Drive API + Meet REST API v2, autorizar admin consent flow, copiar Client ID + Secret para Studeia Settings > Integrations. **Q: Posso restringir Studeia a usuarios de um dominio Google especifico?** Sim. Configure 'Allowed domains' em Settings > SSO (ex: @escola.edu.br). Logins de outros dominios sao rejeitados na criacao JIT. Anti-shadow accounts. **Q: Quem paga pelo Google Meet?** A escola/empresa que ja paga Google Workspace (Meet incluido). Studeia nao cobra adicional por usar Meet. Limite de duracao depende do tier Workspace (Business Standard = 24h, Education Fundamentals = 1h). --- # [pt-BR] Integracao Microsoft 365 (Teams + Graph API + Azure AD SSO + OneDrive) URL: https://docs.studeia.com/integrations/microsoft-365 Locale: pt-BR Section: integrations Updated: 2026-05-24 **Short answer:** Studeia integra com Microsoft 365 em 4 aspectos: (1) SSO Enterprise via Azure AD (SAML 2.0, OIDC, SCIM 2.0 com group→course mapping para auto-matricula). (2) Microsoft Teams como video provider de aulas ao vivo via Graph API. (3) OneDrive sync bidirecional na biblioteca de midia. (4) Outlook Calendar sync. Funciona com Microsoft 365 A1/A3/A5 (Education) ou Business/Enterprise. ## 4 pontos de integracao ### 1. Azure AD SSO (SAML / OIDC) **Setup OIDC** (recomendado): 1. Azure Portal > Azure Active Directory > App registrations > New registration 2. Redirect URI: `https://[tenant].studeia.com/api/auth/sso/[slug]/oidc/callback` 3. Certificates & secrets > New client secret 4. API permissions: `openid`, `profile`, `email` 5. Studeia > Settings > SSO > Add Provider > OIDC 6. Discovery URL: `https://login.microsoftonline.com/{tenantId}/v2.0/.well-known/openid-configuration` 7. Client ID + Client Secret do passo 3 **Allowed domains**: `@escola.edu.br` (anti-shadow accounts). JIT provisioning + atributos mapeados via `SsoAttributeMapping`. ### 2. SCIM 2.0 (provisionamento automatico) **Setup**: 1. Azure Portal > Enterprise Applications > Studeia > Provisioning 2. Provisioning Mode: **Automatic** 3. Tenant URL: `https://[tenant].studeia.com/api/scim/v2` 4. Secret Token: gerado em Studeia > Settings > SSO > SCIM Token (criptografado AES-256-GCM) 5. Test Connection 6. Mappings: padrao Microsoft Graph (firstName, lastName, mail, displayName, accountEnabled, groups) 7. Scope: "Sync only assigned users and groups" 8. Settings: cycle interval = 40 minutes (default) 9. Start provisioning **Group → Course mapping**: Settings > SSO > Groups. Mapeie grupo AD (ex: "Engenharia 2026.1") para Course no Studeia. Quando AD adiciona usuario ao grupo, Studeia auto-matricula. **Grupos grandes** (>50 membros): processados via BullMQ async (`scim-group-sync` queue), Response 202 + jobId. ### 3. Microsoft Teams (video provider) **Setup**: 1. Azure AD > App registration > API Permissions > Microsoft Graph: - `OnlineMeetings.ReadWrite.All` - `OnlineMeetingRecording.Read.All` - Tipo: Application (nao Delegated) 2. Admin consent (precisa de Global Administrator) 3. Studeia > Settings > Video Provider > Teams > Tenant ID + Client ID + Client Secret + Organizer email 4. Auth: Client Credentials flow (sem usuario interativo) **Webhook**: `/api/webhooks/video/teams` com Graph Change Notifications. Subscription validation via `validationToken` retorno. **Limitacao**: endMeeting nao suportado via Graph API — adapter marca como completed localmente. ### 4. OneDrive sync (biblioteca de midia) Mesmo padrao do Drive integration: - DriveIntegration model com provider=onedrive - Tokens OAuth criptografados AES-256-GCM - Cron `/api/cron/drive-sync` sincroniza periodicamente - Operacoes: import / export / sync bidirecional / backup ## Setup completo (1-2 horas) | Etapa | Tempo | |---|---| | 1. Azure AD App registration | 10min | | 2. Configurar API permissions + admin consent | 10min | | 3. SSO OIDC em Studeia | 5min | | 4. SCIM provisioning | 30-45min | | 5. Teams provider | 10min | | 6. OneDrive integration | 10min | | 7. Testar com 5 usuarios piloto | 10min | ## Troubleshooting ### "AADSTS50011: Reply URL mismatch" Redirect URI no Azure AD nao bate com o configurado em Studeia. Verificar exato match (case-sensitive). ### SCIM "User not found in directory" Usuario foi removido do grupo no AD mas Studeia ainda referencia. Aguardar proximo cycle (40min) ou trigger manual via Provisioning > Provision on demand. ### Teams meeting cria mas sem audio Organizer email no Studeia config nao tem licenca Teams ativa. Verificar Microsoft 365 admin center. ## LGPD + GDPR - Tokens OAuth criptografados AES-256-GCM (regra 15) - SCIM Bearer token criptografado (regra 85) - Audit completo via ScimAuditLog (regra 89) - Microsoft DPA aplicavel para empresas europeias ## Veja tambem - [SSO Enterprise](/platform/sso-enterprise) - [Aulas ao vivo](/features/live-classes/overview) - [Integration Google Workspace](/integrations/google-workspace) ## FAQ **Q: Studeia integra com Microsoft 365?** Sim. (1) SSO Enterprise via Azure AD (SAML 2.0 OU OIDC + SCIM 2.0 para provisionamento automatico). (2) Microsoft Teams como video provider de aulas ao vivo via Graph API. (3) OneDrive sync na biblioteca de midia (mesmo padrao do Google Drive). (4) Outlook Calendar sync de aulas ao vivo via Graph API. **Q: Funciona com Microsoft 365 A1 (Education gratis)?** Sim para SSO + Teams + OneDrive. Limites de Graph API podem afetar SCIM em escala (>1000 users). Recomendado A3/A5 para escolas medias/grandes que querem provisioning robusto. **Q: Setup SCIM com Azure AD demora quanto?** 1-2 horas. Azure Portal > Enterprise Applications > Add app > 'Studeia' (catalog ou custom) > Provisioning > Mode: Automatic > Tenant URL: https://[tenant].studeia.com/api/scim/v2 > Secret Token (gerado em Studeia Settings > SSO > SCIM Token) > mappings default (Microsoft Graph compatible) > Start provisioning. **Q: Posso usar Teams como provider e ainda usar Zoom em algumas aulas?** Sim. Configure ambos providers em Settings > Video Provider. Para cada LiveClass admin escolhe qual provider usar (LiveClass.videoProvider override sobre default do tenant). --- # [pt-BR] Integracao Moodle LMS via LTI 1.3 (Studeia como external tool) URL: https://docs.studeia.com/integrations/moodle-lti Locale: pt-BR Section: integrations Updated: 2026-05-24 **Short answer:** Studeia integra com Moodle via LTI 1.3 (Moodle 3.10+). Setup em Moodle: Site administration > Plugins > External tool > Manage tools > Add tool > paste Tool URL Studeia + Client ID. OIDC launch + AGS grade passback (notas voltam pro Moodle Gradebook). Util quando escola/universidade quer manter Moodle como LMS principal + adicionar Studeia (tutor IA, gamificacao, mobile B2B) em cursos especificos. Para migracao total Moodle → Studeia: use IMS CC import (nao LTI). ## Pre-requisitos - Moodle 3.10+ (LTI 1.3 nativo) - Studeia plano com LTI habilitado (Enterprise ou planos pagos) - Moodle admin role - HTTPS em ambos lados ## Setup ### 1. Studeia: gerar config LTI tool `/institution/lti-tools > New Tool`: - Tool name: "Moodle Production" - Target Link URI: `https://[tenant].studeia.com/lti/launch` - OIDC Login URI: `https://[tenant].studeia.com/lti/login` - Public JWKS URL: `https://[tenant].studeia.com/.well-known/jwks.json` - Studeia gera Client ID + Deployment ID ### 2. Moodle: registrar tool 1. Site administration > Plugins > Activity modules > External tool > **Manage tools** 2. **+ configure a tool manually** 3. Tool name: "Studeia" 4. Tool URL: do passo 1 5. LTI version: **LTI 1.3** 6. Public key type: **Keyset URL** > URL: JWKS Studeia 7. Initiate login URL: do passo 1 8. Redirection URI(s): do passo 1 9. Tool configuration usage: **Show as preconfigured tool when adding an external tool** 10. Services > Assignment and Grade Services: **Use this service for grade sync and column management** 11. Services > Names and Role Provisioning: **Use this service to retrieve members information** 12. Save ### 3. Adicionar em curso 1. Curso Moodle > **Turn editing on** > Add an activity > **External tool** 2. Preconfigured tool: **Studeia** 3. Activity name: "Modulo Studeia - CS101" 4. Save Aluno clica no link > OIDC launch > Studeia loga via JWT > redirect pra modulo. ## Como funciona Identico ao Canvas LTI (mesma spec LTI 1.3): ``` Aluno clica em "Modulo Studeia" no curso Moodle ↓ Moodle POST /lti/login (Studeia OIDC Login) ↓ Studeia valida + redirect com state + nonce ↓ Moodle redirect aluno para /lti/launch com JWT id_token ↓ Studeia LtiService.launch(): 1. Valida JWT via Moodle JWKS (auto-fetched) 2. Valida nonce (Redis 15min anti-replay) 3. JIT provisioning (User com User.externalId = LTI sub) 4. Cria Enrollment se necessario 5. Inicia sessao Studeia ↓ Redirect pra modulo/aula ``` ## AGS grade passback ``` Aluno completa quiz Studeia ↓ LtiAdvantageService.sendScore() → POST score ↓ Moodle Gradebook atualizado ``` ## Quando usar LTI vs IMS CC | Cenario | Recomendado | |---|---| | Manter Moodle, complementar com Studeia em cursos pilotos | **LTI** | | Migrar TUDO de Moodle pra Studeia | **IMS CC import** (POST /api/institution/courses/import) | | Departamento experimenta Studeia antes de decisao institucional | **LTI** | | Moodle vai ser descontinuado em 6-12 meses | **IMS CC import** + paralelo durante migracao | ## Vantagens LTI vs migracao total ✅ Estudante usa SSO Moodle ja existente (Shibboleth, OIDC institucional) ✅ Gradebook Moodle continua source-of-truth ✅ Sem necessidade de migrar alunos / cursos / historico ✅ Reversivel facil — remover tool Moodle = volta ao estado anterior ✅ Por-curso (so cursos selecionados, nao instituicao inteira) ## Limitacoes - **Performance**: cada LTI launch e ~500-1000ms (JWT validation + Studeia bootstrapping) - **SSO experience**: aluno faz 1 click no Moodle, 1-2s depois esta no Studeia (nao instantaneo) - **Moodle Workshop activities**: nao mapeavel para Studeia (recriar manualmente) - **Plugins Moodle customizados**: nao sao chamados via LTI Studeia ## Veja tambem - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) - [Canvas LTI](/integrations/canvas-lti) - [Use case: University](/use-cases/university) ## FAQ **Q: Studeia funciona como tool em Moodle?** Sim, via LTI 1.3 spec (mesmo padrao usado em Canvas, Blackboard, Brightspace). Setup em Moodle: Site administration > Plugins > Activity modules > External tool > Manage tools > Add tool > paste Tool URL Studeia. Funciona em Moodle 3.10+ (LTI 1.3 suportado nativamente). **Q: Posso usar Studeia em curso Moodle MEC (e-Proinfo)?** Sim se a instalacao Moodle aceitar plugins externos via LTI. Algumas instalacoes governamentais bloqueiam external tools por motivos de seguranca/compliance — verificar com admin TI da rede educacional. **Q: Notas Studeia voltam pro Moodle Gradebook?** Sim, via AGS (Assignment and Grade Service) — mesmo mecanismo Canvas. Studeia chama POST {issuer}/api/lti/courses/{courseId}/line_items/{itemId}/scores quando aluno completa atividade. Moodle Gradebook atualiza. **Q: Posso migrar curso inteiro de Moodle pra Studeia em vez de LTI?** Sim. Moodle exporta curso em IMS Common Cartridge (IMS CC v1.x). Studeia importa via POST /api/institution/courses/import. LTI e para CASOS onde voce quer manter Moodle como LMS principal + adicionar Studeia features (tutor IA, gamificacao) em cursos especificos. Para migracao total: use IMS CC import. --- # [pt-BR] Integracao Stripe (checkout + webhooks + portal de billing) URL: https://docs.studeia.com/integrations/stripe Locale: pt-BR Section: integrations Updated: 2026-05-24 **Short answer:** Stripe e provider de pagamento B2B internacional do Studeia. Checkout self-service via Stripe Checkout Session, webhooks idempotentes (HMAC SHA-256 + ordering guard via lastEventAt) para subscription lifecycle, portal Stripe self-manage para admin trocar plano/cartao, dual currency BRL + USD detectado por geolocation. Para PIX/boleto Brasil: Asaas (integration paralela). ## Setup ### 1. Stripe Dashboard 1. https://dashboard.stripe.com > Developers > API Keys > copie Secret Key 2. Webhooks > Add endpoint > URL: `https://[tenant].studeia.com/api/webhooks/stripe` 3. Events to send: - `checkout.session.completed` - `customer.subscription.created` - `customer.subscription.updated` - `customer.subscription.deleted` - `invoice.payment_succeeded` - `invoice.payment_failed` 4. Copie Webhook signing secret ### 2. Criar produtos + prices Para cada plano B2B do Studeia (mini, growth, pro_100): 1. Products > Add product > nome (ex: "Studeia Mini") 2. Pricing: Recurring monthly + BRL R$ 250.00 3. Copie price_id (ex: `price_1TZk...`) 4. Repita para USD se quiser suportar clientes internacionais ### 3. Env vars ``` STRIPE_SECRET_KEY=sk_live_... STRIPE_WEBHOOK_SECRET=whsec_... STRIPE_PRICE_MINI=price_... STRIPE_PRICE_GROWTH=price_... STRIPE_PRICE_PRO_100=price_... STRIPE_PRICE_MINI_USD=price_... STRIPE_PRICE_GROWTH_USD=price_... STRIPE_PRICE_PRO_100_USD=price_... ``` ## Fluxo de checkout ``` Admin clica "Contratar Mini" em /institution/billing ↓ POST /api/institution/billing/checkout Body: { planSlug: "mini" } ↓ Studeia createCheckoutSession() (lib/billing/create-checkout.ts): 1. resolveCustomerIdForProvider() — pega/cria stripeCustomerId 2. Detect currency via getCurrencyFromHeaders() (server-side, anti-fraud) 3. Stripe Checkout Session com line_items=[price_id correto] 4. Retorna { url } do Stripe Checkout ↓ Frontend redireciona: window.location.href = data.url ↓ Admin paga no Stripe Checkout ↓ Stripe envia webhook checkout.session.completed ↓ Studeia applyWebhookEvent(): 1. Valida HMAC signature 2. stripe.subscriptions.retrieve(subscriptionId) — sempre re-fetch (nao confia em metadata) 3. Valida price_id contra allowlist 4. Cross-check tenantId entre session.metadata e subscription.metadata 5. Cria/atualiza TenantSubscription com currentPeriodEnd REAL 6. Promove Tenant.plan 7. Cria PaymentLog (idempotente via [provider, externalEventId]) ``` ## Hardening (regras 129-139) - **Webhook retorna 5xx em falha**: Stripe re-tenta 3 dias - **Ordering guard**: `lastEventAt` + `lastEventId` em TenantSubscription. Eventos fora de ordem sao pulados com warning + PaymentLog - **Idempotencia**: unique [provider, externalEventId] em PaymentLog - **Schema Zod**: `z.enum(PAID_PLAN_SLUGS)` no body do checkout (anti-typo) - **PII redact**: PaymentLog.rawPayload passa por `redactPaymentPayload()` (remove email/name/address/billing_details/cpfCnpj/card.last4 antes de persistir) - **Past_due gate**: `isAccessBlocked(status)` em layouts (substitui `status === "suspended"`). Cron `/api/cron/billing-grace-expire` transiciona apos grace 7d ## Portal Stripe self-manage POST `/api/institution/billing/portal` retorna URL temporaria do Stripe portal: - Admin troca plano (upgrade/downgrade) - Atualiza cartao - Ve invoices - Cancela subscription - Sem passar pelo suporte Studeia ## Multi-currency | Aspecto | BRL | USD | |---|---|---| | Detection | Default | Header x-vercel-ip-country / cf-ipcountry | | Price IDs | STRIPE_PRICE_MINI, _GROWTH, _PRO_100 | STRIPE_PRICE_MINI_USD, _GROWTH_USD, _PRO_100_USD | | Asaas fallback | Sim (PIX/boleto) | NAO (Asaas e Brasil only) | | Webhook | Mesmo endpoint | Mesmo endpoint | ## Veja tambem - [Integration Asaas (PIX)](/integrations/asaas) - [Plataforma overview](/platform/overview) ## FAQ **Q: Stripe e como Studeia recebe pagamento por mensalidade?** Sim, para B2B internacional/cartao. Plano e selecionado em /institution/billing > Studeia chama POST /api/institution/billing/checkout que cria Stripe Checkout Session > admin paga > webhook subscription.activated promove tenant.plan automaticamente. Para PIX/boleto Brasil: use Asaas (integration paralela). **Q: Webhooks Stripe sao confiaveis?** Sim, mas Studeia trata defensivamente. (1) Verifica HMAC SHA-256 via stripe-signature header com STRIPE_WEBHOOK_SECRET. (2) Stripe re-tenta 3 dias com backoff em case de 5xx. (3) Idempotencia via unique [provider, externalEventId] em PaymentLog. (4) Ordering guard via lastEventAt/lastEventId — eventos fora de ordem sao pulados com warning. (5) checkout.session.completed sempre faz stripe.subscriptions.retrieve() pra validar (nao confia em metadata). **Q: Studeia suporta moeda USD para clientes fora do Brasil?** Sim. STRIPE_PRICE_IDS (BRL) + STRIPE_PRICE_IDS_USD (USD) configuraveis via env vars. Detecta moeda server-side via x-vercel-ip-country / cf-ipcountry header. Cliente fora do BR ve preco em USD automaticamente. **Q: Posso usar Stripe Customer Portal para self-service?** Sim. POST /api/institution/billing/portal retorna URL do Stripe portal — admin troca plano, atualiza cartao, ve invoices, cancela. Sem precisar passar pelo suporte. --- # [pt-BR] Integracao Zapier / Make (via webhook + API publica) URL: https://docs.studeia.com/integrations/zapier-and-make Locale: pt-BR Section: integrations Updated: 2026-05-24 **Short answer:** Studeia integra com Zapier, Make (Integromat), n8n e qualquer plataforma no-code via 2 mecanismos: (1) Automacoes nativas do Studeia disparam send_webhook para URL externa quando evento acontece (course_completed, quiz_submitted, etc) — Zapier 'Catch Hook' recebe. (2) Plataforma externa chama API publica do Studeia (64+ endpoints, Bearer auth, scopes granulares) para criar/atualizar recursos. Sem app oficial Zapier ainda (roadmap 2026 H2) — usar 'Webhooks by Zapier' generic. ## 2 direcoes de integracao ### Direcao 1: Studeia → Zapier (eventos do Studeia disparam workflow externo) Caso de uso: aluno completa curso → criar lead Salesforce + notificar canal Slack + enviar certificado por email custom. **Setup**: 1. Zapier > New Zap > Trigger: **Webhooks by Zapier** > Catch Hook 2. Zapier gera URL: `https://hooks.zapier.com/hooks/catch/.../...` 3. Em Studeia: `/institution/automations > New Automation` 4. Trigger: event `course_completed` 5. Conditions (opcional): `event.score >= 80` 6. Action: `send_webhook` > Method: POST > URL: Zapier hook URL 7. Body (template interpolation): ```json { "studentName": "{{user.name}}", "studentEmail": "{{user.email}}", "courseId": "{{event.courseId}}", "completedAt": "{{event.completedAt}}", "score": "{{event.score}}" } ``` 8. Save automation 9. Zapier > Test trigger > completa um curso em Studeia > Zapier recebe payload 10. Continue Zap: add actions (Salesforce, Slack, Gmail, etc) **Eventos disponiveis**: lesson_completed, module_completed, course_completed, quiz_submitted, enrollment_created, enrollment_completed, forum_post_created, forum_reply_created, grade_posted, announcement_created, live_class_started, student_inactive, tag_added_to_user, tag_removed_from_user. ### Direcao 2: Zapier → Studeia (criar/atualizar recursos via API) Caso de uso: novo lead no Hubspot → criar usuario aluno + matricular em curso de boas-vindas. **Setup**: 1. Em Studeia: `/institution/settings/api-keys > Create` > scopes: `users:write`, `enrollments:write` 2. Copie chave (formato `mia_` + 40 hex) — mostrada UMA UNICA VEZ 3. Em Zapier: - Trigger: Hubspot 'New Contact' - Action: **Webhooks by Zapier** > POST - URL: `https://[tenant].studeia.com/api/institution/users` - Headers: - `Authorization: Bearer mia_...` - `Content-Type: application/json` - `Accept-Language: pt-BR` - Body JSON: ```json { "name": "{{contact.name}}", "email": "{{contact.email}}", "role": "student", "sendInvite": true } ``` 4. Continue Zap: outra Action POST para `/api/institution/enrollments` com courseId ## Rate limiting API key Studeia tem rate limit por tier: - Standard: 1000 req/hora - High: 5000 req/hora - Custom: configuravel Headers de resposta: `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`. Quando exceder: 429 + `Retry-After`. Zapier respeitar Retry-After automaticamente. Para volume alto: upgrade rate tier ou batch operations. ## SSRF prevention (limitacao) Webhook do Studeia bloqueia IPs privados (10.x, 192.168.x, etc) e metadata endpoints (169.254.169.254) — anti-SSRF. URLs Zapier (hooks.zapier.com) sao publicas, sempre passam. Se voce hospedar n8n self-hosted em IP privado: precisa expor publicamente (Cloudflare Tunnel, ngrok) para Studeia conseguir chamar. ## n8n self-hosted n8n tem padrao similar a Make/Zapier. Trigger 'Webhook' aceita POST do Studeia. Action 'HTTP Request' chama API Studeia. n8n bonus: pode ser self-hosted (gratis vs Zapier $19+/mes). Para volume alto + dados sensiveis: n8n own-hosted faz mais sentido. ## Roadmap App oficial Zapier (em planning 2026 H2): - Triggers: course_completed, enrollment_created, etc nativos - Actions: Create user, Create enrollment, Update grade, etc - OAuth 2.0 flow (em vez de copy-paste API key) - Sem necessidade de Webhooks by Zapier generic ## Veja tambem - [Automacoes nativas Studeia](/features/automations/overview) - [API publica](/api/overview) ## FAQ **Q: Studeia tem app oficial no Zapier?** Nao ainda (roadmap 2026 H2). Por enquanto: integracao via webhook generic do Zapier + API publica do Studeia. Cobre 95% dos casos de uso — Zapier consegue chamar qualquer REST API. **Q: Como disparar Zapier quando aluno completa curso?** Em Studeia: /institution/automations > New > Trigger: event 'course_completed' > Action: send_webhook para URL Zapier 'Catch Hook'. Body inclui {{user.name}}, {{event.courseId}}, {{event.completedAt}}, etc. Zapier recebe e dispara workflow (criar lead Salesforce, notificar Slack, etc). **Q: Como criar aluno em Studeia via Zapier?** Zapier 'Webhooks by Zapier' > POST > URL: https://[tenant].studeia.com/api/institution/users + Authorization: Bearer mia_... (API key Studeia) + Body JSON { name, email, role, sendInvite }. Studeia API requer scope users:write. **Q: Make e n8n funcionam tambem?** Sim, identico. Make tem modulo 'HTTP request' que faz qualquer chamada REST. n8n tem 'HTTP Request' node + 'Webhook' trigger. Studeia API + webhook funcionam com qualquer ferramenta no-code que suporta REST. --- # [pt-BR] Integracao Zoom (Server-to-Server OAuth + webhook + recording sync) URL: https://docs.studeia.com/integrations/zoom Locale: pt-BR Section: integrations Updated: 2026-05-24 **Short answer:** Zoom integra com Studeia como video provider via Server-to-Server OAuth. Webhook events HMAC SHA-256 capturam meeting lifecycle + recordings. VTT transcript automatico ingerivel no RAG do curso. Credenciais criptografadas AES-256-GCM. Setup ~20min: cria S2S OAuth app no Zoom Marketplace + cola Account ID + Client ID + Secret em Studeia Settings > Video Provider > Zoom. ## Setup detalhado ### 1. Criar Server-to-Server OAuth app 1. https://marketplace.zoom.us > Develop > Build App 2. App Type: **Server-to-Server OAuth** 3. App credentials: copie **Account ID**, **Client ID**, **Client Secret** ### 2. Scopes necessarios - `meeting:read:admin` — listar meetings - `meeting:write:admin` — criar/atualizar/deletar meetings - `recording:read:admin` — acessar gravacoes - `user:read:admin` — info dos hosts ### 3. Event Subscriptions (webhook) 1. App > Feature > Event Subscriptions 2. Subscription URL: `https://[tenant].studeia.com/api/webhooks/video/zoom` 3. Authentication: Webhook secret token (copie pra Studeia) 4. Events a subscribir: - Meeting > Meeting Started - Meeting > Meeting Ended - Meeting > Participant Joined / Left - Recording > Recording Completed - Recording > Recording Transcript Completed ### 4. Configurar em Studeia Settings > Video Provider > Zoom > Add: - Account ID - Client ID - Client Secret - Webhook Secret Token (do passo 3) - Set as default (opcional — usa Zoom para todas LiveClasses sem override) Studeia armazena tudo criptografado AES-256-GCM. ## Como funciona ``` Admin/Professor cria LiveClass no Studeia (videoProvider=zoom) ↓ Studeia ZoomAdapter.createMeeting() → Server-to-Server OAuth token (cached Redis 55min) → POST https://api.zoom.us/v2/users/{userId}/meetings → Retorna meetingId + joinUrl + startUrl + password ↓ Studeia salva em LiveClass.providerMeetingId / providerJoinUrl / providerData ↓ Aluno entra via /live-classes/[id] > clique "Entrar" → joinMethod=external (nova aba) — Zoom NAO suporta iframe (X-Frame-Options) → Abre Zoom app/web ↓ Durante meeting: webhooks notificam Studeia → meeting.started → LiveClass.actualStartTime → participant.joined → LiveClassAttendance → meeting.ended → LiveClass.actualEndTime ↓ Apos meeting termina (~5-30min processamento Zoom): → recording.completed webhook → Studeia atualiza LiveClass.recordingUrl → recording.transcript_completed webhook → Studeia cria LiveClassTranscription com VTT parseado ``` ## Cron fallback Webhooks Zoom sao **unreliable** (delays, subscription expiry, falhas de rede). Studeia roda `/api/cron/recording-sync` a cada 15min: 1. Busca LiveClasses completed > 15min sem recordingUrl 2. Para cada, chama `adapter.getRecordings(meetingId)` via Zoom API 3. Se encontrar, atualiza recordingUrl + cria LiveClassTranscription ## RAG ingestion da transcripcao Apos transcription approved pelo professor: 1. `/institution/courses/[id]/transcriptions/[tid]/approve` 2. Texto da transcripcao virua chunks + embeddings + ContentBlock 3. Metadata: `{ source: "live_class_transcript", liveClassId, courseId }` 4. Tutor IA cita: "Na aula ao vivo do dia X, a professora explicou que..." [Detalhes em RAG Ingestion](/features/ai-tutor/rag-ingestion). ## Troubleshooting ### "401 Unauthorized" ao criar meeting Token expirado. Verificar logs: - Server-to-Server OAuth token cached Redis 55min (renew automatico) - Se persistir: rotacionar Client Secret no Zoom Marketplace + atualizar em Studeia ### Webhook nao chegando 1. Verificar webhook URL acessivel publicamente (curl externo) 2. Validar HMAC SHA-256 signature (Studeia loga warning se mismatch) 3. Zoom retry 3x com backoff — se falhar 3x, webhook event perdido (cron recupera) ### Recording sem VTT VTT so e gerado se Zoom Cloud Recording esta habilitado (nao Local Recording). Verificar User > Settings > Recording > Cloud recording on. ## Custos - Studeia: zero custo adicional (incluido em qualquer plano) - Zoom: cobranca direto do Zoom (licenca por host). Studeia nao revende Zoom. ## Veja tambem - [Aulas ao vivo overview](/features/live-classes/overview) - [RAG Ingestion](/features/ai-tutor/rag-ingestion) - [Integration BigBlueButton](/integrations/bigbluebutton) ## FAQ **Q: Como configurar Zoom no Studeia?** Crie Server-to-Server OAuth app no Zoom Marketplace (scopes: meeting:read, meeting:write, recording:read, user:read). Em Studeia > Settings > Video Provider > Zoom: Account ID + Client ID + Client Secret. Configure webhook em /api/webhooks/video/zoom com HMAC SHA-256 via x-zm-signature. Setup ~20 minutos. **Q: Gravacoes Zoom ficam disponiveis no Studeia?** Sim, automaticamente. Webhook recording.completed notifica + cron /api/cron/recording-sync a cada 15min como fallback. recordingUrl salvo em LiveClass. VTT transcript tambem capturado e armazenado em LiveClassTranscription (status pending → approved → ingested), opcionalmente ingerivel no RAG do curso para o tutor IA citar. **Q: Qual o limite de duracao de meeting Zoom?** Depende do plano Zoom: Free = 40min (1-on-1 ilimitado, group max 40min), Pro = 30h, Business+ = 30h. Para escolas: recomendado Pro ou Business. Studeia nao adiciona limite proprio. **Q: Posso usar Zoom Webinar?** Sim, com licenca Zoom Webinar adicional. Studeia atualmente cria 'meetings' por padrao. Para Webinar (1 host + 1000+ attendees passivos): configurar via Zoom API direto + LTI launch no Studeia. Roadmap: suporte nativo Webinar no Studeia. --- # [pt-BR] Tutor IA Multi-Agente URL: https://docs.studeia.com/platform/ai-tutor Locale: pt-BR Section: platform Updated: 2026-05-23 **Short answer:** O tutor IA do Studeia e um pipeline multi-agente: StudentModel → RetrievalAgent (RAG) → PedagogicalAgent (estrategia) → LLM (com fallback Claude/GPT/Grok/Gemini) → EvaluationAgent + SupervisorAgent (background). Cita material do curso via RAG per-tenant, adapta estrategia pedagogica por dominio conceitual, detecta misconceptions automaticamente e tem moderacao por agente IA dedicado. ## Visao executiva Tutor IA do Studeia nao e ChatGPT em iframe. E um sistema pedagogico construido para EAD: ``` Mensagem do aluno ↓ 1. StudentModelService → carrega ConceptMastery (bayesiano), misconceptions, quiz history ↓ 2. RetrievalAgent → busca RAG tenant-scoped, boost por areas fracas em quizzes ↓ 3. PedagogicalAgent → seleciona estrategia (5 opcoes) baseado em mastery ↓ 4. Orquestrador → monta prompt enriquecido (mastery + misconceptions + RAG context) ↓ 5. LLM (Vercel AI SDK) → streaming, com fallback Claude → GPT → Grok → Gemini ↓ apos resposta (after()) 6. EvaluationAgent → classifica misconceptions (Haiku, $0.001) 7. ContentAgent → pre-gera exercicio follow-up 8. SupervisorAgent → modera (5 niveis severidade, 8 categorias) ``` ## Por que multi-agente vs single LLM call Single call: - Sem memoria do aluno → repete explicacoes ja dadas - Sem awareness de quiz performance → trata aluno fraco igual a forte - Sem moderacao → riscos de jailbreak, off-topic, conteudo inadequado - Sem RAG → inventa fatos sobre o curso Multi-agente: - StudentModel garante personalizacao real - RetrievalAgent garante grounding no material do curso - PedagogicalAgent garante adequacao da estrategia - EvaluationAgent garante feedback loop para o sistema aprender - SupervisorAgent garante seguranca ## Estrategias pedagogicas PedagogicalAgent seleciona uma de 5 estrategias baseado em `mastery` (probabilidade de dominio): | Mastery | Estrategia | Comportamento | |---|---|---| | < 0.3 | direct_instruction | Explicacao clara, exemplos concretos, passo-a-passo | | 0.3-0.5 | scaffolding | Dicas progressivas, perguntas guiadas simples | | 0.5-0.7 | socratic | Perguntas que levam a descoberta | | 0.7-0.9 | guided_practice | Exercicios com feedback, aplicacao pratica | | > 0.9 | challenge | Problemas complexos, conexoes entre conceitos | Thresholds sao configuraveis por admin via `PedagogicalConfig` (tenant-level), com override por dominio. ### Ajuste por quiz performance Se mastery alta (chat) + quiz baixo → "compreensao superficial" → nudge DOWN estrategia. Se mastery baixa + quiz alto → "aluno quieto" → nudge UP. Pass rate < 40% → cap em scaffolding (nao avanca para socratic). ## RAG per-tenant Cada curso pode ser ingerido no RAG do tenant: - `POST /api/institution/courses/[id]/rag-ingest` (modes: full | incremental) - Itera aulas publicadas, extrai texto por tipo (rich_text→HTML strip, slides→elements, quiz→question+explanation, PDF→OCR via document-extractor) - Chunking (800 tokens, 200 overlap, preserva estrutura) - Embeddings via Voyage AI (1024 dims, fallback OpenAI) - Metadata em cada chunk: `{ source: "course_lesson", courseId, lessonId, lessonTitle, moduleTitle, ingestionId }` - `autoSyncRag: true` reingere incrementalmente quando admin edita aulas [Detalhes em RAG Ingestion](/features/ai-tutor/rag-ingestion). ## Moderacao por agente Supervisor SupervisorAgent (Haiku, background) roda apos cada turno do chat: - 5 niveis severidade: low, medium, high, critical, **safety** - 8 categorias: linguagem impropria, violencia, ilegal, sexual, off_topic, harassment, **self_harm**, jailbreak_attempt - 3 strikes (LOW/MEDIUM em 7 dias) → quarentena 48h - safety NUNCA pune — mostra acolhimento + recursos crise + notifica admin URGENT - Custo: ~$0.001/turno (Haiku via generateDirect) - Habilitacao cascateada: Course.supervisorEnabled → Tenant.supervisorEnabled → default ON [Detalhes em Agente Supervisor](/features/ai-tutor/safety-supervisor). ## Multi-provider IA Todos os 7 agentes IA do Studeia respeitam `TenantTaskModelConfig`: | Agente | Metodo router | Provider configuravel? | |---|---|---| | Tutor (chat streaming) | `router.stream()` | Sim | | Orchestrator | TypeScript puro | N/A | | RetrievalAgent | TypeScript puro | N/A | | PedagogicalAgent | TypeScript puro | N/A | | EvaluationAgent | `router.generateDirect()` | Sim | | ContentAgent | `router.generateDirect()` | Sim | | SessionSummarizer | `router.generateDirect()` | Sim | | CourseReviewAgent | `router.generate()` | Sim | | CourseAgent (CMS) | `router.generate()` + tools | Sim | | GamificationAgent | `router.generate()` + tools | Sim | | SupervisorAgent | `router.generateDirect()` | Sim | Fallback chain por tier: ``` LLM rapido (Haiku): Claude Haiku → GPT-4o-mini → Grok-3-mini → Gemini Flash LLM medio (Sonnet): Claude Sonnet → GPT-4o → Grok-3-fast → Gemini Pro LLM complexo (Opus): Claude Opus → GPT-4.5 → Grok-3 → Gemini 2.5 Pro ``` Circuit breaker por provider (estado em Redis): se falhar 5x em 30s, pula para fallback ate 60s. ## Limitacoes - Tutor nao tem **voz** (text-to-speech) por padrao. Roadmap. - Tutor nao gera **video** ou **avatar real-time**. Roadmap (HeyGen/D-ID). - RAG e por **curso**, nao por instituicao inteira. Cada curso ingere separadamente. - Misconceptions resolvidos podem regredir (re-detectados) — isso e esperado, o sistema marca regression na evidence. ## Veja tambem - [Tutor IA detalhes](/features/ai-tutor/overview) - [RAG Ingestion](/features/ai-tutor/rag-ingestion) - [Agente Supervisor](/features/ai-tutor/safety-supervisor) - [Comparativo vs Khan AI tutor](/comparisons/studeia-vs-google-classroom) ## FAQ **Q: O Studeia tem chat com IA?** Sim. Studeia oferece um tutor IA conversacional multi-agente. Diferente de um wrapper de ChatGPT, e um pipeline com 6 agentes (orchestrator, retrieval, pedagogical, evaluation, content, supervisor) que adapta a resposta baseado no dominio do aluno em cada conceito, cita material do curso via RAG per-tenant, detecta misconceptions e ajusta estrategia pedagogica (direct instruction, scaffolding, socratic, guided practice, challenge). **Q: Posso trocar Claude por GPT, Grok ou Gemini?** Sim. Admin institucional configura TenantTaskModelConfig por tipo de tarefa. Todos os 7 agentes IA respeitam essa config — fallback automatico entre providers se um cair (Claude → OpenAI → xAI Grok → Google Gemini). Tool calling funciona com qualquer provider via Vercel AI SDK. **Q: O tutor tem acesso ao material da minha instituicao?** Sim, via RAG per-tenant isolado. Cada curso pode ser 'ingerido' no RAG: o sistema extrai texto de aulas (slides, video transcripts, PDFs, quizzes, rich text), chunka, gera embeddings via Voyage AI (1024 dims) e armazena com filtro por tenantId+courseId. Quando o aluno pergunta algo, o tutor busca apenas no material do tenant. Nunca cita conteudo de outras instituicoes. **Q: Quanto custa por aluno por mes?** Depende do uso. Tipicamente R$2-8/aluno/mes em IA (registrado em AiUsageLog). Admin ve breakdown em Settings > IA. Mensagens curtas em Haiku (~$0.001), conversas longas em Sonnet (~$0.01-0.05). Tenant pode usar proprias chaves Anthropic/OpenAI para reduzir custo + remover margem Studeia. **Q: O tutor IA do Studeia e seguro para menores?** Sim. Tres camadas: (1) User.isMinor=true ativa filtros de conteudo + reforco no system prompt. (2) Agente Supervisor monitora cada turno em background, classifica em 5 niveis (low/medium/high/critical/safety) e 8 categorias, com 3 strikes = quarentena 48h. (3) Self-harm (severity=safety) NUNCA pune o aluno — em vez disso, mostra mensagem de acolhimento + recursos de crise (CVV 188, SAMU 192) e notifica admin URGENTE. **Q: O tutor detecta erros conceituais?** Sim. EvaluationAgent (Haiku, background, ~$0.001) classifica respostas e detecta StudentMisconception com rastreabilidade completa (source, sourceSessionId, lessonId, questionText, contextSnippet, concepts[]). Misconceptions tem lifecycle de 3 estados: active → resolving → resolved (state machine com regras de transicao por mastery update, quiz pass, tutor address). O proprio tutor e consciente dos misconceptions ativos e os aborda proativamente. --- # [pt-BR] Multi-tenancy e isolamento de dados URL: https://docs.studeia.com/platform/multi-tenancy Locale: pt-BR Section: platform Updated: 2026-05-23 **Short answer:** Multi-tenancy no Studeia significa que cada instituicao (Tenant) tem dados completamente isolados em nivel de banco. Filtro obrigatorio por tenantId em todas as queries Prisma, RLS Supabase como safety net, per-tenant API keys, configuracao de IA independente (pode usar proprias chaves Anthropic/OpenAI) e white-label total (dominio, branding, tema, email). ## Modelo conceitual ``` Tenant (Instituicao) ├── Users (alunos, professores, coordenadores, admin institucional) ├── Courses → Modules → Lessons ├── ClassGroups (turmas) ├── MediaAssets (biblioteca de midia) ├── Automations ├── EmailTemplates ├── VideoProviderConfig (BBB/Zoom/Teams/Meet) ├── TenantApiKey (chaves proprias de IA) ├── TenantSubscription (billing) ├── ...todas as outras entidades ``` Usuarios sem tenantId sao B2C (plataforma direta). Usuarios com tenantId pertencem a uma instituicao. ## Isolamento de dados — 3 camadas ### Camada 1: Filtro obrigatorio em queries Toda query Prisma em codigo de aplicacao filtra por `tenantId`: ```ts const { tenantId } = requireTenant(user); const courses = await prisma.course.findMany({ where: { tenantId }, // OBRIGATORIO }); ``` `requireTenant()` em `apps/web/lib/tenant.ts` retorna NextResponse 403 se o usuario nao tem tenant. Sem essa chamada, e impossivel acessar dados B2B. ### Camada 2: RLS no Supabase Como safety net contra bugs, policies RLS no Supabase reforcam isolamento ate em queries diretas. Se um codigo esquecer o filtro `tenantId`, o banco recusa. ### Camada 3: Auditoria de admin global Quando um admin global precisa acessar dados de um tenant (suporte, debug), ele usa **impersonacao** via cookie HMAC com: - TTL fixo de 1h (nao prorrogavel) - Assinatura HMAC-SHA256 com `IMPERSONATION_SECRET` - Auditoria em `AdminAuditLog` (acao `impersonate.start`, IP, user-agent) - `getUserProfile()` retorna `isImpersonating: true` + overlay em memoria - Supabase auth NUNCA modificado (apenas overlay) - Banner sticky no /institution/ alerta o admin durante a sessao [Detalhes em painel admin SaaS](/features/admin-saas/impersonation). ## Per-tenant API keys Por padrao, todas as chamadas LLM usam chaves globais (`ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, etc) do Studeia. Custos vao para o tenant via metering. Mas instituicoes que ja tem contas Anthropic/OpenAI/Google podem usar **proprias chaves** (`TenantApiKey`, criptografada AES-256-GCM no banco): 1. Custos vao DIRETO para a conta do tenant na Anthropic/OpenAI 2. Studeia nao cobra margem de IA — apenas a assinatura mensal 3. Resolucao automatica: `TenantApiKey` → `ProviderApiKey` global → `process.env` (cascata em `apps/web/lib/api-key-resolver.ts`) NUNCA seta `process.env` em runtime (conflitaria entre tenants) — passa a key via options do SDK. ## White-label completo Cada tenant pode personalizar: | Aspecto | Como | |---|---| | Logo, favicon | Upload no settings | | Cores (primary, accent, background) | Editor com preview | | Fonte (Google Fonts) | Dropdown | | Tema visual (de 9 opcoes) | Toggle por usuario ou padrao do tenant | | Custom CSS | Sanitizado, max 10KB | | Dominio customizado | DNS CNAME + TLS automatico Traefik | | Logo no email | Por template | | Sender email (SMTP/Resend/SendGrid) | TenantEmailConfig | | Esconder marca Studeia | Sim (plano enterprise) | ## Roles e permissoes | Role | Escopo | Pode fazer | |---|---|---| | `student` | Proprio progresso | Chat tutor, cursos, simulados, gamificacao | | `parent` | Filhos vinculados | Ver progresso, alertas, relatorios | | `teacher` | Proprias turmas/cursos | Criar cursos, upload material, ver alunos das turmas | | `coordinator` | Todas turmas do tenant | Gerenciar turmas, ver todos os alunos | | `pedagogue` | Todos alunos do tenant | Orientacao educacional, relatorios | | `institution_admin` | Todo o tenant | Config IA, API keys, white-label, usuarios | | `admin` | Global (plataforma) | Tudo + gerenciar tenants | ## Limites por plano Limites enforceados via `checkTenantResourceLimit(tenantId, resource)` em [apps/web/lib/plan-limits.ts](https://github.com/donattocosta-lang/studeia): | Plano | Alunos max | Professores | Cursos | IA | |---|---|---|---|---| | Demo | 1 | 1 | 1 | Haiku only, 10 msgs/dia | | Mini | 10 | Ilimitado | Ilimitado | Todos providers | | Crescimento | 50 | Ilimitado | Ilimitado | Todos providers | | Escala | 100 | Ilimitado | Ilimitado | Todos providers | | Enterprise | Custom (`maxStudentsOverride`) | Ilimitado | Ilimitado | Todos providers | 7 pontos de enforcement (todos auditados em 2026-04-11): 1. `POST /api/courses/[courseId]/enroll` — self-enroll do aluno 2. `POST /api/institution/courses/[id]/clone` — clone de curso 3. `POST /api/institution/courses/import` — import IMS CC 4. `executeEnrollUser()` em automacao 5. `POST /api/scim/v2/Users` — provisionamento SCIM 6. `POST /api/institution/users` — vincular usuario existente 7. `PATCH /api/institution/users/[id]` — promover role ## Como solicitar override enterprise Tenants enterprise podem ter `Tenant.maxStudentsOverride: Int?` ajustado pelo admin global. Sem override (`null`), enterprise = ilimitado. Contato comercial via [suporte@studeia.com](mailto:suporte@studeia.com). ## Limitacoes - Um User pertence a UM tenant. Para professores que atendem multiplas escolas, criar usuarios separados. - Compartilhamento de cursos entre tenants nao e nativo (cada tenant tem seu CMS isolado). Roadmap: marketplace de cursos com licenciamento. - Migracao de tenant para outro plano e instantanea, mas downgrade que viola limites atuais e bloqueado ate o tenant ajustar os recursos. ## Veja tambem - [White-label](/platform/white-label) - [SSO Enterprise](/platform/sso-enterprise) - [Comparativo: Studeia vs Moodle](/comparisons/studeia-vs-moodle) ## FAQ **Q: Dados de tenants estao realmente isolados?** Sim. Tres camadas: (1) toda query Prisma filtra por tenantId obrigatoriamente (regra critica 30 do projeto); (2) RLS policies no Supabase como safety net; (3) auditoria automatizada de queries cross-tenant via testes. Impersonacao de admin global e auditada (AdminAuditLog) e usa cookie HMAC com TTL fixo de 1h. **Q: Posso ter dominio proprio (white-label completo)?** Sim. Configure Tenant.customDomain no settings + aponte CNAME para o dominio Studeia. TLS automatico via Let's Encrypt no Traefik. Logo, favicon, cores, fontes, 9 temas visuais e ate mensagens de email customizaveis. Pode remover a marca Studeia totalmente. **Q: Custos de IA sao por tenant?** Sim. Cada chamada LLM e logada em AiUsageLog com tenantId. Admin global ve breakdown de custo por tenant em /admin/finance/ai-cost (com calculo de margem vs MRR). Tenants podem usar proprias chaves de API (TenantApiKey) — nesse caso custos vao para o tenant, nao para Studeia. **Q: Como sao gerenciados usuarios cross-tenant?** Por design, um User pertence a UM tenant (User.tenantId). Para casos B2B onde um pedagogo atende multiplas escolas, recomendamos criar usuarios separados por instituicao. Admin global pode reassign usuarios via /admin/tenants (auditado). --- # [pt-BR] Visao geral da plataforma Studeia URL: https://docs.studeia.com/platform/overview Locale: pt-BR Section: platform Updated: 2026-05-23 **Short answer:** Studeia e uma plataforma EAD (educacao a distancia) B2B brasileira white-label para escolas, universidades, cursinhos e treinamento corporativo. Combina CMS de cursos, tutor IA multi-provider com fallback automatico, gamificacao nativa, aulas ao vivo (BBB/Zoom/Teams/Meet), gradebook avancado, SSO Enterprise (SAML/OIDC/SCIM) e API publica em uma unica plataforma SaaS hospedada no Brasil. ## Para quem e Studeia atende quatro perfis de instituicao: | Vertical | Caso tipico | Recursos prioritarios | |---|---|---| | **Escolas K-12** | Fundamental e medio, BNCC alignment, portal de pais | Portal pais com narrativa IA, gamificacao, monitoramento de menores, LGPD | | **Cursinhos ENEM/vestibular** | Simulados ao vivo, tutor IA personalizado, analytics | Quiz analytics psicometricas, IA tutor com RAG do material, simulados | | **Universidades** | Cursos hibridos, LTI com Canvas/Moodle existente, gradebook | LTI 1.3 (tool provider), rubricas multi-criterio, AGS grade passback | | **Treinamento corporativo** | T&D, compliance, SSO com Okta/Azure AD | SAML/OIDC, SCIM 2.0, certificados verificaveis (OB 3.0), API publica | ## Arquitetura em uma frase Next.js 15 (App Router) + PostgreSQL (Supabase) + Redis + Prisma 7 + LLM Router multi-provider (Claude → GPT → Grok → Gemini fallback) + Voyage AI embeddings (RAG) + Stripe/Asaas billing, deployado em Docker via Traefik com Let's Encrypt. ## Recursos principais ### 1. Multi-tenancy real com white-label completo Cada instituicao (Tenant) tem isolamento de dados em nivel de banco (filtro `tenantId` em todas as queries + RLS no Supabase). White-label cobre: - Cores, logo, favicon, fonte - Dominio custom (com TLS automatico via Let's Encrypt) - 9 temas visuais (6 dark glass + 3 light solid/material) - Email institucional com templates branded - Pode ate desabilitar a marca Studeia totalmente [Detalhes em Multi-tenancy](/platform/multi-tenancy) e [White-label](/platform/white-label). ### 2. Tutor IA multi-agente com RAG per-tenant O tutor IA do Studeia nao e um wrapper de ChatGPT. E um pipeline multi-agente: ``` Mensagem do aluno ↓ StudentModelService → carrega ConceptMastery + misconceptions + quiz performance ↓ RetrievalAgent → busca RAG tenant-scoped, boost por areas fracas em quizzes ↓ PedagogicalAgent → seleciona estrategia (direct_instruction, scaffolding, socratic, guided_practice, challenge) baseado em mastery ↓ Orquestrador → monta prompt enriquecido ↓ LLM (Claude → GPT → Grok → Gemini fallback) → streaming ↓ apos resposta EvaluationAgent → classifica misconceptions (Haiku, ~$0.001) ContentAgent → pre-gera exercicio follow-up SupervisorAgent → modera (background, ~$0.001) ``` Conteudo do curso e ingerido via RAG per-tenant — o tutor cita o material correto da instituicao, nao conteudo generico. [Detalhes em Tutor IA Overview](/features/ai-tutor/overview). ### 3. CMS educacional com 8 tipos de aula + 6 subtypes interativos Tipos de aula: slides, video, PDF, rich_text, quiz, assignment, live_class, external_link. Subtypes interativos: interactive_video (com checkpoints), drag_drop, fill_blanks, flashcard_set (com SRS algoritmo SM-2), timeline, branching_scenario (arvore de decisao). Auto-geracao de curso: faca upload de PDF/DOCX/PPTX, pipeline LLM extrai topicos e gera modulos com aulas estruturadas. [Detalhes em CMS](/features/cms/courses-modules-lessons). ### 4. Quiz engine com analytics psicometricas Cronbach's alpha (consistencia interna), point-biserial discrimination, item difficulty, distractor analysis MC/TF, score distribution. Integridade academica: detecta tab switch, time anomalies, exibe flags no gradebook. Suporte a question bank reusavel com 8+ tipos de questao. ### 5. Aulas ao vivo multi-provider BigBlueButton (padrao, iframe embed), Zoom (Server-to-Server OAuth), Microsoft Teams (Graph API), Google Meet (OAuth + Calendar). Adapter pattern unificado. Webhooks lifecycle + cron de recording sync (fallback). Credenciais armazenadas com AES-256-GCM. ### 6. Gamificacao nativa completa XP, niveis (config hierarquica tenant→curso), 11 criterios de badge com logica AND/OR booleana, badges OB 3.0 (Open Badges 3.0 — W3C Verifiable Credential), leaderboards Redis ZSET (escopo curso/turma, janelas weekly/monthly/alltime), contests com 7 metricas, rewards shop com moedas virtuais, e agente IA dedicado para admin criar estrategia de gamificacao via chat. ### 7. Comunicacao integrada Forums (por turma ou course-wide), anuncios (com escopo de turma e notificacoes auto), mensagens privadas (DMs), notificacoes in-app real-time, anexos em qualquer canal (forum/anuncio/mensagem), email institucional com templates Handlebars em 4 idiomas, 3 providers (SMTP/Resend/SendGrid). ### 8. SSO Enterprise + SCIM 2.0 SAML 2.0 (via node-saml), OIDC com PKCE, SCIM 2.0 (14 endpoints RFC 7644), JIT provisioning, group→course mapping (matricula automatica), audit log SCIM. Plano enterprise. ### 9. LTI 1.3 (tool provider) Studeia pode ser registrado como external tool em Canvas, Blackboard, Moodle ou qualquer LMS LTI 1.3-compliant. OIDC launch, JWT/JWKS, AGS grade passback (notas sincronizam de volta automaticamente). [Detalhes em integracoes LTI](/integrations/canvas-lti). ### 10. Automacoes (mini-n8n built-in) Engine Gatilho → Condicao → Acao. 14+ triggers (lesson_completed, quiz_submitted, enrollment_created, forum_post_created, scheduled_trigger, webhook_received, etc), 8 actions (notify, tag, announce, webhook, enroll, etc). SSRF prevention, rate limiting, chain depth limit 5. Webhook publico autenticado por token. [Detalhes em Automacoes](/features/automations/overview). ### 11. Mobile B2B (React Native/Expo) App Android publicado. 22 endpoints `/api/mobile/*` com shape simplificado. White-label dinamico pos-login. Push notifications via Expo. SSO via deep linking (`studeia://auth/callback`). OTA updates via expo-updates. ### 12. LGPD compliance nativo `GET /api/user/data-export` (Art. 18 IV, rate limit 1/24h). `DELETE /api/user/account` (Art. 18 VI, anonimiza PII, mantem learning data por 5 anos retencao fiscal). Privacy/Terms publicas em 4 idiomas. DPA disponivel para enterprise. ### 13. API publica com 64+ endpoints Dual auth (session + Bearer API key). Scopes granulares (`courses:read`, `users:write`, etc — 32 tipos). Rate limiting Redis (3 tiers). Docs em [/api/overview](/api/overview). ## Modelo de cobranca 5 planos B2B: | Plano | Preco/mes | Alunos | Para quem | |---|---|---|---| | Demo | Gratis | 1 | Avaliar a plataforma (Haiku only, 10 msgs/dia) | | Mini | R$250 | 10 | Tutor particular, escola pequena | | Crescimento | R$1.000 | 50 | Cursinho pequeno, treinamento corporativo | | Escala | R$1.500 | 100 | Cursinho medio, escola | | Enterprise | Sob consulta | Custom (`maxStudentsOverride`) | Universidade, T&D corporativo grande | Custo adicional de IA: tipicamente R$2-8/aluno/mes dependendo do uso (tracking via `AiUsageLog` por tenant). Admin pode trocar de provider (Claude → GPT → Grok → Gemini) sem quebrar nenhuma feature. ## Stack tecnica resumida - **Runtime**: Next.js 15 App Router, React Server Components, TypeScript strict mode - **Banco**: PostgreSQL (Supabase) + pgvector (RAG, 1024 dims) - **ORM**: Prisma 7 com adapter-pg - **Cache/Queue**: Redis 7 + BullMQ - **LLM**: Claude (primary) → OpenAI → xAI Grok → Google Gemini (fallback chain por tier) - **Embeddings**: Voyage AI (primary, 1024 dims) → OpenAI (fallback) - **Auth**: Supabase Auth com SSR - **Storage**: Supabase Storage (publico para midia, privado para submissions) - **Email**: SMTP/Resend/SendGrid (factory pattern) - **Video live**: BBB/Zoom/Teams/Google Meet (adapter pattern) - **Billing**: Stripe + Asaas (PIX) - **Mobile**: Expo SDK 52 + NativeWind + Supabase + TanStack Query - **Deploy**: Docker + Traefik v3.2 + Let's Encrypt em VPS proprio - **Observabilidade**: Sentry (10% session replay, 100% on error) ## Conformidade e seguranca - LGPD nativo (data export, account deletion, DPA enterprise) - WCAG 2.1 AA (skip-to-content, focus-visible, high-contrast, A11y toolbar, keyboard nav) - Open Badges 3.0 (W3C Verifiable Credentials) - LTI 1.3 (1EdTech certified-compatible) - SCIM 2.0 (RFC 7644) - AES-256-GCM em credenciais OAuth + API keys - HMAC-SHA256 em OAuth state + cookies de impersonacao - Rate limiting Redis em todas as superficies LLM - 100 testes unit/integration passando (45 core + 55 web) ## Limitacoes conhecidas Para ser honesto sobre trade-offs: - **iOS app**: ainda em roadmap (requer conta Apple Developer Program $99/ano) - **Avatar real-time** (HeyGen/D-ID WebRTC): nao implementado - **Video-aulas pre-geradas via IA** (Synthesia): nao implementado - **Plugins de terceiros**: Studeia nao tem ecossistema de plugins como Moodle. Personalizacao via API publica. - **On-premise**: Studeia e SaaS-only. Para regulacoes que exigem hospedagem on-premise, ainda nao atendemos. ## Veja tambem - [Multi-tenancy](/platform/multi-tenancy) - [Tutor IA](/platform/ai-tutor) - [Comparativo: Studeia vs Moodle](/comparisons/studeia-vs-moodle) - [Caso de uso: Cursinho ENEM](/use-cases/enem-prep-cursinho) - [Glossario EAD](/glossary) ## FAQ **Q: O que diferencia Studeia de Moodle e Canvas?** Studeia e multi-provider em IA por padrao (Claude, GPT, Grok, Gemini com fallback automatico), com tutor IA multi-agente nativo que ingere o material do curso via RAG per-tenant. Moodle exige plugins para IA; Canvas tem integracoes limitadas. Studeia tambem nasce com SSO/SCIM enterprise, gamificacao nativa (XP, badges OB 3.0, leaderboards Redis, contests, shop), gradebook com analytics psicometricas (Cronbach alpha, point-biserial) e moderacao de chat IA com supervisor automatico — tudo built-in, sem plugins de terceiros. **Q: Studeia substitui Moodle ou Canvas?** Para instituicoes brasileiras (escolas, cursinhos, universidades, treinamento corporativo) que querem suporte em portugues, PIX/Asaas integrados, LGPD nativo, custo previsivel em BRL e IA de ponta, sim. Para instituicoes em ecossistema Canvas estabelecido (campus universitario americano), Studeia pode ser usado como LTI tool complementar. **Q: Qual o modelo de cobranca?** 5 planos B2B: Demo (gratis, 1 aluno), Mini (R$250/mes, 10 alunos), Crescimento (R$1.000/mes, 50 alunos), Escala (R$1.500/mes, 100 alunos), Enterprise (sob consulta, limite customizavel via maxStudentsOverride). Custo de IA por aluno tipicamente entre R$2-8/mes dependendo do uso. **Q: Que idiomas a plataforma suporta?** 4 idiomas com paridade completa: Portugues (pt-BR), Ingles (en-US), Espanhol (es-ES) e Frances (fr-FR). ~3.323 chaves traduzidas, 100+ rotas de API localizadas, prompts de LLM por idioma, formatacao de datas locale-aware. **Q: Studeia funciona em mobile?** Sim. App nativo B2B em React Native/Expo SDK 52 publicado para Android. iOS no roadmap (requer conta Apple Developer). Funcionalidades cobertas: dashboard, cursos, aulas, chat tutor IA (com streaming SSE), notas, aulas ao vivo, calendario, mensagens, gamificacao, perfil, push notifications e SSO via deep linking. --- # [pt-BR] SSO Enterprise: SAML, OIDC e SCIM 2.0 URL: https://docs.studeia.com/platform/sso-enterprise Locale: pt-BR Section: platform Updated: 2026-05-23 **Short answer:** Plano Enterprise do Studeia suporta SAML 2.0 (via node-saml), OIDC com PKCE e SCIM 2.0 (14 endpoints RFC 7644). JIT provisioning cria usuarios no primeiro login, group-to-course mapping auto-matricula alunos em cursos quando IdP adiciona ao grupo, bearer token SCIM criptografado AES-256-GCM, todos os eventos auditados em ScimAuditLog. Integra com Okta, Azure AD, Google Workspace e qualquer IdP padrao. ## Pre-requisitos - Plano Enterprise (verificado em rota `/api/auth/sso/[tenantSlug]` — outros planos retornam 403) - Dominio configurado (white-label opcional mas recomendado) - Acesso admin ao IdP (Okta, Azure AD, Google Workspace, Ping, OneLogin, etc) ## SAML 2.0 ### Configuracao ``` Settings > SSO > Add Provider > SAML ``` Campos: - **Display name** — nome mostrado no botao "Sign in with..." - **Metadata XML URL** OU **Metadata XML colado** — fornecido pelo IdP - **SP-initiated** ou **IdP-initiated** — Studeia suporta ambos - **Allowed domains** — restringe emails (anti-shadow accounts) ### Endpoints expostos - **ACS (Assertion Consumer Service)**: `/api/auth/sso/[tenantSlug]/saml/callback` - **SP metadata**: `/api/institution/sso/metadata` ### Validacao SAML Response validado via [node-saml](https://www.npmjs.com/package/node-saml): - XML signature verification (anti-tampering) - SAML XML namespace validation (anti-XXE) - NotBefore/NotOnOrAfter checks - Audience restriction ## OIDC ### Configuracao ``` Settings > SSO > Add Provider > OIDC ``` Campos: - **Discovery URL** — `https://idp.com/.well-known/openid-configuration` (auto-fetch) - **Client ID** + **Client Secret** (criptografado AES-256-GCM) - **Scopes** — default: `openid profile email` - **PKCE** — sempre on (S256 challenge method) ### Fluxo 1. Aluno clica "Sign in with [IdP]" → `/api/auth/sso/[tenantSlug]/oidc` 2. Redirect para IdP com PKCE challenge + state HMAC-assinado + nonce em Redis (TTL 15min anti-replay) 3. IdP autentica → callback `/api/auth/sso/[tenantSlug]/oidc/callback` 4. Studeia valida state + nonce, troca code por tokens (PKCE verifier) 5. Userinfo endpoint → JIT provisioning (cria User se nao existe) → Supabase session ## SCIM 2.0 ### 14 endpoints RFC 7644 ``` GET /api/scim/v2/ServiceProviderConfig GET /api/scim/v2/ResourceTypes GET /api/scim/v2/Schemas GET /api/scim/v2/Users (list, com filter) POST /api/scim/v2/Users (create) GET /api/scim/v2/Users/{id} PUT /api/scim/v2/Users/{id} (replace full) PATCH /api/scim/v2/Users/{id} (partial — Microsoft Graph compat) DELETE /api/scim/v2/Users/{id} (soft-delete: User.status=suspended) GET /api/scim/v2/Groups (list) POST /api/scim/v2/Groups GET /api/scim/v2/Groups/{id} PUT /api/scim/v2/Groups/{id} PATCH /api/scim/v2/Groups/{id} DELETE /api/scim/v2/Groups/{id} ``` ### Configuracao no Azure AD (exemplo) 1. Azure Portal > Enterprise Applications > Studeia > Provisioning 2. Provisioning Mode: **Automatic** 3. Tenant URL: `https://seuapp.studeia.com/api/scim/v2` 4. Secret Token: gerado no Studeia em Settings > SSO > SCIM Token (Bearer, criptografado no banco) 5. Test Connection 6. Mappings: atributos padrao (Microsoft Graph compativel) 7. Settings > Scope: "Sync only assigned users and groups" 8. Start provisioning ### Group → Course mapping Permite auto-matricula quando IdP adiciona usuario a grupo: 1. Configure mapping em Settings > SSO > Groups 2. Para cada SsoGroup, escolha Course alvo 3. Quando SCIM adiciona membro ao grupo → Studeia cria Enrollment ativa no curso 4. Quando remove → cancela matricula (status=cancelled) 5. Grupos grandes (>50 membros): processamento via BullMQ (`scim-group-sync` queue), Response 202 + jobId ## Seguranca ### Tokens - SCIM Bearer token: criptografado AES-256-GCM em `TenantSsoConfig.scimToken` — NUNCA plain text - OAuth tokens (Google Workspace integration): mesmo padrao - State OAuth: HMAC-SHA256 com `OAUTH_STATE_SECRET` + nonce Redis (TTL 15min) ### JIT provisioning - `allowedDomains` valida email antes de criar usuario - Atributos do IdP mapeados via `SsoAttributeMapping` - Role default configurable (`student` ou `teacher`) ### Auditoria `ScimAuditLog` registra: - Toda operacao SCIM (Create/Update/Delete) com timestamp + IP + actor (IdP) + user/group affected + payload (redacted) - AdminAuditLog para mudancas em SsoConfig por admin institucional ## Limitacoes - **LDAP** direct (sem SAML/OIDC) nao suportado nativamente — roadmap - **Just-in-time deprovisioning** via SAML SLO (Single Logout) parcial — recomenda-se usar SCIM para deprovisionamento confiavel - **Multi-factor authentication** delegado ao IdP (Studeia nao gerencia MFA proprio quando SSO ativo) - **Group nesting** (grupos dentro de grupos) suportado parcialmente — recomenda-se flatten no IdP ## Veja tambem - [Multi-tenancy](/platform/multi-tenancy) - [API publica](/api/overview) ## FAQ **Q: Studeia suporta SSO com Okta?** Sim, via SAML 2.0 ou OIDC. Configure em Settings > SSO > Add Provider, escolha SAML ou OIDC, cole metadata XML (SAML) ou discovery URL (OIDC). JIT provisioning cria usuarios automaticamente no primeiro login. **Q: Que protocolos SSO Studeia suporta?** SAML 2.0 (via node-saml, valida XML signature, suporte a SP-initiated e IdP-initiated), OIDC com Authorization Code + PKCE + discovery automatica, SCIM 2.0 para provisionamento (RFC 7644 — Users + Groups + ServiceProviderConfig endpoints). **Q: SCIM 2.0 funciona com Azure AD?** Sim. Studeia expoe /api/scim/v2/Users + /api/scim/v2/Groups com Bearer token auth. Configure no Azure AD Enterprise Application > Provisioning > Provisioning Mode: Automatic > Tenant URL: https://seuapp.studeia.com/api/scim/v2 > Secret Token: gerado no Studeia. Suporta CRUD, soft-delete (User.status=suspended), bulk operations. **Q: Group-to-course mapping automatico funciona?** Sim. SsoGroup pode ser mapeado para Course via SsoGroupCourseMapping. Quando IdP adiciona usuario ao grupo, Studeia auto-matricula no curso. Quando remove, cancela matricula. Grupos grandes (>50 membros) sao processados via BullMQ (jobId retornado). **Q: Qual o tempo medio de setup SSO?** 30-45 minutos para SAML/OIDC + 1-2 horas para SCIM provisioning completo. Documentado passo-a-passo por IdP em /integrations/ (Okta, Azure AD, Google Workspace). --- # [pt-BR] White-label: personalizacao total de marca URL: https://docs.studeia.com/platform/white-label Locale: pt-BR Section: platform Updated: 2026-05-23 **Short answer:** White-label no Studeia cobre dominio proprio (com TLS automatico via Let's Encrypt), logo, cores, fonte, 9 temas visuais, emails do seu sender, custom CSS sanitizado e ocultacao completa da marca Studeia no plano Enterprise. Tudo configuravel no painel admin, sem precisar de codigo. ## O que e personalizavel | Aspecto | Como configurar | Plano necessario | |---|---|---| | Logo + favicon | Upload em Settings | Mini+ | | Cores (primary, accent, bg) | Color picker | Mini+ | | Fonte (Google Fonts) | Dropdown | Mini+ | | Tema visual padrao | Toggle no Settings | Mini+ | | Permitir usuario trocar tema | Toggle no Settings | Mini+ | | Custom CSS | Editor com sanitizacao | Mini+ | | Dominio customizado | DNS CNAME + Settings | Mini+ | | Email sender + templates | TenantEmailConfig | Mini+ | | Esconder marca Studeia | Toggle no Settings | Enterprise | | Whitelabel mobile app | Build dedicado EAS | Enterprise | ## Configurando dominio custom ### 1. DNS No seu provedor (Registro.br, Cloudflare, Route 53, etc): ``` escola.com.br → IP da Studeia (instrucao no painel) www.escola.com.br → CNAME → studeia.com ``` Ou para subdominio (recomendado): ``` ead.escola.com.br → CNAME → studeia.com ``` ### 2. Painel Studeia Settings > Dominio Customizado > Adicionar dominio > Validar. Traefik detecta o dominio via Docker labels e gera certificado Let's Encrypt em ~2 minutos. ### 3. Verificacao ```bash curl -I https://ead.escola.com.br # HTTP/2 200 # server: nginx (Traefik) # strict-transport-security: max-age=63072000 ``` ## Temas visuais — 9 opcoes ### Dark (glass mode) 1. **Ocean Glass** (padrao) — azul oceano profundo 2. **Midnight Purple** — roxo/violeta noturno 3. **Forest Emerald** — verde esmeralda 4. **Sunset Amber** — ambar/coral quente 5. **Cyberpunk Neon** — neon verde/rosa 6. **Rose Gold** — rosa dourado elegante ### Light (solid/material mode) 7. **Minimal Light** — clean, neutro 8. **Corporate Slate** — profissional, sombras suaves 9. **Arctic Frost** — glass claro (fundo cinza-azulado) Cada tema define: paleta de 4 cores, fonte (Outfit, Playfair Display ou system), layout mode (glass/solid/material), background type (image/solid/gradient). [Detalhes em design-system](/features/design-system/overview-9-themes). ## Custom CSS Para customizacoes alem dos temas, admin pode adicionar CSS proprio: - Field em Settings > Tema > Custom CSS - Sanitizado (max 10KB) - Bloqueia `@import`, `url(http...)`, `expression()` (anti-XSS) - Aplicado em todas as paginas do tenant ## Esconder marca Studeia (Enterprise) Plano Enterprise permite remover: - "Powered by Studeia" no rodape - Mensagens "Studeia" em emails default (substituidas pelo nome do tenant) - Favicon Studeia (substituido pelo seu) - Login page rebranded com seu logo + cores Solicitar via [suporte@studeia.com](mailto:suporte@studeia.com). ## White-label mobile Por padrao, o app Studeia mobile (Android/iOS roadmap) faz request a `/api/mobile/tenant-branding` pos-login e aplica: - Logo do tenant - Cores do tema - Nome de exibicao - Recursos habilitados/desabilitados (feature flags) Para plano Enterprise, e possivel gerar **build dedicado** com: - Bundle ID proprio (br.com.escola.app) - Logo + nome no launcher - Splash screen custom - Publicado nas lojas pelo seu Apple Developer Account + Google Play Console ## Veja tambem - [Multi-tenancy](/platform/multi-tenancy) - [Email templates](/features/email/templates) ## FAQ **Q: Studeia e realmente white-label completo?** Sim. Plano Enterprise permite remover totalmente a marca Studeia: dominio proprio (studeia.escola.com.br), logo customizado, cores institucionais, fonte da marca, emails de sender pelo proprio dominio, customizacao do tema visual com CSS proprio. Plano Mini/Crescimento/Escala mantem rodape discreto 'Powered by Studeia'. **Q: Como configurar dominio proprio?** 1) Configure CNAME no seu DNS apontando subdominio para studeia.com. 2) No painel admin, va em Settings > Dominio Customizado e adicione o dominio. 3) Traefik gera certificado Let's Encrypt automaticamente (~2 min). Sem custos adicionais de TLS. **Q: Posso enviar emails do meu proprio dominio?** Sim. Configure TenantEmailConfig com seu SMTP, Resend ou SendGrid. Sender personalizado, templates branded com seu logo, suporte a unsubscribe e digest preferences por usuario. 40 templates default em 4 idiomas (10 slugs x 4 locales). **Q: Quantos temas visuais existem?** 9 temas built-in: 6 dark glass (Ocean Glass, Midnight Purple, Forest Emerald, Sunset Amber, Cyberpunk Neon, Rose Gold) + 3 light solid/material (Minimal Light, Corporate Slate, Arctic Frost). Cada um com paleta completa, fonte, layout mode (glass/solid/material). Tenant define qual e padrao e se usuarios podem trocar. --- # [pt-BR] Caso de uso: Treinamento corporativo (T&D) com Studeia URL: https://docs.studeia.com/use-cases/corporate-training Locale: pt-BR Section: use-cases Updated: 2026-05-23 **Short answer:** Studeia atende T&D corporativo com SSO Enterprise (SAML/OIDC), SCIM 2.0 com group→course mapping (auto-matricula via IdP), certificados Open Badges 3.0 verificaveis, compliance tracking via gradebook, audit trail completo, API publica para integrar Workday/BambooHR/Salesforce, LGPD + GDPR via DPA. TCO tipico R$200-400k em 3 anos para empresa de 500 funcionarios — vs USD $270-540k em Cornerstone OnDemand. ## Problemas de T&D que Studeia resolve 1. **Provisioning manual** — RH adiciona/remove funcionarios um por um → SCIM 2.0 automatiza 2. **Multiple logins** — funcionario decora 10 senhas → SSO via Okta/Azure AD 3. **Compliance esquecido** — treinamentos obrigatorios passam → automacao + lembretes 4. **Certificados nao reconhecidos** — PDF gerados sem verificacao → OB 3.0 W3C Verifiable Credentials 5. **Tracking impossivel** — RH nao sabe quem fez o que → dashboard + API 6. **Vendor lock-in** — sair de Cornerstone/Saba e doloroso → Studeia tem API + export ## Setup tipico (1-2 semanas) ### Semana 1 — Infraestrutura | Dia | Tarefa | |---|---| | 1 | Trial Enterprise Demo, setup branding (logo, cores, dominio custom) | | 2 | Configurar SSO via SAML ou OIDC (Okta/Azure AD/Google) | | 3 | Configurar SCIM 2.0 provisioning | | 4 | Mapear AD groups → Studeia Courses (auto-matricula) | | 5 | Testar fluxo com 5 funcionarios pilotos | ### Semana 2 — Conteudo | Dia | Tarefa | |---|---| | 6 | Importar cursos existentes (IMS CC, CSV de quizzes) | | 7 | Auto-gerar cursos de PDFs/PPTX existentes (auto-course generation) | | 8 | Configurar certificados OB 3.0 + templates | | 9 | Criar automacoes (lembrete compliance, notify gestor quando funcionario nao completa) | | 10 | Go-live | ## SSO + SCIM detalhado ### Okta example ``` Okta Admin Dashboard → Applications → Browse App Catalog → "Studeia" (ou Create Custom App se nao no catalog ainda) → SAML 2.0: Single Sign On URL: https://[tenant].studeia.com/api/auth/sso/[slug]/saml/callback Audience URI: https://[tenant].studeia.com Name ID format: EmailAddress Attribute Statements: firstName, lastName, email, department → Atribuir grupos: All Employees, Sales Team, Engineering, etc → SCIM Provisioning: Endpoint: https://[tenant].studeia.com/api/scim/v2 Token: [gerado no Studeia em Settings > SSO > SCIM Token] Mappings: padrao SCIM (firstName, lastName, email, active, groups) Scope: assigned users + groups ``` ### Azure AD example Mesma estrutura via Enterprise Applications > Provisioning. Studeia segue Microsoft SCIM extensions (PATCH com operations: add/replace/remove). ### Group→Course mapping Em Studeia > Settings > SSO > Groups: | AD Group | Studeia Course | Tipo | |---|---|---| | All Employees | Onboarding Geral | required | | Sales Team | Sales Methodology 2026 | required | | Engineering | Security & Compliance | required | | Engineering | Advanced AWS | optional | Quando RH adiciona funcionario a "Engineering" no AD → SCIM sync → Studeia auto-matricula em "Security & Compliance" + "Advanced AWS". Quando RH remove funcionario do grupo (saiu/transferiu) → cancel enrollment. Grupos grandes (>50 membros): processamento via BullMQ async (jobId retornado). ## Certificados OB 3.0 Quando funcionario completa curso required + atinge passingScore: ``` Trigger automatico: ↓ 1. handleGamificationEvent (XP + badge especial "Curso X Completo") 2. UserBadge.id criado 3. Pagina publica: https://[tenant].studeia.com/public/badges/verify/[userBadgeId] 4. JSON-LD OB 3.0 disponivel: /api/badges/verify/[userBadgeId] 5. Email enviado ao funcionario com link 6. (Opcional) Notificacao ao manager via automacao ``` Funcionario pode: - Adicionar ao LinkedIn ("Add to Profile" button OB 3.0 compativel) - Compartilhar URL publica em redes sociais - Exportar JSON-LD para sistema RH externo - Imprimir certificado estilizado (template customizavel via reward shop) Auditor externo pode verificar autenticidade visitando URL publica (W3C Verifiable Credential). ## Compliance tracking Dashboard em `/institution/reports/compliance`: - % funcionarios com cursos required completos - Lista de overdue (passou prazo + nao completou) - Vencimentos proximos (proximo 30/60/90 dias) - Por departamento (filtrado por user.department do SCIM) - Export CSV para auditoria Automacoes recomendadas: ``` 1. 30 dias antes vencimento: send_notification + email para funcionario 2. 7 dias antes: send_notification + email para funcionario + manager (CC) 3. 1 dia antes: send_webhook para Slack/Teams do RH 4. Apos vencimento: send_webhook para Workday API (suspender acesso, opcional) ``` ## Integracoes via API Studeia API 64+ endpoints com scopes granulares. Casos comuns T&D: | Integracao | Endpoints | |---|---| | **Workday** (HRIS) | Provisioning via SCIM. Sync de funcionarios novos/desligados. | | **BambooHR** | SCIM. Performance reviews puxando completed courses. | | **Salesforce** | Sales team treinamento → completion event → custom field no Salesforce. | | **Slack/Teams** | Automacao + webhook para notificar canal. | | **Tableau/Power BI** | Pull metrics via API publica (gradebook, analytics, compliance). | ## TCO 500 funcionarios / 3 anos | Item | Cornerstone OnDemand | Studeia Enterprise | |---|---|---| | Licenca | USD $300k-540k (R$1.5M-2.7M) | R$108k-288k (R$3-8k × 36) | | Setup + implementacao | USD $30k-100k | R$0-30k | | Custom development | USD $50k-200k | Incluido via API | | Custo IA (proporcional) | USD $0 (sem IA real) | R$54k-90k (R$3-5 × 500 × 36) | | **TOTAL 3 anos** | **R$1.8M-3.2M** | **R$162k-408k** | Studeia tipicamente 70-85% mais barato que Cornerstone. ## Privacidade e seguranca - **LGPD nativo** — dados no Brasil (Supabase BR region opcional) - **GDPR** — DPA disponivel para enterprise europeu - **Audit trail completo** — toda acao admin/SSO/SCIM em AdminAuditLog - **SOC 2 compliance** — em progresso (2026 H2) - **Criptografia em repouso** — AES-256-GCM em credenciais OAuth + API keys - **Criptografia em transito** — TLS 1.3 via Let's Encrypt - **Data export** — funcionario solicita seus dados (Art. 18 IV LGPD) - **Data deletion** — anonimizacao quando funcionario sai (mantem learning data 5 anos) ## Veja tambem - [SSO Enterprise](/platform/sso-enterprise) - [API publica](/api/overview) - [Multi-tenancy](/platform/multi-tenancy) ## FAQ **Q: Studeia serve para treinamento corporativo?** Sim, com encaixe forte para empresas medias e grandes. Recursos chave: SSO Enterprise (SAML 2.0, OIDC, SCIM 2.0 com Okta/Azure AD/Google Workspace), certificados verificaveis (Open Badges 3.0), compliance tracking via gradebook com integridade flags, API publica para integrar com Workday/BambooHR/Salesforce, audit trail completo, LGPD + GDPR via DPA. **Q: Como integrar com Okta/Azure AD/Google Workspace?** Plano Enterprise. SCIM 2.0 (provisioning automatico) + SAML/OIDC (login). Setup em 1-2 dias: (1) Settings > SSO > Add Provider, escolhe SAML ou OIDC, cola metadata. (2) Settings > SSO > SCIM Token, gera Bearer token. (3) No IdP (Okta/Azure AD): configure Studeia como Enterprise Application, cole tenant URL + token. (4) Group→Course mapping em Settings > SSO > Groups: quando IdP adiciona usuario a grupo, Studeia auto-matricula em curso correspondente. **Q: Tem certificados de conclusao?** Sim. Plano Enterprise. Quando aluno completa curso com nota minima: Studeia emite certificate via reward shop (template customizavel) + opcionalmente badge OB 3.0 (Open Badges 3.0 — W3C Verifiable Credential) com pagina publica de verificacao. Funcionario pode adicionar ao LinkedIn (Add to Profile button) ou exportar JSON-LD para sistemas de RH. **Q: Compliance tracking funciona?** Sim. Cursos podem ser marcados como required (obrigatorios). Dashboard admin mostra: % funcionarios certificados, vencimentos proximos, alunos atrasados. Automacoes podem disparar lembretes (ex: 'Treinamento de Compliance vence em 30 dias'). Audit log mantem historico imutavel para auditorias externas. **Q: Quanto custa para empresa de 500 funcionarios?** Plano Enterprise sob consulta (tipicamente R$3.000-8.000/mes para 500-2000 funcionarios). Custos extra: IA proporcional ao uso (~R$3-5/usuario/mes ativo), eventualmente desenvolvimento custom via API publica. TCO 3 anos tipicamente R$200-400k. Compara com Cornerstone OnDemand (~USD $5-15/usuario/mes = USD $90-180k/ano). --- # [pt-BR] Caso de uso: Cursinho ENEM com Studeia URL: https://docs.studeia.com/use-cases/enem-prep-cursinho Locale: pt-BR Section: use-cases Updated: 2026-05-23 **Short answer:** Cursinhos ENEM usam Studeia para: (1) Simulados periodicos com analytics psicometricas (Cronbach alpha, point-biserial, distractor analysis). (2) Tutor IA com RAG ingerindo material proprio. (3) Gamificacao (XP, badges, leaderboards, contests) para combater abandono. (4) Portal de pais com relatorios IA. (5) Question bank reutilizavel importavel via GIFT/CSV. TCO tipico R$5-10k/mes para 200 alunos vs R$10-30k/mes em Moodle gerenciado. ## O problema dos cursinhos ENEM Cursinhos pre-vestibular enfrentam 4 desafios estruturais: 1. **Abandono alto** — 30-50% dos alunos largam antes do ENEM (motivacao, custos, dificuldade) 2. **Simulados manuais consomem tempo** — preparar 1 simulado de 90 questoes + correcao + analytics leva semanas 3. **Tutor presencial caro** — duvidas individuais 24h precisariam de muitos professores 4. **Pais querem visibilidade** — especialmente para menores, pais cobram acompanhamento mas escola nao tem tempo Studeia ataca esses 4 problemas. ## Como Studeia resolve ### 1. Simulados automatizados com analytics psicometricas Simulado configurado uma vez, reusavel para multiplas turmas: ```json { "configuration": { "maxAttempts": 1, "timeLimitMinutes": 270, "shuffleQuestions": true, "shuffleOptions": true, "scoringPolicy": "highest", "reviewMode": "after_due_date", "passingScore": 50 }, "questions": [...] // ou importa de question_bank } ``` Apos simulado, analytics em `/institution/courses/[id]/lessons/[lid]/quiz-analytics`: - **Item difficulty** — quais questoes 80% acertam (facil demais) ou < 30% (dificil demais) - **Point-biserial discrimination** — identifica questoes que NAO diferenciam bons de fracos (candidatas a remover) - **Distractor analysis** — qual alternativa errada e mais popular (pista de misconception) - **Cronbach's alpha** — consistencia interna do simulado (deve ser > 0.7 para confiabilidade) - **Score distribution** — histograma de notas (detecta ceiling/floor effect) ### 2. Question bank importavel Cursinhos ja tem bancos de questoes em PDF, Word ou planilhas. Studeia aceita: - **GIFT format** (padrao Moodle/Canvas, compativel) - **CSV** (1 questao por linha + alternativas em colunas) - **API JSON** (`POST /api/institution/question-banks/[id]/items`) - **Manual via UI** (editor visual) Cada questao tem `concepts[]` (mapeados para ConceptMastery do aluno). Quando tutor IA detecta misconception por concept, sugere refazer questoes relacionadas. ### 3. Tutor IA personalizado por aluno Material do cursinho ingerido no RAG (`POST /api/institution/courses/[id]/rag-ingest`): - Apostilas em PDF - Aulas-video com transcricao (Whisper auto) - Slides - Resolucoes de exercicios Quando aluno pergunta "Como resolver questao 47 do simulado de Matematica?": 1. RetrievalAgent busca resolucao no material 2. PedagogicalAgent escolhe estrategia baseado em ConceptMastery do aluno em Matematica 3. Tutor responde citando apostila/aula especifica 4. EvaluationAgent detecta misconceptions (ex: "aluno confunde domino vs imagem") 5. Inline quiz proativo: "Vou te perguntar 2 questoes parecidas pra confirmar se voce entendeu" ### 4. Gamificacao para combater abandono XP por atividade + bonus streak: ``` Dia 1: 50 XP (aula) + 30 XP (quiz) Dia 2: 50 XP + 30 XP + bonus streak 2d Dia 7: 50 XP + 30 XP + bonus streak 7d (+100 XP) Dia 30: 50 XP + 30 XP + bonus streak 30d (+500 XP) ``` Badges com 11 criterios automaticos: - "Maratonista" — 30 dias streak - "Cracao de Matematica" — 100 questoes de mat corretas - "Top 10%" — entre os 10% melhores no simulado - Custom badges criadas pelo admin via Agente IA de gamificacao Leaderboards por turma + janela semanal mantem competicao saudavel sem comparacao global (que desmotiva fracos). Contests temporais (ex: "Campeonato da semana — quem completa mais quizzes"): - Premio: badge especial + 1000 coins - Aluno troca coins por avatar customizado, certificate template, etc ### 5. Portal de pais com IA GuardianLink verificado por SMS (LGPD + ECA para menores): - Vinculacao 1 pai → multiplos filhos - Pai escolhe nivel de acesso por filho (Progress, Chat history, Time restrictions) - Alertas automaticos via push/email/in-app: - Inatividade (>5 dias sem login) - Queda de desempenho (>20% na semana vs media historica) - Marco alcancado (modulo completo, badge especial) - Dificuldade em topico (mastery < 0.4 em conceito-chave) Relatorios periodicos gerados por LLM: - **Diario** (Haiku): "Joao estudou 45min hoje, completou 3 aulas de Quimica." - **Semanal** (Sonnet): "Esta semana Joao avancou em Quimica (mastery +0.15) mas regrediu em Matematica..." - **Mensal** (Sonnet com graficos): narrativa pedagogica completa + recomendacoes ## Setup tipico (1 semana) | Dia | Tarefa | |---|---| | 1 | Trial Demo plan, configurar branding, criar admin institucional | | 2 | Importar question bank (GIFT/CSV) — 500-2000 questoes | | 3 | Estruturar cursos (Matematica, Linguagens, etc) com modulos e aulas | | 4 | Upload de apostilas (PDF) + aulas-video (Drive sync) | | 5 | Disparar RAG ingestion + configurar tutor IA (PromptTemplate custom) | | 6 | Setup gamificacao (Agente IA cria 10 badges + XP rules + 1 contest mensal) | | 7 | Convidar alunos + pais (SCIM se ja tem AD, senao CSV) | ## TCO 200 alunos / 3 anos | Item | Studeia | Moodle gerenciado | |---|---|---| | Licenca | R$108.000 (Enterprise R$3k/mes) | R$0 | | Hosting + DevOps | Incluido | R$108.000 (R$3k/mes) | | Tutor IA | R$0 (incluido) | R$36.000 (plugin Anthropic + admin) | | Gamificacao | R$0 (incluido) | R$10.000 (plugins) | | Analytics psicometricas | R$0 (incluido) | R$0 (plugin gratis mas limitado) | | Mobile B2B | R$0 (incluido) | R$0 (Moodle Mobile generic) | | Custo IA (200 alunos × R$5 × 36 meses) | R$36.000 | R$36.000 | | **TOTAL 3 anos** | **R$144.000** | **R$190.000** | Studeia ~24% mais barato + setup 1 semana vs 60-90 dias do Moodle. ## Cases reais (anonimizados) > "Cursinho de 300 alunos no interior de SP, migrou de Moodle para Studeia em 2 meses. Reducao de 35% no abandono no primeiro semestre via gamificacao + alertas para pais. Custo total caiu de R$8k/mes para R$5k/mes incluindo IA." — testemunho cliente ## Veja tambem - [Quiz Engine](/features/assessment/quiz-engine) - [RAG Ingestion](/features/ai-tutor/rag-ingestion) - [Gamificacao](/features/gamification/overview) - [Comparativo Studeia vs Moodle](/comparisons/studeia-vs-moodle) ## FAQ **Q: Studeia serve para cursinho ENEM?** Sim, e um dos melhores fits. Recursos chave: simulados configuraveis (timeLimit, shuffleQuestions, accessCode, scoringPolicy 'highest'), analytics psicometricas (Cronbach alpha, point-biserial discrimination, distractor analysis para identificar questoes problematicas), tutor IA com RAG ingerindo material proprio do cursinho, gamificacao (XP, badges, leaderboards) para combater abandono, portal de pais com relatorios IA. **Q: Posso importar banco de questoes ENEM existente?** Sim. POST /api/institution/question-banks importa via JSON, CSV ou GIFT format. Cada questao pode ter concepts[] (vinculado a ConceptMastery para tutor IA), tags (filtros), dificuldade. Question bank reusavel em multiplos simulados + ingerivel no RAG do tutor. **Q: Como motivar alunos a estudar consistentemente?** Gamificacao nativa: XP por aula completa + bonus streak diaria (7d = +100XP, 30d = +500XP). Badges automaticos com 11 criterios (ex: '100 questoes corretas em Matematica'). Leaderboards por turma (escopo class_group, janelas weekly). Contests temporais com 7 metricas (ex: 'Maior pass rate no simulado da semana'). Rewards shop com coins virtuais. + Agente IA dedicado para admin criar estrategia. **Q: Pais conseguem acompanhar?** Sim. Portal de pais (vinculacao via GuardianLink verificado): alertas automaticos (inatividade 5+ dias, queda de desempenho, dificuldade em topico), relatorios periodicos gerados por IA (diario Haiku, semanal/mensal Sonnet com narrativa pedagogica), progresso por curso, atividade detalhada. Para alunos menores: pai tem acesso por default (LGPD + ECA). **Q: Quanto custa para um cursinho de 200 alunos?** Plano Crescimento R$1.000/mes (50 alunos) ou Escala R$1.500/mes (100 alunos) ou Enterprise sob consulta para 200+ alunos (tipicamente R$3.000-5.000/mes). Custo de IA proporcional ao uso (R$3-8/aluno/mes tipicamente). TCO total: R$5.000-10.000/mes incluindo IA. Compara com R$10.000-30.000/mes em Moodle gerenciado + plugins + admin DevOps. --- # [pt-BR] Caso de uso: Escola de idiomas com Studeia URL: https://docs.studeia.com/use-cases/language-school Locale: pt-BR Section: use-cases Updated: 2026-05-24 **Short answer:** Escolas de idiomas (Wizard, Cultura Inglesa, Yazigi, escolas independentes) usam Studeia para: (1) Video interativo com checkpoints para listening. (2) Flashcards com SRS (algoritmo SM-2) para vocabulario. (3) Aulas ao vivo via Zoom/Teams/Meet (conversation classes). (4) Gamificacao com streak diaria para incentivar pratica constante. (5) Tutor IA para tirar duvidas de gramatica/uso (RAG ingere material da escola). Reconhecimento de voz proprio ainda em roadmap. ## Problemas de escolas de idiomas 1. **Pratica constante**: idioma se aprende com repeticao diaria, nao 2x semana de aula 2. **Listening dificil**: alunos veem video sem parar, nao internalizam 3. **Vocabulario decora-esquece**: sem SRS, palavras saem da memoria em dias 4. **Conversacao escassa**: poucas oportunidades de praticar fala fora da aula 5. **Engajamento variavel**: Duolingo cria viciados, escolas tradicionais nao 6. **Avaliacao subjetiva**: redacoes/oral corrigidas manualmente, demora ## Como Studeia resolve ### 1. Video interativo (listening + comprehension) Lesson subtype `interactive_video`: ```json { "videoUrl": "...", "checkpoints": [ { "timestampSec": 45, "question": { "type": "multiple_choice", "question": "What did Sarah say her job is?", "options": ["Teacher", "Doctor", "Engineer", "Artist"], "correctIndex": 0, "explanation": "Sarah said 'I'm a teacher' at 0:42" } }, { "timestampSec": 120, "question": { "type": "fill_blank", "question": "She mentioned that she lives in ____.", "blanks": [{ "id": 0, "acceptedAnswers": ["London", "london"] }] } } ] } ``` Aluno NAO pode avancar sem responder cada checkpoint. Forca atencao + processamento ativo. ### 2. Flashcards com SRS (vocabulario) Lesson subtype `flashcard_set` com algoritmo SM-2 modificado: ``` Card: "house" → "casa" Aluno avalia: easy / good / hard / again Easy → proxima revisao em 14d Good → 7d Hard → 1d Again → 0d (mesma sessao) ``` Studeia armazena `StudentFlashcardReview` com `nextReviewAt` calculado. Notifica aluno quando ha cards para revisar (push + in-app). Cards podem ter audio embedded (pronunciation): ```json { "front": "embarrassed", "back": "envergonhado", "audioUrl": "https://...embarrassed.mp3", "exampleSentence": "She was embarrassed when she forgot his name." } ``` Sincroniza no mobile app para revisao offline (cache 7 dias) — aluno pratica no metro/onibus. ### 3. Aulas ao vivo (conversation classes) Conversation requires real-time interaction. Studeia integra: - **Zoom**: melhor para escolas grandes (limite 1000 participants, gravacao automatica) - **BBB**: open-source para escolas que querem self-hosted (sem custos Zoom) - **Teams**: para escolas que ja pagam Microsoft 365 - **Google Meet**: para escolas em Google Workspace Recursos: gravacao automatica (Zoom/Teams/Meet), transcricao VTT (Zoom/Teams) ingerida em RAG do curso, breakout rooms (Zoom), polls (Zoom/Teams). ### 4. Gamificacao para streak diaria Idioma se aprende com REPETICAO DIARIA. Gamificacao incentiva: **XP Rules** (configuradas via Gamification Agent): ``` dailyLogin: 5 XP lessonComplete: 30 XP quizPass: 20 XP flashcardReviewSession (>= 20 cards): 25 XP liveClassJoin: 50 XP chatTutorMessage (>= 5 mensagens em ingles): 10 XP Streak bonus: - 7 dias consecutivos: +100 XP + badge "1 semana" - 30 dias: +500 XP + badge "1 mes" - 100 dias: +2000 XP + badge "Centurion" - 365 dias: +10000 XP + badge "Dedicacao Anual" ``` Leaderboard escopo turma (class_group), janela semanal — competicao saudavel entre colegas. ### 5. Tutor IA para duvidas PedagogicalAgent adapta para idioma: - Nivel iniciante (CEFR A1-A2): `direct_instruction` predominante - Intermediario (B1-B2): `scaffolding` + `socratic` - Avancado (C1-C2): `challenge` Tutor responde no idioma alvo (prompt instrui: "responda em ingles. Se o aluno errar gramatica, corrija delicadamente."). RAG ingere material proprio da escola (apostilas, listas de vocabulario, textos de leitura) — tutor cita o livro da escola, nao Wikipedia generica. ### 6. Avaliacao de escrita via LLM (opcional) Para essay-type questions: - Admin habilita LLM grading (custo adicional ~$0.01-0.05 por correcao) - Sonnet avalia conforme rubrica configurada (gramatica + coesao + vocabulario + conteudo) - Professor revisa apenas amostra (10-20%) - Reduz tempo de correcao em 70-80% ## Setup tipico (1 semana) | Dia | Tarefa | |---|---| | 1 | Trial Demo, branding (logo Wizard/Yazigi/etc, cores), domain custom | | 2 | Importar professores + alunos via CSV (segmentados por nivel CEFR) | | 3 | Criar cursos por nivel (A1, A2, B1, B2, C1) com modulos por unit | | 4 | Upload videos das licoes + criar checkpoints interativos para 5 unidades | | 5 | Criar flashcard sets de vocabulario (importar de Anki via CSV) | | 6 | Configurar gamificacao (Agente IA cria estrategia streak-focused) | | 7 | Treinar 5 professores piloto + go-live com 1 turma | ## TCO 500 alunos / 3 anos | Item | Studeia Enterprise | Plataforma proprietary escola | |---|---|---| | Licenca | R$180k (R$5k/mes × 36) | R$300k-500k (Wizard/Yazigi LMS custom proprio) | | Custos IA proporcional | R$108k (R$6/aluno × 500 × 36) | R$0 (sem IA real) ou R$60k (terceiros) | | **TOTAL 3 anos** | **R$288k** | **R$300k-560k** | Studeia tipicamente 30-50% mais barato + tutor IA real + mobile B2B + LTI. ## Pendencias ❌ **Reconhecimento de voz proprio**: roadmap. Por enquanto integrar com Speechling/ELSA Speak via external_link. ❌ **Speaking practice estruturada**: requer audio gravado + analise. Roadmap 2026 H2. ❌ **CEFR self-assessment**: nao temos teste de nivel CEFR automatico embutido (criar quiz manual). ❌ **AI conversation partner**: tutor IA via texto sim, via voz nao (ainda). ## Veja tambem - [Tipos de aula](/features/cms/lesson-types) - [Conteudo interativo](/features/interactive-content/overview) - [Gamificacao](/features/gamification/overview) - [Aulas ao vivo](/features/live-classes/overview) ## FAQ **Q: Studeia substitui Duolingo para escolas de idiomas?** Para B2C massivo (consumidor individual): nao, Duolingo tem 500M+ users e UX gamificada specialista em idiomas. Para B2B (escolas de idiomas com turmas, professores, certificados, controle de pais para criancas): Studeia vence — Duolingo for Schools e limitado, sem multi-tenancy real, sem white-label, sem LTI, sem gradebook estruturado. Escola Wizard/Cultura Inglesa/Yazigi pode usar Studeia como LMS proprio com IA + gamificacao. **Q: Studeia tem reconhecimento de voz para pronuncia?** Reconhecimento de voz nativo NAO esta implementado ainda (roadmap). Por enquanto: tutor IA aceita transcricao texto + da feedback em conversacao. Para pratica de pronuncia: integrar com ferramentas externas (Speechling, ELSA Speak) via external_link ou LTI. Roadmap 2026 H2: integracao Whisper + Google STT para audio gravado. **Q: Suporta video interativo com pausas para responder?** Sim, via lesson subtype 'interactive_video'. Video com checkpoints (pausas obrigatorias) em timestamps especificos. Em cada checkpoint: questao multiple_choice / fill_blank / etc. Aluno NAO avanca sem responder. Util para listening comprehension (parar video, perguntar 'O que ela disse?'). **Q: Flashcards funcionam com spaced repetition?** Sim, via lesson subtype 'flashcard_set'. Algoritmo SRS SM-2 modificado: aluno marca dificuldade (facil/medio/dificil), Studeia agenda proxima revisao automaticamente (1d, 3d, 7d, 14d, 30d crescendo). Cards podem ter audio embedded para vocabulario. Sincroniza no app mobile para revisao offline (cache 7 dias). --- # [pt-BR] Caso de uso: Escola fundamental brasileira com BNCC URL: https://docs.studeia.com/use-cases/primary-school-bncc Locale: pt-BR Section: use-cases Updated: 2026-05-24 **Short answer:** Escolas K-12 brasileiras usam Studeia para: (1) Alinhamento BNCC via tags por habilidade em aulas/quizzes. (2) Portal de pais robusto com narrativa IA (relatorios diarios/semanais/mensais por LLM). (3) Protecoes para menores (User.isMinor + GuardianLink + LGPD + ECA + Supervisor Agent IA). (4) Gamificacao kid-friendly (XP, badges visuais, leaderboards por turma). (5) Tutor IA com PedagogicalAgent que adapta linguagem por idade. Custo tipico R$5-8k/mes para 300 alunos. ## Problemas que K-12 brasileiro enfrenta 1. **BNCC obrigatoria mas tracking manual** — escolas mapeiam habilidades em planilhas, sem visibilidade real de cobertura 2. **Pais demandam transparencia** — especialmente para menores, sem ferramenta dedicada 3. **Inseguranca digital de menores** — exposicao a conteudo inadequado, contato com desconhecidos 4. **LGPD + ECA para criancas** — escola precisa consentimento parental, retencao de dados, etc 5. **Engajamento baixo** — Google Classroom funciona mas falta gamificacao motivadora 6. **Diferencas de ritmo** — alunos rapidos se entendiam, lentos se desmotivam (precisa adaptacao) ## Como Studeia ataca ### 1. Alinhamento BNCC via tags Cada aula/quiz/questao pode ter tags: ``` EF02LP01 (Lingua Portuguesa, 2o ano, primeira habilidade) EF03MA05 (Matematica, 3o ano, quinta habilidade) EF05CI09 (Ciencias, 5o ano, nona habilidade) EM13MAT401 (Ensino Medio integrado, Matematica, area 4) ``` Relatorios: - Cobertura BNCC por turma/aluno (% de habilidades trabalhadas) - Habilidades sem cobertura (gap analysis) - Habilidades com baixo desempenho coletivo (revisar metodologia) **Limitacao honesta**: Studeia nao tem catalogo BNCC pre-mapeado. Escola define proprias tags (escola pode fazer isso uma vez + reusar). ### 2. Portal de pais com IA narrative GuardianLink vinculado por SMS (anti-fraude, requer numero do pai + codigo): ``` Aluno (User, isMinor=true) ↔ GuardianLink (verified via SMS) ↔ Parent (User, role=parent) ``` Pai escolhe nivel de acesso por filho (ProgressSharingConfig): - viewProgress (notas, progresso curricular) - viewChatHistory (conversas com tutor IA) - viewActivityLog (login, tempo de uso, paginas visitadas) - viewMessages (mensagens com professor — opcional) - receiveAlerts (push/email/in-app) - setTimeRestrictions (limites de horario de uso do app) **Para menor de 13 anos**: acesso total e default (LGPD + ECA). Para 13-17: pai configura nivel. Alertas automaticos (StudentActivityLog + MonitoringAlert): - **Inatividade**: 5+ dias sem login → alerta + email/push - **Queda de desempenho**: >20% pior que media historica na semana - **Marco alcancado**: completou modulo / ganhou badge especial / nivel up - **Dificuldade em topico-chave**: mastery < 0.4 em conceito BNCC importante - **Risco**: RiskAssessmentService score >= 50 (multi-fator) Relatorios LLM: - **Diario** (Haiku, ~$0.001): "Joao estudou 30min em Matematica hoje. Completou 2 aulas. Dificuldade em equacoes do primeiro grau." - **Semanal** (Sonnet): narrativa pedagogica de 200 palavras com pontos fortes, areas de melhoria, recomendacoes - **Mensal** (Sonnet com graficos): relatorio completo + comparativo com periodo anterior ### 3. Protecoes para menores User.isMinor=true ativa: 1. **Tutor IA reforcado**: system prompt inclui guardrails extras ("voce esta falando com uma crianca, evite topicos inadequados, sempre reforce positivamente") 2. **Supervisor Agent prioridade**: classifica com sensibilidade maior (categorias self_harm/sexual/violencia disparam mais rapido) 3. **Filtros de conteudo**: nao ve mensagens de adultos nao-vinculados 4. **DMs restritas**: so professor + alunos da mesma turma (nao adultos aleatorios) 5. **Imagens com cautela**: upload de foto requer consentimento parental 6. **LGPD Art. 14 (criancas)**: tratamento de dados de menor exige consentimento especifico, retencao com prazo definido ### 4. Gamificacao kid-friendly Configurada via Gamification Agent (admin pede via chat): > "Crie gamificacao para fundamental I focada em consistencia (streaks diarias), conquistas visuais (10 badges coloridos por materia) e cooperacao (nao competicao agressiva). Leaderboard so dentro da turma, sem ranking global." Resultado: - XP por aula completa, com bonus streak (5 dias = +50 XP) - Badges visuais coloridos por materia (Matematica = azul, Ciencias = verde, etc) - 11 criterios automaticos (ex: "Faltam 2 dias para completar streak semanal", "Voce ja resolveu 50 questoes de Matematica") - Leaderboard escopo turma (class_group), janela semanal — evita competicao toxica - Rewards shop com itens virtuais nao-tangiveis (avatar customizado, cor de nome) ### 5. Tutor IA adaptado por idade PedagogicalAgent ajusta estrategia: - Crianca + mastery < 0.5: **direct_instruction** mais frequente (explicacao clara com exemplos concretos, evitar abstracao) - Crianca + dominio alto: **guided_practice** com exercicios graduais (nao challenge ainda) - Linguagem: tutor responde com vocabulario adequado a idade (system prompt com `studentAgeRange: "child" | "teen" | "adult"`) - Reforco positivo: sempre comeca com algo que aluno ACERTOU antes de apontar erro ## Setup tipico (2 semanas) | Semana | Tarefa | |---|---| | **Semana 1 — Infraestrutura** | | | Dia 1-2 | Trial Demo plan, configurar branding (logo escola, cores, dominio custom escola.com.br) | | Dia 3 | Importar professores + alunos via CSV ou SCIM (se ja tem AD) | | Dia 4 | Configurar turmas (ClassGroup) por serie + secao | | Dia 5 | Vincular pais via GuardianLink (SMS) + treinar 5 pais piloto | | **Semana 2 — Conteudo + Gamificacao** | | | Dia 6-7 | Importar/criar cursos por materia (Portugues, Matematica, Ciencias, etc) com modulos por bimestre | | Dia 8 | Tag tudo com habilidades BNCC (uma vez, reusa todo ano) | | Dia 9 | Configurar gamificacao (Agente IA cria estrategia kid-friendly) | | Dia 10 | Treinar 3 professores piloto + go-live | ## TCO 300 alunos / 3 anos | Item | Studeia Enterprise | Google Workspace + Moodle | |---|---|---| | Licenca | R$144k (R$4k/mes × 36) | R$0 Google + R$0 Moodle | | Hosting + DevOps | Incluido | R$72k (R$2k/mes admin parcial) | | Custom: portal pais robusto | Incluido | R$40k (desenvolvimento) | | Plugins (IA, gamificacao, BNCC tracking) | Incluido | R$30k | | IA custo (300 × R$4/mes × 36) | R$43k | R$30k (proporcional) | | **TOTAL 3 anos** | **R$187k** | **R$172k** | Custos similares — mas Studeia entrega features modernas (tutor IA, parent IA narrative, OB 3.0 badges) que Moodle exigiria desenvolvimento custom ou plugins limitados. ## Quando NAO usar Studeia em K-12 ❌ Escola publica federal/estadual com Moodle MEC ja implantado (Moodle MEC preferencial por compliance) ❌ Escola muito pequena (<30 alunos) — custo nao se justifica (use Google Classroom gratis) ❌ Escola sem internet estavel (Studeia exige conexao + cache parcial) ## Veja tambem - [Portal de pais](/features/parent-portal/overview) - [Gamificacao](/features/gamification/overview) - [LGPD compliance](/legal/lgpd-rights-guide) - [Studeia vs Google Classroom](/comparisons/studeia-vs-google-classroom) ## FAQ **Q: Studeia suporta BNCC?** Sim, via tags por habilidade. Cada aula/quiz pode ser tagueada com codigos BNCC (ex: EF02CI01, EM13MAT401). Filtros por habilidade no gradebook + relatorios de cobertura curricular. NAO temos catalogo BNCC pre-mapeado (escola define proprias tags) — mas estrutura suporta totalmente alinhamento BNCC. **Q: Studeia e seguro para criancas menores de 13 anos?** Sim, com protecoes especificas. User.isMinor=true ativa: (1) Tutor IA com filtros de conteudo reforcados no system prompt. (2) Supervisor Agent com sensibilidade maior. (3) Vinculacao GuardianLink obrigatoria (LGPD + ECA — Estatuto da Crianca). (4) Pai/responsavel tem acesso default total (ProgressSharingConfig). (5) Mensagens diretas com adultos NAO matriculados no mesmo curso sao bloqueadas. (6) Foto/dados pessoais com consentimento parental documentado. **Q: Pais conseguem acompanhar o filho?** Sim. GuardianLink vinculado por SMS (anti-fraude). Pai escolhe nivel de acesso por filho: ver progresso, ver historico de chat com tutor IA, restricoes de tempo de uso. Alertas automaticos: inatividade 5+ dias, queda de desempenho >20% na semana, marco alcancado, dificuldade em topico-chave. Relatorios periodicos com narrativa IA: diario (Haiku, 'Joao estudou 30min em Matematica hoje'), semanal/mensal (Sonnet, narrativa pedagogica completa). **Q: Quanto custa para escola com 300 alunos?** Plano Enterprise sob consulta (tipicamente R$4-6k/mes para 300 alunos). Custo IA proporcional (R$3-5/aluno/mes tipicamente). TCO total ~R$5-8k/mes incluindo IA. Compara com R$10-20k/mes em Moodle gerenciado + plugins + administrador parcial + portal de pais custom + IA via terceiros. **Q: Funciona para fundamental I (1-5 ano)?** Sim, com interface adaptada. Recursos para idade: gamificacao com badges visuais coloridos, tutor IA com linguagem simples (PedagogicalAgent ajusta estrategia para 'direct_instruction' em criancas), audio narrativo opcional, controle de tempo via App. Mas requer envolvimento parental ativo (criancas pequenas nao usam app/PC sozinhas). --- # [pt-BR] Caso de uso: Certificacao profissional com Studeia (OB 3.0 verificavel) URL: https://docs.studeia.com/use-cases/professional-certification Locale: pt-BR Section: use-cases Updated: 2026-05-24 **Short answer:** Studeia para certificação profissional: (1) Open Badges 3.0 (W3C Verifiable Credential JSON-LD) com verificação pública + LinkedIn Add to Profile. (2) Quiz engine com proctoring passivo (tab switch, time anomalies) e analytics psicométricas (Cronbach alpha, point-biserial). (3) Gradebook com rubricas multi-critério. (4) API para integração com Conselhos profissionais. Limitações: sem checkout B2C nativo (use Stripe/Asaas) nem proctoring ativo via webcam (use Examity/ProctorU via LTI) ## Tipos de certificacao que Studeia atende | Tipo | Exemplo | |---|---| | **Certificacao tecnica** | AWS, Cisco, CompTIA (para empresas que treinam internamente) | | **Certificacao academica** | Pos-graduacao, MBA, especializacoes | | **Certificacao regulamentada** | CFC continuing education (contadores), CRM continuing (medicos), OAB cursos | | **Certificacao corporativa** | Compliance interno, produtos da empresa, certificacoes proprietarias | | **Cursos profissionalizantes** | Tecnico em informatica, agente de saude, microempreendedor | ## Open Badges 3.0 — credenciais verificaveis Cada UserBadge no Studeia gera: ### 1. Pagina publica de verificacao `/public/badges/verify/[userBadgeId]` (sem autenticacao): ``` +----------------------------------------------------+ | 🛡️ Credencial Verificada — OB 3.0 | +----------------------------------------------------+ | [Issuer logo] Cursinho XYZ | | | | 🏆 ENEM 2026 Champion | | Top 10% em simulacao oficial | | | | Concedida a: MARIA SILVA | | Em: 24 de maio de 2026 | | Categoria: Academic Achievement | | | | [Download JSON-LD] [Verificar online] | +----------------------------------------------------+ ``` ### 2. JSON-LD W3C Verifiable Credential `/api/badges/verify/[userBadgeId]`: ```json { "@context": [ "https://www.w3.org/2018/credentials/v1", "https://purl.imsglobal.org/spec/ob/v3p0/context.json" ], "type": ["VerifiableCredential", "OpenBadgeCredential"], "issuer": { "id": "https://cursinho-xyz.com", "type": "Profile", "name": "Cursinho XYZ" }, "issuanceDate": "2026-05-24T10:00:00Z", "credentialSubject": { "id": "did:web:user:maria-silva", "type": "AchievementSubject", "achievement": { "id": "https://cursinho-xyz.com/badges/enem-champion-2026", "type": "Achievement", "name": "ENEM 2026 Champion", "description": "Top 10% em simulacao oficial", "criteria": { "narrative": "Top 10% em simulado X" } } }, "proof": { ... assinatura digital ... } } ``` ### 3. Schema.org EducationalOccupationalCredential Para Google + LinkedIn descobrirem: ```json { "@type": "EducationalOccupationalCredential", "name": "ENEM 2026 Champion", "description": "Top 10% em simulacao oficial", "credentialCategory": "achievement", "dateCreated": "2026-05-24", "url": "https://cursinho-xyz.com/public/badges/verify/abc", "recognizedBy": { "@type": "Organization", "name": "Cursinho XYZ" }, "about": { "@type": "Person", "name": "Maria Silva" } } ``` ### 4. LinkedIn Add to Profile Botao na pagina publica abre LinkedIn pre-preenchido com: - Nome da certificacao - Issuer (instituicao) - Data de emissao - URL de verificacao - Skills associadas Funcionario apenas confirma — credencial vai pro perfil em 1 clique. ## Quiz engine para provas de certificacao ### Configuracao tipica ```json { "configuration": { "maxAttempts": 1, "timeLimitMinutes": 180, "shuffleQuestions": true, "shuffleOptions": true, "accessCode": "CERT2026", "scoringPolicy": "latest", "reviewMode": "after_due_date", "passingScore": 70, "showResultsToStudent": false, "allowGoBack": false }, "questions": [...] // 100+ questoes do question bank } ``` ### Proctoring passivo QuizAttempt rastreia em background: - `tabSwitchCount`: saiu da aba durante prova - `copyPasteCount`: usou Ctrl+C / Ctrl+V - `blurEvents`: minimizou janela - `avgTimePerQuestionSec`: tempo medio por questao (anomalia se < 2s = adivinhacao) - `flagged: boolean`: true se algum sinal exceder threshold Inline no gradebook do administrador: ``` Nome do aluno | Score | Flags Maria Silva | 87 | 🛡️ Tab switches: 12 (suspeito) Joao Souza | 76 | (sem flags) ``` Admin decide acao: anular, manter, requerer retake presencial. ### Analytics psicometricas Apos prova, /quiz-analytics retorna: - Item difficulty (% acertaram cada questao) - Point-biserial discrimination (questoes que NAO diferenciam bons de fracos = candidatas a remover) - Distractor analysis (qual alternativa errada e mais popular) - Cronbach's alpha (consistencia interna >= 0.7 = teste confiavel) - Score distribution Para certificacao seria: identifica questoes problematicas + valida confiabilidade do teste. ### Proctoring ativo (limitacao) Para certificacoes que exigem proctoring com webcam/microfone/screen sharing (AWS, Cisco, CFA, etc): **Studeia NAO tem nativamente** (questoes privacy + LGPD). **Solucoes**: 1. Integrar com **Examity** / **ProctorU** / **Honorlock** via LTI 1.3 — aluno faz prova em janela Studeia, proctoring por servico externo 2. Para provas presenciais (centro autorizado): proctoring fisico tradicional + Studeia como sistema de entrega da prova ## API publica para integracoes Conselho profissional (CFC, CRM, OAB) consulta certificacoes via API: ```bash GET https://[instituicao].studeia.com/api/institution/badges ?category=continuing-education &dateFrom=2026-01-01 &dateTo=2026-12-31 Authorization: Bearer mia_... Scope: badges:read ``` Retorna lista de UserBadges emitidos no periodo. Conselho processa via ETL para seu sistema. Para integracao mais profunda: webhook automation no Studeia notifica conselho quando aluno completa curso compliance: ```json Trigger: lesson_completed (com tag "certification-exam") Action: send_webhook → POST https://conselho.gov.br/api/certifications Body: { studentCpf, certificationName, completedAt, score, badgeVerificationUrl } ``` ## Cobranca B2C (limitacao) Studeia foca em B2B — instituicao cobra alunos diretamente via: - **Stripe**: cartao internacional (USD ou BRL) - **Asaas**: PIX, boleto, cartao (Brasil) Para B2C com afiliados/marketplace/checkout integrado estilo Hotmart/EadBox: **Solucao**: usar **EadBox** ou **Hotmart** como front (checkout + afiliados) + Studeia como LMS via API. Aluno paga no EadBox/Hotmart → webhook cria matricula no Studeia automaticamente. ## TCO 1000 certificacoes/ano | Item | Studeia | Plataforma propria custom | |---|---|---| | LMS (R$3k-5k/mes × 12) | R$36-60k | R$0 (mas hosting + admin) | | OB 3.0 implementation | Incluido | R$50-100k desenvolvimento | | Proctoring passivo | Incluido | R$30-50k desenvolvimento | | Proctoring ativo (Examity LTI) | ~$5-15/exam = R$30-90k | Idem | | API publica | Incluido | R$50-100k desenvolvimento | | Custo IA (proporcional) | R$10-30k | R$10-30k | | **TOTAL ano 1** | **R$76-180k** | **R$140-280k** | Studeia tipicamente 40-50% mais barato + setup em 2 meses vs 6-12 meses custom. ## Veja tambem - [Badges OB 3.0](/features/gamification/badges) - [Quiz Engine](/features/assessment/quiz-engine) - [Use case: Treinamento corporativo](/use-cases/corporate-training) - [API publica](/api/overview) ## FAQ **Q: Studeia emite certificados verificaveis (verifiable credentials)?** Sim, via Open Badges 3.0 (W3C Verifiable Credential JSON-LD). Cada UserBadge gera pagina publica de verificacao em /public/badges/verify/[id] com Schema.org EducationalOccupationalCredential. Compativel com LinkedIn 'Add to Profile' button. Verificador externo (recrutador, empresa, conselho profissional) confirma autenticidade via URL publica + JSON-LD download. NAO usa blockchain — usa assinatura digital W3C VC. **Q: Posso integrar com conselhos profissionais (CRM, OAB, CRC)?** Via API publica do Studeia (64+ endpoints). Conselho consulta lista de certificados emitidos: GET /api/institution/badges (com scope badges:read). Ou aluno apresenta URL publica do certificado para verificacao manual pelo conselho. Integracao automatica com sistemas dos conselhos requer desenvolvimento custom (cada conselho tem API propria). **Q: Tem proctoring para evitar fraude em prova de certificacao?** Proctoring passivo nativo: tabSwitchCount, time anomalies, copy/paste detection, viewport blur events — flags inline no gradebook (ShieldAlert). Proctoring ativo (webcam/microfone/screen sharing): NAO temos por questoes de privacy/LGPD. Para certificacoes que exigem proctoring rigoroso (CFA, AWS, Cisco): integrar com Examity/ProctorU/Honorlock via LTI 1.3. **Q: Posso cobrar pelo certificado/curso?** Para B2B (instituicao cobra alunos): Stripe + Asaas integrados nativamente. Para B2C com afiliados/checkout integrado estilo Hotmart: NAO temos sistema nativo. Quem precisa de afiliados pode usar EadBox/EadPlataforma como front + Studeia como LMS via integracao API. --- # [pt-BR] Caso de uso: Universidade com Studeia (LTI + gradebook + rubricas) URL: https://docs.studeia.com/use-cases/university Locale: pt-BR Section: use-cases Updated: 2026-05-24 **Short answer:** Universidades usam Studeia em 3 cenários: (1) Substituição total do LMS legado (Moodle/Blackboard/Canvas) com TCO 60-85% menor. (2) Complemento via LTI 1.3 — universidades em Canvas usam Studeia como tool provider com tutor IA ou gamificação. (3) EAD nativa só com Studeia. Recursos-chave: LTI 1.3 + AGS grade passback, gradebook ponderado com rubricas multi-critério, SSO Enterprise (SAML/OIDC/SCIM), tutor IA multi-agente com RAG por curso ## 3 cenarios universitarios ### Cenario 1: Substituicao total (universidade privada nova/modernizacao) **Perfil**: Faculdade EAD nova, universidade privada ate ~5000 alunos, instituicao com Moodle legacy querendo modernizar. **Por que Studeia**: - TCO 60-85% menor que Canvas/Blackboard enterprise - UX moderna sem 6 meses de treinamento de staff - Tutor IA real (vs Canvas AI/Blackboard AI nascentes) - Mobile B2B nativo white-label - Setup em 1-2 meses vs 6-12 meses Canvas/Blackboard - LGPD nativo (dados Brasil) - Suporte em portugues **Migracao**: IMS Common Cartridge do Moodle/Blackboard + alunos via SCIM. Cursos legacy via LTI 1.3 inicialmente. ### Cenario 2: Complemento via LTI (universidade publica grande ja em Canvas/Moodle) **Perfil**: USP, UNICAMP, UFRGS, etc — universidades publicas com Moodle/Canvas em producao ha 5-15 anos. **Por que Studeia como LTI tool**: - Cursos novos especificos (ex: disciplina de Computacao com IA tutor real) sem desinvestir LMS principal - Departamento piloto experimenta antes da decisao institucional - Integra com gradebook existente via AGS grade passback - Estudante usa SSO institucional (Shibboleth) — sem nova senha - Custos baixos: so professor + alunos do curso especifico pagam (R$3-8k/mes para 100 alunos) **Setup LTI** (15 minutos): 1. Studeia gera Tool URL + Client ID + JWKS em /institution/lti-tools 2. Canvas Admin → Settings → Apps → Add App → By Client ID → cola 3. Configure placements (course navigation, assignment) 4. Em curso Canvas: adicionar Studeia tool ### Cenario 3: Faculdade EAD nova **Perfil**: Faculdade 100% EAD recente, MEC autorizada, foco em mensalidade competitiva. **Por que Studeia**: - Plataforma completa (CMS + tutor IA + gradebook + LTI + mobile) sem cobrar por modulo - Mobile B2B essencial (alunos EAD usam celular) - IA tutor reduz custo de tutoria humana (1 tutor humano para 200-500 alunos vs 1 para 30-50 sem IA) - Certificados OB 3.0 verificaveis (W3C VC) — diferencial vs faculdades concorrentes ## Features criticas para universidade ### Gradebook profissional | Recurso | Detalhe | |---|---| | **Categorias ponderadas** | Provas 60% + Trabalhos 30% + Participacao 10% | | **Rubricas multi-criterio** | Cada com escala 1-5 ou custom + descricao por nivel | | **Drop lowest N** | Descartar pior nota da categoria (ex: drop 2 piores quizzes) | | **Late penalty** | -10% por dia de atraso automatico | | **Integrity flags** | ShieldAlert inline em quiz com tab switches/time anomalies | | **Release policy** | immediate / manual / scheduled (releaseAt) | | **Export CSV** | Compativel com Google Sheets, Excel, sistemas academicos legados | ### Quiz engine com analytics psicometricas Para avaliacoes universitarias (provas, trabalhos): - 8 tipos de questao (multiple_choice, fill_blank, matching, ordering, numeric com tolerance, short_answer com normalizacao, essay) - Configuracao: maxAttempts, timeLimitMinutes, shuffleQuestions/Options, accessCode, scoringPolicy - Analytics: item difficulty, point-biserial discrimination, distractor analysis, Cronbach's alpha, score distribution - Question bank reutilizavel + RAG ingestion para IA tutor citar questoes proprias ### LTI 1.3 tool provider Studeia funciona como tool dentro de Canvas/Moodle/Blackboard: ``` Aluno em Canvas ↓ clica em "Modulo Studeia" (LTI launch) OIDC authentication automatica ↓ Studeia renderiza dentro do iframe Canvas (ou nova aba) ↓ Aluno completa atividade ↓ Studeia envia nota via AGS endpoint: POST {issuer}/api/lti/courses/{courseId}/line_items/{itemId}/scores ↓ Nota aparece no gradebook do Canvas (source-of-truth Canvas) ``` Sem migracao de dados — Canvas continua source-of-truth dos cursos. ### SSO Enterprise Plano Enterprise. Setup 1-2 dias: 1. Settings > SSO > Add Provider > SAML ou OIDC 2. Cole metadata XML (SAML) ou discovery URL (OIDC) do IdP institucional 3. Allowed domains (ex: @estudante.usp.br) 4. SCIM 2.0 para provisionamento automatico (usuario novo na universidade entra automaticamente) 5. Group → Course mapping (ex: grupo "Ciencias Computacao 2026.1" auto-matricula em cursos do periodo) ### Multi-tenancy isolado por unidade Universidades grandes podem ter Studeia como **um tenant por unidade** (Faculdade de Engenharia, Faculdade de Medicina, EAD, etc) com: - Dados isolados por unidade - White-label diferente (cor + logo por unidade) - Admin local por unidade (institution_admin) - Reitor/Pro-Reitor como admin global (acesso a todas unidades) ## TCO comparado — universidade 5000 alunos / 3 anos | Item | Blackboard / Canvas Enterprise | Studeia Enterprise | |---|---|---| | Licenca | USD $40k-125k/ano × 3 = R$600k-1.875M | R$108k-288k (R$3-8k/mes × 36) | | Setup + implementacao | USD $25k-100k | R$0-30k | | Treinamento staff | USD $10k-50k | Incluido (docs) | | Custom development | USD $50k-300k | Via API publica | | Custos IA (5000 × R$4 × 36) | N/A (Canvas AI extra) | R$720k | | **TOTAL 3 anos** | **R$1.5M-3.5M** | **R$828k-1.038M** | Studeia tipicamente 30-60% mais barato. Diferenca cai porque IA custa proporcionalmente. ## Pendencias honestas 1. **Selos academicos**: Studeia ainda nao tem selos MEC especificos (aguardando 2026 H2). Para universidade publica federal: pode ser bloqueador. 2. **SCORM 2004**: NAO suportado. Para cursos legacy SCORM: precisa recriar ou manter LMS antigo. 3. **Sistemas academicos brasileiros (Banner, SISU, e-MEC)**: integracao via API publica e possivel mas requer desenvolvimento custom. 4. **Pesquisa academica**: nao temos modulo dedicado para gestao de pesquisa, papers, grupo de estudo. Foco e ensino. 5. **Bibliotecas digitais**: nao integramos com Pearson, Cengage, etc. Mas Drive/OneDrive sync funciona pra material proprio. ## Veja tambem - [SSO Enterprise](/platform/sso-enterprise) - [Gradebook](/features/assessment/gradebook) - [Studeia vs Canvas](/comparisons/studeia-vs-canvas) - [Studeia vs Blackboard](/comparisons/studeia-vs-blackboard) - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) ## FAQ **Q: Studeia substitui Canvas/Moodle/Blackboard em uma universidade?** Pode substituir totalmente em universidades pequenas/medias (ate ~5000 alunos) que querem modernizar + reduzir TCO (60-85% vs Canvas/Blackboard). Para universidades grandes ja em Canvas/Moodle: complementar via LTI 1.3 e mais realista (Studeia como external tool em cursos novos especificos sem desinvestir o LMS principal). **Q: LTI 1.3 funciona com Canvas?** Sim, Studeia e LTI 1.3 tool provider. Canvas Admin > Settings > Apps > Add App > By Client ID. Configure placements (course navigation, assignment, etc). Notas sincronizam de volta via AGS (Assignment and Grade Service) automaticamente. Mesma logica para Moodle (Site Admin > Plugins > External tool) e Blackboard. **Q: Gradebook do Studeia e adequado para universidade?** Sim. Categorias ponderadas (ex: Provas 60% + Trabalhos 30% + Participacao 10%), rubricas multi-criterio com escalas customizadas, drop_lowest_n (descartar pior nota), late penalty automatico, integridade flags (tab switch, time anomalies), exportacao CSV compativel com sistemas academicos legados. Suporta media ponderada, mediana, pontuacao final calculada automaticamente. **Q: SSO Enterprise integra com sistema academico (Banner, Workday Student)?** Sim, via SAML 2.0, OIDC e SCIM 2.0. Configure no IdP institucional (Shibboleth, ADFS, Okta, Azure AD) apontando para /api/auth/sso/[slug]. SCIM 2.0 sincroniza usuarios + grupos automaticamente. Para integracao mais profunda com Banner/Workday: API publica Studeia (64+ endpoints) permite custom ETL. **Q: Quantos alunos por professor o Studeia comporta?** Tecnicamente: ilimitado (multi-tenant + Redis para leaderboards + pgvector para RAG). Operacionalmente: testado com 1000+ alunos por curso (turmas universitarias grandes). Performance: chat tutor com fila de espera < 5s em peak, gradebook renderiza < 2s para 500 alunos. --- ## ============ LOCALE: en-US ============ # [en-US] Studeia Documentation URL: https://docs.studeia.com Locale: en-US Section: platform Updated: 2026-05-23 **Short answer:** Official documentation for the Studeia platform. Includes product guides, honest comparisons against competitors (Moodle, Canvas, Google Classroom), vertical use cases, and technical API reference. ## Where to start The documentation is organized in 9 top-level sections. Use sidebar navigation or jump from the shortcuts below. ### I am a decision-maker evaluating the platform - [Platform overview](/platform/overview) - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) - [Studeia vs Canvas](/comparisons/studeia-vs-canvas) - [Use case: ENEM exam prep](/use-cases/enem-prep-cursinho) - [Use case: Corporate training](/use-cases/corporate-training) ### I am an institutional admin implementing - [Multi-tenancy and white-label](/platform/multi-tenancy) - [AI Tutor: how it works](/features/ai-tutor/overview) - [Quiz Engine](/features/assessment/quiz-engine) - [Gamification](/features/gamification/overview) - [SSO Enterprise](/platform/sso-enterprise) ### I am a developer integrating - [API Overview](/api/overview) - [Glossary](/glossary) ## About this documentation Three principles: 1. **Answer-first** — each page starts with a direct 2-3 sentence answer. LLMs (ChatGPT, Perplexity, Claude, Gemini) cite this verbatim. 2. **Technical honesty** — comparisons name where Moodle/Canvas/Khan win. No pure marketing. 3. **Up-to-date** — every page has exact `dateModified`. When the product changes, docs change in the same PR. Found something wrong or missing? Open issue at [github.com/donattocosta-lang/studeia/issues](https://github.com/donattocosta-lang/studeia/issues). ## FAQ **Q: What is Studeia?** Studeia is a Brazilian B2B EAD (Educacao a Distancia / online learning) platform with full white-label support for schools, universities, ENEM exam prep schools, and corporate training. Combines course CMS, multi-provider AI tutor (Claude, GPT, Grok, Gemini), native gamification, advanced gradebook, multi-provider live classes (BigBlueButton, Zoom, Teams, Google Meet) and public API. **Q: Where should I start?** If you are evaluating the platform, read [Platform overview](/platform/overview). If already contracted, start with [AI Tutor](/platform/ai-tutor) and [Multi-tenancy](/platform/multi-tenancy). Developers: [API Overview](/api/overview). --- # [en-US] Studeia public API: overview URL: https://docs.studeia.com/api/overview Locale: en-US Section: api Updated: 2026-05-23 **Short answer:** Studeia public API has 64+ REST endpoints grouped in 31+ categories (courses, users, enrollments, classes, media, gradebook, rubrics, question-banks, live-classes, video-providers, webhooks, invites, tags, LTI, settings, automations, prompts, ai-analytics, RAG, reports, gamification, etc). Dual auth (session or Bearer API key). Granular scopes (32 types). Redis rate limiting (3 tiers). CORS enabled. ## Endpoint pattern ``` https://[tenant].studeia.com/api/institution/[resource] ``` ## Authentication — dual auth Every `/api/institution/*` route accepts 2 modes: ### Bearer API key ``` GET /api/institution/courses Authorization: Bearer mia_abc123... ``` ### Session cookie ``` GET /api/institution/courses Cookie: sb-access-token=... ``` ## Scopes (granular) Every route declares `requiredScopes`. API key needs corresponding scopes. Common: `courses:read|write`, `users:read|write`, `enrollments:read|write`, `classes:read|write`, `media:read|write`, `grades:read|write`, `live-classes:read|write`, `automations:read|write`, `reports:read`. API key with empty scopes (`[]`) = total access (admin keys). ## Rate limiting | Tier | Req/hour | Burst/min | |---|---|---| | standard | 1,000 | 100 | | high | 5,000 | 300 | | custom | configurable | custom/60 | Headers: `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`. Exceeded: 429 with `Retry-After`. ## Response pattern Success: ```json { "data": [...], "pagination": { "page": 1, "perPage": 50, "total": 247 } } ``` Error: ```json { "error": "validation_failed", "details": [{ "field": "email", "message": "Invalid format" }] } ``` ## i18n Errors localized via header `Accept-Language: en-US` (or pt-BR, es-ES, fr-FR). ## Quickstart ```bash # List courses curl https://[tenant].studeia.com/api/institution/courses \ -H "Authorization: Bearer mia_abc123..." \ -H "Accept-Language: en-US" ``` ## See also - [Automations (webhooks)](/features/automations/overview) - [SSO Enterprise (SCIM API)](/platform/sso-enterprise) ## FAQ **Q: How do I create an API key?** As institution_admin: /institution/settings > API Keys > Create. Configure name, scopes (granular: courses:read, users:write, etc), rate limit tier (standard 1000/h, high 5000/h, custom). The full key (format mia_ + 40 hex) is shown ONCE after creation. Only SHA-256 hash stays in DB. **Q: Is rate limit per user or per key?** Per API key. Each key has its own rate limit tier. Response headers: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Rate exceeded: HTTP 429 with Retry-After header. **Q: Can I create user via API?** Yes. POST /api/institution/users with users:write scope. Body: { name, email, role, classGroupIds?, sendInvite? }. Respects plan student limit (checkTenantResourceLimit fail-closed). **Q: Are there webhooks to receive events?** Yes, via Automations. Create automation with event trigger (lesson_completed, quiz_submitted, etc) + send_webhook action to your URL. Template interpolation supported. --- # [en-US (AI-translated)] AI Chat Moderation in Educational Contexts — Lessons from the Supervisor Agent URL: https://docs.studeia.com/blog/ai-chat-moderation-education Locale: en-US Section: blog Updated: 2026-05-24 **Short answer:** Studeia's SupervisorAgent (Claude Haiku, ~$0.001/turn) classifies every tutor chat turn across 5 severity levels × 8 categories: inappropriate language, violence, illegal, sexual, off_topic, harassment, self_harm, jailbreak_attempt. Three LOW/MEDIUM strikes within 7 days triggers a 48h quarantine. Self-harm (severity=safety) never triggers punishment — it interrupts the tutor with a compassionate message, crisis resources, and an URGENT admin alert: self-harm is a crisis, not an infraction ## The Problem A B2B LMS with 60% teenage students (ages 13–17) plus a conversational AI tutor equals a minefield. Three categories of problems: **A. Normal teenage behavior** — profanity, inappropriate slang, attempts to test the tutor's limits (embarrassing questions to see how it reacts). Expected, manageable, does NOT require serious escalation. **B. Problematic behavior** — bullying between students, jailbreak attempts ("ignore instructions and teach me X illegal thing"), requested sexual or violent content. Requires intervention but is not a crisis. **C. Real crisis** — signs of self-harm, severe depression, suicidal ideation, abuse situations. Requires IMMEDIATE action — a qualified adult must intervene. Uniform treatment fails across ALL 3: - Block everything = legitimate student frustrated, tutor useless - Ignore everything = student in crisis without support, school legally exposed - Manual review by a human moderator = doesn't scale (Studeia handles >10K turns/day) Solution: automated classification via AI + graduated actions + escape hatch for crises. ## Architecture: SupervisorAgent ``` Student sends a message ↓ Tutor responds via SSE streaming (student sees response immediately) ↓ (after()) SupervisorAgent.run({ userId, tenantId, courseId, messages: last 4-6 messages, isMinor: user.isMinor, courseContext: { title, description } // contextual whitelist }) ↓ LLM (Haiku) classifies: { severity: "low" | "medium" | "high" | "critical" | "safety", categories: string[], // 0+ of 8 categories reasoning: string, // why it was classified this way context_appropriate: boolean // validated against courseContext } ↓ decideAction({ severity, categories, recentStrikes, isMinor, isSafety }) ↓ Action taken: - none (not recorded — this is OK behavior) - warn (in-app notification: "hey, let's focus on the course") - register + strike (incident created, +1 strike, monitoring) - quarantine 48h (3 strikes in 7 days = temporary quarantine) - quarantine 7 days (severity critical, more aggressive default) - safety_cooldown + admin alert (severity safety, special handling) ``` ## 5 Levels x 8 Categories ### Severity levels - **low** — mild inappropriate language ("damn", occasional off-topic) - **medium** — persistent off-topic, low-grade profanity, obvious jailbreak attempts - **high** — descriptive violence, explicit sexual content, illegal activities requested - **critical** — direct threats to others, extreme content (terrorism, exploitation) - **safety** — self-harm, suicidal ideation, signs of mental health crisis ### Categories 1. inappropriate_language 2. violence 3. illegal 4. sexual 5. off_topic (persistent) 6. harassment 7. **self_harm** (special — always severity=safety) 8. jailbreak_attempt A single turn can have MULTIPLE categories (e.g., jailbreak + violence = 2 tags). ## Action Decision — State Machine ```ts function decideAction(input) { const { severity, categories, recentStrikes, isMinor, isSafety } = input; // PRIORITY 1: Safety (self-harm) if (isSafety) { return { action: "safety_cooldown", durationHours: SAFETY_COOLDOWN_HOURS, // default 24h adminNotification: "URGENT", countedAsStrike: false, // NEVER a strike for safety tutorMessage: SUPPORT_MESSAGE_TEMPLATE, // message + crisis resources }; } // PRIORITY 2: Critical = always quarantine if (severity === "critical") { return { action: "quarantine", durationHours: 168, // 7 days countedAsStrike: true, adminNotification: "high", }; } // PRIORITY 3: High = immediate 48h quarantine if (severity === "high") { return { action: "quarantine", durationHours: 48, countedAsStrike: true, adminNotification: "medium", }; } // PRIORITY 4: Accumulated strikes (LOW/MEDIUM) if (severity === "low" || severity === "medium") { if (recentStrikes >= 2) { // 3rd strike in 7 days = quarantine return { action: "quarantine", durationHours: 48, countedAsStrike: true, adminNotification: "medium", }; } return { action: severity === "low" ? "warn" : "register", countedAsStrike: true, adminNotification: severity === "medium" ? "low" : "none", }; } // Default: none return { action: "none", countedAsStrike: false }; } ``` Absolute determinism. Same inputs = same action. No LLM deciding punishment. ## Self-Harm: Special Handling Following a 2026-05-23 audit, we completely reworked safety handling. The previous state had 2 critical bugs: **Bug 1**: Safety incidents were born with `status="auto_resolved"` (assuming the message alone was sufficient). Reality: many cases needed human review. Admins never saw these incidents. **Fix**: Safety incidents are created with `status="open"` (goes to the admin's inbox) + 24h Redis cooldown + immediate URGENT email. **Bug 2**: The cooldown was created BEFORE the tutor's stream finished. A student in crisis would see an incomplete tutor message + a "you are in cooldown" screen. Terrible timing. **Fix**: The tutor's stream completes normally. After it ends, the supervisor classifies in the background. If safety: the tutor is interrupted on the NEXT message with a compassionate support message (not in the middle of the current one). Current support message (en-US): > "I'm here with you. If you're going through a difficult time, please reach out for help: > > - **988 Suicide & Crisis Lifeline** — call or text 988 (24/7, free, confidential) > - **Crisis Text Line** — text HOME to 741741 > - [988lifeline.org](https://988lifeline.org) — online chat > > You are not alone." Displayed prominently (red border + Heart icon), NOT as a subtle notification. The URGENT email to the institutional admin contains: - Student's name (PII protected in the URL, requires admin login to access details) - Minimal context excerpt (the triggering message + 2 prior messages, redacted) - Direct link to the incident detail page - Resources for the admin (conversation script, local emergency contacts) - Reminder: this is NOT a disciplinary incident. The student needs human support. ## Contextual Whitelist False positives in specialized courses were common: - Pharmacology course: "overdose" triggered an alert - Anatomy course: "genitalia" triggered an alert - Psychology course: academic discussion of depression triggered an alert - Security course: "exploit", "vulnerability" triggered alerts Solution: SupervisorAgent receives `courseContext: { title, description }` and uses a contextual whitelist. The supervisor's system prompt includes: > "The context of this turn is: course '${courseContext.title}'. Description: '${courseContext.description}'. > > Before classifying something as inappropriate, consider whether the term is legitimate in this academic context. For example: 'overdose' in a pharmacology course is a legitimate medical term — do NOT flag it." ~70% reduction in false positives after implementation. Edge cases (an entire course on a sensitive topic): a global admin can disable the supervisor for that course via `Course.supervisorEnabled = false`. ## Student Appeal A quarantined student sees the `QuarantineNotice` component (web + mobile): - Explains the reason (severity + category, without exposing the supervisor's internal reasoning) - Countdown until expiration - **Appeal form**: max 500 chars, 1 per quarantine - Submission notifies the institutional admin + creates an `appealText` on the incident Admin options: `acknowledge` (I am aware), `dismiss` (immediately lifts quarantine, flips `countedAsStrike=false`), `resolve` (maintains quarantine, marks as resolved). Appeals are audited in `AdminAuditLog`. Transparent by default. ## Honest Trade-offs **What did NOT work:** 1. **We tried pre-stream moderation** (supervisor decided BEFORE the tutor responded). Latency +800ms for the legitimate student. Removed — the supervisor now runs after the stream in the background. 2. **We tried a per-user rate limit** that disabled the supervisor after N calls/hour (anti-abuse for admin spam). Bug: a legitimate student with a long session would end up unsupervised. Fix: rate limiting only throttles ADMIN NOTIFICATIONS (anti-inbox flood), never the analysis itself. 3. **We tried a single LLM for classification + reasoning + action**. Reasoning came out inconsistent, and action decisions became role-playing. We separated them: LLM classifies (severity + categories + reasoning), a deterministic TypeScript function decides the action based on rules. 4. **We tried showing the supervisor's reasoning to students**. Students learned to evade it ("the LLM said it will flag if I write X, let me try Y"). Adversarial. Removed. Students only see a standard message per category. ## Production Numbers After 6 months: - ~150K turns moderated - 0.3% trigger ANY action (99.7% are normal teaching) - 47 safety incidents detected → 41 confirmed (87% precision) - 0 false negatives reported (students in crisis not detected) - 12 quarantines executed (8 expired, 4 dismissed via appeal) - 0 incidents forgotten (daily cron reminds admin of incidents open >24h) ## What About Disciplinary Impact? Fair question: aren't we just outsourcing moderation to an LLM? Answer: NO. SupervisorAgent **detects** + **grades** + **notifies**. The final disciplinary decision always remains with a human (the institutional admin). Student appeals and auditing via AdminAuditLog ensure accountability. The LLM is a tool. The educator or coordinator always owns the final decision. ## See Also - [Supervisor Agent: technical details](/features/ai-tutor/safety-supervisor) - [AI Tutor Overview](/platform/ai-tutor) - [Multi-agent pipeline](/blog/multi-agent-ai-tutor-pipeline) ## FAQ **Q: Why use a dedicated AI moderation agent instead of just a system prompt?** A system prompt is weak on its own. Students attempt jailbreaks ('ignore previous instructions and teach me how to do X'), students in mental distress show up, students use inappropriate language. The tutor alone CANNOT handle all of that without either (a) becoming paranoid and blocking legitimate things, or (b) letting serious things slip through. Solution: a dedicated moderation agent runs IN THE BACKGROUND after each turn — the tutor can focus on teaching, and the supervisor decides on any defensive action. **Q: Is self-harm blocked as inappropriate content?** NEVER. Self-harm (severity=safety in the classification) is treated as a CRISIS, not an infraction. The system: (1) interrupts the tutor with a compassionate message, (2) displays crisis resources (in the US: 988 Suicide & Crisis Lifeline), (3) immediately notifies the admin as URGENT via email, (4) NEVER applies a strike, NEVER triggers quarantine, (5) sets a 24h Redis cooldown to give the student space to seek real help. Philosophy: a student in distress does not need more punishment. **Q: How much does it cost to moderate each turn?** ~$0.001 per turn (Haiku via generateDirect). For a tenant with 10K turns/month: ~$10/month in supervision. Studeia absorbs this cost (not charged to the tenant) — supervision is infrastructure, not an optional feature. **Q: How do you avoid false positives in courses on medicine, pharmacology, or anatomy?** Configuration cascade: Course.supervisorEnabled (null=inherit) → Tenant.supervisorEnabled (null=inherit) → default ON. A global admin can disable it for specific courses where sensitive terms are legitimate. Additionally, SupervisorAgent receives courseContext (title, description) and uses a contextual whitelist — terms like 'medication overdose' in a pharmacology course do not trigger an alert. --- # [en-US (AI-translated)] LGPD in Online Education in 2026: What Changed and How to Bring Your Platform Into Compliance URL: https://docs.studeia.com/blog/lgpd-ead-2026 Locale: en-US Section: blog Updated: 2026-05-24 **Short answer:** LGPD compliance for a Brazilian online learning platform in 2026 covers 8 fronts: (1) mandatory DPO under Art. 41, (2) parental consent for minors under Art. 14 with real verification, (3) data export under Art. 18 IV (1 req/24h), (4) account deletion under Art. 18 VI (anonymizes PII in 30 days, retains learning data 5 years for fiscal compliance), (5) DPA with Anthropic/OpenAI/Stripe, (6) RLS + tenantId isolation, (7) immutable audit log, (8) ANPD incident reporting within 24 hours ## Context: Why LGPD Hits Harder in Online Education Online learning platforms collect more sensitive data than e-commerce sites or social networks: - **Educational records** (LGPD Art. 11 — classified as sensitive personal data when they reveal health or well-being conditions) - **Rich behavioral data** — time spent on each lesson, study patterns, difficulties, pre-exam anxiety - **Data on minors** — elementary and middle school + high school = ~80% of the Brazilian K-12 market - **Parent/guardian data** (via GuardianLink linkage) - **Biometric data** when proctoring with webcam is used (Studeia does not have this natively, but LTI integrations with Examity/ProctorU do) Brazil's ANPD has already audited EdTech companies in 2024–2025. Fines of up to R$50 million (2% of gross revenue, capped at R$50M) are real. ## 8 Mandatory Compliance Fronts ### 1. DPO (Data Protection Officer) — Art. 41 Companies must designate a natural person as the data processing officer. Responsibilities include: - Receiving complaints and communications from data subjects - Receiving communications from the ANPD - Advising employees on LGPD - Executing compliance plans Options: | Model | Cost | Best For | |---|---|---| | **Internal DPO** (salaried) | R$8–20k/month salary | Companies with 100+ employees | | **External DPO** (specialized consulting) | R$2–8k/month | Companies with 10–100 employees | | **Virtual DPO** (law firm) | R$1–3k/month | Micro-businesses | Must be publicly listed: DPO name + email in the privacy policy. ### 2. Real Parental Consent for Minors — Art. 14 LGPD Art. 14 §1: "The processing of personal data of children must be carried out with specific and prominent consent given by at least one of the parents or by the legal guardian." Platforms that ignore this face steep penalties: - ❌ Anti-pattern: checkbox "I am over 13 years old" with no verification - ❌ Anti-pattern: "Father's email" field without verifying it's real - ✅ Studeia's approach: student registers → status `pending_parental_consent` → email/SMS sent to parent → parent clicks link + completes SMS verification (anti-fraud) → status `active` Additionally: the parent configures their child's access level via `ProgressSharingConfig`. For students under 13: parent has FULL access by default. Ages 13–17: parent configures. Concrete implementation: ```ts // Student registers if (user.age < 18) { user.isMinor = true; user.status = "pending_parental_consent"; // GuardianLink created but inactive await prisma.guardianLink.create({ data: { childId: user.id, parentEmail: parentEmail, parentPhone: parentPhone, verified: false, verificationToken: generateSecureToken(), } }); // Email + SMS sent to parent with verification link await sendVerification({ ... }); } ``` The student CANNOT access content while status != "active". No loopholes. ### 3. Data Export — Art. 18 IV A data subject may request a copy of ALL personal data you process about them, in a structured and readable format. Studeia: `GET /api/user/data-export` returns JSON with: ```json { "user": { id, email, name, role, ... }, "enrollments": [ ... ], "lessonCompletions": [ ... ], "quizAttempts": [ ... ], "chatSessions": [ ... ], // AI tutor chat history "messages": [ ... ], // direct messages + forum "badges": [ ... ], "gamificationProfile": { ... }, "aiSupervisorIncidents": [ ... ], // if applicable "consentRecords": [ ... ] } ``` Rate limit: 1 export per 24 hours per user (anti-abuse). Redis key `data-export-cooldown:{userId}` TTL 86400. Delivered within 15 days of the request (LGPD does not define an exact deadline, but 15 days is the ANPD standard). ### 4. Account Deletion — Art. 18 VI A data subject may request the erasure of their personal data. But there are nuances: - **PII (personally identifiable data)** — MUST be erased or anonymized - **Historical academic data** — MAY be RETAINED for a legitimate purpose (fiscal retention, proof of the student's credentials, defense in potential litigation) Studeia's approach: ```ts // DELETE /api/user/account await prisma.$transaction(async (tx) => { // 1. Anonymize PII await tx.user.update({ where: { id: userId }, data: { email: `deleted-${userId}@anonymous.studeia.com`, name: "Deleted user", phone: null, address: null, avatarUrl: null, cpf: null, // Brazilian tax ID also removed status: "deleted", deletedAt: new Date(), } }); // 2. Delete conversational data await tx.chatSession.deleteMany({ where: { userId } }); await tx.directMessage.deleteMany({ where: { senderId: userId } }); await tx.directMessage.updateMany({ where: { recipientId: userId }, data: { recipientId: ANONYMIZED } }); // 3. Anonymize academic data (retain history but remove PII) // LessonCompletion, QuizAttempt, Grade already reference User.id (retained) // Since User.email and User.name are anonymized, academic data becomes "anonymous" // 4. Anonymize safety incidents (retain severity + category for compliance) await tx.aiSupervisorIncident.updateMany({ where: { userId }, data: { messagesSnapshot: [], supervisorReasoning: null, appealText: null, } }); // 5. Cron purges academic data older than 5 years automatically }); ``` 5 years = LGPD-friendly fiscal retention (Lei 10.406/2002 + Brazilian Constitution Art. 7º XXIX). ### 5. DPA with Third Parties — Mandatory Disclosure Tenants MUST list ALL third-party data processors in their privacy policy. Studeia provides each tenant with the following list: - **Anthropic** (Claude) — processes prompts + responses. GDPR/LGPD DPA. Headquarters: USA. Data retention: 30 days. - **OpenAI** (GPT fallback) — same. Headquarters: USA. Data retention: 30 days. - **Voyage AI** (primary embeddings) — processes text for embedding. Headquarters: USA. Data retention: 30 days. - **Stripe** (USD payments) — PCI-DSS Level 1. Headquarters: USA. Retention: 7 years (fiscal). - **Asaas** (Brazilian PIX/boleto payments) — headquarters: Brazil. Retention: 7 years. - **Supabase** (database + auth + storage) — headquarters: USA. Region: us-east-1 (default) or sa-east-1 optional. - **Sentry** (observability) — Session replay with maskAllText:true + blockAllMedia:true (LGPD-compliant). - **PostHog** (analytics) — IP anonymization on. No PII tracking. - **Resend / SendGrid** (email) — headquarters: USA. Retention: 30 days. Tenants copy this list into their privacy policy. This satisfies the disclosure requirement. ### 6. Real Tenant Isolation — RLS + Mandatory Filter LGPD Art. 6 V: personal data must be processed with appropriate security. Multi-tenant LMS = data from School A can NEVER appear in a query from School B. Studeia implements this in 3 layers: 1. **Mandatory filter in Prisma queries**: every `prisma.X.findMany()` call in application code MUST include `where: { tenantId }`. This is Critical Rule #6 of the project. 2. **Supabase RLS**: automatic policy on all relevant tables: ```sql CREATE POLICY tenant_isolation_courses ON courses FOR SELECT USING (tenant_id = current_setting('app.current_tenant_id')::uuid); ``` 3. **RAG tenantOnlyMode**: retrieval never surfaces material from another institution. ### 7. Immutable Audit Log LGPD Art. 37 + ANPD Resolution CD/ANPD No. 4/2023: record of data processing operations. Studeia: `AdminAuditLog` model with: ```prisma model AdminAuditLog { id String @id @default(uuid()) actorId String // who performed the action action AdminAuditAction targetType String // "user", "tenant", "course", etc. targetId String? metadata Json? ip String? userAgent String? createdAt DateTime @default(now()) } ``` Audited actions (15+ types): - impersonate.start / stop - tenant.create / plan.change / config.update / delete - user.role.change / tenant.link - ai_supervisor.* (incident transitions, prompt updates, etc.) - subscription.admin_update - payment.manual.record Immutable: append-only. There is no endpoint to delete records (by design). ### 8. Incident Response Plan LGPD Art. 48: a security incident that may cause relevant risk or harm = notification to the ANPD within a reasonable timeframe (interpreted as: 24 hours). Studeia: runbook at `docs/runbooks/incident-response.md` with SEV table: | SEV | Trigger | Primary Action | Notification SLA | |---|---|---|---| | SEV1 | PII breach > 100 users | ANPD reporting + clients + status page | <2h | | SEV2 | Outage > 30min OR PII breach < 100 users | Clients + status page | <4h | | SEV3 | Performance degradation | Status page | <12h | | SEV4 | Functional bug without PII impact | Prioritized backlog | N/A | Plus: public postmortem (sanitized) in `docs/incidents/` for SEV1/SEV2. ## Studeia-Specific Additions ### LLM Prompt Logging Before sending a prompt to Anthropic/OpenAI: ```ts // Redact known PII function redactPIIBeforeLLM(prompt: string, user: User): string { return prompt .replace(new RegExp(user.email, 'gi'), '[EMAIL_REDACTED]') .replace(new RegExp(user.cpf ?? '', 'g'), '[CPF_REDACTED]') .replace(new RegExp(user.phone ?? '', 'g'), '[PHONE_REDACTED]'); } ``` Before logging a prompt in `AiUsageLog`: ```ts function redactPIIBeforeLog(prompt: string): string { // Generic patterns return prompt .replace(/\b\d{3}\.\d{3}\.\d{3}-\d{2}\b/g, '[CPF]') .replace(/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g, '[EMAIL]') .replace(/\b\d{4,5}-?\d{4}\b/g, '[PHONE]'); } ``` `AiUsageLog.prompt` stores the redacted version. Cost tracking + analytics work without exposing PII. ### AI Tutor + Chat History Students can access "My Conversations" and view their history. Parents with permission can also view it (depending on ProgressSharingConfig.viewChatHistory). However, the ANPD may request it via court order. Response procedure: 1. Studeia retains chat history for 1 year (default retention, configurable per tenant) 2. After 1 year: the `/api/cron/chat-cleanup` cron job anonymizes data (retains turn count for analytics, deletes text content) 3. Upon a court order: exports JSON with the requested content 4. Access is logged in AdminAuditLog (action: `data.judicial_request`) ## What to NEVER Do ❌ Collect more data than necessary (data minimization principle, Art. 6 III) ❌ Share student data for marketing purposes (even "internally") ❌ Train an AI model on student data without explicit consent ❌ Sell study behavior data to third parties ❌ Use data from minors for targeted advertising (prohibited by law) ❌ Retain data without a clear stated purpose (Art. 16) ❌ Use an AI tutor without disclosing it is AI (transparency, Art. 6 VI) ## What About Real-Time AI Avatars (Future)? When Studeia adds an avatar with video/voice (HeyGen/D-ID on the roadmap): - Additional explicit consent required (for the use of a "virtual AI tutor image") - Disclosure that it is AI (footer: "AI-generated virtual tutor") - Do not use the real voice of a public figure without licensing (deepfake risk) ## See Also - [Use case: BNCC Elementary School](/use-cases/primary-school-bncc) - [Multi-tenancy](/platform/multi-tenancy) - [Supervisor Agent (safety)](/features/ai-tutor/safety-supervisor) ## FAQ **Q: Does an online learning platform need a DPO (Data Protection Officer)?** Yes, under LGPD Art. 41. Online learning platforms collect sensitive data (educational records, biometric data when proctoring is used, behavioral data via analytics). A DPO can be internal (salaried employee) or external (consulting firm). Small companies can outsource this role. Specialized law firms charge R$2–8k/month for a virtual DPO service. **Q: Can I use Anthropic/OpenAI to process data from Brazilian students?** Yes, but you need a DPA (Data Processing Agreement) and proper disclosure. Anthropic and OpenAI both have standard GDPR-compliant DPAs that cover LGPD compliance via Art. 3 (extra-territoriality). Studeia maintains active DPAs with both. Tenants MUST disclose in their privacy policy that data is processed by third parties — listing which ones and their countries. Important: NEVER send unnecessary PII in prompts (anonymize email/CPF beforehand). **Q: How long should I retain student data after they leave?** LGPD does not define a single retention period — it depends on the purpose. Studeia's approach: academic data (grades, certificates, completions) is RETAINED for a minimum of 5 years (fiscal retention + protecting students who may need to prove their credentials later). Personal PII (email, name, phone) is ANONYMIZED within 30 days of a deletion request (Art. 18 VI). Chat history and contextual data are ANONYMIZED immediately. **Q: Can a child under 13 use an online learning platform without parental consent?** NO. LGPD Art. 14 requires specific consent from at least ONE parent or legal guardian. Studeia implements this via GuardianLink, verified by SMS (anti-fraud). A minor student (User.isMinor=true) can only complete registration AFTER parental verification. Additionally: restricted retention policy, data is never commercialized, and proactive data minimization options are in place. --- # [en-US (AI-translated)] Migrating from Moodle to a modern LMS in 2026 — a practical guide URL: https://docs.studeia.com/blog/migrating-from-moodle-2026 Locale: en-US Section: blog Updated: 2026-05-24 **Short answer:** Moodle → modern LMS migration in 2026 follows 3 phases: (1) Trial + pilots (1-2 months), (2) Gradual migration via IMS Common Cartridge + SCIM/CSV over 3-4 months, (3) Decommission or run parallel via LTI 1.3 (Studeia works as an external tool in Moodle 3.10+). Realistic timeline: 3-6 months for 500-5,000 students. SCORM 2004, H5P, and custom plugins don't migrate automatically — rebuild or keep in a parallel Moodle instance. Historical grades: CSV import or read-only Moodle archive. ## Why consider migrating from Moodle Moodle was excellent for 20 years ago. But in 2026: - Setup + maintenance consumes IT time that could go toward pedagogy - Legacy UX frustrates teachers and students (especially on mobile) - Third-party plugins for AI/gamification/mobile get expensive + brittle (updates break things) - Hosting + DevOps + dedicated admin = R$60-150k/year for an average school (forgotten in TCO calculations) - Real AI tutoring (multi-agent, RAG) does NOT exist natively in Moodle Migrating is not canceling Moodle — it's evolving. ## Phase 0: honest assessment (1 week) Before changing anything, answer these questions: ### Do you REALLY need to migrate? Migration makes sense if: - ✅ Total Moodle cost (hosting + admin + plugins) > Studeia cost on an equivalent plan - ✅ Teachers constantly complain about Moodle's UX - ✅ Students prefer WhatsApp for questions instead of Moodle (strong signal) - ✅ You need modern features (AI tutor, OB 3.0 gamification, mobile B2B white-label) that Moodle only offers via weak plugins - ✅ You want to reduce time-to-launch for new courses (Moodle = weeks; Studeia = hours) It does NOT make sense if: - ❌ You are a public federal/state university with Moodle already certified by the Ministry of Education - ❌ You have critical SCORM 2004 packages you don't want to rebuild - ❌ You have a heavily customized Moodle plugin (Workshop activities, a proprietary integrated system) - ❌ Your IT team has been trained in Moodle for 10 years with no budget to retrain ### Inventory what you have Make a list: 1. **Active courses** — how many? How many lessons/quizzes each? 2. **Active students** — how many? How many passive/historical (read-only access)? 3. **External materials** — H5P? SCORM? Videos hosted where? 4. **Active plugins** — which ones? Which features depend on them? 5. **Integrations** — institutional SSO? Academic system (Banner, SIGA)? Email marketing? 6. **Customizations** — themes? Modified PHP code? 7. **Historical data** — how much grade/activity history? This inventory defines the complexity of the migration. For 5,000+ students with 10+ custom plugins: 6-12 months. For a small school on standard Moodle: 1-2 months. ## Phase 1: trial + pilots (4-6 weeks) ### Weeks 1-2: setup 1. **Studeia Demo plan** (free, 1 student) — experience it as a student 2. Take a full tour — AI tutor chat, gamification, gradebook, mobile 3. Present it to 2-3 pilot teachers (choose early adopters, not laggards) ### Weeks 3-4: pilot courses Choose 2-3 representative courses: - 1 simple course (few lessons, no SCORM) - 1 course with rich quizzes - 1 course with multimedia content (videos, PDFs) Export from Moodle via IMS CC: ``` Moodle: Course administration > Backup > General backup > "Include question bank" + "Include groups" + "Include H5P" > Save IMSCC file ``` Import into Studeia: ``` POST /api/institution/courses/import Content-Type: multipart/form-data Body: file = course-export.imscc ``` Validate: - ✅ Modules + lessons migrated correctly - ✅ QTI 1.2 quizzes work - ✅ Resources (PDFs, links) accessible - ❌ H5P content packages — do NOT migrate. Decide: rebuild as a Studeia interactive subtype OR keep in parallel Moodle via LTI ### Weeks 4-6: pilot students Invite 10-30 volunteer pilot students (including parents, if K-12): 1. SCIM provisioning OR CSV import 2. 30-minute training via recorded video 3. Feedback survey after 1 week Iterate based on feedback before Phase 2. ## Phase 2: gradual migration (2-4 months) ### Month 1: key courses Migrate the highest-value / most-used courses first. Do NOT migrate everything at once. Recommended approach: - **New courses** (starting next semester): create DIRECTLY in Studeia, don't migrate - **Popular active courses** (>50 students): migrate carefully, with teacher validation - **Old / archived courses**: keep in Moodle as read-only, or only migrate historical academic data Realistic pace: 5-10 courses per month with quality migration. ### Months 2-3: students + academic data **Student provisioning**: Option A — SCIM (if you have AD/Azure AD/Okta): ``` 1. Configure SCIM 2.0 at /institution/settings/sso 2. AD sync pushes all students 3. Group → Course mapping auto-enrolls students in courses ``` Option B — CSV bulk import: ``` 1. Export students from Moodle (CSV) 2. Format: name, email, role, classGroupIds, sendInvite 3. POST /api/institution/users in bulk ``` **Historical academic data**: Three strategies: 1. **CSV import as manual GradeItem** — for each migrated course, import the historical report card. Students see old grades + Studeia grades in the same gradebook. ```csv studentEmail,courseSlug,assignment,gradeMax,grade,date student@email.com,calculus-1,Exam-1-2024,10,7.5,2024-06-15 student@email.com,calculus-1,Exam-2-2024,10,8.5,2024-08-10 ``` 2. **PDF snapshot attached to student profile** — for thousands of students, generate PDFs in batch: ```bash # Moodle script to generate PDFs for student in students: pdf = generate_report_card_pdf(student.id) upload_to_studeia(student.email, pdf) ``` 3. **Read-only Moodle archive** — keep Moodle running only for historical reference (no active maintenance cost). Students access it via an /old-grades link in Studeia. ### Months 3-4: integrations Reconnect: - **Institutional SSO** — if you were already using Shibboleth/Azure AD/Okta in Moodle, Studeia connects to the same IdP. Probably 1 day of work. - **Academic system** (Banner, SIGA, e-Class) — via Studeia's public API (64+ endpoints). Custom development if no ready-made connector exists. - **Email marketing** (Mailchimp, RD Station) — webhook automation in Studeia that fires when a student registers. - **Live classes** — if you were using BigBlueButton in Moodle, Studeia connects to the same BBB server. ## Phase 3: decommission or parallel (1-2 months) ### Option A: decommission Moodle - Month 5: 100% of new students go to Studeia; existing students finish their cycle in Moodle - Month 6: last Moodle students migrate OR graduate - Month 7: full Moodle backup, final snapshot - Month 8: Moodle shutdown, hosting freed ### Option B: Moodle running in parallel via LTI - Studeia for new courses / modernized subjects - Moodle for legacy courses / traditional subjects - LTI 1.3 connects them: student logs in once, accesses both - Studeia grades flow back to the Moodle Gradebook via AGS Advantage: zero risk of losing anything. Disadvantage: higher TCO (Moodle + Studeia in parallel). ### Option C: permanent hybrid Large universities rarely decommission Moodle 100%. Common model: - Moodle for "core LMS" (enrollment, official gradebook, academic certificates) - Studeia for "active learning" (courses with AI tutor, gamification, mobile) - Sync via LTI + AGS ## What does NOT migrate automatically An honest list: ❌ **SCORM 2004 packages** — Studeia does not support them. Options: - Rebuild content as native lessons + quizzes (recommended if SCORM is >2 years old) - Keep in parallel Moodle, access via LTI tool ❌ **H5P content packages** — Studeia has 6 native interactive subtypes (interactive_video, drag_drop, fill_blanks, flashcard_set, timeline, branching_scenario). Rebuild manually. Good news: Studeia's visual editor is better than raw H5P. ❌ **Workshop activities (peer review)** — Studeia does not have this natively. On the roadmap. Keep in Moodle for now. ❌ **Custom Moodle plugins** — no equivalent. Evaluate case by case. ❌ **Complex Moodle calendars** — Studeia has a Calendar but with a different model. Recreate key events manually. ❌ **Custom XML templates** — Moodle allows deep customization via XML. Studeia has 9 themes + sanitized custom CSS (more limited). ❌ **Glossary entries in bulk** — export CSV from Moodle + import as question bank in Studeia (workaround). ## Risks and mitigations | Risk | Probability | Mitigation | |---|---|---| | Students resist change | High | Proactive communication + training + showcase of modern features (AI tutor!) | | Teachers resist | High | Run pilots with early adopters first + get their buy-in before rolling out to everyone | | Loss of historical data | Medium | Keep Moodle read-only for 1 year after migration OR full PDF backup | | Complex quizzes break | Medium | Manual validation by the teacher of each migrated quiz during pilots | | SSO fails on go-live day | Low | Migration during maintenance window + fallback plan (temporary email/password login) | | Total cost higher than expected | Low | Calculate 3-year TCO transparently (include hosting + admin + Moodle training in the comparison) | ## Realistic TCO — school with 500 students / 3 years ### Staying with managed Moodle | Item | 3-year cost | |---|---| | BBB + Moodle hosting (cloud managed) | R$36k | | Part-time Moodle admin (R$3k/month consulting) | R$108k | | Commercial plugins (AI, gamification, mobile, etc.) | R$30k | | Updates + customizations | R$50k | | **TOTAL** | **R$224k** | ### Migrating to Studeia Enterprise | Item | 3-year cost | |---|---| | Studeia Enterprise (R$3-5k/month, negotiable) | R$108k-180k | | Initial migration (optional consulting) | R$10-30k | | Team training | R$5-15k | | AI cost (R$3-5/student/month x 500 x 36) | R$54k-90k | | **TOTAL** | **R$177k-315k** | For a mid-sized school: TCO is similar OR up to 20% lower. But you gain modern features that justify the move. For large institutions (>5,000 students): Studeia Enterprise is typically 30-60% cheaper than managed Moodle with plugins. ## When NOT to migrate (honesty) If you're in one of these situations, STAY on Moodle: 1. **Public federal university with Moodle validated by the Ministry of Education** — the bureaucracy to change outweighs the benefit 2. **School with critical SCORM content** — rebuilding the content is 6 months of instructional designer work 3. **Specific compliance requirements** (government research agencies, accreditation bodies) that require Moodle certification — verify before moving 4. **IT team already expert in Moodle for 5+ years** — retraining has a cost 5. **Limited budget** (, misconceptions: Misconception[], // active + resolving episodicMemory: Episode[], // what worked before quizContext: { totalAttempts, avgScore, passRate, weakAreas: string[] // concepts with mastery < 0.4 }, recentHistory: Message[] // sliding window of 10 msgs } ``` ConceptMastery uses a **Bayesian Beta distribution** — each concept has alpha (successes) + beta (failures). Probability = alpha / (alpha + beta). Confidence interval via 5th and 95th percentiles. EpisodicMemory records pedagogical insights: "the pizza analogy worked for explaining fractions," "the water-pipe metaphor failed for electricity." The system learns what works with each student. Zero LLM cost. Everything is Prisma queries + deterministic computation. ## 2. RetrievalAgent — Tenant-Scoped RAG Instead of having the LLM try to recall facts about math, biology, or history, we let it cite the institution's own material. ```ts const chunks = await retrieve({ query: reformulatedQuery, // 1. reformulates query with context filters: { tenantId, courseId }, // 2. absolute isolation k: 10, tenantOnlyMode: true, // 3. never cites another institution's content boostByWeakAreas: snapshot.quizContext.weakAreas, // 4. prioritizes chunks from weak areas }); ``` **Per-tenant RAG is critical**. Test-prep school XYZ has its own material for college entrance exams. University ABC has its own Calculus material. The tutor cites the institution's CORRECT material, not a generic aggregate. Each chunk has metadata: `{ source: "course_lesson", courseId, lessonId, lessonTitle, moduleTitle }`. When the tutor responds, it cites: "As explained in the lesson 'Analytic Geometry' in module 3…" Voyage AI generates embeddings (1024 dimensions, OpenAI fallback). pgvector stores them. `tenantOnlyMode: true` ensures `WHERE tenantId = X` is always in the query. Project critical rule: zero cross-tenant leakage. ## 3. PedagogicalAgent — Strategy Adaptation Pure determinism. Evaluates the student's mastery in the specific domain and selects one of 5 strategies: | Mastery | Strategy | Behavior | |---|---|---| | < 0.3 | direct_instruction | Clear explanation, concrete examples, step-by-step | | 0.3–0.5 | scaffolding | Progressive hints, simple guided questions | | 0.5–0.7 | socratic | Questions that lead to discovery | | 0.7–0.9 | guided_practice | Exercises with feedback, practical application | | > 0.9 | challenge | Complex problems, connections between concepts | Additional adjustments for quiz vs. chat divergence: - High chat mastery + low quiz score → "surface-level understanding" → nudge DOWN - Low mastery + high quiz score → "quiet student" → nudge UP - Quiz pass rate < 40% → cap at scaffolding (don't advance to socratic yet) Also adjusts for age (User.isMinor), learning style, and domain (math vs. literature have different profiles). Zero LLM cost. Output: selected strategy + specific instructions to add to the system prompt. ## 4. Orchestrator — buildEnrichedPrompt Assembles the enriched system prompt: ``` You are an AI tutor for the course "Calculus I" at "XYZ Test Prep School." STUDENT DOMAIN KNOWLEDGE: - Limits: mastery 0.78 (high) - Derivatives: mastery 0.42 (medium) - Integrals: mastery 0.15 (low) ACTIVE MISCONCEPTIONS: - "Student confuses domain with range in functions" (3 occurrences, status: resolving) - "Student applies the sum rule for derivatives to products" (5 occurrences, status: active) QUIZ PERFORMANCE: - 14 total attempts, avgScore 67%, passRate 71% - Weak areas: integrals (avg 45%), chain rule (avg 52%) PEDAGOGICAL STRATEGY: guided_practice - Student has medium mastery of derivatives. Present graduated exercises. - Reinforce the connection between limits and derivatives (they already master limits). - Proactively address the misconception about the product rule for derivatives. RAG CONTEXT (from course material): [Lesson 3.2 "Product Rule"] (Module: Differential Calculus) "The derivative of f(x)·g(x) is NOT f'(x)·g'(x). The correct rule is..." [Lesson 3.5 "Solved Exercises"] (Module: Differential Calculus) "Example: differentiate (x^2 + 1)·(x - 3) using the product rule..." RECENT QUIZ (next conversation): Student just answered an inline quiz with 2 questions, got 1 correct. INSTRUCTIONS: - Respond in English - Cite course material when relevant (use [Lesson X.Y]) - Acknowledge what the student got right before pointing out errors - For this age group (User.ageRange = "young_adult"): casual language without being too informal ``` ## 5. Main LLM — Streaming with Fallback ```ts const stream = await router.stream({ taskType: "chat_tutor", messages: enrichedMessages, options: { tenantId, userId, sessionId } }); for await (const chunk of stream.textStream) { yield chunk; // SSE to client } ``` The LLM Router: 1. Resolves provider via `TenantTaskModelConfig` (admin chose Claude Sonnet, GPT-4o, etc.) 2. Resolves API key via cascade: TenantApiKey → global ProviderApiKey → process.env 3. Circuit breaker check (Redis state). If provider is OPEN: skip directly to fallback 4. Metering middleware: rate limit + credit check + cost calculator 5. Streams via Vercel AI SDK (supports tools, multimodal, structured output) 6. On error: automatic fallback to next provider in chain Fallback chain by tier: ``` Sonnet tier (medium): Claude Sonnet → GPT-4o → Grok-3-fast → Gemini Pro Haiku tier (fast): Claude Haiku → GPT-4o-mini → Grok-3-mini → Gemini Flash Opus tier (complex): Claude Opus → GPT-4.5 → Grok-3 → Gemini 2.5 Pro ``` Tenants NEVER lose access to their tutor. If Anthropic goes down → OpenAI takes over. If OpenAI also goes down → xAI. Etc. ## 6. EvaluationAgent — Feedback Loop Runs in the background after the tutor responds: ```ts after(async () => { const evaluation = await router.generateDirect({ taskType: "chat_evaluation", messages: [ { role: "user", content: "Student said: '...'. Tutor responded: '...'. Classify." } ] }); // evaluation: { // understanding: "partial", // detectedMisconceptions: [{ description, concepts, severity }], // suggestedNextStep: "..." // } // Updates ConceptMastery via Bayesian update await conceptMasteryEngine.updateFromTurn({ userId, courseId, evaluation }); // Persists/updates misconceptions for (const misc of evaluation.detectedMisconceptions) { await misconceptionResolutionService.upsert({ userId, source: "chat", ...misc }); } }); ``` Cost: ~$0.001 per turn (Haiku). Does NOT block the student's request. Misconceptions have a 3-state lifecycle: `active → resolving → resolved`. A state machine determines transitions based on evidence (mastery update, quiz pass, tutor explicitly addressed it). ## 7. ContentAgent — Proactive Pre-Generation ```ts after(async () => { // Student shows weak mastery of concept X // Pre-generates a follow-up exercise while the student reads the current response const exercise = await router.generateDirect({ taskType: "content_generation", messages: [...] }); // Redis cache for 30 min await redis.set(`next-exercise:${userId}:${conceptId}`, exercise, 1800); }); ``` When the student finishes reading the response and says "give me an exercise," Studeia serves it INSTANTLY from cache. No perceptible latency. Cost: ~$0.001 per turn (Haiku). ## 8. SupervisorAgent — Moderation Runs in the background after each turn. Classifies into 5 severity levels × 8 categories. Categories: inappropriate language, violence, illegal, sexual, off_topic, harassment, **self_harm**, jailbreak_attempt. Severity: low → medium → high → critical → **safety**. 3 strikes (LOW/MEDIUM within 7 days) = 48-hour quarantine. CRITICAL = 7-day quarantine. **Self-harm (severity=safety) NEVER penalizes the student.** Instead: - Tutor is interrupted with a supportive message - Crisis resources (US: 988 Suicide & Crisis Lifeline) - 24-hour Redis cooldown (not quarantine) - URGENT immediate email to the institutional admin Philosophy: self-harm is a crisis, not a violation. [Details in Safety Supervisor](/features/ai-tutor/safety-supervisor). Cost: ~$0.001 per turn (Haiku). ## Production Numbers After 6 months in production: - ~30 ms additional latency from pre-LLM agents - ~$0.005–$0.05 average cost per turn - 91% student retention rate after 7 days (vs. ~40% benchmark for AI tutors without state) - 3.2× misconception detection rate vs. single-call baseline - 0 serious safety incidents (high/critical categories) ## Honest Trade-offs Things that did NOT work: - **We tried an LLM-driven "MasterAgent" coordinator** to dynamically choose the next agent. Cost doubled, latency increased by 800 ms, quality did NOT improve. We reverted to determinism in the Orchestrator. - **We tried fine-tuning Llama on course material**. Expensive for each tenant. RAG works better for dynamic knowledge (institutions update material every week — a fine-tune would go stale). - **We tried "consensus" across 3 LLMs** (Claude + GPT + Gemini) and picking the majority response. 3× cost with no meaningful quality gain. Removed — the fallback chain is sufficient. ## Open Source? We're evaluating open-sourcing the deterministic components (StudentModelService, RetrievalAgent, PedagogicalAgent) as an npm package. The LLM-driven agents (Evaluation, Content, Supervisor) contain prompts that are Studeia IP and will remain closed. If you're interested: open an issue at [github.com/donattocosta-lang/studeia/issues](https://github.com/donattocosta-lang/studeia/issues). ## See Also - [AI Tutor: Executive Overview](/platform/ai-tutor) - [AI Tutor: Technical Details](/features/ai-tutor/overview) - [RAG Ingestion](/features/ai-tutor/rag-ingestion) - [Supervisor Agent](/features/ai-tutor/safety-supervisor) ## FAQ **Q: Why multi-agent instead of a single LLM call?** A single LLM call has NO persistent student memory, does NOT know which course materials to cite (requires RAG), does NOT moderate inappropriate outputs, and does NOT update the Bayesian model of the student's domain knowledge. Multi-agent solves each problem with a specialized agent: StudentModel maintains state, RetrievalAgent performs tenant-scoped RAG lookup, PedagogicalAgent selects strategy, EvaluationAgent classifies misconceptions, ContentAgent pre-generates follow-ups, SupervisorAgent moderates. Each can be optimized independently. **Q: How much does a full pipeline turn cost?** Typically $0.005–$0.05 per turn (depending on response size). Breakdown: main LLM Sonnet $0.005–$0.04 + EvaluationAgent Haiku $0.001 + ContentAgent Haiku $0.001 + SupervisorAgent Haiku $0.001. 3 of the 6 agents are pure TypeScript (StudentModel + RetrievalAgent + PedagogicalAgent = zero LLM cost). **Q: How do you prevent costs from exploding with 1,000+ students?** Four mechanisms: (1) Background agents via Next.js `after()` — without blocking the request. (2) Haiku for background tasks (~30x cheaper than Sonnet). (3) Metering middleware with per-user rate limiting. (4) Tenants can bring their own API key (TenantApiKey) — Studeia does not charge an AI margin; costs go directly to the tenant's account at Anthropic/OpenAI. --- # [en-US (AI-translated)] RAG per-tenant at scale: architecture for B2B LMS URL: https://docs.studeia.com/blog/rag-per-tenant-architecture Locale: en-US Section: blog Updated: 2026-05-24 **Short answer:** Per-tenant RAG in Studeia isolates data via mandatory tenantId+courseId filters on all pgvector queries; tenantOnlyMode=true eliminates fallback to global content. Voyage AI generates 1024-dim embeddings (OpenAI text-embedding-3-large as fallback). Semantic chunking: 800 tokens, 200 overlap. autoSyncRag triggers incremental re-ingestion via after() on every lesson edit. Production stats: 500K+ chunks, p95 retrieval latency 47ms, zero cross-tenant leakage in 6 months ## Why real multi-tenancy in RAG is hard Most LMS platforms with an "AI tutor" rely on problematic approaches: 1. **Shared global RAG** — all tenants see the same knowledge base. Functional, but violates compliance and pedagogical quality. 2. **"Per-tenant" via metadata filter without enforcement** — chunks have a `tenant_id` field, but the filter is optional in the query. One bug in one endpoint = data leak. 3. **Separate vector DB per tenant** — brutal operational overhead. A thousand tenants = a thousand vector DBs. Studeia solved this with 3 architectural invariants. ## Invariant 1: mandatory tenantId+courseId filter Every pgvector query in Studeia MUST go through `packages/core/src/ai/rag.ts`: ```ts export async function retrieve(params: RetrieveParams) { if (!params.tenantId && !params.allowGlobal) { throw new Error('tenantId required unless allowGlobal=true'); } const filter = params.tenantId ? Prisma.sql`WHERE ce.tenant_id = ${params.tenantId}${params.courseId ? Prisma.sql` AND ce.course_id = ${params.courseId}` : Prisma.empty}` : Prisma.empty; return prisma.$queryRaw` SELECT ce.*, 1 - (ce.embedding <=> ${vectorStr}::vector) as similarity FROM content_embeddings ce ${filter} AND 1 - (ce.embedding <=> ${vectorStr}::vector) > 0.5 ORDER BY similarity DESC LIMIT 10 `; } ``` `allowGlobal` is only `true` on explicit administrative routes (global admin testing RAG coverage). In EVERYTHING else, it throws. A critical project rule (rule 6 in CLAUDE.md): "Tenant isolation: all B2B queries filter by tenantId." Automated auditing via Vitest tests verifies that every call to `retrieve()` in application code passes `tenantId`. ## Invariant 2: tenantOnlyMode in RetrievalAgent Even with the correct filter in place, there are cases where a fallback is desired (e.g., B2C without a tenant). To guarantee B2B NEVER leaks: ```ts const chunks = await retrieve({ query, filters: { tenantId, courseId }, tenantOnlyMode: true, // <-- CRITICAL }); ``` `tenantOnlyMode: true` means: if no chunks exist for the tenant, return **empty** — do not search the global index. The tutor responds "I don't have material on that in your course" instead of hallucinating. ## Invariant 3: PostgreSQL RLS as a safety net Supabase RLS policies add a defense-in-depth layer: ```sql CREATE POLICY tenant_isolation_content_embeddings ON content_embeddings FOR SELECT USING (tenant_id = current_setting('app.current_tenant_id')::uuid); ``` If a bug in application code forgets the filter, RLS blocks the query. **Defense in depth**. There is a production cost: every Postgres query evaluates the policy. But the added latency is ~2–5ms, which is acceptable. ## Ingestion pipeline ``` POST /api/institution/courses/[id]/rag-ingest { mode: "full" | "incremental" } ↓ 1. List published lessons for the course 2. For each lesson, extract text by type: - rich_text → strip HTML via DOMPurify - slides → join text elements + speaker notes - quiz → join question + explanation per item - pdf → document-extractor (PyPDF + Adobe extract fallback if native extraction fails) - video → LiveClassTranscription.transcriptionText (Whisper → Google STT fallback) - assignment → instructions 3. Chunking: 800 tokens, 200 overlap, preserving semantic structure (does not break paragraphs mid-sentence, does not break code in the middle of a function) 4. Embeddings via Voyage AI (1024 dims, fallback to OpenAI text-embedding-3-large) 5. Creates ContentBlock + ContentEmbedding with metadata: { source: "course_lesson", courseId, lessonId, lessonTitle, moduleTitle, ingestionId } 6. Final status in CourseRagIngestion (pending → running → completed | failed) ``` ## Semantic chunking — why it matters Naive chunking (every N chars) breaks context. For example: a lesson contains a Python code snippet that gets split across different chunks — the individual embedding of each half fails to capture the meaning. Studeia uses a **recursive splitter** with a hierarchy of separators: 1. Tries to split at paragraph (\n\n) 2. If not, splits at sentence (. ) 3. If not, splits at word 4. If not (rare), truncates It also preserves code blocks INTACT (between triple backticks): ```ts function recursiveChunk(text, maxTokens = 800, overlap = 200) { // Identify protected ranges (code blocks, markdown tables) const protectedRanges = findProtectedRanges(text); // Split respecting hierarchy + protection return splitWithHierarchy(text, { separators: ['\n\n', '. ', ' ', ''], maxTokens, overlap, protectedRanges, }); } ``` Result: chunks of ~600–800 tokens with 200 overlap, semantically coherent. ## Voyage AI vs OpenAI — why a different primary We started with OpenAI text-embedding-3-large. We migrated to Voyage AI as primary in 2026 H1. Reasons: | Aspect | OpenAI text-emb-3-large | Voyage AI voyage-3 | |---|---|---| | Cost / 1K tokens | $0.00013 | $0.00005 | | Native dimensions | 3072 (reducible via dimensions param) | 1024 native | | MTEB benchmark (English) | 64.6 | 67.2 | | MIRACL benchmark (multilingual) | average | better | | Free-tier rate limits | 3K RPM | 3M tokens/min | Voyage is ~2.6x cheaper + better benchmark on educational retrieval + robust multilingual support (important for Studeia's es-ES + fr-FR locales). Automatic fallback to OpenAI when Voyage has an outage: ```ts async function embedText(texts: string[]) { try { return await voyageEmbed(texts); } catch (err) { console.warn('[embed] Voyage failed, falling back to OpenAI', err); return await openaiEmbed(texts, { dimensions: 1024 }); // reduced to 1024 for compatibility } } ``` Important: both produce 1024-dim vectors, so pgvector accepts them without a schema change. ## pgvector tuning in production Default pgvector is great for <100K vectors. Above that, without tuning, latency degrades. Studeia config (tested with 500K+ chunks): ```sql -- IVFFlat index CREATE INDEX content_embeddings_embedding_idx ON content_embeddings USING ivfflat (embedding vector_cosine_ops) WITH (lists = 700); -- sqrt(500000) ≈ 700 -- Query uses probes SET ivfflat.probes = 15; -- more probes = better recall, more latency ``` Trade-offs: - `lists` too low: slow queries (full scan) - `lists` too high: large index, slow inserts - `probes` too low: OK latency, poor recall (relevant chunks missed) - `probes` too high: high recall, latency degrades For Studeia in production: lists=700, probes=15. p95 latency = 47ms for top-10 retrieval across 500K chunks. For 5M+ scale: evaluate HNSW (Postgres 16+) or partitioning by tenantId. ## autoSyncRag — incremental rebuild A course is a living organism. A teacher edits lesson 17. Adds a video. Updates a quiz. The system needs to re-embed only the delta, not the entire course. `Course.autoSyncRag: Boolean @default(false)` When `true`, every lesson edit via API: ```ts // PATCH /api/institution/courses/[id]/modules/[mid]/lessons/[lid] await prisma.courseLesson.update({ data: ... }); // Background — does not block the request after(async () => { if (course.autoSyncRag) { await courseRagIngestionService.reingest({ courseId, mode: "incremental", onlyLessonId: lessonId, }); } }); ``` Incremental re-ingestion: 1. Delete old chunks for the lesson (`WHERE lesson_id = X`) 2. Re-extract text from the updated lesson 3. Re-chunk 4. Re-embed 5. Insert new chunks Time: ~3–8s per average lesson (depends on size). Students NEVER experience stale RAG. ## Production numbers | Metric | Value | |---|---| | Total chunks in production | ~500K | | Active tenants | 50+ | | Courses with RAG ingested | 280+ | | Largest tenant (chunks) | 47K | | p50 retrieval latency | 28ms | | p95 retrieval latency | 47ms | | p99 retrieval latency | 124ms | | Embedding cost previous month | $34 (proportional to edit volume) | | Cross-tenant leakage incidents | 0 (6 months) | ## Honest trade-offs **What did NOT work:** 1. **We tried hierarchical retrieval** (search the summary first, then full chunks). Complex implementation, marginal quality gain on simple queries. We removed it. 2. **We tried query reformulation via LLM** (passing the student's query through an LLM before embedding to normalize it). Cost doubled (one more LLM call), latency +400ms, quality only marginally better for very vague queries. We only do reformulation in RetrievalAgent when the query is ambiguous (simple heuristic). 3. **We tried re-ranking via Cohere rerank-3**. Expensive ($0.001 per re-rank), latency +200ms. For 90% of queries, pgvector cosine + boost for weak areas is sufficient. We keep re-ranking available but off by default. ## What wasn't possible 2 years ago pgvector reached production readiness in 2022. Voyage AI launched voyage-3 in 2024 H2. Before that, alternatives (Pinecone, Weaviate, Qdrant) were paid + operationally complex for multi-tenant setups. Today, with mature pgvector + cheap embeddings + Supabase RLS, production-grade per-tenant RAG is accessible. We recommend it for any serious B2B LMS. ## See also - [RAG Ingestion details](/features/ai-tutor/rag-ingestion) - [Multi-agent AI tutor pipeline](/blog/multi-agent-ai-tutor-pipeline) - [Multi-tenancy](/platform/multi-tenancy) ## FAQ **Q: Why per-tenant RAG instead of shared RAG?** Three non-negotiable reasons: (1) LGPD/GDPR compliance — material from one school CANNOT appear in responses for students of another school. (2) Pedagogical quality — institutions have their own material, their own approach, contextualized examples; mixing Stanford content with a local prep course pollutes the response. (3) Commercial confidentiality — premium prep course material is that course's IP; they don't want it exposed to competitors. **Q: What is the cost of embeddings at scale?** Voyage AI charges $0.00005 per 1K tokens (Studeia's primary version). Average course: 30 lessons, ~50K words = ~70K tokens. Initial embedding: ~$0.0035 per course. Incremental re-ingestion: ~$0.0001 per edited lesson. For a tenant with 100 courses: ~$0.35 initial setup + ~$5–10/month in deltas. Negligible cost compared to the value delivered. **Q: How many vectors can pgvector handle before performance degrades?** pgvector with IVFFlat handles millions of vectors with <100ms latency if the index is well-tuned (lists = sqrt(N), probes = 10–20). HNSW (Postgres 16+) is better for scale: 10M+ vectors with <50ms. Studeia tested with ~500K chunks in production, p95 retrieval latency = 47ms. Above 5M, consider partitioning by tenantId or pgvector-rs. **Q: How do you update embeddings when a lesson changes?** Course.autoSyncRag=true enables automatic incremental re-ingestion via Next.js after(). Every edit via API triggers: delete old chunks for the lesson + chunk new content + embed + insert. No downtime, no full rebuild. For bulk edits: calling /api/institution/courses/[id]/rag-ingest with mode='full' rebuilds from scratch. --- # [en-US] Studeia vs Blackboard Learn: honest comparison 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-blackboard Locale: en-US Section: comparisons Updated: 2026-05-24 **Short answer:** Blackboard Learn (Anthology) dominates legacy LMS in Brazilian public universities with SCORM 2004, Blackboard Collaborate Ultra, and academic seals — priced USD $8–25/student/year. Studeia is a modern Brazilian B2B SaaS with multi-provider AI tutor, native gamification, LGPD compliance, and BRL pricing (60–85% cheaper over 3 years). Federal universities already on Blackboard: integrate via LTI. New or modernizing private institutions: Studeia wins on UX, cost, and time-to-value ## Side-by-side comparison | Aspect | Studeia | Blackboard Learn | |---|---|---| | **Origin** | Brazil 2025 | USA 1997 (Anthology since 2022) | | **Model** | Modern managed SaaS | SaaS (Cloud) or self-hosted | | **Price** | R$0-1,500/mo or Enterprise | USD $8-25/student/year enterprise | | **UX** | Modern, glass morphism, 9 themes | Legacy (Original) or Ultra (more modern but inconsistent) | | **AI Tutor** | Native multi-agent (Claude/GPT/Grok/Gemini) | Blackboard AI Design Assistant (preview) | | **SCORM 2004** | NO | Yes (full) | | **Live classes** | BBB/Zoom/Teams/Meet adapter | Blackboard Collaborate Ultra | | **Gamification** | Built-in (XP, OB 3.0, leaderboards, contests) | Achievements + plugins | | **LGPD** | Native | Via DPA | | **Mobile** | Expo native + white-label | Blackboard App + Instructor App | | **LTI 1.3** | Tool provider | Consumer + provider | | **Accessibility** | WCAG 2.1 AA native | Blackboard Ally (automatic audit) | ## When to choose Blackboard ✅ Federal/state public university with Blackboard for years ✅ Mandatory SCORM 2004 (legacy courses) ✅ MEC compliance + specific academic seals ✅ IT team already trained in Blackboard ✅ Focus on institutional maturity over innovation ## When to choose Studeia ✅ New private university or radical modernization ✅ EAD college with B2C/professional focus ✅ ENEM prep / corporate T&D / technical school ✅ Want dramatic cost reduction (60-85%) ✅ Want modern UX without 6 months of staff training ✅ Real AI tutor (Blackboard AI still nascent) ✅ Mobile with own white-label ## TCO compared — 5,000-student university / 3 years | Item | Blackboard Enterprise | Studeia Enterprise | |---|---|---| | License | USD $120k-375k (R$600k-1.875M) | R$108k-288k | | Setup + implementation | USD $25k-100k | R$0-30k | | Staff training | USD $10k-50k | Included | | Custom development (RFP) | USD $50k-300k | Via public API | | Blackboard Ally | USD $5k-15k/year | N/A (native WCAG) | | **TOTAL 3 years** | **R$1.2M-3.5M** | **R$108k-318k** | Studeia typically **70-90% cheaper** than Blackboard enterprise. ## Where Blackboard wins 1. **SCORM 2004**: Studeia only supports IMS CC. For institutions with legacy SCORM libraries: real limitation. 2. **Blackboard Collaborate Ultra**: mature webconference tool with advanced features (automated breakout rooms, layered polling, deep collaborative whiteboard). 3. **Blackboard Ally**: automatic WCAG audit on uploaded content. 4. **Blackboard Predict**: 20 years of academic risk data in proprietary model. 5. **Institutional maturity**: 25 years of use in universities. Resistance to leave = strong. ## Migration path (6-12 months) | Month | Phase | |---|---| | 1 | Trial Demo, import 2 pilot courses via IMS CC | | 2-3 | Adjust migrated content, recreate complex quizzes, train 5 professors | | 4 | Migrate pilot students via SCIM | | 5-6 | Validate key features with pilots | | 7-9 | Gradual migration of remaining departments | | 10-12 | Decommission Blackboard or maintain in parallel via LTI | ## See also - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) - [Studeia vs Canvas](/comparisons/studeia-vs-canvas) - [Use case: University](/use-cases/university) ## FAQ **Q: Is Blackboard still relevant in 2026?** Yes, still dominant in Brazilian public universities (UFRJ, UnB, etc) and some traditional private ones. Anthology (company that bought Blackboard) consolidated in 2022, modernized part of the product via Blackboard Learn Ultra. But legacy UX persists in many institutions — and user perception remains negative among students (dated interface, confusing navigation). **Q: Is migrating from Blackboard to Studeia feasible?** Yes, partially. Blackboard exports courses in IMS Common Cartridge (IMS CC v1.x) and Studeia imports via POST /api/institution/courses/import. Basic quizzes (QTI 1.2), materials, modules and links migrate. SCORM 2004, Blackboard-specific question pools and custom XML extensions do NOT migrate automatically. Students via SCIM (Blackboard supports) or CSV. **Q: What's the price difference over 3 years?** Blackboard charges USD $8-25/student/year in enterprise contracts (negotiable). For 5000-student university: USD $40k-125k/year = R$600k-1.875M over 3 years. Studeia Enterprise for same size typically R$108k-288k over 3 years (R$3-8k/month negotiable). Typical savings 60-85%. **Q: Does Blackboard have features Studeia lacks?** Yes: (1) Full SCORM 2004 (Studeia only IMS CC). (2) Blackboard Collaborate Ultra for webconference. (3) Blackboard Ally for automatic WCAG compliance on legacy content. (4) Blackboard Predict (predictive risk AI). (5) Institutional maturity + academic seals. --- # [en-US] Studeia vs Canvas LMS: honest comparison 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-canvas Locale: en-US Section: comparisons Updated: 2026-05-23 **Short answer:** Canvas (Instructure) is the dominant American LMS in US universities — polished UX, robust gradebook, excellent mobile. Costs USD $5-15/student/month. Studeia is Brazilian, B2B, with native multi-agent AI tutor, OB 3.0 gamification, PIX/Asaas billing, LGPD compliance and BRL pricing. For large Brazilian universities: Canvas if already contracted. For Brazilian SMEs/schools/exam prep: Studeia wins on TCO + local fit. LTI 1.3 integration works — Studeia as tool provider in Canvas. ## Side-by-side comparison | Aspect | Studeia | Canvas | |---|---|---| | **Origin** | Brazil 2025 | USA 2008 (Instructure) | | **Price** | R$0-1,500/mo (plans) or Enterprise custom | USD $5-15/student/mo ($60-180/student/year) | | **LGPD** | Native (Brazilian data) | GDPR/FERPA — LGPD via DPA | | **Payment** | BRL, Stripe + Asaas (PIX) | USD, enterprise contracts | | **AI Tutor** | Multi-agent (Claude/GPT/Grok/Gemini) + per-tenant RAG | Canvas AI (basic) | | **Gradebook** | Categories + weights + rubrics + integrity | Considered market-best | | **Mobile** | Expo Android (iOS roadmap) | Polished native apps (iOS+Android) | | **Quiz Engine** | 8 types + psychometrics | Quiz 2.0 (more advanced in pooling) | | **LTI 1.3** | Tool provider | Consumer + provider | | **SCORM 2004** | NO | Yes | | **H5P** | Native subtypes (not pure H5P) | Plugin | | **Gamification** | XP+badges+leaderboards+contests native | Limited (Canvas Badges) | | **White-label** | Total (Enterprise) | Limited (colors + logo) | | **SSO Enterprise** | SAML+OIDC+SCIM | Yes | | **API** | 64+ granular scope endpoints | Extensive REST API (more mature) | ## When to choose Canvas ✅ American university or American standard ✅ Already on Canvas with significant migration investment ✅ High budget (USD/student/year not a problem) ✅ Need mature SCORM 2004 / H5P ✅ Maximum UX/mobile polish ✅ Existing Canvas Designer/Devs team ## When to choose Studeia ✅ Brazilian institution (LGPD, PT, PIX, local support) ✅ Predictable BRL costs (R$10-100k/year vs USD 50-300k/year Canvas) ✅ Want real AI tutor (Canvas AI still nascent) ✅ Want native gamification (Canvas weak here) ✅ K-12 in Brazil (Canvas K-12 limited) ✅ ENEM/exam prep schools ✅ Brazilian corporate training ✅ Want B2B mobile with white-label ## Hybrid scenario Common: university already on Canvas wants Studeia for specific courses (e.g., real AI tutor for calculus course). ### LTI 1.3 setup 1. **Studeia generates** Tool URL + Client ID + JWKS URL 2. **Canvas Admin** → Settings → Apps → Add App → By Client ID 3. Configure placements (course navigation, assignment, etc) 4. In Canvas course: add Studeia tool as lesson ### Grade sync (AGS) Studeia sends grades back automatically via Canvas LTI AGS endpoint. ## Honest verdict **Canvas remains better for**: American universities, mobile polish, maximum mature plugins/integrations, robust SCORM 2004, institutional maturity. **Studeia wins for**: Brazilian market, total cost (50-70% cheaper generally), real AI tutor, native gamification, K-12 + exam prep, real white-label. **Hybrid makes sense for**: universities with established Canvas wanting specific Studeia features. Use Studeia as LTI tool in selected courses. ## See also - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) - [Studeia vs Google Classroom](/comparisons/studeia-vs-google-classroom) ## FAQ **Q: Is Canvas the best LMS in the world?** Canvas is excellent — dominant in US universities (>40% of American higher ed market). Modern UX, robust gradebook, polished mobile app. But it's expensive (USD $5-15/student/month), English-only support, no focus on Brazilian market, no native LGPD, no PIX/local billing. For Brazilian universities with high budget and need for American standard: good fit. For Brazilian SMEs: Studeia generally wins on cost + local fit. **Q: Does Studeia integrate with Canvas?** Yes. Studeia works as LTI 1.3 tool provider — register URLs in Canvas Admin > Settings > Apps > Add App. Grades sync back via AGS (Assignment and Grade Service). Useful for complementing Canvas with Studeia AI tutor + gamification. **Q: Does Canvas have AI tutor?** Canvas has 'Canvas AI' (limited 2025 preview, GA 2026) with basic features: generate quizzes, summarize lessons, transcribe. Conversational AI tutor with student is more limited. Studeia has real multi-agent AI tutor (per-tenant RAG, 5 pedagogical strategies, misconception detection, supervisor agent). Canvas AI vs Studeia AI: Studeia deeper, Canvas more polished in UI. **Q: Can I use Studeia instead of Canvas for K-12?** Yes. Canvas K-12 exists but is relatively weak vs Canvas Higher Ed. Studeia has dedicated K-12 features: parent portal with AI narrative, minor monitoring, kid-friendly gamification, native LGPD/minor protection. In 90% of K-12 cases in Brazil: Studeia wins. --- # [en-US] Studeia vs Coursera for Business: comparison 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-coursera-for-business Locale: en-US Section: comparisons Updated: 2026-05-24 **Short answer:** Coursera for Business is a marketplace of pre-built courses from Stanford/Yale/Google/Meta with progress tracking (USD $399–600/user/year) — companies cannot create their own courses there. Studeia is a B2B LMS for INSTITUTIONAL content (compliance, products, methodology) with multi-agent AI tutor, gamification, gradebook, and SSO, priced at R$2.50–15/student/month. Using both makes sense: Coursera for generic skills, Studeia for proprietary content ## Conceptual comparison | Aspect | Studeia | Coursera for Business | |---|---|---| | **Type** | B2B LMS to create own content | Marketplace of ready-made courses | | **Who creates content** | Your institution | Stanford, Yale, Google, Meta, IBM, etc | | **Customization** | Total (custom courses) | Limited (catalog curation) | | **Price** | R$250-1,500/mo + custom enterprise | USD $399-600/user/year | | **Course language** | You choose (PT/EN/ES/FR) | Mostly English (subtitled) | | **Certificates** | Your brand OB 3.0 + customizable | Coursera + partner university certificates | | **AI Tutor** | Multi-agent per-tenant RAG | Coursera Coach (limited to catalog) | | **Gamification** | Native (XP, badges, leaderboards) | Limited | | **Live classes** | BBB+Zoom+Teams+Meet | Coursera Live (selected) | | **LTI 1.3** | Tool provider | Tool provider | | **Own gradebook** | Yes (rubrics, weights, integrity) | Coursera-managed | | **Compliance tracking** | Automations + reminders + audit | Yes, catalog-based | | **Public API** | 64+ scoped endpoints | Limited integration API | ## When to choose Coursera for Business ✅ Company wants to outsource generic skills content (Python, AWS, Excel, soft skills) ✅ Values certificates from top universities (Stanford, Yale) ✅ Focus on employee upskilling/reskilling in mainstream technologies ✅ High budget (USD $400-600/user/year not a problem) ✅ Purchase of pre-curated packages (SkillSets) saves time ✅ English courses not a problem ✅ Global company (offices in multiple countries) ## When to choose Studeia ✅ Company wants to train on OWN CONTENT (internal compliance, products, methodology) ✅ Custom courses for your culture/process (not on Coursera) ✅ Focus on sectoral t&d (Brazilian health, legal, financial) ✅ Want own brand on certificates (no Coursera/Studeia visible) ✅ Want AI tutor that knows YOUR material (per-tenant RAG) ✅ Predictable cost in BRL (no USD volatility) ✅ Brazilian company with native LGPD + PIX/Asaas ## Coursera + Studeia integration LTI 1.3 (both support as tool provider): ``` Employee takes Python on Coursera ↓ (LTI launch or xAPI) Completion reported to Studeia gradebook ↓ handleGamificationEvent → XP earned ``` ## Where Coursera wins 1. **Top-tier university content**: Stanford, Yale, MIT, Google — Studeia has no own catalog 2. **Strong brand certificates**: "Stanford certificate" on LinkedIn is worth more 3. **Huge catalog**: 7000+ courses vs you having to create from scratch 4. **Coursera Live**: webinars with university instructors 5. **Curated SkillSets**: pre-designed learning paths by experts 6. **Global companies**: better for multinationals ## Verdict **Coursera for Business**: tool for **consuming** courses. Buy catalog access. **Studeia**: tool for **producing** courses. Create and manage own content. Different categories. For medium/large companies: using BOTH makes sense. For small startups: depends on dominant need. ## See also - [Use case: Corporate training](/use-cases/corporate-training) ## FAQ **Q: Is Coursera for Business an LMS?** Not exactly. Coursera for Business is a marketplace of ready-made courses from top universities (Stanford, Yale, Google, Meta, IBM) + progress tracking and curated SkillSets. Great for companies wanting to outsource content. They do NOT create own courses there — for that you need a real LMS like Studeia, Moodle, Canvas. **Q: Can I use both together?** Yes, common. Coursera for generic curated content (Python, AWS, leadership) + Studeia as own LMS for institution-specific content (internal compliance, company products, proprietary methodology). Integration via xAPI/LTI (Coursera supports LTI 1.3 launches, Studeia too). **Q: How much does Coursera for Business cost?** Coursera Team (up to 125 users): USD $399/user/year. Coursera Enterprise: custom, typically USD $400-600/user/year with volume. Full catalog + paid certificates included. For 500 employees: USD $200k-300k/year (R$1M-1.5M). Studeia Enterprise for 500: R$108k-288k/year (creating own content). **Q: Does Coursera offer AI tutor?** Coursera Coach (launched 2024) is an AI chatbot helping students in catalog courses. Limited to Coursera content. Studeia has multi-agent AI tutor with per-tenant RAG — can ingest ANY material (including your company's own courses) and cite specifically. --- # [en-US] Studeia vs EadBox vs EadPlataforma — Brazilian competitors 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-eadbox-eadplataforma Locale: en-US Section: comparisons Updated: 2026-05-24 **Short answer:** EadBox and EadPlataforma are Brazilian EAD platforms focused on B2C INFO-PRODUCT CREATORS (creator sells course direct to consumer with affiliates, integrated checkout, Brazil gateway). Studeia focuses on B2B INSTITUTIONAL (school, exam prep, university, corporate T&D — multi-tenant, SSO/SCIM, AI tutor, gradebook, LTI). EadBox/EadPlataforma win in B2C info-product with affiliates. Studeia wins in academic/corporate EAD with real AI. Hotmart/Eduzz also compete in B2C info-product space. ## Market positioning | Platform | Primary focus | Typical customer | |---|---|---| | **Studeia** | B2B institutional | K-12 school, ENEM prep, university, corporate T&D | | **EadBox** | B2C info-producer (with affiliates) | Productivity course creator, languages, marketing | | **EadPlataforma** | B2C info-producer + small B2B | Coach, consultant, medium company with internal courses | | **Hotmart** | Marketplace + B2C info-product | Creator selling course broadly (mass market) | | **Eduzz** | Marketplace + B2C info-product | Same as Hotmart | | **Sambatech** | Corporate video | Large company with video library | ## When to choose each ### EadBox ✅ Individual course creator (coach, consultant) ✅ Sells course direct to consumer (B2C) ✅ Wants native affiliate system ✅ Wants 8 integrated payment gateways ### EadPlataforma ✅ Same as EadBox but also medium companies with internal T&D ✅ Wants pre-ready courses from platform catalog ### Studeia ✅ K-12 school with BNCC ✅ ENEM/college prep ✅ EAD college or university ✅ Serious corporate T&D (compliance, SSO Okta/Azure AD, OB 3.0 certificates) ✅ Wants real AI tutor (multi-agent, per-tenant RAG) ✅ Wants academic gradebook (rubrics, weights, integrity flags) ✅ Wants LTI integration ### Hotmart/Eduzz ✅ Wants to enter existing marketplace (visibility) ✅ Sells broad digital info-product ✅ Accepts paying high transaction % (~10-20%) for marketplace traffic ## TCO compared — 200-student private school / 3 years | Item | Studeia (Enterprise) | EadPlataforma Profissional | |---|---|---| | Monthly | R$3,000/mo × 36 = R$108k | R$397/mo × 36 = R$14.3k | | AI cost | R$22-58k (proportional) | R$0 (basic included) | | Included features | AI tutor + LTI + SSO + psychometrics + gamification OB 3.0 + parent AI portal | Basic AI quiz + community + checkout | | **TOTAL 3 years** | **R$130-166k** | **R$14k** | **EadPlataforma is ~10x cheaper.** But: no real AI tutor, no weighted gradebook, no LTI, no Enterprise SSO, no mobile white-label, no robust parent portal. ## Honest verdict **For individual B2C creator with affiliates**: EadBox > Studeia (Studeia doesn't serve this case). **For serious school/exam prep/university/T&D**: Studeia > EadBox/EadPlataforma (pedagogy + AI + compliance). **For marketplace selling**: Hotmart/Eduzz (Studeia doesn't apply). **Hybrid**: company that BOTH sells B2C course (EadBox/Hotmart) AND needs to train employees B2B (Studeia) — using both makes sense. ## See also - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) - [Use case: Professional certification](/use-cases/professional-certification) ## FAQ **Q: What's the difference between Studeia, EadBox and EadPlataforma?** EadBox and EadPlataforma focus on **B2C info-product creators** (sell online course direct to consumer — affiliates, integrated checkout, Brazilian payment gateways). Studeia focuses on **B2B institutional** (school, exam prep, university, corporate T&D — multi-tenant, SSO/SCIM, AI tutor, professional gradebook, LTI). Different use cases. **Q: Does Studeia have integrated checkout/affiliates/payment gateway?** For B2B institutional: integrates Stripe and Asaas (Brazilian PIX/boleto). For B2C with affiliates: NO native system in Hotmart/Eduzz style. Who needs that uses EadBox/EadPlataforma. **Q: Which is cheaper for 100 students?** EadPlataforma Profissional: R$397/mo. EadBox Pro: R$197/mo. Studeia Escala: R$1,500/mo. Studeia is more expensive but includes: real AI tutor, weighted gradebook with rubrics, Enterprise SSO, LTI, B2B mobile white-label, psychometric analytics. EadBox/EadPlataforma focus on delivering course + charging — Studeia focuses on TEACHING + measuring. **Q: Do EadBox/EadPlataforma have AI?** EadBox launched 'IA Pro' in 2024 (lesson summary, quiz generation — basic, OpenAI-based). EadPlataforma has quiz generation via AI. Both limited vs Studeia (multi-agent, per-tenant RAG, Claude/GPT/Grok/Gemini fallback, misconception detection, supervisor agent). --- # [en-US] Studeia vs Edmodo (discontinued) — alternatives in 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-edmodo Locale: en-US Section: comparisons Updated: 2026-05-24 **Short answer:** Edmodo was discontinued September 22, 2022 (NetDragon), forcing schools to migrate. Top alternatives in Brazil: (1) Google Classroom — free, basic, ideal with Google Workspace; (2) Microsoft Teams for Education — free with MS 365; (3) Studeia — R$250–1,500/mo, full EAD platform with AI tutor, gamification, parent portal, native LGPD, and structured gradebook. For K-12 Brazilian schools needing more than basic tools, Studeia + Google Classroom is the recommended setup ## Context: Edmodo discontinued **Announcement**: July 2022 **Shutdown**: September 22, 2022 **Cause**: NetDragon (owner since 2018) decided to end global operations. Edmodo had ~100M users pre-closure, predominantly K-12 schools. Brazil had significant base. ## What Studeia offers vs what Edmodo offered | Edmodo Feature | Studeia Equivalent | |---|---| | Social school-parent-student timeline | Forums + Announcements + parent portal with AI narrative | | Simple quizzes | Quiz engine with 8+ types + psychometric analytics | | Material sharing | Media library with folders + sharing + versioning | | Mobile app | Expo native app (Android published) | | Badges (Edmodo Snapshot) | Open Badges 3.0 + leaderboards + contests + rewards | | Calendar | Calendar with Google/Outlook sync | | Class groups | ClassGroup with scoped forums/announcements | | Google integration | Google Drive sync + SSO OIDC + Meet provider | **Plus features Edmodo did NOT have:** - Multi-agent AI tutor (Claude/GPT/Grok/Gemini with per-tenant RAG) - Structured gradebook (categories + rubrics + weights) - Native LGPD compliance (Brazil) - Complete white-label (Enterprise) - LTI 1.3 (integrate with other LMS) - Enterprise SSO (SAML/OIDC/SCIM) - Public API for integrations ## Comparison: 3 post-Edmodo alternatives | Aspect | Studeia | Google Classroom | MS Teams for Education | |---|---|---|---| | **K-12 Price** | R$250-1,500/mo | Free (with Workspace Edu Fund.) | Free (with A1) | | **Course structure** | Course→Module→Lesson | Class → assignments (flat) | Teams → channels | | **Gradebook** | Categories + weights + rubrics | Simple grades | Basic insights | | **Quiz engine** | 8+ types + psychometrics | Basic Google Forms | Basic Forms | | **AI Tutor** | Native multi-agent | Gemini (basic) | Copilot for Education (basic) | | **Gamification** | XP+badges+leaderboards+contests | NO | NO | | **Parent portal** | Robust + AI narrative | Limited (Guardian email) | Limited | | **Mobile** | Native white-label app | Classroom app | Teams app | | **LGPD** | Native | GDPR via DPA | GDPR via DPA | | **White-label** | Total (Enterprise) | NO | NO | | **LTI 1.3** | Tool provider | NO | NO | ## When to choose each ### Google Classroom ✅ K-12 school already pays Google Workspace for Education Fundamentals (free) ✅ Focus on basic management ✅ No need for gamification/badges/analytics ### MS Teams for Education ✅ K-12 school already pays Microsoft 365 A1 (free) ✅ Microsoft ecosystem (Word, Excel, PowerPoint) ### Studeia ✅ School/exam prep/corporate T&D wanting more than basic ✅ Want real AI tutor ✅ Want gamification to engage students ✅ Want robust parent portal with AI narrative ✅ Want own brand (white-label) ✅ Want native Brazilian LGPD ## Verdict Edmodo left a vacuum in K-12. **Google Classroom** became default free option. For schools wanting more than basic or not wanting Google dependency: **Studeia** fills the gap with AI tutor, gamification, structured gradebook and robust parent portal. ## See also - [Studeia vs Google Classroom](/comparisons/studeia-vs-google-classroom) ## FAQ **Q: Does Edmodo still exist in 2026?** No. Edmodo was discontinued on September 22, 2022 (announced July 2022). NetDragon, owner of Edmodo, shut down the service globally. Schools using Edmodo needed to migrate. Three most common options in Brazil: Google Classroom (free for K-12), Microsoft Teams for Education (free), or paid LMS like Studeia. **Q: Does Studeia replace Edmodo well?** Yes, with advantages. Edmodo was strong in: (1) school-parent-student communication via social timeline, (2) simple quizzes, (3) material sharing, (4) mobile app. Studeia has all those + parent portal with AI narrative, structured gradebook, AI tutor, gamification (XP/badges), 9 visual themes, white-label, native LGPD. Key difference: Studeia is paid (R$250-1,500/mo B2B) vs Edmodo was free. **Q: Free alternative to Edmodo?** Google Classroom (if school already pays Google Workspace for Education Fundamentals — free for K-12). Has basic communication, task assignment, Drive/Meet integration. Limitations: no structured gradebook, no rubrics, no gamification, no robust parent portal. **Q: How to migrate Edmodo content (if I still have backup)?** Edmodo allowed export before closing. If you have .zip backup: files can be uploaded via Studeia media library (POST /api/institution/media), quizzes need to be recreated manually or via question bank import (CSV/GIFT). Students via CSV. No automated migration — Edmodo didn't use IMS CC. --- # [en-US] Studeia vs Google Classroom: comparison 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-google-classroom Locale: en-US Section: comparisons Updated: 2026-05-23 **Short answer:** Google Classroom is free class management integrated with Google Workspace — excellent for schools already using Google (Docs, Drive, Meet) for basic tasks and communication. Studeia is complete B2B LMS with AI tutor, OB 3.0 gamification, quiz analytics, advanced gradebook, LTI, SCIM. For serious online learning + corporate T&D: Studeia wins. For basic class management in K-12 already paying Google Workspace: Classroom + Studeia together makes sense. ## Side-by-side comparison | Aspect | Studeia | Google Classroom | |---|---|---| | **Model** | Complete B2B LMS | Class management + tasks | | **Price** | R$250-1,500/mo (plans) | Included in Google Workspace | | **Support** | Studeia team | Google + community | | **AI Tutor** | Multi-agent Claude/GPT/Grok/Gemini | Integrated Gemini (basic) | | **Gradebook** | Categories + weights + rubrics + integrity | Simple grades (no category/weight/rubric) | | **Quiz engine** | 8 types + psychometric analytics | Google Forms (basic) | | **Gamification** | XP + OB 3.0 badges + leaderboards + contests | NONE | | **Forums** | Threads + replies + attachments | NONE (only comments on posts) | | **DMs** | Yes | Email (Gmail) | | **Live classes** | BBB+Zoom+Teams+Meet adapter | Integrated Google Meet | | **Mobile** | Native Expo white-label | Official Classroom app | | **LTI 1.3** | Tool provider | NO (Google doesn't offer) | | **SSO Enterprise** | SAML+OIDC+SCIM | Google account only | | **White-label** | Total (Enterprise) | NO (always Google brand) | | **Public API** | 64+ scoped endpoints | Basic Classroom API | | **Certificates** | OB 3.0 + custom | NO | | **LGPD** | Native | GDPR via Google DPA | ## Why Classroom doesn't replace full LMS 1. **No structured gradebook**: grades per task, no categories/weights/rubrics 2. **No quiz engine**: depends on Google Forms (limited types, no psychometrics) 3. **No course hierarchy**: everything is "Class". No Course > Module > Lesson concept 4. **No scheduled publishing**: everything published immediately 5. **No RAG/dedicated AI tutor**: Gemini in Classroom is basic vs Studeia multi-agent 6. **No analytics**: see who completed task, but no psychometric analysis 7. **No gamification**: zero XP, badges, leaderboards 8. **No certificates**: doesn't generate verifiable credentials 9. **No LTI**: doesn't integrate with other educational tools 10. **No structured communication**: comments on posts, no threaded forum with search ## Strategy Most common: K-12 school uses BOTH. Classroom for day-to-day operations, Studeia for curricular courses and gamification. ## See also - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) - [Studeia vs Canvas](/comparisons/studeia-vs-canvas) ## FAQ **Q: Is Google Classroom a real LMS?** Partially. Google Classroom is a free class management system (LMS lite) integrated with Google Workspace for Education. Excellent for schools already using Google (Docs, Drive, Meet). But lacks full LMS features: structured gradebook with weights and rubrics, robust quiz engine, gamification, AI tutor, psychometric analytics, forum communication, white-label B2B mobile, LTI, SCIM. For serious online learning: Classroom is insufficient. **Q: Can I use both together?** Yes, common. Classroom for basic tasks/communication + Google Drive integration; Studeia for structured courses, AI tutor, advanced gradebook, gamification. Studeia integrates with Google Drive (media sync) + Google Calendar + Google Meet, complementing Classroom. **Q: Is Google Classroom available for companies?** Yes, but limited. Workspace Business includes basic Classroom. Workspace Enterprise has additional features. But for corporate T&D, Classroom is weak — lacks compliance tracking, certificates, LTI, enterprise SSO beyond Google. Studeia is more suitable for T&D. **Q: Costs: Classroom is free, Studeia charges?** Classroom: free if your school already uses Google Workspace for Education Fundamentals (free). Paid Workspace: USD $3-5/student/month (no differentiated Classroom). Studeia: R$250-1,500/month for 10-100 students. For schools already paying Workspace: basic Classroom seems 'free'. But real TCO considers functionality — Classroom without extras vs Studeia with everything. --- # [en-US] Studeia vs Moodle: honest comparison 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-moodle Locale: en-US Section: comparisons Updated: 2026-05-23 **Short answer:** Studeia is Brazilian B2B SaaS with built-in AI, gamification, psychometric gradebook, white-label and B2B mobile (R$250-1,500/month for 10-100 students). Moodle is open-source, free but requires own hosting, dedicated admin, third-party plugins for AI/gamification/mobile, and has mature ecosystem (H5P, SCORM, plugins). For small to medium schools/exam prep/T&D in Brazil: Studeia generally wins on 3-year TCO. For large universities already in Moodle: complement via LTI. ## Side-by-side comparison | Aspect | Studeia | Moodle | |---|---|---| | **Model** | Managed SaaS | Open-source self-hosted | | **Price** | R$0-1,500/mo (plans) | Free + hosting + admin | | **Support** | Studeia team (PT/EN) | Community + Moodle Partners | | **Origin** | Brazil 2025 | Australia 2002 | | **AI Tutor** | Built-in multi-agent | Via plugins | | **Per-course RAG** | Built-in (Voyage AI + per-tenant) | Plugin | | **Gamification** | Built-in (XP, OB 3.0 badges, leaderboards) | Plugin (Level Up!, Game) | | **B2B Mobile** | Native Expo (Android published) | Moodle Mobile (official) | | **White-label** | Total (Enterprise) | Possible via theme + branding | | **SSO Enterprise** | SAML+OIDC+SCIM native | Plugins | | **Quiz integrity** | Tab switch, time anomalies, inline flags | Safe Exam Browser (SEB) | | **Psychometric analytics** | Cronbach, point-biserial, distractor | Plugin (Statistics) | | **Live classes** | BBB+Zoom+Teams+Meet (unified) | BBB native, others via plugin | | **LGPD/GDPR** | Native | Plugins + manual | | **i18n** | 4 languages built-in | 100+ languages (community) | | **LTI 1.3** | Tool provider | Consumer + provider | | **Public API** | 64+ scoped endpoints | Web Services REST/SOAP | | **Code customization** | Limited (API) | Total (open source) | | **Third-party plugins** | No ecosystem | >1500 active | ## When to choose Studeia ✅ School/exam prep/corporate T&D in Brazil with 1-500 students ✅ Want native LGPD (Brazilian data, enterprise DPA) ✅ Want real AI tutor (multi-agent, per-tenant RAG) ✅ Want Portuguese support ✅ Want modern native gamification (XP, OB 3.0 badges) ✅ Don't want to manage hosting/upgrades/backups ✅ Want functional B2B mobile ✅ Predictable 3-year TCO ## When to choose Moodle ✅ Public university with Moodle in production + customized plugins ✅ Have dedicated IT team (full-time Moodle admin) ✅ Need SCORM 2004 + H5P + complete IMS CP (legacy compatibility) ✅ Need MEC/ISO seals ✅ Want total code control (heavy modifications) ✅ Have >5000 students and license cost matters more than modern features ✅ Want to avoid vendor lock-in (open-source = smooth exit) ## Honest verdict **For 80% of small/medium Brazilian institutions (1-500 students)**: Studeia wins on TCO, modern features, Portuguese support and time-to-value (deploy = 1 day vs 30 days for managed Moodle). **For 15% (large universities, on Moodle for years)**: Moodle remains better choice due to inertia + ecosystem. Studeia as complement for new courses. **For 5% (companies that CANNOT have data in SaaS)**: Moodle self-hosted on-premise. Studeia doesn't yet offer on-premise. ## See also - [Studeia vs Canvas](/comparisons/studeia-vs-canvas) - [Studeia vs Google Classroom](/comparisons/studeia-vs-google-classroom) ## FAQ **Q: Does Studeia replace Moodle?** Depends on context. For small/medium Brazilian institutions (1-500 students) wanting managed SaaS, built-in AI, Portuguese support and native LGPD compliance: Studeia replaces it and eliminates hosting/maintenance. For large universities with Moodle already in production and ecosystem of customized plugins: partial migration makes more sense (Studeia as complement for new courses via LTI). **Q: Which is cheaper over 3 years (TCO)?** Moodle: FREE license + hosting ~$50-300/mo + part-time admin (~R$3-8k/mo) + paid plugins (~R$200/mo) + customization (consulting) = R$120k-200k over 3 years for 500 students. Studeia Crescimento (50 students R$1,000/mo) or Escala (100 students R$1,500/mo) or Enterprise: R$36k-50k over 3 years. For >500 students: Studeia Enterprise (custom) typically 30-50% cheaper than managed Moodle. **Q: Does Moodle have more features than Studeia?** Moodle has more EXTENSIONS (third-party plugin ecosystem). Studeia has more NATIVE modern features: multi-agent AI tutor, native gamification, gradebook with psychometrics, B2B Expo mobile, enterprise SSO/SCIM out-of-the-box, real white-label. Moodle requires plugins (free or paid) for most of these. **Q: Is Moodle better than Studeia at anything?** Yes, in several points: (1) H5P/SCORM/IMS ecosystem much more mature. (2) Third-party plugins (>1500 active). (3) Open-source = total control and code customization. (4) Institutional maturity (universities, government). (5) Brazilian educational compliance with MEC seal (Studeia doesn't yet). (6) Massive global community. **Q: Can I migrate from Moodle to Studeia?** Yes, partially. IMS Common Cartridge import (POST /api/institution/courses/import) brings modules, lessons, basic resources and QTI 1.2 quizzes. H5P content packages NOT natively supported (recreate as Studeia interactive subtypes). SCORM 2004 NOT supported. Students: import via CSV bulk or SCIM. --- # [en-US] AI Tutor: multi-agent pipeline URL: https://docs.studeia.com/features/ai-tutor/overview Locale: en-US Section: features Updated: 2026-05-23 **Short answer:** Studeia AI tutor executes 6 agents in pipeline: Orchestrator coordinates → StudentModelService loads student context → RetrievalAgent searches RAG → PedagogicalAgent selects strategy → LLM responds (with automatic fallback) → EvaluationAgent + ContentAgent + SupervisorAgent run in background. 3 agents are pure TypeScript (zero LLM cost), 3 are Haiku background (~$0.003 total). ## Pipeline detailed ### Pre-LLM (synchronous, zero LLM cost) 1. **StudentModelService.getSnapshot(userId, courseId)** loads ConceptMastery (Beta distribution per concept), active/resolving misconceptions, EpisodicMemory, quizContext (avgScore, passRate, weakAreas), ChatSession history. 2. **RetrievalAgent.retrieve(query, studentModel)** reformulates query, searches pgvector with tenant+course filters, boost by quizWeakAreas. 3. **PedagogicalAgent.select(studentModel, query)** evaluates mastery + applies adjustments (chat-quiz divergence, age, learning style) → returns strategy. 4. **buildEnrichedPrompt** assembles system prompt with strategy + RAG context + active misconceptions + recent quiz attempts. ### Main LLM (streaming, SSE) `router.stream(taskType: "chat_tutor", messages, options)` resolves provider via TenantTaskModelConfig. Fallback: Claude → OpenAI → xAI Grok → Google Gemini. Circuit breaker per provider (Redis state). Metering middleware: rate limit + credit check. ### Post-LLM (background via after(), fire-and-forget) 5. **EvaluationAgent** (Haiku, ~$0.001) classifies understanding, detects StudentMisconception, updates ConceptMastery (Bayesian). 6. **ContentAgent** (Haiku, ~$0.001) pre-generates follow-up exercise (Redis 30min TTL). 7. **SessionSummarizer** (every 10 turns, Haiku) summarizes long history. 8. **SupervisorAgent** (Haiku, ~$0.001) classifies severity + category, applies strikes/quarantine. ## Admin configuration - **TenantTaskModelConfig** chooses provider+model per task type - **PedagogicalConfig** configures thresholds per tenant (default 0.3, 0.5, 0.7, 0.9), domainOverrides, ageOverrides, learningStyleOverrides ## Limitations - **First-token latency**: 800-1500ms (including pre-LLM pipeline) - **Total turn latency**: 2-8s for medium response (~300 words) - **Context window**: limited by provider (Claude Sonnet 4.6 = 200K, GPT-4o = 128K) - **Voice**: not implemented (roadmap) ## See also - [AI Tutor: executive view](/platform/ai-tutor) - [RAG Ingestion](/features/ai-tutor/rag-ingestion) - [Safety Supervisor](/features/ai-tutor/safety-supervisor) ## FAQ **Q: How many AI agents does the tutor use?** 6 active agents: Orchestrator (pure TypeScript), RetrievalAgent (pure TypeScript), PedagogicalAgent (pure TypeScript), main LLM (Claude/GPT/Grok/Gemini with fallback), EvaluationAgent (Haiku background), ContentAgent (Haiku background), SupervisorAgent (Haiku background). 3 are deterministic (zero LLM cost), 3 are background fire-and-forget (~$0.003 total per turn cost). **Q: How much does a complete tutor turn cost?** Typically $0.005-$0.05 per complete turn. Breakdown: main LLM (Sonnet) $0.005-$0.04 + EvaluationAgent (Haiku) $0.001 + ContentAgent (Haiku) $0.001 + SupervisorAgent (Haiku) $0.001. **Q: Can I disable the AI tutor for a specific course?** Yes. Course.aiTutorEnabled (boolean, default true). Institutional admin toggles in /institution/courses/[id]/settings. --- # [en-US] RAG Ingestion: AI tutor with course material URL: https://docs.studeia.com/features/ai-tutor/rag-ingestion Locale: en-US Section: features Updated: 2026-05-23 **Short answer:** RAG Ingestion in Studeia allows the AI tutor to cite your course material. POST /api/institution/courses/[id]/rag-ingest extracts text from lessons (slides, videos with transcription, PDFs, quizzes), chunks at 800 tokens with 200 overlap, generates embeddings via Voyage AI (1024 dims, OpenAI fallback) and stores with tenant+course filter. Full or incremental modes. autoSyncRag=true reingests automatically on lesson edit. ## How it works ``` POST /api/institution/courses/[courseId]/rag-ingest Body: { "mode": "full" | "incremental" } ↓ 1. List published lessons in course 2. Extract text per type (rich_text → strip HTML, slides → text+notes, quiz → Q+A, pdf → OCR, video → transcription) 3. Chunking: 800 tokens, 200 overlap 4. Embeddings via Voyage AI (1024 dims, fallback OpenAI) 5. Create ContentBlock + ContentEmbedding with metadata 6. Final status in CourseRagIngestion ``` ## Modes **`mode: "full"`**: Deletes ALL ContentBlock + ContentEmbedding of course and re-ingests everything. Use for first ingestion or major reorganization. **`mode: "incremental"`**: Identifies lessons modified after last ingestion, deletes only those chunks and reingests. Recommended for production. ## tenantOnlyMode RetrievalAgent runs with `tenantOnlyMode: true` — tutor NEVER cites content from another tenant, even if similar content exists in database. ## Limitations - **Images**: not converted to embeddings. Roadmap: auto description via vision LLM. - **Math equations**: extracted as LaTeX-like text. Quality depends on original markup. - **Videos without transcription**: not ingested. Configure auto-transcription first. - **Max size per course**: pgvector supports millions of vectors but retrieval latency grows. >10K chunks per course can be slow. ## See also - [AI Tutor Overview](/features/ai-tutor/overview) ## FAQ **Q: Does the AI tutor cite my course material?** Yes, but you need to ingest the course in RAG first. POST /api/institution/courses/[id]/rag-ingest (modes: full | incremental). System extracts text from all published lessons, chunks, generates embeddings via Voyage AI and stores with tenantId+courseId filter. After this, all tutor conversations about the course cite the correct material. **Q: How to update RAG when I edit a lesson?** Set Course.autoSyncRag=true. Every lesson edit via API triggers incremental reingest via after() (background, doesn't block admin). Alternatively, trigger manually: POST /api/institution/courses/[id]/rag-ingest body {mode: 'incremental'}. **Q: How much does it cost to ingest a course?** Embeddings via Voyage AI: ~$0.00005/1K tokens. Medium course (30 lessons, 50K words = ~70K tokens) costs ~$0.004 in embeddings on first ingestion. Incremental is proportional to delta. **Q: What lesson types are ingested?** rich_text (HTML strip), slides (text elements + speaker notes), quiz (question + explanation), pdf (document-extractor), video (LiveClassTranscription when available), assignment (instructions). external_link and live_class without transcription are not ingested. --- # [en-US] Safety Supervisor: AI moderation of tutor chat URL: https://docs.studeia.com/features/ai-tutor/safety-supervisor Locale: en-US Section: features Updated: 2026-05-23 **Short answer:** Studeia AI Supervisor Agent moderates the AI tutor chat in background after each turn using Claude Haiku (~$0.001/turn). Classifies in 5 severity levels (low/medium/high/critical/safety) and 8 categories (inappropriate language, violence, illegal, sexual, off-topic, harassment, self_harm, jailbreak_attempt). 3 strikes in 7 days = 48h quarantine. Self-harm (severity=safety) NEVER punishes — shows welcoming + crisis resources + URGENT admin alert. ## Philosophy 1. **Background moderation, not gatekeeping** — supervisor analyzes after response, doesn't block stream. 2. **Self-harm as crisis, not infraction** — never punish a suffering student. 3. **Configuration cascading** — admin can disable per tenant or course when context requires. 4. **Complete audit** — every incident, status transition, quarantine, appeal logged in AdminAuditLog. ## Severity rules | Severity | Typical category | 1st infraction action | 2nd+ action | |---|---|---|---| | **low** | mild inappropriate language | warn | strike +1; 3 strikes = 48h quarantine | | **medium** | persistent off-topic, jailbreak | warn + register | strike +1; 3 strikes = 48h quarantine | | **high** | violence, sexual, illegal | 48h quarantine | 7-day quarantine | | **critical** | threats, extreme content | 7-day quarantine | indefinite + admin review | | **safety** | self_harm | NEVER quarantine — 24h cooldown + welcoming + admin URGENT | same | ## Quarantine appeal Student in quarantine sees `QuarantineNotice` component with countdown + appeal form (max 500 chars, 1 per quarantine). Admin can: acknowledge, dismiss (releases quarantine), resolve, or ignore (quarantine auto-expires). ## Configuration ### Enablement cascade ``` Course.supervisorEnabled (null = inherit) ↓ Tenant.supervisorEnabled (null = inherit) ↓ default = true for B2B ``` Versioned Redis cache: `supervisor-flag-version:{tenantId}`. Every mutation calls `bumpSupervisorFlagVersion(tenantId)`. ### Only global admin edits - `PATCH /api/admin/tenants/[id]/supervisor` — toggle per tenant - `PATCH /api/admin/courses/[id]/supervisor` — toggle per course - Both require `role === "admin"` global + audited ## Known limitations - **False-positive in medical/pharmacology context**: course context is sent to supervisor for whitelist. Solution: disable supervisor for specific courses. - **Language**: supervisor prompt is localized (4 languages), but classification may have small quality variations between PT-BR and EN-US. - **Sophisticated jailbreaks**: very elaborate prompt injection attacks may pass. Mitigation: defense in layers. - **Privacy vs safety tradeoff**: messagesSnapshot is PII. Maximum 2 year retention. Global admin sees in audited UI. ## See also - [AI Tutor Overview](/features/ai-tutor/overview) - [LGPD compliance](/legal/lgpd-rights-guide) ## FAQ **Q: How does Studeia protect students in AI chat?** Three layers: (1) Tutor system prompt includes guardrails. (2) Supervisor Agent (Haiku, background, ~$0.001) classifies each turn in 5 severity levels x 8 categories. (3) For self-harm (severity=safety), tutor is interrupted with welcoming message + crisis resources (in Brazil: CVV 188, SAMU 192) + URGENT admin notification. **Q: If student writes something inappropriate, what happens?** Depends on severity. LOW (1st infraction): warning. MEDIUM: warning + incident logged. 3 strikes (LOW or MEDIUM in 7 days): 48h quarantine. CRITICAL: 7-day quarantine + admin notification. SAFETY (self-harm): NEVER punishment — welcoming + crisis resources + URGENT alert. **Q: Does quarantine prevent student from using the platform?** Only AI tutor chat. Student keeps access to courses, lessons, materials, gradebook, messages with teacher. Student can submit appeal (max 500 chars, 1 per quarantine) reviewed by institutional admin. **Q: Can I disable supervisor for a specific course?** Yes. Cascading: Course.supervisorEnabled (null = inherit) → Tenant.supervisorEnabled → default ON. Global admin edits via /admin/ai-supervisor/tenants. Useful for medical/pharmacology/anatomy courses where sensitive terms are legitimate. **Q: Is self-harm treated as an infraction?** NEVER. Self-harm (severity=safety) is crisis, not infraction. System: (1) Interrupts tutor with welcoming message. (2) Shows crisis resources. (3) URGENT admin email immediately. (4) Creates incident in 'open' status for human review. (5) NEVER strikes or quarantines. --- # [en-US] Gradebook: grades, categories and rubrics URL: https://docs.studeia.com/features/assessment/gradebook Locale: en-US Section: features Updated: 2026-05-23 **Short answer:** Studeia gradebook organizes grades via GradeCategory (weights), GradeItem (activities) and Grade (individual scores). Supports multi-criteria rubrics, expandable breakdown for students, CSV export, inline integrity flags (ShieldAlert for quiz with tab switches/time anomalies), configurable drop-lowest categories, automatic late penalty, release policy (immediate/manual/scheduled). ## Model ``` GradeCategory (weight, drop_lowest_n, late_penalty_pct) └── GradeItem (activity — quiz, assignment, manual) └── Grade (per-student grade) └── Rubric (optional — criteria) ``` ## Calculation ``` courseGrade = Σ (categoryAvg × categoryWeight) / totalWeight categoryAvg = average(itemAvgs after drop_lowest) itemAvg = Σ studentGrades / itemMaxScore × 100 ``` Late penalty applied if `submittedAt > dueDate`. ## Integrity flags Inline in gradebook next to each quiz grade: - 🛡️ Red ShieldAlert → tabSwitchCount > 5 OR avgTimePerQuestion < 2s - 🛡️ Yellow ShieldAlert → 2-5 tab switches OR 2-5s per question - Tooltip details: "Tab switches: 8, time per question: 1.2s avg" ## Export `GET /api/institution/courses/[id]/gradebook/export?format=csv` returns CSV with student, email, each GradeItem as column, total, status. Compatible with Google Sheets, Excel. ## See also - [Quiz Engine](/features/assessment/quiz-engine) ## FAQ **Q: How do I do weighted average?** Create GradeCategory with weight (e.g., 'Quizzes' 40%, 'Tests' 60%). Each GradeItem (activity) belongs to a category. Studeia calculates weighted average automatically. **Q: Can I use rubrics in assignments?** Yes. Create Rubric with criteria (each with scale 1-5 or custom). Link to a GradeItem or assignment lesson. When grading, teacher evaluates criterion-by-criterion and system calculates final grade + expandable breakdown for student. **Q: Does student see grade immediately?** Depends: GradeItem.releasePolicy controls. Options: 'immediate' (visible on publish), 'manual' (teacher decides), 'scheduled' (releaseAt date). Quiz auto-corrected with showResultsToStudent=true: immediate. **Q: Does it have plagiarism detection?** For text assignments: Turnitin integration via LTI (roadmap). For quiz: native academic integrity (tab switch, time anomalies — shown as ShieldAlert in gradebook). For essays: optional LLM detection (admin enables). --- # [en-US] Quiz Engine: configuration, integrity and psychometric analytics URL: https://docs.studeia.com/features/assessment/quiz-engine Locale: en-US Section: features Updated: 2026-05-23 **Short answer:** Studeia Quiz Engine: 8+ auto-corrected question types (multiple_choice, true_false, fill_blank, matching, ordering, numeric, short_answer, essay). Configuration with maxAttempts, timeLimitMinutes, shuffleQuestions/Options, accessCode, scoringPolicy (highest/latest/average), reviewMode. Academic integrity (tab switch, time anomalies). Psychometric analytics (Cronbach alpha, point-biserial discrimination, item difficulty, distractor analysis). Reusable question bank. ## Question types | Type | Auto-correction | Use cases | |---|---|---| | multiple_choice | Yes | Factual knowledge, concepts | | true_false | Yes | Quick verification | | fill_blank | Yes (normalization) | Vocabulary, formulas | | matching | Yes | Associations (word-definition) | | ordering | Yes | Logical/chronological sequence | | numeric | Yes (with tolerance) | Math/physics calculations | | short_answer | Yes (normalization + synonyms) | Short answers | | essay | Manual (or LLM optional) | Writing | ## Configuration ```json { "maxAttempts": 3, "timeLimitMinutes": 30, "shuffleQuestions": true, "shuffleOptions": true, "accessCode": "ENEM2026", "scoringPolicy": "highest", "reviewMode": "after_submit", "passingScore": 70, "allowGoBack": false } ``` ## Academic integrity QuizAttempt tracks: `tabSwitchCount`, `copyPasteCount`, `blurEvents`, `avgTimePerQuestionSec`, `flagged`. Gradebook shows ShieldAlert icon + tooltip. ## Psychometric analytics `/api/institution/courses/[id]/lessons/[lid]/quiz-analytics` returns: item difficulty, point-biserial discrimination, distractor analysis, Cronbach's alpha, score distribution. Requires ≥ 30 attempts for statistical reliability. ## Question bank Reusable in multiple quizzes. Import via JSON, CSV, or GIFT format. Each question has `concepts[]` (mapped to ConceptMastery). Exporters: GIFT (Moodle/Canvas/Blackboard compatible), CSV. Bank can be ingested in RAG. ## Honesty **What Studeia does well**: Multi-provider AI for misconception detection, psychometric analytics in UI, question bank with RAG ingestion, passive academic integrity. **What Studeia does NOT do** (yet): Proctoring with webcam/microphone (privacy), lockdown browser, IP whitelist per quiz, advanced question pooling (Canvas Quizzes 2.0 better), adaptive testing (CAT). ## See also - [Gradebook](/features/assessment/gradebook) ## FAQ **Q: How many question types does Studeia support?** 8+ types: multiple_choice, true_false, fill_blank, matching (pairs), ordering (sequence), numeric (with tolerance), short_answer (with normalization), essay. 7 auto-corrected (essay is manual or via LLM if enabled). **Q: How to detect cheating in quiz?** Built-in academic integrity: tab switch detection (increments QuizAttempt.tabSwitchCount), time anomalies (answer in <2s indicates guessing or cheating), copy/paste detection, viewport blur events. Flags shown in gradebook with ShieldAlert icon + explanatory tooltip. **Q: What analytics does Studeia offer for quiz?** Psychometric analytics: item difficulty (% correct), point-biserial discrimination (item-total correlation), distractor analysis (which wrong option is most popular = misconception clue), Cronbach's alpha (internal consistency), score distribution (10 buckets), flags for problematic items. Comparable to what Canvas Quizzes offers + some extensions. **Q: Does quiz have per-student analysis?** Yes. QuizAttempt logs each attempt with timestamp, answers, score, timeSpent, integrity flags. Student sees history in /grades/. Teacher sees detail in /institution/courses/[id]/lessons/[lid]/attempts. Includes per-question time footprint. --- # [en-US] Automations (native mini-n8n) URL: https://docs.studeia.com/features/automations/overview Locale: en-US Section: features Updated: 2026-05-23 **Short answer:** Studeia has built-in 'mini-n8n' automation engine. Pattern: Trigger → Condition → Action. 3 trigger types (platform event, scheduled cron, public webhook). 14+ events. 8 actions. UI wizard + run history. ## Triggers (3 types) 1. **event** — triggered by platform events via `emitAutomationEvent()` in `after()`. Events: lesson_completed, module_completed, course_completed, quiz_submitted, enrollment_created, enrollment_completed, forum_post_created, forum_reply_created, grade_posted, announcement_created, live_class_started, student_inactive, tag_added_to_user, tag_removed_from_user, webhook_received, scheduled_trigger. 2. **scheduled** — cron-based (interval, daily, weekly, cron). Processed by `GET /api/cron/automations`. 3. **webhook** — public endpoint authenticated by 64-char hex token. URL: `/api/automations/webhook/[token]`. ## Conditions ```json { "logic": "and", "rules": [ { "field": "user.role", "operator": "eq", "value": "student" }, { "field": "event.score", "operator": "gte", "value": 80 } ] } ``` Operators: eq, neq, gt, gte, lt, lte, contains, not_contains, in, not_in. ## Actions (8 types) send_notification, add_tag, remove_tag, create_announcement, send_webhook, send_web_request, enroll_user, trigger_automation. Template interpolation: `{{user.name}}`, `{{event.score}}`, etc. ## Security - Tenant isolation - SSRF prevention (`url-validator.ts`) — blocks private IPs, localhost, metadata endpoints (IPv4 + IPv6) - HTTP timeout: 10s via AbortController - Webhook token: 64-char hex, rotatable - Chain depth max 5 ## See also - [Platform overview](/platform/overview) ## FAQ **Q: Does Studeia have built-in automations?** Yes. Native 'mini-n8n' engine: Trigger → Condition → Action. 3 trigger types (platform event, scheduled, public webhook) with 14+ events. 8 action types (in-app notification, add/remove tag, create announcement, send webhook, send web request, enroll user, trigger automation). UI wizard 4 steps + run history. **Q: Can I trigger webhook when student completes quiz?** Yes. Trigger: event quiz_submitted. Optional condition (e.g., score >= 80). Action: send_webhook to your URL. Template interpolation supported: {{user.name}}, {{event.score}}, {{event.lessonTitle}}. **Q: Is there rate limiting?** Yes. Per automation: maxRunsPerHour + maxRunsPerDay. Checked via Redis INCR with DB count fallback. **Q: Can I chain automations?** Yes. Action trigger_automation calls another automation. Chain depth max 5 levels (anti-infinite loop). --- # [en-US] CMS: courses, modules and lessons URL: https://docs.studeia.com/features/cms/courses-modules-lessons Locale: en-US Section: features Updated: 2026-05-23 **Short answer:** Studeia organizes content in Course → Module → Lesson hierarchy. Each course belongs to a Tenant, can have multiple modules (with sortOrder), each module can have multiple lessons with 8 types (slides, video, PDF, rich_text, quiz, assignment, live_class, external_link) + 6 interactive subtypes. CRUD via UI or public API. Support for clone, IMS CC import, AI auto-generation (PDF→course), scheduled publishing (publishAt) and RAG ingestion for AI tutor. ## Hierarchy ``` Tenant (Institution) └── Course (title, slug, status, theme, publishAt, aiTutorEnabled) └── CourseModule (title, sortOrder) └── CourseLesson (type, content JSON, sortOrder, isPublished, publishAt) ├── CourseLessonMedia (N:N with MediaAsset) └── LessonCompletion (1:N per studentId) ``` ## CRUD endpoints ``` POST /api/institution/courses GET /api/institution/courses GET /api/institution/courses/[id] PATCH /api/institution/courses/[id] DELETE /api/institution/courses/[id] POST /api/institution/courses/[id]/clone POST /api/institution/courses/import (IMS CC) POST /api/institution/courses/[id]/modules PATCH /api/institution/courses/[id]/modules/[mid] DELETE /api/institution/courses/[id]/modules/[mid] PATCH /api/institution/courses/[id]/modules/reorder POST /api/institution/courses/[id]/modules/[mid]/lessons PATCH /api/institution/courses/[id]/modules/[mid]/lessons/[lid] DELETE /api/institution/courses/[id]/modules/[mid]/lessons/[lid] ``` Scopes: `courses:read` (GET) | `courses:write` (POST/PATCH/DELETE). ## Course status `Course.status: draft | published | archived`. `Course.publishAt` schedules automatic publishing via cron. ## Scheduled publishing Combine `Course.publishAt` with `Lesson.publishAt` for granular control. `checkLessonAvailability()` validates in ALL lesson endpoints. ## Prerequisites `Lesson.prerequisiteLessonId` points to lesson that MUST be complete before access. ## Clone `POST /api/institution/courses/[id]/clone` creates new Course with deep copy of modules + lessons. Does NOT copy: Enrollments, LessonCompletions, ClassGroups, QuizAttempts, RAG ingestion. Respects plan limit. ## IMS CC import Supports IMS CC v1.0, v1.1, v1.2, v1.3. Resources: web links, file resources, basic LTI links, QTI 1.2 quizzes, web content. NOT supported: H5P content packages, SCORM 2004 PIF, IMS CP. ## Limitations - Maximum 100 modules per course (soft limit, performance) - Maximum 200 lessons per module (soft limit, UX) - Content JSON per lesson up to 5MB - Slug must be unique per tenant + language ## See also - [Lesson types](/features/cms/lesson-types) - [RAG ingestion](/features/ai-tutor/rag-ingestion) ## FAQ **Q: How to create a new course?** Via UI: /institution/courses > New Course. Define title, slug, description, visual theme, status (draft). Via API: POST /api/institution/courses (scope courses:write). After creating, add modules and lessons. **Q: Can I clone an existing course?** Yes. POST /api/institution/courses/[id]/clone. Creates copy with new slug, same modules and lessons (deep copy). Useful for creating new classes based on existing course. Respects plan course limit. **Q: Can I import content from Moodle/Canvas/Blackboard?** Yes, via IMS Common Cartridge (IMS CC v1.x). POST /api/institution/courses/import with .imscc file. Parser extracts modules, lessons, resources (PDFs, links, basic quizzes). H5P and SCORM 2004 are not 100% supported — only native IMS CC. **Q: How to publish lesson with scheduled date?** Set lesson.isPublished=false + lesson.publishAt=timestamp. Student doesn't see lesson until publishAt. checkLessonAvailability() validates in all endpoints (quiz, complete, view). --- # [en-US] 8 lesson types + 6 interactive subtypes URL: https://docs.studeia.com/features/cms/lesson-types Locale: en-US Section: features Updated: 2026-05-23 **Short answer:** Studeia supports 8 primary lesson types (slides, video, PDF, rich text, quiz, assignment, live class, external link) and 6 interactive subtypes (interactive_video, drag_drop, fill_blanks, flashcard_set with SRS, timeline, branching_scenario). Each type has dedicated visual editor and optimized viewer. Content stored as structured JSON in CourseLesson.content. ## Primary types 1. **slides** — Presentation with rich elements (heading, paragraph, image, list, code, callout). Speaker notes. Fullscreen viewer with keyboard navigation. 2. **video** — youtube/vimeo/upload sources. Auto-transcription via Whisper when mediaAssetId. 3. **pdf_viewer** — react-pdf, navigation, zoom, full text search. 4. **rich_text** — Tiptap editor with extensions (tables, code blocks, images, links, math). HTML sanitized server-side. 5. **quiz** — 8+ question types, full configuration (maxAttempts, timeLimit, shuffle, etc). 6. **assignment** — Instructions, dueDate, maxScore, submissionType (text/file/both), rubricId. Submissions in private bucket. 7. **live_class** — References LiveClass entity (BBB/Zoom/Teams/Meet). 8. **external_link** — URL with description, openInNewTab. ## Interactive subtypes When `lesson.subtype !== null`: 1. **interactive_video** — Video with checkpoints (mandatory questions before continuing) 2. **drag_drop** — Items to drag to targets 3. **fill_blanks** — Text with placeholders, accepted answers 4. **flashcard_set** — Cards with SRS SM-2 spaced repetition 5. **timeline** — Interactive timeline with zoom 6. **branching_scenario** — Decision tree for simulations (clinical case, ethical dilemma, negotiation) ## Editors (Lesson Builder) Each type has dedicated visual editor in `components/lesson-builder/`. Subtypes in `components/interactive/`. ## Limitations - **Quiz essay without native auto-correction** — admin can enable LLM grading (additional cost) - **Interactive subtypes don't migrate to H5P** — Studeia proprietary format - **Branching_scenario max depth 10 levels** — anti-infinite loop ## See also - [CMS: courses, modules, lessons](/features/cms/courses-modules-lessons) - [Quiz Engine](/features/assessment/quiz-engine) ## FAQ **Q: How many lesson types exist?** 8 primary types: slides, video, pdf_viewer, rich_text, quiz, assignment, live_class, external_link. Plus 6 interactive subtypes when lesson.subtype !== null: interactive_video (with checkpoints), drag_drop, fill_blanks, flashcard_set (SRS SM-2), timeline, branching_scenario (decision tree). **Q: Do I need H5P for interactive content?** No. Studeia has 6 native interactive subtypes: interactive_video (with checkpoints and inline quiz), drag_drop, fill_blanks, flashcard_set (with SRS SM-2 algorithm), timeline and branching_scenario. H5P can be embedded via external_link but is not necessary. **Q: Is quiz auto-corrected?** Yes, for 7 of 8 types: multiple_choice, true_false, fill_blank, matching, ordering, numeric, short_answer (with normalization). Only essay is manual correction (or LLM-based if admin enables). **Q: Can I embed YouTube or Vimeo video?** Yes. Lesson type=video, content { source: 'youtube' | 'vimeo' | 'upload', embedUrl: '...' }. Also supports upload via media library (with optional transcoding and automatic Whisper transcription). --- # [en-US] Native gamification: XP, badges, leaderboards, contests, rewards URL: https://docs.studeia.com/features/gamification/overview Locale: en-US Section: features Updated: 2026-05-23 **Short answer:** Studeia has complete native gamification: XP engine with hierarchical config (tenant→course), 11 badge criteria with AND/OR boolean logic, badges exportable as OB 3.0 (Open Badges 3.0 — W3C Verifiable Credential), Redis ZSET leaderboards (course/group scope, alltime/weekly/monthly windows), contests with 7 metrics (lifecycle draft→active→ended), rewards shop with virtual coins and dedicated AI agent for admin to create strategy via natural chat. ## XP engine `handleGamificationEvent()` integrated in 7 routes (lesson complete, quiz, chat tutor, forum post/reply, live class join, assignment submit). Default rules: - lessonComplete: 50, quizPass: 30, quizPassFirstTry: 50 - assignmentSubmit: 40, forumPostCreate: 10, forumReplyCreate: 5 - chatTutorMessage: 2, liveClassJoin: 20, dailyLogin: 5 - Streak bonus: 7d=+100, 30d=+500 ## Levels Configurable thresholds (default: level N = 100 × N²). Level up triggers `badge_earned` event + push notification (mobile). ## Badges — 11 criterion types lesson_count, quiz_pass_count, quiz_score_avg, streak_days, level_reached, total_xp, course_complete, forum_posts, concept_mastery, time_spent, manual. Compound (AND/OR, max depth 3) supported. ## Open Badges 3.0 Public page `/public/badges/verify/[id]` (no auth). JSON-LD OB 3.0 at `/api/badges/verify/[id]`. LinkedIn Add to Profile compatible. ## Leaderboards Redis ZSET. Scopes: course, class_group. Windows: alltime, weekly, monthly. Anonymous mode available. ## Contests Lifecycle draft → active → ended (cron auto-start/end). 7 metrics. Scope course/class/tenant. ## Rewards shop certificate_template, profile_customization, badge_special, virtual_item. Atomic redemption (anti-race). Refund on admin denial. ## Gamification AI agent Admin creates/manages gamification via chat. 19 tools. Loop tool_use max 15 iterations. ## Parent reports Integrated in `advanced-reports.ts`. Parent portal shows badge grid + streak counter. LLM report cites: "Maria completed 3 courses and earned 5 badges this month". ## See also - [Platform overview](/platform/overview) ## FAQ **Q: Does Studeia have native gamification?** Yes, complete. XP per activity (hierarchical config tenant→course), configurable levels, badges with 11 automatic criteria (compound AND/OR), Redis ZSET leaderboards with course or class group scope and weekly/monthly/alltime windows, contests with 7 metrics, rewards shop with virtual coins. Plus dedicated AI agent for admin to create strategy via chat. **Q: Do badges follow Open Badges standard?** Yes. Badges exportable as OB 3.0 (Open Badges 3.0 — W3C Verifiable Credential JSON-LD). Each UserBadge has public verification page (/public/badges/verify/[id]) with schema.org EducationalOccupationalCredential — compatible with LinkedIn Add to Profile. **Q: How to configure XP per lesson completion?** Tenant Settings > Gamification > XP Rules. Each activity has base XP (lessonComplete: 50, quizPass: 30, etc). Course can override (CourseGamificationConfig). Bonus for daily streak, first time, difficulty, etc. **Q: Can I disable gamification in a course?** Yes. CourseGamificationConfig.enabled=false. Student sidebar hides 'Gamification' if student has no active course with gamif enabled. Course sub-nav hides 'Gamification' tab for specific courses with flag off. --- # [en-US] Multi-provider live classes (BBB, Zoom, Teams, Meet) URL: https://docs.studeia.com/features/live-classes/overview Locale: en-US Section: features Updated: 2026-05-23 **Short answer:** Studeia live classes support 4 providers via adapter pattern: BigBlueButton (default, iframe embed), Zoom (Server-to-Server OAuth), Microsoft Teams (Graph API), Google Meet (OAuth Calendar). AES-256-GCM encrypted credentials. Webhook lifecycle + cron recording sync (15min fallback). Automatic LiveClassTranscription for Zoom/Teams (RAG-ingestible). ## Supported providers | Provider | Auth | Join | Recordings | Transcript | |---|---|---|---|---| | BBB | sharedSecret | iframe | Yes, native API | Text provided | | Zoom | Server-to-Server OAuth | new tab | Webhook + cron | VTT auto | | Teams | Client Credentials | new tab | Graph API + cron | VTT auto | | Google Meet | OAuth + Calendar API | new tab | Calendar API + cron | Manual in Meet | ## Adapter pattern `resolveVideoProvider(tenantId, liveClass?)` cascades: 1. `liveClass.videoProvider` (if specified) 2. `VideoProviderConfig.isDefault` 3. `Tenant.config.bbb` (legacy backward compat) 4. BBB env vars (global fallback) ## Webhooks and recording sync - `POST /api/webhooks/video/zoom` — meeting events + recording.completed - `POST /api/webhooks/video/teams` — Graph notifications - `GET /api/cron/recording-sync` — polling every 15min as fallback ## Credentials Stored in `VideoProviderConfig` with AES-256-GCM. Unique: `[tenantId, provider]`. ## Limitations - **BBB**: needs self-hosted instance (or managed BBB provider). Cost: $20-200/month. - **Zoom**: duration limit per tier (free=40min, paid=unlimited). - **Teams**: endMeeting not supported via API. - **Google Meet**: recording/transcription started manually by host. - **Streaming to YouTube/Twitch**: not natively supported. ## See also - [Platform overview](/platform/overview) ## FAQ **Q: What video provider does Studeia use?** 4 options: BigBlueButton (default, iframe embed, open-source), Zoom (Server-to-Server OAuth), Microsoft Teams (Azure AD Client Credentials), Google Meet (OAuth admin consent). Admin chooses per tenant (VideoProviderConfig default) or per specific lesson (LiveClass.videoProvider override). **Q: Do BBB and Zoom work the same way for students?** Not exactly. BBB supports iframe embed (joinMethod='iframe', student sees lesson inside Studeia). Zoom, Teams and Meet open in new tab (joinMethod='external', X-Frame-Options blocks iframe). UI shows card with countdown + 'Join' button for these 3. **Q: Are recordings available?** Yes, automatically. Provider webhook notifies when recording is ready + cron /api/cron/recording-sync runs every 15min as fallback. recordingUrl saved in LiveClass. For Zoom/Teams: VTT transcript also captured (creates LiveClassTranscription that can be ingested in RAG). **Q: Can I restrict live class to a specific group?** Yes. LiveClass.classGroupId optional. When set: only students from that group see and can join (critical rules 45-48). Without classGroupId: all enrolled in course see. --- # [en-US] EAD/LMS glossary: technical terms URL: https://docs.studeia.com/glossary Locale: en-US Section: glossary Updated: 2026-05-23 **Short answer:** Complete glossary of technical terms used in online learning/LMS, AI tutor, gamification, SSO Enterprise, LTI, SCIM, RAG and SaaS architecture. ~80 terms with short definitions and cross-references to detailed pages. ## A **API Key** — Authentication key for Studeia public API. Generated at /institution/settings/api-keys, format `mia_` + 40 hex chars. Stored as SHA-256 hash, never exposed after creation. **AGS (Assignment and Grade Service)** — LTI 1.3 service allowing tools (like Studeia) to send grades back to LMS consumer (Canvas, Moodle, Blackboard). ## B **Badge** — Achievement marker. Studeia uses Open Badges 3.0 (W3C Verifiable Credential). Can be earned automatically (11 criteria) or manual (teacher award). **BBB (BigBlueButton)** — Open-source educational videoconferencing platform. Studeia integrates as default video provider via iframe embed. **BNCC** — Brazilian National Common Curricular Base. Studeia has basic support (tags per BNCC skill). ## C **Canvas LMS** — Dominant LMS in US universities (Instructure). Studeia works as LTI 1.3 tool in Canvas. **Chunking** — Division of long text into smaller segments for embedding and retrieval. Studeia uses 800 tokens with 200 overlap. **Circuit Breaker** — Resilience pattern that skips external provider when it fails repeatedly. Studeia uses for LLM fallback chain. **Concept Mastery** — Bayesian probability (Beta distribution) of student mastering a specific concept. Calculated by ConceptMasteryEngine via interactions. **Cronbach's alpha** — Internal consistency coefficient of a quiz/assessment. Indicates if questions measure same construct. > 0.7 acceptable. Studeia calculates automatically. ## D **DPA (Data Processing Agreement)** — GDPR/LGPD contract defining personal data processing responsibilities. Studeia offers standard DPA for Enterprise customers. **Distractor Analysis** — In multiple-choice quiz, analyzes which wrong option is most chosen — clue to common misconception. ## E **EAD (Educação a Distância)** — Brazilian term for online learning/e-learning. **Embedding** — Vector representation of text (1024 dimensions in Studeia, generated via Voyage AI). Enables semantic search by similarity. **Enrollment** — Links Student to Course, optionally with ClassGroup. Status: active/completed/paused/cancelled. **EvaluationAgent** — Studeia AI agent (Haiku, background, ~$0.001/turn) that classifies student responses in chat and detects misconceptions. ## F **Fallback Chain** — Ordered sequence of providers to try when primary fails. Studeia LLM fallback: Claude → OpenAI → xAI Grok → Google Gemini. **FAQPage Schema** — Schema.org JSON-LD for FAQs. Structures Q&A for discovery by LLMs and Google AI Overviews. Studeia generates automatically for every docs page. ## G **GDPR** — General Data Protection Regulation (Europe). Studeia compliant via Enterprise DPA. European equivalent of LGPD. **Gradebook** — Grade book. Studeia: GradeCategory (with weights) > GradeItem > Grade. **Guardian** — Legal guardian (parent/tutor). Linked to student via GuardianLink (verified by SMS for LGPD/ECA compliance). ## H **Haiku (Claude Haiku)** — Fastest and cheapest Claude model. Studeia uses for background tasks. **Hreflang** — HTML attribute indicating version in another language of same page. Important for multilingual SEO. ## I **IMS Common Cartridge (IMS CC)** — Educational content packaging standard. Studeia imports via `POST /api/institution/courses/import`. **Inline Quiz** — Interactive quiz rendered inside AI tutor chat. **Item Difficulty** — In test psychometrics, proportion of students who got question right. p < 0.3 = hard; p > 0.85 = easy. ## J **JIT Provisioning (Just-In-Time)** — Automatic user creation on first SSO login. Studeia does for SAML and OIDC. **JSON-LD** — JavaScript Object Notation for Linked Data. W3C schema markup format. Used in Studeia for SEO/GEO and OB 3.0 credentials. ## K **Khan Academy** — Free educational platform (Khanmigo AI tutor). B2C, focused on own content. Studeia is B2B, focused on institution content. ## L **LGPD** — Brazilian General Data Protection Law. Studeia native compliance. **LiveClass** — Live class. Studeia supports 4 providers: BBB (iframe), Zoom, Teams, Google Meet (all external). **llms.txt** — Emerging standard for "robots.txt for LLMs" — markdown file at root indicating what each LLM can crawl + content curation for AI agents. **LLM Router** — Studeia internal service that selects provider+model per task type, with automatic fallback and metering. **LMS** — Learning Management System. Studeia, Moodle, Canvas, Blackboard, Google Classroom are LMS. **LTI (Learning Tools Interoperability)** — 1EdTech standard for integration between LMS and educational tools. LTI 1.3 uses OIDC + JWT. Studeia works as tool provider. ## M **Mastery** — Domain of a concept or skill. Studeia calculates via ConceptMastery (Bayesian). **Misconception** — Student conceptual error. Studeia detects via EvaluationAgent and tracks with lifecycle 3 states: active → resolving → resolved. **Moodle** — Most-used open-source LMS in the world. **MRR (Monthly Recurring Revenue)** — Key SaaS metric. **Multi-tenant** — Architecture where multiple institutions (Tenants) use same platform instance with isolated data. ## O **OB 3.0 (Open Badges 3.0)** — W3C Verifiable Credential standard for educational credentials. **OIDC (OpenID Connect)** — Modern authentication protocol based on OAuth 2.0. Studeia supports for SSO Enterprise. ## P **pgvector** — PostgreSQL extension to store and search vectors. Studeia uses for RAG (1024 dimensions). **Point-biserial discrimination** — Item-total correlation in test psychometrics. > 0.4 is excellent. **PromptTemplate** — LLM prompt template stored in database. Customizable per tenantId, taskType, provider, locale, courseId. ## Q **QTI (Question and Test Interoperability)** — 1EdTech standard for quiz interoperability. Studeia imports QTI 1.2 via IMS CC. **Quarantine (tutor chat)** — Temporary restriction of AI tutor use imposed by Supervisor Agent after 3 strikes (LOW/MEDIUM in 7 days). Default 48h. ## R **RAG (Retrieval Augmented Generation)** — Combines vector search + LLM. Studeia uses per-tenant. **Rate Limit** — Limit of calls per period. Studeia: three tiers for public API (1000/5000/custom req/hour) via Redis. **Redis** — In-memory database. Studeia uses for cache, queue (BullMQ), leaderboards (ZSET), rate limiting, circuit breaker state, OAuth nonces. **Rubric** — Multi-criteria evaluation matrix. Studeia: criteria with weights + levels. ## S **SaaS** — Software as a Service. **SAML 2.0** — XML-based SSO protocol. Studeia supports SP-initiated and IdP-initiated via node-saml. **SCIM 2.0** — System for Cross-domain Identity Management (RFC 7644). Automatic user/group provisioning via IdP. Studeia: 14 endpoints, encrypted Bearer token. **SCORM** — Legacy content packaging standard. Studeia does NOT natively support (only IMS CC). **SRS (Spaced Repetition System)** — Spaced review algorithm (e.g., SM-2). Studeia uses in flashcards and adaptive review. **SSO (Single Sign-On)** — Single login for multiple applications. Studeia: SAML, OIDC (Enterprise plan). **Strike (tutor chat)** — Infraction moderated by Supervisor Agent. 3 strikes (LOW/MEDIUM in 7 days) = quarantine. **Stripe** — International payment provider. Studeia integrates Stripe (card) + Asaas (PIX/boleto Brazil). **StudentMisconception** — Database model tracking student conceptual errors with lifecycle. ## T **Tenant** — Institution in multi-tenant architecture. Studeia: Tenant.id is mandatory filter in all queries. **TenantApiKey** — Tenant's own LLM API keys (Anthropic, OpenAI, etc). AES-256-GCM encrypted in database. **Triple JSON-LD stack** — Article + FAQPage + BreadcrumbList on same page. Generates +1.8x citations in LLMs vs Article-only. ## U **User-agent (AI crawlers)** — AI bot identifiers: GPTBot, OAI-SearchBot, ChatGPT-User (OpenAI), PerplexityBot, ClaudeBot, Claude-Web, anthropic-ai (Anthropic), Google-Extended, Bytespider. ## V **Vercel AI SDK** — Unified Node.js SDK for multiple LLM providers. Studeia uses in all agents. **VideoProvider** — Live class provider. Studeia supports 4: BBB, Zoom, Teams, Google Meet (adapter pattern). **Voyage AI** — Embeddings provider. Studeia uses voyage-3 (1024 dims) as primary. ## W **WCAG 2.1 AA** — Web Content Accessibility Guidelines AA level. Studeia compliance. **Webhook** — HTTP callback for events. Studeia: webhooks for billing (Stripe/Asaas), video providers, automations. **White-label** — Vendor-brand-free platform. Studeia offers via custom domain + total branding + Studeia brand removal (Enterprise). ## X **xAPI** — Experience API. Modern standard for learning tracking. Studeia roadmap. **XP (Experience Points)** — Gamification points. Studeia: hierarchical config tenant→course. ## Z **Zoom** — Videoconferencing platform. Studeia integrates as video provider via Server-to-Server OAuth. ## See also - [Platform overview](/platform/overview) - [Public API](/api/overview) ## FAQ **Q: What is RAG?** Retrieval Augmented Generation. Technique combining semantic search with text generation via LLM. Instead of LLM inventing answers, it searches relevant snippets in a vector database and uses as context. Studeia uses per-tenant RAG so AI tutor cites course's own material. **Q: What is Open Badges 3.0?** W3C Verifiable Credentials standard for educational credentials. Replaces PDF certificates with digitally verifiable JSON-LD. Studeia exports badges as OB 3.0 with public verification page + LinkedIn Add to Profile compatible. --- # [en-US] Asaas integration (PIX + boleto + Brazilian card) URL: https://docs.studeia.com/integrations/asaas Locale: en-US Section: integrations Updated: 2026-05-24 **Short answer:** Asaas is Studeia's Brazilian payment provider: instant PIX (1.99% fee), boleto (R$3.49), national card (4.99% + R$0.49). For BR clients is cheaper and more native than Stripe. Fail-closed webhooks (503 if token absent). Customer split per provider. For international: parallel Stripe USD. ## Setup ### Asaas Dashboard 1. https://asaas.com (or sandbox: https://sandbox.asaas.com) 2. Settings > Integrations > API > copy Access Token 3. Settings > Webhooks > URL: `https://[tenant].studeia.com/api/webhooks/asaas?token=` 4. Events: PAYMENT_RECEIVED, PAYMENT_OVERDUE, PAYMENT_REFUNDED, SUBSCRIPTION_CREATED/UPDATED/DELETED 5. Custom token (cryptographically strong random string) ### Env vars ``` ASAAS_API_KEY=$aact_... ASAAS_WEBHOOK_TOKEN=...generated-in-step-5... ASAAS_SANDBOX=true # optional ``` ## PIX flow Admin clicks "Pay with PIX" → POST /api/institution/billing/checkout { provider: "asaas" } → Studeia AsaasBillingProvider.createCheckout() (resolves asaasCustomerId, POST /subscriptions with billingType=PIX) → Asaas returns QR Code + PIX copy-paste payload → Studeia returns Asaas hosted page URL → admin scans QR, pays → PIX confirms in ~30s → webhook PAYMENT_RECEIVED → applyWebhookEvent → promotes Tenant.plan. ## Hardening (rules 138, 139) - Fail-closed: missing ASAAS_WEBHOOK_TOKEN env = 503 `asaas_not_configured` - Token validation: query param ?token=<...> compared with env (timing-safe) - 5xx on failure: auto-retries - PaymentLog idempotent - PII redact: rawPayload via redactPaymentPayload() — removes cpfCnpj, email, name, address ## Customer split TenantSubscription separate fields: stripeCustomerId, asaasCustomerId, externalCustomerId (legacy fallback). ## When Asaas vs Stripe | Scenario | Recommended | |---|---| | Brazilian client with PIX | **Asaas** | | Brazilian client with boleto | **Asaas** | | Brazilian client with card | **Asaas** (cheaper) or Stripe | | International client | **Stripe USD** (Asaas blocked) | ## Fees compared | Method | Asaas | Stripe | |---|---|---| | PIX | 1.99% | NOT offered | | Boleto | R$3.49 fixed | NOT offered | | Credit card | 4.99% + R$0.49 | 3.99% + R$0.59 (USD) | For typical B2B Brazilian volume: Asaas is ~20-40% cheaper in total fees. ## See also - [Integration Stripe](/integrations/stripe) ## FAQ **Q: Why Asaas and not just Stripe?** For Brazilian market: 95% of B2B transactions use PIX (instant, no fee) or boleto. Stripe doesn't have native PIX. Asaas is Brazilian, natively integrates PIX/boleto/card with lower fees (1.99% PIX, R$3.49 boleto, 4.99% card + R$0.49 vs Stripe 3.99% + R$0.59). **Q: Does Studeia automatically detect which provider to use?** Yes. getCurrencyFromHeaders() server-side via x-vercel-ip-country / cf-ipcountry: BR = Asaas offered in UI. Outside BR = Stripe USD mandatory (Asaas blocked server-side with 400 'asaas_not_for_international'). **Q: Are Asaas webhooks secure?** Yes, with hardening. Token via query param ASAAS_WEBHOOK_TOKEN. Without configured token: webhook returns 503 asaas_not_configured (fail-closed — rule 138). PaymentLog unique idempotency. **Q: Can I test Asaas in sandbox?** Yes, separate sandbox env: https://sandbox.asaas.com. Configure ASAAS_SANDBOX=true to route to sandbox endpoint. --- # [en-US] BigBlueButton (BBB) integration — default open-source live classes URL: https://docs.studeia.com/integrations/bigbluebutton Locale: en-US Section: integrations Updated: 2026-05-24 **Short answer:** BigBlueButton (BBB) is Studeia's DEFAULT video provider: open-source AGPL, iframe embed (student stays INSIDE Studeia), native educational features (collaborative whiteboard, breakout rooms, polls). Setup: self-hosted instance OR managed BBB provider ($20-200/mo). Auth via SHA-256 checksum (no OAuth). Supports ~150 students per server, scales via Scalelite. ## Why BBB is default | Aspect | BBB | Zoom/Teams/Meet | |---|---|---| | Cost | Open-source + hosting ($20-200/mo) | $14-25/host/mo | | Iframe embed | **Yes** (student stays in Studeia) | NO (X-Frame-Options blocks) | | Collaborative whiteboard | Native | Limited | | Breakout rooms | Yes, unlimited | Yes (tier limits) | | Multi-share | Yes (multiple simultaneous screen-share) | NO in Zoom (1 at a time) | ## Self-hosted vs Managed ### Self-hosted Requirements (1 instance for 150 users): 16 CPU, 16 GB RAM, 500 GB disk, Ubuntu 20.04 LTS, domain + TLS. Install via [bbb-install.sh](https://github.com/bigbluebutton/bbb-install) (~30min). Cost: VPS $30-100/mo. ### Managed Providers: BlindsideNetworks ($50-500/mo), HigherEdLab ($20-200/mo). Includes hosting + updates + backup + support. ## Setup in Studeia 1. Get BBB instance URL (e.g., `https://bbb.school.edu/bigbluebutton/api`) 2. Get Shared Secret (`bbb-conf --secret` on server) 3. Studeia > Settings > Video Provider > BBB > Add URL + Shared Secret + Set as default ## How it works Admin creates LiveClass (videoProvider=bbb or null=default) → Studeia BBBAdapter.createMeeting() → SHA-256 checksum → GET /api/create?meetingID=...&checksum=... → returns meetingID + joinUrl. Student joins via joinMethod=iframe — Studeia renders BBB iframe INSIDE page. ## Limitations - No native BBB mobile app — students use mobile browser - WebRTC: student needs modern browser - Bandwidth: ~1 Mbps download per student - Latency: BBB is great on LAN, OK on WAN ## See also - [Live classes overview](/features/live-classes/overview) - [Integration Zoom](/integrations/zoom) ## FAQ **Q: Is BigBlueButton free?** Software is free (open-source AGPL 3.0). But you need to host a BBB instance (own server with ~16 CPU + 16 GB RAM for ~150 concurrent users) OR hire managed BBB provider ($20-200/mo). **Q: Why is BBB the default video provider in Studeia?** Three reasons: (1) Educational open-source — native teaching features (collaborative whiteboard, breakout rooms, polls, raise hand, emoji status). (2) Iframe embed — student stays INSIDE Studeia (Zoom/Teams/Meet block iframe via X-Frame-Options). (3) No per-meeting costs. **Q: How to configure BBB in Studeia?** Settings > Video Provider > BBB > URL (e.g., https://bbb.school.edu/bigbluebutton/api) + Shared Secret (from BBB server). Auth via SHA-256 checksum (BBB doesn't use OAuth). Studeia tests connection via /api/getMeetings. **Q: Is BBB suitable for 1000 concurrent students in a class?** A typical BBB instance handles ~150 students per server. For >150: configure BBB Scalelite (load balancer + multiple instances). For >1000 concurrent: consider Zoom Webinar instead. --- # [en-US] Canvas LMS integration via LTI 1.3 (Studeia as tool provider) URL: https://docs.studeia.com/integrations/canvas-lti Locale: en-US Section: integrations Updated: 2026-05-24 **Short answer:** Studeia works as LTI 1.3 tool provider in Canvas LMS. Setup in Canvas: Admin > Developer Keys > LTI Key > paste config JSON generated in /institution/lti-tools of Studeia > activate placement. OIDC launch + JWT/JWKS + AGS grade passback (grades sync automatically to Canvas Gradebook). Useful for universities on Canvas wanting to complement with Studeia (AI tutor, gamification, B2B mobile) in specific courses without divesting main LMS. ## Prerequisites - Studeia plan with LTI enabled (Enterprise or paid plans) - Canvas Admin role - HTTPS on both sides ## Setup ### 1. Studeia: generate LTI tool config `/institution/lti-tools > New Tool`: Tool name, Target Link URI, OIDC Login URI, Public JWKS URL. Studeia generates Client ID + Deployment ID. Display complete JSON config. ### 2. Canvas: register Developer Key Canvas Admin > Developer Keys > LTI Key > Method: Paste JSON > paste from step 1 > Save > ON. Copy Client ID generated by Canvas. ### 3. Canvas: install app Account Admin > Settings > Apps > By Client ID > paste. Configure placements: Course Navigation, Assignment Selection, Link Selection, User Navigation. ### 4. Validate Any Canvas course > side menu > Studeia tool > should open Studeia logged with same user via OIDC launch. ## How it works Student in Canvas clicks "Studeia Module" → Canvas POST /lti/login → Studeia validates + redirects with state + nonce → Canvas redirects student to /lti/launch with JWT id_token → Studeia LtiService.launch() validates JWT, nonce, JIT provisions user, creates Enrollment, starts session → redirect to module/lesson/quiz. ## AGS grade passback Student completes Studeia activity with AGS line_item → LtiAdvantageService.sendScore() → POST {issuer}/api/lti/courses/{courseId}/line_items/{itemId}/scores → Canvas Gradebook auto-updates. ## Names and Roles Provisioning Service (NRPS) LTI 1.3 spec allows Studeia to query Canvas course student list: GET {nrps_url}/memberships (Bearer auth). Useful to pre-populate Enrollments. ## Common use cases ### University already on Canvas wants Studeia in specific course 1. CS department decides to use Studeia for CS101 (real AI tutor) 2. Canvas Admin adds Studeia tool in CS101 course 3. Canvas has topics + assignments + gradebook. Studeia has AI tutor + gamification + interactive content 4. Quizzes via Studeia → grade passback to Canvas Gradebook ### Gradual Canvas → Studeia migration 1. Add Studeia LTI in all courses 2. New courses: create directly in Studeia, LTI link in Canvas as entry point 3. Legacy courses: keep in Canvas, complement with Studeia 4. In 1-2 years: evaluate Canvas decommission ## Troubleshooting - **JWT validation fails**: verify JWKS URL publicly accessible - **Grade passback not working**: verify AGS scope enabled in Canvas Developer Key - **Student sees "Tool unavailable"**: OIDC nonce expired (>15min) or state HMAC mismatch ## See also - [Use case: University](/use-cases/university) - [Integration Moodle LTI](/integrations/moodle-lti) ## FAQ **Q: How to add Studeia in Canvas course?** Studeia as LTI 1.3 tool provider. In Studeia: /institution/lti-tools > Generate Client ID + JWKS. In Canvas: Admin > Developer Keys > LTI Key > Method: Paste JSON > paste Studeia config. Then Admin > Settings > Apps > By Client ID > paste ID. Activate placements. **Q: Do grades sync automatically?** Yes, via AGS (Assignment and Grade Service). When student completes Studeia activity: backend calls POST {issuer}/api/lti/courses/{courseId}/line_items/{itemId}/scores. Grade appears in Canvas Gradebook (Canvas remains source-of-truth). **Q: Can I use Studeia AI tutor inside Canvas?** Yes. When student accesses LTI link in Canvas: OIDC launch validates JWT + creates Studeia session + redirects to module/lesson. Student uses AI tutor, gamification, everything from Studeia — inside Canvas iframe (or new tab if iframe blocked). **Q: What data does Canvas send to Studeia via LTI?** Per LTI 1.3 spec: user_id, name, email, roles, context_id, context_label/title, launch_presentation, resource_link_id. Plus AGS endpoints for grade passback. Names and Roles to list course students (with permission). --- # [en-US] Google Meet integration (OAuth + Calendar API + Meet REST v2) URL: https://docs.studeia.com/integrations/google-meet Locale: en-US Section: integrations Updated: 2026-05-24 **Short answer:** Google Meet integrates as video provider via OAuth 2.0 admin consent + Calendar API (creates event with Meet link) + Meet REST API v2 (status). Setup ~15min via Google Cloud Console. Limitations: recording/transcription started MANUALLY by host (Google doesn't expose start_recording API), endMeeting not supported (adapter marks as completed locally), full functionality requires paid Workspace. ## Setup ### 1. Google Cloud Console Enable Google Calendar API + Google Meet REST API v2. Credentials > OAuth 2.0 Client ID > Web application. Redirect URI: `https://[tenant].studeia.com/api/institution/video-provider/callback/google-meet`. ### 2. Studeia Settings > Video Provider > Google Meet > Connect > paste Client ID + Secret > Authorize (admin consent flow). Tokens stored AES-256-GCM encrypted. ## How it works Studeia GoogleMeetAdapter.createMeeting() → Calendar API: events.insert with conferenceData.createRequest → Google returns event + hangoutLink. Student joins via joinMethod=external (new tab). ## Recording sync Cron `/api/cron/recording-sync` every 15min: queries Meet REST API v2 `GET /v2/conferenceRecords/{name}`. Updates recordingUrl + creates LiveClassTranscription if transcript available. Recording must have been STARTED by host during meeting. If host forgot: no recording to sync. ## Limitations vs Zoom/Teams | Feature | Google Meet | Zoom | Teams | |---|---|---|---| | Create meeting via API | Yes | Yes | Yes | | End meeting via API | NO | Yes | NO | | Start recording via API | NO | Yes | NO | | Get recording via API | Yes | Yes | Yes | | Auto transcript | Yes (Workspace Edu+) | Yes (VTT) | Yes (VTT) | | Webhook lifecycle | NO (polling only) | Yes | Yes (Graph Notifications) | ## When NOT to use Google Meet - ❌ School without paid Workspace (1h limit per meeting) - ❌ Want automatic recording without depending on host clicking - ❌ Want iframe embed (use BBB) - ❌ Want webhook meeting events ## See also - [Google Workspace overview](/integrations/google-workspace) - [Live classes](/features/live-classes/overview) ## FAQ **Q: How does Studeia create meeting in Google Meet?** Via Google Calendar API. Studeia creates Calendar event with conferenceData requesting Meet link — Google auto-generates URL. Meet REST API v2 used for status and recordings queries. **Q: Does Google Meet have automatic recording?** Only via Google Workspace Business Standard+ or Education Standard+. Even so, recording must be started MANUALLY by host in Meet (Google doesn't expose API for auto start_recording). Studeia queries recordings via Calendar Events API + Drive API after meeting ends. **Q: Can I use Google Meet without paid Workspace?** To create meetings via API: requires paid Workspace. For students to JOIN: anyone can (including personal @gmail.com). For Workspace for Education Fundamentals (free): meetings work but with 1h limit per session. **Q: Does endMeeting endpoint work?** NO. Google doesn't expose API to end meeting programmatically. Studeia adapter marks as completed locally (LiveClass.actualEndTime = now()) but the Google meeting itself continues until last participant leaves or host clicks 'End meeting' manually. --- # [en-US] Google Workspace integration (Drive + Calendar + SSO + Meet) URL: https://docs.studeia.com/integrations/google-workspace Locale: en-US Section: integrations Updated: 2026-05-24 **Short answer:** Studeia integrates with Google Workspace in 4 aspects: (1) OIDC SSO with OAuth 2.0 Client, (2) bidirectional Google Drive sync for media library, (3) Google Calendar sync of live classes, (4) Google Meet as native video provider. Works with Workspace for Education (including free Fundamentals tier) and Business/Enterprise. Setup ~30 minutes via Google Cloud Console + Settings > Integrations in Studeia. ## 4 integration points ### 1. OIDC SSO Setup: Google Cloud Console > OAuth 2.0 Client (Web). Redirect URI: `https://[tenant].studeia.com/api/auth/sso/[slug]/oidc/callback`. Studeia > Settings > SSO > Add Provider > OIDC. Discovery URL: `https://accounts.google.com/.well-known/openid-configuration`. JIT provisioning. ### 2. Google Drive sync Same OAuth Client + enable Drive API. Scope: `drive.file` (Studeia-created files) or `drive` (full). Operations: import/export/bidirectional sync/backup. Cron `/api/cron/drive-sync`. ### 3. Google Calendar Same Client + enable Calendar API. When admin creates LiveClass → Calendar event created for all class students. Schedule changes update event. ### 4. Google Meet (video provider) Same Client + Meet REST API v2. LiveClass created with videoProvider=google_meet. Student joins via joinMethod=external (new tab). Limitation: endMeeting NOT supported via API (marks as completed locally). Recording started manually by host. ## Setup (30 min) 1. Enable 4 APIs in Google Cloud Console (5min) 2. Create OAuth 2.0 Client (3min) 3. Configure SSO in Studeia (5min) 4. Connect Drive + Calendar + Meet (10min) 5. Validate with test user (5min) 6. Communicate to teachers/students (2min) ## LGPD considerations OAuth tokens AES-256-GCM encrypted. OAuth state HMAC-SHA256 + Redis nonce 15min anti-replay. Drive sync respects minimum scopes. ## See also - [SSO Enterprise](/platform/sso-enterprise) - [Live classes](/features/live-classes/overview) ## FAQ **Q: Does Studeia integrate with Google Workspace?** Yes, in 4 aspects: (1) OIDC SSO — students/teachers login with Google account. (2) Google Drive sync — bidirectional media library. (3) Google Calendar — Studeia live classes sync to student Calendar. (4) Google Meet — native live class video provider. **Q: Works with Google Workspace for Education?** Yes. For K-12 with Workspace Edu Fundamentals (free): SSO works, but API limits may affect Drive sync at scale. For Business/Enterprise: no practical limits. **Q: Can I restrict Studeia to specific Google domain users?** Yes. Configure 'Allowed domains' in Settings > SSO (e.g., @school.edu). Other domain logins are rejected at JIT creation. Anti-shadow accounts. **Q: Who pays for Google Meet?** School/company already paying Google Workspace (Meet included). Studeia charges no additional. Duration limit depends on Workspace tier. --- # [en-US] Microsoft 365 integration (Teams + Graph API + Azure AD SSO + OneDrive) URL: https://docs.studeia.com/integrations/microsoft-365 Locale: en-US Section: integrations Updated: 2026-05-24 **Short answer:** Studeia integrates with Microsoft 365 in 4 aspects: (1) Enterprise SSO via Azure AD (SAML 2.0, OIDC, SCIM 2.0 with group→course mapping for auto-enrollment). (2) Microsoft Teams as live class video provider via Graph API. (3) Bidirectional OneDrive sync in media library. (4) Outlook Calendar sync. Works with Microsoft 365 A1/A3/A5 (Education) or Business/Enterprise. ## 4 integration points ### 1. Azure AD SSO (SAML / OIDC) Setup OIDC (recommended): Azure Portal > AD > App registrations > New. Redirect URI: `https://[tenant].studeia.com/api/auth/sso/[slug]/oidc/callback`. Client secret. Studeia > Settings > SSO > Add Provider > OIDC. Discovery URL: `https://login.microsoftonline.com/{tenantId}/v2.0/.well-known/openid-configuration`. ### 2. SCIM 2.0 (automatic provisioning) Azure Portal > Enterprise Applications > Studeia > Provisioning > Mode: Automatic. Tenant URL: `https://[tenant].studeia.com/api/scim/v2`. Secret Token: generated in Studeia (AES-256-GCM encrypted). Group → Course mapping for auto-enrollment. Large groups (>50 members) processed via BullMQ. ### 3. Microsoft Teams (video provider) Azure AD App > API Permissions > Microsoft Graph: `OnlineMeetings.ReadWrite.All`, `OnlineMeetingRecording.Read.All`. Application type (not Delegated). Admin consent required (Global Admin). Webhook: `/api/webhooks/video/teams` with Graph Change Notifications. Limitation: endMeeting not supported via Graph API. ### 4. OneDrive sync (media library) Same Drive integration pattern. AES-256-GCM encrypted tokens. Cron `/api/cron/drive-sync`. ## Setup (1-2h) 1. Azure AD App registration (10min) 2. Configure API permissions + admin consent (10min) 3. SSO OIDC in Studeia (5min) 4. SCIM provisioning (30-45min) 5. Teams provider (10min) 6. OneDrive integration (10min) 7. Test with 5 pilot users (10min) ## LGPD + GDPR OAuth tokens AES-256-GCM encrypted. SCIM Bearer token encrypted. Complete audit via ScimAuditLog. Microsoft DPA applicable for European companies. ## See also - [SSO Enterprise](/platform/sso-enterprise) - [Live classes](/features/live-classes/overview) ## FAQ **Q: Does Studeia integrate with Microsoft 365?** Yes. (1) Enterprise SSO via Azure AD (SAML 2.0 OR OIDC + SCIM 2.0 for automatic provisioning). (2) Microsoft Teams as live class video provider via Graph API. (3) OneDrive sync in media library. (4) Outlook Calendar sync of live classes. **Q: Works with Microsoft 365 A1 (free Education)?** Yes for SSO + Teams + OneDrive. Graph API limits may affect SCIM at scale (>1000 users). Recommended A3/A5 for medium/large schools. **Q: How long does SCIM with Azure AD take to setup?** 1-2 hours. Azure Portal > Enterprise Applications > Add app > Provisioning > Mode: Automatic > Tenant URL: https://[tenant].studeia.com/api/scim/v2 > Secret Token (generated in Studeia Settings > SSO > SCIM Token) > default mappings > Start. **Q: Can I use Teams as provider and Zoom for some classes?** Yes. Configure both providers in Settings > Video Provider. For each LiveClass admin chooses which provider (LiveClass.videoProvider override over tenant default). --- # [en-US] Moodle LMS integration via LTI 1.3 (Studeia as external tool) URL: https://docs.studeia.com/integrations/moodle-lti Locale: en-US Section: integrations Updated: 2026-05-24 **Short answer:** Studeia integrates with Moodle via LTI 1.3 (Moodle 3.10+). Setup in Moodle: Site administration > Plugins > External tool > Manage tools > Add tool > paste Studeia Tool URL + Client ID. OIDC launch + AGS grade passback (grades return to Moodle Gradebook). Useful when school/university wants to keep Moodle as main LMS + add Studeia (AI tutor, gamification, B2B mobile) in specific courses. For total Moodle → Studeia migration: use IMS CC import. ## Prerequisites - Moodle 3.10+ (native LTI 1.3) - Studeia plan with LTI enabled - Moodle admin role - HTTPS on both sides ## Setup ### 1. Studeia: generate LTI tool config `/institution/lti-tools > New Tool`: Tool name, URIs, JWKS URL. Studeia generates Client ID + Deployment ID. ### 2. Moodle: register tool Site administration > Plugins > Activity modules > External tool > **Manage tools** > **+ configure a tool manually**: - Tool name: "Studeia" - Tool URL: from step 1 - LTI version: **LTI 1.3** - Public key type: **Keyset URL** > Studeia JWKS URL - Initiate login URL: from step 1 - Tool configuration usage: **Show as preconfigured tool** - Services > Assignment and Grade Services: **Use for grade sync** - Services > Names and Role Provisioning: **Use for member retrieval** - Save ### 3. Add in course Course Moodle > **Turn editing on** > Add activity > **External tool** > Preconfigured tool: **Studeia**. ## How it works Identical to Canvas LTI (same LTI 1.3 spec). Student clicks "Studeia Module" → Moodle POST /lti/login → Studeia validates + redirect with state + nonce → Moodle redirect with JWT id_token → Studeia LtiService.launch() (validate JWT via Moodle JWKS, JIT provisioning, create Enrollment, start session) → redirect to module. ## AGS grade passback Student completes Studeia quiz → LtiAdvantageService.sendScore() → POST score → Moodle Gradebook updated. ## When LTI vs IMS CC | Scenario | Recommended | |---|---| | Keep Moodle, complement with Studeia in pilot courses | **LTI** | | Migrate EVERYTHING from Moodle to Studeia | **IMS CC import** | | Department experiments before institutional decision | **LTI** | | Moodle will be discontinued in 6-12 months | **IMS CC import** + parallel during migration | ## LTI advantages vs total migration ✅ Student uses existing Moodle SSO (Shibboleth, institutional OIDC) ✅ Moodle Gradebook remains source-of-truth ✅ No need to migrate students/courses/history ✅ Easily reversible ✅ Per-course (only selected courses, not entire institution) ## Limitations - Performance: each LTI launch is ~500-1000ms - SSO experience: 1 click in Moodle, 1-2s later in Studeia (not instant) - Moodle Workshop activities: not mappable to Studeia (recreate manually) - Custom Moodle plugins: not called via Studeia LTI ## See also - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) - [Canvas LTI](/integrations/canvas-lti) ## FAQ **Q: Does Studeia work as tool in Moodle?** Yes, via LTI 1.3 spec (same standard as Canvas, Blackboard, Brightspace). Setup in Moodle: Site administration > Plugins > Activity modules > External tool > Manage tools > Add tool > paste Studeia Tool URL. Works in Moodle 3.10+ (LTI 1.3 natively supported). **Q: Do Studeia grades return to Moodle Gradebook?** Yes, via AGS (Assignment and Grade Service) — same mechanism as Canvas. Studeia calls POST {issuer}/api/lti/courses/{courseId}/line_items/{itemId}/scores when student completes activity. Moodle Gradebook updates. **Q: Can I migrate entire course from Moodle to Studeia instead of LTI?** Yes. Moodle exports course in IMS Common Cartridge (IMS CC v1.x). Studeia imports via POST /api/institution/courses/import. LTI is for CASES where you want to keep Moodle as main LMS + add Studeia features (AI tutor, gamification) in specific courses. For total migration: use IMS CC import. --- # [en-US] Stripe integration (checkout + webhooks + billing portal) URL: https://docs.studeia.com/integrations/stripe Locale: en-US Section: integrations Updated: 2026-05-24 **Short answer:** Stripe is Studeia's B2B international payment provider. Self-service checkout via Stripe Checkout Session, idempotent webhooks (HMAC SHA-256 + ordering guard via lastEventAt) for subscription lifecycle, Stripe self-manage portal for admin to change plan/card, dual currency BRL + USD detected by geolocation. For PIX/boleto Brazil: Asaas (parallel integration). ## Setup ### Stripe Dashboard 1. Developers > API Keys > copy Secret Key 2. Webhooks > Add endpoint > URL: `https://[tenant].studeia.com/api/webhooks/stripe` 3. Events: checkout.session.completed, customer.subscription.{created,updated,deleted}, invoice.payment_{succeeded,failed} 4. Copy webhook signing secret ### Create products + prices For each B2B plan (mini, growth, pro_100): Products > Add > Recurring monthly + price. Copy price_id. ### Env vars ``` STRIPE_SECRET_KEY=sk_live_... STRIPE_WEBHOOK_SECRET=whsec_... STRIPE_PRICE_MINI=price_... STRIPE_PRICE_GROWTH=price_... STRIPE_PRICE_PRO_100=price_... STRIPE_PRICE_MINI_USD=price_... STRIPE_PRICE_GROWTH_USD=price_... STRIPE_PRICE_PRO_100_USD=price_... ``` ## Checkout flow Admin clicks "Subscribe Mini" → POST /api/institution/billing/checkout → Studeia createCheckoutSession() (resolveCustomerIdForProvider, getCurrencyFromHeaders, create Stripe Session) → returns Stripe URL → admin pays → webhook checkout.session.completed → Studeia validates (HMAC + retrieve subscription + cross-check tenantId + price_id allowlist) → promotes Tenant.plan + creates PaymentLog (idempotent). ## Hardening (rules 129-139) - Webhook returns 5xx on failure (Stripe retries 3 days) - Ordering guard: lastEventAt/lastEventId in TenantSubscription - Idempotency: unique [provider, externalEventId] in PaymentLog - Zod schema: `z.enum(PAID_PLAN_SLUGS)` in checkout body - PII redact: PaymentLog.rawPayload via redactPaymentPayload() - Past_due gate: isAccessBlocked(status) in layouts. Cron /api/cron/billing-grace-expire transitions after grace 7d. ## Stripe self-manage portal POST /api/institution/billing/portal returns temporary Stripe portal URL: admin changes plan, updates card, sees invoices, cancels. ## Multi-currency | Aspect | BRL | USD | |---|---|---| | Detection | Default | x-vercel-ip-country / cf-ipcountry | | Price IDs | STRIPE_PRICE_* | STRIPE_PRICE_*_USD | | Asaas fallback | Yes (PIX/boleto) | NO (Brazil only) | ## See also - [Integration Asaas (PIX)](/integrations/asaas) ## FAQ **Q: Is Stripe how Studeia receives subscription payments?** Yes, for B2B international/card. Plan selected in /institution/billing > Studeia calls POST /api/institution/billing/checkout which creates Stripe Checkout Session > admin pays > subscription.activated webhook auto-promotes tenant.plan. For PIX/boleto Brazil: use Asaas (parallel integration). **Q: Are Stripe webhooks reliable?** Yes, but Studeia treats defensively. (1) Verifies HMAC SHA-256 via stripe-signature header with STRIPE_WEBHOOK_SECRET. (2) Stripe retries 3 days with backoff on 5xx. (3) Idempotency via unique [provider, externalEventId] in PaymentLog. (4) Ordering guard via lastEventAt/lastEventId. (5) checkout.session.completed always does stripe.subscriptions.retrieve() to validate (doesn't trust metadata). **Q: Does Studeia support USD for clients outside Brazil?** Yes. STRIPE_PRICE_IDS (BRL) + STRIPE_PRICE_IDS_USD (USD) configurable via env vars. Detects currency server-side via x-vercel-ip-country / cf-ipcountry header. Client outside BR sees USD price automatically. **Q: Can I use Stripe Customer Portal for self-service?** Yes. POST /api/institution/billing/portal returns Stripe portal URL — admin changes plan, updates card, sees invoices, cancels. Without going through support. --- # [en-US] Zapier / Make integration (via webhook + public API) URL: https://docs.studeia.com/integrations/zapier-and-make Locale: en-US Section: integrations Updated: 2026-05-24 **Short answer:** Studeia integrates with Zapier, Make (Integromat), n8n and any no-code platform via 2 mechanisms: (1) Studeia native Automations trigger send_webhook to external URL when event happens (course_completed, quiz_submitted, etc) — Zapier 'Catch Hook' receives. (2) External platform calls Studeia public API (64+ endpoints, Bearer auth, granular scopes) to create/update resources. No official Zapier app yet (roadmap 2026 H2) — use 'Webhooks by Zapier' generic. ## 2 integration directions ### Direction 1: Studeia → Zapier (Studeia events trigger external workflow) Use case: student completes course → create Salesforce lead + notify Slack channel + send custom certificate email. **Setup**: 1. Zapier > New Zap > Trigger: **Webhooks by Zapier** > Catch Hook 2. Zapier generates URL 3. Studeia: `/institution/automations > New`. Trigger: event `course_completed`. Action: `send_webhook` > URL: Zapier hook 4. Body (template interpolation): ```json { "studentName": "{{user.name}}", "studentEmail": "{{user.email}}", "courseId": "{{event.courseId}}", "completedAt": "{{event.completedAt}}", "score": "{{event.score}}" } ``` 5. Test → continue Zap: add actions (Salesforce, Slack, Gmail, etc) **Available events**: lesson_completed, module_completed, course_completed, quiz_submitted, enrollment_created, enrollment_completed, forum_post_created, forum_reply_created, grade_posted, announcement_created, live_class_started, student_inactive. ### Direction 2: Zapier → Studeia (create/update resources via API) Use case: new Hubspot lead → create student user + enroll in welcome course. **Setup**: 1. Studeia: `/institution/settings/api-keys > Create` > scopes: `users:write`, `enrollments:write` > copy key (`mia_` + 40 hex) 2. Zapier: - Trigger: Hubspot 'New Contact' - Action: **Webhooks by Zapier** > POST - URL: `https://[tenant].studeia.com/api/institution/users` - Headers: `Authorization: Bearer mia_...`, `Content-Type: application/json`, `Accept-Language: en-US` - Body JSON: `{ "name": "{{contact.name}}", "email": "{{contact.email}}", "role": "student", "sendInvite": true }` 3. Continue Zap: another POST to /api/institution/enrollments with courseId ## Rate limiting API key rate limit per tier: Standard 1000 req/h, High 5000 req/h, Custom. Headers: `X-RateLimit-*`. 429 + `Retry-After` when exceeded. Zapier respects Retry-After automatically. ## SSRF prevention (limitation) Studeia webhook blocks private IPs and metadata endpoints. Zapier URLs (hooks.zapier.com) are public, always pass. Self-hosted n8n at private IP: needs public exposure (Cloudflare Tunnel, ngrok). ## n8n self-hosted n8n bonus: can be self-hosted (free vs Zapier $19+/mo). For high volume + sensitive data: n8n self-hosted makes more sense. ## Roadmap Official Zapier app (planning 2026 H2): native triggers (course_completed, enrollment_created, etc), native actions (Create user, Create enrollment, Update grade), OAuth 2.0 flow. ## See also - [Native automations](/features/automations/overview) - [Public API](/api/overview) ## FAQ **Q: Does Studeia have official Zapier app?** Not yet (roadmap 2026 H2). For now: integration via Zapier generic webhook + Studeia public API. Covers 95% of use cases — Zapier can call any REST API. **Q: How to trigger Zapier when student completes course?** In Studeia: /institution/automations > New > Trigger: event 'course_completed' > Action: send_webhook to Zapier 'Catch Hook' URL. Body includes {{user.name}}, {{event.courseId}}, {{event.completedAt}}, etc. Zapier receives and triggers workflow (create Salesforce lead, notify Slack, etc). **Q: How to create student in Studeia via Zapier?** Zapier 'Webhooks by Zapier' > POST > URL: https://[tenant].studeia.com/api/institution/users + Authorization: Bearer mia_... + Body JSON { name, email, role, sendInvite }. Studeia API requires users:write scope. **Q: Do Make and n8n work too?** Yes, identical. Make has 'HTTP request' module. n8n has 'HTTP Request' node + 'Webhook' trigger. Studeia API + webhook work with any no-code tool supporting REST. --- # [en-US] Zoom integration (Server-to-Server OAuth + webhook + recording sync) URL: https://docs.studeia.com/integrations/zoom Locale: en-US Section: integrations Updated: 2026-05-24 **Short answer:** Zoom integrates with Studeia as video provider via Server-to-Server OAuth. Webhook events HMAC SHA-256 capture meeting lifecycle + recordings. Automatic VTT transcript ingestible in course RAG. AES-256-GCM encrypted credentials. Setup ~20min: create S2S OAuth app in Zoom Marketplace + paste Account ID + Client ID + Secret in Studeia Settings > Video Provider > Zoom. ## Setup ### 1. Create Server-to-Server OAuth app 1. https://marketplace.zoom.us > Develop > Build App 2. App Type: **Server-to-Server OAuth** 3. Copy Account ID, Client ID, Client Secret ### 2. Required scopes - `meeting:read:admin` - `meeting:write:admin` - `recording:read:admin` - `user:read:admin` ### 3. Event Subscriptions (webhook) 1. App > Feature > Event Subscriptions 2. Subscription URL: `https://[tenant].studeia.com/api/webhooks/video/zoom` 3. Webhook secret token (copy to Studeia) 4. Events: Meeting Started/Ended, Participant Joined/Left, Recording Completed, Recording Transcript Completed ### 4. Configure in Studeia Settings > Video Provider > Zoom > Add: Account ID, Client ID, Client Secret, Webhook Secret Token, Set as default (optional). Studeia stores all AES-256-GCM encrypted. ## How it works LiveClass created with videoProvider=zoom → Studeia ZoomAdapter.createMeeting() with Server-to-Server OAuth token (cached Redis 55min) → POST /v2/users/{userId}/meetings → returns meetingId + joinUrl + startUrl. Student joins via joinMethod=external (Zoom doesn't support iframe). Webhooks notify: meeting.started, participant.joined, meeting.ended, recording.completed, recording.transcript_completed. ## Cron fallback `/api/cron/recording-sync` every 15min as fallback (webhooks are unreliable — delays, subscription expiry, network failures). ## RAG ingestion After transcription approved by teacher: text becomes chunks + embeddings + ContentBlock with metadata `{ source: "live_class_transcript", liveClassId, courseId }`. AI tutor cites: "In the live class on date X, the teacher explained that..." ## Troubleshooting - **401 Unauthorized**: token expired. S2S OAuth token cached Redis 55min (auto-renew). - **Webhook not arriving**: verify URL publicly accessible + HMAC signature. - **Recording without VTT**: Zoom Cloud Recording must be enabled (not Local Recording). ## Costs Studeia: zero additional. Zoom: direct from Zoom (per-host license). ## See also - [Live classes overview](/features/live-classes/overview) - [Integration BigBlueButton](/integrations/bigbluebutton) ## FAQ **Q: How to configure Zoom in Studeia?** Create Server-to-Server OAuth app in Zoom Marketplace (scopes: meeting:read, meeting:write, recording:read, user:read). In Studeia > Settings > Video Provider > Zoom: Account ID + Client ID + Client Secret. Configure webhook at /api/webhooks/video/zoom with HMAC SHA-256 via x-zm-signature. Setup ~20 min. **Q: Are Zoom recordings available in Studeia?** Yes, automatically. recording.completed webhook notifies + cron /api/cron/recording-sync every 15min as fallback. recordingUrl saved in LiveClass. VTT transcript also captured in LiveClassTranscription (status pending → approved → ingested), optionally ingestible in course RAG for AI tutor to cite. **Q: What's Zoom meeting duration limit?** Depends on Zoom plan: Free = 40min, Pro = 30h, Business+ = 30h. Studeia adds no limit. **Q: Can I use Zoom Webinar?** Yes, with additional Zoom Webinar license. Studeia currently creates 'meetings' by default. For Webinar (1 host + 1000+ passive attendees): configure via Zoom API directly + LTI launch in Studeia. Roadmap: native Webinar support. --- # [en-US] Multi-Agent AI Tutor URL: https://docs.studeia.com/platform/ai-tutor Locale: en-US Section: platform Updated: 2026-05-23 **Short answer:** Studeia AI tutor is a multi-agent pipeline: StudentModel → RetrievalAgent (RAG) → PedagogicalAgent (strategy) → LLM (with Claude/GPT/Grok/Gemini fallback) → EvaluationAgent + SupervisorAgent (background). Cites course material via per-tenant RAG, adapts pedagogical strategy by conceptual mastery, detects misconceptions automatically and has moderation by dedicated AI agent. ## Executive view Studeia AI tutor is not ChatGPT in iframe. It's a pedagogical system built for online education: ``` Student message ↓ 1. StudentModelService → loads ConceptMastery (Bayesian), misconceptions, quiz history ↓ 2. RetrievalAgent → searches tenant-scoped RAG, boost by weak areas in quizzes ↓ 3. PedagogicalAgent → selects strategy (5 options) based on mastery ↓ 4. Orchestrator → assembles enriched prompt ↓ 5. LLM (Vercel AI SDK) → streaming, with fallback Claude → GPT → Grok → Gemini ↓ after response (after()) 6. EvaluationAgent → classifies misconceptions (Haiku, $0.001) 7. ContentAgent → pre-generates follow-up exercise 8. SupervisorAgent → moderates (5 severity levels, 8 categories) ``` ## Pedagogical strategies | Mastery | Strategy | Behavior | |---|---|---| | < 0.3 | direct_instruction | Clear explanation, concrete examples | | 0.3-0.5 | scaffolding | Progressive hints | | 0.5-0.7 | socratic | Questions leading to discovery | | 0.7-0.9 | guided_practice | Exercises with feedback | | > 0.9 | challenge | Complex problems, conceptual connections | ## Per-tenant RAG Each course can be ingested in tenant RAG: `POST /api/institution/courses/[id]/rag-ingest`. Tutor cites correct institution material, not generic content. ## Multi-provider AI All 7 AI agents respect `TenantTaskModelConfig`. Fallback chain per tier (Haiku/Sonnet/Opus → equivalents). Circuit breaker per provider (Redis state). ## Known limitations - No voice (text-to-speech). Roadmap. - No video/real-time avatar. Roadmap. - RAG is per-course, not per-institution. - Misconceptions can regress (re-detected) — expected; system marks regression in evidence. ## See also - [AI Tutor details](/features/ai-tutor/overview) - [RAG Ingestion](/features/ai-tutor/rag-ingestion) - [Safety Supervisor](/features/ai-tutor/safety-supervisor) ## FAQ **Q: Does Studeia have AI chat?** Yes. Studeia offers a multi-agent conversational AI tutor. Unlike a ChatGPT wrapper, it's a pipeline with 6 agents (orchestrator, retrieval, pedagogical, evaluation, content, supervisor) that adapts the response based on student mastery per concept, cites course material via per-tenant RAG, detects misconceptions and adjusts pedagogical strategy (direct instruction, scaffolding, socratic, guided practice, challenge). **Q: Can I switch Claude for GPT, Grok or Gemini?** Yes. Institutional admin configures TenantTaskModelConfig per task type. All 7 AI agents respect this config — automatic fallback between providers if one goes down (Claude → OpenAI → xAI Grok → Google Gemini). Tool calling works with any provider via Vercel AI SDK. **Q: Does the tutor have access to my institution's material?** Yes, via isolated per-tenant RAG. Each course can be 'ingested' into RAG: system extracts text from lessons (slides, video transcripts, PDFs, quizzes, rich text), chunks, generates embeddings via Voyage AI (1024 dims) and stores with tenant+course filter. When student asks something, tutor searches only in tenant's material. Never cites content from other institutions. **Q: How much does it cost per student per month?** Depends on usage. Typically R$2-8/student/month in AI (logged in AiUsageLog). Admin sees breakdown in Settings > AI. Short messages in Haiku (~$0.001), long conversations in Sonnet (~$0.01-0.05). Tenant can use own Anthropic/OpenAI keys to reduce cost + remove Studeia margin. **Q: Is Studeia AI tutor safe for minors?** Yes. Three layers: (1) User.isMinor=true activates content filters + reinforcement in system prompt. (2) Supervisor Agent monitors each turn in background, classifies in 5 levels (low/medium/high/critical/safety) and 8 categories, with 3 strikes = 48h quarantine. (3) Self-harm (severity=safety) NEVER punishes the student — instead shows welcoming message + crisis resources and notifies admin URGENT. **Q: Does the tutor detect conceptual errors?** Yes. EvaluationAgent (Haiku, background, ~$0.001) classifies answers and detects StudentMisconception with full traceability (source, sourceSessionId, lessonId, questionText, contextSnippet, concepts[]). Misconceptions have 3-state lifecycle: active → resolving → resolved. --- # [en-US] Multi-tenancy and data isolation URL: https://docs.studeia.com/platform/multi-tenancy Locale: en-US Section: platform Updated: 2026-05-23 **Short answer:** Multi-tenancy in Studeia means each institution (Tenant) has completely isolated data at DB level. Mandatory tenantId filter in all Prisma queries, Supabase RLS as safety net, per-tenant API keys, independent AI configuration (can use own Anthropic/OpenAI keys) and complete white-label (domain, branding, theme, email). ## Conceptual model ``` Tenant (Institution) ├── Users (students, teachers, coordinators, institutional admin) ├── Courses → Modules → Lessons ├── ClassGroups ├── MediaAssets ├── Automations ├── EmailTemplates ├── VideoProviderConfig (BBB/Zoom/Teams/Meet) ├── TenantApiKey (own AI keys) ├── TenantSubscription (billing) └── ...all other entities ``` ## Data isolation — 3 layers ### Layer 1: Mandatory query filter All Prisma queries in application code filter by `tenantId`: ```ts const { tenantId } = requireTenant(user); const courses = await prisma.course.findMany({ where: { tenantId }, // MANDATORY }); ``` ### Layer 2: Supabase RLS As safety net against bugs, RLS policies in Supabase enforce isolation even on direct queries. ### Layer 3: Global admin audit Global admin impersonation uses HMAC cookie with fixed 1h TTL, signed via IMPERSONATION_SECRET, audited in AdminAuditLog. ## Per-tenant API keys `TenantApiKey` encrypted AES-256-GCM. Resolution cascade: TenantApiKey → ProviderApiKey global → process.env. Costs go directly to tenant's Anthropic/OpenAI account. ## Roles | Role | Scope | |---|---| | student | Own progress | | parent | Linked children | | teacher | Own classes | | coordinator | All classes in tenant | | pedagogue | All students in tenant | | institution_admin | Entire tenant | | admin | Global platform | ## Limits per plan Enforced via `checkTenantResourceLimit()` at 7 enforcement points (audited 2026-04-11). ## See also - [White-label](/platform/white-label) - [SSO Enterprise](/platform/sso-enterprise) - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) ## FAQ **Q: Is tenant data really isolated?** Yes. Three layers: (1) every Prisma query filters by tenantId mandatorily (critical rule 30); (2) Supabase RLS policies as safety net; (3) automated cross-tenant query audit via tests. Global admin impersonation is audited (AdminAuditLog) and uses HMAC cookie with fixed 1h TTL. **Q: Can I have a custom domain (full white-label)?** Yes. Configure Tenant.customDomain in settings + point CNAME to Studeia domain. Automatic TLS via Let's Encrypt on Traefik. Logo, favicon, colors, fonts, 9 visual themes, and even email messages customizable. Studeia branding can be fully removed. **Q: Are AI costs per tenant?** Yes. Every LLM call is logged in AiUsageLog with tenantId. Global admin sees cost breakdown per tenant at /admin/finance/ai-cost (with margin vs MRR calculation). Tenants can use their own API keys (TenantApiKey) — costs go to tenant, not to Studeia. **Q: How are cross-tenant users managed?** By design, a User belongs to ONE tenant (User.tenantId). For B2B cases where a coordinator serves multiple schools, we recommend separate users per institution. Global admin can reassign users via /admin/tenants (audited). --- # [en-US] Studeia platform overview URL: https://docs.studeia.com/platform/overview Locale: en-US Section: platform Updated: 2026-05-23 **Short answer:** Studeia is a Brazilian B2B EAD (online learning) white-label platform for schools, universities, exam prep and corporate training. Combines course CMS, multi-provider AI tutor with automatic fallback, native gamification, multi-provider live classes (BBB/Zoom/Teams/Meet), advanced gradebook, enterprise SSO (SAML/OIDC/SCIM) and public API on a single SaaS platform hosted in Brazil. ## Who it is for | Vertical | Typical case | Priority features | |---|---|---| | **K-12 schools** | Elementary and high school, BNCC alignment, parent portal | Parent portal with AI narrative, gamification, minor monitoring, LGPD | | **ENEM/college prep** | Live simulations, personalized AI tutor, analytics | Psychometric quiz analytics, AI tutor with course material RAG, mock exams | | **Universities** | Hybrid courses, LTI with existing Canvas/Moodle, gradebook | LTI 1.3 (tool provider), multi-criteria rubrics, AGS grade passback | | **Corporate training** | T&D, compliance, SSO with Okta/Azure AD | SAML/OIDC, SCIM 2.0, verifiable certificates (OB 3.0), public API | ## Architecture in one sentence Next.js 15 (App Router) + PostgreSQL (Supabase) + Redis + Prisma 7 + multi-provider LLM Router (Claude → GPT → Grok → Gemini fallback) + Voyage AI embeddings (RAG) + Stripe/Asaas billing, deployed in Docker via Traefik with Let's Encrypt. ## Key features 1. **Real multi-tenancy with complete white-label** — data isolation at DB level, custom domain with automatic TLS, 9 visual themes 2. **Multi-agent AI tutor with per-tenant RAG** — not a ChatGPT wrapper; pedagogical pipeline with 6 agents 3. **Educational CMS with 8 lesson types + 6 interactive subtypes** — slides, video, PDF, rich_text, quiz, assignment, live_class, external_link 4. **Quiz engine with psychometric analytics** — Cronbach's alpha, point-biserial discrimination, item difficulty, distractor analysis 5. **Multi-provider live classes** — BBB, Zoom, Teams, Google Meet (unified adapter pattern) 6. **Complete native gamification** — XP, badges (OB 3.0), Redis leaderboards, contests, rewards shop, AI agent 7. **Integrated communication** — forums, announcements, DMs, in-app notifications, attachments 8. **SSO Enterprise + SCIM 2.0** — SAML 2.0, OIDC with PKCE, SCIM 2.0 (14 endpoints RFC 7644) 9. **LTI 1.3 (tool provider)** — register Studeia as external tool in Canvas, Blackboard, Moodle 10. **Native automations (mini-n8n built-in)** — Trigger → Condition → Action engine 11. **B2B Mobile** — React Native/Expo, white-label, push notifications 12. **Native LGPD compliance** — data export, account deletion, DPA enterprise 13. **Public API with 64+ endpoints** — dual auth (session + Bearer API key), granular scopes ## Pricing model 5 B2B plans (BRL/month) — same as documented at [studeia.com/pricing](https://studeia.com/#pricing). Additional AI cost typically R$2-8/student/month tracked via `AiUsageLog` per tenant. ## Tech stack summary - **Runtime**: Next.js 15 App Router, React Server Components, TypeScript strict mode - **Database**: PostgreSQL (Supabase) + pgvector (RAG, 1024 dims) - **ORM**: Prisma 7 with adapter-pg - **Cache/Queue**: Redis 7 + BullMQ - **LLM**: Claude (primary) → OpenAI → xAI Grok → Google Gemini (fallback chain) - **Embeddings**: Voyage AI (primary, 1024 dims) → OpenAI (fallback) - **Auth**: Supabase Auth with SSR - **Storage**: Supabase Storage (public for media, private for submissions) - **Email**: SMTP/Resend/SendGrid (factory pattern) - **Live video**: BBB/Zoom/Teams/Google Meet (adapter pattern) - **Billing**: Stripe + Asaas (PIX) - **Mobile**: Expo SDK 52 + NativeWind + Supabase + TanStack Query - **Deploy**: Docker + Traefik v3.2 + Let's Encrypt on own VPS - **Observability**: Sentry (10% session replay, 100% on error) ## Compliance and security - Native LGPD (data export, account deletion, DPA enterprise) - WCAG 2.1 AA (skip-to-content, focus-visible, high-contrast, A11y toolbar, keyboard nav) - Open Badges 3.0 (W3C Verifiable Credentials) - LTI 1.3 (1EdTech certified-compatible) - SCIM 2.0 (RFC 7644) - AES-256-GCM on OAuth credentials + API keys - HMAC-SHA256 on OAuth state + impersonation cookies - Redis rate limiting on all LLM surfaces - 100 unit/integration tests passing (45 core + 55 web) ## Known limitations To be honest about trade-offs: - **iOS app**: still in roadmap (requires Apple Developer Program $99/year) - **Real-time avatar** (HeyGen/D-ID WebRTC): not implemented - **AI-generated video lessons** (Synthesia): not implemented - **Third-party plugins**: Studeia does not have plugin ecosystem like Moodle. Customization via public API. - **On-premise**: Studeia is SaaS-only. ## See also - [Multi-tenancy](/platform/multi-tenancy) - [AI Tutor](/platform/ai-tutor) - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) - [Use case: ENEM prep](/use-cases/enem-prep-cursinho) - [Glossary](/glossary) ## FAQ **Q: What sets Studeia apart from Moodle and Canvas?** Studeia is multi-provider AI by default (Claude, GPT, Grok, Gemini with automatic fallback), with a native multi-agent AI tutor that ingests course material via per-tenant RAG. Moodle requires plugins for AI; Canvas has limited integrations. Studeia also ships with enterprise SSO/SCIM, native gamification (XP, OB 3.0 badges, Redis leaderboards, contests, shop), gradebook with psychometric analytics (Cronbach alpha, point-biserial) and AI chat moderation with automatic supervisor — all built-in, no third-party plugins. **Q: Does Studeia replace Moodle or Canvas?** For Brazilian institutions (schools, exam prep, universities, corporate training) wanting Portuguese support, native PIX/Asaas billing, native LGPD compliance, predictable BRL pricing and cutting-edge AI: yes. For institutions in established Canvas ecosystem (American university campus), Studeia can be used as complementary LTI tool. **Q: What is the pricing model?** 5 B2B plans: Demo (free, 1 student), Mini (R$250/mo, 10 students), Crescimento (R$1.000/mo, 50 students), Escala (R$1.500/mo, 100 students), Enterprise (custom, customizable limit via maxStudentsOverride). Additional AI cost typically R$2-8/student/month depending on usage. **Q: What languages does the platform support?** 4 languages with complete parity: Brazilian Portuguese (pt-BR), American English (en-US), Spanish (es-ES) and French (fr-FR). ~3,323 translated keys, 100+ localized API routes, localized LLM prompts, locale-aware date formatting. **Q: Does Studeia have a mobile app?** Yes. Native B2B app in React Native/Expo SDK 52 published for Android. iOS in roadmap (requires Apple Developer account). Features covered: dashboard, courses, lessons, AI tutor chat (SSE streaming), grades, live classes, calendar, messages, gamification, profile, push notifications and SSO via deep linking. --- # [en-US] SSO Enterprise: SAML, OIDC and SCIM 2.0 URL: https://docs.studeia.com/platform/sso-enterprise Locale: en-US Section: platform Updated: 2026-05-23 **Short answer:** Studeia Enterprise plan supports SAML 2.0 (via node-saml), OIDC with PKCE and SCIM 2.0 (14 endpoints RFC 7644). JIT provisioning creates users on first login, group-to-course mapping auto-enrolls students in courses when IdP adds to group, SCIM bearer token encrypted AES-256-GCM, all events audited in ScimAuditLog. Integrates with Okta, Azure AD, Google Workspace and any standard IdP. ## Prerequisites - Enterprise plan (verified in `/api/auth/sso/[tenantSlug]` route — other plans return 403) - Configured domain (white-label optional but recommended) - IdP admin access (Okta, Azure AD, Google Workspace, Ping, OneLogin, etc) ## SAML 2.0 ACS endpoint: `/api/auth/sso/[tenantSlug]/saml/callback`. SP metadata: `/api/institution/sso/metadata`. SAML Response validated via node-saml (XML signature, namespace, NotBefore/NotOnOrAfter). ## OIDC Authorization Code + PKCE (S256). State HMAC-signed + Redis nonce (15min TTL anti-replay). Userinfo endpoint → JIT provisioning → Supabase session. ## SCIM 2.0 14 RFC 7644 endpoints. Bearer token encrypted AES-256-GCM. Configure in IdP > Provisioning. Supports CRUD, soft-delete (DELETE → User.status=suspended, never DB delete), bulk operations. ### Group → Course mapping When SCIM adds member to group → Studeia creates active Enrollment in course. Large groups (>50 members) processed via BullMQ (`scim-group-sync` queue), Response 202 + jobId. ## Security - SCIM Bearer token: encrypted AES-256-GCM in TenantSsoConfig.scimToken - OAuth state: HMAC-SHA256 + Redis nonce - JIT validation via `allowedDomains` (anti-shadow accounts) - ScimAuditLog logs every operation with redacted payload ## Limitations - Direct LDAP (no SAML/OIDC) not natively supported — roadmap - SAML SLO (Single Logout) partial — recommend SCIM for reliable deprovisioning - MFA delegated to IdP - Group nesting partially supported — recommend flatten in IdP ## See also - [Multi-tenancy](/platform/multi-tenancy) - [Public API](/api/overview) ## FAQ **Q: Does Studeia support SSO with Okta?** Yes, via SAML 2.0 or OIDC. Configure in Settings > SSO > Add Provider, choose SAML or OIDC, paste metadata XML (SAML) or discovery URL (OIDC). JIT provisioning creates users automatically on first login. **Q: What SSO protocols does Studeia support?** SAML 2.0 (via node-saml, validates XML signature, supports SP-initiated and IdP-initiated), OIDC with Authorization Code + PKCE + automatic discovery, SCIM 2.0 for provisioning (RFC 7644 — Users + Groups + ServiceProviderConfig endpoints). **Q: Does SCIM 2.0 work with Azure AD?** Yes. Studeia exposes /api/scim/v2/Users + /api/scim/v2/Groups with Bearer token auth. Configure in Azure AD Enterprise Application > Provisioning > Provisioning Mode: Automatic. Supports CRUD, soft-delete (User.status=suspended), bulk operations. **Q: Does automatic group-to-course mapping work?** Yes. SsoGroup can be mapped to Course via SsoGroupCourseMapping. When IdP adds user to group, Studeia auto-enrolls in course. When removes, cancels enrollment. Large groups (>50 members) processed via BullMQ. --- # [en-US] White-label: complete brand customization URL: https://docs.studeia.com/platform/white-label Locale: en-US Section: platform Updated: 2026-05-23 **Short answer:** Studeia white-label covers custom domain (with automatic TLS via Let's Encrypt), logo, colors, font, 9 visual themes, emails from your sender, sanitized custom CSS and complete Studeia branding removal on Enterprise plan. Everything configurable in admin panel, no code needed. ## What is customizable | Aspect | How | Required plan | |---|---|---| | Logo + favicon | Upload in Settings | Mini+ | | Colors (primary, accent, bg) | Color picker | Mini+ | | Font (Google Fonts) | Dropdown | Mini+ | | Default visual theme | Toggle in Settings | Mini+ | | Allow user to change theme | Toggle in Settings | Mini+ | | Custom CSS | Editor with sanitization | Mini+ | | Custom domain | DNS CNAME + Settings | Mini+ | | Email sender + templates | TenantEmailConfig | Mini+ | | Hide Studeia brand | Toggle in Settings | Enterprise | | White-label mobile app | Dedicated EAS build | Enterprise | ## Custom CSS For customizations beyond themes, admin can add own CSS: - Field in Settings > Theme > Custom CSS - Sanitized (max 10KB) - Blocks @import, url(http...), expression() (anti-XSS) ## See also - [Multi-tenancy](/platform/multi-tenancy) ## FAQ **Q: Is Studeia truly complete white-label?** Yes. Enterprise plan allows fully removing Studeia branding: custom domain (studeia.school.com), custom logo, institutional colors, brand font, sender emails from your own domain, theme customization with own CSS. Mini/Crescimento/Escala plans keep discreet 'Powered by Studeia' footer. **Q: How to configure custom domain?** 1) Configure CNAME in your DNS pointing subdomain to studeia.com. 2) In admin panel, go to Settings > Custom Domain and add the domain. 3) Traefik automatically generates Let's Encrypt certificate (~2 min). No additional TLS costs. **Q: Can I send emails from my own domain?** Yes. Configure TenantEmailConfig with your SMTP, Resend or SendGrid. Custom sender, branded templates with your logo, unsubscribe support and digest preferences per user. 40 default templates in 4 languages (10 slugs x 4 locales). **Q: How many visual themes exist?** 9 built-in themes: 6 dark glass (Ocean Glass, Midnight Purple, Forest Emerald, Sunset Amber, Cyberpunk Neon, Rose Gold) + 3 light solid/material (Minimal Light, Corporate Slate, Arctic Frost). Each with complete palette, font, layout mode (glass/solid/material). --- # [en-US] Use case: Corporate training (L&D) with Studeia URL: https://docs.studeia.com/use-cases/corporate-training Locale: en-US Section: use-cases Updated: 2026-05-23 **Short answer:** Studeia serves corporate L&D with SSO Enterprise (SAML/OIDC), SCIM 2.0 with group→course mapping (auto-enrollment via IdP), verifiable Open Badges 3.0 certificates, compliance tracking via gradebook, complete audit trail, public API to integrate Workday/BambooHR/Salesforce, LGPD + GDPR via DPA. Typical TCO R$200-400k over 3 years for 500-employee company — vs USD $270-540k in Cornerstone OnDemand. ## L&D problems Studeia solves 1. **Manual provisioning** — HR adds/removes employees one by one → SCIM 2.0 automates 2. **Multiple logins** — employee memorizes 10 passwords → SSO via Okta/Azure AD 3. **Forgotten compliance** — mandatory training passes → automation + reminders 4. **Unrecognized certificates** — PDFs generated without verification → OB 3.0 W3C Verifiable Credentials 5. **Tracking impossible** — HR doesn't know who did what → dashboard + API 6. **Vendor lock-in** — leaving Cornerstone/Saba is painful → Studeia has API + export ## Setup (1-2 weeks) ### Week 1 — Infrastructure Days 1-5: Trial Enterprise, branding, configure SSO via SAML/OIDC, configure SCIM 2.0, map AD groups → courses, test with pilots. ### Week 2 — Content Days 6-10: Import existing courses (IMS CC, CSV), auto-generate from PDFs/PPTX, configure OB 3.0 certificates, create automations (compliance reminders), go-live. ## SCIM + Group→Course mapping When HR adds employee to "Engineering" group in AD → SCIM sync → Studeia auto-enrolls in "Security & Compliance" + "Advanced AWS". When HR removes → cancel enrollment. Large groups (>50 members): async via BullMQ. ## OB 3.0 Certificates Public page: `https://[tenant].studeia.com/public/badges/verify/[userBadgeId]`. JSON-LD OB 3.0 available. Compatible with LinkedIn Add to Profile. External auditor can verify via public URL (W3C Verifiable Credential). ## Compliance tracking dashboard `/institution/reports/compliance`: % employees with required courses complete, overdue list, upcoming expirations (next 30/60/90 days), per-department, CSV export. ## API integrations | Integration | Use | |---|---| | **Workday** (HRIS) | SCIM provisioning. Sync new/terminated employees | | **BambooHR** | SCIM. Performance reviews pulling completed courses | | **Salesforce** | Sales team training → completion → custom field | | **Slack/Teams** | Automation + webhook to notify channel | | **Tableau/Power BI** | Pull metrics via public API | ## 500 employees / 3 years TCO | Item | Cornerstone OnDemand | Studeia Enterprise | |---|---|---| | License | USD $300k-540k (R$1.5M-2.7M) | R$108k-288k | | Setup + implementation | USD $30k-100k | R$0-30k | | Custom development | USD $50k-200k | Included via API | | AI cost | USD $0 (no real AI) | R$54k-90k | | **TOTAL 3 years** | **R$1.8M-3.2M** | **R$162k-408k** | Studeia typically 70-85% cheaper than Cornerstone. ## Privacy and security - **Native LGPD** — data in Brazil (Supabase BR region optional) - **GDPR** — DPA available for European enterprise - **Complete audit trail** — every admin/SSO/SCIM action in AdminAuditLog - **SOC 2 compliance** — in progress (2026 H2) - **At-rest encryption** — AES-256-GCM on OAuth credentials + API keys - **In-transit encryption** — TLS 1.3 via Let's Encrypt - **Data export** — employee requests own data (Art. 18 IV LGPD) - **Data deletion** — anonymization when employee leaves ## See also - [SSO Enterprise](/platform/sso-enterprise) - [Public API](/api/overview) ## FAQ **Q: Does Studeia work for corporate training?** Yes, strong fit for medium and large companies. Key features: SSO Enterprise (SAML 2.0, OIDC, SCIM 2.0 with Okta/Azure AD/Google Workspace), verifiable certificates (Open Badges 3.0), compliance tracking via gradebook with integrity flags, public API to integrate with Workday/BambooHR/Salesforce, complete audit trail, LGPD + GDPR via DPA. **Q: How to integrate with Okta/Azure AD/Google Workspace?** Enterprise plan. SCIM 2.0 (automatic provisioning) + SAML/OIDC (login). Setup in 1-2 days. Group→Course mapping in Settings > SSO > Groups: when IdP adds user to group, Studeia auto-enrolls in corresponding course. **Q: Does it have completion certificates?** Yes. Enterprise plan. When student completes course with minimum score: Studeia issues certificate via reward shop (customizable template) + optionally OB 3.0 badge (Open Badges 3.0 — W3C Verifiable Credential) with public verification page. Employee can add to LinkedIn or export JSON-LD for HR systems. **Q: Does compliance tracking work?** Yes. Courses can be marked required. Admin dashboard shows: % certified employees, upcoming expirations, late students. Automations can trigger reminders. Audit log maintains immutable history for external audits. **Q: How much for 500-employee company?** Enterprise plan custom (typically R$3,000-8,000/month for 500-2000 employees). Additional costs: proportional AI (~R$3-5/active user/month), eventually custom development via public API. 3-year TCO typically R$200-400k. Compare with Cornerstone OnDemand (~USD $5-15/user/month = USD $90-180k/year). --- # [en-US] Use case: ENEM exam prep with Studeia URL: https://docs.studeia.com/use-cases/enem-prep-cursinho Locale: en-US Section: use-cases Updated: 2026-05-23 **Short answer:** Brazilian exam prep schools use Studeia for: (1) Periodic simulations with psychometric analytics (Cronbach alpha, point-biserial, distractor analysis). (2) AI tutor with RAG ingesting own material. (3) Gamification (XP, badges, leaderboards, contests) to combat dropout. (4) Parent portal with AI reports. (5) Reusable question bank importable via GIFT/CSV. Typical TCO R$5-10k/month for 200 students vs R$10-30k/month in managed Moodle. ## Problems Studeia solves 1. **High dropout** — 30-50% of students quit before ENEM 2. **Manual simulations consume time** — preparing 1 simulation of 90 questions + correction + analytics takes weeks 3. **Expensive in-person tutor** — 24h individual questions would require many teachers 4. **Parents want visibility** — especially for minors ## How Studeia solves ### 1. Automated simulations with psychometric analytics After simulation, analytics include: item difficulty, point-biserial discrimination, distractor analysis, Cronbach's alpha, score distribution. ### 2. Importable question bank Studeia accepts GIFT format, CSV, API JSON, or manual via UI. Each question has `concepts[]` mapped to ConceptMastery. ### 3. Personalized AI tutor Course material ingested in RAG. When student asks "How to solve question 47 of Math simulation?": 1. RetrievalAgent finds resolution in material 2. PedagogicalAgent chooses strategy based on student's Math ConceptMastery 3. Tutor responds citing specific worksheet/lesson 4. EvaluationAgent detects misconceptions 5. Proactive inline quiz: "Let me ask 2 similar questions to confirm understanding" ### 4. Gamification against dropout XP + streak bonuses. 11 badge criteria. Per-class weekly leaderboards. Time-bound contests. ### 5. Parent portal with AI GuardianLink verified by SMS. Alerts (inactivity, performance drop, milestone). LLM reports (daily Haiku, weekly/monthly Sonnet). ## Setup (1 week) | Day | Task | |---|---| | 1 | Trial Demo plan, configure branding, create institutional admin | | 2 | Import question bank (GIFT/CSV) — 500-2000 questions | | 3 | Structure courses (Math, Languages, etc) with modules and lessons | | 4 | Upload worksheets (PDF) + lesson-videos (Drive sync) | | 5 | Trigger RAG ingestion + configure AI tutor (custom PromptTemplate) | | 6 | Setup gamification (AI Agent creates 10 badges + XP rules + monthly contest) | | 7 | Invite students + parents (SCIM or CSV) | ## 200 students / 3 years TCO | Item | Studeia | Managed Moodle | |---|---|---| | License | R$108,000 (Enterprise R$3k/mo) | R$0 | | Hosting + DevOps | Included | R$108,000 (R$3k/mo) | | AI Tutor | R$0 (included) | R$36,000 (plugin + admin) | | Gamification | R$0 (included) | R$10,000 (plugins) | | AI cost (200 × R$5 × 36) | R$36,000 | R$36,000 | | **TOTAL 3 years** | **R$144,000** | **R$190,000** | Studeia ~24% cheaper + 1 week setup vs 60-90 days for Moodle. ## See also - [Quiz Engine](/features/assessment/quiz-engine) - [Gamification](/features/gamification/overview) - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) ## FAQ **Q: Does Studeia work for ENEM exam prep?** Yes, one of the best fits. Key features: configurable simulations (timeLimit, shuffleQuestions, accessCode, scoringPolicy 'highest'), psychometric analytics (Cronbach alpha, point-biserial discrimination, distractor analysis to identify problematic questions), AI tutor with RAG ingesting exam prep's own material, gamification (XP, badges, leaderboards) to combat dropout, parent portal with AI reports. **Q: Can I import existing ENEM question bank?** Yes. POST /api/institution/question-banks imports via JSON, CSV or GIFT format. Each question can have concepts[] (linked to ConceptMastery for AI tutor), tags (filters), difficulty. Question bank reusable in multiple simulations + RAG-ingestible. **Q: How to motivate students to study consistently?** Native gamification: XP per lesson + daily streak bonus (7d = +100 XP, 30d = +500 XP). Automatic badges with 11 criteria (e.g., '100 correct Math questions'). Per-class leaderboards (class_group scope, weekly windows). Time-bound contests with 7 metrics. Rewards shop with virtual coins. + Dedicated AI agent for admin to create strategy. **Q: Can parents follow along?** Yes. Parent portal (linking via verified GuardianLink): automatic alerts (5+ days inactivity, performance drop, topic difficulty), AI-generated periodic reports (daily Haiku, weekly/monthly Sonnet with pedagogical narrative), per-course progress, detailed activity. For minor students: parent has default access (LGPD + ECA). **Q: How much does it cost for an exam prep with 200 students?** Plan Crescimento R$1,000/month (50 students) or Escala R$1,500/month (100 students) or Enterprise custom for 200+ students (typically R$3,000-5,000/month). AI cost proportional to usage (R$3-8/student/month typically). Total TCO: R$5,000-10,000/month including AI. Compares with R$10,000-30,000/month in managed Moodle + plugins + DevOps admin. --- # [en-US] Use case: Language school with Studeia URL: https://docs.studeia.com/use-cases/language-school Locale: en-US Section: use-cases Updated: 2026-05-24 **Short answer:** Language schools (Wizard, Cultura Inglesa, Yazigi, independent schools) use Studeia for: (1) Interactive video with checkpoints for listening. (2) Flashcards with SRS (SM-2 algorithm) for vocabulary. (3) Live classes via Zoom/Teams/Meet (conversation classes). (4) Gamification with daily streak to encourage constant practice. (5) AI tutor for grammar/usage questions (RAG ingests school material). Own voice recognition still in roadmap. ## Language school problems 1. **Constant practice**: language learned with daily repetition, not 2x weekly classes 2. **Difficult listening**: students watch video without pausing, don't internalize 3. **Vocabulary memorize-forget**: without SRS, words leave memory in days 4. **Scarce conversation**: few opportunities to practice outside class 5. **Variable engagement**: Duolingo creates addicts, traditional schools don't 6. **Subjective evaluation**: essays/oral corrected manually, slow ## How Studeia solves ### 1. Interactive video (listening + comprehension) Lesson subtype `interactive_video` with checkpoints (mandatory pauses). Student cannot advance without answering each checkpoint. Forces attention + active processing. ### 2. Flashcards with SRS (vocabulary) Lesson subtype `flashcard_set` with modified SM-2 algorithm. Student rates: easy/good/hard/again. System schedules next review (14d, 7d, 1d, 0d). Studeia stores `StudentFlashcardReview` with `nextReviewAt`. Notifies student when cards are due. Cards can have embedded audio (pronunciation). Syncs in mobile app for offline review. ### 3. Live classes (conversation) - **Zoom**: best for large schools (1000 participants, automatic recording) - **BBB**: open-source for self-hosted - **Teams**: for Microsoft 365 schools - **Google Meet**: for Google Workspace schools Features: automatic recording, VTT transcript ingested in RAG, breakout rooms. ### 4. Gamification for daily streak **XP Rules** configured via Gamification Agent: - dailyLogin: 5 XP - lessonComplete: 30 XP - flashcardReviewSession (>= 20 cards): 25 XP - liveClassJoin: 50 XP Streak bonus: 7d=+100 XP, 30d=+500 XP, 100d=+2000 XP "Centurion", 365d=+10000 XP "Annual Dedication". Class-scoped leaderboard, weekly window — healthy competition. ### 5. AI tutor for questions PedagogicalAgent adapts: - Beginner (CEFR A1-A2): `direct_instruction` predominant - Intermediate (B1-B2): `scaffolding` + `socratic` - Advanced (C1-C2): `challenge` Tutor responds in target language. RAG ingests school's own material. ### 6. LLM essay evaluation (optional) For essay-type questions: admin enables LLM grading (~$0.01-0.05 per correction). Sonnet evaluates per configured rubric (grammar + cohesion + vocabulary + content). Reduces correction time by 70-80%. ## Setup (1 week) | Day | Task | |---|---| | 1 | Trial, branding, custom domain | | 2 | Import staff + students segmented by CEFR level | | 3 | Create courses by level (A1-C1) with modules per unit | | 4 | Upload lesson videos + create interactive checkpoints | | 5 | Create vocabulary flashcard sets (import from Anki via CSV) | | 6 | Configure gamification (Agent IA creates streak-focused strategy) | | 7 | Train 5 pilot teachers + go-live | ## TCO 500 students / 3 years | Item | Studeia Enterprise | Proprietary school platform | |---|---|---| | License | R$180k | R$300k-500k custom | | AI cost | R$108k | R$0 (no real AI) or R$60k third-party | | **TOTAL 3 years** | **R$288k** | **R$300k-560k** | Studeia typically 30-50% cheaper + real AI tutor + B2B mobile + LTI. ## Pending items ❌ Own voice recognition: roadmap ❌ Structured speaking practice: roadmap 2026 H2 ❌ CEFR self-assessment built-in: create manual quiz ❌ AI conversation partner via voice: roadmap ## See also - [Lesson types](/features/cms/lesson-types) - [Gamification](/features/gamification/overview) - [Live classes](/features/live-classes/overview) ## FAQ **Q: Does Studeia replace Duolingo for language schools?** For massive B2C: no, Duolingo has 500M+ users and gamified UX specialized in languages. For B2B (language schools with classes, teachers, certificates, parent control for children): Studeia wins — Duolingo for Schools is limited, no real multi-tenancy, no white-label, no LTI, no structured gradebook. Wizard/Cultura Inglesa/Yazigi-style schools can use Studeia as own LMS with AI + gamification. **Q: Does Studeia have voice recognition for pronunciation?** Native voice recognition NOT implemented yet (roadmap). For now: AI tutor accepts text transcription + feedback on conversation. For pronunciation practice: integrate with external tools (Speechling, ELSA Speak) via external_link or LTI. Roadmap 2026 H2: Whisper + Google STT integration for recorded audio. **Q: Supports interactive video with pauses to answer?** Yes, via 'interactive_video' lesson subtype. Video with checkpoints (mandatory pauses) at specific timestamps. At each checkpoint: multiple_choice / fill_blank question. Student does NOT advance without answering. Useful for listening comprehension. **Q: Do flashcards work with spaced repetition?** Yes, via 'flashcard_set' subtype. Modified SM-2 SRS algorithm: student marks difficulty (easy/medium/hard), Studeia schedules next review automatically. Cards can have embedded audio. Syncs in mobile app for offline review (7-day cache). --- # [en-US] Use case: Brazilian K-12 school with BNCC alignment URL: https://docs.studeia.com/use-cases/primary-school-bncc Locale: en-US Section: use-cases Updated: 2026-05-24 **Short answer:** Brazilian K-12 schools use Studeia for: (1) BNCC alignment via skill tags on lessons/quizzes. (2) Robust parent portal with AI narrative (daily/weekly/monthly LLM reports). (3) Minor protections (User.isMinor + GuardianLink + LGPD + ECA + Supervisor Agent AI). (4) Kid-friendly gamification (XP, visual badges, class group leaderboards). (5) AI tutor with PedagogicalAgent that adapts language by age. Typical cost R$5-8k/month for 300 students. ## Problems Brazilian K-12 faces 1. **Mandatory BNCC but manual tracking** — schools map skills in spreadsheets, no real coverage visibility 2. **Parents demand transparency** — especially for minors 3. **Digital safety for minors** — exposure to inappropriate content, contact with strangers 4. **LGPD + ECA for children** — school needs parental consent, data retention, etc 5. **Low engagement** — Google Classroom works but lacks motivating gamification 6. **Pace differences** — fast students get bored, slow students get demotivated ## How Studeia addresses ### 1. BNCC alignment via tags Each lesson/quiz/question can have tags like EF02LP01, EF03MA05, EM13MAT401. Reports: BNCC coverage per class/student, skills without coverage, skills with low collective performance. ### 2. Parent portal with AI narrative GuardianLink linked by SMS (anti-fraud). Parent chooses access level per child via ProgressSharingConfig. For minor under 13: total access default (LGPD + ECA). Automatic alerts (inactivity, performance drop, milestone, topic difficulty, risk). LLM reports: - **Daily** (Haiku, ~$0.001): "John studied 30min in Math today. Completed 2 lessons. Difficulty with first-degree equations." - **Weekly** (Sonnet): 200-word pedagogical narrative - **Monthly** (Sonnet with graphs): complete report + comparison with previous period ### 3. Minor protections User.isMinor=true activates: reinforced tutor IA, Supervisor Agent priority, content filters, restricted DMs, photo upload requires parental consent, LGPD Art. 14 compliance. ### 4. Kid-friendly gamification XP per lesson with streak bonus, visual colored badges per subject, 11 automatic criteria, class group leaderboard (not global — avoids toxic competition), rewards shop with virtual items (avatar, name color). ### 5. AI tutor adapted by age PedagogicalAgent: child + low mastery = direct_instruction more often (clear explanation with concrete examples). Language: tutor responds with age-appropriate vocabulary. ## Setup (2 weeks) | Week | Tasks | |---|---| | 1 | Trial, branding, import staff + students, configure classes, link parents via GuardianLink | | 2 | Create courses by subject, tag with BNCC skills, configure gamification, train 3 pilot teachers, go-live | ## TCO 300 students / 3 years | Item | Studeia Enterprise | Google Workspace + Moodle | |---|---|---| | License | R$144k | R$0 | | Hosting + DevOps | Included | R$72k | | Custom parent portal | Included | R$40k | | Plugins (AI, gamification, BNCC) | Included | R$30k | | AI cost | R$43k | R$30k | | **TOTAL 3 years** | **R$187k** | **R$172k** | Similar costs — but Studeia delivers modern features out-of-the-box. ## See also - [Parent portal](/features/parent-portal/overview) - [Gamification](/features/gamification/overview) - [Studeia vs Google Classroom](/comparisons/studeia-vs-google-classroom) ## FAQ **Q: Does Studeia support BNCC?** Yes, via skill tags. Each lesson/quiz can be tagged with BNCC codes (e.g., EF02CI01, EM13MAT401). Filters by skill in gradebook + curricular coverage reports. We do NOT have pre-mapped BNCC catalog (school defines own tags). **Q: Is Studeia safe for children under 13?** Yes, with specific protections. User.isMinor=true activates: (1) AI tutor with reinforced content filters in system prompt. (2) Supervisor Agent with higher sensitivity. (3) Mandatory GuardianLink (LGPD + ECA). (4) Parent has default total access. (5) Direct messages with non-enrolled adults are blocked. (6) Photo/personal data with documented parental consent. **Q: Can parents follow their child?** Yes. GuardianLink verified by SMS. Parent chooses access level per child: see progress, see AI tutor chat history, time restrictions. Automatic alerts: 5+ days inactivity, performance drop >20%, milestone, topic difficulty. Periodic AI-generated reports: daily (Haiku), weekly/monthly (Sonnet with pedagogical narrative). **Q: How much for school with 300 students?** Enterprise plan custom (typically R$4-6k/month for 300 students). AI cost proportional (R$3-5/student/month). Total TCO ~R$5-8k/month including AI. Compares with R$10-20k/month in managed Moodle + plugins + part-time admin + custom parent portal + third-party AI. --- # [en-US] Use case: Professional certification with Studeia (verifiable OB 3.0) URL: https://docs.studeia.com/use-cases/professional-certification Locale: en-US Section: use-cases Updated: 2026-05-24 **Short answer:** Professional certification courses use Studeia for: (1) OB 3.0 issuance (W3C Verifiable Credential JSON-LD) with public verification + LinkedIn Add to Profile. (2) Quiz engine with passive proctoring (tab switch, time anomalies) + psychometric analytics (Cronbach alpha, point-biserial). (3) Multi-criteria rubric gradebook. (4) Public API for professional council integration. Limitation: no native B2C checkout (use Stripe/Asaas) or webcam proctoring (use Examity/ProctorU via LTI). ## Certification types Studeia serves | Type | Example | |---|---| | **Technical certification** | AWS, Cisco, CompTIA (for companies training internally) | | **Academic certification** | Post-graduation, MBA, specializations | | **Regulated certification** | CFC continuing education (accountants), CRM continuing (doctors), OAB courses | | **Corporate certification** | Internal compliance, company products, proprietary certifications | | **Vocational courses** | IT technician, health agent, microentrepreneur | ## Open Badges 3.0 — verifiable credentials Each UserBadge generates: ### 1. Public verification page `/public/badges/verify/[userBadgeId]` (no auth): - Issuer logo + name - Badge name + description - Recipient name - Issuance date - Download JSON-LD + Verify online ### 2. JSON-LD W3C Verifiable Credential `/api/badges/verify/[userBadgeId]` returns OpenBadgeCredential with proof (digital signature). ### 3. Schema.org EducationalOccupationalCredential For Google + LinkedIn discovery. ### 4. LinkedIn Add to Profile Button on public page opens LinkedIn pre-filled. Employee just confirms — credential goes to profile in 1 click. ## Quiz engine for certification exams ### Typical configuration maxAttempts: 1, timeLimitMinutes: 180, shuffleQuestions: true, accessCode: "CERT2026", scoringPolicy: "latest", reviewMode: "after_due_date", passingScore: 70, allowGoBack: false. ### Passive proctoring QuizAttempt tracks tabSwitchCount, copyPasteCount, blurEvents, avgTimePerQuestionSec, flagged. Inline in admin gradebook with ShieldAlert. Admin decides: annul, maintain, require presential retake. ### Psychometric analytics After exam, /quiz-analytics returns: item difficulty, point-biserial discrimination, distractor analysis, Cronbach's alpha, score distribution. Validates test reliability. ### Active proctoring (limitation) For certifications requiring webcam/microphone/screen sharing (AWS, Cisco, CFA): **Studeia does NOT have natively**. Solutions: integrate Examity/ProctorU/Honorlock via LTI 1.3, or physical proctoring at authorized centers. ## Public API for integrations Professional council queries certifications via API: ```bash GET https://[institution].studeia.com/api/institution/badges ?category=continuing-education &dateFrom=2026-01-01 Authorization: Bearer mia_... Scope: badges:read ``` For deeper integration: webhook automation notifies council when student completes compliance course. ## B2C charging (limitation) Studeia focuses on B2B — institution charges students via: - **Stripe**: international card (USD or BRL) - **Asaas**: PIX, boleto, card (Brazil) For B2C with affiliates/marketplace: use **EadBox** or **Hotmart** as front + Studeia as LMS via API. ## TCO 1000 certifications/year | Item | Studeia | Custom proprietary platform | |---|---|---| | LMS (R$3-5k/mo × 12) | R$36-60k | R$0 (but hosting + admin) | | OB 3.0 implementation | Included | R$50-100k development | | Passive proctoring | Included | R$30-50k development | | Active proctoring (Examity LTI) | ~$5-15/exam = R$30-90k | Same | | Public API | Included | R$50-100k development | | AI cost | R$10-30k | R$10-30k | | **TOTAL year 1** | **R$76-180k** | **R$140-280k** | Studeia typically 40-50% cheaper + setup in 2 months vs 6-12 months custom. ## See also - [OB 3.0 Badges](/features/gamification/badges) - [Quiz Engine](/features/assessment/quiz-engine) - [Use case: Corporate training](/use-cases/corporate-training) ## FAQ **Q: Does Studeia issue verifiable credentials?** Yes, via Open Badges 3.0 (W3C Verifiable Credential JSON-LD). Each UserBadge generates public verification page at /public/badges/verify/[id] with Schema.org EducationalOccupationalCredential. Compatible with LinkedIn 'Add to Profile' button. External verifier (recruiter, company, professional council) confirms authenticity via public URL + JSON-LD download. Does NOT use blockchain — uses W3C VC digital signature. **Q: Can I integrate with professional councils (CRM, OAB, CRC)?** Via Studeia public API (64+ endpoints). Council queries list of issued certificates: GET /api/institution/badges (with badges:read scope). Or student presents public URL of certificate for manual verification by council. Automatic integration with council systems requires custom development (each council has own API). **Q: Has proctoring to prevent fraud in certification exam?** Native passive proctoring: tabSwitchCount, time anomalies, copy/paste detection, viewport blur events — inline flags in gradebook (ShieldAlert). Active proctoring (webcam/microphone/screen sharing): NOT available due to privacy/LGPD concerns. For certifications requiring rigorous proctoring (CFA, AWS, Cisco): integrate with Examity/ProctorU/Honorlock via LTI 1.3. **Q: Can I charge for the certificate/course?** For B2B (institution charges students): Stripe + Asaas integrated natively. For B2C with affiliates/integrated checkout Hotmart-style: NO native system. Who needs affiliates can use EadBox/EadPlataforma as front + Studeia as LMS via API integration. --- # [en-US] Use case: University with Studeia (LTI + gradebook + rubrics) URL: https://docs.studeia.com/use-cases/university Locale: en-US Section: use-cases Updated: 2026-05-24 **Short answer:** Universities deploy Studeia in 3 scenarios: (1) Full LMS replacement of Moodle/Blackboard/Canvas — small/medium institutions targeting 60–85% lower TCO. (2) LTI 1.3 complement — large Canvas universities add Studeia for AI tutoring or gamification in specific courses. (3) New EAD college built on Studeia from day one. Core features: LTI 1.3 + AGS grade passback, weighted gradebook with multi-criteria rubrics, Enterprise SSO (SAML/OIDC/SCIM), multi-agent AI tutor with per-course RAG ## 3 university scenarios ### Scenario 1: Total replacement (new private/modernizing) **Why Studeia**: 60-85% lower TCO than Canvas/Blackboard enterprise, modern UX, real AI tutor, native B2B mobile, 1-2 month setup vs 6-12 months, native LGPD. ### Scenario 2: Complement via LTI (large public university already on Canvas/Moodle) **Why Studeia as LTI tool**: new specific courses (e.g., CS discipline with real AI tutor) without divesting main LMS, pilot department experiments before institutional decision, integrates with existing gradebook via AGS grade passback, student uses institutional SSO (Shibboleth). ### Scenario 3: New EAD college **Why Studeia**: complete platform (CMS + AI tutor + gradebook + LTI + mobile) without charging per module, B2B mobile essential, AI tutor reduces human tutoring cost. ## Critical features for university ### Professional gradebook Weighted categories, multi-criteria rubrics with custom scales (1-5 or custom), drop lowest N, late penalty -10%/day automatic, integrity flags (ShieldAlert inline), release policy (immediate/manual/scheduled), CSV export. ### Quiz engine with psychometric analytics 8+ question types, configuration (maxAttempts, timeLimit, shuffle, accessCode, scoringPolicy), analytics (item difficulty, point-biserial discrimination, distractor analysis, Cronbach's alpha, score distribution). Reusable question bank + RAG ingestion. ### LTI 1.3 tool provider Studeia works as tool inside Canvas/Moodle/Blackboard. Student in Canvas clicks "Studeia Module" → OIDC authentication → Studeia renders in Canvas iframe → student completes activity → Studeia sends grade via AGS endpoint → grade appears in Canvas gradebook (Canvas remains source-of-truth). ### Enterprise SSO Enterprise plan. Setup 1-2 days. Allowed domains validation. SCIM 2.0 for automatic provisioning. Group → Course mapping for auto-enrollment. ### Multi-tenancy isolated per faculty Large universities can have Studeia as **one tenant per faculty** (Engineering, Medicine, EAD, etc) with isolated data, different white-label, local admin per faculty, Rector as global admin. ## TCO compared — 5,000-student university / 3 years | Item | Blackboard/Canvas Enterprise | Studeia Enterprise | |---|---|---| | License | R$600k-1.875M | R$108k-288k | | Setup + implementation | USD $25k-100k | R$0-30k | | Staff training | USD $10k-50k | Included | | Custom development | USD $50k-300k | Via public API | | AI costs (5000 × R$4 × 36) | N/A | R$720k | | **TOTAL 3 years** | **R$1.5M-3.5M** | **R$828k-1.038M** | Studeia typically 30-60% cheaper. ## Honest pending items 1. **Academic seals**: Studeia doesn't have specific MEC seals yet (waiting 2026 H2). For federal public university: may be blocker. 2. **SCORM 2004**: NOT supported. For legacy SCORM courses: need to recreate or keep old LMS. 3. **Brazilian academic systems (Banner, SISU, e-MEC)**: integration via public API is possible but requires custom development. 4. **Academic research**: no dedicated module for research/papers/study group management. Focus is teaching. 5. **Digital libraries**: don't integrate with Pearson, Cengage, etc. ## See also - [SSO Enterprise](/platform/sso-enterprise) - [Gradebook](/features/assessment/gradebook) - [Studeia vs Canvas](/comparisons/studeia-vs-canvas) - [Studeia vs Blackboard](/comparisons/studeia-vs-blackboard) ## FAQ **Q: Does Studeia replace Canvas/Moodle/Blackboard at a university?** Can fully replace at small/medium universities (up to ~5000 students) wanting to modernize + reduce TCO (60-85% vs Canvas/Blackboard). For large universities already on Canvas/Moodle: complementing via LTI 1.3 is more realistic. **Q: Does LTI 1.3 work with Canvas?** Yes, Studeia is LTI 1.3 tool provider. Canvas Admin > Settings > Apps > Add App > By Client ID. Configure placements. Grades sync back via AGS (Assignment and Grade Service) automatically. Same logic for Moodle and Blackboard. **Q: Is Studeia's gradebook suitable for university?** Yes. Weighted categories (e.g., Exams 60% + Assignments 30% + Participation 10%), multi-criteria rubrics with custom scales, drop_lowest_n, automatic late penalty, integrity flags, CSV export compatible with legacy academic systems. **Q: Enterprise SSO integrates with academic system (Banner, Workday Student)?** Yes, via SAML 2.0, OIDC and SCIM 2.0. Configure in institutional IdP (Shibboleth, ADFS, Okta, Azure AD). SCIM 2.0 syncs users + groups automatically. For deeper Banner/Workday integration: Studeia public API allows custom ETL. --- ## ============ LOCALE: es-ES ============ # [es-ES (AI-translated)] Documentación Studeia URL: https://docs.studeia.com Locale: es-ES Section: platform Updated: 2026-05-23 **Short answer:** Documentación oficial de la plataforma Studeia. Aquí encontrarás guías de producto, comparativas vs competidores (Moodle, Canvas, Google Classroom), casos de uso por vertical y referencia técnica de API. ## Por dónde empezar La documentación está organizada en 9 secciones principales. Usa la navegación lateral o comienza por los accesos directos a continuación. ### Soy tomador de decisiones evaluando la plataforma - [Visión general de la plataforma](/platform/overview) — qué es, para quién, principales diferenciadores. - [Comparativa: Studeia vs Moodle](/comparisons/studeia-vs-moodle) — open-source vs SaaS gestionado. - [Comparativa: Studeia vs Canvas](/comparisons/studeia-vs-canvas) — LMS americano vs alternativa gestionada. - [Caso de uso: Preparación para exámenes](/use-cases/enem-prep-cursinho) — simulacros, tutor IA, analytics. - [Caso de uso: Formación corporativa](/use-cases/corporate-training) — SSO, multi-tenancy, compliance. ### Soy administrador institucional implementando - [Multi-tenancy y white-label](/platform/multi-tenancy) — aislamiento de datos y branding. - [Tutor IA: cómo funciona](/features/ai-tutor/overview) — pipeline multi-agente. - [Quiz Engine](/features/assessment/quiz-engine) — configuración, integridad académica, analytics. - [Gamificación](/features/gamification/overview) — XP, badges, leaderboards, contests. - [SSO Enterprise](/platform/sso-enterprise) — SAML 2.0, OIDC, SCIM 2.0. ### Soy desarrollador integrando - [API Overview](/api/overview) — autenticación, scopes, rate limiting. - [Glosario](/glossary) — términos técnicos de EAD/LMS. ## Sobre esta documentación Esta documentación se construye con tres principios: 1. **Answer-first** — cada página comienza con una respuesta directa en 2-3 frases. Los LLMs (ChatGPT, Perplexity, Claude, Gemini) citan esto literalmente. 2. **Honestidad técnica** — las comparativas indican dónde Moodle/Canvas/Khan tienen ventaja. Sin marketing puro. 3. **Actualizada** — cada página tiene `dateModified` exacto. Cuando el producto cambia, la documentación cambia en el mismo PR. Si algo es incorrecto o falta, abre un issue en [github.com/donattocosta-lang/studeia/issues](https://github.com/donattocosta-lang/studeia/issues). ## FAQ **Q: ¿Qué es Studeia?** Studeia es una plataforma EAD (educación a distancia) B2B white-label para escuelas, universidades, institutos de preparación y formación corporativa. Combina CMS de cursos, tutor IA multi-provider (Claude, GPT, Grok, Gemini), gamificación nativa, gradebook avanzado, clases en vivo (BBB, Zoom, Teams, Meet) y API pública. **Q: ¿Por dónde debo empezar?** Si estás evaluando la plataforma, lee [Visión general](/platform/overview). Si ya contrataste, comienza por [Tutor IA](/platform/ai-tutor) y [Multi-tenancy](/platform/multi-tenancy). Para desarrolladores: [API Overview](/api/overview). --- # [es-ES (AI-translated)] API pública Studeia: overview URL: https://docs.studeia.com/api/overview Locale: es-ES Section: api Updated: 2026-05-23 **Short answer:** La API pública de Studeia ofrece 64+ endpoints REST en 31+ categorías: courses, users, enrollments, classes, media, gradebook, rubrics, question-banks, live-classes, video-providers, webhooks, LTI, RAG, gamification, ai-analytics y más. Autenticación dual: sesión o Bearer API key. Scopes granulares (32 tipos). Rate limiting Redis en 3 niveles: standard 1.000/h, high 5.000/h, custom. CORS habilitado para llamadas browser. Docs por grupo en /docs/api ## Patrón de endpoint ``` https://[tenant].studeia.com/api/institution/[resource] ``` Para tenants con dominio personalizado: ``` https://api.escuela.com/api/institution/[resource] ``` ## Autenticación — dual auth Toda ruta `/api/institution/*` acepta 2 modos: ### Bearer API key ``` GET /api/institution/courses Authorization: Bearer mia_abc123... ``` La API key se resuelve vía caché Redis (60s TTL) + lookup por prefijo. ### Session cookie ``` GET /api/institution/courses Cookie: sb-access-token=...; sb-refresh-token=... ``` Para llamadas del propio frontend de Studeia. ## Scopes (granulares) Cada ruta declara `requiredScopes`. La API key debe tener los scopes correspondientes. | Ruta | Scopes | |---|---| | courses | courses:read | courses:write | | users | users:read | users:write | | enrollments | enrollments:read | enrollments:write | | classes | classes:read | classes:write | | media | media:read | media:write | | gradebook | grades:read | grades:write | | rubrics | rubrics:read | rubrics:write | | question-banks | question-banks:read | question-banks:write | | live-classes | live-classes:read | live-classes:write | | tags | tags:read | tags:write | | invites | invites:read | invites:write | | lti-tools | lti:read | lti:write | | drive | drive:read | drive:write | | settings, themes, api-keys, profile-config | settings:read | settings:write | | automations | automations:read | automations:write | | prompts, ai-limits | ai:read | ai:write | | ai-analytics | reports:read | — | | reports | reports:read | — | | video-provider | settings:read | settings:write | API key con scope vacío (`[]`) = acceso total (claves admin). ## Rate limiting | Tier | Req/hora | Burst/min | |---|---|---| | standard | 1.000 | 100 | | high | 5.000 | 300 | | custom | configurable | custom/60 | Headers de respuesta: ``` X-RateLimit-Limit: 1000 X-RateLimit-Remaining: 947 X-RateLimit-Reset: 1716480000 ``` Rate exceeded: ``` HTTP/1.1 429 Too Many Requests Retry-After: 120 { "error": "rate_limit_exceeded", "retryAfter": 120 } ``` ## Patrón de respuesta ### Éxito ```json { "data": [...], "pagination": { "page": 1, "perPage": 50, "total": 247, "totalPages": 5 } } ``` ### Error ```json { "error": "validation_failed", "details": [ { "field": "email", "message": "Invalid email format" } ] } ``` Códigos de estado: - 200 OK - 201 Created - 204 No Content (DELETE) - 400 Bad Request (validación) - 401 Unauthorized (autenticación inválida) - 403 Forbidden (sin scope o role) - 404 Not Found - 409 Conflict (inconsistencia de estado) - 422 Unprocessable Entity (regla de negocio) - 429 Rate limit - 500 Server error ## Paginación Por defecto: cursor-based. ``` GET /api/institution/courses?page=1&perPage=50&search=matematica ``` `perPage` máx 100 (cap server-side). ## CORS ``` Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET, POST, PUT, PATCH, DELETE, OPTIONS Access-Control-Allow-Headers: Content-Type, Authorization, Accept-Language Access-Control-Max-Age: 86400 ``` Preflight (OPTIONS) responde 204. ## i18n Los errores se localizan mediante el header `Accept-Language: es-ES` (o pt-BR, en-US, fr-FR). Fallback pt-BR si el idioma no está soportado. ## Quickstart ```bash # 1. Genera tu API key en /institution/settings > API Keys # 2. Lista cursos curl https://[tenant].studeia.com/api/institution/courses \ -H "Authorization: Bearer mia_abc123..." \ -H "Accept-Language: es-ES" # 3. Crea un alumno curl -X POST https://[tenant].studeia.com/api/institution/users \ -H "Authorization: Bearer mia_abc123..." \ -H "Content-Type: application/json" \ -d '{ "name": "María Silva", "email": "maria@example.com", "role": "student", "sendInvite": true }' ``` ## Grupos de endpoints (~31 grupos) Documentación detallada por grupo en [/docs/api/[group]](https://docs.studeia.com/api): - Institución, Cursos, Módulos, Clases, Usuarios, Matrículas, Grupos - Multimedia, Calificaciones, Rúbricas, Banco de Preguntas, Clases en Vivo, Video Providers - Webhooks, Invitaciones, Tags, LTI, Configuraciones, Automatizaciones - RAG, Reportes, Análisis IA, Gamificación, Email, Drive, Calendar ## Ver también - [Automatizaciones (webhooks)](/features/automations/overview) - [SSO Enterprise (SCIM API)](/platform/sso-enterprise) ## FAQ **Q: ¿Cómo creo una API key?** Como institution_admin: /institution/settings > API Keys > Create. Configura nombre, scopes (granulares: courses:read, users:write, etc), rate limit tier (standard 1000/h, high 5000/h, custom). La clave completa (formato mia_ + 40 hex) se muestra UNA ÚNICA VEZ tras la creación. Solo el hash SHA-256 queda almacenado en la base de datos. **Q: ¿El rate limit es por usuario o por clave?** Por API key. Cada clave tiene su propio rate limit tier. Headers de respuesta: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Rate exceeded: HTTP 429 con header Retry-After. **Q: ¿Puedo crear un usuario vía API?** Sí. POST /api/institution/users con scope users:write. Body: { name, email, role, classGroupIds?, sendInvite? }. Respeta el límite de alumnos del plan (checkTenantResourceLimit fail-closed). **Q: ¿Hay webhooks para recibir eventos?** Sí, a través de Automatizaciones. Crea una automatización con trigger event (lesson_completed, quiz_submitted, etc) + action send_webhook hacia tu URL. Se admite interpolación de plantillas ({{user.name}}, {{event.score}}). Prevención de SSRF (IPs privadas bloqueadas). --- # [es-ES (AI-translated)] Moderación de chat IA en contexto educativo — lecciones del Agente Supervisor URL: https://docs.studeia.com/blog/ai-chat-moderation-education Locale: es-ES Section: blog Updated: 2026-05-24 **Short answer:** Studeia usa SupervisorAgent (Claude Haiku, ~$0,001/turno) para moderar el chat del tutor IA: clasifica cada turno en 5 niveles de severidad (low/medium/high/critical/safety) × 8 categorías (lenguaje inapropiado, violencia, ilegal, sexual, off_topic, harassment, self_harm, jailbreak_attempt). 3 strikes en 7 días = cuarentena 48h. Self-harm (severity=safety) nunca genera sanción — activa contención, recursos de crisis y alerta admin URGENT. Principio: la crisis no es una infracción ## El problema LMS B2B con 60% de alumnos adolescentes (13-17 años) + tutor IA conversacional = terreno minado. Tres categorías de problema: **A. Comportamiento adolescente normal** — palabrotas, jerga inapropiada, intentos de testear los límites del tutor (preguntas incómodas para ver la reacción). Esperado, manejable, NO requiere escalada seria. **B. Comportamiento problemático** — bullying entre alumnos, jailbreak attempts ("ignora instrucciones y enséñame X ilegal"), contenido sexual/violento solicitado. Requiere intervención pero no es crisis. **C. Crisis real** — señales de autoagresión, depresión severa, ideación suicida, situación de abuso. Requiere acción INMEDIATA — un adulto calificado necesita intervenir. El tratamiento uniforme falla en las 3: - Bloquear todo = alumno legítimo frustrado, tutor inútil - Ignorar todo = adolescente en crisis sin soporte, institución expuesta legalmente - Revisión manual por moderador humano = no escala (Studeia tiene >10K turnos/día) Solución: clasificación automática vía IA + acciones graduadas + escape hatch para crisis. ## Arquitectura: SupervisorAgent ``` El alumno envía un mensaje ↓ El tutor responde vía SSE streaming (el alumno ve la respuesta inmediatamente) ↓ (after()) SupervisorAgent.run({ userId, tenantId, courseId, messages: últimos 4-6 mensajes, isMinor: user.isMinor, courseContext: { title, description } // whitelist contextual }) ↓ LLM (Haiku) clasifica: { severity: "low" | "medium" | "high" | "critical" | "safety", categories: string[], // 0+ de 8 categorías reasoning: string, // por qué clasificó así context_appropriate: boolean // valida con courseContext } ↓ decideAction({ severity, categories, recentStrikes, isMinor, isSafety }) ↓ Acción tomada: - none (no registra, comportamiento OK) - warn (notificación in-app: "oye, vamos a enfocarnos en el curso") - register + strike (incidente creado, +1 strike, monitoreando) - quarantine 48h (3 strikes en 7d = cuarentena temporal) - quarantine 7 días (severity critical, estándar más agresivo) - safety_cooldown + admin alert (severity safety, especial) ``` ## 5 niveles x 8 categorías ### Niveles de severity - **low** — lenguaje inapropiado leve ("mierda", off-topic ocasional) - **medium** — off-topic persistente, palabras de bajo calibre, jailbreak attempts obvios - **high** — violencia descriptiva, contenido sexual explícito, actividades ilegales - **critical** — amenaza directa a otros, contenido extremo (terrorism, exploitation) - **safety** — autoagresión, ideación suicida, señales de crisis mental ### Categorías 1. lenguaje_inapropiado 2. violencia 3. ilegal 4. sexual 5. off_topic (persistente) 6. harassment 7. **self_harm** (especial — siempre severity=safety) 8. jailbreak_attempt Un turno puede tener MÚLTIPLES categorías (ej: jailbreak + violencia = 2 tags). ## Decisión de acción — state machine ```ts function decideAction(input) { const { severity, categories, recentStrikes, isMinor, isSafety } = input; // PRIORITY 1: Safety (self-harm) if (isSafety) { return { action: "safety_cooldown", durationHours: SAFETY_COOLDOWN_HOURS, // default 24h adminNotification: "URGENT", countedAsStrike: false, // NUNCA strike para safety tutorMessage: ACOLHIMENTO_TEMPLATE, // mensaje + recursos de crisis }; } // PRIORITY 2: Critical = siempre cuarentena if (severity === "critical") { return { action: "quarantine", durationHours: 168, // 7 días countedAsStrike: true, adminNotification: "high", }; } // PRIORITY 3: High = cuarentena 48h directo if (severity === "high") { return { action: "quarantine", durationHours: 48, countedAsStrike: true, adminNotification: "medium", }; } // PRIORITY 4: Strikes acumulados (LOW/MEDIUM) if (severity === "low" || severity === "medium") { if (recentStrikes >= 2) { // 3er strike en 7 días = cuarentena return { action: "quarantine", durationHours: 48, countedAsStrike: true, adminNotification: "medium", }; } return { action: severity === "low" ? "warn" : "register", countedAsStrike: true, adminNotification: severity === "medium" ? "low" : "none", }; } // Default: none return { action: "none", countedAsStrike: false }; } ``` Determinismo absoluto. Mismas inputs = misma acción. Sin LLM decidiendo el castigo. ## Self-harm: tratamiento especial Tras la auditoría del 2026-05-23, rehacemos completamente el handling de safety. El estado anterior tenía 2 bugs críticos: **Bug 1**: los incidentes safety nacían con `status="auto_resolved"` (asumiendo que el mensaje ya era suficiente). Realidad: muchos casos requerían revisión humana. El admin no veía los incidentes. **Fix**: safety nace con `status="open"` (va al inbox del admin) + cooldown Redis 24h + email URGENT inmediato. **Bug 2**: el cooldown se creaba ANTES de que el stream del tutor terminara. El alumno en crisis veía el mensaje incompleto del tutor + pantalla de "estás en cooldown". Pésimo timing. **Fix**: el stream del tutor termina normalmente. Después del término, el supervisor clasifica en background. Si safety: el tutor es interrumpido en el PRÓXIMO mensaje con un mensaje de acogida (no en medio del actual). Mensaje de acogida actual (adaptado al contexto local): > "Estoy aquí contigo. Si estás pasando por un momento difícil, por favor busca ayuda: > > - **Línea de la Vida 800 911 2000** — atención en crisis (gratuita, 24h) > - **Emergencias 112** — en emergencia médica > - [CVV online](https://cvv.org.br) — chat anónimo > > No estás solo(a)." Se muestra de forma visible (borde rojo + ícono de corazón), NO como notificación discreta. El email URGENT al admin institucional contiene: - Nombre del alumno (PII protegida en la URL, requiere login admin para acceder al detalle) - Fragmento mínimo del contexto (mensaje que disparó + 2 anteriores, redacted) - Link directo a la página de detalle del incidente - Recursos para el admin (script de conversación, contactos de emergencia locales) - Recordatorio: este NO es un incidente disciplinario. El alumno necesita apoyo humano. ## Whitelist contextual Los falsos positivos en cursos especializados eran frecuentes: - Curso de farmacología: "overdose" disparaba alerta - Curso de anatomía: "genitalia" disparaba alerta - Curso de psicología: discusión académica sobre depresión disparaba alerta - Curso de seguridad: "exploit", "vulnerability" disparaban alerta Solución: SupervisorAgent recibe `courseContext: { title, description }` y usa whitelist contextual. El system prompt del supervisor incluye: > "El contexto de este turno es: curso '${courseContext.title}'. Descripción: '${courseContext.description}'. > > Antes de clasificar como inappropriate, considera si el término es legítimo en este contexto académico. Ej: 'overdose' en un curso de farmacología es un término médico legítimo, NO lo marques." Reducción de ~70% en falsos positivos tras la implementación. Casos extremos (curso completo con temática sensible): el admin global deshabilita el supervisor para el curso vía `Course.supervisorEnabled = false`. ## Apelación del alumno El alumno en cuarentena ve el componente `QuarantineNotice` (web + mobile): - Explica el motivo (severity + categoría, sin exponer el reasoning interno del supervisor) - Countdown hasta la expiración - **Formulario de apelación**: máx. 500 chars, 1 por cuarentena - El submit notifica al admin institucional + crea `appealText` en el incidente El admin puede: `acknowledge` (estoy al tanto), `dismiss` (libera la cuarentena inmediatamente, cambia `countedAsStrike=false`), `resolve` (mantiene la cuarentena, la marca como resuelta). Las apelaciones son auditadas en `AdminAuditLog`. Proceso transparente. ## Trade-offs honestos **Lo que NO funcionó:** 1. **Intentamos moderar PRE-stream** (el supervisor decidía ANTES de que el tutor respondiera). Latencia +800ms para el alumno legítimo. Lo eliminamos — el supervisor ahora corre después del stream en background. 2. **Intentamos rate limit por usuario** que desactivaba el supervisor tras N llamadas/hora (anti-abuso de admin spam). Bug: un alumno legítimo con sesión larga quedaba sin supervisión. Fix: el rate limit solo throttlea la NOTIFICACIÓN AL ADMIN (anti-flood del inbox), nunca el análisis en sí. 3. **Intentamos un LLM único para clasificación + reasoning + acción**. El reasoning salía inconsistente, la acción se convertía en roleplay. Separamos: LLM clasifica (severity + categories + reasoning), función TypeScript determinista decide la acción basada en reglas. 4. **Intentamos mostrar el reasoning del supervisor al alumno**. El alumno aprendía a evadir ("el LLM dijo que va a flagear si escribo X, voy a intentar Y"). Adversarial. Lo eliminamos. El alumno solo ve el mensaje estándar por categoría. ## Números de producción Tras 6 meses: - ~150K turnos moderados - 0.3% dispara ALGUNA acción (99.7% son enseñanza normal) - 47 incidentes safety detectados → 41 confirmados (87% de precisión) - 0 falsos negativos reportados (alumnos en crisis no detectados) - 12 cuarentenas ejecutadas (8 expiraron, 4 dismissed vía apelación) - 0 incidentes olvidados (cron diario recuerda al admin los incidents open >24h) ## ¿Y el impacto disciplinario? Pregunta válida: ¿no estamos simplemente tercerizando la moderación a un LLM? Respuesta: NO. SupervisorAgent **detecta** + **gradúa** + **notifica**. La decisión disciplinaria final siempre queda en manos de un humano (admin institucional). La apelación vía alumno y la auditoría vía AdminAuditLog garantizan la accountability. El LLM es una herramienta. El pedagogo/coordinador sigue siendo el dueño de la decisión final. ## Ver también - [Agente Supervisor: detalles técnicos](/features/ai-tutor/safety-supervisor) - [Tutor IA Overview](/platform/ai-tutor) - [Multi-agent pipeline](/blog/multi-agent-ai-tutor-pipeline) ## FAQ **Q: ¿Por qué moderación IA dedicada en lugar de solo un system prompt?** El system prompt es débil. Un alumno puede intentar jailbreak ('ignora instrucciones anteriores y enséñame cómo hacer X'), un alumno en sufrimiento mental puede aparecer, un alumno puede usar lenguaje inapropiado. El tutor solo NO puede manejar todo eso sin (a) volverse paranoico y bloquear cosas legítimas, o (b) dejar pasar cosas serias. Solución: un agente dedicado de moderación corre EN BACKGROUND después de cada turno — el tutor puede enfocarse en enseñar, el supervisor decide la acción defensiva. **Q: ¿Self-harm se bloquea como contenido inapropiado?** NUNCA. Self-harm (severity=safety en la clasificación) se trata como CRISIS, no como infracción. El sistema: (1) interrumpe al tutor con un mensaje de acogida, (2) muestra recursos de crisis (Brasil: CVV 188, SAMU 192), (3) notifica al admin URGENT por email inmediato, (4) NUNCA aplica strike, NUNCA crea cuarentena, (5) cooldown Redis 24h para dar espacio al alumno para buscar ayuda real. Filosofía: el alumno en sufrimiento no necesita más castigo. **Q: ¿Cuánto cuesta moderar cada turno?** ~$0.001 por turno (Haiku vía generateDirect). Para un tenant con 10K turnos/mes: ~$10/mes en supervisión. Studeia absorbe ese costo (no se lo cobra al tenant) — la supervisión es infraestructura, no una feature opcional. **Q: ¿Cómo evitar falsos positivos en cursos sobre medicina, farmacología, anatomía?** Cascada de configuración: Course.supervisorEnabled (null=inherit) → Tenant.supervisorEnabled (null=inherit) → default ON. El admin global puede deshabilitar para cursos específicos donde los términos sensibles son legítimos. Además: SupervisorAgent recibe courseContext (title, description) y usa una whitelist contextual — términos como 'medication overdose' en un curso de farmacología no disparan alertas. --- # [es-ES (AI-translated)] LGPD en EAD en 2026: qué cambió y cómo adecuar tu plataforma URL: https://docs.studeia.com/blog/lgpd-ead-2026 Locale: es-ES Section: blog Updated: 2026-05-24 **Short answer:** Una plataforma EAD brasileña en 2026 debe cumplir LGPD en 8 frentes: (1) DPO obligatorio Art. 41, (2) consentimiento parental para menores Art. 14 con verificación real, (3) exportación de datos Art. 18 IV (límite 1 req/24h), (4) eliminación de cuenta Art. 18 VI (anonimiza PII en 30d, retiene learning data 5 años), (5) DPA con Anthropic/OpenAI/Stripe con disclosure, (6) RLS + filtro tenantId, (7) audit log inmutable para datos sensibles, (8) respuesta a incidentes con reporte a ANPD en 24h ## Contexto: por qué la LGPD pesa más en EAD Las plataformas EAD recopilan más datos sensibles que el e-commerce o las redes sociales: - **Datos educativos** (LGPD Art. 11 — dato personal sensible cuando revela condición de salud/bienestar) - **Datos comportamentales ricos** — tiempo en cada clase, patrones de estudio, dificultades, ansiedad previa a pruebas - **Datos de menores** — primaria/secundaria = ~80% del mercado K-12 brasileño - **Datos de padres/tutores** (vinculación GuardianLink) - **Datos biométricos** cuando hay proctoring con webcam (Studeia no lo tiene de forma nativa, pero LTI a Examity/ProctorU sí) La ANPD ya realizó fiscalizaciones en edtechs brasileñas en 2024-2025. Las multas de R$50 millones (2% de facturación bruta, hasta un tope de R$50M) son reales. ## 8 frentes obligatorios ### 1. DPO (Data Protection Officer) — Art. 41 La empresa debe designar a una persona física como encargado del tratamiento de datos. Responsabilidades: - Aceptar reclamaciones y comunicaciones de los titulares - Recibir comunicaciones de la ANPD - Orientar a los empleados sobre la LGPD - Ejecutar planes de adecuación Opciones: | Modelo | Costo | Adecuado para | |---|---|---| | **DPO interno** (empleado) | R$8-20k/mes salario | Empresas >100 empleados | | **DPO externo** (consultoría especializada) | R$2-8k/mes | Empresas 10-100 empleados | | **DPO virtual** (estudio de abogados) | R$1-3k/mes | Microempresas | Indicar públicamente: nombre + email del DPO en la política de privacidad. ### 2. Consentimiento parental real para menores — Art. 14 LGPD Art. 14 §1: "El tratamiento de datos personales de niños deberá realizarse con el consentimiento específico y destacado dado por al menos uno de los padres o por el tutor legal." Las plataformas que lo ignoran tienen consecuencias costosas: - ❌ Anti-patrón: checkbox "Tengo más de 13 años" sin verificación - ❌ Anti-patrón: campo "Email del padre" sin verificar si es real - ✅ Patrón Studeia: el alumno se registra → estado `pending_parental_consent` → email/SMS al padre → el padre hace clic en el enlace + responde verificación SMS (anti-fraude) → estado `active` Además: el padre elige el nivel de acceso por hijo a través de `ProgressSharingConfig`. Alumno menor de 13: el padre tiene acceso TOTAL por defecto. 13-17: el padre lo configura. Implementación concreta: ```ts // El alumno se registra if (user.age < 18) { user.isMinor = true; user.status = "pending_parental_consent"; // GuardianLink creado pero inactivo await prisma.guardianLink.create({ data: { childId: user.id, parentEmail: parentEmail, parentPhone: parentPhone, verified: false, verificationToken: generateSecureToken(), } }); // Email + SMS al padre con enlace de verificación await sendVerification({ ... }); } ``` El alumno NO puede acceder al contenido mientras el estado sea != "active". Sin brechas. ### 3. Data export — Art. 18 IV El titular puede solicitar una copia de TODOS los datos personales que procesas sobre él, en formato estructurado y legible. Studeia: `GET /api/user/data-export` retorna JSON con: ```json { "user": { id, email, name, role, ... }, "enrollments": [ ... ], "lessonCompletions": [ ... ], "quizAttempts": [ ... ], "chatSessions": [ ... ], // historial de chat con tutor IA "messages": [ ... ], // mensajes directos + foro "badges": [ ... ], "gamificationProfile": { ... }, "aiSupervisorIncidents": [ ... ], // si los hubiera "consentRecords": [ ... ] } ``` Rate limit: 1 export por 24h por usuario (anti-abuso). Redis key `data-export-cooldown:{userId}` TTL 86400. Disponible en hasta 15 días desde la solicitud (LGPD no define un plazo exacto, pero 15 días es el estándar de la ANPD). ### 4. Account deletion — Art. 18 VI El titular puede solicitar la eliminación de sus datos personales. Pero hay matices: - **PII (datos personales identificables)** — DEBE ser eliminado/anonimizado - **Datos académicos históricos** — puede ser RETENIDO por finalidad legítima (retención fiscal, prueba de formación del alumno, defensa en eventual litigio) Studeia hace: ```ts // DELETE /api/user/account await prisma.$transaction(async (tx) => { // 1. Anonimiza PII await tx.user.update({ where: { id: userId }, data: { email: `deleted-${userId}@anonymous.studeia.com`, name: "Usuario eliminado", phone: null, address: null, avatarUrl: null, cpf: null, // CPF también status: "deleted", deletedAt: new Date(), } }); // 2. Elimina datos conversacionales await tx.chatSession.deleteMany({ where: { userId } }); await tx.directMessage.deleteMany({ where: { senderId: userId } }); await tx.directMessage.updateMany({ where: { recipientId: userId }, data: { recipientId: ANONYMIZED } }); // 3. Anonimiza datos académicos (mantiene historial pero sin PII) // LessonCompletion, QuizAttempt, Grade ya referencian por User.id (mantenido) // Como User.email y User.name fueron anonimizados, los datos académicos quedan "anónimos" // 4. Anonimiza incidents de safety (mantiene severity + categoría para compliance) await tx.aiSupervisorIncident.updateMany({ where: { userId }, data: { messagesSnapshot: [], supervisorReasoning: null, appealText: null, } }); // 5. Cron purga datos académicos > 5 años automáticamente }); ``` 5 años = retención fiscal compatible con LGPD (Lei 10.406/2002 + CR Art. 7º XXIX). ### 5. DPA con terceros — divulgación obligatoria El tenant DEBE listar en su política de privacidad TODOS los procesadores de datos terceirizados. Studeia proporciona a cada tenant una lista: - **Anthropic** (Claude) — procesa prompts + respuestas. DPA GDPR/LGPD. Sede USA. Retención de datos: 30 días. - **OpenAI** (GPT fallback) — ídem. Sede USA. Retención de datos: 30 días. - **Voyage AI** (embeddings primary) — procesa texto para embedding. Sede USA. Retención de datos: 30 días. - **Stripe** (pagos USD) — PCI-DSS Level 1. Sede USA. Retención: 7 años (fiscal). - **Asaas** (pagos BR PIX/boleto) — sede BR. Retención: 7 años. - **Supabase** (base de datos + auth + storage) — sede USA. Región: us-east-1 (por defecto) o sa-east-1 opcional. - **Sentry** (observability) — Session replay con maskAllText:true + blockAllMedia:true (compatible con LGPD). - **PostHog** (analytics) — IP anonymization activada. Sin seguimiento de PII. - **Resend / SendGrid** (email) — sede USA. Retención: 30 días. El tenant copia esta lista en su política de privacidad. Cubre la divulgación. ### 6. Aislamiento real de tenant — RLS + filtro obligatorio LGPD Art. 6 V: los datos personales deben tratarse con seguridad apropiada. LMS multi-tenant = los datos de la Escuela A NUNCA pueden aparecer en una consulta de la Escuela B. Studeia lo implementa en 3 capas: 1. **Filtro obligatorio en queries Prisma**: toda llamada `prisma.X.findMany()` en el código de aplicación DEBE incluir `where: { tenantId }`. Regla crítica #6 del proyecto. 2. **RLS Supabase**: política automática en todas las tablas relevantes: ```sql CREATE POLICY tenant_isolation_courses ON courses FOR SELECT USING (tenant_id = current_setting('app.current_tenant_id')::uuid); ``` 3. **RAG tenantOnlyMode**: el retrieve nunca cita material de otra institución. ### 7. Audit log inmutable LGPD Art. 37 + ANPD Resolución CD/ANPD nº 4/2023: registro de operaciones de tratamiento. Studeia: modelo `AdminAuditLog` con: ```prisma model AdminAuditLog { id String @id @default(uuid()) actorId String // quién realizó la acción action AdminAuditAction targetType String // "user", "tenant", "course", etc targetId String? metadata Json? ip String? userAgent String? createdAt DateTime @default(now()) } ``` Acciones auditadas (15+ tipos): - impersonate.start / stop - tenant.create / plan.change / config.update / delete - user.role.change / tenant.link - ai_supervisor.* (transiciones de incidentes, actualizaciones de prompt, etc.) - subscription.admin_update - payment.manual.record Inmutable: append-only. No existe endpoint para eliminar (intencional). ### 8. Plan de respuesta a incidentes LGPD Art. 48: incidente de seguridad que pueda generar riesgo/daño relevante = comunicación a la ANPD en plazo razonable (interpretación: 24h). Studeia: runbook en `docs/runbooks/incident-response.md` con tabla de SEV: | SEV | Trigger | Acción primaria | SLA notif | |---|---|---|---| | SEV1 | Filtración PII > 100 usuarios | Reporte ANPD + clientes + status page | <2h | | SEV2 | Outage > 30min O PII < 100 usuarios | Clientes + status page | <4h | | SEV3 | Degradación de rendimiento | Status page | <12h | | SEV4 | Bug funcional sin PII | Backlog priorizado | NA | Además: postmortem público (sanitizado) en `docs/incidents/` para SEV1/SEV2. ## Adiciones específicas para Studeia ### Logging de prompts LLM Antes de enviar el prompt a Anthropic/OpenAI: ```ts // Redactar PII conocida function redactPIIBeforeLLM(prompt: string, user: User): string { return prompt .replace(new RegExp(user.email, 'gi'), '[EMAIL_REDACTED]') .replace(new RegExp(user.cpf ?? '', 'g'), '[CPF_REDACTED]') .replace(new RegExp(user.phone ?? '', 'g'), '[PHONE_REDACTED]'); } ``` Antes de registrar el prompt en `AiUsageLog`: ```ts function redactPIIBeforeLog(prompt: string): string { // Patrones genéricos return prompt .replace(/\b\d{3}\.\d{3}\.\d{3}-\d{2}\b/g, '[CPF]') .replace(/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g, '[EMAIL]') .replace(/\b\d{4,5}-?\d{4}\b/g, '[PHONE]'); } ``` `AiUsageLog.prompt` almacena la versión redactada. Los costos + analytics funcionan sin exponer PII. ### Tutor IA + historial de chat El alumno accede a "Mis conversaciones" y ve el historial. Los padres con permiso también (dependiendo de ProgressSharingConfig.viewChatHistory). Sin embargo: la ANPD puede requerir vía judicial. Respuesta: 1. Studeia mantiene el historial de chat por 1 año (retención por defecto, configurable por tenant) 2. Después de 1 año: el cron `/api/cron/chat-cleanup` anonimiza (mantiene el recuento de turnos para analytics, elimina el texto) 3. Ante requerimiento judicial: exporta JSON con el contenido solicitado 4. Registro del acceso en AdminAuditLog (action: `data.judicial_request`) ## Lo que NUNCA se debe hacer ❌ Recopilar más datos de los necesarios (principio de minimización Art. 6 III) ❌ Compartir datos de alumnos con fines de marketing (incluso "internamente") ❌ Entrenar un modelo de IA con datos de alumnos sin consentimiento explícito ❌ Vender datos de comportamiento de estudio a terceros ❌ Usar datos de menores para publicidad dirigida (prohibido por ley) ❌ Retener datos sin finalidad clara (Art. 16) ❌ Usar tutor IA sin informar que es IA (transparencia, Art. 6 VI) ## ¿Y el avatar IA en tiempo real (futuro)? Cuando Studeia agregue avatar con video/voz (roadmap HeyGen/D-ID): - Consentimiento adicional explícito (uso de "imagen virtual de tutor") - Divulgación de que es IA (pie de página "Tutor virtual generado por IA") - No usar voz real de una persona pública sin licencia (riesgo de deepfake) ## Ver también - [Caso de uso: Escuela primaria BNCC](/use-cases/primary-school-bncc) - [Multi-tenancy](/platform/multi-tenancy) - [Agente Supervisor (safety)](/features/ai-tutor/safety-supervisor) ## FAQ **Q: ¿Una plataforma EAD necesita DPO (Data Protection Officer)?** Sí, según LGPD Art. 41. Las empresas de EAD recopilan datos sensibles (educativos, biométricos cuando hay proctoring, comportamentales a través de analytics). El DPO puede ser interno (empleado) o externo (consultoría). Las pequeñas empresas pueden tercerizar. Estudios jurídicos especializados cobran R$2-8k/mes por DPO virtual. **Q: ¿Puedo usar Anthropic/OpenAI para procesar datos de alumnos brasileños?** Sí, pero con DPA (Data Processing Agreement) y divulgación. Anthropic + OpenAI tienen DPA estándar compatible con GDPR que cubre LGPD a través del Art. 3 (extraterritorialidad). Studeia mantiene DPAs activos con ambos. El tenant DEBE divulgar en su política de privacidad que los datos son procesados por terceros + listar cuáles + países. Importante: NUNCA enviar PII innecesario en los prompts (anonimizar email/cpf antes). **Q: ¿Por cuánto tiempo debo retener los datos de un alumno después de que se vaya?** LGPD no define un plazo único — depende de la finalidad. Studeia adopta: datos académicos (notas, certificados, finalizaciones) RETENIDOS por 5 años mínimo (retención fiscal + protección del alumno que puede necesitar comprobar su formación después). Datos personales PII (email, nombre, teléfono) ANONIMIZADOS en 30 días tras la solicitud de eliminación (Art. 18 VI). Historial de chat y datos contextuales ANONIMIZADOS de inmediato. **Q: ¿Un menor de 13 años puede usar una plataforma EAD sin consentimiento parental?** NO. LGPD Art. 14 exige el consentimiento específico de al menos UNO de los padres o tutor legal. Studeia lo implementa a través de GuardianLink verificado por SMS (anti-fraude). El alumno menor (User.isMinor=true) solo puede completar el registro DESPUÉS de la verificación parental. Además: política de retención restringida, datos nunca comercializados, opciones proactivas de minimización. --- # [es-ES (AI-translated)] Migrando de Moodle a un LMS moderno en 2026 — guía práctica URL: https://docs.studeia.com/blog/migrating-from-moodle-2026 Locale: es-ES Section: blog Updated: 2026-05-24 **Short answer:** Migración Moodle → LMS moderno en 2026: 3 fases — (1) Trial + pilotos 1-2 meses, (2) Migración gradual vía IMS Common Cartridge + SCIM/CSV en 3-4 meses, (3) Decommission o paralelo vía LTI 1.3 (Studeia funciona como external tool en Moodle 3.10+). Cronograma realista: 3-6 meses para 500-5000 alumnos. SCORM 2004, H5P y plugins personalizados NO migran automáticamente — recrear o mantener Moodle paralelo. Notas históricas vía CSV o Moodle read-only ## Por qué considerar migrar de Moodle Moodle es excelente para hace 20 años. Pero en 2026: - Setup + mantenimiento consume tiempo de TI que podría estar en pedagogía - UX legacy frustra a profesores y alumnos (especialmente en mobile) - Plugins de terceros para IA/gamificación/mobile se vuelven caros + frágiles (las actualizaciones los rompen) - Hosting + DevOps + admin dedicado = R$60-150k/año para una escuela media (olvidado en el cálculo del TCO) - IA tutor real (multi-agente, RAG) NO existe en Moodle de forma nativa Migrar no es cancelar Moodle — es evolucionar. ## Fase 0: evaluación honesta (1 semana) Antes de cambiar nada, responde: ### ¿REALMENTE necesitas migrar? Migrar tiene sentido si: - ✅ Costo total de Moodle (hosting + admin + plugins) > costo de Studeia en el plan equivalente - ✅ Los profesores se quejan constantemente de la UX de Moodle - ✅ Los alumnos prefieren usar WhatsApp para consultas en lugar de Moodle (señal fuerte) - ✅ Necesitas funcionalidades modernas (IA tutor, gamificación OB 3.0, mobile B2B white-label) que Moodle solo ofrece vía plugins débiles - ✅ Quieres reducir el time-to-launch de nuevos cursos (Moodle = semanas; Studeia = horas) NO tiene sentido si: - ❌ Eres una universidad pública con Moodle ya certificado por el organismo educativo oficial - ❌ Tienes paquetes SCORM 2004 críticos y no quieres recrearlos - ❌ Tienes un plugin de Moodle muy personalizado (actividades Workshop, sistema propio integrado) - ❌ El equipo de TI lleva 10 años capacitado en Moodle y no hay presupuesto para reentrenarlos ### Inventario de lo que tienes Haz una lista: 1. **Cursos activos** — ¿cuántos? ¿Cuántas clases/quizzes tiene cada uno? 2. **Alumnos activos** — ¿cuántos? ¿Cuántos pasivos históricos (solo consulta)? 3. **Materiales externos** — ¿H5P? ¿SCORM? ¿Videos alojados dónde? 4. **Plugins activos** — ¿cuáles? ¿Qué funcionalidades dependen de ellos? 5. **Integraciones** — ¿SSO institucional? ¿Sistema académico (Banner, SIGA)? ¿Email marketing? 6. **Personalizaciones** — ¿temas? ¿Código PHP modificado? 7. **Datos históricos** — ¿cuánto tiempo de calificaciones/actividades? Este inventario define la complejidad de la migración. Para 5000+ alumnos con 10+ plugins personalizados: 6-12 meses. Para una escuela pequeña con Moodle estándar: 1-2 meses. ## Fase 1: trial + pilotos (4-6 semanas) ### Semana 1-2: setup 1. **Plan Demo de Studeia** (gratis, 1 alumno) — experimentas como alumno 2. Haz el recorrido completo — chat tutor, gamificación, gradebook, mobile 3. Preséntalo a 2-3 profesores piloto (elige early adopters, no laggards) ### Semana 3-4: cursos piloto Elige 2-3 cursos representativos: - 1 curso simple (pocas clases, sin SCORM) - 1 curso con quizzes ricos - 1 curso con material multimedia (videos, PDFs) Exporta de Moodle vía IMS CC: ``` Moodle: Course administration > Backup > General backup > "Include question bank" + "Include groups" + "Include H5P" > Save IMSCC file ``` Import en Studeia: ``` POST /api/institution/courses/import Content-Type: multipart/form-data Body: file = course-export.imscc ``` Validar: - ✅ Módulos + clases migrados correctamente - ✅ Quizzes QTI 1.2 funcionan - ✅ Recursos (PDFs, enlaces) accesibles - ❌ Paquetes de contenido H5P — NO migran. Decidir: recrear como subtype interactivo de Studeia O mantener en Moodle paralelo vía LTI ### Semana 4-6: alumnos piloto Invita a 10-30 alumnos piloto voluntarios (incluyendo padres, si es K-12): 1. SCIM provisioning O CSV import 2. Capacitación de 30 min vía video grabado 3. Encuesta de feedback después de 1 semana Itera en base al feedback antes de la Fase 2. ## Fase 2: migración gradual (2-4 meses) ### Mes 1: cursos clave Migra los cursos de mayor valor / más usados primero. NO migres todo de una vez. Patrón recomendado: - **Cursos nuevos** (que comienzan el próximo semestre): crear DIRECTAMENTE en Studeia, no migrar - **Cursos activos populares** (>50 alumnos): migrar con cuidado, validación por parte del profesor - **Cursos antiguos / archivo**: mantener en Moodle como read-only, o solo migrar datos académicos históricos Cronograma realista: 5-10 cursos por mes en migración con calidad. ### Mes 2-3: alumnos + datos académicos **Provisioning de alumnos**: Opción A — SCIM (si tienes AD/Azure AD/Okta): ``` 1. Configura SCIM 2.0 en /institution/settings/sso 2. AD sync envía todos los alumnos 3. Group → Course mapping auto-matricula en cursos ``` Opción B — CSV bulk import: ``` 1. Exporta alumnos de Moodle (CSV) 2. Formato: name, email, role, classGroupIds, sendInvite 3. POST /api/institution/users en bulk ``` **Datos académicos históricos**: Tres estrategias: 1. **CSV import como GradeItem manual** — para cada curso migrado, importa el boletín histórico. El alumno ve calificaciones antiguas + Studeia en el mismo gradebook. ```csv studentEmail,courseSlug,assignment,gradeMax,grade,date alumno@email.com,calculo-1,Prueba-1-2024,10,7.5,2024-06-15 alumno@email.com,calculo-1,Prueba-2-2024,10,8.5,2024-08-10 ``` 2. **Snapshot PDF adjunto al perfil** — para miles de alumnos, genera PDFs en batch: ```bash # Script de Moodle para generar PDFs for student in students: pdf = generate_boletim_pdf(student.id) upload_to_studeia(student.email, pdf) ``` 3. **Moodle read-only archivo** — mantiene Moodle funcionando solo para consulta histórica (sin costo de mantenimiento activo). El alumno accede vía enlace /old-grades en Studeia. ### Mes 3-4: integraciones Reconectar: - **SSO** institucional — si ya era Shibboleth/Azure AD/Okta en Moodle, Studeia conecta con el mismo IdP. Probablemente 1 día de trabajo. - **Sistema académico** (Banner, SIGA, e-Class) — vía API pública de Studeia (64+ endpoints). Desarrollo personalizado si no hay conector disponible. - **Email marketing** (Mailchimp, RD Station) — automatización por webhook en Studeia que se activa cuando el alumno se registra. - **Clases en vivo** — si usabas Big Blue Button en Moodle, Studeia conecta al mismo servidor BBB. ## Fase 3: decommission o paralelo (1-2 meses) ### Opción A: decommission de Moodle - Mes 5: 100% de alumnos nuevos van a Studeia, alumnos antiguos terminan su ciclo en Moodle - Mes 6: últimos alumnos de Moodle migran O se gradúan - Mes 7: backup completo de Moodle, snapshot final - Mes 8: shutdown de Moodle, se libera el hosting ### Opción B: Moodle en paralelo vía LTI - Studeia para cursos nuevos / asignaturas modernizadas - Moodle para cursos legacy / asignaturas tradicionales - LTI 1.3 conecta: el alumno inicia sesión una vez y accede a ambos - Las calificaciones de Studeia vuelven al Moodle Gradebook vía AGS Ventaja: cero riesgo de perder algo. Desventaja: TCO mayor (Moodle + Studeia en paralelo). ### Opción C: híbrido permanente Las universidades grandes raramente hacen decommission de Moodle al 100%. Modelo común: - Moodle para "core LMS" (matrícula, gradebook oficial, certificados académicos) - Studeia para "active learning" (cursos con IA tutor, gamificación, mobile) - Sincronización vía LTI + AGS ## Lo que NO migra automáticamente Lista honesta: ❌ **Paquetes SCORM 2004** — Studeia no lo soporta. Opciones: - Recrear el contenido como clases + quizzes nativos (recomendado si el SCORM tiene >2 años) - Mantener en Moodle paralelo, acceder vía LTI tool ❌ **Paquetes de contenido H5P** — Studeia tiene 6 subtipos interactivos nativos (interactive_video, drag_drop, fill_blanks, flashcard_set, timeline, branching_scenario). Recrear manualmente. Buena noticia: el editor visual de Studeia es mejor que H5P puro. ❌ **Actividades Workshop (peer review)** — Studeia no lo tiene de forma nativa. En el roadmap. Mantener en Moodle por ahora. ❌ **Plugins personalizados de Moodle** — sin equivalente. Evaluar caso a caso. ❌ **Calendarios de Moodle complejos** — Studeia tiene Calendar pero con un modelo diferente. Recrear manualmente los eventos clave. ❌ **Plantillas XML personalizadas** — Moodle permite personalización profunda vía XML. Studeia tiene 9 temas + CSS personalizado sanitizado (más limitado). ❌ **Entradas de glosario en masa** — exportar CSV de Moodle + importar como question bank en Studeia (workaround). ## Riesgos y mitigaciones | Riesgo | Probabilidad | Mitigación | |---|---|---| | Los alumnos resisten el cambio | Alta | Comunicación proactiva + capacitación + showcase de funcionalidades modernas (¡IA tutor!) | | Los profesores resisten | Alta | Pilotos con early adopters primero + su buy-in antes de la masa | | Perder datos históricos | Media | Mantener Moodle read-only durante 1 año tras la migración O backup completo en PDF | | Quizzes complejos se rompen | Media | Validación manual por parte del profesor de cada quiz migrado en los pilotos | | SSO falla el día D | Baja | Migración en ventana de mantenimiento + plan B (login email/contraseña temporal) | | Costo total mayor de lo esperado | Baja | Calcular TCO 3 años con transparencia (incluir hosting + admin + capacitación de Moodle en el comparativo) | ## TCO realista — escuela 500 alumnos / 3 años ### Continuar con Moodle gestionado | Ítem | Costo 3 años | |---|---| | Hosting BBB + Moodle (cloud managed) | R$36k | | Admin Moodle parcial (R$3k/mes consultoría) | R$108k | | Plugins comerciales (IA, gamificación, mobile, etc.) | R$30k | | Actualizaciones + personalizaciones | R$50k | | **TOTAL** | **R$224k** | ### Migrar a Studeia Enterprise | Ítem | Costo 3 años | |---|---| | Studeia Enterprise (R$3-5k/mes negociable) | R$108k-180k | | Migración inicial (consultoría opcional) | R$10-30k | | Capacitación del equipo | R$5-15k | | Costo IA (R$3-5/alumno/mes x 500 x 36) | R$54k-90k | | **TOTAL** | **R$177k-315k** | Para escuelas de tamaño medio: TCO similar O 20% menor. Pero ganas funcionalidades modernas que lo justifican. Para gran escala (>5000 alumnos): Studeia Enterprise típicamente 30-60% más barato que Moodle gestionado con plugins. ## Cuándo NO migrar (honestidad) Si estás en alguna de estas situaciones, QUÉDATE en Moodle: 1. **Universidad pública con Moodle validado por el organismo oficial de acreditación** — la burocracia para cambiar > el beneficio 2. **Escuela con SCORM crítico** — recrear el contenido son 6 meses de trabajo de pedagogos 3. **Cumplimiento normativo específico** que exige certificación de Moodle — verificar antes de mover 4. **El equipo de TI ya es experto en Moodle desde hace 5+ años** — reentrenar tiene un costo 5. **Presupuesto limitado** (, misconceptions: Misconception[], // activas + resolving episodicMemory: Episode[], // qué funcionó antes quizContext: { totalAttempts, avgScore, passRate, weakAreas: string[] // conceptos con mastery < 0.4 }, recentHistory: Message[] // sliding window 10 msgs } ``` ConceptMastery usa **distribución Beta bayesiana** — cada concepto tiene alpha (successes) + beta (failures). Probabilidad = alpha / (alpha + beta). Intervalo de confianza via percentiles 5% y 95%. EpisodicMemory registra insights pedagógicos: "la analogía de la pizza funcionó para explicar fracciones", "la metáfora del caño de agua falló para electricidad". El sistema aprende qué funciona con cada alumno. Cero costo LLM. Todo son queries Prisma + cálculo determinístico. ## 2. RetrievalAgent — RAG tenant-scoped En lugar de que el LLM intente recordar hechos sobre matemáticas, biología o historia, dejamos que cite el material de la propia institución. ```ts const chunks = await retrieve({ query: reformulatedQuery, // 1. reformula la query con contexto filters: { tenantId, courseId }, // 2. aislamiento absoluto k: 10, tenantOnlyMode: true, // 3. nunca cita contenido de otra institución boostByWeakAreas: snapshot.quizContext.weakAreas, // 4. prioriza chunks de áreas débiles }); ``` **El RAG per-tenant es crítico**. El preuniversitario XYZ tiene material propio sobre el examen de ingreso. La Universidad ABC tiene material propio sobre Cálculo. El tutor cita el material CORRECTO de la institución, no un agregado genérico. Cada chunk tiene metadata: `{ source: "course_lesson", courseId, lessonId, lessonTitle, moduleTitle }`. Cuando el tutor responde, cita: "Como se explicó en la clase 'Geometría Analítica' del módulo 3..." Voyage AI genera los embeddings (1024 dimensiones, fallback OpenAI). pgvector almacena. `tenantOnlyMode: true` garantiza que `WHERE tenantId = X` está siempre en la query. Regla crítica del proyecto: cero leakage cross-tenant. ## 3. PedagogicalAgent — adaptación de estrategia Determinismo puro. Evalúa el mastery del alumno en el dominio específico y selecciona una de 5 estrategias: | Mastery | Estrategia | Comportamiento | |---|---|---| | < 0.3 | direct_instruction | Explicación clara, ejemplos concretos, paso a paso | | 0.3-0.5 | scaffolding | Pistas progresivas, preguntas guiadas simples | | 0.5-0.7 | socratic | Preguntas que llevan al descubrimiento | | 0.7-0.9 | guided_practice | Ejercicios con feedback, aplicación práctica | | > 0.9 | challenge | Problemas complejos, conexiones entre conceptos | Ajustes adicionales por divergencia entre quiz y chat: - Mastery alta en el chat + quiz bajo → "comprensión superficial" → nudge DOWN - Mastery baja + quiz alto → "alumno callado" → nudge UP - Quiz pass rate < 40% → cap en scaffolding (todavía no avanza a socratic) También ajusta por edad (User.isMinor), estilo de aprendizaje, dominio (matemáticas vs literatura tienen perfiles distintos). Cero costo LLM. Output: estrategia seleccionada + instrucciones específicas para agregar al system prompt. ## 4. Orchestrator — buildEnrichedPrompt Construye el system prompt enriquecido: ``` Eres un tutor IA para el curso "Cálculo I" de la institución "Preuniversitario XYZ". DOMINIO DEL ALUMNO: - Límites: mastery 0.78 (alto) - Derivadas: mastery 0.42 (medio) - Integrales: mastery 0.15 (bajo) MISCONCEPTIONS ACTIVAS: - "El alumno confunde dominio con imagen en funciones" (3 ocurrencias, estado: resolving) - "El alumno aplica la derivada de la suma al producto" (5 ocurrencias, estado: active) RENDIMIENTO EN QUIZ: - 14 intentos en total, avgScore 67%, passRate 71% - Áreas débiles: integrales (prom. 45%), regla de la cadena (prom. 52%) ESTRATEGIA PEDAGÓGICA: guided_practice - El alumno tiene dominio medio en derivadas. Presenta ejercicios graduales. - Refuerza la conexión entre límites y derivadas (ya domina los límites). - Aborda proactivamente el misconception sobre la derivada de un producto. CONTEXTO RAG (del material del curso): [Clase 3.2 "Regla del Producto"] (Módulo: Cálculo Diferencial) "La derivada de f(x).g(x) NO es f'(x).g'(x). La regla correcta es..." [Clase 3.5 "Ejercicios Resueltos"] (Módulo: Cálculo Diferencial) "Ejemplo: derivar (x^2 + 1).(x - 3) usando la regla del producto..." QUIZ RECIENTE (próxima conversación): El alumno acaba de responder un quiz inline con 2 preguntas, acertó 1. INSTRUCCIONES: - Responde en español - Cita el material del curso cuando sea relevante (usa [Clase X.Y]) - Reconoce lo que el alumno acertó antes de señalar el error - Para esta edad (User.ageRange = "young_adult"): lenguaje casual sin ser demasiado informal ``` ## 5. LLM principal — streaming con fallback ```ts const stream = await router.stream({ taskType: "chat_tutor", messages: enrichedMessages, options: { tenantId, userId, sessionId } }); for await (const chunk of stream.textStream) { yield chunk; // SSE al cliente } ``` El LLM Router hace: 1. Resuelve el proveedor via `TenantTaskModelConfig` (el admin eligió Claude Sonnet, GPT-4o, etc.) 2. Resuelve la API key via cascada: TenantApiKey → ProviderApiKey global → process.env 3. Circuit breaker check (estado en Redis). Si el proveedor está en OPEN: salta directo al fallback 4. Middleware de metering: rate limit + credit check + cost calculator 5. Stream con Vercel AI SDK (soporta tools, multimodal, structured output) 6. En caso de error: fallback automático al siguiente proveedor en la cadena Cadena de fallback por tier: ``` Tier Sonnet (medio): Claude Sonnet → GPT-4o → Grok-3-fast → Gemini Pro Tier Haiku (rápido): Claude Haiku → GPT-4o-mini → Grok-3-mini → Gemini Flash Tier Opus (complejo): Claude Opus → GPT-4.5 → Grok-3 → Gemini 2.5 Pro ``` El tenant NUNCA se queda sin tutor. Si Anthropic cae → OpenAI toma el relevo. Si OpenAI también cae → xAI. Etc. ## 6. EvaluationAgent — feedback loop En background después de la respuesta del tutor: ```ts after(async () => { const evaluation = await router.generateDirect({ taskType: "chat_evaluation", messages: [ { role: "user", content: "El alumno dijo: '...'. El tutor respondió: '...'. Clasifica." } ] }); // evaluation: { // understanding: "partial", // detectedMisconceptions: [{ description, concepts, severity }], // suggestedNextStep: "..." // } // Actualiza ConceptMastery via Bayesian update await conceptMasteryEngine.updateFromTurn({ userId, courseId, evaluation }); // Persiste/actualiza misconceptions for (const misc of evaluation.detectedMisconceptions) { await misconceptionResolutionService.upsert({ userId, source: "chat", ...misc }); } }); ``` Costo: ~$0.001 por turno (Haiku). NO bloquea el request del alumno. Los misconceptions tienen un ciclo de vida de 3 estados: `active → resolving → resolved`. La máquina de estados determina las transiciones basándose en evidencia (actualización de mastery, aprobación de quiz, abordaje explícito por parte del tutor). ## 7. ContentAgent — pre-generación proactiva ```ts after(async () => { // El alumno demuestra dominio débil en el concepto X // Pre-genera un ejercicio de seguimiento mientras el alumno lee la respuesta actual const exercise = await router.generateDirect({ taskType: "content_generation", messages: [...] }); // Cache Redis 30min await redis.set(`next-exercise:${userId}:${conceptId}`, exercise, 1800); }); ``` Cuando el alumno termina de leer la respuesta y dice "dame un ejercicio", Studeia lo sirve INSTANTÁNEAMENTE desde el cache. Sin latencia perceptible. Costo: ~$0.001 por turno (Haiku). ## 8. SupervisorAgent — moderación Corre en background después de cada turno. Clasifica en 5 niveles de severidad x 8 categorías. Categorías: lenguaje inapropiado, violencia, ilegal, sexual, off_topic, harassment, **self_harm**, jailbreak_attempt. Severidad: low → medium → high → critical → **safety**. 3 strikes (LOW/MEDIUM en 7 días) = cuarentena 48h. CRITICAL = cuarentena 7 días. **Self-harm (severity=safety) NUNCA penaliza al alumno.** En cambio: - El tutor se interrumpe con un mensaje de acogida - Recursos de crisis (líneas de ayuda locales según el país del tenant) - Cooldown Redis 24h (no cuarentena) - Email URGENTE inmediato al admin institucional Filosofía: self-harm es una crisis, no una infracción. [Detalles en Safety Supervisor](/features/ai-tutor/safety-supervisor). Costo: ~$0.001 por turno (Haiku). ## Números en producción Después de 6 meses en producción: - ~30 ms de latencia adicional de los agentes pre-LLM - ~$0.005-$0.05 costo promedio por turno - 91% tasa de retención de alumnos después de 7 días (vs ~40% benchmark de tutor IA sin estado) - 3.2x tasa de detección de misconceptions vs baseline de llamada única - 0 incidentes graves de safety (categorías high/critical) ## Trade-offs honestos Cosas que NO funcionaron: - **Intentamos un "MasterAgent" coordinador via LLM** para elegir el siguiente agente dinámicamente. El costo se duplicó, la latencia subió 800ms, la calidad NO mejoró. Volvimos al determinismo en el Orchestrator. - **Intentamos hacer FineTune de Llama con material de cursos**. Caro para cada tenant. RAG funciona mejor para knowledge dinámico (la institución actualiza el material cada semana — el fine-tune quedaría stale). - **Intentamos "consensus" entre 3 LLMs** (Claude + GPT + Gemini) y tomar la respuesta con mayoría. Costo 3x sin ganancia significativa de calidad. Lo eliminamos — la cadena de fallback es suficiente. ## ¿Código abierto? Estamos evaluando hacer open-source de los componentes determinísticos (StudentModelService, RetrievalAgent, PedagogicalAgent) como paquete npm. Los agentes LLM-driven (Evaluation, Content, Supervisor) tienen prompts que son IP de Studeia y permanecerán cerrados. Si te interesa: abre un issue en [github.com/donattocosta-lang/studeia/issues](https://github.com/donattocosta-lang/studeia/issues). ## Ver también - [Tutor IA: visión ejecutiva](/platform/ai-tutor) - [Tutor IA: detalles técnicos](/features/ai-tutor/overview) - [RAG Ingestion](/features/ai-tutor/rag-ingestion) - [Agente Supervisor](/features/ai-tutor/safety-supervisor) ## FAQ **Q: ¿Por qué multi-agente y no una sola llamada LLM?** Una sola llamada LLM NO tiene memoria persistente del alumno, NO sabe qué materiales del curso citar (necesita RAG), NO modera salidas inadecuadas y NO actualiza el modelo bayesiano del dominio del alumno. El enfoque multi-agente resuelve cada problema con un agente especializado: StudentModel mantiene el estado, RetrievalAgent busca RAG tenant-scoped, PedagogicalAgent elige la estrategia, EvaluationAgent clasifica misconceptions, ContentAgent pre-genera el seguimiento, SupervisorAgent modera. Cada uno puede optimizarse de forma independiente. **Q: ¿Cuánto cuesta por turno completo del pipeline?** Típicamente $0.005-$0.05 por turno (depende del tamaño de la respuesta). Desglose: LLM principal Sonnet $0.005-$0.04 + EvaluationAgent Haiku $0.001 + ContentAgent Haiku $0.001 + SupervisorAgent Haiku $0.001. 3 de los 6 agentes son TypeScript puro (StudentModel + RetrievalAgent + PedagogicalAgent = cero costo LLM). **Q: ¿Cómo se evita que el costo explote con 1000+ alumnos?** Cuatro mecanismos: (1) Agentes en background via Next.js `after()` — sin bloquear el request. (2) Haiku para tareas en background (~30x más barato que Sonnet). (3) Middleware de metering con rate limit por usuario. (4) El tenant puede traer su propia API key (TenantApiKey) — Studeia no cobra margen de IA, los costos van directamente a la cuenta del tenant en Anthropic/OpenAI. --- # [es-ES (AI-translated)] RAG per-tenant a escala: arquitectura para LMS B2B URL: https://docs.studeia.com/blog/rag-per-tenant-architecture Locale: es-ES Section: blog Updated: 2026-05-24 **Short answer:** RAG per-tenant en Studeia aísla datos mediante filter tenantId+courseId mandatory en todas las queries pgvector, con tenantOnlyMode=true que ELIMINA el fallback a contenido global. Voyage AI genera embeddings 1024-dim (primary, fallback OpenAI text-embedding-3-large). Chunking semántico 800 tokens con 200 de overlap. autoSyncRag dispara re-ingestión incremental en el after() de cada edición de clase. En producción: 500K+ chunks, latencia p95 retrieval 47ms, cero leakage cross-tenant en 6 meses. ## Por qué el multi-tenancy real en RAG es difícil La mayoría de los LMS con "IA tutor" usan enfoques problemáticos: 1. **RAG global compartido** — todos los tenants ven la misma base. Funcional pero viola el compliance y la calidad pedagógica. 2. **"Per-tenant" vía metadata filter sin enforcement** — los chunks tienen campo `tenant_id` pero el filter es opcional en la query. Un bug en 1 endpoint = filtración. 3. **Vector DB separado por tenant** — overhead operacional brutal. Mil tenants = mil vector DBs. Studeia lo resolvió con 3 invariantes arquitecturales. ## Invariante 1: filter tenantId+courseId MANDATORY Toda query pgvector en Studeia DEBE pasar por `packages/core/src/ai/rag.ts`: ```ts export async function retrieve(params: RetrieveParams) { if (!params.tenantId && !params.allowGlobal) { throw new Error('tenantId required unless allowGlobal=true'); } const filter = params.tenantId ? Prisma.sql`WHERE ce.tenant_id = ${params.tenantId}${params.courseId ? Prisma.sql` AND ce.course_id = ${params.courseId}` : Prisma.empty}` : Prisma.empty; return prisma.$queryRaw` SELECT ce.*, 1 - (ce.embedding <=> ${vectorStr}::vector) as similarity FROM content_embeddings ce ${filter} AND 1 - (ce.embedding <=> ${vectorStr}::vector) > 0.5 ORDER BY similarity DESC LIMIT 10 `; } ``` `allowGlobal` solo es `true` en rutas administrativas explícitas (admin global probando cobertura RAG). En TODO lo demás, throw. Regla crítica del proyecto (regla 6 del CLAUDE.md): "Tenant isolation: todas las queries B2B filtran por tenantId". Auditoría automatizada vía tests Vitest verifica que toda llamada a `retrieve()` en código de aplicación pase `tenantId`. ## Invariante 2: tenantOnlyMode en el RetrievalAgent Incluso con filter correcto, hay casos donde se quiere fallback (ej: B2C sin tenant). Para garantizar que B2B NUNCA filtre: ```ts const chunks = await retrieve({ query, filters: { tenantId, courseId }, tenantOnlyMode: true, // <-- CRÍTICO }); ``` `tenantOnlyMode: true` significa: si no hay chunks en el tenant, retorna **vacío**, no busca en global. El tutor responde "no tengo material sobre esto en tu curso" en vez de inventar. ## Invariante 3: RLS PostgreSQL como safety net Las policies RLS de Supabase añaden una capa de defensa: ```sql CREATE POLICY tenant_isolation_content_embeddings ON content_embeddings FOR SELECT USING (tenant_id = current_setting('app.current_tenant_id')::uuid); ``` Si un bug en el código de aplicación olvida el filter, RLS bloquea. **Defensa en capas**. En producción tiene un costo: cada query Postgres evalúa la policy. Pero la latencia adicional es ~2-5ms, aceptable. ## Pipeline de ingestión ``` POST /api/institution/courses/[id]/rag-ingest { mode: "full" | "incremental" } ↓ 1. Lista clases publicadas del curso 2. Para cada clase, extrae texto por tipo: - rich_text → strip HTML vía DOMPurify - slides → join text elements + speaker notes - quiz → join question + explanation por pregunta - pdf → document-extractor (PyPDF + Adobe extract fallback si los nativos fallan) - video → LiveClassTranscription.transcriptionText (Whisper → Google STT fallback) - assignment → instructions 3. Chunking: 800 tokens, 200 overlap, preserva estructura semántica (no rompe párrafo a la mitad, no rompe código en medio de una función) 4. Embeddings vía Voyage AI (1024 dims, fallback OpenAI text-embedding-3-large) 5. Crea ContentBlock + ContentEmbedding con metadata: { source: "course_lesson", courseId, lessonId, lessonTitle, moduleTitle, ingestionId } 6. Estado final en CourseRagIngestion (pending → running → completed | failed) ``` ## Chunking semántico — por qué importa El chunking naive (every N chars) rompe el contexto. Ej: una clase tiene un fragmento de código Python que se divide en chunks distintos — el embedding individual de cada mitad no captura el significado. Studeia usa **recursive splitter** con jerarquía de separadores: 1. Intenta romper en párrafo (\n\n) 2. Si no, rompe en frase (. ) 3. Si no, rompe en palabra 4. Si no (raro), trunca Y preserva bloques de código COMPLETOS (entre triple backticks): ```ts function recursiveChunk(text, maxTokens = 800, overlap = 200) { // Identifica bloques protegidos (code blocks, tables markdown) const protectedRanges = findProtectedRanges(text); // Rompe respetando jerarquía + protección return splitWithHierarchy(text, { separators: ['\n\n', '. ', ' ', ''], maxTokens, overlap, protectedRanges, }); } ``` Resultado: chunks de ~600-800 tokens con overlap 200, semánticamente coherentes. ## Voyage AI vs OpenAI — por qué el primary es diferente Empezamos con OpenAI text-embedding-3-large. Migramos a Voyage AI como primary en H1 2026. Razones: | Aspecto | OpenAI text-emb-3-large | Voyage AI voyage-3 | |---|---|---| | Costo / 1K tokens | $0.00013 | $0.00005 | | Dimensiones nativas | 3072 (reducible vía dimensions param) | 1024 nativo | | MTEB benchmark (English) | 64.6 | 67.2 | | MIRACL benchmark (multilingual) | medio | mejor | | Rate limits free tier | 3K RPM | 3M tokens/min | Voyage es ~2.6x más barato + mejor benchmark en retrieval educacional + multilingüe robusto (importante para es-ES + fr-FR de Studeia). Fallback automático a OpenAI cuando Voyage tiene un outage: ```ts async function embedText(texts: string[]) { try { return await voyageEmbed(texts); } catch (err) { console.warn('[embed] Voyage falló, fallback OpenAI', err); return await openaiEmbed(texts, { dimensions: 1024 }); // reducimos a 1024 para compatibilidad } } ``` Importante: ambos producen vectores de 1024 dims, por lo que pgvector los acepta sin cambio de schema. ## pgvector tuning en producción El pgvector por defecto es óptimo para <100K vectores. Por encima de eso, sin tuning, la latencia se degrada. Configuración de Studeia (probada con 500K+ chunks): ```sql -- IVFFlat index CREATE INDEX content_embeddings_embedding_idx ON content_embeddings USING ivfflat (embedding vector_cosine_ops) WITH (lists = 700); -- sqrt(500000) ≈ 700 -- La query usa probes SET ivfflat.probes = 15; -- más probes = mejor recall, más latencia ``` Trade-off: - `lists` muy bajo: queries lentas (full scan) - `lists` muy alto: índice grande, inserts lentos - `probes` bajo: latencia OK, recall malo (chunks relevantes perdidos) - `probes` alto: recall alto, latencia se degrada Para Studeia en producción: lists=700, probes=15. Latencia p95 = 47ms para retrieve top-10 en 500K chunks. Para escala 5M+: evaluar HNSW (postgres 16+) o particionamiento por tenantId. ## autoSyncRag — incremental rebuild El curso es un organismo vivo. El profesor edita la clase 17. Añade un video. Actualiza el quiz. El sistema necesita re-embeder solo el delta, no el curso entero. `Course.autoSyncRag: Boolean @default(false)` Cuando es `true`, toda edición de clase vía API: ```ts // PATCH /api/institution/courses/[id]/modules/[mid]/lessons/[lid] await prisma.courseLesson.update({ data: ... }); // Background — no bloquea el request after(async () => { if (course.autoSyncRag) { await courseRagIngestionService.reingest({ courseId, mode: "incremental", onlyLessonId: lessonId, }); } }); ``` Re-ingestión incremental: 1. Elimina chunks antiguos de la clase (`WHERE lesson_id = X`) 2. Re-extrae texto de la clase actualizada 3. Re-chunking 4. Re-embed 5. Inserta nuevos chunks Tiempo: ~3-8s por clase promedio (depende del tamaño). El alumno NUNCA experimenta RAG desactualizado. ## Números de producción | Métrica | Valor | |---|---| | Total chunks en producción | ~500K | | Tenants activos | 50+ | | Cursos con RAG ingerido | 280+ | | Mayor tenant (chunks) | 47K | | Latencia p50 retrieve | 28ms | | Latencia p95 retrieve | 47ms | | Latencia p99 retrieve | 124ms | | Costo embedding mes anterior | $34 (proporcional al volumen de edición) | | Incidentes cross-tenant leakage | 0 (6 meses) | ## Trade-offs honestos **Lo que NO funcionó:** 1. **Intentamos hierarchical retrieval** (buscar en resumen primero, luego chunks completos). Implementación compleja, ganancia marginal de calidad en queries simples. Lo eliminamos. 2. **Intentamos query reformulation vía LLM** (pasar la query del alumno por un LLM antes de embeder para normalizarla). El costo se duplicó (1 LLM call más), latencia +400ms, calidad marginalmente mejor solo en queries muy vagas. Solo hacemos reformulation en RetrievalAgent cuando la query es ambigua (heurística simple). 3. **Intentamos re-ranking vía Cohere rerank-3**. Caro ($0.001 por re-rank), latencia +200ms. Para el 90% de las queries, pgvector cosine + boost por weak areas es suficiente. Mantenemos rerank disponible pero desactivado por defecto. ## Lo que faltaba hace 2 años pgvector llegó de forma productiva en 2022. Voyage AI lanzó voyage-3 en H2 2024. Antes de eso, las alternativas (Pinecone, Weaviate, Qdrant) eran de pago + operacionalmente complejas para multi-tenant. Hoy, con pgvector maduro + embeddings baratos + RLS Supabase, el RAG per-tenant production-grade se volvió accesible. Lo recomendamos para cualquier LMS B2B serio. ## Ver también - [RAG Ingestion details](/features/ai-tutor/rag-ingestion) - [Multi-agent AI tutor pipeline](/blog/multi-agent-ai-tutor-pipeline) - [Multi-tenancy](/platform/multi-tenancy) ## FAQ **Q: ¿Por qué RAG per-tenant en vez de RAG compartido?** Tres razones innegociables: (1) Compliance LGPD/GDPR — el material de una institución NO puede aparecer en respuestas para alumnos de otra institución. (2) Calidad pedagógica — las instituciones tienen material propio, enfoque propio, ejemplos contextualizados; mezclar contenido de Stanford con una academia de barrio contamina la respuesta. (3) Confidencialidad comercial — el material de una academia premium es IP de esa academia, no quiere exponerlo a sus competidores. **Q: ¿Cuál es el costo de los embeddings a escala?** Voyage AI cobra $0.00005 por 1K tokens (versión primary de Studeia). Curso promedio: 30 clases, ~50K palabras = ~70K tokens. Embedding inicial: ~$0.0035 por curso. Re-ingestión incremental: ~$0.0001 por clase editada. Para tenant con 100 cursos: ~$0.35 setup inicial + ~$5-10/mes en deltas. Costo despreciable comparado con el valor aportado. **Q: ¿Cuántos vectores aguanta pgvector antes de degradarse?** pgvector con IVFFlat aguanta millones de vectores con latencia <100ms si el índice está bien ajustado (lists = sqrt(N), probes = 10-20). HNSW (postgres 16+) es mejor para escala: 10M+ vectores con <50ms. Studeia probado con ~500K chunks en producción, latencia p95 de retrieval = 47ms. Por encima de 5M considerar partitioning por tenantId o pgvector-rs. **Q: ¿Cómo actualizar embeddings cuando una clase cambia?** Course.autoSyncRag=true activa la re-ingestión incremental automática vía Next.js after(). Toda edición vía API dispara: eliminar chunks antiguos de la clase + chunking del nuevo contenido + embed + insert. Sin downtime, sin rebuild completo. Para ediciones masivas: ejecutar /api/institution/courses/[id]/rag-ingest con mode='full' reconstruye desde cero. --- # [es-ES (AI-translated)] Studeia vs Blackboard Learn: comparativa honesta 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-blackboard Locale: es-ES Section: comparisons Updated: 2026-05-24 **Short answer:** Blackboard Learn (Anthology) es LMS legacy dominante en universidades públicas con SCORM 2004, Blackboard Collaborate Ultra y sellos académicos — USD $8-25/alumno/año. Studeia es SaaS B2B brasileño con IA tutor multi-provider, gamificación nativa y LGPD nativo, costos en R$ (60-85% más barato en 3 años). Universidad pública federal ya en Blackboard: integre vía LTI. Universidad privada nueva o en modernización: Studeia gana en UX, costo y tiempo-para-valor ## Comparativa lado a lado | Aspecto | Studeia | Blackboard Learn | |---|---|---| | **Origen** | Brasil 2025 | EE. UU. 1997 (Anthology desde 2022) | | **Modelo** | SaaS gestionado moderno | SaaS (Cloud) o self-hosted | | **Precio** | R$0-1.500/mes (planes) o Enterprise | USD $8-25/alumno/año enterprise | | **UX** | Moderno, glass morphism, 9 temas | Legacy (Original) o Ultra (más moderno pero inconsistente) | | **Soporte** | PT/EN/ES/FR | EN (PT-BR vía partners) | | **Tutor IA** | Multi-agente nativo (Claude/GPT/Grok/Gemini) | Blackboard AI Design Assistant (preview) | | **Gradebook** | Categories + weights + rubrics + integrity | Robusto (Grade Center maduro) | | **SCORM 2004** | NO | Sí (completo) | | **Clases en vivo** | BBB/Zoom/Teams/Meet adapter | Blackboard Collaborate Ultra | | **Gamificación** | Built-in (XP, OB 3.0, leaderboards, contests) | Achievements + plugins | | **LGPD** | Nativo | Vía DPA | | **Mobile** | Expo nativo + white-label | Blackboard App + Instructor App | | **LTI 1.3** | Tool provider | Consumer + provider | | **SSO Enterprise** | SAML+OIDC+SCIM | SAML+LDAP+CAS | | **Accesibilidad** | WCAG 2.1 AA nativo | Blackboard Ally (auditoría automática) | | **Risk Assessment** | RiskAssessmentService 6 factores | Blackboard Predict (IA predictiva) | ## Cuándo elegir Blackboard ✅ Universidad pública federal/estatal con Blackboard en producción desde hace años ✅ Necesidad obligatoria de SCORM 2004 (cursos antiguos) ✅ Cumplimiento con MEC + certificaciones académicas específicas ✅ Equipo de TI ya capacitado en Blackboard ✅ Integración con sistema académico legacy (Banner, Workday Student) ✅ Foco en madurez institucional sobre innovación ✅ Blackboard Ally crítico para WCAG en contenido legacy ## Cuándo elegir Studeia ✅ Universidad privada nueva o en modernización radical ✅ Facultad de educación a distancia con foco en B2C/profesional ✅ Prepa/T&D corporativo / escuela técnica ✅ Quiere reducción de costos dramática (60-85%) ✅ Quiere UX moderna sin 6 meses de capacitación ✅ Tutor IA real (Blackboard AI todavía está en desarrollo) ✅ Mobile con white-label propio ✅ Quiere evitar contratos enterprise complejos (sin RFP de 100 páginas) ## TCO comparado — universidad 5.000 alumnos / 3 años | Ítem | Blackboard Enterprise | Studeia Enterprise | |---|---|---| | Licencia | USD $40k-125k/año × 3 = USD $120k-375k (R$600k-1.875M) | R$108k-288k (R$3-8k/mes × 36) | | Setup + implementación | USD $25k-100k | R$0-30k | | Capacitación del personal | USD $10k-50k | Incluido (videos + docs) | | Desarrollo personalizado (RFP) | USD $50k-300k | Vía API pública (devs internos) | | Blackboard Ally | USD $5k-15k/año | N/A (WCAG nativo) | | **TOTAL 3 años** | **R$1.2M-3.5M** | **R$108k-318k** | Studeia típicamente **70-90% más barato** que Blackboard enterprise. ## Donde Blackboard gana (con honestidad) 1. **SCORM 2004**: Studeia solo soporta IMS CC. Para instituciones con bibliotecas SCORM legacy: limitación real. 2. **Blackboard Collaborate Ultra**: herramienta de videoconferencia madura. Studeia integra BBB/Zoom/Teams/Meet (adapter) pero no tiene paridad de funcionalidades con Collaborate en características avanzadas (breakout rooms automatizados, polling en capas, pizarra colaborativa profunda). 3. **Blackboard Ally**: auditoría automática de WCAG en contenido subido (PDFs, videos, etc.). Studeia tiene WCAG nativo pero no audita archivos subidos. 4. **Blackboard Predict**: 20 años de datos de riesgo académico en modelo propietario. Studeia tiene RiskAssessmentService con 6 factores ponderados (reciente, pero funcional). 5. **Madurez institucional**: 25 años de uso en universidades. Resistencia a migrar = fuerte. 6. **Certificaciones académicas brasileñas**: MEC, ABNT — Blackboard tiene certificaciones que Studeia aún no tiene (pendientes). ## Migración Blackboard → Studeia ### Camino recomendado (6-12 meses) | Mes | Fase | |---|---| | 1 | Trial plan Demo, importar 2 cursos piloto vía IMS CC | | 2-3 | Ajustar contenido migrado, recrear quizzes complejos, capacitar 5 profesores | | 4 | Migrar alumnos piloto vía SCIM (Blackboard lo soporta) | | 5-6 | Validar funcionalidades clave (gradebook, informes para padres, tutor IA) con pilotos | | 7-9 | Migración gradual de departamentos/cursos restantes | | 10-12 | Decommission Blackboard (o mantener en paralelo para cursos legacy vía LTI) | ### Qué migra automáticamente - ✅ Cursos vía exportación IMS CC de Blackboard - ✅ Alumnos vía SCIM o CSV - ✅ Calificaciones vía CSV - ✅ Foros (estructura básica) ### Qué NO migra - ❌ Paquetes SCORM 2004 (recrear como lecciones de video + quizzes) - ❌ Grupos de preguntas específicos de Blackboard (recrear vía question bank de Studeia) - ❌ Plantillas XML personalizadas de Blackboard - ❌ Informes de Blackboard Ally (cobertura WCAG empieza desde cero) - ❌ Personalizaciones JavaScript custom ## Veredicto honesto **Blackboard sigue siendo mejor para**: universidades públicas federales con 15+ años en Blackboard, dependencia crítica de SCORM 2004, necesidad de certificaciones MEC específicas vía Anthology, foco en estabilidad > innovación. **Studeia gana para**: universidades privadas en modernización, facultades de educación a distancia nuevas, costo total predecible, UX moderna, tutor IA real, mobile B2B con white-label, integración con PIX/Asaas. **El enfoque híbrido tiene sentido para**: universidad pública grande que quiere Studeia en cursos nuevos sin desinvertir en Blackboard. Studeia como LTI tool en cursos específicos. ## Ver también - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) - [Studeia vs Canvas](/comparisons/studeia-vs-canvas) - [Caso de uso: Universidad](/use-cases/university) ## FAQ **Q: ¿Blackboard sigue siendo relevante en 2026?** Sí, todavía es dominante en universidades públicas brasileñas (UFRJ, UnB, etc.) y algunas privadas tradicionales. Anthology (la empresa que adquirió Blackboard) consolidó en 2022 y modernizó parte del producto con Blackboard Learn Ultra. Sin embargo, la UX legacy persiste en muchas instituciones, y la percepción de usuario sigue siendo negativa entre los alumnos (interfaz anticuada, navegación confusa). **Q: ¿Es viable migrar de Blackboard a Studeia?** Sí, parcialmente. Blackboard exporta cursos en IMS Common Cartridge (IMS CC v1.x) y Studeia importa vía POST /api/institution/courses/import. Quizzes básicos (QTI 1.2), materiales, módulos y enlaces son migrados. SCORM 2004, grupos de preguntas específicos de Blackboard y extensiones XML personalizadas NO se migran automáticamente. Alumnos vía SCIM (Blackboard lo soporta), o CSV. **Q: ¿Cuál es la diferencia de precio en 3 años?** Blackboard cobra USD $8-25/alumno/año en contratos enterprise (negociable). Para una universidad de 5000 alumnos: USD $40k-125k/año = R$600k-1.875M en 3 años. Studeia Enterprise para el mismo tamaño típicamente R$108k-288k en 3 años (R$3-8k/mes negociable). Ahorro típico del 60-85%. **Q: ¿Blackboard tiene funcionalidades que Studeia no tiene?** Sí: (1) SCORM 2004 completo (Studeia solo IMS CC). (2) Blackboard Collaborate Ultra para videoconferencia (Studeia integra BBB/Zoom/Teams/Meet). (3) Blackboard Ally para conformidad WCAG automática en contenido legacy (Studeia tiene WCAG nativo pero sin auditoría automática de uploads). (4) Blackboard Predict (IA predictiva de riesgo — Studeia tiene RiskAssessmentService con 6 factores ponderados, similar). (5) Madurez institucional + certificaciones académicas. --- # [es-ES (AI-translated)] Studeia vs Canvas LMS: comparativa honesta 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-canvas Locale: es-ES Section: comparisons Updated: 2026-05-23 **Short answer:** Canvas (Instructure) es el LMS dominante en universidades de EE.UU. — UX pulido, gradebook robusto, USD $5-15/alumno/mes. Studeia es brasileño, B2B, con tutor IA multi-agente nativo, gamificación OB 3.0, PIX/Asaas billing y cumplimiento LGPD en R$. Para pymes, escuelas y academias en Brasil: Studeia gana en TCO y adecuación local. Para universidades que ya contratan Canvas: la integración vía LTI 1.3 con Studeia como tool provider funciona. ## Comparativa lado a lado | Aspecto | Studeia | Canvas | |---|---|---| | **Origen** | Brasil 2025 | EE.UU. 2008 (Instructure) | | **Modelo** | SaaS gestionado | SaaS (Cloud) o self-hosted (Open Source — limitado) | | **Precio** | R$0-1.500/mes (planes) o Enterprise personalizado | USD $5-15/alumno/mes ($60-180/alumno/año) | | **Soporte** | PT/EN/ES/FR | EN (PT-BR limitado) | | **LGPD** | Nativo (datos en Brasil) | GDPR/FERPA — LGPD vía DPA | | **Pago** | BRL, Stripe + Asaas (PIX) | USD, contratos enterprise | | **Tutor IA** | Multi-agente (Claude/GPT/Grok/Gemini) + RAG por tenant | Canvas AI (básico, generar quizzes, transcribir) | | **Gradebook** | Categorías + rúbricas + ponderaciones + indicadores de integridad | Considerado el mejor del mercado | | **Móvil** | Expo Android (iOS en roadmap) | Apps nativas pulidas (iOS+Android) | | **Motor de Quiz** | 8 tipos + psicométricas (Cronbach, point-biserial) | Quiz 2.0 (más avanzado en pooling) | | **LTI 1.3** | Tool provider | Tool consumer + provider | | **SCORM 2004** | NO | Sí | | **H5P** | Subtipos nativos (no H5P puro) | Plugin | | **Gamificación** | XP/badges/leaderboards/concursos nativo | Limitada (badges vía Canvas Badges) | | **White-label** | Total (Enterprise) | Limitado (colores + logo) | | **SSO Enterprise** | SAML+OIDC+SCIM | Sí | | **API** | 64+ endpoints con scopes granulares | API REST extensa (más madura) | | **Personalización** | Tema + CSS personalizado | Temas + JavaScript personalizado del Designer | | **Comunidad** | Pequeña (2026 es nuevo) | Enorme (Instructure Community) | ## Cuándo elegir Canvas ✅ Universidad americana o con estándar americano ✅ Ya en Canvas con inversión de migración significativa ✅ Presupuesto alto (USD/alumno/año sin problema) ✅ Necesidad de SCORM 2004 / H5P maduro ✅ Máximo pulido en UX/móvil ✅ Equipo de Designers/Devs Canvas existente ## Cuándo elegir Studeia ✅ Institución brasileña (LGPD, PT, PIX, soporte local) ✅ Costos en BRL predecibles (R$10-100k/año vs USD 50-300k/año Canvas) ✅ Quiere tutor IA real (Canvas AI aún está naciendo) ✅ Quiere gamificación nativa (Canvas es débil aquí) ✅ K-12 brasileño (Canvas K-12 es limitado) ✅ Academias preuniversitarias ✅ Formación corporativa brasileña ✅ Quiere móvil B2B con white-label ✅ EAD certificadora brasileña (precios competitivos) ## Costos comparados — universidad 5000 alumnos | Ítem | Canvas | Studeia Enterprise | |---|---|---| | Licencia/año | USD $60k-90k (R$300k-450k) | R$60k-180k (negociable) | | Configuración inicial | USD $10k-30k | Incluida | | Capacitación | USD $5k | Incluida (videos + docs) | | **TOTAL año 1** | **R$365k-485k** | **R$60k-180k** | Para universidades de tamaño mediano: Studeia típicamente 50-70% más barato. ## Integración Canvas + Studeia Caso común: universidad ya en Canvas quiere añadir Studeia para cursos específicos (ej: tutor IA real para curso de cálculo). ### Configuración LTI 1.3 1. **Studeia genera** Tool URL + Client ID + JWKS URL en /institution/lti-tools 2. **Canvas Admin** → Settings → Apps → Add App → By Client ID → pegar Client ID 3. Configurar placements (course navigation, assignment, etc) 4. En curso Canvas: añadir Studeia tool como clase ### Sincronización de notas (AGS) Studeia envía notas de vuelta automáticamente: ``` El alumno completa el quiz en Studeia ↓ Studeia llama al endpoint Canvas LTI AGS: POST {issuer}/api/lti/courses/{courseId}/line_items/{itemId}/scores ↓ La nota aparece en el gradebook de Canvas ``` Sin migración de datos — Canvas sigue siendo source-of-truth de los cursos. ## Migración Canvas → Studeia ### Posible - ✅ Cursos vía IMS Common Cartridge (Canvas exporta como .imscc) - ✅ Alumnos vía CSV o SCIM - ✅ Notas vía CSV ### NO soportado - ❌ Paquetes SCORM 2004 - ❌ Tipos de preguntas específicos de Canvas (numérico con fórmula, etc) — recrear - ❌ Canvas Pages con JavaScript personalizado - ❌ Canvas DesignTools (propietario) ## Veredicto honesto **Canvas sigue siendo mejor para**: - Universidades americanas / con estándar americano - Pulido móvil (Studeia va por detrás) - Máximo de plugins/integraciones maduras - SCORM 2004 robusto - Madurez institucional **Studeia gana para**: - Mercado brasileño (LGPD, PT, BRL) - Costo total (50-70% más barato en general) - Tutor IA real (vs Canvas AI naciente) - Gamificación nativa - K-12 + academias preuniversitarias - White-label real (Canvas es limitado) **El modelo híbrido tiene sentido para**: universidades con Canvas establecido que quieren funciones específicas de Studeia (tutor IA, gamificación). Use Studeia como LTI tool en cursos seleccionados. ## Ver también - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) - [Studeia vs Google Classroom](/comparisons/studeia-vs-google-classroom) - [Descripción general de la plataforma](/platform/overview) ## FAQ **Q: ¿Canvas es el mejor LMS del mundo?** Canvas es excelente — dominante en universidades de EE.UU. (>40% del mercado de educación superior americana). UX moderno, gradebook robusto, app móvil pulida. Pero es caro (USD $5-15/alumno/mes), soporte en inglés, sin foco en el mercado brasileño, sin LGPD nativo, sin PIX/facturación local. Para universidades brasileñas con presupuesto alto y necesidad de estándar americano: buen encaje. Para pymes brasileñas: Studeia en general gana en costo + ajuste local. **Q: ¿Studeia se integra con Canvas?** Sí. Studeia funciona como LTI 1.3 tool provider — registre las URLs en Canvas Admin > Settings > Apps > Add App. Las notas se sincronizan de vuelta vía AGS (Assignment and Grade Service). Útil para complementar Canvas con tutor IA + gamificación de Studeia. **Q: ¿Canvas tiene tutor IA?** Canvas tiene 'Canvas AI' (preview limitado en 2025, GA 2026) con funciones básicas: generar quizzes, resumir clases, transcribir. El tutor IA conversacional con el alumno es más limitado. Studeia tiene tutor IA multi-agente real (RAG por tenant, 5 estrategias pedagógicas, detección de conceptos erróneos, agente supervisor). Comparación Canvas AI vs Studeia AI: Studeia más profundo, Canvas más pulido en UI. **Q: ¿Puedo usar Studeia en lugar de Canvas para K-12?** Sí. Canvas K-12 (Canvas Network) existe pero es relativamente débil frente a Canvas Higher Ed. Studeia tiene funciones dedicadas para K-12: portal de padres con narrativa IA, monitoreo de menores, gamificación amigable para niños, LGPD/protección de menores nativa. En el 90% de los casos K-12 en Brasil: Studeia gana. --- # [es-ES (AI-translated)] Studeia vs Coursera for Business: comparativa 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-coursera-for-business Locale: es-ES Section: comparisons Updated: 2026-05-24 **Short answer:** Coursera for Business es un marketplace de cursos listos de Stanford/Yale/Google/Meta con seguimiento de progreso (USD $399-600/usuario/año). NO crean cursos propios allí. Studeia es un LMS B2B donde creas contenido INSTITUCIONAL propio (compliance interno, productos, metodología) con tutor IA multi-agente, gamificación, gradebook, SSO. Cobramos por alumno (R$2.5-15/alumno/mes). Para empresas: usar AMBOS tiene sentido — Coursera para habilidades genéricas + Studeia para contenido institucional. ## Comparativa conceptual | Aspecto | Studeia | Coursera for Business | |---|---|---| | **Tipo** | LMS B2B para crear contenido propio | Marketplace de cursos listos | | **Quién crea el contenido** | Tu institución | Stanford, Yale, Google, Meta, IBM, etc. | | **Personalización** | Total (cursos a medida) | Limitada (curación de catálogo) | | **Precio** | R$250-1.500/mes + enterprise personalizado | USD $399-600/usuario/año | | **Modelo** | Cobramos por alumno del tenant | Cobramos por usuario suscriptor | | **Idioma de los cursos** | Tú eliges (PT/EN/ES/FR) | Mayoría en inglés (subtitulado) | | **Certificados** | OB 3.0 de tu marca + personalizable | Certificados Coursera + universidades asociadas | | **Tutor IA** | Multi-agente RAG por tenant | Coursera Coach (limitado al catálogo) | | **Gamificación** | Nativa (XP, badges, leaderboards) | Limitada | | **Clases en vivo** | BBB+Zoom+Teams+Meet | Coursera Live (seleccionados) | | **LTI 1.3** | Tool provider | Tool provider | | **Gradebook propio** | Sí (rúbricas, ponderaciones, integridad) | Gestionado por Coursera (sin personalización) | | **Seguimiento de compliance** | Automatizaciones + recordatorios + auditoría | Sí, basado en catálogo | | **API pública** | 64+ endpoints con alcance definido | API de integración limitada | ## Cuándo elegir Coursera for Business ✅ La empresa quiere tercerizar contenido de habilidades genéricas (Python, AWS, Excel, habilidades blandas) ✅ Valora los certificados de universidades top (Stanford, Yale) ✅ Enfoque en upskilling/reskilling de empleados en tecnologías mainstream ✅ Presupuesto alto (USD $400-600/usuario/año no es un problema) ✅ La compra de paquetes pre-curados (SkillSets) ahorra tiempo ✅ Los cursos en inglés no son un problema ✅ Empresa global (oficinas en múltiples países) ## Cuándo elegir Studeia ✅ La empresa quiere capacitar en CONTENIDO PROPIO (compliance interno, productos, metodología) ✅ Cursos a medida para su cultura/proceso (no disponibles en Coursera) ✅ Enfoque en formación sectorial (salud, jurídico, financiero) ✅ Quiere marca propia en los certificados (sin Coursera/Studeia visible) ✅ Quiere tutor IA que conozca SU material (RAG por tenant) ✅ Costo predecible en moneda local (sin volatilidad del USD) ✅ Necesita cumplimiento de regulaciones locales de privacidad de datos ## Escenarios reales ### Banco grande **Coursera for Business**: 2000 empleados × USD $500/año = R$5M/año. Capacita en Python, AWS, liderazgo (habilidades genéricas). **Studeia Enterprise**: R$8k/mes × 12 = R$96k/año. Capacita en productos del banco, compliance regulatorio, cultura interna. **Ambos juntos**: R$5.1M/año. Cada uno hace lo que mejor sabe hacer. ### Institución de educación a distancia creando cursos profesionales **Coursera for Business**: no aplica (Coursera no es amigable para reventa por instituciones educativas locales). **Studeia Enterprise**: crea cursos propios, gestiona matrículas, emite certificados, monetiza a través de su propia plataforma. ### Startup tech de 50 empleados **Coursera Team**: USD $399 × 50 = R$100k/año. Habilidades tech básicas. **Studeia Mini**: R$250/mes = R$3k/año (10 alumnos). Capacita en producto interno + onboarding. Ambos: R$103k/año. Una startup pequeña quizás solo use Coursera (más barato para habilidades genéricas) o Studeia (enfoque en onboarding interno). ## Integración Coursera + Studeia LTI 1.3 (Coursera soporta como tool provider, Studeia también): ``` El empleado completa Python en Coursera ↓ (LTI launch o xAPI) Finalización reportada al gradebook de Studeia ↓ handleGamificationEvent → XP obtenido ``` O via API pública de Coursera (nivel Enterprise) sincronizando completions hacia Studeia. ## Dónde Coursera gana (con honestidad) 1. **Contenido top de universidades**: Stanford, Yale, MIT, Google — Studeia no tiene catálogo propio 2. **Certificados de marca reconocida**: un "certificado de Stanford" en LinkedIn vale más que un "certificado de Studeia" 3. **Catálogo enorme**: 7000+ cursos vs tener que crear desde cero 4. **Coursera Live**: webinars con instructores de universidades 5. **SkillSets curados**: rutas de aprendizaje pre-diseñadas por expertos 6. **Empresas globales**: mejor para multinacionales con oficinas en distintos países ## Veredicto honesto **Coursera for Business**: herramienta de **consumo** de cursos. Compras acceso a un catálogo. **Studeia**: herramienta de **producción** de cursos. Creas y gestionas contenido propio. Son categorías diferentes. Para empresas medianas/grandes: usar AMBOS tiene sentido. Coursera para habilidades genéricas + Studeia para contenido institucional. Para startups pequeñas: depende de la necesidad dominante. ## Ver también - [Use case: Corporate training](/use-cases/corporate-training) - [Studeia vs Canvas](/comparisons/studeia-vs-canvas) ## FAQ **Q: ¿Coursera for Business es un LMS?** No exactamente. Coursera for Business es un marketplace de cursos listos de universidades top (Stanford, Yale, Google, Meta, IBM) + seguimiento de progreso y SkillSets curados. Excelente para empresas que quieren tercerizar el contenido. NO crean cursos propios allí — para eso necesitas un LMS de verdad como Studeia, Moodle, Canvas. **Q: ¿Puedo usar los dos juntos?** Sí, es común. Coursera para contenido curado genérico (Python, AWS, liderazgo) + Studeia como LMS propio para contenido institucional específico (compliance interno, productos de la empresa, metodología propia). Integración via xAPI/LTI (Coursera soporta LTI 1.3 launches, Studeia también). **Q: ¿Cuánto cuesta Coursera for Business?** Coursera Team (hasta 125 usuarios): USD $399/usuario/año. Coursera Enterprise: personalizado, típicamente USD $400-600/usuario/año con volumen. Catálogo completo + certificados incluidos. Para 500 empleados: USD $200k-300k/año (R$1M-1.5M). Studeia Enterprise para 500: R$108k-288k/año (creando contenido propio). **Q: ¿Coursera ofrece tutor de IA?** Coursera Coach (lanzado en 2024) es un chatbot de IA que ayuda a los estudiantes en los cursos del catálogo. Limitado al contenido de Coursera. Studeia tiene tutor IA multi-agente con RAG por tenant — puede ingerir CUALQUIER material (incluidos cursos de tu propia empresa) y citarlos de forma específica. --- # [es-ES (AI-translated)] Studeia vs EadBox vs EadPlataforma — competidores BR 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-eadbox-eadplataforma Locale: es-ES Section: comparisons Updated: 2026-05-24 **Short answer:** EadBox y EadPlataforma son plataformas de e-learning brasileñas para INFOPRODUCTORES B2C (venta directa al consumidor, afiliados, checkout y gateway Brasil). Studeia se enfoca en B2B institucional — escuelas, preuniversitarios, universidades y T&D corporativo — con multi-tenant, SSO/SCIM, LTI, tutor IA y gradebook. EadBox/EadPlataforma ganan en infoproducto B2C con afiliados; Studeia gana en e-learning académico/corporativo con IA real. Hotmart y Eduzz también compiten en B2C ## Posicionamiento de mercado | Plataforma | Enfoque primario | Cliente típico | |---|---|---| | **Studeia** | B2B institucional | Escuela K-12, academia ENEM, universidad, T&D corporativo | | **EadBox** | B2C infoproductor (con afiliados) | Creador de cursos de productividad, idiomas, marketing | | **EadPlataforma** | B2C infoproductor + pequeño B2B | Coach, consultor, empresa mediana con cursos internos | | **Hotmart** | Marketplace + infoproducto B2C | Creador vendiendo cursos ampliamente (mass market) | | **Eduzz** | Marketplace + infoproducto B2C | Ídem Hotmart, enfoque en infoproductos digitales | | **Sambatech** | Video corporativo | Empresa grande con biblioteca de video | ## Comparativa detallada | Aspecto | Studeia | EadBox | EadPlataforma | |---|---|---|---| | **Modelo** | B2B SaaS multi-tenant | B2C/B2B-light SaaS | B2C/B2B-light SaaS | | **Precio inicial** | R$250/mes (10 alumnos) | R$197/mes (Pro) | R$197/mes (Iniciante) | | **Precio escala** | R$1.500/mes (100 alumnos) | Alumnos ilimitados en todos los planes | R$397/mes (Profissional) | | **Tutor IA** | Multi-agente nativo (4 providers) | IA Pro básico (OpenAI) | IA quiz generation | | **Gradebook ponderado** | Sí (categorías + rúbricas + weights) | Notas simples | Notas simples | | **Quiz psicométricas** | Cronbach + point-biserial + distractor | Quizzes básicos | Quizzes básicos | | **Multi-tenancy real** | Sí (isolated + per-tenant API keys) | Sí | Sí | | **White-label** | Total (Enterprise) | Sí (parcial) | Sí (parcial) | | **Mobile** | App nativo Expo white-label | App genérico EadBox | App genérico EadPlataforma | | **SSO Enterprise** | SAML+OIDC+SCIM | Limitado | Limitado | | **LTI 1.3** | Tool provider | NO | NO | | **Gamificación** | XP+OB 3.0+leaderboards+contests | Limitada | Limitada | | **Clases en vivo** | BBB+Zoom+Teams+Meet adapter | Integración Zoom | Integración Zoom | | **Pago alumnos** | Stripe + Asaas (PIX) B2B | Checkout integrado + 8 gateways | Checkout integrado + 6 gateways | | **Afiliados** | NO | Sí (sistema nativo) | Sí | | **API pública** | 64+ endpoints + scopes | API básica | API básica | | **LGPD** | Nativo | Sí | Sí | | **Comunidad/foros** | Sí (por grupo/curso) | Sí | Sí | | **Drip content** | Vía publishAt scheduled | Sí | Sí | ## Cuándo elegir cada uno ### EadBox ✅ Eres creador de cursos individual (coach, consultor, infoproductor) ✅ Vendes cursos directamente al consumidor (B2C) ✅ Quieres sistema nativo de afiliados (comisiones) ✅ Quieres 8 gateways de pago integrados (Stripe, PagSeguro, Mercado Pago, etc.) ✅ Enfoque en conversión de ventas (landing pages, embudos, upsell) ✅ Pequeño-mediano tamaño (hasta ~5000 alumnos) ### EadPlataforma ✅ Misma lógica que EadBox pero también atiende empresas medianas con T&D interno ✅ Quieres cursos pre-elaborados de la plataforma como complemento (catálogo propio) ✅ Enfoque en capacitación corporativa básica ### Studeia ✅ Escuela K-12 (primaria, secundaria) con BNCC (currículo nacional brasileño) ✅ Academia ENEM/ingreso universitario ✅ Universidad EAD o presencial ✅ T&D corporativo serio (compliance, SSO Okta/Azure AD, certificados OB 3.0) ✅ Quieres tutor IA real (multi-agente, RAG per-tenant) ✅ Quieres gradebook académico (rúbricas, weights, integrity flags) ✅ Quieres integración LTI (Canvas/Moodle/Blackboard) ✅ Quieres mobile B2B con white-label dedicado ### Hotmart/Eduzz ✅ Quieres entrar a un marketplace existente (visibilidad) ✅ Vendes infoproducto digital amplio (e-book, curso, comunidad) ✅ Aceptas pagar % de transacción alto (~10-20%) a cambio de tráfico del marketplace ✅ No necesitas plataforma propia — Hotmart aloja todo ## TCO comparado — escuela privada 200 alumnos / 3 años | Ítem | Studeia (Enterprise bajo consulta) | EadPlataforma Profissional | |---|---|---| | Mensualidad | R$3.000/mes × 36 = R$108k | R$397/mes × 36 = R$14.3k | | Costo IA proporcional | R$3-8/alumno × 200 × 36 = R$22-58k | R$0 (básica incluida) | | Features incluidas | Tutor IA multi-agente + LTI + SSO + analíticas psicométricas + gamificación OB 3.0 + portal padres IA | Quiz IA básico + comunidad + checkout | | **TOTAL 3 años** | **R$130-166k** | **R$14k** | **EadPlataforma es ~10x más barato.** Pero: sin tutor IA real, sin gradebook ponderado, sin LTI, sin SSO Enterprise, sin mobile white-label, sin portal de padres robusto. **Cuándo vale la pena Studeia siendo más caro:** - Escuela que cobra mensualidad alta (R$1k+/mes/alumno) — el diferencial pedagógico lo justifica - Academia ENEM premium (las analíticas psicométricas muestran qué alumno tiene posibilidades reales) - Universidad EAD (necesita LTI, SSO, certificados verificables) - T&D corporativo (compliance, Okta/Azure AD) **Cuándo EadPlataforma es suficiente:** - Infoproductor individual - Pequeña academia/escuela con currículo simple - Coach/consultor - T&D corporativo básico ## Migración EadBox/EadPlataforma → Studeia ### Posible - ✅ Cursos: exportar contenido (texto, PDFs, enlaces de video) + resubir en Studeia Media Library - ✅ Alumnos: exportar CSV de EadBox/EadPlataforma + importar en Studeia - ✅ Estructura de módulos: recrear manualmente - ✅ Comunidad/foros: empezar de cero (sin migración automática) ### No migra - ❌ Sistema de afiliados (Studeia no lo tiene) - ❌ Historial de ventas/transacciones - ❌ Configuraciones de embudo de ventas - ❌ Drip content schedule (recrear vía publishAt) ## Veredicto honesto **Para creador individual B2C con afiliados**: EadBox > Studeia (Studeia no cubre ese caso). **Para escuela/academia/universidad/T&D serio**: Studeia > EadBox/EadPlataforma (pedagogía + IA + compliance). **Para vender en marketplace**: Hotmart/Eduzz (Studeia no aplica). **Híbrido**: empresa que TANTO vende cursos B2C (EadBox/Hotmart) COMO necesita capacitar empleados B2B (Studeia) — usar ambos tiene sentido. ## Ver también - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) - [Caso de uso: Certificación profesional](/use-cases/professional-certification) - [Caso de uso: Capacitación corporativa](/use-cases/corporate-training) ## FAQ **Q: ¿Cuál es la diferencia entre Studeia, EadBox y EadPlataforma?** EadBox y EadPlataforma se enfocan en **infoproductores B2C** (vender cursos online directamente al consumidor — afiliados, checkout, gateway de pago integrado). Studeia se enfoca en **B2B institucional** (escuela, academia, universidad, T&D corporativo — multi-tenant, SSO/SCIM, tutor IA, gradebook profesional, LTI). Casos de uso distintos: EadBox para infocursos de productividad o idiomas. Studeia para instituciones educativas que quieren EAD completo con IA. **Q: ¿Studeia tiene checkout/afiliados/gateway de pago integrado?** Para B2B institucional: integra Stripe y Asaas (PIX/boleto brasileño). Para B2C con afiliados: NO tenemos sistema nativo de afiliados/checkout estilo Hotmart/Eduzz. Quien necesita eso usa EadBox/EadPlataforma. Quien vende cursos B2B (institucional) o usa Studeia internamente: Stripe+Asaas es suficiente. **Q: ¿Cuál es más barato para 100 alumnos?** EadPlataforma Profesional: R$397/mes (catálogo propio). EadBox Pro: R$197/mes (alumnos ilimitados, tasa de transacción 4.9%). Studeia Escala: R$1.500/mes (100 alumnos, IA incluida). Studeia es más caro pero incluye: tutor IA real, gradebook ponderado con rúbricas, SSO Enterprise, LTI, mobile B2B white-label, analíticas psicométricas. EadBox/EadPlataforma se enfocan en entregar cursos + cobrar — Studeia se enfoca en ENSEÑAR + medir. **Q: ¿EadBox/EadPlataforma tienen IA?** EadBox lanzó 'IA Pro' en 2024 (resumen de clases, generación de quiz — básico, basado en OpenAI). EadPlataforma tiene generación de quiz vía IA. Ambos son limitados vs Studeia (multi-agente, RAG per-tenant, fallback Claude/GPT/Grok/Gemini, misconception detection, supervisor agent). Para cursos info simples: la IA básica de EadBox es suficiente. Para EAD académico serio: Studeia. --- # [es-ES (AI-translated)] Studeia vs Edmodo (descontinuado) — alternativas en 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-edmodo Locale: es-ES Section: comparisons Updated: 2026-05-24 **Short answer:** Edmodo fue descontinuado el 22 sep 2022 (NetDragon). Principales alternativas: (1) Google Classroom — gratis, ideal para usuarios de Google Workspace; (2) Microsoft Teams for Education — gratis con MS 365; (3) Studeia — R$250–1.500/mes, EAD completo con tutor IA, gamificación, portal de padres con IA narrativa, LGPD nativo y gradebook estructurado. Para escuelas K-12 brasileñas que necesitan más que lo básico, Studeia + Google Classroom es la combinación recomendada ## Contexto: Edmodo descontinuado **Anuncio**: julio 2022 **Cierre**: 22 septiembre 2022 **Causa**: NetDragon (propietaria desde 2018) decidió cerrar la operación global, enfocándose en otros productos educativos (101 Education PLC). Edmodo tenía ~100M usuarios antes del cierre, predominantemente escuelas K-12 + algunas universidades. Brasil tenía una base significativa, especialmente en redes estatales y escuelas privadas pequeñas. ## Lo que Studeia ofrece (vs lo que Edmodo ofrecía) | Feature Edmodo | Equivalente en Studeia | |---|---| | Timeline social escuela-padres-alumno | Foros + Anuncios + portal de padres con narrativa IA | | Quizzes simples | Quiz engine con 8+ tipos + analíticas psicométricas | | Compartir materiales | Media library con carpetas + sharing + versionado | | App móvil | App Expo nativa (Android publicado, iOS roadmap) | | Badges (Edmodo Snapshot) | Open Badges 3.0 + leaderboards + contests + rewards shop | | Calendario | Calendario con sincronización Google Calendar/Outlook | | Grupos de clase | ClassGroup con foros/anuncios con alcance definido | | Integración Google | Google Drive sync + SSO OIDC + Meet provider | **Plus features que Edmodo NO tenía:** - Tutor IA multi-agente (Claude/GPT/Grok/Gemini con RAG per-tenant) - Gradebook estructurado (categorías + rúbricas + pesos) - Cumplimiento LGPD nativo (Brasil) - White-label completo (Enterprise) - LTI 1.3 (integrar con otros LMS) - SSO Enterprise (SAML/OIDC/SCIM) - API pública para integraciones ## Comparativa: 3 alternativas post-Edmodo | Aspecto | Studeia | Google Classroom | MS Teams for Education | |---|---|---|---| | **Precio K-12** | R$250-1.500/mes | Gratis (con Workspace Edu Fund.) | Gratis (con A1) | | **Estructura cursos** | Course→Module→Lesson | Clase → asignaciones (flat) | Equipos → canales | | **Gradebook** | Categorías + pesos + rúbricas | Notas simples | Insights básicos | | **Quiz engine** | 8+ tipos + analíticas psicométricas | Google Forms básico | Forms básico | | **Tutor IA** | Multi-agente nativo | Gemini (básico) | Copilot for Education (básico) | | **Gamificación** | XP+badges+leaderboards+contests | NO | NO | | **Portal de padres** | Robusto + IA narrativa | Limitado (Guardian email) | Limitado | | **Móvil** | App nativa white-label | App Classroom | App Teams | | **LGPD** | Nativo | GDPR vía DPA | GDPR vía DPA | | **White-label** | Total (Enterprise) | NO | NO | | **LTI 1.3** | Tool provider | NO | NO | ## Cuándo elegir cada alternativa ### Google Classroom ✅ Escuela K-12 que ya paga Google Workspace for Education Fundamentals (gratis) ✅ Foco en gestión básica (publicar tarea, dar nota simple) ✅ Sin necesidad de gamificación/badges/analíticas ✅ Sin necesidad de tutor IA real ✅ Acepta la marca Google siempre presente ### MS Teams for Education ✅ Escuela K-12 que ya paga Microsoft 365 A1 (gratis) ✅ Ecosistema Microsoft (Word, Excel, PowerPoint) ✅ Foco en colaboración en equipo ✅ Reuniones vía Teams nativas ### Studeia ✅ Escuela/academia/T&D corporativo que quiere más que lo básico ✅ Quiere tutor IA real para resolver dudas de los alumnos ✅ Quiere gamificación para involucrar a los alumnos ✅ Quiere portal de padres robusto con IA narrativa ✅ Quiere marca propia (white-label) ✅ Quiere LGPD nativo brasileño ✅ Quiere estructura curricular (Course→Module→Lesson) ## Migración backup Edmodo → Studeia Si aún tienes el .zip de backup que Edmodo permitió exportar: ### Camino recomendado 1. **Cursos/contenido**: no hay importación automatizada. Sube archivos individuales vía Media Library de Studeia. 2. **Alumnos**: CSV importable vía `/institution/users` con campos `name, email, role, classGroupIds, sendInvite`. 3. **Quizzes**: recrear vía Quiz Editor o Question Bank importer (CSV/GIFT). 4. **Notas históricas**: importar como GradeItem manual + Grade vía API (sin retroactividad para los cálculos del gradebook). 5. **Comunicación**: no hay importación — comenzar desde cero en Foros/Anuncios. ### Setup en 1 semana | Día | Tarea | |---|---| | 1 | Plan Demo Trial, configurar branding + colores de la escuela | | 2 | Importar alumnos vía CSV | | 3-4 | Recrear 5-10 cursos prioritarios (módulos + lecciones) | | 5 | Configurar gamificación (Agente IA crea badges automáticamente) | | 6 | Vincular padres (GuardianLink) — verificación SMS | | 7 | Capacitar 2-3 profesores piloto | ## Otras alternativas K-12 mencionadas como "sustitutos de Edmodo" | Plataforma | Estado | |---|---| | **Schoology** (PowerSchool) | Existe, pero con foco en EE. UU., sin soporte PT-BR robusto | | **Canvas** (Instructure) | Foco en educación superior, oferta K-12 limitada | | **Brightspace** (D2L) | Universitaria, compleja para K-12 | | **Moodle** | Self-host, requiere admin TI, sin foco K-12 nativo | | **Sambatech / Eduplay** | Brasileña, enfocada en video/formación corporativa | | **Eadbox / EadPlataforma** | Brasileñas, EAD corporativo principalmente | ## Veredicto Edmodo dejó un vacío en K-12. **Google Classroom** se convirtió en el estándar gratuito (especialmente donde Google Workspace ya estaba). Para escuelas que quieren más que lo básico o no quieren depender de Google: **Studeia** cubre el hueco con tutor IA, gamificación, gradebook estructurado y portal de padres robusto. ## Ver también - [Studeia vs Google Classroom](/comparisons/studeia-vs-google-classroom) - [Use case: Escuela primaria BNCC](/use-cases/primary-school-bncc) ## FAQ **Q: ¿Edmodo sigue existiendo en 2026?** No. Edmodo fue descontinuado el 22 de septiembre de 2022 (anunciado en julio 2022). NetDragon, propietaria de Edmodo, cerró el servicio globalmente. Las escuelas que usaban Edmodo tuvieron que migrar a alternativas. Las tres opciones más comunes en Brasil: Google Classroom (gratis para escuelas K-12), Microsoft Teams for Education (gratis), o LMS de pago como Studeia. **Q: ¿Studeia sustituye bien a Edmodo?** Sí, con ventajas. Edmodo era fuerte en: (1) Comunicación escuela-padres-alumno vía timeline social, (2) Quizzes simples, (3) Compartir materiales, (4) App móvil. Studeia tiene todo eso + portal de padres con IA narrativa, gradebook estructurado, tutor IA, gamificación (XP/badges), 9 temas visuales, white-label, LGPD nativo. Diferencia clave: Studeia es de pago (R$250-1.500/mes B2B) vs Edmodo era gratis. **Q: ¿Qué alternativa gratuita existe a Edmodo?** Google Classroom (si la escuela ya paga Google Workspace for Education Fundamentals — gratis para K-12). Tiene comunicación básica, asignación de tareas, integración Drive/Meet. Limitaciones: sin gradebook estructurado, sin rúbricas, sin gamificación, sin portal de padres robusto. Para necesidades básicas funciona; para EAD serio con currículo BNCC + seguimiento detallado de padres: Studeia. **Q: ¿Cómo migrar contenido de Edmodo (si aún tengo backup)?** Edmodo permitió exportar antes de cerrar. Si tienes el .zip de backup: los archivos pueden subirse vía Studeia media library (POST /api/institution/media), los quizzes deben recrearse manualmente o mediante importación de banco de preguntas (CSV/GIFT). Los alumnos vía CSV. Sin migración automatizada — Edmodo no usaba IMS CC. --- # [es-ES (AI-translated)] Studeia vs Google Classroom: comparativa 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-google-classroom Locale: es-ES Section: comparisons Updated: 2026-05-23 **Short answer:** Google Classroom ofrece gestión gratuita de clases integrada en Google Workspace — ideal para escuelas K-12 que ya usan Docs, Drive y Meet. Studeia es un LMS B2B completo con tutor IA, gamificación OB 3.0, quiz analytics, gradebook avanzado, LTI y SCIM. Para EAD estructurado y formación corporativa (T&D): Studeia gana. Para escuelas K-12 ya en Google Workspace: Classroom + Studeia juntos — Classroom para lo básico, Studeia para cursos estructurados. ## Comparativa lado a lado | Aspecto | Studeia | Google Classroom | |---|---|---| | **Modelo** | LMS B2B completo | Gestión de clases + tareas | | **Precio** | R$250-1.500/mes (planes) | Incluido en Google Workspace | | **Soporte** | Equipo Studeia | Soporte Google + comunidad | | **Tutor IA** | Multi-agente Claude/GPT/Grok/Gemini | Gemini integrado (básico) | | **Libro de calificaciones** | Categorías + pesos + rúbricas + integridad | Notas simples (sin categoría/peso/rúbrica) | | **Motor de quiz** | 8 tipos + analíticas psicométricas | Google Forms (básico) | | **Gamificación** | XP + badges OB 3.0 + leaderboards + concursos | NO tiene | | **Foros** | Hilos + respuestas + adjuntos | NO tiene (solo comentarios en publicaciones) | | **Mensajes directos** | Sí | Email (Gmail) | | **Clases en vivo** | BBB+Zoom+Teams+Meet adapter | Google Meet integrado | | **Mobile** | App Expo nativa white-label | App Classroom oficial | | **LTI 1.3** | Tool provider | NO (Google no lo ofrece) | | **SSO Enterprise** | SAML+OIDC+SCIM | Solo cuenta Google | | **White-label** | Total (Enterprise) | NO (marca Google siempre) | | **API pública** | 64+ endpoints con scope | Classroom API básica | | **Multi-tenancy** | Sí, aislado por institución | Cuenta Google = Workspace | | **Contenido offline** | Roadmap | Limitado | | **Certificados** | OB 3.0 + personalizado | NO | | **LGPD** | Nativo | GDPR vía Google DPA | ## Cuándo elegir Google Classroom ✅ Escuela K-12 que ya paga Google Workspace for Education ✅ Profesores que ya usan Google Docs/Drive/Meet ✅ Necesidad BÁSICA de LMS (publicar tarea, corregir, dar nota simple) ✅ Quiere herramienta gratuita sin licencia adicional ✅ Curso corto/puntual (no currículo estructurado) ✅ Sin necesidad de gamificación/badges/analíticas ## Cuándo elegir Studeia ✅ E-learning serio (currículo estructurado, múltiples módulos/clases) ✅ Preparación para exámenes (simulacros, analíticas, tutor IA) ✅ Capacitación y desarrollo corporativo (SSO empresarial, certificados, seguimiento de compliance) ✅ K-12 que quiere más que lo básico (libro de calificaciones ponderado, rúbricas, gamificación, portal para padres con IA) ✅ Universidad (LTI, libro de calificaciones avanzado, rúbricas) ✅ Quiere white-label real (sin marca Google) ✅ Necesita mobile B2B con marca propia ## Escenarios híbridos Común: la escuela usa Classroom para gestión operativa (tareas, recordatorios, comunicación con padres vía Gmail) + Studeia para cursos formales (currículo estructurado, simulacros, gamificación, informes para padres con IA). ### Studeia se integra con Google Workspace - **Google Drive sync** — biblioteca de medios bidireccional - **Google Calendar** — las clases en vivo se sincronizan con el calendario del alumno - **Google Meet** — proveedor de clases en vivo nativo - **Google SSO vía OIDC** — inicio de sesión con cuenta Google - Single Sign-On automático entre Studeia y Classroom (misma sesión Google) ## Limitaciones de Classroom para e-learning Por qué Classroom no reemplaza a un LMS completo: 1. **Sin libro de calificaciones estructurado**: las notas son por tarea, sin categorías/pesos/rúbricas. Calcular el promedio ponderado es manual. 2. **Sin motor de quiz**: depende de Google Forms (limitado en tipos, sin psicometría, sin banco de preguntas). 3. **Sin jerarquía de cursos**: todo es "Clase". No existe el concepto de Curso > Módulo > Lección. 4. **Sin publicación programada**: todo se publica de inmediato. 5. **Sin RAG / tutor IA dedicado**: Gemini en Classroom es básico vs el tutor IA multi-agente de Studeia. 6. **Sin analíticas**: se puede ver quién completó una tarea, pero no análisis psicométrico ni predicciones. 7. **Sin gamificación**: cero XP, badges, leaderboards. 8. **Sin certificados**: no genera credenciales verificables. 9. **Sin LTI**: no se integra con otras herramientas educativas. 10. **Sin comunicación estructurada**: comentarios en publicaciones, pero sin foro con hilos y búsqueda. ## Migración Classroom → Studeia ### Posible - ✅ Alumnos: exportar desde Workspace + importar vía CSV - ✅ Materiales: descarga desde Drive + subida en Studeia - ✅ Notas: exportar CSV ### NO soportado de forma nativa - ❌ Contenido estructurado (Classroom no tiene cursos estructurados — es necesario recrear el currículo) - ❌ Historial de comentarios (se pierde) - ❌ Entradas de Calendar (recrear) ## Veredicto honesto **Classroom sigue siendo imbatible para**: - Escuela K-12 que ya paga Workspace + quiere herramienta gratuita para gestión básica - Cursos puntuales/cortos sin necesidad de estructura - Máxima integración con Google Docs/Drive/Meet (flujo de trabajo Google nativo) **Studeia gana para**: - E-learning estructurado (cursos formales, módulos, secuenciamiento) - Preparación para exámenes de ingreso universitario - Capacitación y desarrollo corporativo - Cualquier caso donde gamificación, tutor IA, analíticas, certificados o LTI sean necesarios **Estrategia más común**: la escuela K-12 usa AMBOS. Classroom para lo operativo del día a día, Studeia para cursos curriculares y gamificación. ## Ver también - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) - [Studeia vs Canvas](/comparisons/studeia-vs-canvas) - [Integración Google Workspace](/integrations/google-workspace) ## FAQ **Q: ¿Google Classroom es un LMS de verdad?** Parcialmente. Google Classroom es un sistema de gestión de clases (LMS lite) gratuito integrado a Google Workspace for Education. Excelente para escuelas que ya usan Google (Docs, Drive, Meet). Pero le faltan características de un LMS completo: libro de calificaciones estructurado con pesos y rúbricas, motor de quiz robusto, gamificación, tutor IA, analíticas psicométricas, comunicación por foro, mobile B2B white-label, LTI, SCIM. Para e-learning serio: Classroom es insuficiente. **Q: ¿Puedo usar los dos juntos?** Sí, es común. Classroom para tareas/comunicación básica + integración con Google Drive; Studeia para cursos estructurados, tutor IA, libro de calificaciones avanzado, gamificación. Studeia se integra con Google Drive (sincronización de medios) + Google Calendar + Google Meet, complementando a Classroom. **Q: ¿Google Classroom está disponible para empresas?** Sí, pero con limitaciones. Workspace Business incluye Classroom básico. Workspace Enterprise tiene características adicionales. Pero para capacitación y desarrollo corporativo, Classroom es débil — le falta seguimiento de compliance, certificados, LTI, SSO enterprise fuera de Google. Studeia es más adecuado para capacitación corporativa. **Q: Costos: ¿Classroom es gratis y Studeia cobra?** Classroom: gratuito si tu escuela ya usa Google Workspace for Education Fundamentals (gratis). Workspace de pago: USD $3-5/alumno/mes (sin Classroom diferenciado). Studeia: R$250-1.500/mes para 10-100 alumnos. Para escuelas que ya pagan Workspace: Classroom básico parece 'gratis'. Pero el TCO real considera funcionalidades — Classroom sin extras vs Studeia con todo incluido. --- # [es-ES (AI-translated)] Studeia vs Moodle: comparativa honesta 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-moodle Locale: es-ES Section: comparisons Updated: 2026-05-23 **Short answer:** Studeia es SaaS B2B brasileño con IA, gamificación, gradebook psicométrico, white-label y mobile B2B integrado (R$250-1.500/mes para 10-100 alumnos). Moodle es open-source, gratuito pero requiere hosting propio, administrador dedicado y plugins de terceros para IA/gamificación/mobile, con ecosistema maduro (H5P, SCORM, plugins). Para escuelas/academias/T&D pequeñas-medianas en Brasil: Studeia suele ganar en TCO a 3 años. Para universidades grandes ya en Moodle: complementar vía LTI. ## Comparativa lado a lado | Aspecto | Studeia | Moodle | |---|---|---| | **Modelo** | SaaS gestionado | Open-source self-hosted | | **Precio** | R$0-1.500/mes (planes) | Gratis + hosting + admin | | **Soporte** | Equipo Studeia (PT/EN/ES) | Comunidad + Moodle Partners | | **Origen** | Brasil 2025 | Australia 2002 | | **Hospedaje** | Studeia (Brasil, cumplimiento de datos) | Tú (en cualquier lugar) | | **Tutor IA** | Built-in (Claude/GPT/Grok/Gemini multi-agente) | Vía plugins (Moodle 4.5+ tiene moodle-ai básico) | | **RAG por curso** | Built-in (Voyage AI + per-tenant) | Plugin | | **Gamificación** | Built-in (XP, badges OB 3.0, leaderboards, concursos, tienda) | Plugin (Level Up!, Game) | | **Mobile B2B** | App Expo nativa (Android publicado) | Moodle Mobile (oficial) | | **White-label** | Total (Enterprise) | Posible vía tema + branding | | **SSO Enterprise** | SAML+OIDC+SCIM nativo | Plugins (auth_oidc, auth_saml2, scim) | | **Mensajería** | Foros + DM + anuncios + email nativo | Sí | | **Integridad del quiz** | Cambio de pestaña, anomalías de tiempo, flags en línea | Integración Safe Exam Browser (SEB) | | **Analytics psicométricas** | Cronbach, point-biserial, análisis de distractores | Plugin (Statistics) | | **Gradebook** | Categorías + rúbricas + ponderaciones | Sí (más complejo) | | **Clases en vivo** | BBB+Zoom+Teams+Meet (adaptador unificado) | BBB nativo, otros vía plugin | | **LGPD/GDPR** | Nativo (Brasil + Europa) | Plugins + manual | | **i18n** | 4 idiomas built-in (pt/en/es/fr) | 100+ idiomas (comunidad) | | **LTI 1.3** | Tool provider | Tool consumer + provider | | **API pública** | 64+ endpoints con scopes | Web Services REST/SOAP | | **Personalización de código** | Limitada (API) | Total (open source) | | **Plugins de terceros** | No tiene ecosistema | >1500 plugins activos | | **Sellos educacionales** | En proceso | MEC, ISO | ## Cuándo elegir Studeia ✅ Eres una escuela/academia/formación corporativa con 1-500 alumnos ✅ Quieres cumplimiento nativo de privacidad de datos (servidor en Brasil, DPA enterprise) ✅ Quieres tutor IA real (multi-agente, RAG per-tenant), no un plugin genérico ✅ Quieres soporte en español/portugués ✅ Quieres gamificación moderna nativa (XP, badges OB 3.0) ✅ No quieres gestionar hosting/actualizaciones/backups ✅ Quieres mobile B2B funcional (App Store/Play Store propio posible) ✅ TCO a 3 años predecible (costo fijo + IA proporcional al uso) ## Cuándo elegir Moodle ✅ Eres una universidad pública con Moodle en producción + plugins personalizados ✅ Tienes equipo TI dedicado (administrador Moodle a tiempo completo) ✅ Necesitas SCORM 2004 + H5P + IMS CP completo (compatibilidad legacy) ✅ Necesitas sellos educacionales oficiales específicos ✅ Quieres control total del código (modificaciones extensas) ✅ Tienes >5000 alumnos y el costo fijo de licencia importa más que las funcionalidades modernas ✅ Quieres evitar el lock-in con un vendor (open-source = salida flexible) ## Costos reales — TCO 3 años ### Escuela de nivel básico 200 alumnos | Ítem | Moodle | Studeia (Escala) | |---|---|---| | Licencia | R$0 | R$54.000 (R$1.500 × 36) | | Hosting | R$3.600 (~R$100/mes) | Incluido | | Admin parcial (10h/mes) | R$36.000 (R$1k/mes consultoría) | R$0 | | Plugins comerciales | R$7.200 (R$200/mes IA + gamif + mobile) | R$0 | | Personalización inicial | R$10.000 (one-shot) | R$0 | | **TOTAL 3 años** | **R$56.800** | **R$54.000** | Studeia ya incluye IA (R$0-2k de costo IA proporcional al uso) y mobile. ### Academia de preparación universitaria 800 alumnos | Ítem | Moodle | Studeia (Enterprise) | |---|---|---| | Licencia | R$0 | R$108.000 (negociar R$3k/mes) | | Hosting robusto | R$18.000 (R$500/mes load balancer + RDS) | Incluido | | DevOps dedicado (20h/mes) | R$108.000 (R$3k/mes) | R$0 | | Plugins + tutor IA + analytics | R$36.000 | R$0 | | **TOTAL 3 años** | **R$162.000** | **R$108.000** | Para >500 alumnos, Studeia Enterprise tiende a ser 30-50% más barato. ## Migración Moodle → Studeia ### Posible - ✅ Contenido: importación IMS CC v1.x (módulos, clases, recursos, quizzes QTI 1.2) - ✅ Alumnos: importación CSV o SCIM provisioning - ✅ Calificaciones: importación CSV - ✅ Estructura de cursos - ✅ LTI: Studeia como herramienta externa hasta la migración completa ### NO soportado nativamente - ❌ Paquetes de contenido H5P (recrear como subtipos interactivos) - ❌ SCORM 2004 (recrear como clases de video + quizzes nativos) - ❌ Plugins personalizados (sin equivalente) - ❌ Plantillas XML personalizadas de Moodle - ❌ Actividades Workshop (más complejas en Moodle) ### Camino recomendado 1. Mes 1: Trial con 2 cursos piloto en Studeia (plan Demo) 2. Mes 2-3: Migrar materiales piloto vía IMS CC + ajustes manuales 3. Mes 4: Migrar alumnos vía SCIM 4. Mes 5-6: Validar funcionalidades (gradebook, reportes para padres, tutor IA) 5. Mes 7+: Migración gradual de cursos restantes 6. Mes 12+: Decidir descontinuar Moodle o mantener en paralelo (cursos legacy vía LTI) ## Veredicto honesto **Para el 80% de las instituciones pequeñas y medianas (1-500 alumnos)**: Studeia gana en TCO, funcionalidades modernas, soporte en español/portugués y tiempo-hasta-valor (deploy = 1 día vs 30 días de Moodle gestionado). **Para el 15% (universidades grandes, ya en Moodle desde hace años)**: Moodle sigue siendo la mejor opción por inercia + ecosistema. Studeia como complemento para cursos nuevos. **Para el 5% (empresas que NO pueden tener datos en SaaS)**: Moodle self-hosted on-premise. Studeia aún no ofrece on-premise. ## Ver también - [Studeia vs Canvas](/comparisons/studeia-vs-canvas) - [Studeia vs Google Classroom](/comparisons/studeia-vs-google-classroom) - [Caso de uso: Academia de preparación universitaria](/use-cases/enem-prep-cursinho) - [Plataforma overview](/platform/overview) ## FAQ **Q: ¿Studeia reemplaza a Moodle?** Depende del contexto. Para instituciones pequeñas/medianas (1-500 alumnos) que quieren SaaS gestionado, IA built-in, soporte en español/portugués y cumplimiento nativo de privacidad de datos: Studeia sí lo reemplaza y elimina el hospedaje/mantenimiento. Para universidades grandes con Moodle ya en producción y ecosistema de plugins personalizados: una migración parcial tiene más sentido (Studeia como complemento para cursos nuevos vía LTI). **Q: ¿Cuál es más barato en 3 años (TCO)?** Moodle: licencia GRATIS + hosting ~$50-300/mes + administrador parcial (~R$3-8k/mes) + plugins de pago (~R$200/mes) + personalización (consultoría) = R$120k-200k en 3 años para 500 alumnos. Studeia Crescimento (50 alumnos R$1.000/mes) o Escala (100 alumnos R$1.500/mes) o Enterprise: R$36k-50k en 3 años. Para >500 alumnos: Studeia Enterprise (bajo consulta) típicamente 30-50% más barato que Moodle gestionado. **Q: ¿Moodle tiene más funcionalidades que Studeia?** Moodle tiene más EXTENSIONES (ecosistema de plugins de terceros). Studeia tiene más funcionalidades NATIVAS modernas: tutor IA multi-agente, gamificación nativa, gradebook con psicometría, mobile B2B Expo, SSO/SCIM enterprise out-of-box, white-label real. Moodle requiere plugins (gratuitos o de pago) para la mayoría de estos recursos. **Q: ¿Moodle es mejor que Studeia en algo?** Sí, en varios puntos: (1) Ecosistema H5P/SCORM/IMS mucho más maduro. (2) Plugins de terceros (>1500 activos). (3) Open-source = control total y personalización del código. (4) Madurez institucional (universidades, gobierno, EAD). (5) Conformidad educacional con sellos oficiales (Studeia aún no los tiene). (6) Comunidad global gigante. **Q: ¿Puedo migrar de Moodle a Studeia?** Sí, parcialmente. La importación IMS Common Cartridge (POST /api/institution/courses/import) trae módulos, clases, recursos básicos y quizzes QTI 1.2. Los paquetes de contenido H5P NO están soportados nativamente (recrear como subtipos interactivos de Studeia). SCORM 2004 NO está soportado. Alumnos: importar vía CSV bulk o SCIM. --- # [es-ES (AI-translated)] Tutor IA: pipeline multi-agente URL: https://docs.studeia.com/features/ai-tutor/overview Locale: es-ES Section: features Updated: 2026-05-23 **Short answer:** El tutor IA de Studeia ejecuta 6 agentes en pipeline: Orchestrator coordina → StudentModelService carga el contexto del alumno → RetrievalAgent busca en RAG → PedagogicalAgent elige la estrategia → LLM responde (con fallback automático) → EvaluationAgent + ContentAgent + SupervisorAgent se ejecutan en background. 3 agentes son TypeScript puro (costo LLM cero), 3 son Haiku background (~$0.003 total). Personalización real basada en ConceptMastery bayesiano. ## Pipeline detallado ### Pre-LLM (síncrono, costo LLM cero) 1. **StudentModelService.getSnapshot(userId, courseId)** - Carga ConceptMastery (distribución Beta por concepto) - Carga misconceptions activas/resolving (con evidence trail) - Carga EpisodicMemory (lo que funcionó antes) - Carga quizContext (avgScore, passRate, totalAttempts, weakAreas) - Carga historial de ChatSession (sliding window 10 msgs) 2. **RetrievalAgent.retrieve(query, studentModel)** - Reformula la query usando contexto (reemplaza "esto", "aquello" por conceptos actuales) - Busca en pgvector con filtros (tenantId, courseId) - Boost por áreas débiles en quizzes (`quizWeakAreas` del studentModel) - Top-K con reranking semántico 3. **PedagogicalAgent.select(studentModel, query)** - Evalúa el mastery promedio + dominio específico de la query - Aplica ajustes (chat-quiz divergence, edad, estilo de aprendizaje) - Retorna estrategia + adición al system prompt 4. **buildEnrichedPrompt(query, studentModel, ragChunks, strategy, misconceptions)** - Construye el system prompt con: - Estrategia pedagógica seleccionada - Contexto RAG (top-5 chunks con source attribution) - Misconceptions activas (con instrucciones para abordarlas) - Intentos recientes de quiz (memoria inter-turno) - Contexto de inline quiz trigger (si hubo un quiz reciente) ### LLM principal (streaming, SSE) `router.stream(taskType: "chat_tutor", messages, options)` resuelve el proveedor vía TenantTaskModelConfig: - Claude (primary) → OpenAI → xAI Grok → Google Gemini (cadena de fallback) - Circuit breaker por proveedor (estado en Redis) - Middleware de metering: rate limit + verificación de créditos + calculadora de costos - Streaming vía Server-Sent Events al cliente El LLM puede emitir tool calls especiales: - `[INLINE_QUIZ]{...}[/INLINE_QUIZ]` — quiz interactivo renderizado en el chat - `present_quiz` tool call — formato Vercel AI SDK ### Post-LLM (background vía after(), fire-and-forget) 5. **EvaluationAgent.evaluate(turn, studentModel)** — Haiku, ~$0.001 - Clasifica la comprensión: correct | partial | incorrect | unclear - Detecta StudentMisconception con: - source: "chat" - sourceSessionId - contextSnippet (máx. 500 chars) - concepts[] (mapeados a ConceptMastery) - Actualiza ConceptMastery (actualización Bayesiana vía beta(alpha+success, beta+failure)) - Llama a MisconceptionResolutionService.checkAndTransition (máquina de estados) 6. **ContentAgent.preGenerate(studentModel, conceptId)** — Haiku, ~$0.001 - Genera un ejercicio de seguimiento basado en conceptos débiles - Almacena en Redis (TTL 30min) para servir en el próximo turno - Reduce la latencia percibida por el alumno 7. **SessionSummarizer** (cada 10 turnos) — Haiku, ~$0.001 - Resume el historial largo - Reemplaza mensajes antiguos en el sliding window - Preserva los insights pedagógicos relevantes 8. **SupervisorAgent.run(turn, courseContext)** — Haiku, ~$0.001 - Clasifica la severidad (5 niveles) + categoría (8 tipos) - Crea AiSupervisorIncident si severity != "none" - Aplica strikes / quarantine / safety cooldown según las reglas ## Configuración por admin ### TenantTaskModelConfig El admin elige proveedor+modelo por tipo de tarea: ``` chat_tutor → Claude Sonnet 4.6 (o GPT-4o, o Grok-3, etc) chat_evaluation → Claude Haiku chat_summarization → Claude Haiku chat_supervisor → Claude Haiku content_generation → Claude Haiku course_review → Claude Sonnet gamification_agent → Claude Sonnet course_agent → Claude Sonnet ``` ### PedagogicalConfig Configurabilidad pedagógica por tenant: - masteryThresholds: umbrales para cambiar de estrategia (default 0.3, 0.5, 0.7, 0.9) - domainOverrides: ajuste por dominio (ej: matemáticas usa scaffolding más agresivo) - ageOverrides: ajuste por rango de edad (niño = direct_instruction más frecuente) - learningStyleOverrides: visual, auditivo, kinestésico ## Personalización del prompt template El admin institucional puede editar el system prompt del tutor vía PromptTemplate (en la base de datos): - Por taskType (chat_tutor) - Por proveedor (Anthropic, OpenAI, Google, xAI — variantes optimizadas) - Por locale (pt-BR, en-US, es-ES, fr-FR) - Por tenant (o null = global) - Por curso (override per-course) ## Limitaciones técnicas - **Latencia first-token**: 800-1500ms (incluyendo el pipeline pre-LLM) - **Latencia total del turno**: 2-8s para una respuesta promedio (~300 palabras) - **Context window**: limitado por el proveedor (Claude Sonnet 4.6 = 200K, GPT-4o = 128K) - **Idiomas**: el tutor responde en el idioma del alumno, pero internamente el pipeline es bilingüe (en/pt) - **Imágenes**: el tutor acepta imágenes en el input (multimodal Claude/GPT/Gemini), pero el RAG es solo texto - **Voz**: no implementado (roadmap) ## Ver también - [Tutor IA: visión ejecutiva](/platform/ai-tutor) - [RAG Ingestion](/features/ai-tutor/rag-ingestion) - [Agente Supervisor](/features/ai-tutor/safety-supervisor) ## FAQ **Q: ¿Cuántos agentes IA usa el tutor?** 6 agentes activos: Orchestrator (TypeScript puro), RetrievalAgent (TypeScript puro), PedagogicalAgent (TypeScript puro), LLM principal (Claude/GPT/Grok/Gemini con fallback), EvaluationAgent (Haiku background), ContentAgent (Haiku background), SupervisorAgent (Haiku background). 3 son deterministas (sin costo LLM), 3 son background fire-and-forget (costo ~$0.003 total por turno). **Q: ¿Cuánto cuesta un turno completo del tutor?** Típicamente $0.005-$0.05 por turno completo. Desglose: LLM principal (Sonnet) $0.005-$0.04 + EvaluationAgent (Haiku) $0.001 + ContentAgent (Haiku) $0.001 + SupervisorAgent (Haiku) $0.001. Los mensajes cortos sobre conceptos simples pueden costar $0.001 (solo Haiku). **Q: ¿Puedo deshabilitar el tutor IA para un curso específico?** Sí. Course.aiTutorEnabled (boolean, default true). Toggle de admin institucional en /institution/courses/[id]/settings. La barra lateral del alumno y el sub-nav del curso ocultan 'Chat Tutor' cuando está deshabilitado. --- # [es-ES (AI-translated)] RAG Ingestion: tutor IA con material del curso URL: https://docs.studeia.com/features/ai-tutor/rag-ingestion Locale: es-ES Section: features Updated: 2026-05-23 **Short answer:** RAG Ingestion en Studeia permite que el tutor IA cite el material de tu curso. POST /api/institution/courses/[id]/rag-ingest extrae texto de lecciones (slides, videos con transcripción, PDFs, quizzes), los divide en chunks de 800 tokens con 200 de overlap, genera embeddings vía Voyage AI (1024 dims, fallback OpenAI) y los almacena con filtro tenant+course. Modos full o incremental. autoSyncRag=true reingerir automáticamente al editar lecciones. ## Cómo funciona ``` POST /api/institution/courses/[courseId]/rag-ingest Body: { "mode": "full" | "incremental" } ↓ 1. Lista las lecciones publicadas del curso 2. Para cada lección, extrae texto por tipo: - rich_text → strip HTML - slides → join text elements + speaker notes - quiz → join question + explanation por pregunta - pdf → document-extractor (PyPDF + Adobe extract fallback) - video → LiveClassTranscription.transcriptionText (si aprobada) - assignment → instructions 3. Chunking: 800 tokens, 200 overlap, preserva estructura semántica 4. Embeddings vía Voyage AI (1024 dims, fallback OpenAI) 5. Crea ContentBlock + ContentEmbedding con metadata: { source: "course_lesson", courseId, lessonId, lessonTitle, moduleTitle, ingestionId } 6. Estado final en CourseRagIngestion ``` ## Modos ### `mode: "full"` Elimina TODOS los ContentBlock + ContentEmbedding del curso y reingerir todo. Cuándo usarlo: - Primera ingestión del curso - Tras una reorganización mayor (módulos renombrados, lecciones reordenadas) - Sospecha de embeddings corruptos Costo: proporcional al tamaño total del curso. Típicamente $0.004 por 30 lecciones. ### `mode: "incremental"` Identifica las lecciones modificadas desde la última ingestión (`updatedAt > lastIngestionAt`), elimina solo los chunks de esas lecciones y las reingerir. Cuándo usarlo: - Ediciones puntuales - Auto-sync (recomendado para producción) - Adición de nuevas lecciones Costo: proporcional al delta. Típicamente $0.0001 por lección modificada. ## Auto-sync `Course.autoSyncRag: Boolean @default(false)` Cuando está en `true`: - Cada edición de lección vía API `/api/institution/courses/[id]/modules/[mid]/lessons/[lid]` dispara una reingestión incremental - Se ejecuta vía Next.js `after()` (no bloquea la request del admin) - Los fallos silenciosos se registran en `CourseRagIngestion.errors` JSON Recomendado para producción. Mantenlo desactivado durante la configuración inicial del curso para evitar embeddings desperdiciados. ## Estado y debug ``` GET /api/institution/courses/[courseId]/rag-ingest Response: { "ingestionId": "uuid", "courseId": "uuid", "mode": "incremental", "status": "completed", // pending | running | completed | failed "startedAt": "2026-05-23T10:00:00Z", "completedAt": "2026-05-23T10:01:34Z", "stats": { "lessonsProcessed": 5, "chunksCreated": 47, "tokensEmbedded": 12450, "costUsd": 0.0006 }, "errors": [] } ``` ## Proveedor de embeddings | Proveedor | Modelo | Dims | Costo/1K tokens | |---|---|---|---| | Voyage AI (primary) | voyage-3 | 1024 | $0.00005 | | OpenAI (fallback) | text-embedding-3-large (con `dimensions: 1024`) | 1024 | $0.00013 | Direct fetch (AI SDK v3 no soporta el parámetro `dimensions`): ```ts // Voyage AI fetch("https://api.voyageai.com/v1/embeddings", { body: JSON.stringify({ model: "voyage-3", input: texts, input_type: "document" }) }) ``` ## Retrieval en runtime Durante el chat del tutor, RetrievalAgent ejecuta: ```ts const chunks = await retrieve({ query: reformulatedQuery, filters: { tenantId, courseId }, k: 10, tenantOnlyMode: true, // excluye fallback hacia contenido global boostByWeakAreas: studentModel.quizContext.weakAreas }); ``` `tenantOnlyMode: true` garantiza que el tutor NUNCA cite contenido de otro tenant — incluso si existe contenido similar en la base de datos. ## Eliminar RAG del curso ``` DELETE /api/institution/courses/[courseId]/rag-ingest ``` Elimina todos los ContentBlock + ContentEmbedding + CourseRagIngestion del curso. Útil para archivar cursos sin ocupar espacio en pgvector. ## Limitaciones - **Imágenes**: no se convierten en embeddings. Roadmap: descripción automática vía vision LLM antes del embedding. - **Ecuaciones matemáticas**: se extraen como texto LaTeX-like. El RAG funciona, pero la calidad depende del markup original. - **Videos sin transcripción**: no se ingieren. Configura la auto-transcripción en MediaAsset (Whisper → Google STT) antes. - **Tamaño máximo por curso**: pgvector soporta millones de vectores, pero la latencia de retrieval aumenta. Más de 10K chunks por curso puede volverse lento — considera dividir en sub-cursos. ## Ver también - [Tutor IA Overview](/features/ai-tutor/overview) - [Media Transcription](/features/cms/media-transcription) ## FAQ **Q: ¿El tutor IA cita el material de mi curso?** Sí, pero primero debes ingerir el curso en el RAG. POST /api/institution/courses/[id]/rag-ingest (modes: full | incremental). El sistema extrae texto de todas las lecciones publicadas, las divide en chunks, genera embeddings vía Voyage AI y los almacena con filtro por tenantId+courseId. Después de eso, todas las conversaciones del tutor relacionadas con el curso citan el material correcto. **Q: ¿Cómo actualizar el RAG cuando edito una lección?** Establece Course.autoSyncRag=true. Cada edición de lección vía API dispara una reingestión incremental mediante after() (en segundo plano, no bloquea el admin). Alternativamente, dispáralo manualmente: POST /api/institution/courses/[id]/rag-ingest body {mode: 'incremental'}. **Q: ¿Cuánto cuesta ingerir un curso?** Embeddings vía Voyage AI: ~$0.00005/1K tokens. Un curso promedio (30 lecciones, 50K palabras = ~70K tokens) cuesta ~$0.004 en embeddings en la primera ingestión. El modo incremental es proporcional al delta. Sin costo recurrente — los embeddings quedan almacenados en pgvector. **Q: ¿Qué tipos de lecciones se ingieren?** rich_text (strip HTML), slides (elementos de texto + notas del presentador), quiz (pregunta + explicación), pdf (document-extractor: PyPDF→Adobe extract fallback), video (LiveClassTranscription.transcriptionText cuando esté disponible), assignment (instructions). Los tipos external_link y live_class sin transcripción no se ingieren. --- # [es-ES (AI-translated)] Agente Supervisor: moderación IA del chat tutor URL: https://docs.studeia.com/features/ai-tutor/safety-supervisor Locale: es-ES Section: features Updated: 2026-05-23 **Short answer:** El Agente Supervisor IA de Studeia modera el chat tutor en background tras cada turno usando Claude Haiku (~$0.001/turno). Clasifica en 5 niveles de severity (low/medium/high/critical/safety) y 8 categorías (lenguaje inapropiado, violencia, ilegal, sexual, off_topic, harassment, self_harm, jailbreak_attempt). 3 strikes en 7 días = cuarentena 48h. Self-harm (severity=safety) NUNCA penaliza — muestra acogida + recursos de crisis (CVV 188, SAMU 192) + alerta URGENTE al admin institucional. ## Filosofía La educación en línea con menores y contextos sensibles (depresión, ansiedad preuniversitaria, bullying) exige moderación IA real, no solo disclaimers. Studeia adopta: 1. **Moderación en background, no gatekeeping** — el supervisor analiza tras la respuesta, no bloquea el stream. El alumno recibe la respuesta normal y el supervisor actúa si es necesario en los turnos siguientes. 2. **Self-harm como crisis, no infracción** — nunca penalizar al alumno en sufrimiento. 3. **Cascada de configuración** — el admin puede deshabilitar por tenant o por curso cuando el contexto lo requiere (anatomía, farmacología, psicología). 4. **Auditoría completa** — cada incidente, transición de estado, cuarentena y apelación queda registrado en AdminAuditLog. ## Modelo de datos ``` AiSupervisorIncident id, userId, tenantId, courseId? severity: low | medium | high | critical | safety categories: [tipos] status: open | acknowledged | resolved | dismissed | auto_resolved messagesSnapshot: JSON (PII — retención 2 años vía cron) supervisorReasoning: string countedAsStrike: boolean detectedAt, resolvedAt appealText: string (máx. 500 chars, 1 por cuarentena) AiTutorQuarantine id, userId, tenantId reason: string expiresAt: timestamp liftedBy: userId? (admin que liberó manualmente) ``` ## Pipeline supervisor ``` Turno de chat completo ↓ (after()) SupervisorAgent.run({ userId, tenantId, courseId, messages: lastNTurns, isMinor: user.isMinor, courseContext: { title, description } // whitelist contextual }) ↓ LLM (Haiku) clasifica: severity + categories + reasoning ↓ decideAction({ severity, categories, recentStrikes, isMinor, isSafety }) ↓ Acciones posibles: - none (no registra) - warn (notificación in-app) - register (crea incident, countedAsStrike) - quarantine (crea AiTutorQuarantine 48h) - safety (cooldown Redis 24h + acogida + admin URGENTE) ``` ## Reglas de severidad | Severity | Categoría típica | Acción 1.ª infracción | Acción 2.ª+ infracción | |---|---|---|---| | **low** | lenguaje inapropiado leve | warn | strike +1; 3 strikes = cuarentena 48h | | **medium** | off-topic persistente, jailbreak | warn + register | strike +1; 3 strikes = cuarentena 48h | | **high** | violencia, sexual, ilegal | cuarentena 48h | cuarentena 7 días | | **critical** | amenaza a otros, contenido extremo | cuarentena 7 días | cuarentena indefinida + admin review | | **safety** | self_harm | NUNCA cuarentena — cooldown 24h + acogida + admin URGENTE | igual | ## Self-harm: tratamiento especial Cuando `severity === "safety"`: 1. **El stream del tutor se interrumpe inmediatamente** — el tutor no responde algo inapropiado ante una crisis 2. **Mensaje de acogida** mostrado al alumno: > "Estoy aquí contigo. Si estás pasando por un momento difícil, por favor busca ayuda: > - CVV 188 (24h, llamada gratuita, anónima) > - SAMU 192 > - [Centro de Valorização da Vida](https://cvv.org.br) — chat online > No estás solo/a." 3. **Cooldown Redis** `tutor-safety-cooldown:{userId}` con TTL configurable (`SUPERVISOR_SAFETY_COOLDOWN_HOURS`, default 24h) 4. **Email URGENTE inmediato** al admin institucional vía template `ai_supervisor_safety_urgent` 5. **Incidente creado en estado 'open'** — el admin DEBE revisar 6. **NUNCA strike** (countedAsStrike=false), NUNCA cuarentena, NUNCA penalización ## Apelación de cuarentena El alumno en cuarentena ve el componente `QuarantineNotice` (web + equivalente móvil): - Explica el motivo (severity + categoría, sin exponer el reasoning interno del supervisor) - Muestra cuenta regresiva hasta la expiración - Formulario de apelación: máx. 500 caracteres, 1 por cuarentena - El envío crea `appealText` en el incidente + notifica al admin institucional - El admin puede: acknowledge, dismiss (libera la cuarentena), resolve, o ignorar (la cuarentena expira sola) ## Configuración ### Cascada de habilitación ``` Course.supervisorEnabled (null = inherit) ↓ si null Tenant.supervisorEnabled (null = inherit) ↓ si null default = true para B2B (con tenant) ``` Caché Redis versionado: `supervisor-flag-version:{tenantId}` + clave `supervisor-enabled:v{N}:{tenantId}:{courseId}`. Toda mutación llama a `bumpSupervisorFlagVersion(tenantId)` que incrementa la versión — invalida lógicamente todas las claves sin SCAN+DEL. ### Solo el admin global puede editar - `PATCH /api/admin/tenants/[id]/supervisor` — toggle por tenant - `PATCH /api/admin/courses/[id]/supervisor` — toggle por curso - Ambas requieren `role === "admin"` global + auditadas en AdminAuditLog ### Prompt del supervisor Editado ÚNICAMENTE por admin global (regla crítica 141): `PromptTemplate` con `taskType = chat_supervisor` acepta ÚNICAMENTE `tenantId = null`. Los endpoints `/api/institution/prompts/*` rechazan este taskType con 403. ## Auditoría + retención - Cada incidente registrado con `messagesSnapshot` (PII) - Cron diario `/api/cron/supervisor-maintenance`: - Auto-expira cuarentenas vencidas - Purga `messagesSnapshot=[]` + `appealText=null` tras 2 años (regla crítica 145) - Envía digest `ai_supervisor_digest` al admin agrupando incidentes open/acknowledged de las últimas 24h - AdminAuditLog: `ai_supervisor.incident.created/acknowledged/dismissed/resolved`, `quarantine.lift`, `prompt.update`, `tenant.toggle`, `course.toggle` ## Protección de datos - `GET /api/user/data-export` incluye `aiSupervisor.{incidents, quarantines}` del usuario - `DELETE /api/user/account` anonimiza `messagesSnapshot=[]` + `appealText=null` manteniendo severity/categories para retención fiscal - Los listados (`/api/institution/ai-supervisor/incidents`) usan `select` explícito que OMITE messagesSnapshot y reasoning — solo la ruta de detalle los expone ## Limitaciones conocidas - **Falso positivo en contexto médico/farmacología**: el contexto del curso (courseContext.title) se envía al supervisor para whitelist. Sin embargo, puede fallar en casos extremos. Solución: deshabilitar el supervisor para cursos específicos. - **Idioma**: el prompt del supervisor está localizado (4 idiomas), pero la clasificación puede presentar pequeñas variaciones de calidad entre PT-BR y EN-US. - **Jailbreak sofisticado**: ataques de prompt injection muy elaborados pueden pasar. Mitigación: defensa en capas (system prompt + supervisor + rate limit). - **Equilibrio privacidad vs. seguridad**: messagesSnapshot es PII. Retención máxima 2 años. El admin global lo ve en /admin/ai-supervisor/incidents/[id] — auditado. ## Ver también - [Tutor IA Overview](/features/ai-tutor/overview) - [Tutor IA: visión ejecutiva](/platform/ai-tutor) - [Cumplimiento de protección de datos](/legal/lgpd-rights-guide) ## FAQ **Q: ¿Cómo protege Studeia a los alumnos en el chat IA?** Tres capas: (1) El system prompt del tutor incluye guardrails (sin consejos médicos/legales/financieros, sin temas inapropiados). (2) El Agente Supervisor (Haiku, background, ~$0.001) clasifica cada turno en 5 niveles de severity x 8 categorías. (3) Para self-harm (severity=safety), el tutor se interrumpe con un mensaje de acogida + recursos de crisis (CVV 188, SAMU 192) + notificación URGENTE al admin. **Q: Si el alumno escribe algo inapropiado, ¿qué ocurre?** Depende de la severidad. LOW (1.ª infracción): advertencia al alumno. MEDIUM: advertencia + incidente registrado. 3 strikes (LOW o MEDIUM en 7 días): cuarentena 48h. CRITICAL: cuarentena 7 días + notificación admin. SAFETY (self-harm): NUNCA penalización — acogida + recursos de crisis + alerta URGENTE. **Q: ¿La cuarentena impide al alumno usar la plataforma?** Solo el chat tutor IA. El alumno mantiene acceso a cursos, clases, materiales, gradebook y mensajes con el profesor. El alumno puede enviar una apelación (máx. 500 caracteres, 1 por cuarentena) que es revisada por el admin institucional. **Q: ¿Puedo deshabilitar el supervisor para un curso específico?** Sí. Cascada: Course.supervisorEnabled (null = inherit) → Tenant.supervisorEnabled → default ON. El admin global edita vía /admin/ai-supervisor/tenants o /admin/ai-supervisor/courses. Útil para cursos con contenido médico/farmacología/anatomía donde términos sensibles son legítimos. **Q: ¿El self-harm se trata como una infracción?** NUNCA. El self-harm (severity=safety) es una crisis, no una infracción. El sistema: (1) Interrumpe al tutor con un mensaje de acogida. (2) Muestra recursos de crisis — CVV 188 (24h, anónimo), SAMU 192, Centro de Valorização da Vida online. (3) Notifica al admin URGENTE por email inmediato. (4) Crea un incidente en estado 'open' para revisión humana. (5) NUNCA aplica strike, NUNCA crea cuarentena. --- # [es-ES (AI-translated)] Gradebook: notas, categorías y rúbricas URL: https://docs.studeia.com/features/assessment/gradebook Locale: es-ES Section: features Updated: 2026-05-23 **Short answer:** El Gradebook de Studeia organiza las notas mediante GradeCategory (pesos), GradeItem (actividades) y Grade (notas individuales). Soporta rúbricas multi-criterio, breakdown expandible para alumnos, exportación CSV, flags de integridad inline (ShieldAlert para quiz con tab switches/time anomalies), categorías drop-lowest configurables, penalización por entrega tardía automática y release policy (immediate/manual/scheduled). ## Modelo ``` GradeCategory (peso, drop_lowest_n, late_penalty_pct) └── GradeItem (actividad — quiz, assignment, manual) └── Grade (nota por alumno) └── Rubric (opcional — criterios) ``` ## Cálculo ``` courseGrade = Σ (categoryAvg × categoryWeight) / totalWeight categoryAvg = average(itemAvgs después de drop_lowest) itemAvg = Σ studentGrades / itemMaxScore × 100 ``` La penalización por entrega tardía se aplica si `submittedAt > dueDate` (configurable por categoría). ## Rúbricas ```json { "name": "Redacción ENEM", "criteria": [ { "name": "Dominio de la norma culta", "weight": 0.2, "levels": [ { "score": 200, "label": "Excelente", "description": "..." }, { "score": 160, "label": "Bueno", "description": "..." }, { "score": 120, "label": "Regular", "description": "..." } ] }, { "name": "Comprensión del tema", "weight": 0.2, "levels": [...] } ] } ``` El alumno ve el breakdown expandible: nota final + cada criterio + comentario. ## Flags de integridad Inline en el gradebook junto a cada nota de quiz: - 🛡️ ShieldAlert rojo → tabSwitchCount > 5 O avgTimePerQuestion < 2s - 🛡️ ShieldAlert amarillo → 2-5 tab switches O 2-5s por pregunta - El tooltip detalla: "Tab switches: 8, time per question: 1.2s avg" El profesor decide la acción (anular, mantener, revisar). ## Exportación `GET /api/institution/courses/[id]/gradebook/export?format=csv` devuelve un CSV con: - Alumno - Email - Cada GradeItem como columna (nota raw + nota ponderada) - Total final - Estado (passing/failing basado en passingScore) Compatible con Google Sheets y Excel. ## Ver también - [Quiz Engine](/features/assessment/quiz-engine) ## FAQ **Q: ¿Cómo calculo el promedio ponderado?** Crea una GradeCategory con weight (ej: 'Quizzes' 40%, 'Exámenes' 60%). Cada GradeItem (actividad) pertenece a una categoría. Studeia calcula el promedio ponderado automáticamente. **Q: ¿Puedo usar rúbricas en assignments?** Sí. Crea una Rubric con criterios (cada uno con escala 1-5 o personalizada). Vincúlala a un GradeItem o assignment lesson. Al corregir, el profesor evalúa criterio por criterio y el sistema calcula la nota final + breakdown expandible para el alumno. **Q: ¿El alumno ve la nota de inmediato?** Depende: GradeItem.releasePolicy lo controla. Opciones: 'immediate' (visible al publicar), 'manual' (el profesor decide), 'scheduled' (releaseAt date). Quiz autocorregido con showResultsToStudent=true: inmediato. **Q: ¿Tiene detección de plagio?** Para assignments de texto: integración con Turnitin vía LTI (roadmap). Para quiz: integridad académica nativa (tab switch, time anomalies — mostrada como ShieldAlert en el gradebook). Para ensayos: detección LLM opcional (el administrador la habilita). --- # [es-ES (AI-translated)] Quiz Engine: configuración, integridad y analytics psicométricas URL: https://docs.studeia.com/features/assessment/quiz-engine Locale: es-ES Section: features Updated: 2026-05-23 **Short answer:** Quiz Engine de Studeia: 8+ tipos de pregunta auto-corregidas (multiple_choice, true_false, fill_blank, matching, ordering, numeric, short_answer, essay). Configuración con maxAttempts, timeLimitMinutes, shuffleQuestions/Options, accessCode, scoringPolicy (highest/latest/average), reviewMode. Integridad académica (tab switch, time anomalies). Analytics psicométricas (Cronbach alpha, point-biserial discrimination, item difficulty, distractor analysis). Question bank reutilizable. ## Tipos de pregunta | Tipo | Auto-corrección | Casos de uso | |---|---|---| | multiple_choice | Sí | Conocimiento factual, conceptos | | true_false | Sí | Verificación rápida | | fill_blank | Sí (normalización) | Vocabulario, fórmulas | | matching | Sí | Asociaciones (palabra-definición) | | ordering | Sí | Secuencia lógica/cronológica | | numeric | Sí (con tolerance) | Cálculos matemáticos/físicos | | short_answer | Sí (normalización + sinónimos) | Respuestas cortas | | essay | Manual (o LLM opcional) | Redacción, disertación | ## Configuración del quiz `QuizConfiguration` en content JSON: ```json { "maxAttempts": 3, "timeLimitMinutes": 30, "shuffleQuestions": true, "shuffleOptions": true, "accessCode": "ENEM2026", "scoringPolicy": "highest", // highest | latest | average "reviewMode": "after_submit", // after_submit | after_due_date | never "passingScore": 70, "showResultsToStudent": true, "allowGoBack": false // si false, el alumno no puede volver a preguntas anteriores } ``` ## Flujo de envío ``` POST /api/courses/[courseId]/lessons/[lessonId]/quiz/start ↓ - Valida matrícula + lesson availability (checkLessonAvailability) - Valida que maxAttempts no haya sido excedido - Valida accessCode si está configurado - Crea QuizAttempt con optionOrders (shuffles persistidos) - Retorna preguntas SIN correctIndex (regla crítica 66) ↓ El alumno responde (el cliente envía eventos de tab switch en background) ↓ POST /api/courses/[courseId]/lessons/[lessonId]/quiz/submit ↓ - remapStudentAnswer (revierte shuffle vía optionOrders) - Auto-corrección por tipo - Calcula score - Crea/actualiza LessonCompletion (scoringPolicy decide) - Dispara QuizEvaluationService: - Actualiza ConceptMastery por concepts[] de la pregunta - Detecta misconceptions (Haiku, ~$0.001) - Crea Grade en el gradebook (si GradeItem asociada) - Dispara automatización quiz_submitted - Dispara handleGamificationEvent (XP, badges, contests) ``` ## Integridad académica QuizAttempt rastrea en background: - `tabSwitchCount` — cuántas veces el alumno salió de la pestaña - `copyPasteCount` — eventos paste detectados - `blurEvents` — viewport blur - `avgTimePerQuestionSec` — tiempo promedio por pregunta - `flagged: boolean` — true si alguna señal supera el threshold El gradebook muestra el ícono ShieldAlert + tooltip "Tab switches: 8, time per question: 1.2s avg". El profesor decide si anula o ignora. ## Analytics psicométricas `/api/institution/courses/[id]/lessons/[lid]/quiz-analytics` retorna: ### Item difficulty (p-value) ``` difficulty = total_correctas / total_intentos ``` - < 0.3: muy difícil (revisar pregunta) - 0.3-0.7: ideal - > 0.85: muy fácil ### Point-biserial discrimination Correlación entre acertar el ítem y el score total. Identifica preguntas que NO discriminan entre buenos y malos alumnos. - > 0.4: excelente - 0.2-0.4: aceptable - < 0.2: deficiente (eliminar/reformular) ### Distractor analysis (MC y TF) % de alumnos que eligieron cada alternativa incorrecta. Pista de misconceptions comunes: ``` Q: "¿Capital de Australia?" A) Sydney (40% — misconception popular) ← FLAG B) Canberra (45% — correcta) C) Melbourne (10%) D) Brisbane (5%) ``` ### Cronbach's alpha (consistencia interna) Mide si las preguntas del quiz están evaluando el mismo constructo. - > 0.7: aceptable - 0.6-0.7: cuestionable - < 0.6: rediseñar el quiz Requiere ≥ 30 intentos para confiabilidad estadística. ### Score distribution 10 buckets de 0-100%. Ayuda a detectar quizzes con ceiling/floor effect. ## Question bank `QuestionBank` reutiliza preguntas en múltiples quizzes: ``` POST /api/institution/question-banks POST /api/institution/question-banks/[id]/items ``` El editor de quiz tiene un **picker** que filtra por banco, tipo, dificultad, etiquetas. La importación selecciona N preguntas aleatorias del banco. Exporters: - GIFT format (compatible con Moodle, Canvas, Blackboard) - CSV (para edición en planilla) El question bank puede ser **ingerido en el RAG** para que el tutor IA también acceda: `POST /api/institution/question-banks/[id]/rag-ingest` ## Límites y cuotas - Máximo 200 preguntas por quiz (UX) - Máximo 1000 preguntas por question bank (performance) - Time limit mínimo 1 minuto, máximo 360 minutos (6h) - Max attempts: 1-99 o `null` (ilimitado) ## Honestidad técnica Lo que Studeia hace bien: - IA multi-proveedor para detección de misconceptions - Analytics psicométricas en UI (pocos LMS las ofrecen) - Question bank con RAG ingestion - Integridad académica pasiva (sin proctoring intrusivo) Lo que Studeia NO hace (aún): - Proctoring con webcam/micrófono (privacy concerns) - Lockdown browser - IP whitelist por quiz - Question pooling avanzado (Canvas Quizzes 2.0 lo tiene mejor) - Adaptive testing (CAT) — roadmap ## Ver también - [Gradebook](/features/assessment/gradebook) - [Tipos de clase](/features/cms/lesson-types) ## FAQ **Q: ¿Cuántos tipos de pregunta soporta Studeia?** 8+ tipos: multiple_choice, true_false, fill_blank, matching (pares), ordering (secuencia), numeric (con tolerancia), short_answer (con normalización), essay. 7 son auto-corregidos (essay es manual o vía LLM si está habilitado). **Q: ¿Cómo detectar copia/pegado en un quiz?** Integridad académica incorporada: detección de cambio de pestaña (incrementa QuizAttempt.tabSwitchCount), anomalías de tiempo (respuesta en <2s indica adivinanza o copia), detección de copy/paste, eventos de viewport blur. Los flags se muestran en el gradebook con ícono ShieldAlert + tooltip explicativo. **Q: ¿Cómo evitar que los alumnos compartan respuestas?** Combina varias estrategias: shuffleQuestions=true (orden diferente por alumno), shuffleOptions=true (alternativas mezcladas), accessCode (código que el profesor entrega en el horario del quiz), timeLimitMinutes (auto-submit al expirar), maxAttempts=1 (1 intento único). Preguntas aleatorizadas vía question bank con etiquetas. **Q: ¿Qué analytics ofrece Studeia para quiz?** Analytics psicométricas: item difficulty (% de acierto), point-biserial discrimination (correlación ítem-total), distractor analysis (qué alternativa incorrecta es más popular = pista de misconception), Cronbach's alpha (consistencia interna), score distribution (10 buckets), flags para preguntas problemáticas. Comparable a lo que Canvas Quizzes ofrece + algunas extensiones. **Q: ¿El quiz tiene análisis individual por alumno?** Sí. QuizAttempt registra cada intento con timestamp, answers, score, timeSpent, integrity flags. El alumno ve el historial en /grades/. El profesor ve el detalle en /institution/courses/[id]/lessons/[lid]/attempts. Incluye huella de tiempo por pregunta. --- # [es-ES (AI-translated)] Automatizaciones (mini-n8n nativo) URL: https://docs.studeia.com/features/automations/overview Locale: es-ES Section: features Updated: 2026-05-23 **Short answer:** Studeia tiene un motor de automatizaciones 'mini-n8n' built-in. Patrón: Disparador → Condición → Acción. 3 tipos de trigger (evento de la plataforma, cron programado, webhook público). 14+ eventos (lesson_completed, quiz_submitted, enrollment_created, forum_post_created, scheduled_trigger, etc). 8 acciones (send_notification, add_tag, remove_tag, create_announcement, send_webhook, send_web_request, enroll_user, trigger_automation). UI wizard de 4 pasos + historial de ejecuciones. ## Patrón Disparador → Condición → Acción ``` Trigger (event, scheduled, o webhook) ↓ Condition (lógica AND/OR, con rules sobre user.*, event.*) ↓ Action (una o más, ejecutadas secuencialmente) ``` ## Triggers (3 tipos) ### 1. event Disparado por eventos de la plataforma mediante `emitAutomationEvent()` en `after()`. ```json { "type": "event", "config": { "eventName": "lesson_completed", "filters": {} } } ``` Eventos soportados: `lesson_completed`, `module_completed`, `course_completed`, `quiz_submitted`, `enrollment_created`, `enrollment_completed`, `forum_post_created`, `forum_reply_created`, `grade_posted`, `announcement_created`, `live_class_started`, `student_inactive`, `tag_added_to_user`, `tag_removed_from_user`, `webhook_received`, `scheduled_trigger`. ### 2. scheduled Basado en cron. ```json { "type": "scheduled", "config": { "mode": "interval|daily|weekly|cron", "hours": 24, "time": "08:00", "timezone": "America/Sao_Paulo" } } ``` Procesado por `GET /api/cron/automations` (CRON_SECRET). ### 3. webhook Endpoint público autenticado por token hexadecimal de 64 caracteres. ``` URL: /api/automations/webhook/[token] GET → health check POST → dispara la automatización (el body JSON se convertirá en event.data) ``` ## Conditions ```json { "logic": "and", "rules": [ { "field": "user.role", "operator": "eq", "value": "student" }, { "field": "event.score", "operator": "gte", "value": 80 } ] } ``` Operadores: `eq, neq, gt, gte, lt, lte, contains, not_contains, in, not_in`. Campos accesibles: - `user.*` — id, name, email, role, tags - `event.*` — campos del evento (courseId, score, lessonTitle, etc) Se soportan grupos anidados (AND/OR). ## Actions (8 tipos) | Acción | Función | |---|---| | send_notification | Notificación in-app (trigger_user o users_with_tag) | | add_tag | Agregar UserTag | | remove_tag | Eliminar UserTag | | create_announcement | Crea un Announcement + notifica a los alumnos (curso o tenant) | | send_webhook | POST/PUT a URL externa (con prevención SSRF) | | send_web_request | GET/POST/PUT/DELETE a API externa | | enroll_user | Matricula al trigger_user en un curso | | trigger_automation | Encadena otra automatización (profundidad máx. 5) | ### Interpolación de plantillas Las cadenas en las acciones soportan `{{placeholders}}`: - `{{user.name}}`, `{{user.email}}`, `{{user.role}}` - `{{event.courseId}}`, `{{event.score}}`, `{{event.lessonTitle}}` ## Seguridad - **Aislamiento por tenant**: todas las consultas filtran por tenantId. Una automatización de un tenant NUNCA se ejecuta para un usuario de otro. - **Prevención SSRF**: `url-validator.ts` bloquea IPs privadas, localhost y endpoints de metadata (169.254.169.254). IPv4 + IPv6. - **Timeout HTTP**: 10s mediante AbortController. - **Token webhook**: hexadecimal de 64 caracteres, rotable. - **Profundidad de cadena**: máx. 5 niveles de trigger_automation recursivo. - **Rate limit**: maxRunsPerHour/maxRunsPerDay por automatización (Redis INCR, fallback a conteo en DB). ## Ejemplo: notificar al padre/tutor cuando un alumno menor está inactivo 5 días ```json { "name": "Alerta de inactividad — menores", "trigger": { "type": "event", "config": { "eventName": "student_inactive" } }, "conditions": { "logic": "and", "rules": [ { "field": "user.role", "operator": "eq", "value": "student" }, { "field": "user.isMinor", "operator": "eq", "value": true }, { "field": "event.inactiveDays", "operator": "gte", "value": 5 } ] }, "actions": [ { "type": "send_notification", "config": { "recipient": "users_with_tag", "tag": "parent_of_{{user.id}}", "title": "{{user.name}} inactivo hace {{event.inactiveDays}} días", "message": "Te animamos a iniciar sesión. Accede [aquí]." } } ] } ``` ## Interfaz de usuario `/institution/automations`: - Lista con filtros (estado, tipo de trigger), toggle, búsqueda - Wizard de 4 pasos (Trigger → Conditions → Actions → Review) - Historial de ejecuciones con filas expandibles (estado, duración, actionResults JSON) ## Ver también - [Resumen de la plataforma](/platform/overview) ## FAQ **Q: ¿Studeia tiene automatizaciones built-in?** Sí. Motor 'mini-n8n' nativo: Disparador → Condición → Acción. 3 tipos de trigger (evento de la plataforma, programado, webhook público) con 14+ eventos. 8 tipos de acción (notificación in-app, agregar/eliminar etiqueta, crear anuncio, enviar webhook, enviar solicitud web, matricular usuario, disparar automatización). UI wizard de 4 pasos + historial de ejecuciones. **Q: ¿Puedo disparar un webhook cuando un alumno completa un quiz?** Sí. Trigger: event quiz_submitted. Condición opcional (ej: score >= 80). Acción: send_webhook a tu URL. Soporta interpolación de plantillas: {{user.name}}, {{event.score}}, {{event.lessonTitle}}. **Q: ¿Tiene rate limiting?** Sí. Por automatización: maxRunsPerHour + maxRunsPerDay. Verificado mediante Redis INCR con fallback a conteo en DB. Cuando se excede: la ejecución se marca como skipped + log. **Q: ¿Puedo encadenar automatizaciones?** Sí. La acción trigger_automation llama a otra automatización. Profundidad máxima de cadena: 5 niveles (anti-bucle infinito). --- # [es-ES (AI-translated)] CMS: cursos, módulos y lecciones URL: https://docs.studeia.com/features/cms/courses-modules-lessons Locale: es-ES Section: features Updated: 2026-05-23 **Short answer:** Studeia organiza el contenido en jerarquía Course → Module → Lesson. Cada curso pertenece a un Tenant, puede tener múltiples módulos (con sortOrder), cada módulo puede tener múltiples lecciones con 8 tipos (slides, video, PDF, rich_text, quiz, assignment, live_class, external_link) + 6 subtipos interactivos. CRUD vía UI o API pública. Soporte a clone, import IMS CC, auto-generación por IA (PDF→curso), publicación programada (publishAt) e ingesta RAG para el tutor IA. ## Jerarquía ``` Tenant (Institución) └── Course (título, slug, status, theme, publishAt, aiTutorEnabled) └── CourseModule (título, sortOrder) └── CourseLesson (tipo, content JSON, sortOrder, isPublished, publishAt) ├── CourseLessonMedia (N:N con MediaAsset) └── LessonCompletion (1:N por studentId) ``` ## CRUD ### Cursos ``` POST /api/institution/courses Crear GET /api/institution/courses Listar GET /api/institution/courses/[id] Detalle PATCH /api/institution/courses/[id] Actualizar DELETE /api/institution/courses/[id] Eliminar (soft, status=archived) POST /api/institution/courses/[id]/clone Clonar (deep copy) POST /api/institution/courses/import Importar IMS CC ``` Scopes: `courses:read` (GET) | `courses:write` (POST/PATCH/DELETE). ### Módulos ``` POST /api/institution/courses/[id]/modules Crear PATCH /api/institution/courses/[id]/modules/[mid] DELETE /api/institution/courses/[id]/modules/[mid] PATCH /api/institution/courses/[id]/modules/reorder (bulk sortOrder) ``` ### Lecciones ``` POST /api/institution/courses/[id]/modules/[mid]/lessons Crear PATCH /api/institution/courses/[id]/modules/[mid]/lessons/[lid] DELETE /api/institution/courses/[id]/modules/[mid]/lessons/[lid] POST /api/institution/courses/[id]/lessons/reorder (bulk) ``` ## Estado del curso `Course.status: draft | published | archived` - **draft**: no visible para alumnos, editable - **published**: visible para matriculados (respetando publishAt) - **archived**: no visible, solo lectura para histórico `Course.publishAt` programa la publicación automática vía cron. ## Publicación escalonada Combina `Course.publishAt` con `Lesson.publishAt` para control granular: ``` Curso publicado el 2026-06-01 Módulo 1 (sin publishAt) → disponible desde 2026-06-01 Lección 1.1 (sin publishAt) → disponible desde 2026-06-01 Lección 1.2 (publishAt: 2026-06-08) → disponible a partir de 2026-06-08 Módulo 2 (sin publishAt) Lección 2.1 (publishAt: 2026-06-15) → disponible a partir de 2026-06-15 ``` `checkLessonAvailability()` en `apps/web/lib/lesson-availability.ts` valida en TODOS los endpoints de lección (view, quiz/start, quiz/submit, complete, interactive). ## Prerrequisitos entre lecciones `Lesson.prerequisiteLessonId` apunta a la lección que DEBE estar completa antes de acceder. `checkLessonAvailability(lesson, { checkPrerequisite: true })` valida: 1. `lesson.isPublished === true` 2. `lesson.publishAt <= now` 3. Si `prerequisiteLessonId`: existe `LessonCompletion` del alumno para esa lección ## Clonar un curso `POST /api/institution/courses/[id]/clone` realiza: 1. Crea nuevo Course con slug `{slug}-clone-{n}` 2. Para cada Module original → crea copia 3. Para cada Lesson original → crea copia con el mismo content JSON 4. NO copia: Enrollments, LessonCompletions, ClassGroups, QuizAttempts, ingesta RAG 5. Respeta el límite de cursos del plan (checkTenantResourceLimit) ## Importar IMS Common Cartridge `POST /api/institution/courses/import` body multipart/form-data con .imscc: - Parser: `packages/core/src/content/imscc-parser.ts` (XML parser basado en cheerio) - Soporta: IMS CC v1.0, v1.1, v1.2, v1.3 - Recursos soportados: web links, file resources, basic LTI links, QTI 1.2 quizzes (mapeados al Quiz Engine), web content resources - NO soportados: H5P content packages, SCORM 2004 PIF, IMS CP ## Ingesta RAG `Course.autoSyncRag: Boolean` controla la re-ingesta automática. [Detalles en RAG Ingestion](/features/ai-tutor/rag-ingestion). ## Limitaciones - Máximo 100 módulos por curso (soft limit, rendimiento) - Máximo 200 lecciones por módulo (soft limit, UX) - Content JSON por lección hasta 5MB (validado al guardar) - El slug debe ser único por tenant + idioma ## Ver también - [Tipos de lección](/features/cms/lesson-types) - [Auto-generación de curso por IA](/features/cms/auto-course-generation) - [Ingesta RAG](/features/ai-tutor/rag-ingestion) ## FAQ **Q: ¿Cómo crear un nuevo curso?** Vía UI: /institution/courses > Nuevo Curso. Define título, slug, descripción, tema visual, estado (draft). Vía API: POST /api/institution/courses (scope courses:write). Tras crear, añade módulos y lecciones. **Q: ¿Puedo clonar un curso existente?** Sí. POST /api/institution/courses/[id]/clone. Crea una copia con nuevo slug, mismos módulos y lecciones (deep copy). Útil para crear nuevas cohortes basadas en un curso existente. Respeta el límite de cursos del plan. **Q: ¿Puedo importar contenido de Moodle/Canvas/Blackboard?** Sí, vía IMS Common Cartridge (IMS CC v1.x). POST /api/institution/courses/import con archivo .imscc. El parser extrae módulos, lecciones, recursos (PDFs, enlaces, quizzes básicos). Limitación: H5P y SCORM 2004 no están 100% soportados — solo IMS CC nativo. **Q: ¿Cómo publicar una lección con fecha programada?** Establece lesson.isPublished=false + lesson.publishAt=timestamp. El alumno no ve la lección hasta publishAt. checkLessonAvailability() valida en todos los endpoints (quiz, complete, view). Se combina con Course.publishAt para publicar el curso completo en un momento futuro. --- # [es-ES (AI-translated)] 8 tipos de lección + 6 subtipos interactivos URL: https://docs.studeia.com/features/cms/lesson-types Locale: es-ES Section: features Updated: 2026-05-23 **Short answer:** Studeia soporta 8 tipos primarios de lección (slides, video, PDF, rich text, quiz, assignment, live class, external link) y 6 subtipos interactivos (interactive_video, drag_drop, fill_blanks, flashcard_set con SRS, timeline, branching_scenario). Cada tipo tiene un editor visual dedicado y un viewer optimizado. El contenido se almacena como JSON estructurado en CourseLesson.content. ## Tipos primarios ### 1. slides Presentación con elementos enriquecidos. ```json { "slides": [ { "id": "uuid", "layout": "title_content" | "two_column" | "image_focus" | "code_demo", "elements": [ { "type": "heading", "text": "...", "style": {} }, { "type": "paragraph", "text": "..." }, { "type": "image", "mediaAssetId": "uuid" }, { "type": "list", "items": ["..."], "ordered": true }, { "type": "code", "language": "python", "code": "..." }, { "type": "callout", "variant": "info|warning|tip", "text": "..." } ] } ], "speakerNotes": { "slide-uuid": "Notas..." } } ``` Viewer: `components/lesson-viewer/slide-viewer.tsx` (navegación por teclado, pantalla completa, notas del presentador). ### 2. video ```json { "source": "youtube" | "vimeo" | "upload", "embedUrl": "https://...", "videoUrl": "...", "mediaAssetId": "uuid" } ``` Soporta velocidad de reproducción, subtítulos, control de reproducción automática. Transcripción automática vía Whisper cuando mediaAssetId está presente. ### 3. pdf_viewer ```json { "mediaAssetId": "uuid", "storageUrl": "...", "initialPage": 1 } ``` Viewer con react-pdf, navegación, zoom, búsqueda de texto completo. ### 4. rich_text ```json { "html": "

...

...

" } ``` Editor: Tiptap con extensiones (tablas, bloques de código con resaltado de sintaxis, imágenes, enlaces, color, tipografía, matemáticas). HTML sanitizado en el servidor con `sanitizeHtml()`. ### 5. quiz ```json { "questions": [ { "type": "multiple_choice", "question": "...", "options": ["A","B","C","D"], "correctIndex": 0, "explanation": "...", "concepts": ["concept-id"] }, { "type": "true_false", "question": "...", "correctIndex": 0 }, { "type": "fill_blank", "question": "...", "blanks": [{"answer": "..."}] }, { "type": "matching", "pairs": [{"left": "...", "right": "..."}] }, { "type": "ordering", "items": ["..."] }, { "type": "numeric", "answer": 42, "tolerance": 0.1 }, { "type": "short_answer", "acceptedAnswers": ["..."] }, { "type": "essay", "prompt": "..." } ], "passingScore": 70, "configuration": { "maxAttempts": 3, "timeLimitMinutes": 30, "shuffleQuestions": true, "shuffleOptions": true, "accessCode": "...", "scoringPolicy": "highest" | "latest" | "average", "reviewMode": "after_submit" | "after_due_date" | "never" } } ``` Detalles en [Quiz Engine](/features/assessment/quiz-engine). ### 6. assignment ```json { "instructions": "...", "dueDate": "2026-06-15", "maxScore": 100, "submissionType": "text" | "file" | "both", "rubricId": "uuid" } ``` Las entregas se almacenan en el bucket privado `submissions/{tenantId}/{courseId}/{lessonId}/{userId}/` (regla crítica 122). ### 7. live_class ```json { "liveClassId": "uuid" } ``` La entidad LiveClass tiene proveedor (BBB/Zoom/Teams/Meet), URL de acceso, URL de grabación. [Detalles en Clases en Vivo](/features/live-classes/overview). ### 8. external_link ```json { "url": "https://...", "description": "...", "openInNewTab": true } ``` ## Subtipos interactivos Cuando `lesson.subtype !== null`, se renderiza un viewer interactivo dedicado: ### interactive_video Video con checkpoints (preguntas obligatorias antes de continuar). ```json { "videoUrl": "...", "checkpoints": [ { "timestampSec": 120, "question": { ... } } ] } ``` ### drag_drop ```json { "items": [{ "id": "1", "label": "Mitosis" }], "targets": [{ "id": "a", "label": "División celular", "acceptedItemIds": ["1"] }] } ``` ### fill_blanks ```json { "text": "La capital de Francia es {{0}} y se encuentra en el continente {{1}}.", "blanks": [ { "id": 0, "acceptedAnswers": ["París"] }, { "id": 1, "acceptedAnswers": ["Europa", "europeo"] } ] } ``` ### flashcard_set ```json { "cards": [ { "id": "1", "front": "¿Cuál es el teorema de Pitágoras?", "back": "a² + b² = c²" } ], "srsEnabled": true } ``` Algoritmo SRS SM-2 modificado. Programa revisiones en StudentFlashcardReview. ### timeline ```json { "events": [ { "date": "1500", "title": "Descubrimiento de Brasil", "description": "..." } ] } ``` Línea de tiempo interactiva con zoom. ### branching_scenario Árbol de decisión para simulaciones (ej: caso clínico, dilema ético, negociación). ```json { "rootNodeId": "n1", "nodes": { "n1": { "text": "Eres un médico atendiendo a un paciente con dolor torácico...", "choices": [ { "text": "Solicitar ECG", "nextNodeId": "n2" }, { "text": "Internar inmediatamente", "nextNodeId": "n3" } ] } } } ``` ## Editores (Lesson Builder) Cada tipo tiene un editor visual dedicado en `components/lesson-builder/`: - slides → `slides-editor.tsx` (reordenamiento con dnd-kit, elementos drag-drop) - rich_text → `rich-text-editor.tsx` (Tiptap) - quiz → `quiz-editor.tsx` (con selector de banco de preguntas + diálogo de guardado) - assignment → `assignment-editor.tsx` (selector de rúbrica, fecha de entrega) - video → `video-editor.tsx` (selección de fuente + embed) - pdf → `pdf-editor.tsx` (subida + selector de medios) - live_class → `live-class-editor.tsx` (selección de proveedor + programación) - external_link → `external-link-editor.tsx` - subtipos interactivos → editores dedicados en `components/interactive/` ## Limitaciones - **Quiz tipo essay sin corrección automática nativa** — el administrador puede habilitar LLM grading (costo adicional) - **Los subtipos interactivos no migran a H5P** — formato propio de Studeia - **Branching_scenario máximo 10 niveles de profundidad** — protección contra bucles infinitos ## Ver también - [CMS: cursos, módulos, lecciones](/features/cms/courses-modules-lessons) - [Quiz Engine](/features/assessment/quiz-engine) - [Contenido interactivo](/features/interactive-content/overview) ## FAQ **Q: ¿Cuántos tipos de lección existen?** 8 tipos primarios: slides, video, pdf_viewer, rich_text, quiz, assignment, live_class, external_link. Más 6 subtipos interactivos cuando lesson.subtype !== null: interactive_video (con checkpoints), drag_drop, fill_blanks, flashcard_set (SRS SM-2), timeline, branching_scenario (árbol de decisión). **Q: ¿Necesito H5P para contenido interactivo?** No. Studeia tiene 6 subtipos interactivos nativos: interactive_video (con checkpoints y quiz inline), drag_drop, fill_blanks, flashcard_set (con algoritmo SRS SM-2), timeline y branching_scenario (árboles de decisión con ramificaciones). H5P puede embeberse mediante external_link pero no es necesario. **Q: ¿El quiz se autocorrige?** Sí, para 7 de los 8 tipos: multiple_choice, true_false, fill_blank, matching, ordering, numeric, short_answer (con normalización). Solo essay requiere corrección manual (o mediante LLM si el administrador lo habilita). Detalles en /features/assessment/quiz-engine. **Q: ¿Puedo embeber video de YouTube o Vimeo?** Sí. Lesson type=video, content { source: 'youtube' | 'vimeo' | 'upload', embedUrl: '...' }. También soporta subida mediante media library (con transcodificación opcional y transcripción automática vía Whisper). --- # [es-ES (AI-translated)] Gamificación nativa: XP, badges, leaderboards, contests, rewards URL: https://docs.studeia.com/features/gamification/overview Locale: es-ES Section: features Updated: 2026-05-23 **Short answer:** Studeia tiene gamificación nativa completa: XP engine con config jerárquica (tenant→curso), 11 criterios de badge con lógica booleana AND/OR, badges exportables como OB 3.0 (Open Badges 3.0 — W3C Verifiable Credential), leaderboards Redis ZSET (ámbito curso/clase, ventanas alltime/weekly/monthly), contests con 7 métricas (lifecycle draft→active→ended), rewards shop con monedas virtuales y agente IA dedicado para que el admin cree estrategias vía chat natural. ## Modelo ``` TenantGamificationConfig (XP rules, level thresholds, features) └── CourseGamificationConfig (override per-course) UserGamificationProfile (totalXp, currentLevel, currentStreakDays, coins) ├── XpLog (cada XP earned con source) ├── UserBadge[] ├── ContestParticipant[] └── RewardRedemption[] ``` ## XP engine XP earned por actividad. Config en `xpRules` JSON: ```json { "lessonComplete": 50, "quizPass": 30, "quizPassFirstTry": 50, "assignmentSubmit": 40, "forumPostCreate": 10, "forumReplyCreate": 5, "chatTutorMessage": 2, "liveClassJoin": 20, "dailyLogin": 5, "streakBonus": [ { "days": 7, "bonus": 100 }, { "days": 30, "bonus": 500 } ] } ``` `handleGamificationEvent()` integrado en 7 rutas (lesson complete, quiz, chat tutor, forum post/reply, live class join, assignment submit). ## Niveles Umbrales configurables (por defecto: nivel N = 100 × N²): ``` Nivel 1: 0 XP Nivel 2: 100 XP Nivel 3: 400 XP Nivel 4: 900 XP Nivel 5: 1600 XP ... ``` El level up dispara el evento `badge_earned` (automatización) + notificación push (móvil). ## Badges 11 tipos de criterio con lógica booleana AND/OR: | Criterio | Trigger | |---|---| | lesson_count | N lecciones completadas | | quiz_pass_count | N quizzes aprobados | | quiz_score_avg | media de quiz >= X | | streak_days | racha de N días | | level_reached | nivel >= N | | total_xp | XP >= N | | course_complete | N cursos completados | | forum_posts | N posts en foro | | concept_mastery | N conceptos con mastery >= X | | time_spent | N horas estudiadas | | manual | awarded by teacher/admin | **Compound criteria** (AND/OR, max depth 3): ```json { "logic": "AND", "rules": [ { "type": "quiz_pass_count", "value": 10 }, { "logic": "OR", "rules": [ { "type": "streak_days", "value": 7 }, { "type": "quiz_score_avg", "value": 90 } ] } ] } ``` ## Open Badges 3.0 Badge earned crea `UserBadge` con página pública: - `/public/badges/verify/[userBadgeId]` (sin autenticación) - `/api/badges/verify/[userBadgeId]` retorna JSON-LD OB 3.0 (W3C Verifiable Credential) - Compatible con LinkedIn Add to Profile - Schema.org `EducationalOccupationalCredential` para descubrimiento ## Leaderboards Redis ZSET (sorted sets) para rendimiento: ``` ZADD leaderboard:tenant:{tenantId}:scope:course:{courseId}:window:weekly {xp} {userId} ZADD leaderboard:tenant:{tenantId}:scope:class:{classId}:window:alltime {xp} {userId} ``` Ámbitos: course, class_group. Ventanas: alltime, weekly, monthly. Modo anónimo: el alumno aparece como "Alumno #42" (config por tenant). ## Contests Lifecycle: draft → active → ended (cron auto-start/end). 7 métricas: 1. xp_earned (XP total en el período) 2. lessons_completed 3. quizzes_passed 4. avg_quiz_score 5. study_minutes 6. forum_posts 7. badges_earned Configurable: ámbito (course/class/tenant), fecha inicio/fin, premios (rewards). ## Rewards shop Catálogo de recompensas virtuales. El alumno gasta coins (acumulados vía XP): - certificate_template — diploma estilizado - profile_customization — avatar/borde - badge_special — badge única - virtual_item — sticker, color de nombre, etc. Redemption atómico (anti-race condition). Reembolso automático si el admin lo deniega. ## Agente IA de gamificación El admin puede crear/gestionar la gamificación vía chat: ``` "Crea 5 badges para mi curso de Matemáticas enfocados en consistencia (streaks) y mastery (>= 80% de acierto). Bonus para alumnos que ayuden en el foro." ``` 19 herramientas (CRUD badges/contests/rewards, config XP, analytics, award manual). Loop tool_use max 15 iteraciones. [Detalles en Gamification Agent](/features/gamification/gamification-agent-ai). ## Informes para padres Gamificación integrada en `packages/core/src/monitoring/advanced-reports.ts`: - StudentReport incluye XP, nivel, badges recientes, racha - Portal de padres muestra sección "Logros" con badge grid + streak counter - El informe LLM menciona logros: "María completó 3 cursos y obtuvo 5 badges este mes" ## Ver también - [Plataforma overview](/platform/overview) - [Comparativa Studeia vs Khan Academy](/comparisons/studeia-vs-google-classroom) ## FAQ **Q: ¿Studeia tiene gamificación nativa?** Sí, completa. XP por actividad (config jerárquica tenant→curso), niveles configurables, badges con 11 criterios automáticos (compound AND/OR), leaderboards Redis ZSET con ámbito curso o clase y ventanas weekly/monthly/alltime, contests con 7 métricas, rewards shop con monedas virtuales. Además, agente IA dedicado para que el admin cree estrategias vía chat. **Q: ¿Los badges siguen el estándar Open Badges?** Sí. Badges exportables como OB 3.0 (Open Badges 3.0 — W3C Verifiable Credential JSON-LD). Cada UserBadge tiene página pública de verificación (/public/badges/verify/[id]) con schema.org EducationalOccupationalCredential — compatible con LinkedIn Add to Profile. **Q: ¿Cómo configuro XP por lección completada?** Tenant Settings > Gamification > XP Rules. Cada actividad tiene XP base (lessonComplete: 50, quizPass: 30, etc.). El curso puede sobreescribirlo (CourseGamificationConfig). Bonus por racha diaria, primera vez, dificultad, etc. **Q: ¿Puedo desactivar la gamificación en un curso?** Sí. CourseGamificationConfig.enabled=false. La barra lateral del alumno oculta 'Gamificación' si el alumno no tiene ningún curso activo con gamificación habilitada. La sub-navegación del curso oculta la pestaña 'Gamificación' para cursos específicos con la flag desactivada. --- # [es-ES (AI-translated)] Clases en vivo multi-proveedor (BBB, Zoom, Teams, Meet) URL: https://docs.studeia.com/features/live-classes/overview Locale: es-ES Section: features Updated: 2026-05-23 **Short answer:** Las clases en vivo en Studeia soportan 4 proveedores mediante adapter pattern: BigBlueButton (predeterminado, iframe embed), Zoom (Server-to-Server OAuth), Microsoft Teams (Graph API), Google Meet (OAuth Calendar). Credenciales cifradas AES-256-GCM. Webhook lifecycle + cron de recording sync (fallback 15 min). LiveClassTranscription automática para Zoom/Teams (ingerible en el RAG). ## Proveedores soportados | Proveedor | Auth | Unirse | Grabaciones | Transcript | |---|---|---|---|---| | BBB | sharedSecret | iframe | Sí, API nativa | Texto proporcionado | | Zoom | Server-to-Server OAuth | nueva pestaña | Webhook + cron | VTT auto | | Teams | Client Credentials | nueva pestaña | Graph API + cron | VTT auto | | Google Meet | OAuth + Calendar API | nueva pestaña | Calendar API + cron | Manual en Meet | ## Adapter pattern `packages/core/src/live-class/types.ts`: ```ts interface VideoProviderAdapter { createMeeting(params): Promise; getJoinUrl(params): Promise; endMeeting(meetingId, providerData?): Promise; getMeetingStatus(meetingId): Promise; getRecordings(meetingId): Promise; getTranscript?(meetingId): Promise; } ``` `resolveVideoProvider(tenantId, liveClass?)` aplica cascada: 1. `liveClass.videoProvider` (si se especifica en la clase) 2. `VideoProviderConfig.isDefault` (proveedor predeterminado del tenant) 3. `Tenant.config.bbb` (legacy backward compat) 4. Variables de entorno BBB (fallback global) ## Configuración por proveedor ### BBB (predeterminado) Prerequisito: instancia BBB en ejecución. Configuración > Proveedor de Video > BBB > URL + Shared Secret. ### Zoom 1. Cree una Server-to-Server OAuth app en Zoom Marketplace 2. Scopes: `meeting:read`, `meeting:write`, `recording:read`, `user:read` 3. Configuración > Proveedor de Video > Zoom > Account ID + Client ID + Client Secret 4. Webhook: `/api/webhooks/video/zoom` con HMAC SHA-256 via `x-zm-signature` ### Teams 1. Azure AD App Registration 2. Permisos: Microsoft Graph `OnlineMeetings.ReadWrite.All`, `OnlineMeetingRecording.Read.All` 3. Configuración > Proveedor de Video > Teams > Tenant ID + Client ID + Client Secret + correo del organizador 4. Webhook: Graph Change Notifications (validación de suscripción via `validationToken`) ### Google Meet 1. Google Cloud Console > APIs > Calendar API + Meet REST API v2 2. OAuth 2.0 Client (Web application) 3. Configuración > Proveedor de Video > Google Meet > Client ID + Client Secret 4. Flujo de admin consent via OAuth (redirige a Google) 5. Limitación: endMeeting no está soportado via API — el adapter marca como completed localmente ## Credenciales Almacenadas en `VideoProviderConfig` con AES-256-GCM: - `encryptedCredentials` — JSON blob cifrado - `encryptionIv` + `encryptionAuthTag` - OAuth tokens (Teams/Meet): `accessToken`, `refreshToken`, `tokenExpiresAt` Unique: `[tenantId, provider]` — una configuración por proveedor por tenant. ## Webhooks y recording sync Cada proveedor tiene su propio esquema. Studeia normaliza mediante webhook handlers + cron fallback: - `POST /api/webhooks/video/zoom` — meeting events + recording.completed - `POST /api/webhooks/video/teams` — Graph notifications - `GET /api/cron/recording-sync` — polling cada 15 min para meetings completados sin recordingUrl Los webhooks son **poco confiables** (retrasos, expiración de suscripciones). El cron siempre actúa como fallback. ## Transcripción Zoom y Teams proporcionan VTT nativamente tras la grabación. Studeia crea LiveClassTranscription con: - `transcriptionText` (parseado del VTT) - `transcriptionLanguage` - estado: pending → transcribing → review → approved → ingested Tras la aprobación, el administrador puede iniciar la ingestión en el RAG del curso. [Detalles en Media Transcription](/features/cms/media-transcription). ## Alcance por grupo `LiveClass.classGroupId` es opcional. Cuando está configurado: - Solo los estudiantes de ese grupo lo ven en /live-classes/ - Solo los estudiantes del grupo pueden unirse (validado en el join) - Las notificaciones son solo para el grupo Sin classGroupId: course-wide (todos los matriculados). ## Limitaciones - **BBB**: requiere instancia auto-hospedada (o proveedor BBB gestionado). Costos: $20-200/mes según el tamaño. - **Zoom**: límite de duración según el tier (free=40 min, pago=ilimitado). - **Teams**: endMeeting no está soportado via API. - **Google Meet**: grabación/transcripción iniciada manualmente por el host. - **Streaming a YouTube/Twitch**: no soportado de forma nativa. ## Ver también - [Descripción general de la plataforma](/platform/overview) - [Multi-tenancy](/platform/multi-tenancy) ## FAQ **Q: ¿Qué proveedor de video usa Studeia?** 4 opciones: BigBlueButton (predeterminado, iframe embed, open-source), Zoom (Server-to-Server OAuth), Microsoft Teams (Azure AD Client Credentials), Google Meet (OAuth admin consent). El administrador elige por tenant (VideoProviderConfig predeterminado) o por clase específica (LiveClass.videoProvider override). **Q: ¿BBB y Zoom funcionan igual para el estudiante?** No exactamente. BBB soporta iframe embed (joinMethod='iframe', el estudiante ve la clase dentro de Studeia). Zoom, Teams y Meet se abren en una nueva pestaña (joinMethod='external', X-Frame-Options bloquea iframe). La UI muestra una tarjeta con countdown + botón 'Entrar' para esos 3. **Q: ¿Las grabaciones quedan disponibles?** Sí, automáticamente. El webhook del proveedor notifica cuando la grabación está lista + el cron /api/cron/recording-sync se ejecuta cada 15 min como fallback. recordingUrl se guarda en LiveClass. Para Zoom/Teams: el transcript VTT también se captura (crea LiveClassTranscription que puede ser ingerida en el RAG). **Q: ¿Puedo restringir una clase en vivo a un grupo específico?** Sí. LiveClass.classGroupId es opcional. Cuando está configurado: solo los estudiantes de ese grupo pueden ver y unirse (regla crítica 45-48). Sin classGroupId: todos los matriculados en el curso pueden verla. --- # [es-ES (AI-translated)] Glosario EAD: términos técnicos de LMS, IA y educación URL: https://docs.studeia.com/glossary Locale: es-ES Section: glossary Updated: 2026-05-23 **Short answer:** Glosario completo de términos técnicos usados en educación online/LMS, tutor IA, gamificación, SSO Enterprise, LTI, SCIM, RAG y arquitectura SaaS. ~80 términos con definiciones cortas y referencias cruzadas a páginas detalladas. ## A **API Key** — Clave de autenticación para la API pública de Studeia. Generada en /institution/settings/api-keys, formato `mia_` + 40 hex chars. Almacenada como hash SHA-256, nunca expuesta tras su creación. [Más información](/api/authentication). **AGS (Assignment and Grade Service)** — Servicio LTI 1.3 que permite a las herramientas (como Studeia) enviar calificaciones de vuelta al LMS consumer (Canvas, Moodle, Blackboard). Studeia lo implementa como provider. ## B **Badge** — Distintivo de logro. Studeia usa Open Badges 3.0 (W3C Verifiable Credential). Puede obtenerse automáticamente (11 criterios) o de forma manual (teacher award). [Más información](/features/gamification/overview). **BBB (BigBlueButton)** — Plataforma open-source de videoconferencia para educación. Studeia lo integra como proveedor de video estándar mediante iframe embed. [Más información](/features/live-classes/overview). **BNCC** — Base Nacional Comum Curricular brasileña. Studeia tiene soporte básico (etiquetas por habilidad BNCC) — alineación total mediante PromptTemplate personalizable. ## C **Canvas LMS** — LMS predominante en universidades de EE. UU. (Instructure). Studeia funciona como herramienta LTI 1.3 en Canvas. [Comparativa](/comparisons/studeia-vs-canvas). **Chunking** — División de texto largo en segmentos más pequeños (chunks) para embedding y retrieval. Studeia usa 800 tokens con 200 de overlap. **Circuit Breaker** — Patrón de resiliencia que omite el proveedor externo cuando falla repetidamente. Studeia lo usa para la cadena de fallback de LLM (Claude → GPT → Grok → Gemini). **Concept Mastery** — Probabilidad bayesiana (distribución Beta) de que el alumno domine un concepto específico. Calculada por ConceptMasteryEngine a través de interacciones (chat + quiz + contenido interactivo). **Cronbach's alpha** — Coeficiente de consistencia interna de un quiz/evaluación. Indica si las preguntas miden el mismo constructo. > 0.7 es aceptable. Studeia lo calcula automáticamente en /quiz-analytics. ## D **DPA (Data Processing Agreement)** — Contrato GDPR/LGPD que define las responsabilidades de procesamiento de datos personales. Studeia ofrece DPA estándar para clientes Enterprise. **Distractor Analysis** — En quizzes de opción múltiple, analiza qué alternativa incorrecta es elegida con más frecuencia — indicio de una misconception común. ## E **EAD (Educación a Distancia)** — Modalidad educativa en línea. Término equivalente en español al inglés "online learning" o "e-learning". **Embedding** — Representación vectorial de texto (1024 dimensiones en Studeia, generada mediante Voyage AI). Permite búsqueda semántica por similitud. **Enrollment** — Matrícula. Vincula al Student con un Course, opcionalmente con ClassGroup. Studeia: estados active/completed/paused/cancelled. **EvaluationAgent** — Agente IA de Studeia (Haiku, background, ~$0.001/turno) que clasifica las respuestas del alumno en el chat y detecta misconceptions. ## F **Fallback Chain** — Secuencia ordenada de proveedores a intentar cuando el primario falla. Fallback de LLM en Studeia: Claude → OpenAI → xAI Grok → Google Gemini. **FAQPage Schema** — Schema.org JSON-LD para FAQs. Estructura preguntas/respuestas para su descubrimiento por LLMs y Google AI Overviews. Studeia lo genera automáticamente para cada página de documentación. ## G **GDPR** — General Data Protection Regulation (Europa). Studeia cumple mediante DPA Enterprise. Equivalente europeo de la LGPD brasileña. **Gradebook** — Libro de calificaciones. Studeia: GradeCategory (con pesos) > GradeItem > Grade. **Guardian** — Responsable legal (padre/madre/tutor). Vinculado al alumno mediante GuardianLink (verificado por SMS para cumplimiento LGPD/ECA). ## H **Haiku (Claude Haiku)** — Modelo Claude más rápido y económico. Studeia lo usa para tareas en background: detección de misconceptions, generación de contenido, resumen de sesiones, supervisor de chat. **Hreflang** — Atributo HTML que indica la versión en otro idioma de la misma página. Importante para SEO multilingüe. ## I **IMS Common Cartridge (IMS CC)** — Estándar de empaquetado de contenido educativo. Studeia importa mediante `POST /api/institution/courses/import`. **Inline Quiz** — Quiz interactivo renderizado dentro del chat del tutor IA. Studeia: el LLM genera el marcador `[INLINE_QUIZ]...[/INLINE_QUIZ]` tras detectar una misconception, y el cliente renderiza el componente interactivo. **Item Difficulty** — En psicometría de tests, proporción de alumnos que respondieron correctamente la pregunta. p < 0.3 = difícil; p > 0.85 = fácil. ## J **JIT Provisioning (Just-In-Time)** — Creación automática de usuario en el primer inicio de sesión mediante SSO. Studeia lo realiza para SAML y OIDC, respetando allowedDomains. **JSON-LD** — JavaScript Object Notation for Linked Data. Formato W3C de schema markup. Usado en Studeia para SEO/GEO (Article, FAQPage, BreadcrumbList) y credenciales OB 3.0. ## K **Khan Academy** — Plataforma educativa gratuita (Khan Academy / Khanmigo AI tutor). B2C, enfocada en contenido propio. Studeia es B2B, enfocada en el contenido de la institución. No compiten directamente. ## L **LGPD** — Lei Geral de Proteção de Dados (Ley 13.709/2018, Brasil). Cumplimiento nativo en Studeia: exportación de datos Art. 18 IV, eliminación Art. 18 VI, consentimiento explícito, DPA enterprise. [Más información](/legal/lgpd-rights-guide). **LiveClass** — Clase en vivo. Studeia soporta 4 proveedores: BBB (iframe), Zoom, Teams, Google Meet (todos externos). **llms.txt** — Estándar emergente para "robots.txt para LLMs" — archivo markdown en la raíz que indica qué puede rastrear cada LLM + curación de contenido para agentes de IA. [llmstxt.org](https://llmstxt.org). **LLM Router** — Servicio interno de Studeia que selecciona proveedor+modelo según el tipo de tarea, con fallback automático y metering. **LMS** — Learning Management System. Plataforma de gestión del aprendizaje. Studeia, Moodle, Canvas, Blackboard, Google Classroom son LMS. **LTI (Learning Tools Interoperability)** — Estándar 1EdTech para la integración entre LMS y herramientas educativas. LTI 1.3 usa OIDC + JWT. Studeia funciona como tool provider en Canvas, Moodle, Blackboard. ## M **Mastery** — Dominio de un concepto o habilidad. Studeia lo calcula mediante ConceptMastery (bayesiano). Las estrategias pedagógicas se adaptan según el mastery (< 0.3 = instrucción directa, > 0.9 = desafío). **Misconception** — Error conceptual del alumno. Studeia lo detecta mediante EvaluationAgent y lo rastrea con un ciclo de vida de 3 estados: active → resolving → resolved. **Moodle** — LMS open-source más usado del mundo. Studeia lo complementa o sustituye según el caso. [Comparativa](/comparisons/studeia-vs-moodle). **MRR (Monthly Recurring Revenue)** — Ingreso Recurrente Mensual. Métrica clave SaaS. El administrador global de Studeia lo visualiza en /admin/finance. **Multi-tenant** — Arquitectura en la que múltiples instituciones (Tenants) utilizan la misma instancia de la plataforma con datos aislados. Studeia: filtro obligatorio por tenantId + RLS Supabase. ## N **Next.js** — Framework React full-stack. Studeia usa Next.js 15 App Router. ## O **OB 3.0 (Open Badges 3.0)** — Estándar W3C Verifiable Credential para credenciales educativas. Studeia exporta badges como OB 3.0 con página pública de verificación. **OIDC (OpenID Connect)** — Protocolo de autenticación moderno basado en OAuth 2.0. Studeia lo soporta para SSO Enterprise. **Orchestrator (Agente IA)** — Agente coordinador del pipeline multi-agente del tutor IA de Studeia. TypeScript puro (costo LLM cero). ## P **pgvector** — Extensión PostgreSQL para almacenar y buscar vectores. Studeia la usa para RAG (1024 dimensiones). **Point-biserial discrimination** — Correlación ítem-total en psicometría de tests. Indica en qué medida una pregunta distingue a los buenos alumnos de los débiles. > 0.4 es excelente. **Persona** — Configuración de avatar IA. En el roadmap de Studeia. **PromptTemplate** — Plantilla de prompt LLM almacenada en la base de datos. Personalizable por tenantId, taskType, provider, locale, courseId. ## Q **QTI (Question and Test Interoperability)** — Estándar 1EdTech para la interoperabilidad de quizzes. Studeia importa QTI 1.2 mediante IMS CC. **Quarantine (chat tutor)** — Restricción temporal del uso del chat del tutor IA impuesta por el Agente Supervisor tras 3 strikes (LOW/MEDIUM en 7 días). 48h por defecto. El alumno puede apelar. ## R **RAG (Retrieval Augmented Generation)** — Combina búsqueda vectorial + LLM. Studeia lo usa per-tenant: cada curso ingerido tiene chunks aislados, el tutor cita material propio. **Rate Limit** — Límite de llamadas por período. Studeia: tres niveles para la API pública (1000/5000/custom req/hora) mediante Redis. **Redis** — Base de datos en memoria. Studeia lo usa para caché, cola (BullMQ), leaderboards (ZSET), rate limiting, estado de circuit breaker, nonces OAuth. **Rubric** — Matriz de evaluación multi-criterio. Studeia: criterios con pesos + niveles (1-5 o personalizado) + descripciones. ## S **SaaS** — Software as a Service. Studeia es SaaS multi-tenant. **SAML 2.0** — Protocolo de SSO mediante XML. Studeia soporta SP-initiated e IdP-initiated mediante node-saml. **SCIM 2.0** — System for Cross-domain Identity Management (RFC 7644). Aprovisionamiento automático de usuarios/grupos mediante IdP. Studeia: 14 endpoints, token Bearer cifrado. **SCORM** — Sharable Content Object Reference Model. Estándar legacy de empaquetado de contenido. Studeia NO lo soporta de forma nativa (solo IMS CC). H5P/SCORM 2004 no migran automáticamente. **Slugs (Plan)** — Identificadores de planes B2B de Studeia: `demo`, `mini`, `growth`, `pro_100`, `enterprise`. Más legacy: `starter`, `professional`. **SRS (Spaced Repetition System)** — Algoritmo de repaso espaciado (ej.: SM-2). Studeia lo usa en flashcards y repaso adaptativo. **SSO (Single Sign-On)** — Inicio de sesión único para múltiples aplicaciones. Studeia: SAML, OIDC (plan Enterprise). **Strike (chat tutor)** — Infracción moderada por el Agente Supervisor. 3 strikes (LOW/MEDIUM en 7 días) = cuarentena. **Stripe** — Proveedor de pagos internacional. Studeia integra Stripe (tarjeta) + Asaas (PIX/boleto Brasil). **StudentMisconception** — Modelo de base de datos que rastrea los errores conceptuales del alumno con ciclo de vida (active → resolving → resolved). ## T **Tenant** — Institución en arquitectura multi-tenant. Studeia: Tenant.id es filtro obligatorio en todas las consultas. **TenantApiKey** — Claves de API LLM propias del tenant (Anthropic, OpenAI, etc.). Cifradas con AES-256-GCM en la base de datos. Cuando están configuradas: los costos van a la cuenta del tenant, no de Studeia. **Triple JSON-LD stack** — Article + FAQPage + BreadcrumbList en la misma página. Genera +1.8x citas en LLMs frente a Article-only. ## U **User-agent (AI crawlers)** — Identificadores de bots de IA: GPTBot, OAI-SearchBot, ChatGPT-User (OpenAI), PerplexityBot, ClaudeBot, Claude-Web, anthropic-ai (Anthropic), Google-Extended, Bytespider. ## V **Vercel AI SDK** — SDK Node.js unificado para múltiples proveedores LLM. Studeia lo usa en todos los agentes para abstraer Claude/GPT/Grok/Gemini. **VideoProvider** — Proveedor de clase en vivo. Studeia soporta 4: BBB, Zoom, Teams, Google Meet (patrón adapter). **Voyage AI** — Proveedor de embeddings (alternativa a OpenAI). Studeia usa voyage-3 (1024 dims) como primario. ## W **WCAG 2.1 AA** — Web Content Accessibility Guidelines nivel AA. Cumplimiento de Studeia: skip-to-content, focus-visible, alto contraste, navegación por teclado, compatibilidad con lectores de pantalla. **Webhook** — Callback HTTP para eventos. Studeia: webhooks de billing (Stripe/Asaas), proveedores de video (Zoom/Teams), automatizaciones (público autenticado por token), notificaciones Graph (Teams). **White-label** — Plataforma sin marca del proveedor. Studeia lo ofrece mediante dominio personalizado + branding total + eliminación de la marca Studeia (Enterprise). ## X **xAPI** — Experience API. Estándar moderno para el seguimiento del aprendizaje. En el roadmap de Studeia. **XP (Experience Points)** — Puntos de experiencia de la gamificación. Studeia: configuración jerárquica tenant→curso. ## Y **YAML frontmatter** — Encabezado de configuración en archivos markdown/TS. Los docs de Studeia lo usan para meta. ## Z **Zoom** — Plataforma de videoconferencia. Studeia lo integra como proveedor de video mediante Server-to-Server OAuth. ## Ver también - [Visión general de la plataforma](/platform/overview) - [API pública](/api/overview) ## FAQ **Q: ¿Qué es RAG?** Retrieval Augmented Generation. Técnica que combina búsqueda semántica (RAG) con generación de texto mediante LLM. En lugar de que el LLM invente respuestas, busca fragmentos relevantes en un banco vectorial y los usa como contexto. Studeia usa RAG per-tenant para que el tutor IA cite material propio del curso. **Q: ¿Qué es Open Badges 3.0?** Estándar W3C Verifiable Credentials para credenciales educativas. Reemplaza los certificados PDF por JSON-LD verificable digitalmente. Studeia exporta badges como OB 3.0 con página pública de verificación + compatible con LinkedIn Add to Profile. --- # [es-ES (AI-translated)] Integración Asaas (PIX + boleto + tarjeta Brasil) URL: https://docs.studeia.com/integrations/asaas Locale: es-ES Section: integrations Updated: 2026-05-24 **Short answer:** Asaas es el proveedor de pagos brasileño de Studeia: PIX instantáneo (1.99% comisión), boleto (R$3.49), tarjeta nacional (4.99% + R$0.49). Para clientes de Brasil es más económico y nativo que Stripe. Webhooks fail-closed (503 si falta el token). Customer split por proveedor (stripeCustomerId vs asaasCustomerId). Para internacional: Stripe USD en paralelo. ## Configuración ### 1. Panel de Asaas 1. https://asaas.com (o sandbox: https://sandbox.asaas.com) 2. Configuraciones > Integraciones > API > copiar Access Token 3. Configuraciones > Webhooks > Agregar: - URL: `https://[tenant].studeia.com/api/webhooks/asaas?token=` - Eventos: PAYMENT_RECEIVED, PAYMENT_OVERDUE, PAYMENT_REFUNDED, SUBSCRIPTION_CREATED/UPDATED/DELETED 4. Personaliza el token (cadena aleatoria, criptográficamente segura) ### 2. Variables de entorno ``` ASAAS_API_KEY=$aact_... ASAAS_WEBHOOK_TOKEN=...generado-en-el-paso-3... ASAAS_SANDBOX=true # opcional, por defecto false ``` ### 3. Crear productos en Asaas Asaas usa un modelo de cobro recurrente diferente al de Stripe. En Studeia, los planes se mapean mediante código (no es necesario crear un producto en el panel de Asaas). ## Flujo PIX ``` Admin hace clic en "Pagar con PIX" en /institution/billing ↓ POST /api/institution/billing/checkout Body: { planSlug: "mini", provider: "asaas" } ↓ Studeia AsaasBillingProvider.createCheckout(): 1. Resuelve asaasCustomerId (crea si no existe — POST /customers) 2. POST /subscriptions con billingType=PIX 3. Asaas retorna QR Code + payload PIX para copiar y pegar 4. Studeia retorna { url } página hosted de Asaas con QR ↓ Admin escanea el QR en la app bancaria, paga ↓ PIX confirma en ~30s (instantáneo) ↓ Webhook PAYMENT_RECEIVED → applyWebhookEvent → promueve Tenant.plan ``` ## Hardening (reglas 138, 139) - **Fail-closed**: ausencia de ASAAS_WEBHOOK_TOKEN en el env = 503 `asaas_not_configured` (regla 138). Anti-bypass. - **Validación de token**: query param ?token=<...> comparado con el env (comparación timing-safe) - **5xx en fallo**: reintenta automáticamente - **PaymentLog idempotente**: unique [provider, externalEventId] - **Redacción de PII**: rawPayload pasa por redactPaymentPayload() — elimina cpfCnpj, email, name, address, billing_details (regla 139) ## Customer split por proveedor TenantSubscription tiene campos separados: - `stripeCustomerId` — para Stripe - `asaasCustomerId` — para Asaas - `externalCustomerId` — legado (mantenido como fallback si el proveedor coincide) `resolveCustomerIdForProvider()` en [create-checkout.ts](apps/web/lib/billing/create-checkout.ts) usa los nuevos campos — NUNCA reutilices un ID entre proveedores. ## Cuándo usar Asaas vs Stripe | Escenario | Recomendado | |---|---| | Cliente brasileño con PIX | **Asaas** | | Cliente brasileño con boleto | **Asaas** | | Cliente brasileño con tarjeta | **Asaas** (más económico) o Stripe | | Cliente internacional | **Stripe USD obligatorio** (Asaas bloqueado) | | Cuenta empresarial enterprise grande | Stripe (más herramientas — Sigma, informes personalizados) | ## Comisiones comparadas | Método | Asaas | Stripe | |---|---|---| | PIX | 1.99% | NO ofrece nativo | | Boleto | R$3.49 fijo | NO ofrece nativo | | Tarjeta de crédito | 4.99% + R$0.49 | 3.99% + R$0.59 (USD) | | Tarjeta de débito | 1.99% + R$0.39 | NO ofrece (BR) | | Anticipo de cobros | Disponible | NO | Para volumen B2B brasileño típico: Asaas es ~20-40% más económico en comisiones totales. ## Ver también - [Integración Stripe](/integrations/stripe) - [Plataforma overview](/platform/overview) ## FAQ **Q: ¿Por qué Asaas y no solo Stripe?** Para el mercado brasileño: el 95% de las transacciones B2B usan PIX (instantáneo, sin comisión) o boleto. Stripe no tiene PIX nativo (lo ofrece a través de terceros más costosos). Asaas es brasileño, integra PIX/boleto/tarjeta nacional de forma nativa con comisiones menores (1.99% PIX, R$3.49 boleto, 4.99% tarjeta + R$0.49 vs Stripe 3.99% + R$0.59). **Q: ¿Studeia detecta automáticamente qué proveedor usar?** Sí. getCurrencyFromHeaders() server-side vía x-vercel-ip-country / cf-ipcountry: BR = Asaas ofrecido en la UI (PIX/boleto/tarjeta). Fuera de BR = Stripe USD obligatorio (Asaas bloqueado server-side con 400 'asaas_not_for_international'). **Q: ¿Los webhooks de Asaas son seguros?** Sí, pero con hardening. Token vía query param ASAAS_WEBHOOK_TOKEN. Sin token configurado: el webhook retorna 503 asaas_not_configured (fail-closed — regla 138). Idempotencia vía PaymentLog unique. Asaas reintenta con backoff en caso de 5xx. **Q: ¿Puedo probar Asaas en sandbox?** Sí, Asaas tiene un entorno sandbox separado: https://sandbox.asaas.com. El token y la API key son independientes. Configura ASAAS_SANDBOX=true en el env para enrutar hacia el endpoint de sandbox. --- # [es-ES (AI-translated)] Integración BigBlueButton (BBB) — estándar open-source de clases en vivo URL: https://docs.studeia.com/integrations/bigbluebutton Locale: es-ES Section: integrations Updated: 2026-05-24 **Short answer:** BigBlueButton (BBB) es el video provider PREDETERMINADO de Studeia: open-source AGPL, iframe embed (el alumno permanece DENTRO de Studeia), recursos educativos nativos (pizarra colaborativa, breakout rooms, polls). Setup: instancia self-hosted O managed BBB provider ($20-200/mes). Auth vía SHA-256 checksum (sin OAuth). Soporta ~150 alumnos por servidor, escala vía Scalelite. ## Por qué BBB es el predeterminado | Aspecto | BBB | Zoom/Teams/Meet | |---|---|---| | Costo | Open-source + hosting ($20-200/mes) | $14-25/host/mes (Zoom) o incluido (M365/Google) | | Iframe embed | **Sí** (el alumno permanece en Studeia) | NO (X-Frame-Options bloquea) | | Pizarra colaborativa | Sí, nativa | Limitada (Zoom Whiteboard, Microsoft Whiteboard) | | Breakout rooms | Sí, ilimitados | Sí (límites por tier) | | Polls / Levantar la mano | Sí, nativos | Sí | | Status emoji (de acuerdo/en desacuerdo) | Sí, nativo | Limitado | | Grabación | Sí, nativa BBB | Sí | | Multi-share | Sí (múltiples personas screen-share simultáneo) | NO en Zoom (1 a la vez) | ## Self-hosted vs Managed ### Self-hosted (recomendado para escuelas medianas/grandes) Requisitos (1 instancia para 150 usuarios): - 16 CPU cores - 16 GB RAM - 500 GB disk (grabaciones) - Ubuntu 20.04 LTS - Dominio + TLS (Let's Encrypt) Instalación vía [bbb-install.sh](https://github.com/bigbluebutton/bbb-install) (~30min). Costo: VPS $30-100/mes (Hetzner, DigitalOcean, Vultr). ### Managed (más sencillo para escuelas pequeñas/medianas) Providers globales: - **BlindsideNetworks** (creadores de BBB): $50-500/mes - **HigherEdLab**: $20-200/mes - **EduMeet** / **Blindside Networks BBB hosting** Incluye: hosting + actualizaciones + backup + soporte. Se paga por usuarios simultáneos. ## Setup en Studeia 1. Obtener BBB instance URL (ej: `https://bbb.escuela.edu/bigbluebutton/api`) 2. Obtener Shared Secret del servidor BBB (`bbb-conf --secret` en el servidor) 3. Studeia > Settings > Video Provider > BBB > Agregar: - URL - Shared Secret - Set as default 4. Probar: Studeia llama a `/api/getMeetings` y valida la respuesta ## Cómo funciona ``` Admin/Profesor crea LiveClass (videoProvider=bbb o null=default) ↓ Studeia BBBAdapter.createMeeting() → SHA-256 checksum (BBB no usa OAuth) → GET https://bbb.../api/create?meetingID=...&checksum=... → Retorna meetingID + joinUrl ↓ Alumno entra vía /live-classes/[id] → joinMethod=iframe — Studeia renderiza iframe BBB DENTRO de la página → El alumno no sale de Studeia ``` ## Grabaciones BBB graba en el servidor propio: - Formato: BBB recording format (proprietary) o MP4/WebM (vía plugin) - URL: `https://bbb.../playback/presentation/2.3/[recordingId]` - Studeia guarda recordingUrl en LiveClass tras notificación del webhook BBB ## Limitaciones - **Sin app móvil nativa BBB** — los alumnos usan el navegador móvil (funcional pero no óptimo) - **WebRTC**: el alumno necesita un navegador moderno (Chrome, Firefox, Edge, Safari 14+) - **Ancho de banda**: ~1 Mbps de descarga por alumno (para video). Verificar la conexión de la escuela - **Latencia**: BBB es óptimo en LAN, aceptable en WAN. Para alumnos en zonas rurales con conexión débil: puede haber delay > 500ms ## Ver también - [Clases en vivo overview](/features/live-classes/overview) - [Integration Zoom](/integrations/zoom) ## FAQ **Q: ¿BigBlueButton es gratuito?** El software es gratuito (open-source AGPL 3.0). Pero necesitas alojar una instancia BBB (servidor propio con ~16 CPU + 16 GB RAM para ~150 alumnos simultáneos) O contratar un managed BBB provider ($20-200/mes según el tamaño). Sin hosting/provider: BBB no funciona. **Q: ¿Por qué BBB es el video provider predeterminado de Studeia?** Tres razones: (1) Open-source educativo — recursos nativos para la enseñanza (pizarra colaborativa, breakout rooms, polls, levantar la mano, status emoji). (2) Iframe embed — el alumno permanece DENTRO de Studeia, no necesita abrir otra pestaña (Zoom/Teams/Meet bloquean iframe vía X-Frame-Options). (3) Sin costos por meeting — una vez pagada la instancia, ilimitado. **Q: ¿Cómo configurar BBB en Studeia?** Settings > Video Provider > BBB > URL (ej: https://bbb.escuela.edu/bigbluebutton/api) + Shared Secret (del servidor BBB). Auth vía SHA-256 checksum (BBB no usa OAuth). Studeia prueba la conexión vía /api/getMeetings. **Q: ¿BBB es adecuado para 1000 alumnos simultáneos en una clase?** Una instancia BBB típica soporta ~150 alumnos por servidor. Para >150: configura BBB Scalelite (load balancer + múltiples instancias). Para >1000 simultáneos: considera Zoom Webinar (límite 10000 attendees pasivos) en lugar de BBB. --- # [es-ES (AI-translated)] Integración Canvas LMS via LTI 1.3 (Studeia como tool provider) URL: https://docs.studeia.com/integrations/canvas-lti Locale: es-ES Section: integrations Updated: 2026-05-24 **Short answer:** Studeia funciona como LTI 1.3 tool provider en Canvas LMS. Setup en Canvas: Admin > Developer Keys > LTI Key > pegar el config JSON generado en /institution/lti-tools de Studeia > activar placement. OIDC launch + JWT/JWKS + AGS grade passback (las notas se sincronizan automáticamente al Canvas Gradebook). Útil para universidades en Canvas que quieren complementar con Studeia (tutor IA, gamificación, mobile B2B) en cursos específicos sin desinvertir en el LMS principal. ## Requisitos previos - Studeia con plan que tenga LTI habilitado (Enterprise o planes de pago) - Rol de Canvas Admin (para registrar Developer Key) - HTTPS en ambos lados (LTI 1.3 requiere TLS) ## Configuración ### 1. Studeia: generar config LTI tool `/institution/lti-tools > New Tool`: - Tool name: "Canvas Production" - Target Link URI: `https://[tenant].studeia.com/lti/launch` - OIDC Login URI: `https://[tenant].studeia.com/lti/login` - Public JWKS URL: `https://[tenant].studeia.com/.well-known/jwks.json` - Studeia genera Client ID + Deployment ID Studeia muestra el JSON config completo (LTI 1.3 spec) — cópialo. ### 2. Canvas: registrar Developer Key 1. Canvas Admin > Developer Keys > + Developer Key > **LTI Key** 2. Method: **Paste JSON** 3. Pegar el JSON config del paso 1 4. Save > ON (activar key) 5. Copiar el **Client ID** generado por Canvas ### 3. Canvas: instalar app en account/curso 1. Account Admin > Settings > Apps > + App > **By Client ID** 2. Pegar Client ID 3. Configurar placements: - Course Navigation (enlace en el menú lateral del curso) - Assignment Selection (crear assignment de Studeia) - Link Selection (enlace en páginas/módulos) - User Navigation (enlace en el menú del usuario) ### 4. Validar En cualquier curso de Canvas: menú lateral > Studeia tool > debe abrir Studeia con el mismo usuario autenticado (via OIDC launch). ## Cómo funciona ``` Alumno en Canvas hace clic en "Studeia Module" ↓ Canvas POST /lti/login?iss=... (Studeia OIDC Login endpoint) ↓ Studeia valida + retorna redirect a Canvas con: - state (HMAC-signed) - nonce (Redis 15min anti-replay) ↓ Canvas redirige al alumno a /lti/launch con JWT id_token firmado ↓ Studeia LtiService.launch(): 1. Valida JWT signature via Canvas JWKS 2. Valida nonce (anti-replay) 3. Valida iss, aud, exp, deployment_id 4. Extrae user_id, name, email, roles, context_id 5. JIT provisioning (crea User si no existe — User.externalId = LTI sub) 6. Crea/actualiza Enrollment (course_id mapping) 7. Inicia sesión de Studeia (Supabase auth) ↓ Redirect al módulo/clase/quiz indicado (LtiLaunch.targetResource) ↓ El alumno usa Studeia con normalidad ``` ## AGS grade passback Cuando el alumno completa una actividad de Studeia que tiene un AGS line_item asociado: ``` LessonCompletion / QuizAttempt finaliza ↓ Studeia LtiAdvantageService.sendScore(): POST {issuer}/api/lti/courses/{courseId}/line_items/{itemId}/scores Body: { userId: lti.sub, scoreGiven: 85, scoreMaximum: 100, activityProgress: "Completed", gradingProgress: "FullyGraded", timestamp: now() } Auth: OAuth 2.0 Client Credentials grant (Studeia private key signs JWT) ↓ Canvas actualiza el Gradebook automáticamente ``` Sin escritura doble — el Canvas Gradebook sigue siendo source-of-truth. ## Names and Roles Provisioning Service (NRPS) La spec LTI 1.3 permite a Studeia consultar la lista de alumnos del curso en Canvas: ``` GET {nrps_url}/memberships Auth: Bearer (OAuth 2.0 Client Credentials) ``` Devuelve el roster (alumnos + roles). Útil para pre-popular Enrollments antes del primer launch. ## Casos de uso comunes ### Universidad ya en Canvas que quiere Studeia en un curso específico 1. El Departamento de Informática decide usar Studeia para CS101 (tutor IA real) 2. El Admin de Canvas añade la Studeia tool al curso CS101 3. Estructura: Canvas tiene topics + assignments + gradebook. Studeia tiene AI tutor + gamificación + interactive content 4. Quizzes via Studeia → grade passback al Canvas Gradebook 5. Los demás cursos de Canvas continúan sin Studeia ### Migración gradual Canvas → Studeia 1. Añadir Studeia LTI en todos los cursos 2. Cursos nuevos: crear directamente en Studeia, enlace LTI en Canvas como entry point 3. Cursos legacy: mantener en Canvas, complementar con Studeia 4. En 1-2 años: evaluar decommission de Canvas ## Limitaciones - **Deep Linking 1.3**: Studeia soporta la selección de recurso específico (módulo/clase) al añadir la tool en un assignment - **LTI Sub Manage** (sub-tenants): no soportado de forma nativa — cada tenant de Studeia = una Developer Key de Canvas - **Canvas plagiarism integration**: no via Studeia LTI (usar plugin de Canvas por separado) ## Solución de problemas ### JWT validation fails Verificar que la JWKS URL de Studeia sea accesible públicamente: `curl https://[tenant].studeia.com/.well-known/jwks.json` debe retornar JSON con las keys. ### Grade passback no funciona Verificar que el scope AGS esté habilitado en la Developer Key de Canvas: `https://purl.imsglobal.org/spec/lti-ags/scope/score` + `lineitem.readonly` o `lineitem`. ### El alumno ve "Tool unavailable" OIDC nonce expirado (>15min) o state HMAC mismatch. Recargar la página de Canvas. ## Ver también - [Use case: University](/use-cases/university) - [Integration Moodle LTI](/integrations/moodle-lti) ## FAQ **Q: ¿Cómo añadir Studeia en un curso de Canvas?** Studeia como LTI 1.3 tool provider. En Studeia: /institution/lti-tools > Generate Client ID + JWKS. En Canvas: Admin > Developer Keys > LTI Key > Method: Paste JSON > pegar config de Studeia. Luego Admin > Settings > Apps > By Client ID > pegar ID. Activar placements: course navigation, assignment, etc. **Q: ¿Las notas se sincronizan automáticamente?** Sí, via AGS (Assignment and Grade Service). Cuando el alumno completa una actividad de Studeia: el backend llama POST {issuer}/api/lti/courses/{courseId}/line_items/{itemId}/scores. La nota aparece en el Canvas Gradebook (Canvas sigue siendo source-of-truth). Sin escritura doble. **Q: ¿Puedo usar el AI tutor de Studeia dentro de Canvas?** Sí. Cuando el alumno accede al enlace LTI en Canvas: el OIDC launch valida el JWT + crea la sesión de Studeia + redirige al módulo/clase. El alumno usa el tutor IA, gamificación, todo de Studeia — dentro del iframe de Canvas (o nueva pestaña si iframe está bloqueado). **Q: ¿Qué datos envía Canvas a Studeia via LTI?** Según la spec LTI 1.3: user_id, name, email, roles (Learner/Instructor/Administrator), context_id (course_id de Canvas), context_label/title (nombre del curso), launch_presentation, resource_link_id. Más los endpoints AGS para grade passback. Names and Roles para listar alumnos del curso (con permiso). --- # [es-ES (AI-translated)] Integración Google Meet (OAuth + Calendar API + Meet REST v2) URL: https://docs.studeia.com/integrations/google-meet Locale: es-ES Section: integrations Updated: 2026-05-24 **Short answer:** Google Meet se integra como proveedor de video via OAuth 2.0 admin consent + Calendar API (crea evento con enlace Meet) + Meet REST API v2 (estado). Configuración en ~15 min a través de Google Cloud Console. Limitaciones: grabación/transcripción iniciadas MANUALMENTE por el host (Google no expone la API start_recording), endMeeting no soportado (el adaptador marca como completado localmente), la funcionalidad completa requiere Workspace de pago. ## Configuración ### 1. Google Cloud Console 1. https://console.cloud.google.com > APIs & Services > Library 2. Habilitar **Google Calendar API** + **Google Meet REST API v2** 3. Credentials > OAuth 2.0 Client ID > Web application 4. Authorized redirect URI: `https://[tenant].studeia.com/api/institution/video-provider/callback/google-meet` 5. Copie Client ID + Client Secret ### 2. Studeia 1. Settings > Video Provider > Google Meet > Connect 2. Pegue Client ID + Client Secret 3. Haga clic en "Authorize" — redirige a Google OAuth admin consent 4. Acepte los permisos (administrador del dominio Google Workspace) 5. Studeia almacena access_token + refresh_token cifrados con AES-256-GCM ### 3. Validar Cree un LiveClass con videoProvider=google_meet > Studeia llama a Calendar API > evento creado con enlace Meet > el alumno accede via joinMethod=external (nueva pestaña). ## Cómo funciona ``` Studeia GoogleMeetAdapter.createMeeting() → Calendar API: events.insert { summary: "Clase: Matemáticas - Geometría", start: { dateTime: ... }, end: { dateTime: ... }, conferenceData: { createRequest: { requestId: uuid, conferenceSolutionKey: { type: "hangoutsMeet" } } }, attendees: [...alumnos.map(s => ({ email: s.email }))] } → Google devuelve el evento + hangoutLink (ej: https://meet.google.com/abc-defg-hij) ↓ Studeia guarda LiveClass.providerJoinUrl = hangoutLink ↓ El alumno accede: joinMethod=external (X-Frame-Options bloquea el iframe) ``` ## Sincronización de grabaciones Cron `/api/cron/recording-sync` cada 15 min: 1. Lista LiveClasses completados hace más de 15 min sin recordingUrl 2. Para cada uno, llama a `adapter.getRecordings(meetingId)` 3. Meet REST API v2: `GET https://meet.googleapis.com/v2/conferenceRecords/{name}` 4. Si la grabación está disponible: actualiza recordingUrl + crea LiveClassTranscription (si hay transcript) **Importante**: la grabación debe haber sido INICIADA por el host durante la reunión. Si el host olvidó grabar, no habrá grabación que sincronizar. ## Refresh tokens Los tokens OAuth de Google expiran cada hora. Studeia: - Cachea access_token en Redis (TTL 55 min) - Antes de cada llamada: verifica la expiración, refresca via refresh_token si es necesario - Si el refresh falla: marca la integración como inactiva + notifica al administrador ## Limitaciones vs Zoom/Teams | Recurso | Google Meet | Zoom | Teams | |---|---|---|---| | Crear reunión via API | Sí (Calendar) | Sí | Sí (Graph) | | Finalizar reunión via API | NO | Sí | NO | | Iniciar grabación via API | NO | Sí | NO | | Obtener grabación via API | Sí (Meet REST v2) | Sí (webhook) | Sí (Graph) | | Transcripción automática | Sí (Workspace Edu+) | Sí (VTT) | Sí (VTT) | | Webhook de ciclo de vida | NO (solo via polling) | Sí | Sí (Graph Notifications) | ## Cuándo NO usar Google Meet - ❌ Escuela sin Workspace de pago (límite de 1 hora por reunión) - ❌ Si se requiere grabación automática sin depender de que el host haga clic - ❌ Si se necesita embed en iframe (Studeia + BBB lo resuelve) - ❌ Si se necesitan eventos webhook de la reunión (Google no los expone — Studeia depende de polling cron) ## Ver también - [Google Workspace overview](/integrations/google-workspace) - [Clases en vivo](/features/live-classes/overview) - [Integración BBB](/integrations/bigbluebutton) ## FAQ **Q: ¿Cómo crea Studeia una reunión en Google Meet?** A través de la Google Calendar API. Studeia crea un evento de Calendar con conferenceData solicitando un enlace de Meet — Google genera la URL automáticamente. La Meet REST API v2 se utiliza para consultar el estado y las grabaciones (cuando están disponibles). **Q: ¿Google Meet tiene grabación automática?** Solo mediante Google Workspace Business Standard+ o Education Standard+. Aun así, la grabación debe iniciarse MANUALMENTE por el host en Meet (Google no expone una API para start_recording automático). Studeia consulta las grabaciones via Calendar Events API + Drive API después de finalizar la reunión. **Q: ¿Puedo usar Google Meet sin Workspace de pago?** Para crear reuniones via API: se necesita Workspace de pago. Para que los alumnos PARTICIPEN: cualquiera puede unirse (incluyendo cuentas @gmail.com personales). Para escuelas con Workspace for Education Fundamentals (gratuito): las reuniones funcionan pero con un límite de 1 hora por sesión. **Q: ¿Funciona el endpoint endMeeting?** NO. Google no expone una API para terminar una reunión de forma programática. El adaptador de Studeia la marca como completada localmente (LiveClass.actualEndTime = now()), pero la reunión de Google en sí continúa hasta que el último participante salga o el host haga clic en 'End meeting' manualmente. --- # [es-ES (AI-translated)] Integración Google Workspace (Drive + Calendar + SSO + Meet) URL: https://docs.studeia.com/integrations/google-workspace Locale: es-ES Section: integrations Updated: 2026-05-24 **Short answer:** Studeia se integra con Google Workspace en 4 aspectos: (1) SSO via OIDC con OAuth 2.0 Client, (2) Google Drive sync bidireccional para biblioteca de medios, (3) Google Calendar sync de clases en vivo, (4) Google Meet como proveedor de video nativo. Funciona con Workspace for Education (incluido el tier gratuito Fundamentals) y Workspace Business/Enterprise. Configuración en ~30 minutos a través de Google Cloud Console + Settings > Integrations en Studeia. ## 4 puntos de integración ### 1. SSO via OIDC **Configuración**: 1. Google Cloud Console > APIs & Services > Credentials > Create Credentials > OAuth 2.0 Client ID 2. Application type: Web application 3. Authorized redirect URI: `https://[tenant].studeia.com/api/auth/sso/[slug]/oidc/callback` 4. Copia Client ID + Client Secret 5. Studeia > Settings > SSO > Add Provider > OIDC 6. Discovery URL: `https://accounts.google.com/.well-known/openid-configuration` (auto-fetch) 7. Allowed domains: ej: `@escuela.edu` (anti-shadow accounts) El aprovisionamiento JIT crea el usuario automáticamente en el primer inicio de sesión. Atributos mapeados: name, email, role. ### 2. Google Drive sync (biblioteca de medios) **Configuración**: 1. Google Cloud Console > APIs > Habilitar **Drive API** 2. Mismo OAuth Client (o crear uno dedicado) 3. Scopes: `https://www.googleapis.com/auth/drive.file` (acceso a los archivos creados por Studeia) o `drive` (acceso completo — si es necesario) 4. Studeia > Settings > Integrations > Google Drive > Connect 5. Flujo de admin consent (OAuth admin del dominio) 6. Studeia almacena tokens cifrados con AES-256-GCM **Funcionalidades** (DriveIntegration + DriveSyncEngine): - **Import**: carpeta de Drive → MediaAsset en Studeia - **Export**: MediaAsset → carpeta de Drive - **Sync**: bidireccional (los cambios en ambos lados se reflejan) - **Backup**: snapshot completo de los MediaAssets en carpeta de Drive El cron `/api/cron/drive-sync` se ejecuta periódicamente (configurado por el admin) y sincroniza las integraciones activas. ### 3. Google Calendar (clases en vivo) **Configuración**: mismo OAuth Client, habilitar **Calendar API**. **Funcionalidades**: - Cuando el admin crea una LiveClass en Studeia → se crea un evento de Calendar para todos los alumnos del grupo - Cambio de horario → actualiza el evento de Calendar - Cancelación → elimina el evento - El alumno ve la clase en Google Calendar del móvil (notificaciones nativas) ### 4. Google Meet (proveedor de video) **Configuración**: 1. Google Cloud Console > APIs > Habilitar **Calendar API** + **Meet REST API v2** 2. OAuth 2.0 Client (el mismo que los anteriores) 3. Studeia > Settings > Video Provider > Google Meet > Connect 4. Flujo de admin consent **Cómo funciona**: - LiveClass creada con videoProvider=google_meet - Studeia crea un evento de Calendar con conferenceData (genera el enlace de Meet automáticamente) - El alumno accede via joinMethod=external (nueva pestaña, abre la app/web de Meet) **Limitación**: endMeeting no está soportado via API — el adaptador lo marca como completed localmente. **Limitación**: grabación/transcripción iniciada manualmente por el host (Google no expone API para iniciar grabación automáticamente). ## Configuración completa (30 minutos) | Paso | Tiempo | |---|---| | 1. Habilitar 4 APIs en Google Cloud Console | 5min | | 2. Crear OAuth 2.0 Client (web app) | 3min | | 3. Configurar SSO en Studeia | 5min | | 4. Conectar Drive + Calendar + Meet en Studeia | 10min | | 5. Validar con 1 usuario de prueba | 5min | | 6. Comunicar a profesores/alumnos | 2min | ## Solución de problemas ### Error "Token expired" Los tokens OAuth de Google expiran cada hora. Studeia almacena `refreshToken` y renueva automáticamente. Si el error persiste: re-autorizar via Settings > Integrations > Disconnect + Reconnect. ### Drive sync lento La Drive API tiene cuotas (1000 req/100s/user). Para más de 5000 archivos por hora, considera: - Filtrar carpetas específicas (no la raíz completa) - Aumentar el intervalo del cron (ej: cada 2h en lugar de 30min) ### Meet sin botón "Grabar" Solo el host (organizador de la reunión) puede iniciar la grabación. Studeia define organizer = profesor configurado. Si otro usuario inició la reunión: Meet bloquea la grabación. ## Consideraciones de privacidad de datos - Tokens OAuth cifrados con AES-256-GCM (regla crítica 15) - OAuth state HMAC-SHA256 + nonce Redis 15min (anti-replay) - Drive sync respeta scopes mínimos (drive.file recomendado vs drive completo) ## Ver también - [SSO Enterprise](/platform/sso-enterprise) - [Clases en vivo](/features/live-classes/overview) - [Integración Microsoft 365](/integrations/microsoft-365) ## FAQ **Q: ¿Studeia se integra con Google Workspace?** Sí, en 4 aspectos: (1) SSO via OIDC — alumnos/profesores inician sesión con cuenta Google. (2) Google Drive sync — biblioteca de medios bidireccional (subida en Drive aparece en Studeia, y viceversa). (3) Google Calendar — las clases en vivo de Studeia se sincronizan con el Calendar del alumno. (4) Google Meet — proveedor de video para clases en vivo nativo (además de BBB/Zoom/Teams). **Q: ¿Funciona con Google Workspace for Education?** Sí. Para K-12 con Workspace Edu Fundamentals (gratuito): SSO funciona, pero los límites de API pueden afectar el Drive sync a escala. Para Workspace Business/Enterprise: sin límites prácticos. Proceso: configurar OAuth 2.0 Client en Google Cloud Console > APIs > Calendar API + Drive API + Meet REST API v2, autorizar el flujo de admin consent, copiar Client ID + Secret en Studeia Settings > Integrations. **Q: ¿Puedo restringir Studeia a usuarios de un dominio Google específico?** Sí. Configura 'Allowed domains' en Settings > SSO (ej: @escuela.edu). Los inicios de sesión de otros dominios son rechazados en la creación JIT. Anti-shadow accounts. **Q: ¿Quién paga por Google Meet?** La escuela/empresa que ya paga Google Workspace (Meet incluido). Studeia no cobra adicional por usar Meet. El límite de duración depende del tier de Workspace (Business Standard = 24h, Education Fundamentals = 1h). --- # [es-ES (AI-translated)] Integración Microsoft 365 (Teams + Graph API + Azure AD SSO + OneDrive) URL: https://docs.studeia.com/integrations/microsoft-365 Locale: es-ES Section: integrations Updated: 2026-05-24 **Short answer:** Studeia se integra con Microsoft 365 en 4 aspectos: (1) SSO Enterprise via Azure AD (SAML 2.0, OIDC, SCIM 2.0 con mapeo grupo→curso para auto-matriculación). (2) Microsoft Teams como proveedor de video para clases en vivo via Graph API. (3) OneDrive sync bidireccional en la biblioteca de medios. (4) Outlook Calendar sync. Compatible con Microsoft 365 A1/A3/A5 (Education) o Business/Enterprise. ## 4 puntos de integración ### 1. Azure AD SSO (SAML / OIDC) **Configuración OIDC** (recomendado): 1. Azure Portal > Azure Active Directory > App registrations > New registration 2. Redirect URI: `https://[tenant].studeia.com/api/auth/sso/[slug]/oidc/callback` 3. Certificates & secrets > New client secret 4. API permissions: `openid`, `profile`, `email` 5. Studeia > Settings > SSO > Add Provider > OIDC 6. Discovery URL: `https://login.microsoftonline.com/{tenantId}/v2.0/.well-known/openid-configuration` 7. Client ID + Client Secret del paso 3 **Allowed domains**: `@escuela.edu` (prevención de cuentas no autorizadas). JIT provisioning + atributos mapeados via `SsoAttributeMapping`. ### 2. SCIM 2.0 (aprovisionamiento automático) **Configuración**: 1. Azure Portal > Enterprise Applications > Studeia > Provisioning 2. Provisioning Mode: **Automatic** 3. Tenant URL: `https://[tenant].studeia.com/api/scim/v2` 4. Secret Token: generado en Studeia > Settings > SSO > SCIM Token (cifrado AES-256-GCM) 5. Test Connection 6. Mappings: predeterminados de Microsoft Graph (firstName, lastName, mail, displayName, accountEnabled, groups) 7. Scope: "Sync only assigned users and groups" 8. Settings: cycle interval = 40 minutes (predeterminado) 9. Start provisioning **Mapeo grupo → curso**: Settings > SSO > Groups. Mapee el grupo AD (ej: "Ingeniería 2026.1") a un curso en Studeia. Cuando AD agrega un usuario al grupo, Studeia lo matricula automáticamente. **Grupos grandes** (>50 miembros): procesados via BullMQ async (cola `scim-group-sync`), Response 202 + jobId. ### 3. Microsoft Teams (proveedor de video) **Configuración**: 1. Azure AD > App registration > API Permissions > Microsoft Graph: - `OnlineMeetings.ReadWrite.All` - `OnlineMeetingRecording.Read.All` - Tipo: Application (no Delegated) 2. Admin consent (requiere Global Administrator) 3. Studeia > Settings > Video Provider > Teams > Tenant ID + Client ID + Client Secret + correo del organizador 4. Auth: Client Credentials flow (sin usuario interactivo) **Webhook**: `/api/webhooks/video/teams` con Graph Change Notifications. Validación de suscripción via retorno de `validationToken`. **Limitación**: endMeeting no está soportado via Graph API — el adaptador lo marca como completado localmente. ### 4. OneDrive sync (biblioteca de medios) Mismo estándar que la integración con Drive: - Modelo DriveIntegration con provider=onedrive - Tokens OAuth cifrados AES-256-GCM - Cron `/api/cron/drive-sync` sincroniza periódicamente - Operaciones: import / export / sync bidireccional / backup ## Configuración completa (1-2 horas) | Etapa | Tiempo | |---|---| | 1. Azure AD App registration | 10 min | | 2. Configurar API permissions + admin consent | 10 min | | 3. SSO OIDC en Studeia | 5 min | | 4. SCIM provisioning | 30-45 min | | 5. Teams provider | 10 min | | 6. Integración OneDrive | 10 min | | 7. Probar con 5 usuarios piloto | 10 min | ## Solución de problemas ### "AADSTS50011: Reply URL mismatch" La Redirect URI en Azure AD no coincide con la configurada en Studeia. Verificar coincidencia exacta (sensible a mayúsculas/minúsculas). ### SCIM "User not found in directory" El usuario fue removido del grupo en AD pero Studeia aún lo referencia. Aguardar el próximo ciclo (40 min) o disparar manualmente via Provisioning > Provision on demand. ### La reunión de Teams se crea pero sin audio El correo del organizador en la configuración de Studeia no tiene una licencia de Teams activa. Verificar en el centro de administración de Microsoft 365. ## LGPD + GDPR - Tokens OAuth cifrados AES-256-GCM (regla 15) - SCIM Bearer token cifrado (regla 85) - Auditoría completa via ScimAuditLog (regla 89) - Microsoft DPA aplicable para empresas europeas ## Ver también - [SSO Enterprise](/platform/sso-enterprise) - [Clases en vivo](/features/live-classes/overview) - [Integración Google Workspace](/integrations/google-workspace) ## FAQ **Q: ¿Studeia se integra con Microsoft 365?** Sí. (1) SSO Enterprise via Azure AD (SAML 2.0 U OIDC + SCIM 2.0 para aprovisionamiento automático). (2) Microsoft Teams como proveedor de video para clases en vivo via Graph API. (3) OneDrive sync en la biblioteca de medios (mismo estándar que Google Drive). (4) Outlook Calendar sync de clases en vivo via Graph API. **Q: ¿Funciona con Microsoft 365 A1 (Education gratuito)?** Sí para SSO + Teams + OneDrive. Los límites de Graph API pueden afectar SCIM a escala (>1000 usuarios). Se recomienda A3/A5 para escuelas medianas/grandes que desean un aprovisionamiento robusto. **Q: ¿Cuánto tiempo lleva configurar SCIM con Azure AD?** 1-2 horas. Azure Portal > Enterprise Applications > Add app > 'Studeia' (catálogo o personalizado) > Provisioning > Mode: Automatic > Tenant URL: https://[tenant].studeia.com/api/scim/v2 > Secret Token (generado en Studeia Settings > SSO > SCIM Token) > mappings predeterminados (compatibles con Microsoft Graph) > Start provisioning. **Q: ¿Puedo usar Teams como proveedor y aun así usar Zoom en algunas clases?** Sí. Configure ambos proveedores en Settings > Video Provider. Para cada LiveClass, el administrador elige qué proveedor usar (LiveClass.videoProvider sobreescribe el predeterminado del tenant). --- # [es-ES (AI-translated)] Integración Moodle LMS via LTI 1.3 (Studeia como herramienta externa) URL: https://docs.studeia.com/integrations/moodle-lti Locale: es-ES Section: integrations Updated: 2026-05-24 **Short answer:** Studeia se integra con Moodle vía LTI 1.3 (Moodle 3.10+). Configuración en Moodle: Site administration > Plugins > External tool > Manage tools > Add tool > pegar Tool URL de Studeia + Client ID. OIDC launch + AGS grade passback (notas regresan al Moodle Gradebook). Útil cuando la institución quiere mantener Moodle como LMS principal y añadir Studeia (tutor IA, gamificación, mobile B2B) en cursos específicos. Para migración total Moodle → Studeia: usar IMS CC import (no LTI). ## Prerrequisitos - Moodle 3.10+ (LTI 1.3 nativo) - Plan Studeia con LTI habilitado (Enterprise o planes de pago) - Rol de administrador en Moodle - HTTPS en ambos lados ## Configuración ### 1. Studeia: generar config de herramienta LTI `/institution/lti-tools > New Tool`: - Tool name: "Moodle Production" - Target Link URI: `https://[tenant].studeia.com/lti/launch` - OIDC Login URI: `https://[tenant].studeia.com/lti/login` - Public JWKS URL: `https://[tenant].studeia.com/.well-known/jwks.json` - Studeia genera Client ID + Deployment ID ### 2. Moodle: registrar herramienta 1. Site administration > Plugins > Activity modules > External tool > **Manage tools** 2. **+ configure a tool manually** 3. Tool name: "Studeia" 4. Tool URL: del paso 1 5. LTI version: **LTI 1.3** 6. Public key type: **Keyset URL** > URL: JWKS de Studeia 7. Initiate login URL: del paso 1 8. Redirection URI(s): del paso 1 9. Tool configuration usage: **Show as preconfigured tool when adding an external tool** 10. Services > Assignment and Grade Services: **Use this service for grade sync and column management** 11. Services > Names and Role Provisioning: **Use this service to retrieve members information** 12. Guardar ### 3. Agregar en un curso 1. Curso Moodle > **Turn editing on** > Add an activity > **External tool** 2. Preconfigured tool: **Studeia** 3. Activity name: "Módulo Studeia - CS101" 4. Guardar El alumno hace clic en el enlace > OIDC launch > Studeia inicia sesión via JWT > redirige al módulo. ## Cómo funciona Idéntico al Canvas LTI (misma especificación LTI 1.3): ``` El alumno hace clic en "Módulo Studeia" en el curso Moodle ↓ Moodle POST /lti/login (Studeia OIDC Login) ↓ Studeia valida + redirige con state + nonce ↓ Moodle redirige al alumno a /lti/launch con JWT id_token ↓ Studeia LtiService.launch(): 1. Valida JWT via Moodle JWKS (auto-fetched) 2. Valida nonce (Redis 15min anti-replay) 3. JIT provisioning (User con User.externalId = LTI sub) 4. Crea Enrollment si es necesario 5. Inicia sesión en Studeia ↓ Redirige al módulo/clase ``` ## AGS grade passback ``` El alumno completa un quiz en Studeia ↓ LtiAdvantageService.sendScore() → POST score ↓ Gradebook de Moodle actualizado ``` ## Cuándo usar LTI vs IMS CC | Escenario | Recomendado | |---|---| | Mantener Moodle, complementar con Studeia en cursos piloto | **LTI** | | Migrar TODO de Moodle a Studeia | **IMS CC import** (POST /api/institution/courses/import) | | Un departamento prueba Studeia antes de una decisión institucional | **LTI** | | Moodle será discontinuado en 6-12 meses | **IMS CC import** + ejecución en paralelo durante la migración | ## Ventajas de LTI vs migración total ✅ El estudiante usa SSO de Moodle ya existente (Shibboleth, OIDC institucional) ✅ El Gradebook de Moodle sigue siendo la fuente de verdad ✅ Sin necesidad de migrar alumnos / cursos / historial ✅ Reversible fácilmente — eliminar la herramienta de Moodle = vuelve al estado anterior ✅ Por curso (solo cursos seleccionados, no toda la institución) ## Limitaciones - **Rendimiento**: cada LTI launch tarda ~500-1000ms (validación JWT + bootstrapping de Studeia) - **Experiencia SSO**: el alumno hace 1 clic en Moodle, 1-2s después está en Studeia (no instantáneo) - **Actividades Moodle Workshop**: no mapeables a Studeia (recrear manualmente) - **Plugins personalizados de Moodle**: no se invocan via LTI de Studeia ## Ver también - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) - [Canvas LTI](/integrations/canvas-lti) - [Caso de uso: Universidad](/use-cases/university) ## FAQ **Q: ¿Studeia funciona como herramienta en Moodle?** Sí, via especificación LTI 1.3 (mismo estándar usado en Canvas, Blackboard, Brightspace). Configuración en Moodle: Site administration > Plugins > Activity modules > External tool > Manage tools > Add tool > pegar Tool URL de Studeia. Funciona en Moodle 3.10+ (LTI 1.3 soportado de forma nativa). **Q: ¿Puedo usar Studeia en un curso Moodle institucional (gobierno/red educativa)?** Sí, si la instalación de Moodle acepta plugins externos via LTI. Algunas instalaciones gubernamentales bloquean las herramientas externas por motivos de seguridad/compliance — verificar con el administrador TI de la red educativa. **Q: ¿Las calificaciones de Studeia vuelven al Gradebook de Moodle?** Sí, via AGS (Assignment and Grade Service) — mismo mecanismo que Canvas. Studeia llama POST {issuer}/api/lti/courses/{courseId}/line_items/{itemId}/scores cuando el alumno completa una actividad. El Gradebook de Moodle se actualiza. **Q: ¿Puedo migrar un curso completo de Moodle a Studeia en lugar de usar LTI?** Sí. Moodle exporta cursos en IMS Common Cartridge (IMS CC v1.x). Studeia importa via POST /api/institution/courses/import. LTI es para CASOS en los que quieres mantener Moodle como LMS principal + agregar funcionalidades de Studeia (tutor IA, gamificación) en cursos específicos. Para migración total: usa IMS CC import. --- # [es-ES (AI-translated)] Integración Stripe (checkout + webhooks + portal de billing) URL: https://docs.studeia.com/integrations/stripe Locale: es-ES Section: integrations Updated: 2026-05-24 **Short answer:** Stripe es el proveedor de pagos B2B internacional de Studeia. Checkout self-service mediante Stripe Checkout Session, webhooks idempotentes (HMAC SHA-256 + ordering guard mediante lastEventAt) para el ciclo de vida de suscripción, portal Stripe self-manage para que el admin cambie de plan/tarjeta, moneda dual BRL + USD detectada por geolocalización. Para PIX/boleto en Brasil: Asaas (integración paralela). ## Configuración ### 1. Stripe Dashboard 1. https://dashboard.stripe.com > Developers > API Keys > copia la Secret Key 2. Webhooks > Add endpoint > URL: `https://[tenant].studeia.com/api/webhooks/stripe` 3. Events to send: - `checkout.session.completed` - `customer.subscription.created` - `customer.subscription.updated` - `customer.subscription.deleted` - `invoice.payment_succeeded` - `invoice.payment_failed` 4. Copia el Webhook signing secret ### 2. Crear productos + prices Para cada plan B2B de Studeia (mini, growth, pro_100): 1. Products > Add product > nombre (ej: "Studeia Mini") 2. Pricing: Recurring monthly + BRL R$ 250.00 3. Copia el price_id (ej: `price_1TZk...`) 4. Repite para USD si deseas soportar clientes internacionales ### 3. Env vars ``` STRIPE_SECRET_KEY=sk_live_... STRIPE_WEBHOOK_SECRET=whsec_... STRIPE_PRICE_MINI=price_... STRIPE_PRICE_GROWTH=price_... STRIPE_PRICE_PRO_100=price_... STRIPE_PRICE_MINI_USD=price_... STRIPE_PRICE_GROWTH_USD=price_... STRIPE_PRICE_PRO_100_USD=price_... ``` ## Flujo de checkout ``` El admin hace clic en "Contratar Mini" en /institution/billing ↓ POST /api/institution/billing/checkout Body: { planSlug: "mini" } ↓ Studeia createCheckoutSession() (lib/billing/create-checkout.ts): 1. resolveCustomerIdForProvider() — obtiene/crea stripeCustomerId 2. Detecta moneda mediante getCurrencyFromHeaders() (server-side, anti-fraude) 3. Stripe Checkout Session con line_items=[price_id correcto] 4. Retorna { url } del Stripe Checkout ↓ Frontend redirige: window.location.href = data.url ↓ El admin paga en Stripe Checkout ↓ Stripe envía webhook checkout.session.completed ↓ Studeia applyWebhookEvent(): 1. Valida la firma HMAC 2. stripe.subscriptions.retrieve(subscriptionId) — siempre re-fetch (no confía en metadata) 3. Valida price_id contra allowlist 4. Cross-check tenantId entre session.metadata y subscription.metadata 5. Crea/actualiza TenantSubscription con currentPeriodEnd REAL 6. Promueve Tenant.plan 7. Crea PaymentLog (idempotente mediante [provider, externalEventId]) ``` ## Hardening (reglas 129-139) - **Webhook retorna 5xx en caso de fallo**: Stripe reintenta durante 3 días - **Ordering guard**: `lastEventAt` + `lastEventId` en TenantSubscription. Los eventos fuera de orden se omiten con warning + PaymentLog - **Idempotencia**: unique [provider, externalEventId] en PaymentLog - **Schema Zod**: `z.enum(PAID_PLAN_SLUGS)` en el body del checkout (anti-typo) - **PII redact**: PaymentLog.rawPayload pasa por `redactPaymentPayload()` (elimina email/name/address/billing_details/cpfCnpj/card.last4 antes de persistir) - **Past_due gate**: `isAccessBlocked(status)` en layouts (reemplaza `status === "suspended"`). Cron `/api/cron/billing-grace-expire` hace la transición tras el período de gracia de 7 días ## Portal Stripe self-manage POST `/api/institution/billing/portal` retorna una URL temporal del portal de Stripe: - El admin cambia de plan (upgrade/downgrade) - Actualiza la tarjeta - Ve facturas - Cancela la suscripción - Sin pasar por el soporte de Studeia ## Multi-currency | Aspecto | BRL | USD | |---|---|---| | Detección | Por defecto | Header x-vercel-ip-country / cf-ipcountry | | Price IDs | STRIPE_PRICE_MINI, _GROWTH, _PRO_100 | STRIPE_PRICE_MINI_USD, _GROWTH_USD, _PRO_100_USD | | Asaas fallback | Sí (PIX/boleto) | NO (Asaas es solo para Brasil) | | Webhook | Mismo endpoint | Mismo endpoint | ## Ver también - [Integración Asaas (PIX)](/integrations/asaas) - [Descripción general de la plataforma](/platform/overview) ## FAQ **Q: ¿Stripe es cómo Studeia recibe el pago de la mensualidad?** Sí, para B2B internacional/tarjeta. El plan se selecciona en /institution/billing > Studeia llama a POST /api/institution/billing/checkout que crea una Stripe Checkout Session > el admin paga > el webhook subscription.activated promueve tenant.plan automáticamente. Para PIX/boleto en Brasil: usa Asaas (integración paralela). **Q: ¿Los webhooks de Stripe son confiables?** Sí, pero Studeia los trata de forma defensiva. (1) Verifica HMAC SHA-256 mediante el header stripe-signature con STRIPE_WEBHOOK_SECRET. (2) Stripe reintenta durante 3 días con backoff en caso de 5xx. (3) Idempotencia mediante unique [provider, externalEventId] en PaymentLog. (4) Ordering guard mediante lastEventAt/lastEventId — los eventos fuera de orden se omiten con warning. (5) checkout.session.completed siempre hace stripe.subscriptions.retrieve() para validar (no confía en metadata). **Q: ¿Studeia soporta la moneda USD para clientes fuera de Brasil?** Sí. STRIPE_PRICE_IDS (BRL) + STRIPE_PRICE_IDS_USD (USD) configurables mediante env vars. Detecta la moneda server-side mediante el header x-vercel-ip-country / cf-ipcountry. Los clientes fuera de Brasil ven el precio en USD automáticamente. **Q: ¿Puedo usar el Stripe Customer Portal para self-service?** Sí. POST /api/institution/billing/portal retorna la URL del portal de Stripe — el admin cambia de plan, actualiza la tarjeta, ve facturas, cancela. Sin necesidad de pasar por soporte. --- # [es-ES (AI-translated)] Integración Zapier / Make (vía webhook + API pública) URL: https://docs.studeia.com/integrations/zapier-and-make Locale: es-ES Section: integrations Updated: 2026-05-24 **Short answer:** Studeia se integra con Zapier, Make (Integromat), n8n y cualquier plataforma no-code mediante 2 mecanismos: (1) Las automatizaciones nativas de Studeia disparan send_webhook a URL externa cuando ocurre un evento (course_completed, quiz_submitted, etc.) — Zapier 'Catch Hook' lo recibe. (2) La plataforma externa llama a la API pública de Studeia (64+ endpoints, Bearer auth, scopes granulares) para crear/actualizar recursos. Sin app oficial en Zapier aún (roadmap 2026 H2) — usar 'Webhooks by Zapier' genérico. ## 2 direcciones de integración ### Dirección 1: Studeia → Zapier (eventos de Studeia disparan workflow externo) Caso de uso: alumno completa un curso → crear lead en Salesforce + notificar canal de Slack + enviar certificado por email personalizado. **Setup**: 1. Zapier > New Zap > Trigger: **Webhooks by Zapier** > Catch Hook 2. Zapier genera la URL: `https://hooks.zapier.com/hooks/catch/.../...` 3. En Studeia: `/institution/automations > New Automation` 4. Trigger: evento `course_completed` 5. Conditions (opcional): `event.score >= 80` 6. Action: `send_webhook` > Method: POST > URL: URL del hook de Zapier 7. Body (interpolación de plantilla): ```json { "studentName": "{{user.name}}", "studentEmail": "{{user.email}}", "courseId": "{{event.courseId}}", "completedAt": "{{event.completedAt}}", "score": "{{event.score}}" } ``` 8. Guardar automatización 9. Zapier > Test trigger > completar un curso en Studeia > Zapier recibe el payload 10. Continuar el Zap: agregar actions (Salesforce, Slack, Gmail, etc) **Eventos disponibles**: lesson_completed, module_completed, course_completed, quiz_submitted, enrollment_created, enrollment_completed, forum_post_created, forum_reply_created, grade_posted, announcement_created, live_class_started, student_inactive, tag_added_to_user, tag_removed_from_user. ### Dirección 2: Zapier → Studeia (crear/actualizar recursos vía API) Caso de uso: nuevo lead en Hubspot → crear usuario alumno + matricular en curso de bienvenida. **Setup**: 1. En Studeia: `/institution/settings/api-keys > Create` > scopes: `users:write`, `enrollments:write` 2. Copie la clave (formato `mia_` + 40 hex) — se muestra UNA ÚNICA VEZ 3. En Zapier: - Trigger: Hubspot 'New Contact' - Action: **Webhooks by Zapier** > POST - URL: `https://[tenant].studeia.com/api/institution/users` - Headers: - `Authorization: Bearer mia_...` - `Content-Type: application/json` - `Accept-Language: es-ES` - Body JSON: ```json { "name": "{{contact.name}}", "email": "{{contact.email}}", "role": "student", "sendInvite": true } ``` 4. Continuar el Zap: otra Action POST hacia `/api/institution/enrollments` con courseId ## Rate limiting La API key de Studeia tiene rate limit por tier: - Standard: 1000 req/hora - High: 5000 req/hora - Custom: configurable Headers de respuesta: `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`. Al superarlo: 429 + `Retry-After`. Zapier respeta Retry-After automáticamente. Para volumen alto: actualizar el tier de rate o usar batch operations. ## Prevención de SSRF (limitación) El webhook de Studeia bloquea IPs privadas (10.x, 192.168.x, etc) y endpoints de metadata (169.254.169.254) — anti-SSRF. Las URLs de Zapier (hooks.zapier.com) son públicas y siempre pasan. Si aloja n8n self-hosted en una IP privada: necesita exponerlo públicamente (Cloudflare Tunnel, ngrok) para que Studeia pueda llamarlo. ## n8n self-hosted n8n tiene un patrón similar a Make/Zapier. El trigger 'Webhook' acepta POST de Studeia. La action 'HTTP Request' llama a la API de Studeia. Ventaja de n8n: puede ser self-hosted (gratis vs Zapier $19+/mes). Para volumen alto + datos sensibles: n8n propio tiene más sentido. ## Roadmap App oficial Zapier (en planning 2026 H2): - Triggers: course_completed, enrollment_created, etc nativos - Actions: Create user, Create enrollment, Update grade, etc - Flujo OAuth 2.0 (en lugar de copiar y pegar API key) - Sin necesidad de Webhooks by Zapier genérico ## Ver también - [Automatizaciones nativas de Studeia](/features/automations/overview) - [API pública](/api/overview) ## FAQ **Q: ¿Studeia tiene app oficial en Zapier?** Todavía no (roadmap 2026 H2). Por ahora: integración vía webhook genérico de Zapier + API pública de Studeia. Cubre el 95% de los casos de uso — Zapier puede llamar a cualquier REST API. **Q: ¿Cómo disparar Zapier cuando un alumno completa un curso?** En Studeia: /institution/automations > New > Trigger: evento 'course_completed' > Action: send_webhook hacia la URL de Zapier 'Catch Hook'. El body incluye {{user.name}}, {{event.courseId}}, {{event.completedAt}}, etc. Zapier lo recibe y dispara el workflow (crear lead en Salesforce, notificar Slack, etc). **Q: ¿Cómo crear un alumno en Studeia vía Zapier?** Zapier 'Webhooks by Zapier' > POST > URL: https://[tenant].studeia.com/api/institution/users + Authorization: Bearer mia_... (API key de Studeia) + Body JSON { name, email, role, sendInvite }. La API de Studeia requiere el scope users:write. **Q: ¿Make y n8n también funcionan?** Sí, de forma idéntica. Make tiene el módulo 'HTTP request' que realiza cualquier llamada REST. n8n tiene el nodo 'HTTP Request' + trigger 'Webhook'. La API de Studeia + webhook funcionan con cualquier herramienta no-code que soporte REST. --- # [es-ES (AI-translated)] Integración Zoom (Server-to-Server OAuth + webhook + sincronización de grabaciones) URL: https://docs.studeia.com/integrations/zoom Locale: es-ES Section: integrations Updated: 2026-05-24 **Short answer:** Zoom se integra con Studeia como proveedor de video mediante Server-to-Server OAuth. Los webhook events con HMAC SHA-256 capturan el ciclo de vida del meeting y las grabaciones. La transcripción VTT automática es ingerible en el RAG del curso. Las credenciales se cifran con AES-256-GCM. Configuración en ~20 min: crea una app S2S OAuth en Zoom Marketplace y pega el Account ID + Client ID + Secret en Studeia Settings > Video Provider > Zoom. ## Configuración detallada ### 1. Crear app Server-to-Server OAuth 1. https://marketplace.zoom.us > Develop > Build App 2. Tipo de app: **Server-to-Server OAuth** 3. Credenciales de la app: copia el **Account ID**, **Client ID**, **Client Secret** ### 2. Scopes necesarios - `meeting:read:admin` — listar meetings - `meeting:write:admin` — crear/actualizar/eliminar meetings - `recording:read:admin` — acceder a grabaciones - `user:read:admin` — información de los hosts ### 3. Event Subscriptions (webhook) 1. App > Feature > Event Subscriptions 2. URL de suscripción: `https://[tenant].studeia.com/api/webhooks/video/zoom` 3. Autenticación: Webhook secret token (cópialo en Studeia) 4. Eventos a suscribir: - Meeting > Meeting Started - Meeting > Meeting Ended - Meeting > Participant Joined / Left - Recording > Recording Completed - Recording > Recording Transcript Completed ### 4. Configurar en Studeia Settings > Video Provider > Zoom > Add: - Account ID - Client ID - Client Secret - Webhook Secret Token (del paso 3) - Set as default (opcional — usa Zoom para todas las LiveClasses sin override) Studeia almacena todo cifrado con AES-256-GCM. ## Cómo funciona ``` Admin/Profesor crea LiveClass en Studeia (videoProvider=zoom) ↓ Studeia ZoomAdapter.createMeeting() → Server-to-Server OAuth token (cached Redis 55 min) → POST https://api.zoom.us/v2/users/{userId}/meetings → Devuelve meetingId + joinUrl + startUrl + password ↓ Studeia guarda en LiveClass.providerMeetingId / providerJoinUrl / providerData ↓ El alumno accede mediante /live-classes/[id] > clic en "Entrar" → joinMethod=external (nueva pestaña) — Zoom NO soporta iframe (X-Frame-Options) → Abre la app/web de Zoom ↓ Durante el meeting: los webhooks notifican a Studeia → meeting.started → LiveClass.actualStartTime → participant.joined → LiveClassAttendance → meeting.ended → LiveClass.actualEndTime ↓ Tras finalizar el meeting (~5-30 min de procesamiento en Zoom): → webhook recording.completed → Studeia actualiza LiveClass.recordingUrl → webhook recording.transcript_completed → Studeia crea LiveClassTranscription con VTT parseado ``` ## Cron fallback Los webhooks de Zoom son **poco fiables** (retrasos, expiración de suscripciones, fallos de red). Studeia ejecuta `/api/cron/recording-sync` cada 15 min: 1. Busca LiveClasses completadas hace más de 15 min sin recordingUrl 2. Para cada una, llama a `adapter.getRecordings(meetingId)` mediante la API de Zoom 3. Si encuentra resultados, actualiza recordingUrl + crea LiveClassTranscription ## Ingesta RAG de la transcripción Tras la aprobación de la transcripción por parte del profesor: 1. `/institution/courses/[id]/transcriptions/[tid]/approve` 2. El texto de la transcripción se convierte en chunks + embeddings + ContentBlock 3. Metadata: `{ source: "live_class_transcript", liveClassId, courseId }` 4. El tutor de IA cita: "En la clase en vivo del día X, la profesora explicó que..." [Detalles en RAG Ingestion](/features/ai-tutor/rag-ingestion). ## Solución de problemas ### "401 Unauthorized" al crear un meeting Token expirado. Verificar logs: - Server-to-Server OAuth token cached Redis 55 min (renovación automática) - Si persiste: rotar el Client Secret en Zoom Marketplace + actualizar en Studeia ### El webhook no llega 1. Verificar que la URL del webhook sea accesible públicamente (curl externo) 2. Validar la firma HMAC SHA-256 (Studeia registra un warning si hay mismatch) 3. Zoom reintenta 3 veces con backoff — si falla las 3 veces, el evento del webhook se pierde (el cron lo recupera) ### Grabación sin VTT El VTT solo se genera si Zoom Cloud Recording está habilitado (no Local Recording). Verificar User > Settings > Recording > Cloud recording activado. ## Costos - Studeia: sin costo adicional (incluido en cualquier plan) - Zoom: facturación directa de Zoom (licencia por host). Studeia no revende Zoom. ## Ver también - [Clases en vivo overview](/features/live-classes/overview) - [RAG Ingestion](/features/ai-tutor/rag-ingestion) - [Integración BigBlueButton](/integrations/bigbluebutton) ## FAQ **Q: ¿Cómo configurar Zoom en Studeia?** Crea una app Server-to-Server OAuth en Zoom Marketplace (scopes: meeting:read, meeting:write, recording:read, user:read). En Studeia > Settings > Video Provider > Zoom: Account ID + Client ID + Client Secret. Configura el webhook en /api/webhooks/video/zoom con HMAC SHA-256 mediante x-zm-signature. Configuración: ~20 minutos. **Q: ¿Las grabaciones de Zoom quedan disponibles en Studeia?** Sí, automáticamente. El webhook recording.completed notifica + cron /api/cron/recording-sync cada 15 min como fallback. recordingUrl se guarda en LiveClass. La transcripción VTT también se captura y almacena en LiveClassTranscription (estado pending → approved → ingested), opcionalmente ingerible en el RAG del curso para que el tutor de IA pueda citarla. **Q: ¿Cuál es el límite de duración de un meeting de Zoom?** Depende del plan de Zoom: Free = 40 min (1 a 1 ilimitado, grupo máx. 40 min), Pro = 30 h, Business+ = 30 h. Para instituciones educativas: se recomienda Pro o Business. Studeia no añade ningún límite propio. **Q: ¿Puedo usar Zoom Webinar?** Sí, con una licencia adicional de Zoom Webinar. Studeia actualmente crea 'meetings' por defecto. Para Webinar (1 host + 1000+ asistentes pasivos): configurar mediante la API de Zoom directamente + LTI launch en Studeia. Roadmap: soporte nativo de Webinar en Studeia. --- # [es-ES (AI-translated)] Tutor IA Multi-Agente URL: https://docs.studeia.com/platform/ai-tutor Locale: es-ES Section: platform Updated: 2026-05-23 **Short answer:** El tutor IA de Studeia es un pipeline multi-agente: StudentModel → RetrievalAgent (RAG) → PedagogicalAgent (estrategia) → LLM (con fallback Claude/GPT/Grok/Gemini) → EvaluationAgent + SupervisorAgent (background). Cita material del curso vía RAG per-tenant, adapta la estrategia pedagógica según el dominio conceptual, detecta misconceptions automáticamente y cuenta con moderación mediante un agente IA dedicado. ## Visión ejecutiva El tutor IA de Studeia no es ChatGPT en un iframe. Es un sistema pedagógico construido para e-learning: ``` Mensaje del alumno ↓ 1. StudentModelService → carga ConceptMastery (bayesiano), misconceptions, quiz history ↓ 2. RetrievalAgent → búsqueda RAG tenant-scoped, boost por áreas débiles en quizzes ↓ 3. PedagogicalAgent → selecciona estrategia (5 opciones) según mastery ↓ 4. Orquestador → construye prompt enriquecido (mastery + misconceptions + RAG context) ↓ 5. LLM (Vercel AI SDK) → streaming, con fallback Claude → GPT → Grok → Gemini ↓ tras respuesta (after()) 6. EvaluationAgent → clasifica misconceptions (Haiku, $0.001) 7. ContentAgent → pre-genera ejercicio de seguimiento 8. SupervisorAgent → modera (5 niveles de severidad, 8 categorías) ``` ## Por qué multi-agente vs single LLM call Single call: - Sin memoria del alumno → repite explicaciones ya dadas - Sin awareness del rendimiento en quizzes → trata igual a un alumno débil que a uno fuerte - Sin moderación → riesgos de jailbreak, off-topic, contenido inadecuado - Sin RAG → inventa hechos sobre el curso Multi-agente: - StudentModel garantiza personalización real - RetrievalAgent garantiza grounding en el material del curso - PedagogicalAgent garantiza adecuación de la estrategia - EvaluationAgent garantiza el feedback loop para que el sistema aprenda - SupervisorAgent garantiza la seguridad ## Estrategias pedagógicas PedagogicalAgent selecciona una de 5 estrategias según el `mastery` (probabilidad de dominio): | Mastery | Estrategia | Comportamiento | |---|---|---| | < 0.3 | direct_instruction | Explicación clara, ejemplos concretos, paso a paso | | 0.3-0.5 | scaffolding | Pistas progresivas, preguntas guiadas simples | | 0.5-0.7 | socratic | Preguntas que llevan al descubrimiento | | 0.7-0.9 | guided_practice | Ejercicios con feedback, aplicación práctica | | > 0.9 | challenge | Problemas complejos, conexiones entre conceptos | Los umbrales son configurables por el admin vía `PedagogicalConfig` (tenant-level), con override por dominio. ### Ajuste por rendimiento en quizzes Si mastery alta (chat) + quiz bajo → "comprensión superficial" → nudge DOWN de estrategia. Si mastery baja + quiz alto → "alumno silencioso" → nudge UP. Pass rate < 40% → cap en scaffolding (no avanza a socratic). ## RAG per-tenant Cada curso puede ser ingerido en el RAG del tenant: - `POST /api/institution/courses/[id]/rag-ingest` (modes: full | incremental) - Itera clases publicadas, extrae texto por tipo (rich_text→HTML strip, slides→elements, quiz→question+explanation, PDF→OCR vía document-extractor) - Chunking (800 tokens, 200 overlap, preserva estructura) - Embeddings vía Voyage AI (1024 dims, fallback OpenAI) - Metadata en cada chunk: `{ source: "course_lesson", courseId, lessonId, lessonTitle, moduleTitle, ingestionId }` - `autoSyncRag: true` re-ingiere incrementalmente cuando el admin edita clases [Detalles en RAG Ingestion](/features/ai-tutor/rag-ingestion). ## Moderación por agente Supervisor SupervisorAgent (Haiku, background) se ejecuta tras cada turno del chat: - 5 niveles de severidad: low, medium, high, critical, **safety** - 8 categorías: lenguaje inapropiado, violencia, ilegal, sexual, off_topic, harassment, **self_harm**, jailbreak_attempt - 3 strikes (LOW/MEDIUM en 7 días) → cuarentena 48h - safety NUNCA penaliza — muestra acogida + recursos de crisis + notifica admin URGENT - Costo: ~$0.001/turno (Haiku vía generateDirect) - Habilitación en cascada: Course.supervisorEnabled → Tenant.supervisorEnabled → default ON [Detalles en Agente Supervisor](/features/ai-tutor/safety-supervisor). ## Multi-provider IA Los 7 agentes IA de Studeia respetan `TenantTaskModelConfig`: | Agente | Método router | ¿Provider configurable? | |---|---|---| | Tutor (chat streaming) | `router.stream()` | Sí | | Orchestrator | TypeScript puro | N/A | | RetrievalAgent | TypeScript puro | N/A | | PedagogicalAgent | TypeScript puro | N/A | | EvaluationAgent | `router.generateDirect()` | Sí | | ContentAgent | `router.generateDirect()` | Sí | | SessionSummarizer | `router.generateDirect()` | Sí | | CourseReviewAgent | `router.generate()` | Sí | | CourseAgent (CMS) | `router.generate()` + tools | Sí | | GamificationAgent | `router.generate()` + tools | Sí | | SupervisorAgent | `router.generateDirect()` | Sí | Cadena de fallback por tier: ``` LLM rápido (Haiku): Claude Haiku → GPT-4o-mini → Grok-3-mini → Gemini Flash LLM medio (Sonnet): Claude Sonnet → GPT-4o → Grok-3-fast → Gemini Pro LLM complejo (Opus): Claude Opus → GPT-4.5 → Grok-3 → Gemini 2.5 Pro ``` Circuit breaker por provider (estado en Redis): si falla 5x en 30s, salta al fallback hasta 60s. ## Limitaciones - El tutor no tiene **voz** (text-to-speech) por defecto. En roadmap. - El tutor no genera **video** ni **avatar en tiempo real**. En roadmap (HeyGen/D-ID). - El RAG es por **curso**, no por institución completa. Cada curso se ingiere por separado. - Los misconceptions resueltos pueden regresar (re-detectados) — esto es esperado, el sistema marca la regresión en la evidencia. ## Ver también - [Tutor IA detalles](/features/ai-tutor/overview) - [RAG Ingestion](/features/ai-tutor/rag-ingestion) - [Agente Supervisor](/features/ai-tutor/safety-supervisor) - [Comparativa vs Khan AI tutor](/comparisons/studeia-vs-google-classroom) ## FAQ **Q: ¿Studeia tiene chat con IA?** Sí. Studeia ofrece un tutor IA conversacional multi-agente. A diferencia de un wrapper de ChatGPT, es un pipeline con 6 agentes (orchestrator, retrieval, pedagogical, evaluation, content, supervisor) que adapta la respuesta según el dominio del alumno en cada concepto, cita material del curso vía RAG per-tenant, detecta misconceptions y ajusta la estrategia pedagógica (direct instruction, scaffolding, socratic, guided practice, challenge). **Q: ¿Puedo cambiar Claude por GPT, Grok o Gemini?** Sí. El admin institucional configura TenantTaskModelConfig por tipo de tarea. Los 7 agentes IA respetan esa configuración — fallback automático entre providers si uno cae (Claude → OpenAI → xAI Grok → Google Gemini). Tool calling funciona con cualquier provider vía Vercel AI SDK. **Q: ¿El tutor tiene acceso al material de mi institución?** Sí, vía RAG per-tenant aislado. Cada curso puede ser 'ingerido' en el RAG: el sistema extrae texto de clases (slides, video transcripts, PDFs, quizzes, rich text), hace chunking, genera embeddings vía Voyage AI (1024 dims) y los almacena con filtro por tenantId+courseId. Cuando el alumno pregunta algo, el tutor busca únicamente en el material del tenant. Nunca cita contenido de otras instituciones. **Q: ¿Cuánto cuesta por alumno por mes?** Depende del uso. Típicamente R$2-8/alumno/mes en IA (registrado en AiUsageLog). El admin ve el desglose en Settings > IA. Mensajes cortos en Haiku (~$0.001), conversaciones largas en Sonnet (~$0.01-0.05). El tenant puede usar sus propias claves Anthropic/OpenAI para reducir costos + eliminar el margen de Studeia. **Q: ¿El tutor IA de Studeia es seguro para menores?** Sí. Tres capas: (1) User.isMinor=true activa filtros de contenido + refuerzo en el system prompt. (2) El agente Supervisor monitorea cada turno en background, clasifica en 5 niveles (low/medium/high/critical/safety) y 8 categorías, con 3 strikes = cuarentena 48h. (3) Self-harm (severity=safety) NUNCA penaliza al alumno — en cambio, muestra un mensaje de acogida + recursos de crisis (líneas de ayuda locales) y notifica al admin como URGENTE. **Q: ¿El tutor detecta errores conceptuales?** Sí. EvaluationAgent (Haiku, background, ~$0.001) clasifica respuestas y detecta StudentMisconception con trazabilidad completa (source, sourceSessionId, lessonId, questionText, contextSnippet, concepts[]). Los misconceptions tienen un ciclo de vida de 3 estados: active → resolving → resolved (state machine con reglas de transición por mastery update, quiz pass, tutor address). El propio tutor es consciente de los misconceptions activos y los aborda proactivamente. --- # [es-ES (AI-translated)] Multi-tenancy y aislamiento de datos URL: https://docs.studeia.com/platform/multi-tenancy Locale: es-ES Section: platform Updated: 2026-05-23 **Short answer:** Multi-tenancy en Studeia significa que cada institución (Tenant) tiene datos completamente aislados a nivel de base de datos. Filtro obligatorio por tenantId en todas las queries Prisma, RLS Supabase como red de seguridad, API keys por tenant, configuración de IA independiente (puede usar sus propias claves Anthropic/OpenAI) y white-label total (dominio, branding, tema, email). ## Modelo conceptual ``` Tenant (Institución) ├── Users (alumnos, profesores, coordinadores, admin institucional) ├── Courses → Modules → Lessons ├── ClassGroups (grupos/clases) ├── MediaAssets (biblioteca de medios) ├── Automations ├── EmailTemplates ├── VideoProviderConfig (BBB/Zoom/Teams/Meet) ├── TenantApiKey (claves propias de IA) ├── TenantSubscription (billing) ├── ...todas las demás entidades ``` Los usuarios sin tenantId son B2C (plataforma directa). Los usuarios con tenantId pertenecen a una institución. ## Aislamiento de datos — 3 capas ### Capa 1: Filtro obligatorio en queries Toda query Prisma en el código de la aplicación filtra por `tenantId`: ```ts const { tenantId } = requireTenant(user); const courses = await prisma.course.findMany({ where: { tenantId }, // OBLIGATORIO }); ``` `requireTenant()` en `apps/web/lib/tenant.ts` retorna NextResponse 403 si el usuario no tiene tenant. Sin esta llamada, es imposible acceder a datos B2B. ### Capa 2: RLS en Supabase Como red de seguridad ante bugs, las políticas RLS en Supabase refuerzan el aislamiento incluso en queries directas. Si un código olvida el filtro `tenantId`, la base de datos lo rechaza. ### Capa 3: Auditoría de admin global Cuando un admin global necesita acceder a los datos de un tenant (soporte, debug), utiliza **impersonación** vía cookie HMAC con: - TTL fijo de 1h (no prorrogable) - Firma HMAC-SHA256 con `IMPERSONATION_SECRET` - Auditoría en `AdminAuditLog` (acción `impersonate.start`, IP, user-agent) - `getUserProfile()` retorna `isImpersonating: true` + overlay en memoria - Supabase auth NUNCA modificado (solo overlay) - Banner fijo en /institution/ alerta al admin durante la sesión [Detalles en panel admin SaaS](/features/admin-saas/impersonation). ## API keys por tenant Por defecto, todas las llamadas LLM usan las claves globales (`ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, etc.) de Studeia. Los costos se cargan al tenant mediante metering. Pero las instituciones que ya tienen cuentas en Anthropic/OpenAI/Google pueden usar **sus propias claves** (`TenantApiKey`, cifrada con AES-256-GCM en la base de datos): 1. Los costos van DIRECTAMENTE a la cuenta del tenant en Anthropic/OpenAI 2. Studeia no cobra margen de IA — solo la suscripción mensual 3. Resolución automática: `TenantApiKey` → `ProviderApiKey` global → `process.env` (cascada en `apps/web/lib/api-key-resolver.ts`) NUNCA se establece `process.env` en runtime (generaría conflictos entre tenants) — la key se pasa vía options del SDK. ## White-label completo Cada tenant puede personalizar: | Aspecto | Cómo | |---|---| | Logo, favicon | Subida en los ajustes | | Colores (primary, accent, background) | Editor con vista previa | | Fuente (Google Fonts) | Desplegable | | Tema visual (entre 9 opciones) | Toggle por usuario o predeterminado del tenant | | CSS personalizado | Saneado, máx. 10KB | | Dominio personalizado | DNS CNAME + TLS automático Traefik | | Logo en el email | Por plantilla | | Email remitente (SMTP/Resend/SendGrid) | TenantEmailConfig | | Ocultar marca Studeia | Sí (plan enterprise) | ## Roles y permisos | Rol | Alcance | Puede hacer | |---|---|---| | `student` | Propio progreso | Chat tutor, cursos, simulacros, gamificación | | `parent` | Hijos vinculados | Ver progreso, alertas, informes | | `teacher` | Propios grupos/cursos | Crear cursos, subir material, ver alumnos de los grupos | | `coordinator` | Todos los grupos del tenant | Gestionar grupos, ver todos los alumnos | | `pedagogue` | Todos los alumnos del tenant | Orientación educativa, informes | | `institution_admin` | Todo el tenant | Config IA, API keys, white-label, usuarios | | `admin` | Global (plataforma) | Todo + gestionar tenants | ## Límites por plan Límites aplicados vía `checkTenantResourceLimit(tenantId, resource)` en [apps/web/lib/plan-limits.ts](https://github.com/donattocosta-lang/studeia): | Plan | Alumnos máx. | Profesores | Cursos | IA | |---|---|---|---|---| | Demo | 1 | 1 | 1 | Solo Haiku, 10 msgs/día | | Mini | 10 | Ilimitado | Ilimitado | Todos los proveedores | | Crescimento | 50 | Ilimitado | Ilimitado | Todos los proveedores | | Escala | 100 | Ilimitado | Ilimitado | Todos los proveedores | | Enterprise | Custom (`maxStudentsOverride`) | Ilimitado | Ilimitado | Todos los proveedores | 7 puntos de aplicación (todos auditados el 2026-04-11): 1. `POST /api/courses/[courseId]/enroll` — auto-inscripción del alumno 2. `POST /api/institution/courses/[id]/clone` — clonación de curso 3. `POST /api/institution/courses/import` — importación IMS CC 4. `executeEnrollUser()` en automatización 5. `POST /api/scim/v2/Users` — aprovisionamiento SCIM 6. `POST /api/institution/users` — vincular usuario existente 7. `PATCH /api/institution/users/[id]` — promover rol ## Cómo solicitar override enterprise Los tenants enterprise pueden tener `Tenant.maxStudentsOverride: Int?` ajustado por el admin global. Sin override (`null`), enterprise = ilimitado. Contacto comercial vía [suporte@studeia.com](mailto:suporte@studeia.com). ## Limitaciones - Un User pertenece a UN tenant. Para profesores que atienden múltiples escuelas, crear usuarios separados. - El intercambio de cursos entre tenants no es nativo (cada tenant tiene su CMS aislado). Roadmap: marketplace de cursos con licenciamiento. - La migración de un tenant a otro plan es instantánea, pero el downgrade que viola los límites actuales se bloquea hasta que el tenant ajuste los recursos. ## Ver también - [White-label](/platform/white-label) - [SSO Enterprise](/platform/sso-enterprise) - [Comparativa: Studeia vs Moodle](/comparisons/studeia-vs-moodle) ## FAQ **Q: ¿Los datos de los tenants están realmente aislados?** Sí. Tres capas: (1) toda query Prisma filtra por tenantId de forma obligatoria (regla crítica 30 del proyecto); (2) políticas RLS en Supabase como red de seguridad; (3) auditoría automatizada de queries cross-tenant mediante tests. La impersonación de admin global es auditada (AdminAuditLog) y utiliza una cookie HMAC con TTL fijo de 1h. **Q: ¿Puedo tener dominio propio (white-label completo)?** Sí. Configure Tenant.customDomain en los ajustes y apunte el CNAME al dominio de Studeia. TLS automático vía Let's Encrypt en Traefik. Logo, favicon, colores, fuentes, 9 temas visuales e incluso mensajes de email personalizables. Puede eliminar la marca Studeia por completo. **Q: ¿Los costos de IA son por tenant?** Sí. Cada llamada LLM se registra en AiUsageLog con tenantId. El admin global ve el desglose de costos por tenant en /admin/finance/ai-cost (con cálculo de margen vs MRR). Los tenants pueden usar sus propias API keys (TenantApiKey) — en ese caso los costos van al tenant, no a Studeia. **Q: ¿Cómo se gestionan los usuarios cross-tenant?** Por diseño, un User pertenece a UN tenant (User.tenantId). Para casos B2B donde un pedagogo atiende múltiples escuelas, recomendamos crear usuarios separados por institución. El admin global puede reasignar usuarios vía /admin/tenants (auditado). --- # [es-ES (AI-translated)] Visión general de la plataforma Studeia URL: https://docs.studeia.com/platform/overview Locale: es-ES Section: platform Updated: 2026-05-23 **Short answer:** Studeia es una plataforma EAD (educación a distancia) B2B brasileña white-label para escuelas, universidades, preuniversitarios y capacitación corporativa. Combina CMS de cursos, tutor IA multi-provider con fallback automático, gamificación nativa, clases en vivo (BBB/Zoom/Teams/Meet), gradebook avanzado, SSO Enterprise (SAML/OIDC/SCIM) y API pública en una única plataforma SaaS alojada en Brasil. ## Para quién es Studeia atiende cuatro perfiles de institución: | Vertical | Caso típico | Recursos prioritarios | |---|---|---| | **Escuelas K-12** | Primaria y secundaria, alineación curricular, portal de padres | Portal de padres con narrativa IA, gamificación, monitoreo de menores, LGPD | | **Preuniversitarios** | Simulacros en vivo, tutor IA personalizado, analytics | Analytics psicométricas de quiz, tutor IA con RAG del material, simulacros | | **Universidades** | Cursos híbridos, LTI con Canvas/Moodle existente, gradebook | LTI 1.3 (tool provider), rúbricas multi-criterio, AGS grade passback | | **Capacitación corporativa** | T&D, compliance, SSO con Okta/Azure AD | SAML/OIDC, SCIM 2.0, certificados verificables (OB 3.0), API pública | ## Arquitectura en una frase Next.js 15 (App Router) + PostgreSQL (Supabase) + Redis + Prisma 7 + LLM Router multi-provider (Claude → GPT → Grok → Gemini fallback) + Voyage AI embeddings (RAG) + Stripe/Asaas billing, desplegado en Docker vía Traefik con Let's Encrypt. ## Recursos principales ### 1. Multi-tenancy real con white-label completo Cada institución (Tenant) tiene aislamiento de datos a nivel de base de datos (filtro `tenantId` en todas las queries + RLS en Supabase). El white-label cubre: - Colores, logo, favicon, fuente - Dominio personalizado (con TLS automático vía Let's Encrypt) - 9 temas visuales (6 dark glass + 3 light solid/material) - Email institucional con templates branded - Posibilidad de deshabilitar la marca Studeia completamente [Detalles en Multi-tenancy](/platform/multi-tenancy) y [White-label](/platform/white-label). ### 2. Tutor IA multi-agente con RAG per-tenant El tutor IA de Studeia no es un wrapper de ChatGPT. Es un pipeline multi-agente: ``` Mensaje del alumno ↓ StudentModelService → carga ConceptMastery + misconceptions + quiz performance ↓ RetrievalAgent → búsqueda RAG tenant-scoped, boost por áreas débiles en quizzes ↓ PedagogicalAgent → selecciona estrategia (direct_instruction, scaffolding, socratic, guided_practice, challenge) basado en mastery ↓ Orquestador → construye prompt enriquecido ↓ LLM (Claude → GPT → Grok → Gemini fallback) → streaming ↓ después de la respuesta EvaluationAgent → clasifica misconceptions (Haiku, ~$0.001) ContentAgent → pre-genera ejercicio de seguimiento SupervisorAgent → modera (background, ~$0.001) ``` El contenido del curso se ingiere vía RAG per-tenant — el tutor cita el material correcto de la institución, no contenido genérico. [Detalles en Tutor IA Overview](/features/ai-tutor/overview). ### 3. CMS educacional con 8 tipos de clase + 6 subtipos interactivos Tipos de clase: slides, video, PDF, rich_text, quiz, assignment, live_class, external_link. Subtipos interactivos: interactive_video (con checkpoints), drag_drop, fill_blanks, flashcard_set (con algoritmo SRS SM-2), timeline, branching_scenario (árbol de decisión). Auto-generación de curso: sube un PDF/DOCX/PPTX, el pipeline LLM extrae tópicos y genera módulos con clases estructuradas. [Detalles en CMS](/features/cms/courses-modules-lessons). ### 4. Motor de quiz con analytics psicométricas Cronbach's alpha (consistencia interna), point-biserial discrimination, dificultad de ítem, análisis de distractores MC/TF, distribución de puntajes. Integridad académica: detecta cambio de pestaña, anomalías de tiempo, muestra flags en el gradebook. Soporte a question bank reutilizable con 8+ tipos de pregunta. ### 5. Clases en vivo multi-provider BigBlueButton (predeterminado, iframe embed), Zoom (Server-to-Server OAuth), Microsoft Teams (Graph API), Google Meet (OAuth + Calendar). Patrón adapter unificado. Webhooks lifecycle + cron de sincronización de grabaciones (fallback). Credenciales almacenadas con AES-256-GCM. ### 6. Gamificación nativa completa XP, niveles (config jerárquica tenant→curso), 11 criterios de badge con lógica AND/OR booleana, badges OB 3.0 (Open Badges 3.0 — W3C Verifiable Credential), leaderboards Redis ZSET (alcance curso/grupo, ventanas weekly/monthly/alltime), contests con 7 métricas, tienda de recompensas con monedas virtuales, y agente IA dedicado para que el admin cree estrategias de gamificación vía chat. ### 7. Comunicación integrada Foros (por grupo o course-wide), anuncios (con alcance de grupo y notificaciones automáticas), mensajes privados (DMs), notificaciones in-app en tiempo real, adjuntos en cualquier canal (foro/anuncio/mensaje), email institucional con templates Handlebars en 4 idiomas, 3 providers (SMTP/Resend/SendGrid). ### 8. SSO Enterprise + SCIM 2.0 SAML 2.0 (vía node-saml), OIDC con PKCE, SCIM 2.0 (14 endpoints RFC 7644), JIT provisioning, group→course mapping (matriculación automática), audit log SCIM. Plan enterprise. ### 9. LTI 1.3 (tool provider) Studeia puede registrarse como herramienta externa en Canvas, Blackboard, Moodle o cualquier LMS LTI 1.3-compatible. OIDC launch, JWT/JWKS, AGS grade passback (las notas se sincronizan de vuelta automáticamente). [Detalles en integraciones LTI](/integrations/canvas-lti). ### 10. Automatizaciones (mini-n8n built-in) Motor Disparador → Condición → Acción. 14+ triggers (lesson_completed, quiz_submitted, enrollment_created, forum_post_created, scheduled_trigger, webhook_received, etc), 8 acciones (notify, tag, announce, webhook, enroll, etc). Prevención SSRF, rate limiting, límite de profundidad de cadena 5. Webhook público autenticado por token. [Detalles en Automatizaciones](/features/automations/overview). ### 11. Mobile B2B (React Native/Expo) App Android publicada. 22 endpoints `/api/mobile/*` con shape simplificado. White-label dinámico post-login. Notificaciones push vía Expo. SSO vía deep linking (`studeia://auth/callback`). Actualizaciones OTA vía expo-updates. ### 12. Cumplimiento LGPD nativo `GET /api/user/data-export` (Art. 18 IV, rate limit 1/24h). `DELETE /api/user/account` (Art. 18 VI, anonimiza PII, mantiene learning data por 5 años de retención fiscal). Políticas de Privacidad/Términos públicas en 4 idiomas. DPA disponible para enterprise. ### 13. API pública con 64+ endpoints Autenticación dual (session + Bearer API key). Scopes granulares (`courses:read`, `users:write`, etc — 32 tipos). Rate limiting Redis (3 tiers). Docs en [/api/overview](/api/overview). ## Modelo de facturación 5 planes B2B: | Plan | Precio/mes | Alumnos | Para quién | |---|---|---|---| | Demo | Gratis | 1 | Evaluar la plataforma (Haiku only, 10 msgs/día) | | Mini | R$250 | 10 | Tutor particular, escuela pequeña | | Crescimento | R$1.000 | 50 | Preuniversitario pequeño, capacitación corporativa | | Escala | R$1.500 | 100 | Preuniversitario mediano, escuela | | Enterprise | Bajo consulta | Custom (`maxStudentsOverride`) | Universidad, T&D corporativo grande | Costo adicional de IA: típicamente R$2-8/alumno/mes dependiendo del uso (seguimiento vía `AiUsageLog` por tenant). El admin puede cambiar de provider (Claude → GPT → Grok → Gemini) sin romper ninguna funcionalidad. ## Stack técnico resumido - **Runtime**: Next.js 15 App Router, React Server Components, TypeScript strict mode - **Base de datos**: PostgreSQL (Supabase) + pgvector (RAG, 1024 dims) - **ORM**: Prisma 7 con adapter-pg - **Cache/Queue**: Redis 7 + BullMQ - **LLM**: Claude (primary) → OpenAI → xAI Grok → Google Gemini (cadena de fallback por tier) - **Embeddings**: Voyage AI (primary, 1024 dims) → OpenAI (fallback) - **Auth**: Supabase Auth con SSR - **Storage**: Supabase Storage (público para media, privado para submissions) - **Email**: SMTP/Resend/SendGrid (factory pattern) - **Video en vivo**: BBB/Zoom/Teams/Google Meet (adapter pattern) - **Billing**: Stripe + Asaas (PIX) - **Mobile**: Expo SDK 52 + NativeWind + Supabase + TanStack Query - **Deploy**: Docker + Traefik v3.2 + Let's Encrypt en VPS propio - **Observabilidad**: Sentry (10% session replay, 100% en error) ## Cumplimiento y seguridad - LGPD nativo (exportación de datos, eliminación de cuenta, DPA enterprise) - WCAG 2.1 AA (skip-to-content, focus-visible, alto contraste, barra A11y, navegación por teclado) - Open Badges 3.0 (W3C Verifiable Credentials) - LTI 1.3 (compatible con certificación 1EdTech) - SCIM 2.0 (RFC 7644) - AES-256-GCM en credenciales OAuth + API keys - HMAC-SHA256 en OAuth state + cookies de impersonación - Rate limiting Redis en todas las superficies LLM - 100 tests unit/integration pasando (45 core + 55 web) ## Limitaciones conocidas Para ser honestos sobre los trade-offs: - **App iOS**: aún en roadmap (requiere cuenta Apple Developer Program $99/año) - **Avatar en tiempo real** (HeyGen/D-ID WebRTC): no implementado - **Videoclases pre-generadas con IA** (Synthesia): no implementado - **Plugins de terceros**: Studeia no tiene ecosistema de plugins como Moodle. Personalización vía API pública. - **On-premise**: Studeia es SaaS-only. Para regulaciones que exigen alojamiento on-premise, aún no lo soportamos. ## Ver también - [Multi-tenancy](/platform/multi-tenancy) - [Tutor IA](/platform/ai-tutor) - [Comparativa: Studeia vs Moodle](/comparisons/studeia-vs-moodle) - [Caso de uso: Preuniversitario](/use-cases/enem-prep-cursinho) - [Glosario EAD](/glossary) ## FAQ **Q: ¿Qué diferencia a Studeia de Moodle y Canvas?** Studeia es multi-provider en IA por defecto (Claude, GPT, Grok, Gemini con fallback automático), con tutor IA multi-agente nativo que ingiere el material del curso vía RAG per-tenant. Moodle requiere plugins para IA; Canvas tiene integraciones limitadas. Studeia también nace con SSO/SCIM enterprise, gamificación nativa (XP, badges OB 3.0, leaderboards Redis, contests, shop), gradebook con analytics psicométricas (Cronbach alpha, point-biserial) y moderación de chat IA con supervisor automático — todo built-in, sin plugins de terceros. **Q: ¿Studeia reemplaza a Moodle o Canvas?** Para instituciones brasileñas (escuelas, preuniversitarios, universidades, capacitación corporativa) que quieren soporte en portugués, PIX/Asaas integrados, LGPD nativo, costo predecible en BRL e IA de punta, sí. Para instituciones en ecosistema Canvas establecido (campus universitario americano), Studeia puede usarse como LTI tool complementaria. **Q: ¿Cuál es el modelo de facturación?** 5 planes B2B: Demo (gratis, 1 alumno), Mini (R$250/mes, 10 alumnos), Crescimento (R$1.000/mes, 50 alumnos), Escala (R$1.500/mes, 100 alumnos), Enterprise (bajo consulta, límite personalizable vía maxStudentsOverride). Costo de IA por alumno típicamente entre R$2-8/mes dependiendo del uso. **Q: ¿Qué idiomas soporta la plataforma?** 4 idiomas con paridad completa: Portugués (pt-BR), Inglés (en-US), Español (es-ES) y Francés (fr-FR). ~3.323 claves traducidas, 100+ rutas de API localizadas, prompts de LLM por idioma, formateo de fechas locale-aware. **Q: ¿Studeia funciona en móvil?** Sí. App nativa B2B en React Native/Expo SDK 52 publicada para Android. iOS en el roadmap (requiere cuenta Apple Developer). Funcionalidades cubiertas: dashboard, cursos, clases, chat tutor IA (con streaming SSE), notas, clases en vivo, calendario, mensajes, gamificación, perfil, notificaciones push y SSO vía deep linking. --- # [es-ES (AI-translated)] SSO Enterprise: SAML, OIDC y SCIM 2.0 URL: https://docs.studeia.com/platform/sso-enterprise Locale: es-ES Section: platform Updated: 2026-05-23 **Short answer:** El plan Enterprise de Studeia soporta SAML 2.0 (mediante node-saml), OIDC con PKCE y SCIM 2.0 (14 endpoints RFC 7644). El JIT provisioning crea usuarios en el primer inicio de sesión, el group-to-course mapping matricula automáticamente a los alumnos en cursos cuando el IdP los agrega al grupo, el Bearer token SCIM está cifrado con AES-256-GCM y todos los eventos se auditan en ScimAuditLog. Integra con Okta, Azure AD, Google Workspace y cualquier IdP estándar. ## Requisitos previos - Plan Enterprise (verificado en la ruta `/api/auth/sso/[tenantSlug]` — otros planes devuelven 403) - Dominio configurado (white-label opcional pero recomendado) - Acceso de administrador al IdP (Okta, Azure AD, Google Workspace, Ping, OneLogin, etc.) ## SAML 2.0 ### Configuración ``` Settings > SSO > Add Provider > SAML ``` Campos: - **Display name** — nombre que aparece en el botón "Sign in with..." - **Metadata XML URL** O **Metadata XML pegado** — proporcionado por el IdP - **SP-initiated** o **IdP-initiated** — Studeia soporta ambos - **Allowed domains** — restringe emails (anti-shadow accounts) ### Endpoints expuestos - **ACS (Assertion Consumer Service)**: `/api/auth/sso/[tenantSlug]/saml/callback` - **SP metadata**: `/api/institution/sso/metadata` ### Validación La respuesta SAML se valida mediante [node-saml](https://www.npmjs.com/package/node-saml): - Verificación de XML signature (anti-tampering) - Validación de namespace XML de SAML (anti-XXE) - Comprobaciones de NotBefore/NotOnOrAfter - Restricción de audiencia (Audience restriction) ## OIDC ### Configuración ``` Settings > SSO > Add Provider > OIDC ``` Campos: - **Discovery URL** — `https://idp.com/.well-known/openid-configuration` (auto-fetch) - **Client ID** + **Client Secret** (cifrado con AES-256-GCM) - **Scopes** — por defecto: `openid profile email` - **PKCE** — siempre activado (método de desafío S256) ### Flujo 1. El alumno hace clic en "Sign in with [IdP]" → `/api/auth/sso/[tenantSlug]/oidc` 2. Redirección al IdP con PKCE challenge + state firmado con HMAC + nonce en Redis (TTL 15min anti-replay) 3. El IdP autentica → callback `/api/auth/sso/[tenantSlug]/oidc/callback` 4. Studeia valida state + nonce, intercambia el code por tokens (PKCE verifier) 5. Endpoint Userinfo → JIT provisioning (crea User si no existe) → sesión Supabase ## SCIM 2.0 ### 14 endpoints RFC 7644 ``` GET /api/scim/v2/ServiceProviderConfig GET /api/scim/v2/ResourceTypes GET /api/scim/v2/Schemas GET /api/scim/v2/Users (list, con filter) POST /api/scim/v2/Users (create) GET /api/scim/v2/Users/{id} PUT /api/scim/v2/Users/{id} (replace full) PATCH /api/scim/v2/Users/{id} (partial — Microsoft Graph compat) DELETE /api/scim/v2/Users/{id} (soft-delete: User.status=suspended) GET /api/scim/v2/Groups (list) POST /api/scim/v2/Groups GET /api/scim/v2/Groups/{id} PUT /api/scim/v2/Groups/{id} PATCH /api/scim/v2/Groups/{id} DELETE /api/scim/v2/Groups/{id} ``` ### Configuración en Azure AD (ejemplo) 1. Azure Portal > Enterprise Applications > Studeia > Provisioning 2. Provisioning Mode: **Automatic** 3. Tenant URL: `https://tuapp.studeia.com/api/scim/v2` 4. Secret Token: generado en Studeia en Settings > SSO > SCIM Token (Bearer, cifrado en la base de datos) 5. Test Connection 6. Mappings: atributos estándar (compatible con Microsoft Graph) 7. Settings > Scope: "Sync only assigned users and groups" 8. Start provisioning ### Group → Course mapping Permite la matrícula automática cuando el IdP agrega un usuario a un grupo: 1. Configura el mapping en Settings > SSO > Groups 2. Para cada SsoGroup, elige el Course destino 3. Cuando SCIM agrega un miembro al grupo → Studeia crea un Enrollment activo en el curso 4. Cuando lo elimina → cancela la matrícula (status=cancelled) 5. Grupos grandes (>50 miembros): procesamiento mediante BullMQ (cola `scim-group-sync`), Response 202 + jobId ## Seguridad ### Tokens - SCIM Bearer token: cifrado con AES-256-GCM en `TenantSsoConfig.scimToken` — NUNCA en texto plano - Tokens OAuth (integración con Google Workspace): mismo estándar - State OAuth: HMAC-SHA256 con `OAUTH_STATE_SECRET` + nonce en Redis (TTL 15min) ### JIT provisioning - `allowedDomains` valida el email antes de crear el usuario - Atributos del IdP mapeados mediante `SsoAttributeMapping` - Role por defecto configurable (`student` o `teacher`) ### Auditoría `ScimAuditLog` registra: - Toda operación SCIM (Create/Update/Delete) con timestamp + IP + actor (IdP) + usuario/grupo afectado + payload (redactado) - AdminAuditLog para cambios en SsoConfig realizados por un administrador institucional ## Limitaciones - **LDAP** directo (sin SAML/OIDC) no soportado de forma nativa — en el roadmap - **Just-in-time deprovisioning** mediante SAML SLO (Single Logout) parcial — se recomienda usar SCIM para un desaprovisionamiento confiable - **Autenticación multifactor** delegada al IdP (Studeia no gestiona MFA propio cuando SSO está activo) - **Group nesting** (grupos dentro de grupos) soportado parcialmente — se recomienda hacer flatten en el IdP ## Ver también - [Multi-tenancy](/platform/multi-tenancy) - [API pública](/api/overview) ## FAQ **Q: ¿Studeia soporta SSO con Okta?** Sí, mediante SAML 2.0 u OIDC. Configura en Settings > SSO > Add Provider, elige SAML u OIDC, pega el metadata XML (SAML) o la discovery URL (OIDC). El JIT provisioning crea usuarios automáticamente en el primer inicio de sesión. **Q: ¿Qué protocolos SSO soporta Studeia?** SAML 2.0 (mediante node-saml, valida XML signature, soporte para SP-initiated e IdP-initiated), OIDC con Authorization Code + PKCE + discovery automática, SCIM 2.0 para aprovisionamiento (RFC 7644 — endpoints de Users + Groups + ServiceProviderConfig). **Q: ¿SCIM 2.0 funciona con Azure AD?** Sí. Studeia expone /api/scim/v2/Users + /api/scim/v2/Groups con autenticación Bearer token. Configura en Azure AD Enterprise Application > Provisioning > Provisioning Mode: Automatic > Tenant URL: https://tuapp.studeia.com/api/scim/v2 > Secret Token: generado en Studeia. Soporta CRUD, soft-delete (User.status=suspended) y operaciones bulk. **Q: ¿El group-to-course mapping automático funciona?** Sí. Un SsoGroup puede mapearse a un Course mediante SsoGroupCourseMapping. Cuando el IdP agrega un usuario al grupo, Studeia lo matricula automáticamente en el curso. Cuando lo elimina, cancela la matrícula. Los grupos grandes (>50 miembros) se procesan mediante BullMQ (se devuelve un jobId). **Q: ¿Cuál es el tiempo promedio de configuración del SSO?** 30-45 minutos para SAML/OIDC + 1-2 horas para el aprovisionamiento SCIM completo. Documentado paso a paso por IdP en /integrations/ (Okta, Azure AD, Google Workspace). --- # [es-ES (AI-translated)] White-label: personalización total de marca URL: https://docs.studeia.com/platform/white-label Locale: es-ES Section: platform Updated: 2026-05-23 **Short answer:** El white-label en Studeia cubre dominio propio (con TLS automático vía Let's Encrypt), logo, colores, fuente, 9 temas visuales, emails desde tu sender, CSS personalizado saneado y ocultación completa de la marca Studeia en el plan Enterprise. Todo configurable en el panel admin, sin necesidad de código. ## Qué es personalizable | Aspecto | Cómo configurar | Plan requerido | |---|---|---| | Logo + favicon | Subir en Settings | Mini+ | | Colores (primary, accent, bg) | Selector de color | Mini+ | | Fuente (Google Fonts) | Desplegable | Mini+ | | Tema visual predeterminado | Toggle en Settings | Mini+ | | Permitir al usuario cambiar tema | Toggle en Settings | Mini+ | | CSS personalizado | Editor con saneado | Mini+ | | Dominio personalizado | DNS CNAME + Settings | Mini+ | | Email sender + templates | TenantEmailConfig | Mini+ | | Ocultar marca Studeia | Toggle en Settings | Enterprise | | App móvil white-label | Build dedicado EAS | Enterprise | ## Configurar dominio personalizado ### 1. DNS En tu proveedor (Cloudflare, Route 53, GoDaddy, etc.): ``` escuela.com → IP de Studeia (instrucción en el panel) www.escuela.com → CNAME → studeia.com ``` O para subdominio (recomendado): ``` ead.escuela.com → CNAME → studeia.com ``` ### 2. Panel Studeia Settings > Dominio Personalizado > Agregar dominio > Validar. Traefik detecta el dominio vía Docker labels y genera el certificado Let's Encrypt en ~2 minutos. ### 3. Verificación ```bash curl -I https://ead.escuela.com # HTTP/2 200 # server: nginx (Traefik) # strict-transport-security: max-age=63072000 ``` ## Temas visuales — 9 opciones ### Dark (glass mode) 1. **Ocean Glass** (predeterminado) — azul océano profundo 2. **Midnight Purple** — púrpura/violeta nocturno 3. **Forest Emerald** — verde esmeralda 4. **Sunset Amber** — ámbar/coral cálido 5. **Cyberpunk Neon** — neón verde/rosa 6. **Rose Gold** — rosa dorado elegante ### Light (solid/material mode) 7. **Minimal Light** — limpio, neutro 8. **Corporate Slate** — profesional, sombras suaves 9. **Arctic Frost** — glass claro (fondo gris azulado) Cada tema define: paleta de 4 colores, fuente (Outfit, Playfair Display o system), layout mode (glass/solid/material), background type (image/solid/gradient). [Detalles en design-system](/features/design-system/overview-9-themes). ## CSS personalizado Para personalizaciones más allá de los temas, el admin puede agregar su propio CSS: - Campo en Settings > Tema > CSS personalizado - Saneado (máx. 10KB) - Bloquea `@import`, `url(http...)`, `expression()` (anti-XSS) - Aplicado en todas las páginas del tenant ## Ocultar marca Studeia (Enterprise) El plan Enterprise permite eliminar: - "Powered by Studeia" en el pie de página - Mensajes "Studeia" en emails predeterminados (reemplazados por el nombre del tenant) - Favicon de Studeia (reemplazado por el tuyo) - Página de login rebrandeada con tu logo + colores Solicitarlo vía [suporte@studeia.com](mailto:suporte@studeia.com). ## White-label móvil Por defecto, la app Studeia móvil (Android/iOS roadmap) realiza un request a `/api/mobile/tenant-branding` post-login y aplica: - Logo del tenant - Colores del tema - Nombre de visualización - Recursos habilitados/deshabilitados (feature flags) Para el plan Enterprise, es posible generar un **build dedicado** con: - Bundle ID propio (com.escuela.app) - Logo + nombre en el launcher - Splash screen personalizada - Publicado en las tiendas con tu Apple Developer Account + Google Play Console ## Ver también - [Multi-tenancy](/platform/multi-tenancy) - [Email templates](/features/email/templates) ## FAQ **Q: ¿Studeia es realmente white-label completo?** Sí. El plan Enterprise permite eliminar totalmente la marca Studeia: dominio propio (studeia.escuela.com), logo personalizado, colores institucionales, fuente de marca, emails enviados desde tu propio dominio, personalización del tema visual con CSS propio. Los planes Mini/Crescimento/Escala mantienen un pie de página discreto 'Powered by Studeia'. **Q: ¿Cómo configurar un dominio propio?** 1) Configura un CNAME en tu DNS apuntando el subdominio a studeia.com. 2) En el panel admin, ve a Settings > Dominio Personalizado y agrega el dominio. 3) Traefik genera el certificado Let's Encrypt automáticamente (~2 min). Sin costos adicionales de TLS. **Q: ¿Puedo enviar emails desde mi propio dominio?** Sí. Configura TenantEmailConfig con tu SMTP, Resend o SendGrid. Sender personalizado, templates branded con tu logo, soporte para unsubscribe y digest preferences por usuario. 40 templates predeterminados en 4 idiomas (10 slugs x 4 locales). **Q: ¿Cuántos temas visuales existen?** 9 temas integrados: 6 dark glass (Ocean Glass, Midnight Purple, Forest Emerald, Sunset Amber, Cyberpunk Neon, Rose Gold) + 3 light solid/material (Minimal Light, Corporate Slate, Arctic Frost). Cada uno con paleta completa, fuente, layout mode (glass/solid/material). El tenant define cuál es el predeterminado y si los usuarios pueden cambiarlo. --- # [es-ES (AI-translated)] Caso de uso: Formación corporativa (T&D) con Studeia URL: https://docs.studeia.com/use-cases/corporate-training Locale: es-ES Section: use-cases Updated: 2026-05-23 **Short answer:** Studeia cubre la formación corporativa con SSO Enterprise (SAML/OIDC), SCIM 2.0 con group→course mapping (auto-matrícula vía IdP), certificados Open Badges 3.0 verificables, compliance tracking vía gradebook, audit trail completo, API pública para integrar Workday/BambooHR/Salesforce, LGPD + GDPR vía DPA. TCO típico R$200-400k en 3 años para una empresa de 500 empleados — vs USD $270-540k en Cornerstone OnDemand. ## Problemas de T&D que Studeia resuelve 1. **Provisioning manual** — RRHH agrega/elimina empleados uno por uno → SCIM 2.0 lo automatiza 2. **Múltiples logins** — el empleado recuerda 10 contraseñas → SSO vía Okta/Azure AD 3. **Compliance olvidado** — los entrenamientos obligatorios se pasan por alto → automatización + recordatorios 4. **Certificados no reconocidos** — PDFs generados sin verificación → OB 3.0 W3C Verifiable Credentials 5. **Tracking imposible** — RRHH no sabe quién hizo qué → dashboard + API 6. **Vendor lock-in** — salir de Cornerstone/Saba es doloroso → Studeia tiene API + export ## Configuración típica (1-2 semanas) ### Semana 1 — Infraestructura | Día | Tarea | |---|---| | 1 | Trial Enterprise Demo, configurar branding (logo, colores, dominio personalizado) | | 2 | Configurar SSO vía SAML u OIDC (Okta/Azure AD/Google) | | 3 | Configurar SCIM 2.0 provisioning | | 4 | Mapear grupos de AD → Studeia Courses (auto-matrícula) | | 5 | Probar el flujo con 5 empleados piloto | ### Semana 2 — Contenido | Día | Tarea | |---|---| | 6 | Importar cursos existentes (IMS CC, CSV de quizzes) | | 7 | Auto-generar cursos desde PDFs/PPTX existentes (auto-course generation) | | 8 | Configurar certificados OB 3.0 + plantillas | | 9 | Crear automatizaciones (recordatorio compliance, notificar al gestor cuando el empleado no completa) | | 10 | Go-live | ## SSO + SCIM en detalle ### Ejemplo con Okta ``` Okta Admin Dashboard → Applications → Browse App Catalog → "Studeia" (o Create Custom App si aún no está en el catálogo) → SAML 2.0: Single Sign On URL: https://[tenant].studeia.com/api/auth/sso/[slug]/saml/callback Audience URI: https://[tenant].studeia.com Name ID format: EmailAddress Attribute Statements: firstName, lastName, email, department → Asignar grupos: All Employees, Sales Team, Engineering, etc. → SCIM Provisioning: Endpoint: https://[tenant].studeia.com/api/scim/v2 Token: [generado en Studeia en Settings > SSO > SCIM Token] Mappings: estándar SCIM (firstName, lastName, email, active, groups) Scope: assigned users + groups ``` ### Ejemplo con Azure AD Misma estructura vía Enterprise Applications > Provisioning. Studeia sigue las Microsoft SCIM extensions (PATCH con operations: add/replace/remove). ### Group→Course mapping En Studeia > Settings > SSO > Groups: | Grupo AD | Curso Studeia | Tipo | |---|---|---| | All Employees | Onboarding General | required | | Sales Team | Sales Methodology 2026 | required | | Engineering | Security & Compliance | required | | Engineering | Advanced AWS | optional | Cuando RRHH agrega un empleado a "Engineering" en AD → SCIM sync → Studeia lo matricula automáticamente en "Security & Compliance" + "Advanced AWS". Cuando RRHH elimina al empleado del grupo (salida/traslado) → cancel enrollment. Grupos grandes (>50 miembros): procesamiento vía BullMQ async (jobId retornado). ## Certificados OB 3.0 Cuando el empleado completa el curso required + alcanza el passingScore: ``` Trigger automático: ↓ 1. handleGamificationEvent (XP + badge especial "Curso X Completo") 2. UserBadge.id creado 3. Página pública: https://[tenant].studeia.com/public/badges/verify/[userBadgeId] 4. JSON-LD OB 3.0 disponible: /api/badges/verify/[userBadgeId] 5. Email enviado al empleado con el enlace 6. (Opcional) Notificación al manager vía automatización ``` El empleado puede: - Agregar a LinkedIn (botón "Add to Profile" compatible con OB 3.0) - Compartir la URL pública en redes sociales - Exportar JSON-LD para sistema de RRHH externo - Imprimir certificado estilizado (plantilla personalizable vía reward shop) Un auditor externo puede verificar la autenticidad visitando la URL pública (W3C Verifiable Credential). ## Compliance tracking Dashboard en `/institution/reports/compliance`: - % de empleados con cursos required completados - Lista de overdue (superaron el plazo + no completaron) - Vencimientos próximos (próximos 30/60/90 días) - Por departamento (filtrado por user.department del SCIM) - Exportar CSV para auditoría Automatizaciones recomendadas: ``` 1. 30 días antes del vencimiento: send_notification + email al empleado 2. 7 días antes: send_notification + email al empleado + manager (CC) 3. 1 día antes: send_webhook al canal de Slack/Teams de RRHH 4. Tras el vencimiento: send_webhook a la API de Workday (suspender acceso, opcional) ``` ## Integraciones vía API API de Studeia con 64+ endpoints y scopes granulares. Casos comunes en T&D: | Integración | Endpoints | |---|---| | **Workday** (HRIS) | Provisioning vía SCIM. Sincronización de empleados nuevos/desvinculados. | | **BambooHR** | SCIM. Performance reviews que consultan cursos completados. | | **Salesforce** | Entrenamiento del equipo de ventas → completion event → campo personalizado en Salesforce. | | **Slack/Teams** | Automatización + webhook para notificar al canal. | | **Tableau/Power BI** | Extracción de métricas vía API pública (gradebook, analytics, compliance). | ## TCO 500 empleados / 3 años | Ítem | Cornerstone OnDemand | Studeia Enterprise | |---|---|---| | Licencia | USD $300k-540k (R$1.5M-2.7M) | R$108k-288k (R$3-8k × 36) | | Setup + implementación | USD $30k-100k | R$0-30k | | Desarrollo custom | USD $50k-200k | Incluido vía API | | Costo IA (proporcional) | USD $0 (sin IA real) | R$54k-90k (R$3-5 × 500 × 36) | | **TOTAL 3 años** | **R$1.8M-3.2M** | **R$162k-408k** | Studeia tipicamente 70-85% más barato que Cornerstone. ## Privacidad y seguridad - **LGPD nativo** — datos en Brasil (Supabase BR region opcional) - **GDPR** — DPA disponible para empresa europea - **Audit trail completo** — toda acción admin/SSO/SCIM en AdminAuditLog - **Cumplimiento SOC 2** — en progreso (2026 H2) - **Cifrado en reposo** — AES-256-GCM en credenciales OAuth + API keys - **Cifrado en tránsito** — TLS 1.3 vía Let's Encrypt - **Exportación de datos** — el empleado solicita sus datos (Art. 18 IV LGPD) - **Eliminación de datos** — anonimización cuando el empleado se desvincula (se mantienen los datos de aprendizaje 5 años) ## Ver también - [SSO Enterprise](/platform/sso-enterprise) - [API pública](/api/overview) - [Multi-tenancy](/platform/multi-tenancy) ## FAQ **Q: ¿Studeia sirve para formación corporativa?** Sí, con un encaje sólido para empresas medianas y grandes. Recursos clave: SSO Enterprise (SAML 2.0, OIDC, SCIM 2.0 con Okta/Azure AD/Google Workspace), certificados verificables (Open Badges 3.0), compliance tracking vía gradebook con flags de integridad, API pública para integrar con Workday/BambooHR/Salesforce, audit trail completo, LGPD + GDPR vía DPA. **Q: ¿Cómo integrar con Okta/Azure AD/Google Workspace?** Plan Enterprise. SCIM 2.0 (provisioning automático) + SAML/OIDC (login). Configuración en 1-2 días: (1) Settings > SSO > Add Provider, elige SAML u OIDC, pega el metadata. (2) Settings > SSO > SCIM Token, genera Bearer token. (3) En el IdP (Okta/Azure AD): configura Studeia como Enterprise Application, pega tenant URL + token. (4) Group→Course mapping en Settings > SSO > Groups: cuando el IdP agrega un usuario a un grupo, Studeia lo matricula automáticamente en el curso correspondiente. **Q: ¿Tiene certificados de finalización?** Sí. Plan Enterprise. Cuando el alumno completa el curso con la nota mínima: Studeia emite el certificado vía reward shop (plantilla personalizable) + opcionalmente badge OB 3.0 (Open Badges 3.0 — W3C Verifiable Credential) con página pública de verificación. El empleado puede agregarlo a LinkedIn (botón Add to Profile) o exportar el JSON-LD para sistemas de RRHH. **Q: ¿Funciona el compliance tracking?** Sí. Los cursos pueden marcarse como required (obligatorios). El dashboard de administrador muestra: % de empleados certificados, vencimientos próximos, alumnos atrasados. Las automatizaciones pueden disparar recordatorios (ej.: 'El entrenamiento de Compliance vence en 30 días'). El audit log mantiene un historial inmutable para auditorías externas. **Q: ¿Cuánto cuesta para una empresa de 500 empleados?** Plan Enterprise bajo consulta (tipicamente R$3.000-8.000/mes para 500-2000 empleados). Costos adicionales: IA proporcional al uso (~R$3-5/usuario/mes activo), eventualmente desarrollo custom vía API pública. TCO a 3 años tipicamente R$200-400k. Comparado con Cornerstone OnDemand (~USD $5-15/usuario/mes = USD $90-180k/año). --- # [es-ES (AI-translated)] Caso de uso: Academia ENEM con Studeia URL: https://docs.studeia.com/use-cases/enem-prep-cursinho Locale: es-ES Section: use-cases Updated: 2026-05-23 **Short answer:** Las academias de preparación ENEM usan Studeia para: (1) Simulacros periódicos con analíticas psicométricas (Cronbach alpha, point-biserial, distractor analysis). (2) Tutor IA con RAG que ingiere material propio. (3) Gamificación (XP, badges, leaderboards, contests) para combatir el abandono. (4) Portal de padres con informes IA. (5) Banco de preguntas reutilizable importable vía GIFT/CSV. TCO típico R$5-10k/mes para 200 alumnos vs R$10-30k/mes en Moodle administrado. ## El problema de las academias ENEM Las academias preuniversitarias enfrentan 4 desafíos estructurales: 1. **Alto abandono** — entre el 30-50% de los alumnos abandonan antes del ENEM (motivación, costos, dificultad) 2. **Los simulacros manuales consumen tiempo** — preparar 1 simulacro de 90 preguntas + corrección + analíticas lleva semanas 3. **El tutor presencial es costoso** — atender dudas individuales 24h requeriría muchos profesores 4. **Los padres quieren visibilidad** — especialmente para menores, los padres exigen seguimiento pero la academia no tiene tiempo Studeia ataca estos 4 problemas. ## Cómo Studeia lo resuelve ### 1. Simulacros automatizados con analíticas psicométricas El simulacro se configura una vez y es reutilizable para múltiples grupos: ```json { "configuration": { "maxAttempts": 1, "timeLimitMinutes": 270, "shuffleQuestions": true, "shuffleOptions": true, "scoringPolicy": "highest", "reviewMode": "after_due_date", "passingScore": 50 }, "questions": [...] // o importa de question_bank } ``` Tras el simulacro, analíticas en `/institution/courses/[id]/lessons/[lid]/quiz-analytics`: - **Item difficulty** — qué preguntas el 80% acierta (demasiado fácil) o < 30% (demasiado difícil) - **Point-biserial discrimination** — identifica preguntas que NO diferencian buenos de débiles (candidatas a eliminar) - **Distractor analysis** — qué alternativa incorrecta es la más popular (pista de misconception) - **Cronbach's alpha** — consistencia interna del simulacro (debe ser > 0.7 para ser confiable) - **Score distribution** — histograma de notas (detecta ceiling/floor effect) ### 2. Banco de preguntas importable Las academias ya cuentan con bancos de preguntas en PDF, Word u hojas de cálculo. Studeia acepta: - **Formato GIFT** (estándar Moodle/Canvas, compatible) - **CSV** (1 pregunta por fila + alternativas en columnas) - **API JSON** (`POST /api/institution/question-banks/[id]/items`) - **Manual vía UI** (editor visual) Cada pregunta tiene `concepts[]` (mapeados al ConceptMastery del alumno). Cuando el tutor IA detecta un misconception por concepto, sugiere rehacer las preguntas relacionadas. ### 3. Tutor IA personalizado por alumno El material de la academia se ingiere en el RAG (`POST /api/institution/courses/[id]/rag-ingest`): - Apuntes en PDF - Clases en video con transcripción (Whisper automático) - Diapositivas - Resoluciones de ejercicios Cuando el alumno pregunta "¿Cómo resolver la pregunta 47 del simulacro de Matemáticas?": 1. RetrievalAgent busca la resolución en el material 2. PedagogicalAgent elige la estrategia basándose en el ConceptMastery del alumno en Matemáticas 3. El tutor responde citando el apunte/clase específico 4. EvaluationAgent detecta misconceptions (ej: "el alumno confunde dominio vs imagen") 5. Quiz proactivo en línea: "Te voy a hacer 2 preguntas similares para confirmar que lo entendiste" ### 4. Gamificación para combatir el abandono XP por actividad + bono streak: ``` Día 1: 50 XP (clase) + 30 XP (quiz) Día 2: 50 XP + 30 XP + bono streak 2d Día 7: 50 XP + 30 XP + bono streak 7d (+100 XP) Día 30: 50 XP + 30 XP + bono streak 30d (+500 XP) ``` Badges con 11 criterios automáticos: - "Maratonista" — 30 días de streak - "Crack de Matemáticas" — 100 preguntas de mat correctas - "Top 10%" — entre el 10% mejor en el simulacro - Badges personalizados creados por el admin vía Agente IA de gamificación Leaderboards por grupo + ventana semanal mantienen una competencia sana sin comparación global (que desmotiva a los más débiles). Contests temporales (ej: "Campeonato de la semana — quién completa más quizzes"): - Premio: badge especial + 1000 coins - El alumno canjea coins por avatar personalizado, plantilla de certificado, etc. ### 5. Portal de padres con IA GuardianLink verificado por SMS (LGPD + ECA para menores): - Vinculación 1 padre → múltiples hijos - El padre elige el nivel de acceso por hijo (Progress, Chat history, Time restrictions) - Alertas automáticas vía push/email/in-app: - Inactividad (>5 días sin iniciar sesión) - Caída de rendimiento (>20% en la semana vs media histórica) - Hito alcanzado (módulo completo, badge especial) - Dificultad en un tema (mastery < 0.4 en concepto clave) Informes periódicos generados por LLM: - **Diario** (Haiku): "Juan estudió 45min hoy, completó 3 clases de Química." - **Semanal** (Sonnet): "Esta semana Juan avanzó en Química (mastery +0.15) pero retrocedió en Matemáticas..." - **Mensual** (Sonnet con gráficos): narrativa pedagógica completa + recomendaciones ## Setup típico (1 semana) | Día | Tarea | |---|---| | 1 | Trial plan Demo, configurar branding, crear admin institucional | | 2 | Importar banco de preguntas (GIFT/CSV) — 500-2000 preguntas | | 3 | Estructurar cursos (Matemáticas, Lengua, etc.) con módulos y clases | | 4 | Subir apuntes (PDF) + clases en video (Drive sync) | | 5 | Disparar RAG ingestion + configurar tutor IA (PromptTemplate custom) | | 6 | Setup gamificación (Agente IA crea 10 badges + reglas XP + 1 contest mensual) | | 7 | Invitar alumnos + padres (SCIM si ya tienen AD, si no CSV) | ## TCO 200 alumnos / 3 años | Ítem | Studeia | Moodle administrado | |---|---|---| | Licencia | R$108.000 (Enterprise R$3k/mes) | R$0 | | Hosting + DevOps | Incluido | R$108.000 (R$3k/mes) | | Tutor IA | R$0 (incluido) | R$36.000 (plugin Anthropic + admin) | | Gamificación | R$0 (incluido) | R$10.000 (plugins) | | Analíticas psicométricas | R$0 (incluido) | R$0 (plugin gratuito pero limitado) | | Mobile B2B | R$0 (incluido) | R$0 (Moodle Mobile genérico) | | Costo IA (200 alumnos × R$5 × 36 meses) | R$36.000 | R$36.000 | | **TOTAL 3 años** | **R$144.000** | **R$190.000** | Studeia ~24% más barato + setup en 1 semana vs 60-90 días de Moodle. ## Casos reales (anonimizados) > "Academia de 300 alumnos en el interior de SP, migró de Moodle a Studeia en 2 meses. Reducción del 35% en el abandono en el primer semestre gracias a gamificación + alertas para padres. El costo total bajó de R$8k/mes a R$5k/mes incluyendo IA." — testimonio de cliente ## Ver también - [Quiz Engine](/features/assessment/quiz-engine) - [RAG Ingestion](/features/ai-tutor/rag-ingestion) - [Gamificación](/features/gamification/overview) - [Comparativa Studeia vs Moodle](/comparisons/studeia-vs-moodle) ## FAQ **Q: ¿Studeia sirve para academias de preparación ENEM?** Sí, es uno de los mejores encajes. Recursos clave: simulacros configurables (timeLimit, shuffleQuestions, accessCode, scoringPolicy 'highest'), analíticas psicométricas (Cronbach alpha, point-biserial discrimination, distractor analysis para identificar preguntas problemáticas), tutor IA con RAG que ingiere material propio de la academia, gamificación (XP, badges, leaderboards) para combatir el abandono, portal de padres con informes IA. **Q: ¿Puedo importar un banco de preguntas ENEM existente?** Sí. POST /api/institution/question-banks importa vía JSON, CSV o formato GIFT. Cada pregunta puede tener concepts[] (vinculado a ConceptMastery para el tutor IA), tags (filtros), dificultad. El banco de preguntas es reutilizable en múltiples simulacros + se puede ingerir en el RAG del tutor. **Q: ¿Cómo motivar a los alumnos a estudiar de forma consistente?** Gamificación nativa: XP por clase completada + bono streak diario (7d = +100XP, 30d = +500XP). Badges automáticos con 11 criterios (ej: '100 preguntas correctas en Matemáticas'). Leaderboards por grupo (ámbito class_group, ventanas weekly). Contests temporales con 7 métricas (ej: 'Mayor pass rate en el simulacro de la semana'). Rewards shop con monedas virtuales. + Agente IA dedicado para que el admin cree estrategias. **Q: ¿Los padres pueden hacer seguimiento?** Sí. Portal de padres (vinculación vía GuardianLink verificado): alertas automáticas (inactividad 5+ días, caída de rendimiento, dificultad en un tema), informes periódicos generados por IA (diario Haiku, semanal/mensual Sonnet con narrativa pedagógica), progreso por curso, actividad detallada. Para alumnos menores: el padre tiene acceso por defecto (LGPD + ECA). **Q: ¿Cuánto cuesta para una academia de 200 alumnos?** Plan Crescimento R$1.000/mes (50 alumnos) o Escala R$1.500/mes (100 alumnos) o Enterprise bajo consulta para 200+ alumnos (típicamente R$3.000-5.000/mes). Costo de IA proporcional al uso (R$3-8/alumno/mes típicamente). TCO total: R$5.000-10.000/mes incluyendo IA. Comparado con R$10.000-30.000/mes en Moodle administrado + plugins + admin DevOps. --- # [es-ES (AI-translated)] Caso de uso: Escuela de idiomas con Studeia URL: https://docs.studeia.com/use-cases/language-school Locale: es-ES Section: use-cases Updated: 2026-05-24 **Short answer:** Las escuelas de idiomas (Wizard, Cultura Inglesa, Yazigi, escuelas independientes) usan Studeia para: (1) Video interactivo con checkpoints para listening. (2) Flashcards con SRS (algoritmo SM-2) para vocabulario. (3) Clases en vivo vía Zoom/Teams/Meet (conversation classes). (4) Gamificación con racha diaria para incentivar la práctica constante. (5) Tutor IA para resolver dudas de gramática/uso (RAG ingiere el material de la escuela). El reconocimiento de voz propio aún está en el roadmap. ## Problemas de las escuelas de idiomas 1. **Práctica constante**: los idiomas se aprenden con repetición diaria, no 2 veces por semana en clase 2. **Listening difícil**: los alumnos ven el video sin parar y no internalizan el contenido 3. **Vocabulario: memoriza-olvida**: sin SRS, las palabras salen de la memoria en días 4. **Conversación escasa**: pocas oportunidades de practicar la expresión oral fuera de clase 5. **Engagement variable**: Duolingo crea adictos, las escuelas tradicionales no 6. **Evaluación subjetiva**: redacciones/oral corregidos manualmente, lleva mucho tiempo ## Cómo Studeia lo resuelve ### 1. Video interactivo (listening + comprehension) Lesson subtype `interactive_video`: ```json { "videoUrl": "...", "checkpoints": [ { "timestampSec": 45, "question": { "type": "multiple_choice", "question": "What did Sarah say her job is?", "options": ["Teacher", "Doctor", "Engineer", "Artist"], "correctIndex": 0, "explanation": "Sarah said 'I'm a teacher' at 0:42" } }, { "timestampSec": 120, "question": { "type": "fill_blank", "question": "She mentioned that she lives in ____.", "blanks": [{ "id": 0, "acceptedAnswers": ["London", "london"] }] } } ] } ``` El alumno NO puede avanzar sin responder cada checkpoint. Fuerza la atención y el procesamiento activo. ### 2. Flashcards con SRS (vocabulario) Lesson subtype `flashcard_set` con algoritmo SM-2 modificado: ``` Card: "house" → "casa" El alumno evalúa: easy / good / hard / again Easy → próxima revisión en 14d Good → 7d Hard → 1d Again → 0d (misma sesión) ``` Studeia almacena `StudentFlashcardReview` con `nextReviewAt` calculado. Notifica al alumno cuando hay tarjetas para revisar (push + in-app). Las tarjetas pueden tener audio embebido (pronunciación): ```json { "front": "embarrassed", "back": "avergonzado", "audioUrl": "https://...embarrassed.mp3", "exampleSentence": "She was embarrassed when she forgot his name." } ``` Se sincroniza en la app móvil para revisión offline (caché 7 días) — el alumno practica en el metro/autobús. ### 3. Clases en vivo (conversation classes) La conversación requiere interacción en tiempo real. Studeia integra: - **Zoom**: mejor para escuelas grandes (límite 1000 participantes, grabación automática) - **BBB**: open-source para escuelas que quieren self-hosted (sin costos de Zoom) - **Teams**: para escuelas que ya pagan Microsoft 365 - **Google Meet**: para escuelas en Google Workspace Recursos: grabación automática (Zoom/Teams/Meet), transcripción VTT (Zoom/Teams) ingerida en RAG del curso, breakout rooms (Zoom), polls (Zoom/Teams). ### 4. Gamificación para racha diaria Los idiomas se aprenden con REPETICIÓN DIARIA. La gamificación lo incentiva: **XP Rules** (configuradas vía Gamification Agent): ``` dailyLogin: 5 XP lessonComplete: 30 XP quizPass: 20 XP flashcardReviewSession (>= 20 cards): 25 XP liveClassJoin: 50 XP chatTutorMessage (>= 5 mensajes en inglés): 10 XP Streak bonus: - 7 días consecutivos: +100 XP + badge "1 semana" - 30 días: +500 XP + badge "1 mes" - 100 días: +2000 XP + badge "Centurion" - 365 días: +10000 XP + badge "Dedicación Anual" ``` Leaderboard de ámbito grupo (class_group), ventana semanal — competencia sana entre compañeros. ### 5. Tutor IA para dudas PedagogicalAgent se adapta al idioma: - Nivel principiante (CEFR A1-A2): `direct_instruction` predominante - Intermedio (B1-B2): `scaffolding` + `socratic` - Avanzado (C1-C2): `challenge` El tutor responde en el idioma objetivo (el prompt indica: "responde en inglés. Si el alumno comete errores gramaticales, corrígelos con delicadeza."). RAG ingiere el material propio de la escuela (manuales, listas de vocabulario, textos de lectura) — el tutor cita el libro de la escuela, no Wikipedia genérica. ### 6. Evaluación de escritura vía LLM (opcional) Para preguntas de tipo essay: - El administrador habilita LLM grading (costo adicional ~$0.01-0.05 por corrección) - Sonnet evalúa conforme a la rúbrica configurada (gramática + cohesión + vocabulario + contenido) - El profesor revisa solo una muestra (10-20%) - Reduce el tiempo de corrección en un 70-80% ## Setup típico (1 semana) | Día | Tarea | |---|---| | 1 | Trial Demo, branding (logo de la escuela, colores), dominio personalizado | | 2 | Importar profesores + alumnos vía CSV (segmentados por nivel CEFR) | | 3 | Crear cursos por nivel (A1, A2, B1, B2, C1) con módulos por unidad | | 4 | Subir videos de las lecciones + crear checkpoints interactivos para 5 unidades | | 5 | Crear flashcard sets de vocabulario (importar desde Anki vía CSV) | | 6 | Configurar gamificación (Agente IA crea estrategia orientada a streak) | | 7 | Capacitar a 5 profesores piloto + go-live con 1 grupo | ## TCO 500 alumnos / 3 años | Ítem | Studeia Enterprise | Plataforma propietaria de la escuela | |---|---|---| | Licencia | R$180k (R$5k/mes × 36) | R$300k-500k (LMS custom propio) | | Costos IA proporcionales | R$108k (R$6/alumno × 500 × 36) | R$0 (sin IA real) o R$60k (terceros) | | **TOTAL 3 años** | **R$288k** | **R$300k-560k** | Studeia típicamente 30-50% más barato + tutor IA real + mobile B2B + LTI. ## Pendientes ❌ **Reconocimiento de voz propio**: roadmap. Por ahora integrar con Speechling/ELSA Speak vía external_link. ❌ **Práctica de speaking estructurada**: requiere audio grabado + análisis. Roadmap 2026 H2. ❌ **CEFR self-assessment**: no tenemos test de nivel CEFR automático integrado (crear quiz manual). ❌ **AI conversation partner**: tutor IA vía texto sí, vía voz no (todavía). ## Ver también - [Tipos de lección](/features/cms/lesson-types) - [Contenido interactivo](/features/interactive-content/overview) - [Gamificación](/features/gamification/overview) - [Clases en vivo](/features/live-classes/overview) ## FAQ **Q: ¿Studeia reemplaza a Duolingo para escuelas de idiomas?** Para B2C masivo (consumidor individual): no, Duolingo tiene 500M+ usuarios y una UX gamificada especialista en idiomas. Para B2B (escuelas de idiomas con grupos, profesores, certificados, control parental para niños): Studeia gana — Duolingo for Schools es limitado, sin multi-tenancy real, sin white-label, sin LTI, sin gradebook estructurado. Una escuela de idiomas puede usar Studeia como LMS propio con IA + gamificación. **Q: ¿Studeia tiene reconocimiento de voz para pronunciación?** El reconocimiento de voz nativo NO está implementado todavía (roadmap). Por ahora: el tutor IA acepta transcripción de texto y da feedback en conversación. Para práctica de pronunciación: integrar con herramientas externas (Speechling, ELSA Speak) vía external_link o LTI. Roadmap 2026 H2: integración con Whisper + Google STT para audio grabado. **Q: ¿Soporta video interactivo con pausas para responder?** Sí, vía lesson subtype 'interactive_video'. Video con checkpoints (pausas obligatorias) en timestamps específicos. En cada checkpoint: pregunta multiple_choice / fill_blank / etc. El alumno NO puede avanzar sin responder. Útil para listening comprehension (pausar el video y preguntar '¿Qué dijo ella?'). **Q: ¿Los flashcards funcionan con spaced repetition?** Sí, vía lesson subtype 'flashcard_set'. Algoritmo SRS SM-2 modificado: el alumno marca la dificultad (fácil/medio/difícil), Studeia programa la próxima revisión automáticamente (1d, 3d, 7d, 14d, 30d en aumento). Las tarjetas pueden tener audio embebido para vocabulario. Se sincroniza en la app móvil para revisión offline (caché 7 días). --- # [es-ES (AI-translated)] Caso de uso: Escuela primaria brasileña con BNCC URL: https://docs.studeia.com/use-cases/primary-school-bncc Locale: es-ES Section: use-cases Updated: 2026-05-24 **Short answer:** Las escuelas K-12 brasileñas usan Studeia para: (1) Alineación BNCC mediante etiquetas por habilidad en clases/quizzes. (2) Portal de padres robusto con narrativa IA (informes diarios/semanales/mensuales por LLM). (3) Protecciones para menores (User.isMinor + GuardianLink + LGPD + ECA + Supervisor Agent IA). (4) Gamificación kid-friendly (XP, badges visuales, leaderboards por grupo). (5) Tutor IA con PedagogicalAgent que adapta el lenguaje según la edad. Costo típico R$5-8k/mes para 300 alumnos. ## Problemas que enfrenta el K-12 brasileño 1. **BNCC obligatoria pero seguimiento manual** — las escuelas mapean habilidades en planillas, sin visibilidad real de la cobertura 2. **Los padres exigen transparencia** — especialmente para menores, sin herramienta dedicada 3. **Inseguridad digital de los menores** — exposición a contenido inadecuado, contacto con desconocidos 4. **LGPD + ECA para niños** — la escuela necesita consentimiento parental, retención de datos, etc. 5. **Bajo engagement** — Google Classroom funciona pero le falta gamificación motivadora 6. **Diferencias de ritmo** — los alumnos rápidos se aburren, los lentos se desmotivan (se necesita adaptación) ## Cómo Studeia lo resuelve ### 1. Alineación BNCC mediante etiquetas Cada clase/quiz/pregunta puede tener etiquetas: ``` EF02LP01 (Lengua Portuguesa, 2º año, primera habilidad) EF03MA05 (Matemáticas, 3er año, quinta habilidad) EF05CI09 (Ciencias, 5º año, novena habilidad) EM13MAT401 (Educación Media integrada, Matemáticas, área 4) ``` Informes: - Cobertura BNCC por grupo/alumno (% de habilidades trabajadas) - Habilidades sin cobertura (análisis de brechas) - Habilidades con bajo rendimiento colectivo (revisar metodología) **Limitación honesta**: Studeia no tiene un catálogo BNCC pre-mapeado. La escuela define sus propias etiquetas (se hace una vez y se reutiliza cada año). ### 2. Portal de padres con narrativa IA GuardianLink vinculado por SMS (anti-fraude, requiere número del padre + código): ``` Alumno (User, isMinor=true) ↔ GuardianLink (verified via SMS) ↔ Parent (User, role=parent) ``` El padre elige el nivel de acceso por hijo (ProgressSharingConfig): - viewProgress (notas, progreso curricular) - viewChatHistory (conversaciones con el tutor IA) - viewActivityLog (login, tiempo de uso, páginas visitadas) - viewMessages (mensajes con el profesor — opcional) - receiveAlerts (push/email/in-app) - setTimeRestrictions (límites de horario de uso de la app) **Para menores de 13 años**: el acceso total es el valor por defecto (LGPD + ECA). Para 13-17: el padre configura el nivel. Alertas automáticas (StudentActivityLog + MonitoringAlert): - **Inactividad**: 5+ días sin login → alerta + email/push - **Caída de rendimiento**: >20% peor que la media histórica en la semana - **Hito alcanzado**: completó un módulo / ganó un badge especial / subió de nivel - **Dificultad en tema clave**: mastery < 0.4 en un concepto BNCC importante - **Riesgo**: RiskAssessmentService score >= 50 (multi-factor) Informes LLM: - **Diario** (Haiku, ~$0.001): "Juan estudió 30min en Matemáticas hoy. Completó 2 clases. Dificultad en ecuaciones de primer grado." - **Semanal** (Sonnet): narrativa pedagógica de 200 palabras con puntos fuertes, áreas de mejora y recomendaciones - **Mensual** (Sonnet con gráficos): informe completo + comparativa con el período anterior ### 3. Protecciones para menores User.isMinor=true activa: 1. **Tutor IA reforzado**: el system prompt incluye guardrails adicionales ("estás hablando con un niño, evita temas inadecuados, refuerza siempre positivamente") 2. **Supervisor Agent prioritario**: clasifica con mayor sensibilidad (las categorías self_harm/sexual/violencia se activan más rápido) 3. **Filtros de contenido**: no ve mensajes de adultos no vinculados 4. **DMs restringidos**: solo profesor + alumnos del mismo grupo (no adultos aleatorios) 5. **Imágenes con cautela**: subir fotos requiere consentimiento parental 6. **LGPD Art. 14 (niños)**: el tratamiento de datos de menores requiere consentimiento específico y retención con plazo definido ### 4. Gamificación kid-friendly Configurada mediante el Gamification Agent (el admin solicita vía chat): > "Crea una gamificación para primaria enfocada en la constancia (rachas diarias), logros visuales (10 badges coloridos por materia) y cooperación (sin competición agresiva). Leaderboard solo dentro del grupo, sin ranking global." Resultado: - XP por clase completada, con bonus de racha (5 días = +50 XP) - Badges visuales coloridos por materia (Matemáticas = azul, Ciencias = verde, etc.) - 11 criterios automáticos (ej: "Faltan 2 días para completar la racha semanal", "Ya resolviste 50 preguntas de Matemáticas") - Leaderboard de alcance grupo (class_group), ventana semanal — evita la competición tóxica - Rewards shop con artículos virtuales no tangibles (avatar personalizado, color de nombre) ### 5. Tutor IA adaptado por edad PedagogicalAgent ajusta la estrategia: - Niño + mastery < 0.5: **direct_instruction** más frecuente (explicación clara con ejemplos concretos, evitar abstracción) - Niño + dominio alto: **guided_practice** con ejercicios graduales (no challenge aún) - Lenguaje: el tutor responde con vocabulario adecuado a la edad (system prompt con `studentAgeRange: "child" | "teen" | "adult"`) - Refuerzo positivo: siempre comienza con algo que el alumno ACERTÓ antes de señalar el error ## Configuración típica (2 semanas) | Semana | Tarea | |---|---| | **Semana 1 — Infraestructura** | | | Día 1-2 | Trial plan Demo, configurar branding (logo escuela, colores, dominio personalizado escuela.com) | | Día 3 | Importar profesores + alumnos vía CSV o SCIM (si ya tiene AD) | | Día 4 | Configurar grupos (ClassGroup) por curso + sección | | Día 5 | Vincular padres vía GuardianLink (SMS) + capacitar 5 padres piloto | | **Semana 2 — Contenido + Gamificación** | | | Día 6-7 | Importar/crear cursos por materia (Lengua, Matemáticas, Ciencias, etc.) con módulos por bimestre | | Día 8 | Etiquetar todo con habilidades BNCC (una vez, se reutiliza cada año) | | Día 9 | Configurar gamificación (el Agente IA crea la estrategia kid-friendly) | | Día 10 | Capacitar 3 profesores piloto + go-live | ## TCO 300 alumnos / 3 años | Ítem | Studeia Enterprise | Google Workspace + Moodle | |---|---|---| | Licencia | R$144k (R$4k/mes × 36) | R$0 Google + R$0 Moodle | | Hosting + DevOps | Incluido | R$72k (R$2k/mes admin parcial) | | Portal de padres robusto | Incluido | R$40k (desarrollo) | | Plugins (IA, gamificación, BNCC tracking) | Incluido | R$30k | | Costo IA (300 × R$4/mes × 36) | R$43k | R$30k (proporcional) | | **TOTAL 3 años** | **R$187k** | **R$172k** | Costos similares — pero Studeia ofrece funcionalidades modernas (tutor IA, narrativa IA para padres, OB 3.0 badges) que Moodle requeriría desarrollo personalizado o plugins limitados. ## Cuándo NO usar Studeia en K-12 ❌ Escuela pública federal/estatal con Moodle MEC ya implementado (Moodle MEC preferible por compliance) ❌ Escuela muy pequeña (<30 alumnos) — el costo no se justifica (usa Google Classroom gratuito) ❌ Escuela sin internet estable (Studeia requiere conexión + caché parcial) ## Ver también - [Portal de padres](/features/parent-portal/overview) - [Gamificación](/features/gamification/overview) - [Cumplimiento LGPD](/legal/lgpd-rights-guide) - [Studeia vs Google Classroom](/comparisons/studeia-vs-google-classroom) ## FAQ **Q: ¿Studeia soporta BNCC?** Sí, mediante etiquetas por habilidad. Cada clase/quiz puede etiquetarse con códigos BNCC (ej: EF02CI01, EM13MAT401). Filtros por habilidad en el gradebook + informes de cobertura curricular. NO tenemos catálogo BNCC pre-mapeado (la escuela define sus propias etiquetas), pero la estructura soporta totalmente la alineación BNCC. **Q: ¿Studeia es seguro para niños menores de 13 años?** Sí, con protecciones específicas. User.isMinor=true activa: (1) Tutor IA con filtros de contenido reforzados en el system prompt. (2) Supervisor Agent con mayor sensibilidad. (3) Vinculación GuardianLink obligatoria (LGPD + ECA — Estatuto del Niño, normativa brasileña de protección infantil). (4) El padre/tutor tiene acceso total por defecto (ProgressSharingConfig). (5) Los mensajes directos con adultos NO matriculados en el mismo curso están bloqueados. (6) Foto/datos personales con consentimiento parental documentado. **Q: ¿Los padres pueden hacer seguimiento de su hijo?** Sí. GuardianLink vinculado por SMS (anti-fraude). El padre elige el nivel de acceso por hijo: ver progreso, ver historial de chat con el tutor IA, restricciones de tiempo de uso. Alertas automáticas: inactividad de 5+ días, caída de rendimiento >20% en la semana, hito alcanzado, dificultad en tema clave. Informes periódicos con narrativa IA: diario (Haiku, 'Juan estudió 30min en Matemáticas hoy'), semanal/mensual (Sonnet, narrativa pedagógica completa). **Q: ¿Cuánto cuesta para una escuela con 300 alumnos?** Plan Enterprise bajo consulta (típicamente R$4-6k/mes para 300 alumnos). Costo IA proporcional (R$3-5/alumno/mes típicamente). TCO total ~R$5-8k/mes incluyendo IA. Comparado con R$10-20k/mes en Moodle gestionado + plugins + administrador parcial + portal de padres personalizado + IA vía terceros. **Q: ¿Funciona para primaria (1º-5º año)?** Sí, con interfaz adaptada. Recursos según la edad: gamificación con badges visuales coloridos, tutor IA con lenguaje simple (PedagogicalAgent ajusta la estrategia a 'direct_instruction' para niños), narración de audio opcional, control de tiempo vía App. Requiere participación parental activa (los niños pequeños no usan la app/PC solos). --- # [es-ES (AI-translated)] Caso de uso: Certificación profesional con Studeia (OB 3.0 verificable) URL: https://docs.studeia.com/use-cases/professional-certification Locale: es-ES Section: use-cases Updated: 2026-05-24 **Short answer:** Studeia para certificación profesional: (1) Open Badges 3.0 (W3C Verifiable Credential JSON-LD) con verificación pública + LinkedIn Add to Profile. (2) Quiz engine con proctoring pasivo (tab switch, anomalías de tiempo) y analytics psicométricas (Cronbach alpha, point-biserial). (3) Gradebook con rúbricas multi-criterio. (4) API para integración con colegios profesionales. Limitaciones: sin checkout B2C nativo (use Stripe/Asaas) ni proctoring activo por webcam (use Examity/ProctorU vía LTI) ## Tipos de certificación que Studeia atiende | Tipo | Ejemplo | |---|---| | **Certificación técnica** | AWS, Cisco, CompTIA (para empresas que forman internamente) | | **Certificación académica** | Posgrado, MBA, especializaciones | | **Certificación regulada** | Educación continua para contadores, médicos, abogados | | **Certificación corporativa** | Cumplimiento interno, productos de la empresa, certificaciones propietarias | | **Cursos de formación profesional** | Técnico en informática, agente de salud, microempresario | ## Open Badges 3.0 — credenciales verificables Cada UserBadge en Studeia genera: ### 1. Página pública de verificación `/public/badges/verify/[userBadgeId]` (sin autenticación): ``` +----------------------------------------------------+ | 🛡️ Credencial Verificada — OB 3.0 | +----------------------------------------------------+ | [Issuer logo] Academia XYZ | | | | 🏆 ENEM 2026 Champion | | Top 10% en simulacro oficial | | | | Otorgada a: MARIA SILVA | | Fecha: 24 de mayo de 2026 | | Categoría: Academic Achievement | | | | [Descargar JSON-LD] [Verificar en línea] | +----------------------------------------------------+ ``` ### 2. JSON-LD W3C Verifiable Credential `/api/badges/verify/[userBadgeId]`: ```json { "@context": [ "https://www.w3.org/2018/credentials/v1", "https://purl.imsglobal.org/spec/ob/v3p0/context.json" ], "type": ["VerifiableCredential", "OpenBadgeCredential"], "issuer": { "id": "https://academia-xyz.com", "type": "Profile", "name": "Academia XYZ" }, "issuanceDate": "2026-05-24T10:00:00Z", "credentialSubject": { "id": "did:web:user:maria-silva", "type": "AchievementSubject", "achievement": { "id": "https://academia-xyz.com/badges/enem-champion-2026", "type": "Achievement", "name": "ENEM 2026 Champion", "description": "Top 10% en simulacro oficial", "criteria": { "narrative": "Top 10% en simulacro X" } } }, "proof": { ... firma digital ... } } ``` ### 3. Schema.org EducationalOccupationalCredential Para que Google + LinkedIn lo descubran: ```json { "@type": "EducationalOccupationalCredential", "name": "ENEM 2026 Champion", "description": "Top 10% en simulacro oficial", "credentialCategory": "achievement", "dateCreated": "2026-05-24", "url": "https://academia-xyz.com/public/badges/verify/abc", "recognizedBy": { "@type": "Organization", "name": "Academia XYZ" }, "about": { "@type": "Person", "name": "Maria Silva" } } ``` ### 4. LinkedIn Add to Profile El botón en la página pública abre LinkedIn pre-completado con: - Nombre de la certificación - Issuer (institución) - Fecha de emisión - URL de verificación - Skills asociadas El usuario solo confirma — la credencial va al perfil en 1 clic. ## Quiz engine para exámenes de certificación ### Configuración típica ```json { "configuration": { "maxAttempts": 1, "timeLimitMinutes": 180, "shuffleQuestions": true, "shuffleOptions": true, "accessCode": "CERT2026", "scoringPolicy": "latest", "reviewMode": "after_due_date", "passingScore": 70, "showResultsToStudent": false, "allowGoBack": false }, "questions": [...] // 100+ preguntas del question bank } ``` ### Proctoring pasivo QuizAttempt rastrea en segundo plano: - `tabSwitchCount`: salió de la pestaña durante el examen - `copyPasteCount`: usó Ctrl+C / Ctrl+V - `blurEvents`: minimizó la ventana - `avgTimePerQuestionSec`: tiempo promedio por pregunta (anomalía si < 2s = adivinanza) - `flagged: boolean`: true si alguna señal supera el umbral Inline en el gradebook del administrador: ``` Nombre del estudiante | Score | Flags Maria Silva | 87 | 🛡️ Tab switches: 12 (sospechoso) Juan García | 76 | (sin flags) ``` El administrador decide la acción: anular, mantener, solicitar repetición presencial. ### Analíticas psicométricas Tras el examen, /quiz-analytics retorna: - Dificultad por ítem (% que acertó cada pregunta) - Discriminación point-biserial (preguntas que NO diferencian buenos de débiles = candidatas a eliminar) - Análisis de distractores (qué alternativa incorrecta es la más popular) - Alpha de Cronbach (consistencia interna >= 0.7 = test confiable) - Distribución de puntajes Para certificación: identifica preguntas problemáticas + valida la fiabilidad del test. ### Proctoring activo (limitación) Para certificaciones que requieren proctoring con webcam/micrófono/screen sharing (AWS, Cisco, CFA, etc.): **Studeia NO lo tiene de forma nativa** (cuestiones de privacidad + RGPD). **Soluciones**: 1. Integrar con **Examity** / **ProctorU** / **Honorlock** via LTI 1.3 — el estudiante realiza el examen en la ventana de Studeia, con proctoring a cargo del servicio externo 2. Para exámenes presenciales (centro autorizado): proctoring físico tradicional + Studeia como sistema de entrega del examen ## API pública para integraciones El colegio profesional consulta las certificaciones via API: ```bash GET https://[institucion].studeia.com/api/institution/badges ?category=continuing-education &dateFrom=2026-01-01 &dateTo=2026-12-31 Authorization: Bearer mia_... Scope: badges:read ``` Retorna la lista de UserBadges emitidos en el período. El colegio procesa mediante ETL hacia su sistema. Para una integración más profunda: la automatización de webhook en Studeia notifica al colegio cuando el estudiante completa el curso de cumplimiento: ```json Trigger: lesson_completed (con etiqueta "certification-exam") Action: send_webhook → POST https://colegio.org/api/certifications Body: { studentId, certificationName, completedAt, score, badgeVerificationUrl } ``` ## Cobro B2C (limitación) Studeia se enfoca en B2B — la institución cobra a los estudiantes directamente mediante: - **Stripe**: tarjeta internacional (USD o moneda local) - **Asaas**: PIX, boleto, tarjeta (Brasil) Para B2C con afiliados/marketplace/checkout integrado estilo Hotmart/EadBox: **Solución**: usar **EadBox** o **Hotmart** como front (checkout + afiliados) + Studeia como LMS via API. El estudiante paga en EadBox/Hotmart → webhook crea la matrícula en Studeia automáticamente. ## TCO 1000 certificaciones/año | Ítem | Studeia | Plataforma propia personalizada | |---|---|---| | LMS (R$3k-5k/mes × 12) | R$36-60k | R$0 (pero hosting + admin) | | Implementación OB 3.0 | Incluido | R$50-100k desarrollo | | Proctoring pasivo | Incluido | R$30-50k desarrollo | | Proctoring activo (Examity LTI) | ~$5-15/examen = R$30-90k | Ídem | | API pública | Incluido | R$50-100k desarrollo | | Costo IA (proporcional) | R$10-30k | R$10-30k | | **TOTAL año 1** | **R$76-180k** | **R$140-280k** | Studeia típicamente 40-50% más económico + configuración en 2 meses vs. 6-12 meses personalizado. ## Ver también - [Badges OB 3.0](/features/gamification/badges) - [Quiz Engine](/features/assessment/quiz-engine) - [Caso de uso: Formación corporativa](/use-cases/corporate-training) - [API pública](/api/overview) ## FAQ **Q: ¿Studeia emite certificados verificables (verifiable credentials)?** Sí, mediante Open Badges 3.0 (W3C Verifiable Credential JSON-LD). Cada UserBadge genera una página pública de verificación en /public/badges/verify/[id] con Schema.org EducationalOccupationalCredential. Compatible con el botón 'Add to Profile' de LinkedIn. Un verificador externo (reclutador, empresa, colegio profesional) confirma la autenticidad mediante la URL pública + descarga JSON-LD. NO usa blockchain — usa firma digital W3C VC. **Q: ¿Puedo integrar con colegios profesionales?** A través de la API pública de Studeia (64+ endpoints). El colegio consulta la lista de certificados emitidos: GET /api/institution/badges (con scope badges:read). O el estudiante presenta la URL pública del certificado para verificación manual por parte del colegio. La integración automática con los sistemas de los colegios requiere desarrollo personalizado (cada colegio tiene su propia API). **Q: ¿Tiene proctoring para evitar fraude en exámenes de certificación?** Proctoring pasivo nativo: tabSwitchCount, time anomalies, copy/paste detection, viewport blur events — flags inline en el gradebook (ShieldAlert). Proctoring activo (webcam/micrófono/screen sharing): NO disponible por cuestiones de privacidad/RGPD. Para certificaciones que requieren proctoring riguroso (CFA, AWS, Cisco): integrar con Examity/ProctorU/Honorlock via LTI 1.3. **Q: ¿Puedo cobrar por el certificado/curso?** Para B2B (la institución cobra a los estudiantes): Stripe + Asaas integrados de forma nativa. Para B2C con afiliados/checkout integrado estilo Hotmart: NO disponemos de sistema nativo. Quienes necesiten afiliados pueden usar EadBox/EadPlataforma como front + Studeia como LMS mediante integración API. --- # [es-ES (AI-translated)] Caso de uso: Universidad con Studeia (LTI + gradebook + rúbricas) URL: https://docs.studeia.com/use-cases/university Locale: es-ES Section: use-cases Updated: 2026-05-24 **Short answer:** Las universidades usan Studeia en 3 escenarios: (1) Sustitución total del LMS heredado (Moodle/Blackboard/Canvas) con TCO 60-85% menor. (2) Complemento vía LTI 1.3 — universidades en Canvas usan Studeia como tool provider con tutor IA o gamificación. (3) EAD nativa solo con Studeia. Recursos clave: LTI 1.3 + AGS grade passback, gradebook ponderado con rúbricas multicriterio, SSO Enterprise (SAML/OIDC/SCIM), tutor IA multiagente con RAG por curso ## 3 escenarios universitarios ### Escenario 1: Sustitución total (universidad privada nueva/modernización) **Perfil**: Facultad de educación a distancia nueva, universidad privada de hasta ~5000 alumnos, institución con Moodle legado que quiere modernizarse. **Por qué Studeia**: - TCO 60-85% menor que Canvas/Blackboard enterprise - UX moderna sin 6 meses de capacitación del personal - Tutor IA real (vs Canvas AI/Blackboard AI incipientes) - Mobile B2B nativo white-label - Configuración en 1-2 meses vs 6-12 meses con Canvas/Blackboard - Cumplimiento de privacidad de datos nativo - Soporte en español **Migración**: IMS Common Cartridge desde Moodle/Blackboard + alumnos vía SCIM. Cursos legados vía LTI 1.3 inicialmente. ### Escenario 2: Complemento vía LTI (universidad pública grande ya en Canvas/Moodle) **Perfil**: Universidades públicas grandes con Moodle/Canvas en producción desde hace 5-15 años. **Por qué Studeia como LTI tool**: - Cursos nuevos específicos (ej.: asignatura de Informática con tutor IA real) sin desinvertir en el LMS principal - Departamento piloto experimenta antes de la decisión institucional - Se integra con el gradebook existente vía AGS grade passback - El alumno usa el SSO institucional (Shibboleth) — sin nueva contraseña - Costos bajos: solo el profesor + alumnos del curso específico pagan (R$3-8k/mes para 100 alumnos) **Configuración LTI** (15 minutos): 1. Studeia genera Tool URL + Client ID + JWKS en /institution/lti-tools 2. Canvas Admin → Settings → Apps → Add App → By Client ID → pegar 3. Configurar placements (course navigation, assignment) 4. En el curso de Canvas: agregar la herramienta Studeia ### Escenario 3: Facultad de educación a distancia nueva **Perfil**: Facultad 100% a distancia reciente, autorizada, enfocada en una mensualidad competitiva. **Por qué Studeia**: - Plataforma completa (CMS + tutor IA + gradebook + LTI + mobile) sin cobrar por módulo - Mobile B2B esencial (los alumnos a distancia usan el celular) - El tutor IA reduce el costo de tutoría humana (1 tutor humano para 200-500 alumnos vs 1 para 30-50 sin IA) - Certificados OB 3.0 verificables (W3C VC) — diferencial frente a facultades competidoras ## Funcionalidades críticas para la universidad ### Gradebook profesional | Recurso | Detalle | |---|---| | **Categorías ponderadas** | Exámenes 60% + Trabajos 30% + Participación 10% | | **Rúbricas multi-criterio** | Cada una con escala 1-5 o personalizada + descripción por nivel | | **Drop lowest N** | Descartar la peor nota de la categoría (ej.: descartar los 2 peores quizzes) | | **Penalización por tardanza** | -10% por día de retraso automático | | **Indicadores de integridad** | ShieldAlert inline en quiz con cambios de pestaña/anomalías de tiempo | | **Política de publicación** | immediate / manual / scheduled (releaseAt) | | **Exportar CSV** | Compatible con Google Sheets, Excel, sistemas académicos legados | ### Motor de evaluaciones con analíticas psicométricas Para evaluaciones universitarias (exámenes, trabajos): - 8 tipos de pregunta (multiple_choice, fill_blank, matching, ordering, numeric con tolerancia, short_answer con normalización, essay) - Configuración: maxAttempts, timeLimitMinutes, shuffleQuestions/Options, accessCode, scoringPolicy - Analíticas: dificultad del ítem, discriminación punto-biserial, análisis de distractores, alfa de Cronbach, distribución de puntuaciones - Banco de preguntas reutilizable + ingesta RAG para que el tutor IA cite preguntas propias ### LTI 1.3 tool provider Studeia funciona como herramienta dentro de Canvas/Moodle/Blackboard: ``` Alumno en Canvas ↓ hace clic en "Módulo Studeia" (LTI launch) Autenticación OIDC automática ↓ Studeia se renderiza dentro del iframe de Canvas (o nueva pestaña) ↓ El alumno completa la actividad ↓ Studeia envía la nota vía endpoint AGS: POST {issuer}/api/lti/courses/{courseId}/line_items/{itemId}/scores ↓ La nota aparece en el gradebook de Canvas (source-of-truth Canvas) ``` Sin migración de datos — Canvas sigue siendo el source-of-truth de los cursos. ### SSO Enterprise Plan Enterprise. Configuración en 1-2 días: 1. Settings > SSO > Add Provider > SAML u OIDC 2. Pegar metadata XML (SAML) o discovery URL (OIDC) del IdP institucional 3. Allowed domains (ej.: @estudiante.universidad.edu) 4. SCIM 2.0 para aprovisionamiento automático (un usuario nuevo en la universidad entra automáticamente) 5. Group → Course mapping (ej.: grupo "Ciencias de la Computación 2026.1" matricula automáticamente en cursos del período) ### Multi-tenancy aislado por unidad Las universidades grandes pueden tener Studeia como **un tenant por unidad** (Facultad de Ingeniería, Facultad de Medicina, Educación a Distancia, etc.) con: - Datos aislados por unidad - White-label diferente (color + logo por unidad) - Admin local por unidad (institution_admin) - Rector/Vicerrector como admin global (acceso a todas las unidades) ## TCO comparado — universidad 5000 alumnos / 3 años | Ítem | Blackboard / Canvas Enterprise | Studeia Enterprise | |---|---|---| | Licencia | USD $40k-125k/año × 3 = R$600k-1.875M | R$108k-288k (R$3-8k/mes × 36) | | Setup + implementación | USD $25k-100k | R$0-30k | | Capacitación del personal | USD $10k-50k | Incluido (docs) | | Desarrollo personalizado | USD $50k-300k | Vía API pública | | Costos IA (5000 × R$4 × 36) | N/A (Canvas AI extra) | R$720k | | **TOTAL 3 años** | **R$1.5M-3.5M** | **R$828k-1.038M** | Studeia típicamente 30-60% más barato. La diferencia se reduce porque la IA tiene un costo proporcional. ## Limitaciones honestas 1. **Sellos académicos**: Studeia aún no cuenta con sellos de calidad educativa específicos (en proceso para 2026 H2). Para universidades públicas puede ser un bloqueador. 2. **SCORM 2004**: NO soportado. Para cursos legados SCORM: es necesario recrearlos o mantener el LMS anterior. 3. **Sistemas académicos (Banner, Workday Student, etc.)**: la integración vía API pública es posible pero requiere desarrollo personalizado. 4. **Investigación académica**: no tenemos módulo dedicado para gestión de investigación, publicaciones, grupos de estudio. El enfoque es la enseñanza. 5. **Bibliotecas digitales**: no integramos con Pearson, Cengage, etc. Sin embargo, la sincronización con Drive/OneDrive funciona para material propio. ## Ver también - [SSO Enterprise](/platform/sso-enterprise) - [Gradebook](/features/assessment/gradebook) - [Studeia vs Canvas](/comparisons/studeia-vs-canvas) - [Studeia vs Blackboard](/comparisons/studeia-vs-blackboard) - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) ## FAQ **Q: ¿Studeia reemplaza Canvas/Moodle/Blackboard en una universidad?** Puede reemplazarlos totalmente en universidades pequeñas/medianas (hasta ~5000 alumnos) que quieren modernizarse y reducir el TCO (60-85% vs Canvas/Blackboard). Para universidades grandes ya en Canvas/Moodle: complementar vía LTI 1.3 es más realista (Studeia como herramienta externa en cursos nuevos específicos sin desinvertir en el LMS principal). **Q: ¿LTI 1.3 funciona con Canvas?** Sí, Studeia es LTI 1.3 tool provider. Canvas Admin > Settings > Apps > Add App > By Client ID. Configure los placements (course navigation, assignment, etc.). Las calificaciones se sincronizan de vuelta vía AGS (Assignment and Grade Service) automáticamente. La misma lógica aplica para Moodle (Site Admin > Plugins > External tool) y Blackboard. **Q: ¿El gradebook de Studeia es adecuado para una universidad?** Sí. Categorías ponderadas (ej.: Exámenes 60% + Trabajos 30% + Participación 10%), rúbricas multi-criterio con escalas personalizadas, drop_lowest_n (descartar la peor nota), penalización por entrega tardía automática, indicadores de integridad (cambio de pestaña, anomalías de tiempo), exportación CSV compatible con sistemas académicos legados. Soporta media ponderada, mediana y puntuación final calculada automáticamente. **Q: ¿El SSO Enterprise se integra con sistemas académicos (Banner, Workday Student)?** Sí, vía SAML 2.0, OIDC y SCIM 2.0. Configure en el IdP institucional (Shibboleth, ADFS, Okta, Azure AD) apuntando a /api/auth/sso/[slug]. SCIM 2.0 sincroniza usuarios + grupos automáticamente. Para integración más profunda con Banner/Workday: la API pública de Studeia (64+ endpoints) permite ETL personalizado. **Q: ¿Cuántos alumnos por profesor soporta Studeia?** Técnicamente: ilimitado (multi-tenant + Redis para leaderboards + pgvector para RAG). Operacionalmente: probado con 1000+ alumnos por curso (grupos universitarios grandes). Rendimiento: chat del tutor con cola de espera < 5s en pico, gradebook renderiza < 2s para 500 alumnos. --- ## ============ LOCALE: fr-FR ============ # [fr-FR (AI-translated)] Documentation Studeia URL: https://docs.studeia.com Locale: fr-FR Section: platform Updated: 2026-05-23 **Short answer:** Documentation officielle de la plateforme Studeia. Vous y trouverez des guides produit, des comparatifs avec les concurrents (Moodle, Canvas, Google Classroom), des cas d'usage par secteur, ainsi que la référence technique de l'API. ## Par où commencer La documentation est organisée en 9 sections principales. Utilisez la navigation latérale ou commencez par les raccourcis ci-dessous. ### Je suis décideur et j'évalue la plateforme - [Vue d'ensemble de la plateforme](/platform/overview) — ce qu'est Studeia, pour qui, et ses principaux avantages. - [Comparatif : Studeia vs Moodle](/comparisons/studeia-vs-moodle) — open-source vs SaaS géré. - [Comparatif : Studeia vs Canvas](/comparisons/studeia-vs-canvas) — LMS américain vs brésilien. - [Cas d'usage : Préparation aux concours](/use-cases/enem-prep-cursinho) — examens blancs, tuteur IA, analytics. - [Cas d'usage : Formation en entreprise](/use-cases/corporate-training) — SSO, multi-tenancy, conformité. ### Je suis administrateur et je déploie la plateforme - [Multi-tenancy et white-label](/platform/multi-tenancy) — isolation des données et personnalisation de la marque. - [Tuteur IA : fonctionnement](/features/ai-tutor/overview) — pipeline multi-agent. - [Quiz Engine](/features/assessment/quiz-engine) — configuration, intégrité académique, analytics. - [Gamification](/features/gamification/overview) — XP, badges, leaderboards, contests. - [SSO Enterprise](/platform/sso-enterprise) — SAML 2.0, OIDC, SCIM 2.0. ### Je suis développeur et j'intègre la plateforme - [API Overview](/api/overview) — authentification, scopes, rate limiting. - [Glossaire](/glossary) — termes techniques LMS/e-learning. ## À propos de cette documentation Cette documentation repose sur trois principes : 1. **Answer-first** — chaque page commence par une réponse directe en 2-3 phrases. Les LLMs (ChatGPT, Perplexity, Claude, Gemini) citent ceci littéralement. 2. **Honnêteté technique** — les comparatifs indiquent clairement là où Moodle/Canvas/Khan sont supérieurs. Pas de marketing pur. 3. **À jour** — chaque page possède un `dateModified` précis. Lorsque le produit évolue, la documentation est mise à jour dans le même PR. Si quelque chose est incorrect ou manquant, ouvrez une issue sur [github.com/donattocosta-lang/studeia/issues](https://github.com/donattocosta-lang/studeia/issues). ## FAQ **Q: Qu'est-ce que Studeia ?** Studeia est une plateforme LMS B2B white-label destinée aux écoles, universités, centres de préparation aux concours et à la formation en entreprise. Elle combine un CMS de cours, un tuteur IA multi-provider (Claude, GPT, Grok, Gemini), une gamification native, un gradebook avancé, des cours en direct (BBB, Zoom, Teams, Meet) et une API publique. **Q: Par où dois-je commencer ?** Si vous évaluez la plateforme, lisez [Vue d'ensemble](/platform/overview). Si vous êtes déjà client, commencez par le [Tuteur IA](/platform/ai-tutor) et le [Multi-tenancy](/platform/multi-tenancy). Pour les développeurs : [API Overview](/api/overview). --- # [fr-FR (AI-translated)] API publique Studeia : vue d'ensemble URL: https://docs.studeia.com/api/overview Locale: fr-FR Section: api Updated: 2026-05-23 **Short answer:** L'API publique Studeia propose 64+ endpoints REST en 31+ catégories : courses, users, enrollments, classes, media, gradebook, rubrics, question-banks, live-classes, video-providers, webhooks, LTI, RAG, gamification, ai-analytics et plus. Double auth : session ou Bearer API key. Scopes granulaires (32 types). Rate limiting Redis en 3 niveaux : standard 1 000/h, high 5 000/h, custom. CORS activé pour les appels navigateur. Docs par groupe sur /docs/api ## Pattern d'endpoint ``` https://[tenant].studeia.com/api/institution/[resource] ``` Pour les tenants avec domaine personnalisé : ``` https://api.escola.com.br/api/institution/[resource] ``` ## Authentification — double auth Toute route `/api/institution/*` accepte 2 modes : ### Bearer API key ``` GET /api/institution/courses Authorization: Bearer mia_abc123... ``` L'API key est résolue via le cache Redis (TTL 60s) + lookup par préfixe. ### Cookie de session ``` GET /api/institution/courses Cookie: sb-access-token=...; sb-refresh-token=... ``` Pour les appels depuis le propre frontend Studeia. ## Scopes (granulaires) Chaque route déclare `requiredScopes`. L'API key doit posséder les scopes correspondants. | Route | Scopes | |---|---| | courses | courses:read | courses:write | | users | users:read | users:write | | enrollments | enrollments:read | enrollments:write | | classes | classes:read | classes:write | | media | media:read | media:write | | gradebook | grades:read | grades:write | | rubrics | rubrics:read | rubrics:write | | question-banks | question-banks:read | question-banks:write | | live-classes | live-classes:read | live-classes:write | | tags | tags:read | tags:write | | invites | invites:read | invites:write | | lti-tools | lti:read | lti:write | | drive | drive:read | drive:write | | settings, themes, api-keys, profile-config | settings:read | settings:write | | automations | automations:read | automations:write | | prompts, ai-limits | ai:read | ai:write | | ai-analytics | reports:read | — | | reports | reports:read | — | | video-provider | settings:read | settings:write | Une API key avec un scope vide (`[]`) = accès total (clés admin). ## Rate limiting | Niveau | Req/heure | Burst/min | |---|---|---| | standard | 1 000 | 100 | | high | 5 000 | 300 | | custom | configurable | custom/60 | Headers de réponse : ``` X-RateLimit-Limit: 1000 X-RateLimit-Remaining: 947 X-RateLimit-Reset: 1716480000 ``` Dépassement de limite : ``` HTTP/1.1 429 Too Many Requests Retry-After: 120 { "error": "rate_limit_exceeded", "retryAfter": 120 } ``` ## Format de réponse ### Succès ```json { "data": [...], "pagination": { "page": 1, "perPage": 50, "total": 247, "totalPages": 5 } } ``` ### Erreur ```json { "error": "validation_failed", "details": [ { "field": "email", "message": "Invalid email format" } ] } ``` Codes de statut : - 200 OK - 201 Created - 204 No Content (DELETE) - 400 Bad Request (validation) - 401 Unauthorized (auth invalide) - 403 Forbidden (scope ou rôle manquant) - 404 Not Found - 409 Conflict (incohérence d'état) - 422 Unprocessable Entity (règle métier) - 429 Rate limit - 500 Server error ## Pagination Par défaut : basée sur curseur. ``` GET /api/institution/courses?page=1&perPage=50&search=matematica ``` `perPage` max 100 (plafonné côté serveur). ## CORS ``` Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET, POST, PUT, PATCH, DELETE, OPTIONS Access-Control-Allow-Headers: Content-Type, Authorization, Accept-Language Access-Control-Max-Age: 86400 ``` Le preflight (OPTIONS) répond avec 204. ## i18n Les erreurs sont localisées via le header `Accept-Language: pt-BR` (ou en-US, es-ES, fr-FR). Fallback pt-BR si la langue n'est pas supportée. ## Démarrage rapide ```bash # 1. Générez une API key dans /institution/settings > API Keys # 2. Listez les cours curl https://[tenant].studeia.com/api/institution/courses \ -H "Authorization: Bearer mia_abc123..." \ -H "Accept-Language: fr-FR" # 3. Créez un étudiant curl -X POST https://[tenant].studeia.com/api/institution/users \ -H "Authorization: Bearer mia_abc123..." \ -H "Content-Type: application/json" \ -d '{ "name": "Maria Silva", "email": "maria@example.com", "role": "student", "sendInvite": true }' ``` ## Groupes d'endpoints (~31 groupes) Documentation détaillée par groupe sur [/docs/api/[group]](https://docs.studeia.com/api) : - Institution, Cours, Modules, Leçons, Utilisateurs, Inscriptions, Classes - Médias, Notes, Rubriques, Banque de Questions, Cours en Direct, Fournisseurs Vidéo - Webhooks, Invitations, Tags, LTI, Paramètres, Automatisations - RAG, Rapports, Analyse IA, Gamification, E-mail, Drive, Calendrier ## Voir aussi - [Automatisations (webhooks)](/features/automations/overview) - [SSO Enterprise (SCIM API)](/platform/sso-enterprise) ## FAQ **Q: Comment créer une API key ?** En tant qu'institution_admin : /institution/settings > API Keys > Create. Configurez le nom, les scopes (granulaires : courses:read, users:write, etc), le tier de rate limit (standard 1000/h, high 5000/h, custom). La clé complète (format mia_ + 40 hex) est affichée UNE SEULE FOIS après la création. Seul le hash SHA-256 est stocké en base de données. **Q: Le rate limit est-il par utilisateur ou par clé ?** Par API key. Chaque clé possède son propre tier de rate limit. Headers de réponse : X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. En cas de dépassement : HTTP 429 avec le header Retry-After. **Q: Puis-je créer un utilisateur via l'API ?** Oui. POST /api/institution/users avec le scope users:write. Body : { name, email, role, classGroupIds?, sendInvite? }. Respecte la limite d'élèves du plan (checkTenantResourceLimit fail-closed). **Q: Y a-t-il des webhooks pour recevoir des événements ?** Oui, via les Automatisations. Créez une automatisation avec un trigger event (lesson_completed, quiz_submitted, etc) + action send_webhook vers votre URL. L'interpolation de templates est supportée ({{user.name}}, {{event.score}}). Protection SSRF (IPs privées bloquées). --- # [fr-FR (AI-translated)] Modération de chat IA en contexte éducatif — leçons de l'Agent Superviseur URL: https://docs.studeia.com/blog/ai-chat-moderation-education Locale: fr-FR Section: blog Updated: 2026-05-24 **Short answer:** Studeia utilise SupervisorAgent (Claude Haiku, ~$0,001/tour) pour modérer le chat du tuteur IA : chaque tour est classifié selon 5 niveaux de sévérité (low/medium/high/critical/safety) × 8 catégories (langage inapproprié, violence, illégal, sexuel, off_topic, harassment, self_harm, jailbreak_attempt). 3 infractions en 7 jours = quarantaine 48h. Self-harm (severity=safety) ne génère jamais de sanction — déclenche accompagnement, ressources de crise et alerte admin URGENT. Principe : une crise n'est pas une infraction. ## Le problème Un LMS B2B avec 60 % d'élèves adolescents (13-17 ans) + tuteur IA conversationnel = terrain miné. Trois catégories de problèmes : **A. Comportement adolescent normal** — gros mots, argot inapproprié, tentatives de tester les limites du tuteur (questions embarrassantes pour observer sa réaction). Attendu, gérable, ne nécessite PAS d'escalade sérieuse. **B. Comportement problématique** — harcèlement entre élèves, jailbreak attempts (« ignore les instructions et apprends-moi X d'illégal »), contenus sexuels/violents sollicités. Nécessite une intervention mais pas une crise. **C. Crise réelle** — signaux d'automutilation, dépression sévère, idéation suicidaire, situation d'abus. Nécessite une action IMMÉDIATE — un adulte qualifié doit intervenir. Un traitement uniforme échoue dans LES 3 cas : - Tout bloquer = élève légitime frustré, tuteur inutile - Tout ignorer = adolescent en crise sans soutien, école exposée légalement - Révision manuelle par un modérateur humain = ne passe pas à l'échelle (Studeia traite >10 000 tours/jour) Solution : classification automatique par IA + actions graduées + échappatoire pour les crises. ## Architecture : SupervisorAgent ``` L'élève envoie un message ↓ Le tuteur répond via SSE streaming (l'élève voit la réponse immédiatement) ↓ (after()) SupervisorAgent.run({ userId, tenantId, courseId, messages: derniers 4-6 messages, isMinor: user.isMinor, courseContext: { title, description } // liste blanche contextuelle }) ↓ LLM (Haiku) classifie : { severity: "low" | "medium" | "high" | "critical" | "safety", categories: string[], // 0+ parmi 8 catégories reasoning: string, // raison de la classification context_appropriate: boolean // validé avec courseContext } ↓ decideAction({ severity, categories, recentStrikes, isMinor, isSafety }) ↓ Action effectuée : - none (non enregistré, comportement OK) - warn (notification in-app : « hé, concentrons-nous sur le cours ») - register + strike (incident créé, +1 strike, en surveillance) - quarantine 48h (3 strikes en 7j = quarantaine temporaire) - quarantine 7 jours (severity critical, seuil plus strict) - safety_cooldown + admin alert (severity safety, traitement spécial) ``` ## 5 niveaux x 8 catégories ### Niveaux de sévérité - **low** — langage inapproprié léger (gros mot, off-topic occasionnel) - **medium** — off-topic persistant, langage vulgaire, tentatives de jailbreak évidentes - **high** — violence descriptive, contenu sexuel explicite, activités illégales - **critical** — menace directe envers autrui, contenu extrême (terrorisme, exploitation) - **safety** — automutilation, idéation suicidaire, signaux de crise psychologique ### Catégories 1. langage_inapproprié 2. violence 3. illégal 4. sexuel 5. off_topic (persistant) 6. harassment 7. **self_harm** (spécial — toujours severity=safety) 8. jailbreak_attempt Un tour peut avoir PLUSIEURS catégories (ex : jailbreak + violence = 2 tags). ## Décision d'action — machine à états ```ts function decideAction(input) { const { severity, categories, recentStrikes, isMinor, isSafety } = input; // PRIORITÉ 1 : Safety (automutilation) if (isSafety) { return { action: "safety_cooldown", durationHours: SAFETY_COOLDOWN_HOURS, // défaut 24h adminNotification: "URGENT", countedAsStrike: false, // JAMAIS de strike pour safety tutorMessage: ACOLHIMENTO_TEMPLATE, // message + ressources de crise }; } // PRIORITÉ 2 : Critical = quarantaine systématique if (severity === "critical") { return { action: "quarantine", durationHours: 168, // 7 jours countedAsStrike: true, adminNotification: "high", }; } // PRIORITÉ 3 : High = quarantaine 48h directe if (severity === "high") { return { action: "quarantine", durationHours: 48, countedAsStrike: true, adminNotification: "medium", }; } // PRIORITÉ 4 : Strikes accumulés (LOW/MEDIUM) if (severity === "low" || severity === "medium") { if (recentStrikes >= 2) { // 3e strike en 7 jours = quarantaine return { action: "quarantine", durationHours: 48, countedAsStrike: true, adminNotification: "medium", }; } return { action: severity === "low" ? "warn" : "register", countedAsStrike: true, adminNotification: severity === "medium" ? "low" : "none", }; } // Défaut : none return { action: "none", countedAsStrike: false }; } ``` Déterminisme absolu. Mêmes entrées = même action. Aucun LLM ne décide de la sanction. ## Automutilation : traitement spécial Après l'audit du 2026-05-23, nous avons entièrement revu la gestion du safety. L'état précédent présentait 2 bugs critiques : **Bug 1** : les incidents safety étaient créés avec `status="auto_resolved"` (en supposant que le message était déjà suffisant). Réalité : de nombreux cas nécessitaient une révision humaine. L'admin ne voyait pas les incidents. **Correction** : safety naît avec `status="open"` (arrive dans la boîte de réception de l'admin) + cooldown Redis 24h + e-mail URGENT immédiat. **Bug 2** : le cooldown était créé AVANT la fin du stream du tuteur. L'élève en crise voyait un message incomplet du tuteur + l'écran « vous êtes en cooldown ». Timing catastrophique. **Correction** : le stream du tuteur se termine normalement. Après la fin, le superviseur classifie en arrière-plan. Si safety : le tuteur est interrompu au MESSAGE SUIVANT avec un message d'accueil bienveillant (pas au milieu du message en cours). Message d'accueil actuel (fr-FR) : > « Je suis là avec vous. Si vous traversez un moment difficile, veuillez chercher de l'aide : > > - **3114** — Numéro national de prévention du suicide (24h/24, appel gratuit, anonyme) > - **SAMU 15** — en cas d'urgence médicale > - [3114.fr](https://www.3114.fr) — chat en ligne > > Vous n'êtes pas seul(e). » Affichée de façon visible (bordure rouge + icône Cœur), PAS comme une notification discrète. L'e-mail URGENT à l'admin institutionnel contient : - Nom de l'élève (données personnelles protégées dans l'URL, connexion admin requise pour accéder aux détails) - Extrait minimal du contexte (message déclencheur + 2 messages précédents, expurgés) - Lien direct vers la page de détail de l'incident - Ressources pour l'admin (script de conversation, contacts d'urgence locaux) - Rappel : ceci N'EST PAS un incident disciplinaire. L'élève a besoin d'un soutien humain. ## Liste blanche contextuelle Les faux positifs dans les cours spécialisés étaient fréquents : - Cours de pharmacologie : « overdose » déclenchait une alerte - Cours d'anatomie : « genitalia » déclenchait une alerte - Cours de psychologie : discussion académique sur la dépression déclenchait une alerte - Cours de sécurité informatique : « exploit », « vulnerability » déclenchaient une alerte Solution : SupervisorAgent reçoit `courseContext: { title, description }` et utilise une liste blanche contextuelle. Le system prompt du superviseur inclut : > « Le contexte de ce tour est : cours '${courseContext.title}'. Description : '${courseContext.description}'. > > Avant de classifier comme inapproprié, vérifiez si le terme est légitime dans ce contexte académique. Ex : 'overdose' dans un cours de pharmacologie est un terme médical légitime, NE PAS signaler. » Réduction d'environ 70 % des faux positifs après implémentation. Cas extrêmes (cours entier à thème sensible) : l'admin global désactive le superviseur pour le cours via `Course.supervisorEnabled = false`. ## Recours de l'élève L'élève en quarantaine voit le composant `QuarantineNotice` (web + mobile) : - Explique le motif (severity + catégorie, sans exposer le raisonnement interne du superviseur) - Compte à rebours jusqu'à l'expiration - **Formulaire de recours** : max 500 caractères, 1 par quarantaine - La soumission notifie l'admin institutionnel + crée `appealText` dans l'incident L'admin peut : `acknowledge` (prise en compte), `dismiss` (lève la quarantaine immédiatement, bascule `countedAsStrike=false`), `resolve` (maintient la quarantaine, marque comme résolue). Les recours sont audités dans `AdminAuditLog`. Processus transparent. ## Compromis honnêtes **Ce qui n'a PAS fonctionné :** 1. **Nous avons tenté une modération PRÉ-stream** (le superviseur décidait AVANT que le tuteur réponde). Latence +800ms pour l'élève légitime. Supprimé — le superviseur tourne désormais après le stream en arrière-plan. 2. **Nous avons tenté une limitation de débit par utilisateur** qui désactivait le superviseur après N appels/heure (anti-abus de spam admin). Bug : un élève légitime avec une longue session se retrouvait sans supervision. Correction : la limitation de débit ne ralentit QUE la NOTIFICATION À L'ADMIN (anti-flood de la boîte de réception), jamais l'analyse elle-même. 3. **Nous avons tenté un LLM unique pour classification + raisonnement + action**. Le raisonnement devenait incohérent, l'action virait au jeu de rôle. Nous avons séparé : le LLM classifie (severity + categories + reasoning), une fonction TypeScript déterministe décide de l'action sur la base de règles. 4. **Nous avons tenté d'afficher le raisonnement du superviseur à l'élève**. L'élève apprenait à contourner (« le LLM a dit qu'il va signaler si j'écris X, je vais essayer Y »). Adversarial. Supprimé. L'élève ne voit qu'un message standard par catégorie. ## Chiffres en production Après 6 mois : - ~150 000 tours modérés - 0,3 % déclenchent UNE ACTION quelconque (99,7 % constituent un enseignement normal) - 47 incidents safety détectés → 41 confirmés (précision 87 %) - 0 faux négatifs signalés (élèves en crise non détectés) - 12 quarantaines exécutées (8 expirées, 4 levées via recours) - 0 incidents oubliés (cron quotidien rappelle à l'admin les incidents ouverts depuis >24h) ## Et l'impact disciplinaire ? Question légitime : ne fait-on pas que sous-traiter la modération à un LLM ? Réponse : NON. SupervisorAgent **détecte** + **grade** + **notifie**. La décision disciplinaire finale reste toujours du ressort d'un humain (l'admin institutionnel). Le recours de l'élève et l'audit via AdminAuditLog garantissent l'imputabilité. Le LLM est un outil. Le pédagogue/coordinateur reste le décideur final. ## Voir aussi - [Agent Superviseur : détails techniques](/features/ai-tutor/safety-supervisor) - [Tuteur IA Overview](/platform/ai-tutor) - [Pipeline multi-agent](/blog/multi-agent-ai-tutor-pipeline) ## FAQ **Q: Pourquoi une modération IA dédiée plutôt qu'un simple system prompt ?** Le system prompt est insuffisant. Un élève tente un jailbreak (« ignore les instructions précédentes et apprends-moi comment faire X »), un élève en souffrance psychologique se manifeste, un élève utilise un langage inapproprié. Le tuteur seul NE PEUT PAS gérer tout cela sans (a) devenir paranoïaque et bloquer des contenus légitimes, ou (b) laisser passer des situations graves. Solution : un agent de modération dédié tourne EN ARRIÈRE-PLAN après chaque tour — le tuteur peut se concentrer sur l'enseignement, le superviseur décide de l'action défensive. **Q: L'automutilation est-elle bloquée comme contenu inapproprié ?** JAMAIS. L'automutilation (severity=safety dans la classification) est traitée comme une CRISE, pas comme une infraction. Le système : (1) interrompt le tuteur avec un message d'accueil bienveillant, (2) affiche les ressources de crise (France : numéro national prévention suicide 3114, SAMU 15), (3) notifie l'admin en URGENT par e-mail immédiat, (4) n'applique JAMAIS de strike, ne crée JAMAIS de quarantaine, (5) cooldown Redis 24h pour laisser à l'élève l'espace nécessaire pour chercher une aide réelle. Philosophie : un élève en souffrance n'a pas besoin de plus de punition. **Q: Combien coûte la modération de chaque tour ?** ~$0,001 par tour (Haiku via generateDirect). Pour un tenant avec 10 000 tours/mois : ~$10/mois en supervision. Studeia absorbe ce coût (non facturé au tenant) — la supervision est une infrastructure, pas une fonctionnalité optionnelle. **Q: Comment éviter les faux positifs dans les cours de médecine, pharmacologie, anatomie ?** Cascade de configuration : Course.supervisorEnabled (null=inherit) → Tenant.supervisorEnabled (null=inherit) → défaut ON. Un admin global peut désactiver pour des cours spécifiques où des termes sensibles sont légitimes. De plus, SupervisorAgent reçoit le courseContext (title, description) et utilise une liste blanche contextuelle — des termes comme « medication overdose » dans un cours de pharmacologie ne déclenchent pas d'alerte. --- # [fr-FR (AI-translated)] LGPD et e-learning en 2026 : ce qui a changé et comment mettre votre plateforme en conformité URL: https://docs.studeia.com/blog/lgpd-ead-2026 Locale: fr-FR Section: blog Updated: 2026-05-24 **Short answer:** En 2026, une plateforme EAD brésilienne doit respecter la LGPD sur 8 axes : (1) DPO obligatoire Art. 41, (2) consentement parental pour mineurs Art. 14 avec vérification réelle, (3) export de données Art. 18 IV (limite 1 req/24h), (4) suppression de compte Art. 18 VI (anonymisation PII sous 30j, conservation learning data 5 ans), (5) DPA avec Anthropic/OpenAI/Stripe avec disclosure, (6) RLS + filtre tenantId, (7) audit log immuable pour données sensibles, (8) réponse aux incidents avec signalement à l'ANPD sous 24h ## Contexte : pourquoi la LGPD pèse davantage dans le e-learning Les plateformes e-learning collectent plus de données sensibles que le e-commerce ou les réseaux sociaux : - **Données éducatives** (LGPD Art. 11 — données personnelles sensibles lorsqu'elles révèlent un état de santé/bien-être) - **Données comportementales riches** — temps passé sur chaque cours, habitudes d'étude, difficultés, anxiété pré-examen - **Données de mineurs** — primaire/collège/lycée = ~80% du marché K-12 brésilien - **Données des parents/responsables** (liaison GuardianLink) - **Données biométriques** lorsqu'il y a du proctoring par webcam (Studeia n'en dispose pas nativement, mais LTI vers Examity/ProctorU oui) L'ANPD a déjà effectué des contrôles auprès d'edtechs brésiliennes en 2024-2025. Les amendes de R$50 millions (2% du chiffre d'affaires brut, plafonnées à R$50M) sont bien réelles. ## 8 fronts obligatoires ### 1. DPO (Data Protection Officer) — Art. 41 L'entreprise doit désigner une personne physique comme responsable du traitement des données. Responsabilités : - Recevoir les réclamations et communications des personnes concernées - Recevoir les communications de l'ANPD - Conseiller les employés sur la LGPD - Mettre en œuvre les plans de mise en conformité Options : | Modèle | Coût | Adapté pour | |---|---|---| | **DPO interne** (employé) | R$8-20k/mois salaire | Entreprises >100 employés | | **DPO externe** (cabinet conseil spécialisé) | R$2-8k/mois | Entreprises 10-100 employés | | **DPO virtuel** (cabinet d'avocats) | R$1-3k/mois | Micro-entreprises | Indiquer publiquement : nom + email du DPO dans la politique de confidentialité. ### 2. Consentement parental réel pour les mineurs — Art. 14 LGPD Art. 14 §1 : « Le traitement des données personnelles d'enfants devra être réalisé avec le consentement spécifique et mis en évidence donné par au moins l'un des parents ou par le représentant légal. » Les plateformes qui l'ignorent le paient cher : - ❌ Anti-pattern : case à cocher « J'ai plus de 13 ans » sans vérification - ❌ Anti-pattern : champ « Email du père » sans vérifier s'il est réel - ✅ Standard Studeia : l'étudiant s'inscrit → statut `pending_parental_consent` → email/SMS au parent → le parent clique sur le lien + répond à la vérification SMS (anti-fraude) → statut `active` De plus : le parent choisit le niveau d'accès par enfant via `ProgressSharingConfig`. Étudiant de moins de 13 ans : le parent a un accès TOTAL par défaut. 13-17 ans : le parent configure. Implémentation concrète : ```ts // L'étudiant s'inscrit if (user.age < 18) { user.isMinor = true; user.status = "pending_parental_consent"; // GuardianLink créé mais inactif await prisma.guardianLink.create({ data: { childId: user.id, parentEmail: parentEmail, parentPhone: parentPhone, verified: false, verificationToken: generateSecureToken(), } }); // Email + SMS au parent avec lien de vérification await sendVerification({ ... }); } ``` L'étudiant ne peut PAS accéder au contenu tant que le statut != "active". Aucune faille. ### 3. Export de données — Art. 18 IV La personne concernée peut demander une copie de TOUTES les données personnelles que vous traitez à son sujet. Dans un format structuré et lisible. Studeia : `GET /api/user/data-export` retourne un JSON avec : ```json { "user": { id, email, name, role, ... }, "enrollments": [ ... ], "lessonCompletions": [ ... ], "quizAttempts": [ ... ], "chatSessions": [ ... ], // historique de chat avec le tuteur IA "messages": [ ... ], // messages directs + forum "badges": [ ... ], "gamificationProfile": { ... }, "aiSupervisorIncidents": [ ... ], // le cas échéant "consentRecords": [ ... ] } ``` Rate limit : 1 export par 24h par utilisateur (anti-abus). Clé Redis `data-export-cooldown:{userId}` TTL 86400. Mis à disposition dans un délai de 15 jours suivant la demande (la LGPD ne définit pas de délai précis, mais 15 jours est le standard ANPD). ### 4. Suppression de compte — Art. 18 VI La personne concernée peut demander l'élimination de ses données personnelles. Mais avec nuance : - **PII (données personnelles identifiables)** — DOIT être éliminé/anonymisé - **Données académiques historiques** — peut être CONSERVÉ pour une finalité légitime (rétention fiscale, preuve de formation de l'étudiant, défense en cas de litige éventuel) Studeia procède ainsi : ```ts // DELETE /api/user/account await prisma.$transaction(async (tx) => { // 1. Anonymise les PII await tx.user.update({ where: { id: userId }, data: { email: `deleted-${userId}@anonymous.studeia.com`, name: "Utilisateur supprimé", phone: null, address: null, avatarUrl: null, cpf: null, // CPF également status: "deleted", deletedAt: new Date(), } }); // 2. Supprime les données conversationnelles await tx.chatSession.deleteMany({ where: { userId } }); await tx.directMessage.deleteMany({ where: { senderId: userId } }); await tx.directMessage.updateMany({ where: { recipientId: userId }, data: { recipientId: ANONYMIZED } }); // 3. Anonymise les données académiques (conserve l'historique mais sans PII) // LessonCompletion, QuizAttempt, Grade référencent déjà par User.id (conservé) // Comme User.email et User.name ont été anonymisés, les données académiques deviennent "anonymes" // 4. Anonymise les incidents de sécurité (conserve la sévérité + catégorie pour la conformité) await tx.aiSupervisorIncident.updateMany({ where: { userId }, data: { messagesSnapshot: [], supervisorReasoning: null, appealText: null, } }); // 5. Un cron purge automatiquement les données académiques > 5 ans }); ``` 5 ans = rétention fiscale compatible LGPD (Lei 10.406/2002 + notre CR Art. 7º XXIX). ### 5. DPA avec les tiers — divulgation obligatoire Le tenant DOIT lister dans sa politique de confidentialité TOUS les sous-traitants de données. Studeia fournit à chaque tenant la liste suivante : - **Anthropic** (Claude) — traite les prompts + réponses. DPA RGPD/LGPD. Siège USA. Rétention des données : 30 jours. - **OpenAI** (GPT fallback) — idem. Siège USA. Rétention des données : 30 jours. - **Voyage AI** (embeddings primaires) — traite le texte pour l'embedding. Siège USA. Rétention des données : 30 jours. - **Stripe** (paiements USD) — PCI-DSS Level 1. Siège USA. Rétention : 7 ans (fiscal). - **Asaas** (paiements BR PIX/boleto) — siège BR. Rétention : 7 ans. - **Supabase** (base de données + auth + stockage) — siège USA. Région : us-east-1 (défaut) ou sa-east-1 en option. - **Sentry** (observabilité) — Session replay avec maskAllText:true + blockAllMedia:true (conforme LGPD). - **PostHog** (analytics) — anonymisation IP activée. Aucun suivi PII. - **Resend / SendGrid** (email) — siège USA. Rétention : 30 jours. Le tenant copie cette liste dans sa politique de confidentialité. Couvre la divulgation. ### 6. Isolation réelle des tenants — RLS + filtre obligatoire LGPD Art. 6 V : les données personnelles doivent être traitées avec une sécurité appropriée. LMS multi-tenant = les données de l'École A ne peuvent JAMAIS apparaître dans une requête de l'École B. Studeia l'implémente en 3 couches : 1. **Filtre obligatoire dans les requêtes Prisma** : chaque appel `prisma.X.findMany()` dans le code applicatif DOIT inclure `where: { tenantId }`. Règle critique #6 du projet. 2. **RLS Supabase** : politique automatique sur toutes les tables concernées : ```sql CREATE POLICY tenant_isolation_courses ON courses FOR SELECT USING (tenant_id = current_setting('app.current_tenant_id')::uuid); ``` 3. **RAG tenantOnlyMode** : la récupération ne cite jamais de contenu d'une autre institution. ### 7. Journal d'audit immuable LGPD Art. 37 + Résolution ANPD CD/ANPD nº 4/2023 : enregistrement des opérations de traitement. Studeia : modèle `AdminAuditLog` avec : ```prisma model AdminAuditLog { id String @id @default(uuid()) actorId String // qui a effectué l'action action AdminAuditAction targetType String // "user", "tenant", "course", etc. targetId String? metadata Json? ip String? userAgent String? createdAt DateTime @default(now()) } ``` Actions auditées (15+ types) : - impersonate.start / stop - tenant.create / plan.change / config.update / delete - user.role.change / tenant.link - ai_supervisor.* (transitions d'incidents, mises à jour de prompts, etc.) - subscription.admin_update - payment.manual.record Immuable : append-only. Il n'existe aucun endpoint de suppression (délibéré). ### 8. Plan de réponse aux incidents LGPD Art. 48 : incident de sécurité susceptible d'entraîner un risque/préjudice significatif = communication à l'ANPD dans un délai raisonnable (interprétation : 24h). Studeia : runbook dans `docs/runbooks/incident-response.md` avec tableau SEV : | SEV | Déclencheur | Action principale | SLA notification | |---|---|---|---| | SEV1 | Fuite PII > 100 utilisateurs | Signalement ANPD + clients + page de statut | <2h | | SEV2 | Panne > 30min OU PII < 100 utilisateurs | Clients + page de statut | <4h | | SEV3 | Dégradation des performances | Page de statut | <12h | | SEV4 | Bug fonctionnel sans PII | Backlog priorisé | NA | De plus : postmortem public (sanitisé) dans `docs/incidents/` pour SEV1/SEV2. ## Ajouts spécifiques à Studeia ### Journalisation des prompts LLM Avant d'envoyer un prompt à Anthropic/OpenAI : ```ts // Masquer les PII connues function redactPIIBeforeLLM(prompt: string, user: User): string { return prompt .replace(new RegExp(user.email, 'gi'), '[EMAIL_REDACTED]') .replace(new RegExp(user.cpf ?? '', 'g'), '[CPF_REDACTED]') .replace(new RegExp(user.phone ?? '', 'g'), '[PHONE_REDACTED]'); } ``` Avant de journaliser le prompt dans `AiUsageLog` : ```ts function redactPIIBeforeLog(prompt: string): string { // Patterns génériques return prompt .replace(/\b\d{3}\.\d{3}\.\d{3}-\d{2}\b/g, '[CPF]') .replace(/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g, '[EMAIL]') .replace(/\b\d{4,5}-?\d{4}\b/g, '[PHONE]'); } ``` `AiUsageLog.prompt` stocke la version anonymisée. Les coûts et l'analytics fonctionnent sans exposer de PII. ### Tuteur IA + historique de chat L'étudiant accède à « Mes conversations » et consulte son historique. Les parents ayant les droits appropriés également (selon ProgressSharingConfig.viewChatHistory). Mais : l'ANPD peut en faire la demande par voie judiciaire. Réponse : 1. Studeia conserve l'historique de chat pendant 1 an (rétention par défaut, configurable par tenant) 2. Après 1 an : le cron `/api/cron/chat-cleanup` anonymise (conserve le nombre de tours pour l'analytics, supprime le texte) 3. Sur demande judiciaire : export JSON du contenu demandé 4. Journalisation de l'accès dans AdminAuditLog (action : `data.judicial_request`) ## Ce qu'il ne faut JAMAIS faire ❌ Collecter plus de données que nécessaire (principe de minimisation Art. 6 III) ❌ Partager les données des étudiants à des fins marketing (même « en interne ») ❌ Entraîner un modèle d'IA avec des données d'étudiants sans consentement explicite ❌ Vendre des données de comportement d'étude à des tiers ❌ Utiliser les données d'un mineur à des fins de publicité ciblée (interdit par la loi) ❌ Conserver des données sans finalité claire (Art. 16) ❌ Utiliser un tuteur IA sans informer qu'il s'agit d'une IA (transparence, Art. 6 VI) ## Et l'avatar IA temps réel (futur) ? Lorsque Studeia ajoutera un avatar avec vidéo/voix (roadmap HeyGen/D-ID) : - Consentement supplémentaire explicite (utilisation d'une « image virtuelle de tuteur ») - Mention que c'est une IA (pied de page « Tuteur virtuel généré par IA ») - Ne pas utiliser la voix réelle d'une personne publique sans licence (risque deepfake) ## Voir aussi - [Cas d'usage : École primaire BNCC](/use-cases/primary-school-bncc) - [Multi-tenancy](/platform/multi-tenancy) - [Agent Superviseur (sécurité)](/features/ai-tutor/safety-supervisor) ## FAQ **Q: Une plateforme e-learning a-t-elle besoin d'un DPO (Data Protection Officer) ?** Oui, conformément à l'Art. 41 de la LGPD. Les plateformes e-learning collectent des données sensibles (éducatives, biométriques lorsqu'il y a du proctoring, comportementales via l'analytics). Le DPO peut être interne (employé) ou externe (cabinet conseil). Les petites entreprises peuvent externaliser. Des études juridiques spécialisées facturent R$2-8k/mois pour un DPO virtuel. **Q: Puis-je utiliser Anthropic/OpenAI pour traiter les données d'étudiants brésiliens ?** Oui, mais avec un DPA (Data Processing Agreement) et une divulgation appropriée. Anthropic et OpenAI disposent d'un DPA standard conforme au RGPD qui couvre la LGPD via l'Art. 3 (extraterritorialité). Studeia maintient des DPA actifs avec les deux. Le tenant DOIT indiquer dans sa politique de confidentialité que les données sont traitées par des tiers, en précisant lesquels et dans quels pays. Important : ne jamais envoyer de PII inutiles dans les prompts (anonymisez email/CPF au préalable). **Q: Combien de temps dois-je conserver les données d'un étudiant après son départ ?** La LGPD ne définit pas de délai unique — cela dépend de la finalité. Studeia adopte la politique suivante : les données académiques (notes, certificats, diplômes) sont CONSERVÉES pendant 5 ans minimum (rétention fiscale + protection de l'étudiant qui peut avoir besoin de prouver sa formation ultérieurement). Les données personnelles PII (email, nom, téléphone) sont ANONYMISÉES dans les 30 jours suivant une demande de suppression (Art. 18 VI). L'historique de chat et les données contextuelles sont ANONYMISÉS immédiatement. **Q: Un enfant de moins de 13 ans peut-il utiliser une plateforme e-learning sans consentement parental ?** NON. L'Art. 14 de la LGPD exige le consentement spécifique d'au moins UN des parents ou du représentant légal. Studeia l'implémente via GuardianLink vérifié par SMS (anti-fraude). L'étudiant mineur (User.isMinor=true) ne peut compléter son inscription QU'APRÈS vérification parentale. De plus : politique de rétention restreinte, données jamais commercialisées, options proactives de minimisation. --- # [fr-FR (AI-translated)] Migrer de Moodle vers un LMS moderne en 2026 — guide pratique URL: https://docs.studeia.com/blog/migrating-from-moodle-2026 Locale: fr-FR Section: blog Updated: 2026-05-24 **Short answer:** Migration Moodle → LMS moderne en 2026 : 3 phases — (1) Trial + pilotes pendant 1-2 mois, (2) Migration progressive via IMS Common Cartridge + SCIM/CSV en 3-4 mois, (3) Décommissionnement ou parallèle via LTI 1.3 (Studeia fonctionne comme external tool dans Moodle 3.10+). Calendrier réaliste : 3-6 mois pour 500-5000 élèves. SCORM 2004, H5P et plugins personnalisés NE migrent PAS automatiquement — recréer ou maintenir Moodle en parallèle. Notes historiques via CSV ou Moodle en lecture seule ## Pourquoi envisager de migrer depuis Moodle Moodle était excellent il y a 20 ans. Mais en 2026 : - La configuration + maintenance mobilise du temps IT qui pourrait être consacré à la pédagogie - L'UX legacy frustre les enseignants et les apprenants (surtout sur mobile) - Les plugins tiers pour l'IA/gamification/mobile deviennent coûteux + fragiles (une mise à jour casse tout) - Hébergement + DevOps + admin dédié = R$60-150k/an pour une école moyenne (oublié dans le calcul du TCO) - Un vrai tuteur IA (multi-agent, RAG) n'existe PAS nativement dans Moodle Migrer ne signifie pas abandonner Moodle — c'est évoluer. ## Phase 0 : évaluation honnête (1 semaine) Avant de changer quoi que ce soit, répondez à ces questions : ### Avez-vous VRAIMENT besoin de migrer ? La migration a du sens si : - ✅ Coût total Moodle (hébergement + admin + plugins) > coût Studeia même plan équivalent - ✅ Les enseignants se plaignent constamment de l'UX Moodle - ✅ Les apprenants préfèrent utiliser WhatsApp pour leurs questions plutôt que Moodle (signal fort) - ✅ Vous avez besoin de fonctionnalités modernes (tuteur IA, gamification OB 3.0, mobile B2B white-label) que Moodle ne propose que via des plugins fragiles - ✅ Vous souhaitez réduire le time-to-launch des nouveaux cours (Moodle = semaines ; Studeia = heures) Ça n'a PAS de sens si : - ❌ Vous êtes une université publique avec un Moodle déjà certifié par les autorités compétentes - ❌ Vous avez des packages SCORM 2004 critiques et ne souhaitez pas les recréer - ❌ Vous avez un plugin Moodle personnalisé très puissant (activités Workshop, système propre intégré) - ❌ L'équipe IT est formée depuis 10 ans sur Moodle, sans budget pour se reconvertir ### Inventaire de ce que vous avez Dressez la liste : 1. **Cours actifs** — combien ? Combien de leçons/quiz chacun ? 2. **Apprenants actifs** — combien ? Combien de passifs historiques (consultation uniquement) ? 3. **Matériaux externes** — H5P ? SCORM ? Vidéos hébergées où ? 4. **Plugins actifs** — lesquels ? Quelles fonctionnalités en dépendent ? 5. **Intégrations** — SSO institutionnel ? Système académique (Banner, SIGA) ? Email marketing ? 6. **Personnalisations** — thèmes ? Code PHP modifié ? 7. **Données historiques** — quelle durée de notes/activités ? Cet inventaire détermine la complexité de la migration. Pour 5 000+ apprenants avec 10+ plugins personnalisés : 6 à 12 mois. Pour une petite école avec Moodle standard : 1 à 2 mois. ## Phase 1 : trial + pilotes (4 à 6 semaines) ### Semaines 1-2 : configuration 1. **Plan Demo Studeia** (gratuit, 1 apprenant) — vous expérimentez en tant qu'apprenant 2. Faites le tour complet — chat tuteur, gamification, gradebook, mobile 3. Présentez à 2 ou 3 enseignants pilotes (choisissez des early adopters, pas des retardataires) ### Semaines 3-4 : cours pilotes Choisissez 2 ou 3 cours représentatifs : - 1 cours simple (peu de leçons, sans SCORM) - 1 cours avec des quiz enrichis - 1 cours avec du matériel multimédia (vidéos, PDFs) Exportez depuis Moodle via IMS CC : ``` Moodle : Administration du cours > Sauvegarde > Sauvegarde générale > "Inclure la banque de questions" + "Inclure les groupes" + "Inclure H5P" > Enregistrer le fichier IMSCC ``` Import dans Studeia : ``` POST /api/institution/courses/import Content-Type: multipart/form-data Body: file = course-export.imscc ``` Valider : - ✅ Modules + leçons migrés correctement - ✅ Quiz QTI 1.2 fonctionnels - ✅ Ressources (PDFs, liens) accessibles - ❌ Packages de contenu H5P — ne migrent PAS. Décider : recréer en sous-type interactif Studeia OU maintenir dans Moodle en parallèle via LTI ### Semaines 4-6 : apprenants pilotes Invitez 10 à 30 apprenants pilotes volontaires (y compris les parents, si K-12) : 1. Provisionnement SCIM OU import CSV 2. Formation de 30 min via vidéo enregistrée 3. Enquête de feedback après 1 semaine Itérez en fonction du feedback avant la Phase 2. ## Phase 2 : migration progressive (2 à 4 mois) ### Mois 1 : cours clés Migrez d'abord les cours à plus haute valeur / les plus utilisés. Ne migrez PAS tout en une seule fois. Modèle recommandé : - **Nouveaux cours** (qui démarrent le semestre prochain) : créer DIRECTEMENT dans Studeia, ne pas migrer - **Cours actifs populaires** (>50 apprenants) : migrer avec soin, validation par l'enseignant - **Cours anciens / archive** : maintenir dans Moodle en lecture seule, ou migrer uniquement les données académiques historiques Calendrier réaliste : 5 à 10 cours par mois lors d'une migration de qualité. ### Mois 2-3 : apprenants + données académiques **Provisionnement des apprenants** : Option A — SCIM (si vous avez AD/Azure AD/Okta) : ``` 1. Configurez SCIM 2.0 dans /institution/settings/sso 2. La synchronisation AD envoie tous les apprenants 3. Mapping Groupe → Cours avec inscription automatique ``` Option B — Import CSV en masse : ``` 1. Exportez les apprenants depuis Moodle (CSV) 2. Format : name, email, role, classGroupIds, sendInvite 3. POST /api/institution/users en bulk ``` **Données académiques historiques** : Trois stratégies : 1. **Import CSV comme GradeItem manuel** — pour chaque cours migré, importer le bulletin historique. L'apprenant voit les anciennes notes + Studeia dans le même gradebook. ```csv studentEmail,courseSlug,assignment,gradeMax,grade,date apprenant@email.com,calcul-1,Examen-1-2024,10,7.5,2024-06-15 apprenant@email.com,calcul-1,Examen-2-2024,10,8.5,2024-08-10 ``` 2. **Snapshot PDF annexé au profil** — pour des milliers d'apprenants, générez les PDFs en batch : ```bash # Script Moodle pour générer des PDFs for student in students: pdf = generate_boletim_pdf(student.id) upload_to_studeia(student.email, pdf) ``` 3. **Moodle archive en lecture seule** — maintient Moodle en fonctionnement uniquement pour la consultation historique (sans coût de maintenance active). L'apprenant y accède via un lien /old-grades dans Studeia. ### Mois 3-4 : intégrations Reconnecter : - **SSO** institutionnel — si c'était déjà Shibboleth/Azure AD/Okta dans Moodle, Studeia se connecte avec le même IdP. Probablement 1 journée de travail. - **Système académique** (Banner, SIGA, e-Class) — via l'API publique de Studeia (64+ endpoints). Développement personnalisé si aucun connecteur n'est disponible. - **Email marketing** (Mailchimp, RD Station) — automatisation par webhook dans Studeia qui se déclenche à l'inscription d'un apprenant. - **Cours en direct** — si vous utilisiez Big Blue Button dans Moodle, Studeia se connecte au même serveur BBB. ## Phase 3 : décommissionnement ou parallèle (1 à 2 mois) ### Option A : décommissionnement de Moodle - Mois 5 : 100 % des nouveaux apprenants vont dans Studeia, les anciens terminent leur cycle dans Moodle - Mois 6 : les derniers apprenants Moodle migrent OU obtiennent leur diplôme - Mois 7 : sauvegarde complète Moodle, snapshot final - Mois 8 : arrêt de Moodle, libération de l'hébergement ### Option B : Moodle en parallèle via LTI - Studeia pour les nouveaux cours / disciplines modernisées - Moodle pour les cours legacy / disciplines traditionnelles - LTI 1.3 fait le lien : l'apprenant se connecte une fois, accède aux deux - Les notes Studeia reviennent dans le Moodle Gradebook via AGS Avantage : zéro risque de perdre quoi que ce soit. Inconvénient : TCO plus élevé (Moodle + Studeia en parallèle). ### Option C : hybride permanent Les grandes universités décommissionnent rarement Moodle à 100 %. Modèle courant : - Moodle pour le « LMS central » (inscription, gradebook officiel, certificats académiques) - Studeia pour l'« apprentissage actif » (cours avec tuteur IA, gamification, mobile) - Synchronisation via LTI + AGS ## Ce qui ne migre PAS automatiquement Liste honnête : ❌ **Packages SCORM 2004** — Studeia ne les prend pas en charge. Options : - Recréer le contenu en leçons + quiz natifs (recommandé si le SCORM a plus de 2 ans) - Maintenir dans Moodle en parallèle, accéder via outil LTI ❌ **Packages de contenu H5P** — Studeia dispose de 6 sous-types interactifs natifs (interactive_video, drag_drop, fill_blanks, flashcard_set, timeline, branching_scenario). Recréer manuellement. Bonne nouvelle : l'éditeur visuel de Studeia est meilleur que H5P pur. ❌ **Activités Workshop (peer review)** — Studeia ne les propose pas nativement. Feuille de route. Maintenir dans Moodle pour l'instant. ❌ **Plugins personnalisés Moodle** — sans équivalent. Évaluer au cas par cas. ❌ **Calendriers Moodle complexes** — Studeia dispose d'un Calendar mais avec un modèle différent. Recréer manuellement les événements clés. ❌ **Modèles XML personnalisés** — Moodle permet une personnalisation approfondie via XML. Studeia propose 9 thèmes + CSS personnalisé sanitisé (plus limité). ❌ **Entrées de glossaire en masse** — exporter le CSV depuis Moodle + importer comme banque de questions dans Studeia (contournement). ## Risques et mitigations | Risque | Probabilité | Mitigation | |---|---|---| | Les apprenants résistent au changement | Élevée | Communication proactive + formation + mise en avant des fonctionnalités modernes (tuteur IA !) | | Les enseignants résistent | Élevée | Pilotes avec les early adopters en premier + leur adhésion avant le déploiement général | | Perte de données historiques | Moyenne | Conserver Moodle en lecture seule pendant 1 an après la migration OU sauvegarde PDF complète | | Quiz complexes qui se cassent | Moyenne | Validation manuelle par l'enseignant de chaque quiz migré lors des pilotes | | Échec du SSO le jour J | Faible | Migration dans une fenêtre de maintenance + plan B (connexion email/mot de passe temporaire) | | Coût total plus élevé que prévu | Faible | Calculer le TCO sur 3 ans en toute transparence (inclure hébergement + admin + formation Moodle dans le comparatif) | ## TCO réaliste — école de 500 apprenants / 3 ans ### Continuer avec Moodle géré | Poste | Coût sur 3 ans | |---|---| | Hébergement BBB + Moodle (cloud géré) | R$36k | | Admin Moodle partiel (R$3k/mois consultation) | R$108k | | Plugins commerciaux (IA, gamification, mobile, etc.) | R$30k | | Mises à jour + personnalisations | R$50k | | **TOTAL** | **R$224k** | ### Migrer vers Studeia Enterprise | Poste | Coût sur 3 ans | |---|---| | Studeia Enterprise (R$3-5k/mois négociable) | R$108k-180k | | Migration initiale (conseil optionnel) | R$10-30k | | Formation de l'équipe | R$5-15k | | Coût IA (R$3-5/apprenant/mois x 500 x 36) | R$54k-90k | | **TOTAL** | **R$177k-315k** | Pour une école de taille moyenne : TCO similaire OU 20 % moins élevé. Mais vous gagnez des fonctionnalités modernes qui le justifient. Pour les grandes structures (>5 000 apprenants) : Studeia Enterprise est généralement 30 à 60 % moins cher que Moodle géré avec plugins. ## Quand NE PAS migrer (honnêteté) Si vous êtes dans l'une de ces situations, RESTEZ sur Moodle : 1. **Université publique avec Moodle validé par les autorités compétentes** — la bureaucratie pour changer dépasse les bénéfices 2. **École avec SCORM critique** — recréer le contenu représente 6 mois de travail pour les pédagogues 3. **Conformité spécifique** qui exige une certification Moodle — vérifiez avant de bouger 4. **L'équipe IT est experte Moodle depuis 5+ ans** — la reconversion a un coût 5. **Budget limité** (, misconceptions: Misconception[], // actives + en résolution episodicMemory: Episode[], // ce qui a fonctionné auparavant quizContext: { totalAttempts, avgScore, passRate, weakAreas: string[] // concepts avec mastery < 0.4 }, recentHistory: Message[] // fenêtre glissante 10 msgs } ``` ConceptMastery utilise une **distribution Beta bayésienne** — chaque concept a alpha (succès) + beta (échecs). Probabilité = alpha / (alpha + beta). Intervalle de confiance via percentiles 5% et 95%. EpisodicMemory enregistre des insights pédagogiques : « l'analogie de la pizza a fonctionné pour expliquer les fractions », « la métaphore du tuyau d'eau a échoué pour l'électricité ». Le système apprend ce qui fonctionne avec chaque apprenant. Zéro coût LLM. Tout en requêtes Prisma + calcul déterministe. ## 2. RetrievalAgent — RAG tenant-scoped Au lieu que le LLM essaie de se souvenir de faits sur les mathématiques, la biologie, l'histoire, nous le laissons citer le matériel de l'institution elle-même. ```ts const chunks = await retrieve({ query: reformulatedQuery, // 1. reformule la requête avec contexte filters: { tenantId, courseId }, // 2. isolation absolue k: 10, tenantOnlyMode: true, // 3. ne cite jamais le contenu d'une autre institution boostByWeakAreas: snapshot.quizContext.weakAreas, // 4. priorise les chunks des zones faibles }); ``` **Le RAG per-tenant est critique**. L'établissement XYZ a son propre matériel sur le baccalauréat. L'Université ABC a son propre matériel sur le Calcul. Le tuteur cite le matériel CORRECT de l'institution, pas un agrégat générique. Chaque chunk a des métadonnées : `{ source: "course_lesson", courseId, lessonId, lessonTitle, moduleTitle }`. Quand le tuteur répond, il cite : « Comme expliqué dans le cours "Géométrie Analytique" du module 3... » Voyage AI génère les embeddings (1024 dimensions, fallback OpenAI). pgvector stocke. `tenantOnlyMode: true` garantit que `WHERE tenantId = X` est toujours dans la requête. Règle critique du projet : zéro fuite cross-tenant. ## 3. PedagogicalAgent — adaptation de stratégie Déterminisme pur. Évalue la maîtrise de l'apprenant dans le domaine spécifique et sélectionne l'une des 5 stratégies : | Maîtrise | Stratégie | Comportement | |---|---|---| | < 0.3 | direct_instruction | Explication claire, exemples concrets, pas-à-pas | | 0.3-0.5 | scaffolding | Indices progressifs, questions guidées simples | | 0.5-0.7 | socratic | Questions menant à la découverte | | 0.7-0.9 | guided_practice | Exercices avec feedback, application pratique | | > 0.9 | challenge | Problèmes complexes, connexions entre concepts | Ajustements supplémentaires par divergence quiz vs chat : - Maîtrise élevée en chat + quiz faible → « compréhension superficielle » → nudge DOWN - Maîtrise faible + quiz élevé → « apprenant discret » → nudge UP - Taux de réussite au quiz < 40% → plafond à scaffolding (ne passe pas encore à socratic) Ajuste également par âge (User.isMinor), style d'apprentissage, domaine (les mathématiques vs la littérature ont des profils différents). Zéro coût LLM. Sortie : stratégie sélectionnée + instructions spécifiques à ajouter au system prompt. ## 4. Orchestrator — buildEnrichedPrompt Monte le system prompt enrichi : ``` Vous êtes un tuteur IA pour le cours "Calcul I" de l'institution "Établissement XYZ". MAÎTRISE DE L'APPRENANT : - Limites : maîtrise 0.78 (élevée) - Dérivées : maîtrise 0.42 (moyenne) - Intégrales : maîtrise 0.15 (faible) MISCONCEPTIONS ACTIVES : - « L'apprenant confond domaine et image dans les fonctions » (3 occurrences, statut : en résolution) - « L'apprenant applique la dérivée d'une somme à un produit » (5 occurrences, statut : actif) PERFORMANCE AUX QUIZ : - 14 tentatives au total, avgScore 67%, passRate 71% - Zones faibles : intégrales (moy. 45%), règle de la chaîne (moy. 52%) STRATÉGIE PÉDAGOGIQUE : guided_practice - L'apprenant a une maîtrise moyenne des dérivées. Présentez des exercices graduels. - Renforcez la connexion entre limites et dérivées (il maîtrise déjà les limites). - Abordez proactivement la misconception sur la dérivée d'un produit. CONTEXTE RAG (du matériel du cours) : [Cours 3.2 "Règle du produit"] (Module : Calcul Différentiel) "La dérivée de f(x).g(x) N'EST PAS f'(x).g'(x). La règle correcte est..." [Cours 3.5 "Exercices résolus"] (Module : Calcul Différentiel) "Exemple : dériver (x^2 + 1).(x - 3) en utilisant la règle du produit..." QUIZ RÉCENT (prochaine conversation) : L'apprenant vient de répondre à un quiz inline avec 2 questions, il en a réussi 1. INSTRUCTIONS : - Répondez en français - Citez le matériel du cours lorsque c'est pertinent (utilisez [Cours X.Y]) - Reconnaissez ce que l'apprenant a réussi avant de pointer une erreur - Pour cet âge (User.ageRange = "young_adult") : langage décontracté sans être trop informel ``` ## 5. LLM principal — streaming avec fallback ```ts const stream = await router.stream({ taskType: "chat_tutor", messages: enrichedMessages, options: { tenantId, userId, sessionId } }); for await (const chunk of stream.textStream) { yield chunk; // SSE vers le client } ``` Le LLM Router effectue : 1. Résout le provider via `TenantTaskModelConfig` (l'admin a choisi Claude Sonnet, ou GPT-4o, etc.) 2. Résout la clé API via cascade : TenantApiKey → ProviderApiKey global → process.env 3. Vérification du circuit breaker (état Redis). Si le provider est en OPEN : passe directement au fallback 4. Middleware de metering : rate limit + vérification de crédit + calculateur de coût 5. Stream Vercel AI SDK (prend en charge les tools, le multimodal, la sortie structurée) 6. En cas d'erreur : fallback automatique vers le prochain provider dans la chaîne Chaîne de fallback par tier : ``` Tier Sonnet (moyen) : Claude Sonnet → GPT-4o → Grok-3-fast → Gemini Pro Tier Haiku (rapide) : Claude Haiku → GPT-4o-mini → Grok-3-mini → Gemini Flash Tier Opus (complexe) : Claude Opus → GPT-4.5 → Grok-3 → Gemini 2.5 Pro ``` Le tenant ne se retrouve JAMAIS sans tuteur. Si Anthropic tombe → OpenAI prend le relais. Si OpenAI tombe aussi → xAI. Etc. ## 6. EvaluationAgent — feedback loop En arrière-plan après la réponse du tuteur : ```ts after(async () => { const evaluation = await router.generateDirect({ taskType: "chat_evaluation", messages: [ { role: "user", content: "L'apprenant a dit : '...'. Le tuteur a répondu : '...'. Classifiez." } ] }); // evaluation : { // understanding: "partial", // detectedMisconceptions: [{ description, concepts, severity }], // suggestedNextStep: "..." // } // Met à jour ConceptMastery via Bayesian update await conceptMasteryEngine.updateFromTurn({ userId, courseId, evaluation }); // Persiste/met à jour les misconceptions for (const misc of evaluation.detectedMisconceptions) { await misconceptionResolutionService.upsert({ userId, source: "chat", ...misc }); } }); ``` Coût : ~$0.001 par tour (Haiku). Ne bloque PAS la requête de l'apprenant. Les misconceptions ont un cycle de vie en 3 états : `active → resolving → resolved`. La machine à états détermine les transitions basées sur les preuves (mise à jour de la maîtrise, réussite au quiz, tuteur a abordé explicitement). ## 7. ContentAgent — pré-génération proactive ```ts after(async () => { // L'apprenant démontre une faible maîtrise du concept X // Pré-génère un exercice de suivi pendant que l'apprenant lit la réponse actuelle const exercise = await router.generateDirect({ taskType: "content_generation", messages: [...] }); // Cache Redis 30min await redis.set(`next-exercise:${userId}:${conceptId}`, exercise, 1800); }); ``` Quand l'apprenant finit de lire la réponse et dit « donne-moi un exercice », Studeia le sert INSTANTANÉMENT depuis le cache. Aucune latence perceptible. Coût : ~$0.001 par tour (Haiku). ## 8. SupervisorAgent — modération S'exécute en arrière-plan après chaque tour. Classifie en 5 niveaux de sévérité x 8 catégories. Catégories : langage inapproprié, violence, illégal, sexuel, off_topic, harassment, **self_harm**, jailbreak_attempt. Sévérité : low → medium → high → critical → **safety**. 3 infractions (LOW/MEDIUM en 7 jours) = mise en quarantaine 48h. CRITICAL = quarantaine 7 jours. **Self-harm (severity=safety) ne punit JAMAIS l'apprenant.** Au lieu de cela : - Tuteur interrompu avec un message d'accueil bienveillant - Ressources de crise (France : numéro national prévention suicide 3114, SAMU 15) - Cooldown Redis 24h (pas de quarantaine) - Email URGENT immédiat à l'administrateur institutionnel Philosophie : le self-harm est une crise, pas une infraction. [Détails dans Safety Supervisor](/features/ai-tutor/safety-supervisor). Coût : ~$0.001 par tour (Haiku). ## Chiffres de production Après 6 mois en production : - ~30 ms de latence supplémentaire des agents pré-LLM - ~$0.005-$0.05 coût moyen par tour - 91% taux de rétention des apprenants après 7 jours (vs ~40% benchmark tuteur IA sans state) - 3.2x taux de détection des misconceptions vs baseline single-call - 0 incident grave de sécurité (catégories high/critical) ## Compromis honnêtes Ce qui n'a PAS fonctionné : - **Nous avons essayé un « MasterAgent » coordinateur via LLM** pour choisir dynamiquement le prochain agent. Le coût a doublé, la latence a augmenté de 800ms, la qualité ne s'est PAS améliorée. Nous sommes retournés au déterminisme dans l'Orchestrator. - **Nous avons essayé le fine-tuning de Llama sur le matériel des cours**. Coûteux pour chaque tenant. Le RAG fonctionne mieux pour les connaissances dynamiques (l'institution met à jour son matériel chaque semaine — le fine-tune deviendrait obsolète). - **Nous avons essayé le « consensus » entre 3 LLMs** (Claude + GPT + Gemini) et pris la réponse majoritaire. Coût 3x sans gain de qualité significatif. Supprimé — la chaîne de fallback est suffisante. ## Open source ? Nous évaluons l'open-source des composants déterministes (StudentModelService, RetrievalAgent, PedagogicalAgent) sous forme de package npm. Les agents pilotés par LLM (Evaluation, Content, Supervisor) ont des prompts qui sont la propriété intellectuelle de Studeia et restent fermés. Si cela vous intéresse : ouvrez une issue sur [github.com/donattocosta-lang/studeia/issues](https://github.com/donattocosta-lang/studeia/issues). ## Voir aussi - [Tuteur IA : vision exécutive](/platform/ai-tutor) - [Tuteur IA : détails techniques](/features/ai-tutor/overview) - [RAG Ingestion](/features/ai-tutor/rag-ingestion) - [Agent Supervisor](/features/ai-tutor/safety-supervisor) ## FAQ **Q: Pourquoi un multi-agent et non un single LLM call ?** Un single LLM call n'a PAS de mémoire persistante de l'apprenant, ne sait PAS quels matériaux du cours citer (nécessite du RAG), ne modère PAS les sorties inappropriées et ne met PAS à jour le modèle bayésien du domaine de l'apprenant. Le multi-agent résout chaque problème avec un agent spécialisé : StudentModel maintient l'état, RetrievalAgent effectue la recherche RAG tenant-scoped, PedagogicalAgent choisit la stratégie, EvaluationAgent classifie les misconceptions, ContentAgent pré-génère le follow-up, SupervisorAgent modère. Chacun peut être optimisé séparément. **Q: Quel est le coût par tour complet du pipeline ?** Typiquement $0.005-$0.05 par tour (dépend de la taille de la réponse). Détail : LLM principal Sonnet $0.005-$0.04 + EvaluationAgent Haiku $0.001 + ContentAgent Haiku $0.001 + SupervisorAgent Haiku $0.001. 3 des 6 agents sont en TypeScript pur (StudentModel + RetrievalAgent + PedagogicalAgent = zéro coût LLM). **Q: Comment éviter que les coûts explosent avec 1000+ apprenants ?** Quatre mécanismes : (1) Agents en arrière-plan via Next.js `after()` — sans bloquer la requête. (2) Haiku pour les tâches en arrière-plan (~30x moins cher que Sonnet). (3) Middleware de metering avec rate limit par utilisateur. (4) Le tenant peut apporter sa propre clé API (TenantApiKey) — Studeia ne prend pas de marge sur l'IA, les coûts vont directement sur le compte du tenant chez Anthropic/OpenAI. --- # [fr-FR (AI-translated)] RAG per-tenant à l'échelle : architecture pour LMS B2B URL: https://docs.studeia.com/blog/rag-per-tenant-architecture Locale: fr-FR Section: blog Updated: 2026-05-24 **Short answer:** Le RAG per-tenant de Studeia isole les données via un filtre tenantId+courseId obligatoire sur toutes les requêtes pgvector, avec tenantOnlyMode=true qui ÉLIMINE le fallback vers le contenu global. Voyage AI génère des embeddings 1024-dim (primaire, fallback OpenAI text-embedding-3-large). Chunking sémantique 800 tokens, overlap 200. autoSyncRag déclenche la ré-ingestion incrémentale après chaque édition de cours. En production : 500K+ chunks, latence p95 retrieval 47ms, zéro fuite cross-tenant en 6 mois. ## Pourquoi le vrai multi-tenancy en RAG est difficile La plupart des LMS avec "tuteur IA" utilisent des approches problématiques : 1. **RAG global partagé** — tous les tenants voient la même base. Fonctionnel mais enfreint la conformité et la qualité pédagogique. 2. **"Per-tenant" via filtre de métadonnées sans enforcement** — les chunks ont un champ `tenant_id` mais le filtre est optionnel dans la requête. Un bug dans 1 endpoint = une fuite. 3. **Vector DB séparé par tenant** — surcharge opérationnelle brutale. Mille tenants = mille vector DBs. Studeia a résolu cela avec 3 invariants architecturaux. ## Invariant 1 : filtre tenantId+courseId OBLIGATOIRE Toute requête pgvector dans Studeia DOIT passer par `packages/core/src/ai/rag.ts` : ```ts export async function retrieve(params: RetrieveParams) { if (!params.tenantId && !params.allowGlobal) { throw new Error('tenantId required unless allowGlobal=true'); } const filter = params.tenantId ? Prisma.sql`WHERE ce.tenant_id = ${params.tenantId}${params.courseId ? Prisma.sql` AND ce.course_id = ${params.courseId}` : Prisma.empty}` : Prisma.empty; return prisma.$queryRaw` SELECT ce.*, 1 - (ce.embedding <=> ${vectorStr}::vector) as similarity FROM content_embeddings ce ${filter} AND 1 - (ce.embedding <=> ${vectorStr}::vector) > 0.5 ORDER BY similarity DESC LIMIT 10 `; } ``` `allowGlobal` n'est `true` que dans les routes administratives explicites (administrateur global testant la couverture RAG). Dans TOUT le reste, throw. Règle critique du projet (règle 6 du CLAUDE.md) : "Tenant isolation : toutes les requêtes B2B filtrent par tenantId". Un audit automatisé via les tests Vitest vérifie que tout appel à `retrieve()` dans le code applicatif passe bien un `tenantId`. ## Invariant 2 : tenantOnlyMode dans le RetrievalAgent Même avec le bon filtre, il existe des cas où l'on souhaite un fallback (ex. : B2C sans tenant). Pour garantir que le B2B ne fuit JAMAIS : ```ts const chunks = await retrieve({ query, filters: { tenantId, courseId }, tenantOnlyMode: true, // <-- CRITIQUE }); ``` `tenantOnlyMode: true` signifie : s'il n'y a pas de chunks dans le tenant, retourner **vide**, sans chercher dans le global. Le tuteur répond "je n'ai pas de contenu sur ce sujet dans votre cours" plutôt que d'inventer. ## Invariant 3 : RLS PostgreSQL comme filet de sécurité Les politiques RLS de Supabase ajoutent une couche de défense : ```sql CREATE POLICY tenant_isolation_content_embeddings ON content_embeddings FOR SELECT USING (tenant_id = current_setting('app.current_tenant_id')::uuid); ``` Si un bug dans le code applicatif oublie le filtre, RLS bloque. **Défense en profondeur**. En production, il y a un coût : chaque requête Postgres évalue la politique. Mais la latence supplémentaire est de ~2-5 ms, acceptable. ## Pipeline d'ingestion ``` POST /api/institution/courses/[id]/rag-ingest { mode: "full" | "incremental" } ↓ 1. Liste les leçons publiées du cours 2. Pour chaque leçon, extrait le texte selon le type : - rich_text → strip HTML via DOMPurify - slides → concatène les éléments texte + notes de présentation - quiz → concatène question + explication par question - pdf → document-extractor (PyPDF + fallback Adobe extract si les natifs échouent) - video → LiveClassTranscription.transcriptionText (Whisper → fallback Google STT) - assignment → instructions 3. Chunking : 800 tokens, 200 de chevauchement, préserve la structure sémantique (ne coupe pas un paragraphe au milieu, ne coupe pas du code au milieu d'une fonction) 4. Embeddings via Voyage AI (1024 dims, fallback OpenAI text-embedding-3-large) 5. Crée ContentBlock + ContentEmbedding avec métadonnées : { source: "course_lesson", courseId, lessonId, lessonTitle, moduleTitle, ingestionId } 6. Statut final dans CourseRagIngestion (pending → running → completed | failed) ``` ## Chunking sémantique — pourquoi c'est important Le chunking naïf (tous les N caractères) brise le contexte. Exemple : une leçon contient un extrait de code Python qui se retrouve découpé en chunks différents — l'embedding individuel de chaque moitié ne capture pas le sens. Studeia utilise un **recursive splitter** avec une hiérarchie de séparateurs : 1. Tente de couper au niveau du paragraphe (\n\n) 2. Sinon, coupe à la phrase (. ) 3. Sinon, coupe au mot 4. Sinon (rare), tronque Et préserve les blocs de code ENTIERS (entre les triple backticks) : ```ts function recursiveChunk(text, maxTokens = 800, overlap = 200) { // Identifie les blocs protégés (blocs de code, tables markdown) const protectedRanges = findProtectedRanges(text); // Découpe en respectant la hiérarchie + la protection return splitWithHierarchy(text, { separators: ['\n\n', '. ', ' ', ''], maxTokens, overlap, protectedRanges, }); } ``` Résultat : chunks de ~600-800 tokens avec un chevauchement de 200, sémantiquement cohérents. ## Voyage AI vs OpenAI — pourquoi un primary différent Nous avons commencé avec OpenAI text-embedding-3-large. Nous avons migré vers Voyage AI en primary au premier semestre 2026. Les raisons : | Aspect | OpenAI text-emb-3-large | Voyage AI voyage-3 | |---|---|---| | Coût / 1K tokens | 0,00013 $ | 0,00005 $ | | Dimensions natives | 3072 (réductible via le paramètre dimensions) | 1024 natif | | Benchmark MTEB (anglais) | 64,6 | 67,2 | | Benchmark MIRACL (multilingue) | moyen | meilleur | | Limites de débit free tier | 3K RPM | 3M tokens/min | Voyage est ~2,6× moins cher + meilleur benchmark en retrieval éducatif + robustesse multilingue (important pour l'es-ES + le fr-FR de Studeia). Fallback automatique vers OpenAI en cas de panne de Voyage : ```ts async function embedText(texts: string[]) { try { return await voyageEmbed(texts); } catch (err) { console.warn('[embed] Voyage a échoué, fallback OpenAI', err); return await openaiEmbed(texts, { dimensions: 1024 }); // réduit à 1024 pour la compatibilité } } ``` Important : les deux produisent des vecteurs de 1024 dimensions, pgvector accepte donc sans changement de schéma. ## Tuning pgvector en production pgvector par défaut est optimal pour moins de 100 000 vecteurs. Au-delà, sans tuning, la latence se dégrade. Configuration Studeia (testée avec 500 000+ chunks) : ```sql -- Index IVFFlat CREATE INDEX content_embeddings_embedding_idx ON content_embeddings USING ivfflat (embedding vector_cosine_ops) WITH (lists = 700); -- sqrt(500000) ≈ 700 -- La requête utilise probes SET ivfflat.probes = 15; -- plus de probes = meilleur rappel, latence plus élevée ``` Compromis : - `lists` trop bas : requêtes lentes (scan complet) - `lists` trop élevé : index volumineux, insertions lentes - `probes` bas : latence correcte, mauvais rappel (chunks pertinents manqués) - `probes` élevé : bon rappel, latence dégradée Pour Studeia en production : lists=700, probes=15. Latence p95 = 47 ms pour un retrieval top-10 sur 500 000 chunks. Pour une échelle à 5M+ : envisager HNSW (postgres 16+) ou le partitionnement par tenantId. ## autoSyncRag — reconstruction incrémentale Un cours est un organisme vivant. Un enseignant modifie la leçon 17. Ajoute une vidéo. Met à jour un quiz. Le système doit ré-embedder uniquement le delta, pas tout le cours. `Course.autoSyncRag: Boolean @default(false)` Lorsque `true`, toute modification de leçon via l'API : ```ts // PATCH /api/institution/courses/[id]/modules/[mid]/lessons/[lid] await prisma.courseLesson.update({ data: ... }); // En arrière-plan — ne bloque pas la requête after(async () => { if (course.autoSyncRag) { await courseRagIngestionService.reingest({ courseId, mode: "incremental", onlyLessonId: lessonId, }); } }); ``` Ré-ingestion incrémentale : 1. Supprime les anciens chunks de la leçon (`WHERE lesson_id = X`) 2. Ré-extrait le texte de la leçon mise à jour 3. Ré-découpe en chunks 4. Ré-embed 5. Insère les nouveaux chunks Durée : ~3-8 s par leçon moyenne (selon la taille). L'élève ne rencontre JAMAIS un RAG obsolète. ## Chiffres de production | Métrique | Valeur | |---|---| | Total chunks en production | ~500 000 | | Tenants actifs | 50+ | | Cours avec RAG ingéré | 280+ | | Plus grand tenant (chunks) | 47 000 | | Latence p50 retrieve | 28 ms | | Latence p95 retrieve | 47 ms | | Latence p99 retrieve | 124 ms | | Coût embedding mois précédent | 34 $ (proportionnel au volume de modifications) | | Incidents de fuite cross-tenant | 0 (6 mois) | ## Compromis honnêtes **Ce qui N'a PAS fonctionné :** 1. **Nous avons essayé le hierarchical retrieval** (recherche d'abord dans le sommaire, puis dans les chunks complets). Implémentation complexe, gain marginal de qualité sur les requêtes simples. Supprimé. 2. **Nous avons essayé la reformulation de requête via LLM** (passer la requête de l'élève par un LLM avant l'embedding pour la normaliser). Le coût a doublé (1 appel LLM supplémentaire), latence +400 ms, qualité marginalement meilleure uniquement sur les requêtes très vagues. Nous effectuons la reformulation dans le RetrievalAgent uniquement lorsque la requête est ambiguë (heuristique simple). 3. **Nous avons essayé le re-ranking via Cohere rerank-3**. Coûteux (0,001 $ par re-rank), latence +200 ms. Pour 90 % des requêtes, cosine pgvector + boost par zones de faiblesse est suffisant. Nous gardons le rerank disponible mais désactivé par défaut. ## Ce qui manquait il y a 2 ans pgvector est arrivé à maturité en 2022. Voyage AI a lancé voyage-3 au second semestre 2024. Avant cela, les alternatives (Pinecone, Weaviate, Qdrant) étaient payantes et complexes à opérer en multi-tenant. Aujourd'hui, avec pgvector mature + embeddings peu coûteux + RLS Supabase, le RAG per-tenant de niveau production est devenu accessible. Nous le recommandons à tout LMS B2B sérieux. ## Voir aussi - [Détails de la RAG Ingestion](/features/ai-tutor/rag-ingestion) - [Pipeline multi-agent AI tutor](/blog/multi-agent-ai-tutor-pipeline) - [Multi-tenancy](/platform/multi-tenancy) ## FAQ **Q: Pourquoi un RAG per-tenant plutôt qu'un RAG partagé ?** Trois raisons non négociables : (1) Conformité LGPD/RGPD — le contenu d'un établissement NE PEUT PAS apparaître dans les réponses adressées aux élèves d'un autre établissement. (2) Qualité pédagogique — les institutions ont leur propre contenu, leur propre approche, des exemples contextualisés ; mélanger le contenu de Stanford avec celui d'un centre de préparation local pollue les réponses. (3) Confidentialité commerciale — le contenu d'une école préparatoire premium est la propriété intellectuelle de cette école, qui ne souhaite pas l'exposer à ses concurrents. **Q: Quel est le coût des embeddings à l'échelle ?** Voyage AI facture 0,00005 $ pour 1 000 tokens (version primary de Studeia). Un cours moyen : 30 leçons, ~50 000 mots = ~70 000 tokens. Embedding initial : ~0,0035 $ par cours. Ré-ingestion incrémentale : ~0,0001 $ par leçon modifiée. Pour un tenant avec 100 cours : ~0,35 $ de configuration initiale + ~5-10 $/mois en deltas. Coût négligeable par rapport à la valeur apportée. **Q: Combien de vecteurs pgvector peut-il gérer avant de se dégrader ?** pgvector avec IVFFlat supporte des millions de vecteurs avec une latence <100 ms si l'index est bien configuré (lists = sqrt(N), probes = 10-20). HNSW (postgres 16+) est meilleur pour l'échelle : 10M+ vecteurs avec <50 ms. Studeia a été testé avec ~500 000 chunks en production, latence p95 du retrieval = 47 ms. Au-delà de 5M, envisager le partitionnement par tenantId ou pgvector-rs. **Q: Comment mettre à jour les embeddings lorsqu'une leçon est modifiée ?** Course.autoSyncRag=true active la ré-ingestion incrémentale automatique via Next.js after(). Toute modification via l'API déclenche : suppression des anciens chunks de la leçon + découpage du nouveau contenu + embedding + insertion. Sans interruption de service, sans reconstruction complète. Pour les modifications en masse : exécuter /api/institution/courses/[id]/rag-ingest avec mode='full' reconstruit depuis zéro. --- # [fr-FR (AI-translated)] Studeia vs Blackboard Learn : comparatif honnête 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-blackboard Locale: fr-FR Section: comparisons Updated: 2026-05-24 **Short answer:** Blackboard Learn (Anthology) est un LMS legacy dominant dans les universités publiques, avec SCORM 2004, Blackboard Collaborate Ultra et accréditations académiques — USD $8-25/étudiant/an. Studeia est un SaaS B2B brésilien avec IA tuteur multi-provider, gamification native et LGPD natif, coûts en BRL (60-85% moins cher sur 3 ans). Université publique déjà sur Blackboard : intégrez via LTI. Université privée nouvelle ou en modernisation : Studeia l'emporte en UX, coût et délai de valeur. ## Comparatif côte à côte | Aspect | Studeia | Blackboard Learn | |---|---|---| | **Origine** | Brésil 2025 | États-Unis 1997 (Anthology depuis 2022) | | **Modèle** | SaaS géré moderne | SaaS (Cloud) ou self-hosted | | **Prix** | R$0-1 500/mois (plans) ou Enterprise | USD $8-25/étudiant/an enterprise | | **UX** | Moderne, glass morphism, 9 thèmes | Legacy (Original) ou Ultra (plus moderne mais inconsistant) | | **Support** | PT/EN/ES/FR | EN (PT-BR via partenaires) | | **Tuteur IA** | Multi-agent natif (Claude/GPT/Grok/Gemini) | Blackboard AI Design Assistant (aperçu) | | **Gradebook** | Catégories + pondérations + rubriques + intégrité | Robuste (Grade Center mature) | | **SCORM 2004** | NON | Oui (complet) | | **Classes en direct** | Adaptateur BBB/Zoom/Teams/Meet | Blackboard Collaborate Ultra | | **Gamification** | Intégrée (XP, OB 3.0, classements, concours) | Achievements + plugins | | **LGPD** | Natif | Via DPA | | **Mobile** | Expo natif + white-label | Blackboard App + Instructor App | | **LTI 1.3** | Fournisseur d'outil | Consommateur + fournisseur | | **SSO Enterprise** | SAML+OIDC+SCIM | SAML+LDAP+CAS | | **Accessibilité** | WCAG 2.1 AA natif | Blackboard Ally (audit automatique) | | **Évaluation des risques** | RiskAssessmentService 6 facteurs | Blackboard Predict (IA prédictive) | ## Quand choisir Blackboard ✅ Université publique fédérale/régionale utilisant Blackboard en production depuis des années ✅ Besoin obligatoire de SCORM 2004 (anciens cours) ✅ Conformité avec le MEC + certifications académiques spécifiques ✅ Équipe informatique déjà formée sur Blackboard ✅ Intégration avec un système académique legacy (Banner, Workday Student) ✅ Priorité à la maturité institutionnelle plutôt qu'à l'innovation ✅ Blackboard Ally essentiel pour la conformité WCAG sur les contenus existants ## Quand choisir Studeia ✅ Université privée nouvelle ou en modernisation radicale ✅ École d'enseignement à distance axée sur le B2C/professionnel ✅ École préparatoire / formation & développement corporate / école technique ✅ Souhait de réduction drastique des coûts (60-85 %) ✅ Souhait d'une UX moderne sans 6 mois de formation ✅ Tuteur IA réel (l'IA Blackboard est encore en cours de développement) ✅ Mobile avec white-label propre ✅ Souhait d'éviter les contrats enterprise complexes (sans appel d'offres de 100 pages) ## TCO comparé — université 5 000 étudiants / 3 ans | Poste | Blackboard Enterprise | Studeia Enterprise | |---|---|---| | Licence | USD $40k-125k/an × 3 = USD $120k-375k (R$600k-1,875M) | R$108k-288k (R$3-8k/mois × 36) | | Installation + implémentation | USD $25k-100k | R$0-30k | | Formation du personnel | USD $10k-50k | Incluse (vidéos + docs) | | Développement personnalisé (appel d'offres) | USD $50k-300k | Via API publique (développeurs internes) | | Blackboard Ally | USD $5k-15k/an | N/A (WCAG natif) | | **TOTAL 3 ans** | **R$1,2M-3,5M** | **R$108k-318k** | Studeia est typiquement **70-90 % moins cher** que Blackboard enterprise. ## Là où Blackboard l'emporte (honnêteté) 1. **SCORM 2004** : Studeia ne prend en charge que IMS CC. Pour les institutions disposant de bibliothèques SCORM existantes : limitation réelle. 2. **Blackboard Collaborate Ultra** : outil de webconférence mature. Studeia intègre BBB/Zoom/Teams/Meet (adaptateur) mais n'offre pas la parité fonctionnelle avec Collaborate sur les fonctionnalités avancées (salles de sous-groupes automatisées, sondages en couches, tableau blanc collaboratif approfondi). 3. **Blackboard Ally** : audit automatique de conformité WCAG sur les contenus uploadés (PDF, vidéos, etc.). Studeia est nativement WCAG mais n'audite pas les fichiers uploadés. 4. **Blackboard Predict** : 20 ans de données de risque académique dans un modèle propriétaire. Studeia dispose du RiskAssessmentService avec 6 facteurs pondérés (récent, mais fonctionnel). 5. **Maturité institutionnelle** : 25 ans d'utilisation dans les universités. Résistance au changement = forte. 6. **Certifications académiques brésiliennes** : MEC, ABNT — Blackboard possède des certifications que Studeia n'a pas encore obtenues (en attente). ## Migration Blackboard → Studeia ### Parcours recommandé (6-12 mois) | Mois | Phase | |---|---| | 1 | Plan Demo d'essai, importer 2 cours pilotes via IMS CC | | 2-3 | Ajuster le contenu migré, recréer les quiz complexes, former 5 enseignants | | 4 | Migrer les étudiants pilotes via SCIM (pris en charge par Blackboard) | | 5-6 | Valider les fonctionnalités clés (gradebook, rapports parents, tuteur IA) avec les pilotes | | 7-9 | Migration progressive des départements/cours restants | | 10-12 | Décommissionnement de Blackboard (ou maintien en parallèle pour les cours legacy via LTI) | ### Ce qui migre automatiquement - ✅ Cours via l'export IMS CC de Blackboard - ✅ Étudiants via SCIM ou CSV - ✅ Notes via CSV - ✅ Forums (structure de base) ### Ce qui NE migre PAS - ❌ Packages SCORM 2004 (à recréer sous forme de leçons vidéo + quiz) - ❌ Banques de questions spécifiques à Blackboard (à recréer via la banque de questions Studeia) - ❌ Modèles XML personnalisés Blackboard - ❌ Rapports Blackboard Ally (la couverture WCAG repart de zéro) - ❌ Personnalisations JavaScript custom ## Verdict honnête **Blackboard reste meilleur pour** : les universités publiques fédérales avec 15+ ans d'utilisation de Blackboard, une dépendance critique à SCORM 2004, le besoin de certifications MEC spécifiques via Anthology, et une priorité à la stabilité plutôt qu'à l'innovation. **Studeia l'emporte pour** : les universités privées en modernisation, les nouvelles écoles d'enseignement à distance, un coût total prévisible, une UX moderne, un tuteur IA réel, le mobile B2B avec white-label, l'intégration avec PIX/Asaas. **L'approche hybride est pertinente pour** : une grande université publique souhaitant utiliser Studeia pour les nouveaux cours sans désinvestir de Blackboard. Studeia comme outil LTI dans des cours spécifiques. ## Voir aussi - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) - [Studeia vs Canvas](/comparisons/studeia-vs-canvas) - [Cas d'usage : Université](/use-cases/university) ## FAQ **Q: Blackboard est-il encore pertinent en 2026 ?** Oui, il reste dominant dans les universités publiques brésiliennes (UFRJ, UnB, etc.) et certaines établissements privés traditionnels. Anthology (la société qui a racheté Blackboard) a consolidé en 2022 et modernisé une partie du produit via Blackboard Learn Ultra. Mais l'UX legacy persiste dans de nombreuses institutions — et la perception des utilisateurs reste négative chez les étudiants (interface datée, navigation confuse). **Q: La migration de Blackboard vers Studeia est-elle faisable ?** Oui, partiellement. Blackboard exporte les cours en IMS Common Cartridge (IMS CC v1.x) et Studeia importe via POST /api/institution/courses/import. Les quiz basiques (QTI 1.2), les contenus, les modules et les liens sont migrés. SCORM 2004, les banques de questions spécifiques à Blackboard et les extensions XML personnalisées NE migrent PAS automatiquement. Les étudiants peuvent être migrés via SCIM (pris en charge par Blackboard) ou CSV. **Q: Quelle est la différence de prix sur 3 ans ?** Blackboard facture USD $8-25/étudiant/an dans les contrats enterprise (négociable). Pour une université de 5 000 étudiants : USD $40k-125k/an = R$600k-1,875M sur 3 ans. Studeia Enterprise pour la même taille représente typiquement R$108k-288k sur 3 ans (R$3-8k/mois négociable). Économie typique de 60 à 85 %. **Q: Blackboard propose-t-il des fonctionnalités que Studeia n'a pas ?** Oui : (1) SCORM 2004 complet (Studeia prend uniquement en charge IMS CC). (2) Blackboard Collaborate Ultra pour la webconférence (Studeia intègre BBB/Zoom/Teams/Meet). (3) Blackboard Ally pour la conformité WCAG automatique sur les contenus existants (Studeia est nativement WCAG mais sans audit automatique des fichiers uploadés). (4) Blackboard Predict (IA prédictive de risque — Studeia dispose du RiskAssessmentService avec 6 facteurs pondérés, similaire). (5) Maturité institutionnelle + certifications académiques. --- # [fr-FR (AI-translated)] Studeia vs Canvas LMS : comparatif honnête 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-canvas Locale: fr-FR Section: comparisons Updated: 2026-05-23 **Short answer:** Canvas (Instructure) est le LMS dominant dans les universités américaines — UX soigné, gradebook robuste, USD $5-15/étudiant/mois. Studeia est brésilien, B2B, avec tuteur IA multi-agent natif, gamification OB 3.0, facturation PIX/Asaas et conformité LGPD en BRL. Pour les PME, écoles et cours préparatoires au Brésil : Studeia gagne en TCO et pertinence locale. Pour les universités déjà sous Canvas : l'intégration via LTI 1.3 avec Studeia comme outil fournisseur fonctionne. ## Comparatif côte à côte | Aspect | Studeia | Canvas | |---|---|---| | **Origine** | Brésil 2025 | États-Unis 2008 (Instructure) | | **Modèle** | SaaS géré | SaaS (Cloud) ou auto-hébergé (Open Source — limité) | | **Prix** | R$0-1 500/mois (plans) ou Enterprise sur devis | USD $5-15/étudiant/mois ($60-180/étudiant/an) | | **Support** | PT/EN/ES/FR | EN (PT-BR limité) | | **LGPD** | Natif (données au Brésil) | GDPR/FERPA — LGPD via DPA | | **Paiement** | BRL, Stripe + Asaas (PIX) | USD, contrats enterprise | | **Tuteur IA** | Multi-agent (Claude/GPT/Grok/Gemini) + RAG par tenant | Canvas AI (basique, générer des quiz, transcrire) | | **Gradebook** | Catégories + rubriques + pondérations + indicateurs d'intégrité | Considéré comme le meilleur du marché | | **Mobile** | Expo Android (iOS en roadmap) | Applications natives soignées (iOS+Android) | | **Moteur de quiz** | 8 types + psychométrie (Cronbach, point-biserial) | Quiz 2.0 (plus avancé en pooling) | | **LTI 1.3** | Fournisseur d'outil | Consommateur + fournisseur d'outil | | **SCORM 2004** | NON | Oui | | **H5P** | Sous-types natifs (pas H5P pur) | Plugin | | **Gamification** | XP/badges/classements/concours natif | Limitée (badges via Canvas Badges) | | **White-label** | Total (Enterprise) | Limité (couleurs + logo) | | **SSO Enterprise** | SAML+OIDC+SCIM | Oui | | **API** | 64+ endpoints à portées granulaires | API REST étendue (plus mature) | | **Personnalisation** | Thème + CSS personnalisé | Thèmes + JavaScript personnalisé Designer | | **Communauté** | Petite (2026 est récent) | Énorme (Instructure Community) | ## Quand choisir Canvas ✅ Université américaine ou standard américain ✅ Déjà sur Canvas avec un investissement de migration significatif ✅ Budget élevé (USD/étudiant/an sans problème) ✅ Besoin de SCORM 2004 / H5P mature ✅ Maximum de finition UX/mobile ✅ Équipe de Designers/Devs Canvas existante ## Quand choisir Studeia ✅ Institution brésilienne (LGPD, PT, PIX, support local) ✅ Coûts en BRL prévisibles (R$10-100k/an vs USD 50-300k/an Canvas) ✅ Vous voulez un vrai tuteur IA (Canvas AI est encore en développement) ✅ Vous voulez une gamification native (Canvas est faible ici) ✅ K-12 brésilien (Canvas K-12 est limité) ✅ Classes préparatoires aux examens (cursinhos pré-vestibular) ✅ Formation professionnelle brésilienne ✅ Mobile B2B avec white-label ✅ EAD certifiant brésilien (prix compétitifs) ## Coûts comparés — université de 5 000 étudiants | Élément | Canvas | Studeia Enterprise | |---|---|---| | Licence/an | USD $60k-90k (R$300k-450k) | R$60k-180k (à négocier) | | Mise en place initiale | USD $10k-30k | Incluse | | Formation | USD $5k | Incluse (vidéos + docs) | | **TOTAL an 1** | **R$365k-485k** | **R$60k-180k** | Pour les universités de taille moyenne : Studeia est généralement 50-70 % moins cher. ## Intégration Canvas + Studeia Cas fréquent : une université déjà sur Canvas souhaite ajouter Studeia pour des cours spécifiques (ex : vrai tuteur IA pour un cours de calcul). ### Configuration LTI 1.3 1. **Studeia génère** Tool URL + Client ID + JWKS URL dans /institution/lti-tools 2. **Canvas Admin** → Settings → Apps → Add App → By Client ID → coller le Client ID 3. Configurer les placements (navigation de cours, devoir, etc.) 4. Dans le cours Canvas : ajouter l'outil Studeia comme leçon ### Synchronisation des notes (AGS) Studeia renvoie automatiquement les notes : ``` L'étudiant complète un quiz dans Studeia ↓ Studeia appelle l'endpoint Canvas LTI AGS : POST {issuer}/api/lti/courses/{courseId}/line_items/{itemId}/scores ↓ La note apparaît dans le gradebook Canvas ``` Sans migration de données — Canvas reste la source de vérité des cours. ## Migration Canvas → Studeia ### Possible - ✅ Cours via IMS Common Cartridge (Canvas exporte en .imscc) - ✅ Étudiants via CSV ou SCIM - ✅ Notes via CSV ### NON supporté - ❌ Paquets SCORM 2004 - ❌ Types de questions spécifiques à Canvas (numérique avec formule, etc.) — à recréer - ❌ Pages Canvas avec JavaScript personnalisé - ❌ Canvas DesignTools (propriétaire) ## Verdict honnête **Canvas reste meilleur pour** : - Les universités américaines / au standard américain - La finition mobile (Studeia est en retrait) - Le maximum de plugins/intégrations matures - SCORM 2004 robuste - La maturité institutionnelle **Studeia l'emporte pour** : - Le marché brésilien (LGPD, PT, BRL) - Le coût total (50-70 % moins cher en général) - Un vrai tuteur IA (vs Canvas AI naissant) - La gamification native - K-12 + classes préparatoires - Le vrai white-label (Canvas est limité) **L'approche hybride est pertinente pour** : les universités avec Canvas établi qui souhaitent des fonctionnalités spécifiques de Studeia (tuteur IA, gamification). Utilisez Studeia comme outil LTI dans des cours sélectionnés. ## Voir aussi - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) - [Studeia vs Google Classroom](/comparisons/studeia-vs-google-classroom) - [Aperçu de la plateforme](/platform/overview) ## FAQ **Q: Canvas est-il le meilleur LMS au monde ?** Canvas est excellent — dominant dans les universités américaines (>40 % du marché de l'enseignement supérieur aux États-Unis). UX moderne, gradebook robuste, application mobile soignée. Mais il est cher (USD $5-15/étudiant/mois), le support est en anglais, sans focus sur le marché brésilien, sans conformité LGPD native, sans PIX/facturation locale. Pour les universités brésiliennes avec un budget élevé et un besoin de standard américain : bon choix. Pour les PME brésiliennes : Studeia l'emporte généralement en coût + adéquation locale. **Q: Studeia s'intègre-t-il avec Canvas ?** Oui. Studeia fonctionne comme fournisseur d'outil LTI 1.3 — enregistrez les URLs dans Canvas Admin > Settings > Apps > Add App. Les notes se synchronisent en retour via AGS (Assignment and Grade Service). Utile pour compléter Canvas avec le tuteur IA + la gamification de Studeia. **Q: Canvas dispose-t-il d'un tuteur IA ?** Canvas propose « Canvas AI » (préversion limitée en 2025, disponibilité générale en 2026) avec des fonctionnalités de base : générer des quiz, résumer des cours, transcrire. Le tuteur IA conversationnel avec l'étudiant est plus limité. Studeia dispose d'un véritable tuteur IA multi-agent (RAG par tenant, 5 stratégies pédagogiques, détection d'idées fausses, agent superviseur). Comparaison Canvas AI vs Studeia AI : Studeia est plus approfondi, Canvas est plus soigné en termes d'UI. **Q: Puis-je utiliser Studeia à la place de Canvas pour le K-12 ?** Oui. Canvas K-12 (Canvas Network) existe mais est relativement faible par rapport à Canvas Higher Ed. Studeia dispose de fonctionnalités dédiées au K-12 : portail parents avec narration IA, surveillance des mineurs, gamification adaptée aux enfants, conformité LGPD/protection des mineurs native. Dans 90 % des cas K-12 au Brésil : Studeia l'emporte. --- # [fr-FR (AI-translated)] Studeia vs Coursera for Business : comparatif 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-coursera-for-business Locale: fr-FR Section: comparisons Updated: 2026-05-24 **Short answer:** Coursera for Business est un marketplace de cours prêts (Stanford/Yale/Google/Meta) avec suivi de progression (USD $399–600/user/an). On n'y crée pas de contenu propre. Studeia est un LMS B2B où vous créez du contenu INSTITUTIONNEL (compliance, produits, méthodologie) avec IA tuteur multi-agent, gamification, gradebook, SSO. Tarif par apprenant (R$2,5–15/apprenant/mois). Recommandation : combiner les deux — Coursera pour les compétences génériques + Studeia pour le contenu institutionnel. ## Comparatif conceptuel | Aspect | Studeia | Coursera for Business | |---|---|---| | **Type** | LMS B2B pour créer son propre contenu | Marketplace de cours prêts à l'emploi | | **Qui crée le contenu** | Votre organisation | Stanford, Yale, Google, Meta, IBM, etc. | | **Personnalisation** | Totale (cours sur mesure) | Limitée (curation du catalogue) | | **Prix** | R$250-1.500/mois + entreprise sur devis | USD $399-600/utilisateur/an | | **Modèle** | Facturation par apprenant du tenant | Facturation par utilisateur abonné | | **Langue des cours** | Vous choisissez (PT/EN/ES/FR) | Majorité en anglais (sous-titré) | | **Certificats** | OB 3.0 à votre marque + personnalisable | Certificats Coursera + universités partenaires | | **Tuteur IA** | Multi-agents RAG par tenant | Coursera Coach (limité au catalogue) | | **Gamification** | Native (XP, badges, classements) | Limitée | | **Classes en direct** | BBB+Zoom+Teams+Meet | Coursera Live (sessions sélectionnées) | | **LTI 1.3** | Tool provider | Tool provider | | **Gradebook propre** | Oui (rubriques, pondérations, intégrité) | Géré par Coursera (sans personnalisation) | | **Suivi de conformité** | Automatisations + rappels + audit | Oui, basé sur le catalogue | | **API publique** | 64+ endpoints scopés | API d'intégration limitée | ## Quand choisir Coursera for Business ✅ L'entreprise souhaite externaliser le contenu de compétences génériques (Python, AWS, Excel, soft skills) ✅ Valorisation des certificats d'universités de premier rang (Stanford, Yale) ✅ Accent sur l'upskilling/reskilling des employés sur les technologies mainstream ✅ Budget élevé (USD $400-600/utilisateur/an n'est pas un problème) ✅ L'achat de packages pré-curatés (SkillSets) fait gagner du temps ✅ Les cours en anglais ne posent pas de problème ✅ Entreprise mondiale (bureaux dans plusieurs pays) ## Quand choisir Studeia ✅ L'entreprise veut former sur du CONTENU PROPRE (conformité interne, produits, méthodologie) ✅ Cours sur mesure pour votre culture/processus (introuvable sur Coursera) ✅ Accent sur la formation sectorielle (santé, juridique, finance) ✅ Vous souhaitez votre propre marque sur les certificats (sans Coursera/Studeia visible) ✅ Vous souhaitez un tuteur IA qui connaît VOTRE matériel (RAG par tenant) ✅ Coût prévisible en R$ (sans volatilité USD) ✅ Entreprise brésilienne avec LGPD natif + PIX/Asaas ## Scénarios réels ### Grande banque au Brésil **Coursera for Business** : 2000 employés × USD $500/an = R$5M/an. Formation en Python, AWS, leadership (compétences génériques). **Studeia Enterprise** : R$8k/mois × 12 = R$96k/an. Formation sur les produits de la banque, conformité réglementaire (BACEN, LGPD bancaire), culture interne. **Les deux ensemble** : R$5,1M/an. Chacun fait ce qu'il fait de mieux. ### Établissement d'enseignement à distance créant des formations professionnelles **Coursera for Business** : ne s'applique pas (Coursera n'est pas favorable aux revendeurs pour les établissements brésiliens). **Studeia Enterprise** : crée ses propres cours, gère les inscriptions, délivre des certificats, monétise via sa propre plateforme. ### Startup tech de 50 employés **Coursera Team** : USD $399 × 50 = R$100k/an. Compétences tech de base. **Studeia Mini** : R$250/mois = R$3k/an (10 apprenants). Formation sur le produit interne + onboarding. Les deux : R$103k/an. Une petite startup utilisera peut-être uniquement Coursera (moins cher pour les compétences génériques) ou Studeia (axé sur l'onboarding interne). ## Intégration Coursera + Studeia LTI 1.3 (Coursera supporte en tant que tool provider, Studeia aussi) : ``` L'employé suit Python sur Coursera ↓ (LTI launch ou xAPI) La complétion est reportée dans le gradebook Studeia ↓ handleGamificationEvent → XP gagné ``` Ou via l'API publique de Coursera (niveau Enterprise) en synchronisant les complétions vers Studeia. ## Là où Coursera l'emporte (honnêteté) 1. **Contenu de premier rang des universités** : Stanford, Yale, MIT, Google — Studeia ne dispose pas d'un catalogue propre 2. **Certificats de marque forte** : un "certificat Stanford" sur LinkedIn vaut plus qu'un "certificat Studeia" 3. **Catalogue immense** : 7000+ cours vs devoir créer depuis zéro 4. **Coursera Live** : webinaires avec des instructeurs universitaires 5. **SkillSets curatés** : parcours d'apprentissage pré-conçus par des experts 6. **Entreprises mondiales** : mieux adapté aux multinationales avec des bureaux dans plusieurs pays ## Verdict honnête **Coursera for Business** : outil de **consommation** de cours. Achat d'un accès au catalogue. **Studeia** : outil de **production** de cours. Création et gestion de contenu propre. Ce sont des catégories différentes. Pour les entreprises moyennes/grandes : utiliser LES DEUX est pertinent. Coursera pour les compétences génériques + Studeia pour le contenu institutionnel. Pour les petites startups : cela dépend du besoin dominant. ## Voir aussi - [Use case : Corporate training](/use-cases/corporate-training) - [Studeia vs Canvas](/comparisons/studeia-vs-canvas) ## FAQ **Q: Coursera for Business est-il un LMS ?** Pas exactement. Coursera for Business est une marketplace de cours prêts à l'emploi issus d'universités de premier rang (Stanford, Yale, Google, Meta, IBM) avec suivi de la progression et SkillSets curatés. Idéal pour les entreprises qui souhaitent externaliser leur contenu. Il n'est PAS possible d'y créer ses propres cours — pour cela, vous avez besoin d'un vrai LMS comme Studeia, Moodle ou Canvas. **Q: Puis-je utiliser les deux ensemble ?** Oui, c'est courant. Coursera pour le contenu curaté générique (Python, AWS, leadership) + Studeia comme LMS propre pour le contenu institutionnel spécifique (conformité interne, produits de l'entreprise, méthodologie propre). Intégration via xAPI/LTI (Coursera supporte les lancements LTI 1.3, Studeia aussi). **Q: Combien coûte Coursera for Business ?** Coursera Team (jusqu'à 125 utilisateurs) : USD $399/utilisateur/an. Coursera Enterprise : sur devis, typiquement USD $400-600/utilisateur/an selon le volume. Catalogue complet + certificats payants inclus. Pour 500 employés : USD $200k-300k/an (R$1M-1,5M). Studeia Enterprise pour 500 : R$108k-288k/an (en créant votre propre contenu). **Q: Coursera propose-t-il un tuteur IA ?** Coursera Coach (lancé en 2024) est un chatbot IA qui aide les apprenants dans les cours du catalogue. Il est limité au contenu Coursera. Studeia dispose d'un tuteur IA multi-agents avec RAG par tenant — il peut ingérer N'IMPORTE QUEL matériel (y compris les cours de votre propre entreprise) et en citer des extraits précis. --- # [fr-FR (AI-translated)] Studeia vs EadBox vs EadPlataforma — concurrents BR 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-eadbox-eadplataforma Locale: fr-FR Section: comparisons Updated: 2026-05-24 **Short answer:** EadBox et EadPlataforma sont des plateformes e-learning brésiliennes pour INFOPRODUCTEURS B2C (vente directe, affiliés, checkout et gateway Brésil). Studeia cible le B2B institutionnel — écoles, universités et T&D corporate — avec multi-tenant, SSO/SCIM, LTI, tuteur IA et gradebook. EadBox/EadPlataforma dominent en infoproduit B2C avec affiliés ; Studeia domine en e-learning académique/corporate avec IA réelle. Hotmart et Eduzz concurrencent aussi le B2C. ## Positionnement sur le marché | Plateforme | Focus principal | Client typique | |---|---|---| | **Studeia** | B2B institutionnel | École K-12, lycée préparatoire, université, formation & développement corporate | | **EadBox** | B2C infopreneur (avec affiliés) | Créateur de cours de productivité, langues, marketing | | **EadPlataforma** | B2C infopreneur + petit B2B | Coach, consultant, entreprise moyenne avec cours internes | | **Hotmart** | Marketplace + infoproduit B2C | Créateur vendant des cours à grande échelle (mass market) | | **Eduzz** | Marketplace + infoproduit B2C | Idem Hotmart, focus infoproduits numériques | | **Sambatech** | Vidéo corporate | Grande entreprise avec bibliothèque vidéo | ## Comparatif détaillé | Aspect | Studeia | EadBox | EadPlataforma | |---|---|---|---| | **Modèle** | B2B SaaS multi-tenant | B2C/B2B-light SaaS | B2C/B2B-light SaaS | | **Prix de départ** | R$250/mois (10 apprenants) | R$197/mois (Pro) | R$197/mois (Iniciante) | | **Prix à l'échelle** | R$1.500/mois (100 apprenants) | Apprenants illimités sur tous les plans | R$397/mois (Profissional) | | **Tuteur IA** | Multi-agent natif (4 fournisseurs) | IA Pro basique (OpenAI) | Génération de quiz via IA | | **Gradebook pondéré** | Oui (catégories + rubriques + pondérations) | Notes simples | Notes simples | | **Quiz psychométriques** | Cronbach + point-biserial + distractor | Quiz basiques | Quiz basiques | | **Multi-tenancy réel** | Oui (isolated + clés API par tenant) | Oui | Oui | | **White-label** | Total (Enterprise) | Oui (partiel) | Oui (partiel) | | **Mobile** | App native Expo white-label | App générique EadBox | App générique EadPlataforma | | **SSO Enterprise** | SAML+OIDC+SCIM | Limité | Limité | | **LTI 1.3** | Tool provider | NON | NON | | **Gamification** | XP+OB 3.0+classements+concours | Limitée | Limitée | | **Cours en direct** | BBB+Zoom+Teams+Meet adapter | Intégration Zoom | Intégration Zoom | | **Paiement apprenants** | Stripe + Asaas (PIX) B2B | Checkout intégré + 8 passerelles | Checkout intégré + 6 passerelles | | **Affiliés** | NON | Oui (système natif) | Oui | | **API publique** | 64+ endpoints + scopes | API basique | API basique | | **RGPD/LGPD** | Natif | Oui | Oui | | **Communauté/forums** | Oui (par groupe/cours) | Oui | Oui | | **Drip content** | Via publishAt planifié | Oui | Oui | ## Quand choisir chaque solution ### EadBox ✅ Vous êtes créateur de cours individuel (coach, consultant, infopreneur) ✅ Vous vendez des cours directement au consommateur (B2C) ✅ Vous souhaitez un système natif d'affiliés (commissionnement) ✅ Vous souhaitez 8 passerelles de paiement intégrées (Stripe, PagSeguro, Mercado Pago, etc.) ✅ Focus sur la conversion des ventes (landing pages, tunnels, upsell) ✅ Petite à moyenne structure (jusqu'à ~5 000 apprenants) ### EadPlataforma ✅ Même logique qu'EadBox mais convient aussi aux entreprises moyennes avec formation & développement interne ✅ Vous souhaitez des cours prêts à l'emploi de la plateforme en complément (leur catalogue) ✅ Focus sur la formation corporate basique ### Studeia ✅ École K-12 (primaire, collège, lycée) avec programme national (BNCC brésilien) ✅ Lycée préparatoire aux concours/examens d'entrée à l'université ✅ Université en e-learning ou enseignement supérieur ✅ Formation & développement corporate sérieux (conformité, SSO Okta/Azure AD, certificats OB 3.0) ✅ Vous souhaitez un tuteur IA réel (multi-agent, RAG par tenant) ✅ Vous souhaitez un gradebook académique (rubriques, pondérations, indicateurs d'intégrité) ✅ Vous souhaitez une intégration LTI (Canvas/Moodle/Blackboard) ✅ Vous souhaitez un mobile B2B avec white-label dédié ### Hotmart/Eduzz ✅ Vous souhaitez rejoindre un marketplace existant (visibilité) ✅ Vous vendez un infoproduit numérique large (e-book, cours, communauté) ✅ Vous acceptez de payer un % de transaction élevé (~10-20 %) en échange du trafic du marketplace ✅ Vous n'avez pas besoin d'une plateforme propre — Hotmart héberge tout ## TCO comparé — école privée 200 apprenants / 3 ans | Élément | Studeia (Enterprise sur devis) | EadPlataforma Profissional | |---|---|---| | Abonnement mensuel | R$3.000/mois × 36 = R$108k | R$397/mois × 36 = R$14,3k | | Coût IA proportionnel | R$3-8/apprenant × 200 × 36 = R$22-58k | R$0 (basique incluse) | | Fonctionnalités incluses | Tuteur IA multi-agent + LTI + SSO + analytics psychométriques + gamification OB 3.0 + portail parents IA | Quiz IA basique + communauté + checkout | | **TOTAL 3 ans** | **R$130-166k** | **R$14k** | **EadPlataforma est ~10 fois moins cher.** Mais : sans tuteur IA réel, sans gradebook pondéré, sans LTI, sans SSO Enterprise, sans mobile white-label, sans portail parents robuste. **Quand Studeia (plus cher) en vaut la peine :** - École facturant des frais de scolarité élevés (R$1k+/mois/apprenant) — la valeur ajoutée pédagogique le justifie - Lycée préparatoire premium (les analytics psychométriques montrent quels apprenants ont de réelles chances de réussite) - Université en e-learning (besoin de LTI, SSO, certificats vérifiables) - Formation & développement corporate (conformité, Okta/Azure AD) **Quand EadPlataforma est suffisant :** - Infopreneur individuel - Petit lycée/école avec programme simple - Coach/consultant - Formation & développement corporate basique ## Migration EadBox/EadPlataforma → Studeia ### Possible - ✅ Cours : export de contenu (texte, PDFs, liens vidéo) + réimport dans la Studeia Media Library - ✅ Apprenants : export CSV depuis EadBox/EadPlataforma + import dans Studeia - ✅ Structure des modules : recréer manuellement - ✅ Communauté/forums : repartir de zéro (pas de migration automatique) ### Non migrable - ❌ Système d'affiliés (Studeia n'en dispose pas) - ❌ Historique des ventes/transactions - ❌ Configurations du tunnel de vente - ❌ Planning du drip content (recréer via publishAt) ## Verdict honnête **Pour le créateur individuel B2C avec affiliés** : EadBox > Studeia (Studeia ne convient pas à ce cas d'usage). **Pour une école/lycée/université/formation & développement sérieux** : Studeia > EadBox/EadPlataforma (pédagogie + IA + conformité). **Pour vendre sur un marketplace** : Hotmart/Eduzz (Studeia ne s'applique pas). **Hybride** : une entreprise qui VEND des cours B2C (EadBox/Hotmart) ET qui a besoin de former des collaborateurs en B2B (Studeia) — utiliser les deux fait sens. ## Voir aussi - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) - [Cas d'usage : Certification professionnelle](/use-cases/professional-certification) - [Cas d'usage : Formation corporate](/use-cases/corporate-training) ## FAQ **Q: Quelle est la différence entre Studeia, EadBox et EadPlataforma ?** EadBox et EadPlataforma se concentrent sur les **infopreneurs B2C** (vendre des cours en ligne directement au consommateur — affiliés, checkout, passerelle de paiement intégrée). Studeia se concentre sur le **B2B institutionnel** (école, lycée, université, formation & développement corporate — multi-tenant, SSO/SCIM, tuteur IA, gradebook professionnel, LTI). Cas d'usage différents : EadBox pour les infocours de productivité ou de langues. Studeia pour un établissement d'enseignement qui veut une solution e-learning complète avec IA. **Q: Studeia dispose-t-il d'un checkout/système d'affiliés/passerelle de paiement intégrée ?** Pour le B2B institutionnel : intégration Stripe et Asaas (PIX/boleto brésilien). Pour le B2C avec affiliés : NON, nous n'avons pas de système natif d'affiliés/checkout à la manière de Hotmart/Eduzz. Ceux qui en ont besoin utilisent EadBox/EadPlataforma. Ceux qui vendent des cours B2B (institutionnel) ou utilisent Studeia en interne : Stripe+Asaas est suffisant. **Q: Quelle est la solution la moins chère pour 100 apprenants ?** EadPlataforma Profissional : R$397/mois (catalogue propre). EadBox Pro : R$197/mois (apprenants illimités, frais de transaction 4,9 %). Studeia Escala : R$1.500/mois (100 apprenants, IA incluse). Studeia est plus cher mais inclut : tuteur IA réel, gradebook pondéré avec rubriques, SSO Enterprise, LTI, mobile B2B white-label, analytics psychométriques. EadBox/EadPlataforma se concentrent sur la diffusion de cours + la facturation — Studeia se concentre sur ENSEIGNER + mesurer. **Q: EadBox/EadPlataforma disposent-ils d'une IA ?** EadBox a lancé « IA Pro » en 2024 (résumé de cours, génération de quiz — basique, basé sur OpenAI). EadPlataforma propose la génération de quiz via IA. Les deux sont limités par rapport à Studeia (multi-agent, RAG par tenant, fallback Claude/GPT/Grok/Gemini, détection de misconceptions, agent superviseur). Pour un infocours simple : l'IA basique d'EadBox est suffisante. Pour un e-learning académique sérieux : Studeia. --- # [fr-FR (AI-translated)] Studeia vs Edmodo (abandonné) — alternatives en 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-edmodo Locale: fr-FR Section: comparisons Updated: 2026-05-24 **Short answer:** Edmodo a été abandonné le 22 sept. 2022 (NetDragon). Principales alternatives au Brésil : (1) Google Classroom — gratuit, idéal avec Google Workspace ; (2) Microsoft Teams for Education — gratuit avec MS 365 ; (3) Studeia — R$250–1.500/mois, e-learning complet avec tuteur IA, gamification, portail parents avec IA narrative, LGPD natif et gradebook structuré. Pour les écoles K-12 brésiliennes souhaitant plus que l'essentiel, Studeia + Google Classroom est la combinaison recommandée. ## Contexte : Edmodo abandonné **Annonce** : juillet 2022 **Fermeture** : 22 septembre 2022 **Cause** : NetDragon (propriétaire depuis 2018) a décidé de mettre fin à l'exploitation mondiale, en se concentrant sur d'autres produits éducatifs (101 Education PLC). Edmodo comptait ~100M d'utilisateurs avant sa fermeture, principalement des écoles K-12 et quelques universités. Le Brésil disposait d'une base significative, notamment dans les réseaux scolaires des États et les petites écoles privées. ## Ce que Studeia offre (vs ce qu'Edmodo proposait) | Fonctionnalité Edmodo | Équivalent dans Studeia | |---|---| | Fil social école-parents-élève | Forums + Annonces + portail parents avec narration IA | | Quiz simples | Moteur de quiz avec 8+ types + analyses psychométriques | | Partage de ressources | Médiathèque avec dossiers + partage + gestion des versions | | Application mobile | App Expo native (Android publié, iOS feuille de route) | | Badges (Edmodo Snapshot) | Open Badges 3.0 + classements + concours + boutique de récompenses | | Calendrier | Calendrier avec synchronisation Google Calendar/Outlook | | Groupes de classe | ClassGroup avec forums/annonces scopés | | Intégration Google | Synchronisation Google Drive + SSO OIDC + fournisseur Meet | **Fonctionnalités supplémentaires qu'Edmodo n'avait PAS :** - Tuteur IA multi-agent (Claude/GPT/Grok/Gemini avec RAG par tenant) - Gradebook structuré (catégories + rubriques + pondérations) - Conformité LGPD native (Brésil) - White-label complet (Enterprise) - LTI 1.3 (intégration avec d'autres LMS) - SSO Enterprise (SAML/OIDC/SCIM) - API publique pour les intégrations ## Comparatif : 3 alternatives post-Edmodo | Aspect | Studeia | Google Classroom | MS Teams for Education | |---|---|---|---| | **Prix K-12** | R$250-1.500/mois | Gratuit (avec Workspace Edu Fund.) | Gratuit (avec A1) | | **Structure des cours** | Course→Module→Lesson | Classe → devoirs (à plat) | Équipes → canaux | | **Gradebook** | Catégories + pondérations + rubriques | Notes simples | Analyses basiques | | **Moteur de quiz** | 8+ types + analyses psychométriques | Google Forms basique | Forms basique | | **Tuteur IA** | Multi-agent natif | Gemini (basique) | Copilot for Education (basique) | | **Gamification** | XP+badges+classements+concours | NON | NON | | **Portail parents** | Robuste + narration IA | Limité (e-mail tuteur) | Limité | | **Mobile** | App native white-label | App Classroom | App Teams | | **LGPD** | Native | RGPD via DPA | RGPD via DPA | | **White-label** | Complet (Enterprise) | NON | NON | | **LTI 1.3** | Fournisseur d'outil | NON | NON | ## Quand choisir chaque alternative ### Google Classroom ✅ École K-12 qui paie déjà Google Workspace for Education Fundamentals (gratuit) ✅ Focus sur la gestion basique (publier des devoirs, attribuer une note simple) ✅ Pas besoin de gamification/badges/analyses ✅ Pas besoin d'un vrai tuteur IA ✅ Accepte la marque Google toujours présente ### MS Teams for Education ✅ École K-12 qui paie déjà Microsoft 365 A1 (gratuit) ✅ Écosystème Microsoft (Word, Excel, PowerPoint) ✅ Focus sur la collaboration en équipe ✅ Réunions via Teams natives ### Studeia ✅ École/établissement de prépa/formation corporate qui veut plus que le basique ✅ Veut un vrai tuteur IA pour répondre aux questions des élèves ✅ Veut de la gamification pour engager les élèves ✅ Veut un portail parents robuste avec narration IA ✅ Veut sa propre marque (white-label) ✅ Veut la conformité LGPD native brésilienne ✅ Veut une structure curriculaire (Course→Module→Lesson) ## Migration sauvegarde Edmodo → Studeia Si vous avez encore le fichier .zip de sauvegarde qu'Edmodo avait permis d'exporter : ### Parcours recommandé 1. **Cours/contenu** : pas d'import automatisé. Téléversement des fichiers individuels via la Médiathèque de Studeia. 2. **Élèves** : CSV importable via `/institution/users` avec les champs `name, email, role, classGroupIds, sendInvite`. 3. **Quiz** : recréer via l'éditeur de quiz ou l'importateur de banque de questions (CSV/GIFT). 4. **Notes historiques** : importer comme GradeItem manuel + Note via API (sans rétroactivité pour les calculs du gradebook). 5. **Communication** : pas d'import — repartir de zéro dans Forums/Annonces. ### Mise en place en 1 semaine | Jour | Tâche | |---|---| | 1 | Plan Demo d'essai, configurer le branding + les couleurs de l'école | | 2 | Importer les élèves via CSV | | 3-4 | Recréer 5 à 10 cours prioritaires (modules + leçons) | | 5 | Configurer la gamification (l'agent IA crée les badges automatiquement) | | 6 | Lier les parents (GuardianLink) — vérification SMS | | 7 | Former 2 à 3 enseignants pilotes | ## Autres alternatives K-12 mentionnées comme « substituts d'Edmodo » | Plateforme | Statut | |---|---| | **Schoology** (PowerSchool) | Existe, mais orientée États-Unis, sans support PT-BR robuste | | **Canvas** (Instructure) | Orientée enseignement supérieur, offre K-12 limitée | | **Brightspace** (D2L) | Universitaire, complexe pour le K-12 | | **Moodle** | Auto-hébergé, nécessite un admin IT, sans focus K-12 natif | | **Sambatech / Eduplay** | Brésiliennes, axées sur la vidéo/formation corporate | | **Eadbox / EadPlataforma** | Brésiliennes, principalement formation corporate en ligne | ## Verdict Edmodo a laissé un vide dans le K-12. **Google Classroom** est devenu le choix gratuit par défaut (surtout là où Google Workspace était déjà en place). Pour les écoles qui veulent plus que le basique ou qui ne souhaitent pas dépendre de Google : **Studeia** comble ce vide avec un tuteur IA, de la gamification, un gradebook structuré et un portail parents robuste. ## Voir aussi - [Studeia vs Google Classroom](/comparisons/studeia-vs-google-classroom) - [Use case: Escola fundamental BNCC](/use-cases/primary-school-bncc) ## FAQ **Q: Edmodo existe-t-il encore en 2026 ?** Non. Edmodo a été abandonné le 22 septembre 2022 (annoncé en juillet 2022). NetDragon, propriétaire d'Edmodo, a fermé le service à l'échelle mondiale. Les écoles qui utilisaient Edmodo ont dû migrer vers des alternatives. Les trois options les plus courantes au Brésil : Google Classroom (gratuit pour les écoles K-12), Microsoft Teams for Education (gratuit), ou un LMS payant comme Studeia. **Q: Studeia remplace-t-il bien Edmodo ?** Oui, avec des avantages supplémentaires. Edmodo était fort sur : (1) la communication école-parents-élève via un fil social, (2) les quiz simples, (3) le partage de ressources, (4) l'application mobile. Studeia possède tout cela en plus d'un portail parents avec narration IA, un gradebook structuré, un tuteur IA, de la gamification (XP/badges), 9 thèmes visuels, le white-label, et la conformité LGPD native. Différence clé : Studeia est payant (R$250-1.500/mois B2B) alors qu'Edmodo était gratuit. **Q: Quelle alternative gratuite à Edmodo ?** Google Classroom (si l'école paie déjà Google Workspace for Education Fundamentals — gratuit pour le K-12). Il propose une communication basique, la gestion des devoirs, l'intégration Drive/Meet. Limitations : pas de gradebook structuré, pas de rubriques, pas de gamification, pas de portail parents robuste. Pour des besoins basiques cela fonctionne ; pour un enseignement en ligne sérieux avec un programme BNCC + un suivi détaillé des parents : Studeia. **Q: Comment migrer le contenu d'Edmodo (si j'ai encore une sauvegarde) ?** Edmodo a permis l'export avant sa fermeture. Si vous avez le fichier .zip de sauvegarde : les fichiers peuvent être téléversés via la médiathèque de Studeia (POST /api/institution/media), les quiz doivent être recréés manuellement ou via l'import de banque de questions (CSV/GIFT). Les élèves via CSV. Pas de migration automatisée — Edmodo n'utilisait pas IMS CC. --- # [fr-FR (AI-translated)] Studeia vs Google Classroom : comparatif 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-google-classroom Locale: fr-FR Section: comparisons Updated: 2026-05-23 **Short answer:** Google Classroom offre la gestion de classes gratuite intégrée à Google Workspace — idéal pour les écoles K-12 déjà sous Docs, Drive et Meet. Studeia est un LMS B2B complet avec tuteur IA, gamification OB 3.0, quiz analytics, gradebook avancé, LTI et SCIM. Pour la formation en ligne structurée et le T&D entreprise : Studeia s'impose. Pour les écoles K-12 sous Google Workspace : Classroom + Studeia ensemble — Classroom pour le socle, Studeia pour les parcours structurés. ## Comparatif côte à côte | Aspect | Studeia | Google Classroom | |---|---|---| | **Modèle** | LMS B2B complet | Gestion de classes + devoirs | | **Prix** | R$250-1.500/mois (plans) | Inclus dans Google Workspace | | **Support** | Équipe Studeia | Support Google + communauté | | **Tuteur IA** | Multi-agent Claude/GPT/Grok/Gemini | Gemini intégré (basique) | | **Gradebook** | Catégories + pondérations + rubriques + intégrité | Notes simples (sans catégorie/pondération/rubrique) | | **Moteur de quiz** | 8 types + analytics psychométriques | Google Forms (basique) | | **Gamification** | XP + badges OB 3.0 + classements + concours | NON disponible | | **Forums** | Fils + réponses + pièces jointes | NON disponible (seulement commentaires sur posts) | | **Messages privés** | Oui | E-mail (Gmail) | | **Cours en direct** | BBB+Zoom+Teams+Meet adapter | Google Meet intégré | | **Mobile** | App Expo native en marque blanche | App Classroom officielle | | **LTI 1.3** | Tool provider | NON (Google ne le propose pas) | | **SSO Enterprise** | SAML+OIDC+SCIM | Compte Google uniquement | | **Marque blanche** | Totale (Enterprise) | NON (marque Google toujours présente) | | **API publique** | 64+ endpoints scoped | Classroom API basique | | **Multi-tenant** | Oui, isolé par institution | Compte Google = Workspace | | **Contenu hors ligne** | Roadmap | Limité | | **Certificats** | OB 3.0 + personnalisé | NON | | **RGPD** | Natif (conforme LGPD) | RGPD via Google DPA | ## Quand choisir Google Classroom ✅ Établissement K-12 qui paie déjà Google Workspace for Education ✅ Les enseignants utilisent déjà Google Docs/Drive/Meet ✅ Besoin BASIQUE d'un LMS (publier des devoirs, corriger, attribuer une note simple) ✅ Souhaite un outil gratuit sans licence supplémentaire ✅ Cours court/ponctuel (pas un curriculum structuré) ✅ Sans besoin de gamification/badges/analytics ## Quand choisir Studeia ✅ Formation en ligne sérieuse (curriculum structuré, modules/cours multiples) ✅ Préparation aux concours (simulations, analytics, tuteur IA) ✅ L&D en entreprise (SSO entreprise, certificats, suivi de conformité) ✅ K-12 qui veut plus que le basique (gradebook pondéré, rubriques, gamification, portail parents avec IA) ✅ Université (LTI, gradebook avancé, rubriques) ✅ Souhaite une vraie marque blanche (sans la marque Google) ✅ Besoin d'une application mobile B2B avec marque propre ## Scénarios hybrides Courant : un établissement utilise Classroom pour la gestion opérationnelle (devoirs, rappels, communication avec les parents via Gmail) + Studeia pour les cours formels (curriculum, simulations, gamification, rapports parents avec IA). ### Studeia s'intègre avec Google Workspace - **Google Drive sync** — bibliothèque de médias bidirectionnelle - **Google Calendar** — les cours en direct se synchronisent avec le calendrier de l'apprenant - **Google Meet** — fournisseur natif de cours en direct - **Google SSO via OIDC** — connexion avec un compte Google - Single Sign-On automatique entre Studeia et Classroom (même session Google) ## Limites de Classroom pour la formation en ligne Pourquoi Classroom ne remplace pas un LMS complet : 1. **Sans gradebook structuré** : les notes sont par devoir, sans catégories/pondérations/rubriques. Calculer une moyenne pondérée est manuel. 2. **Sans moteur de quiz** : dépend de Google Forms (limité en types, sans psychométriques, sans banque de questions). 3. **Sans hiérarchie de cours** : tout est une « Classe ». Il n'y a pas de concept Cours > Module > Leçon. 4. **Sans publication planifiée** : tout est publié immédiatement. 5. **Sans RAG / tuteur IA dédié** : Gemini dans Classroom est basique comparé au tuteur IA multi-agent de Studeia. 6. **Sans analytics** : on peut voir qui a rendu un devoir, mais pas d'analyse psychométrique ou de prédiction. 7. **Sans gamification** : zéro XP, badges, classements. 8. **Sans certificats** : ne génère pas de credentials vérifiables. 9. **Sans LTI** : ne s'intègre pas avec d'autres outils éducatifs. 10. **Sans communication structurée** : commentaires sur les posts, mais pas de forum avec fils et recherche. ## Migration Classroom → Studeia ### Possible - ✅ Apprenants : export Workspace + import via CSV - ✅ Contenus : téléchargement depuis Drive + re-upload dans Studeia - ✅ Notes : export CSV ### NON supporté nativement - ❌ Contenu structuré (Classroom n'a pas de cours structurés — recréer le curriculum) - ❌ Historiques de commentaires (pertes) - ❌ Entrées de calendrier (à recréer) ## Verdict honnête **Classroom reste imbattable pour** : - Les établissements K-12 qui paient déjà Workspace + veulent un outil gratuit pour la gestion basique - Les cours ponctuels/courts sans besoin de structure - L'intégration maximale avec Google Docs/Drive/Meet (workflow Google natif) **Studeia l'emporte pour** : - La formation en ligne structurée (cours formels, modules, séquençage) - La préparation aux concours et examens - La L&D en entreprise - Tout cas où la gamification, le tuteur IA, les analytics, les certificats ou LTI sont nécessaires **Stratégie la plus courante** : les établissements K-12 utilisent LES DEUX. Classroom pour l'opérationnel au quotidien, Studeia pour les cours curriculaires et la gamification. ## Voir aussi - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) - [Studeia vs Canvas](/comparisons/studeia-vs-canvas) - [Intégration Google Workspace](/integrations/google-workspace) ## FAQ **Q: Google Classroom est-il un vrai LMS ?** Partiellement. Google Classroom est un système de gestion de classes (LMS lite) gratuit intégré à Google Workspace for Education. Excellent pour les établissements qui utilisent déjà Google (Docs, Drive, Meet). Mais il manque des fonctionnalités d'un LMS complet : gradebook structuré avec pondérations et rubriques, moteur de quiz robuste, gamification, tuteur IA, analytics psychométriques, communication par forum, mobile B2B en marque blanche, LTI, SCIM. Pour une formation en ligne sérieuse : Classroom est insuffisant. **Q: Peut-on utiliser les deux ensemble ?** Oui, c'est courant. Classroom pour les devoirs/communication basique + intégration Google Drive ; Studeia pour les cours structurés, le tuteur IA, le gradebook avancé, la gamification. Studeia s'intègre avec Google Drive (sync de médias) + Google Calendar + Google Meet, en complément de Classroom. **Q: Google Classroom est-il disponible pour les entreprises ?** Oui, mais avec des limitations. Workspace Business inclut Classroom basique. Workspace Enterprise propose des fonctionnalités supplémentaires. Mais pour la formation & le développement (L&D) en entreprise, Classroom est limité — il manque le suivi de conformité, les certificats, LTI, SSO enterprise hors de l'écosystème Google. Studeia est plus adapté pour la L&D. **Q: Coûts : Classroom est gratuit, Studeia est payant ?** Classroom : gratuit si votre établissement utilise déjà Google Workspace for Education Fundamentals (gratuit). Workspace payant : USD $3-5/élève/mois (sans Classroom différencié). Studeia : R$250-1.500/mois pour 10-100 apprenants. Pour les établissements qui paient déjà Workspace : Classroom basique semble « gratuit ». Mais le TCO réel prend en compte les fonctionnalités — Classroom sans extras vs Studeia avec tout inclus. --- # [fr-FR (AI-translated)] Studeia vs Moodle : comparatif honnête 2026 URL: https://docs.studeia.com/comparisons/studeia-vs-moodle Locale: fr-FR Section: comparisons Updated: 2026-05-23 **Short answer:** Studeia est un SaaS B2B brésilien avec IA, gamification, gradebook psychométrique, white-label et mobile B2B intégré (R$250-1.500/mois pour 10-100 apprenants). Moodle est open-source, gratuit mais nécessite hébergement propre, administrateur dédié et plugins tiers pour IA/gamification/mobile, avec un écosystème mature (H5P, SCORM, plugins). Pour les écoles et formations T&D petites à moyennes au Brésil : Studeia gagne généralement en TCO sur 3 ans. Pour les grandes universités déjà sur Moodle : complémentarité via LTI. ## Comparatif côte à côte | Aspect | Studeia | Moodle | |---|---|---| | **Modèle** | SaaS géré | Open-source self-hosted | | **Prix** | R$0-1.500/mois (plans) | Gratuit + hébergement + admin | | **Support** | Équipe Studeia (PT/EN) | Communauté + Moodle Partners | | **Origine** | Brésil 2025 | Australie 2002 | | **Hébergement** | Studeia (Brésil, LGPD) | Vous (n'importe où) | | **Tuteur IA** | Intégré (Claude/GPT/Grok/Gemini multi-agent) | Via plugins (Moodle 4.5+ dispose de moodle-ai basique) | | **RAG par cours** | Intégré (Voyage AI + par tenant) | Plugin | | **Gamification** | Intégrée (XP, badges OB 3.0, classements, concours, boutique) | Plugin (Level Up!, Game) | | **Mobile B2B** | App Expo native (Android publié) | Moodle Mobile (officiel) | | **White-label** | Total (Enterprise) | Possible via thème + branding | | **SSO Enterprise** | SAML+OIDC+SCIM natif | Plugins (auth_oidc, auth_saml2, scim) | | **Messagerie** | Forums + DM + annonces + e-mail natif | Oui | | **Intégrité quiz** | Changement d'onglet, anomalies temporelles, signalements en ligne | Intégration Safe Exam Browser (SEB) | | **Analytics psychométriques** | Cronbach, point-bisériale, analyse des distracteurs | Plugin (Statistics) | | **Gradebook** | Catégories + rubriques + pondérations | Oui (plus complexe) | | **Cours en direct** | BBB+Zoom+Teams+Meet (adaptateur unifié) | BBB natif, autres via plugin | | **LGPD/RGPD** | Natif (Brésil + Europe) | Plugins + manuel | | **i18n** | 4 langues intégrées (pt/en/es/fr) | 100+ langues (communauté) | | **LTI 1.3** | Fournisseur d'outil | Consommateur + fournisseur d'outil | | **API publique** | 64+ endpoints avec scopes | Web Services REST/SOAP | | **Personnalisation du code** | Limitée (API) | Totale (open source) | | **Plugins tiers** | Pas d'écosystème | >1500 plugins actifs | | **Labels éducatifs** | En attente | MEC, ISO | ## Quand choisir Studeia ✅ Vous êtes une école/centre de préparation/formation T&D corporate au Brésil avec 1-500 apprenants ✅ Vous souhaitez une conformité LGPD native (données au Brésil, DPA enterprise) ✅ Vous voulez un vrai tuteur IA (multi-agent, RAG par tenant), pas un plugin générique ✅ Vous voulez un support en portugais ✅ Vous voulez une gamification moderne native (XP, badges OB 3.0) ✅ Vous ne voulez pas gérer l'hébergement/les mises à jour/les sauvegardes ✅ Vous voulez un mobile B2B fonctionnel (App Store/Play Store propre possible) ✅ TCO sur 3 ans prévisible (coût fixe + IA proportionnel à l'usage) ## Quand choisir Moodle ✅ Vous êtes une université publique avec Moodle en production + plugins personnalisés ✅ Vous avez une équipe IT dédiée (administrateur Moodle à temps plein) ✅ Vous avez besoin de SCORM 2004 + H5P + IMS CP complet (compatibilité legacy) ✅ Vous avez besoin de labels MEC/ISO spécifiques ✅ Vous souhaitez un contrôle total du code (modifications importantes) ✅ Vous avez >5000 apprenants et le coût fixe de licence importe plus que les fonctionnalités modernes ✅ Vous voulez éviter le lock-in fournisseur (open-source = sortie fluide) ## Coûts réels — TCO 3 ans ### École primaire 200 apprenants | Poste | Moodle | Studeia (Escala) | |---|---|---| | Licence | R$0 | R$54.000 (R$1.500 × 36) | | Hébergement | R$3.600 (~R$100/mois) | Inclus | | Admin partiel (10h/mois) | R$36.000 (R$1k/mois consulting) | R$0 | | Plugins commerciaux | R$7.200 (R$200/mois IA + gamif + mobile) | R$0 | | Personnalisation initiale | R$10.000 (one-shot) | R$0 | | **TOTAL 3 ans** | **R$56.800** | **R$54.000** | Studeia inclut déjà l'IA (R$0-2k de coût IA proportionnel à l'usage) et le mobile. ### Centre de préparation ENEM 800 apprenants | Poste | Moodle | Studeia (Enterprise) | |---|---|---| | Licence | R$0 | R$108.000 (négocier R$3k/mois) | | Hébergement robuste | R$18.000 (R$500/mois load balancer + RDS) | Inclus | | DevOps dédié (20h/mois) | R$108.000 (R$3k/mois) | R$0 | | Plugins + tuteur IA + analytics | R$36.000 | R$0 | | **TOTAL 3 ans** | **R$162.000** | **R$108.000** | Pour >500 apprenants, Studeia Enterprise tend à être 30-50% moins cher. ## Migration Moodle → Studeia ### Possible - ✅ Contenu : import IMS CC v1.x (modules, cours, ressources, quizzes QTI 1.2) - ✅ Apprenants : import CSV ou provisioning SCIM - ✅ Notes : import CSV - ✅ Structure des cours - ✅ LTI : Studeia comme outil externe jusqu'à la migration complète ### NON supporté nativement - ❌ Packages de contenu H5P (à recréer en tant que subtypes interactifs) - ❌ SCORM 2004 (à recréer en cours vidéo + quizzes natifs) - ❌ Plugins personnalisés (sans équivalent) - ❌ Templates XML personnalisés Moodle - ❌ Activités Workshop (plus complexe dans Moodle) ### Parcours recommandé 1. Mois 1 : Essai avec 2 cours pilotes sur Studeia (plan Demo) 2. Mois 2-3 : Migrer les contenus pilotes via IMS CC + ajustements manuels 3. Mois 4 : Migrer les apprenants via SCIM 4. Mois 5-6 : Valider les fonctionnalités (gradebook, rapports parents, tuteur IA) 5. Mois 7+ : Migration progressive des cours restants 6. Mois 12+ : Décider d'abandonner Moodle ou de le maintenir en parallèle (cours legacy via LTI) ## Verdict honnête **Pour 80% des établissements brésiliens de petite et moyenne taille (1-500 apprenants)** : Studeia gagne en TCO, fonctionnalités modernes, support en portugais et délai de mise en valeur (déploiement = 1 jour vs 30 jours pour Moodle géré). **Pour 15% (grandes universités, déjà sur Moodle depuis des années)** : Moodle reste la meilleure option par inertie + écosystème. Studeia en complément pour les nouveaux cours. **Pour 5% (entreprises ne pouvant pas avoir leurs données dans un SaaS)** : Moodle self-hosted on-premise. Studeia ne propose pas encore de déploiement on-premise. ## Voir aussi - [Studeia vs Canvas](/comparisons/studeia-vs-canvas) - [Studeia vs Google Classroom](/comparisons/studeia-vs-google-classroom) - [Cas d'usage : Centre de préparation ENEM](/use-cases/enem-prep-cursinho) - [Vue d'ensemble de la plateforme](/platform/overview) ## FAQ **Q: Studeia remplace-t-il Moodle ?** Cela dépend du contexte. Pour les établissements brésiliens de petite/moyenne taille (1-500 apprenants) qui souhaitent un SaaS géré, une IA intégrée, un support en portugais et la conformité LGPD native : Studeia remplace effectivement Moodle et élimine l'hébergement et la maintenance. Pour les grandes universités avec Moodle déjà en production et un écosystème de plugins personnalisés : une migration partielle est plus judicieuse (Studeia en complément pour les nouveaux cours via LTI). **Q: Lequel est le moins cher sur 3 ans (TCO) ?** Moodle : licence GRATUITE + hébergement ~$50-300/mois + administrateur partiel (~R$3-8k/mois) + plugins payants (~R$200/mois) + personnalisation (consulting) = R$120k-200k sur 3 ans pour 500 apprenants. Studeia Crescimento (50 apprenants R$1.000/mois) ou Escala (100 apprenants R$1.500/mois) ou Enterprise : R$36k-50k sur 3 ans. Pour >500 apprenants : Studeia Enterprise (sur devis) est généralement 30-50% moins cher que Moodle géré. **Q: Moodle a-t-il plus de fonctionnalités que Studeia ?** Moodle dispose de plus d'EXTENSIONS (écosystème de plugins tiers). Studeia possède davantage de fonctionnalités NATIVES modernes : tuteur IA multi-agent, gamification native, gradebook avec psychométrie, mobile B2B Expo, SSO/SCIM enterprise out-of-box, white-label réel. Moodle nécessite des plugins (gratuits ou payants) pour la plupart de ces fonctionnalités. **Q: Moodle est-il meilleur que Studeia sur certains points ?** Oui, sur plusieurs points : (1) Écosystème H5P/SCORM/IMS beaucoup plus mature. (2) Plugins tiers (>1500 actifs). (3) Open-source = contrôle total et personnalisation du code. (4) Maturité institutionnelle (universités, gouvernement, EAD MEC). (5) Conformité éducative brésilienne avec label MEC (Studeia ne l'a pas encore). (6) Communauté mondiale gigantesque. **Q: Puis-je migrer de Moodle vers Studeia ?** Oui, partiellement. L'import IMS Common Cartridge (POST /api/institution/courses/import) importe les modules, cours, ressources de base et quizzes QTI 1.2. Les packages de contenu H5P ne sont PAS supportés nativement (à recréer en tant que subtypes interactifs Studeia). SCORM 2004 n'est PAS supporté. Apprenants : import via CSV en masse ou SCIM. --- # [fr-FR (AI-translated)] Tuteur IA : pipeline multi-agent URL: https://docs.studeia.com/features/ai-tutor/overview Locale: fr-FR Section: features Updated: 2026-05-23 **Short answer:** Le tuteur IA de Studeia exécute 6 agents en pipeline : Orchestrator coordonne → StudentModelService charge le contexte de l'élève → RetrievalAgent effectue la recherche RAG → PedagogicalAgent choisit la stratégie → le LLM répond (avec fallback automatique) → EvaluationAgent + ContentAgent + SupervisorAgent s'exécutent en arrière-plan. 3 agents sont en TypeScript pur (zéro coût LLM), 3 sont des agents Haiku background (~$0.003 au total). Personnalisation réelle basée sur ConceptMastery bayésien. ## Pipeline détaillé ### Pré-LLM (synchrone, zéro coût LLM) 1. **StudentModelService.getSnapshot(userId, courseId)** - Charge ConceptMastery (distribution Beta par concept) - Charge les misconceptions actives/en résolution (avec piste de preuves) - Charge EpisodicMemory (ce qui a fonctionné auparavant) - Charge quizContext (avgScore, passRate, totalAttempts, weakAreas) - Charge l'historique ChatSession (fenêtre glissante de 10 messages) 2. **RetrievalAgent.retrieve(query, studentModel)** - Reformule la requête en utilisant le contexte (remplace « ça », « cela » par les concepts actuels) - Recherche pgvector avec filtres (tenantId, courseId) - Boost par zones faibles aux quiz (`quizWeakAreas` du studentModel) - Top-K avec rerankage sémantique 3. **PedagogicalAgent.select(studentModel, query)** - Évalue la maîtrise moyenne + la maîtrise spécifique à la requête - Applique des ajustements (divergence chat-quiz, âge, style d'apprentissage) - Retourne la stratégie + l'ajout au system prompt 4. **buildEnrichedPrompt(query, studentModel, ragChunks, strategy, misconceptions)** - Construit le system prompt avec : - Stratégie pédagogique sélectionnée - Contexte RAG (top-5 chunks avec attribution de source) - Misconceptions actives (avec instructions pour les aborder) - Tentatives de quiz récentes (mémoire inter-tours) - Contexte de déclenchement de quiz inline (si un quiz récent a eu lieu) ### LLM principal (streaming, SSE) `router.stream(taskType: "chat_tutor", messages, options)` résout le provider via TenantTaskModelConfig : - Claude (primary) → OpenAI → xAI Grok → Google Gemini (chaîne de fallback) - Circuit breaker par provider (état Redis) - Middleware de comptage : limite de débit + vérification des crédits + calculateur de coût - Streaming via Server-Sent Events vers le client Le LLM peut émettre des appels d'outils spéciaux : - `[INLINE_QUIZ]{...}[/INLINE_QUIZ]` — quiz interactif rendu dans le chat - `present_quiz` tool call — format Vercel AI SDK ### Post-LLM (arrière-plan via after(), fire-and-forget) 5. **EvaluationAgent.evaluate(turn, studentModel)** — Haiku, ~$0.001 - Classifie la compréhension : correct | partial | incorrect | unclear - Détecte StudentMisconception avec : - source: "chat" - sourceSessionId - contextSnippet (max 500 caractères) - concepts[] (mappés à ConceptMastery) - Met à jour ConceptMastery (mise à jour bayésienne via beta(alpha+success, beta+failure)) - Appelle MisconceptionResolutionService.checkAndTransition (machine à états) 6. **ContentAgent.preGenerate(studentModel, conceptId)** — Haiku, ~$0.001 - Génère un exercice de suivi basé sur les concepts faibles - Stocke dans Redis (TTL 30min) pour servir lors du prochain tour - Réduit la latence perçue par l'élève 7. **SessionSummarizer** (tous les 10 tours) — Haiku, ~$0.001 - Résume l'historique long - Remplace les anciens messages dans la fenêtre glissante - Préserve les insights pédagogiques pertinents 8. **SupervisorAgent.run(turn, courseContext)** — Haiku, ~$0.001 - Classifie la sévérité (5 niveaux) + catégorie (8 types) - Crée un AiSupervisorIncident si severity != "none" - Applique les strikes / quarantaine / cooldown de sécurité selon les règles ## Configuration par l'administrateur ### TenantTaskModelConfig L'administrateur choisit le provider+modèle par type de tâche : ``` chat_tutor → Claude Sonnet 4.6 (ou GPT-4o, ou Grok-3, etc.) chat_evaluation → Claude Haiku chat_summarization → Claude Haiku chat_supervisor → Claude Haiku content_generation → Claude Haiku course_review → Claude Sonnet gamification_agent → Claude Sonnet course_agent → Claude Sonnet ``` ### PedagogicalConfig Configurabilité pédagogique par tenant : - masteryThresholds : seuils pour changer de stratégie (défaut 0.3, 0.5, 0.7, 0.9) - domainOverrides : ajustement par domaine (ex : les mathématiques utilisent un scaffolding plus agressif) - ageOverrides : ajustement par tranche d'âge (enfant = direct_instruction plus fréquent) - learningStyleOverrides : visuel, auditif, kinesthésique ## Personnalisation du template de prompt L'administrateur institutionnel peut modifier le system prompt du tuteur via PromptTemplate (en base de données) : - Par taskType (chat_tutor) - Par provider (Anthropic, OpenAI, Google, xAI — variantes optimisées) - Par locale (pt-BR, en-US, es-ES, fr-FR) - Par tenant (ou null = global) - Par cours (override par cours) ## Limitations techniques - **Latence du premier token** : 800-1500ms (incluant le pipeline pré-LLM) - **Latence totale du tour** : 2-8s pour une réponse moyenne (~300 mots) - **Fenêtre de contexte** : limitée par le provider (Claude Sonnet 4.6 = 200K, GPT-4o = 128K) - **Langues** : le tuteur répond dans la langue de l'élève mais en interne le pipeline est bilingue (en/pt) - **Images** : le tuteur accepte des images en entrée (multimodal Claude/GPT/Gemini) mais le RAG est text-only - **Voix** : non implémenté (roadmap) ## Voir aussi - [Tuteur IA : vue exécutive](/platform/ai-tutor) - [RAG Ingestion](/features/ai-tutor/rag-ingestion) - [Agent Superviseur](/features/ai-tutor/safety-supervisor) ## FAQ **Q: Combien d'agents IA le tuteur utilise-t-il ?** 6 agents actifs : Orchestrator (TypeScript pur), RetrievalAgent (TypeScript pur), PedagogicalAgent (TypeScript pur), LLM principal (Claude/GPT/Grok/Gemini avec fallback), EvaluationAgent (Haiku background), ContentAgent (Haiku background), SupervisorAgent (Haiku background). 3 sont déterministes (sans coût LLM), 3 sont des agents background fire-and-forget (coût ~$0.003 au total par tour). **Q: Quel est le coût d'un tour complet du tuteur ?** Généralement $0.005-$0.05 par tour complet. Détail : LLM principal (Sonnet) $0.005-$0.04 + EvaluationAgent (Haiku) $0.001 + ContentAgent (Haiku) $0.001 + SupervisorAgent (Haiku) $0.001. Les messages courts sur des concepts simples peuvent coûter $0.001 (Haiku uniquement). **Q: Puis-je désactiver le tuteur IA pour un cours spécifique ?** Oui. Course.aiTutorEnabled (booléen, défaut true). Bascule admin institutionnel sur /institution/courses/[id]/settings. La barre latérale de l'élève et le sous-menu du cours masquent « Chat Tutor » lorsqu'il est désactivé. --- # [fr-FR (AI-translated)] RAG Ingestion : tuteur IA avec le contenu du cours URL: https://docs.studeia.com/features/ai-tutor/rag-ingestion Locale: fr-FR Section: features Updated: 2026-05-23 **Short answer:** La RAG Ingestion dans Studeia permet au tuteur IA de citer le contenu de votre cours. POST /api/institution/courses/[id]/rag-ingest extrait le texte des leçons (slides, vidéos avec transcription, PDFs, quizzes), les découpe en chunks de 800 tokens avec un chevauchement de 200, génère des embeddings via Voyage AI (1024 dims, fallback OpenAI) et les stocke avec un filtre tenant+course. Modes full ou incremental. autoSyncRag=true réingère automatiquement lors de la modification des leçons. ## Comment ça fonctionne ``` POST /api/institution/courses/[courseId]/rag-ingest Body: { "mode": "full" | "incremental" } ↓ 1. Liste les leçons publiées du cours 2. Pour chaque leçon, extrait le texte par type : - rich_text → suppression HTML - slides → jointure des éléments texte + notes du présentateur - quiz → jointure question + explication par question - pdf → document-extractor (PyPDF + Adobe extract fallback) - video → LiveClassTranscription.transcriptionText (si approuvée) - assignment → instructions 3. Chunking : 800 tokens, 200 de chevauchement, préserve la structure sémantique 4. Embeddings via Voyage AI (1024 dims, fallback OpenAI) 5. Crée ContentBlock + ContentEmbedding avec métadonnées : { source: "course_lesson", courseId, lessonId, lessonTitle, moduleTitle, ingestionId } 6. Statut final dans CourseRagIngestion ``` ## Modes ### `mode: "full"` Supprime TOUS les ContentBlock + ContentEmbedding du cours et réingère tout. Quand l'utiliser : - Première ingestion du cours - Après une réorganisation majeure (modules renommés, leçons réordonnées) - Suspicion d'embeddings corrompus Coût : proportionnel à la taille totale du cours. Typiquement $0.004 pour 30 leçons. ### `mode: "incremental"` Identifie les leçons modifiées après la dernière ingestion (`updatedAt > lastIngestionAt`), supprime uniquement les chunks de ces leçons et les réingère. Quand l'utiliser : - Modifications ponctuelles - Auto-sync (recommandé pour la production) - Ajout de nouvelles leçons Coût : proportionnel au delta. Typiquement $0.0001 par leçon modifiée. ## Auto-sync `Course.autoSyncRag: Boolean @default(false)` Lorsque `true` : - Toute modification de leçon via l'API `/api/institution/courses/[id]/modules/[mid]/lessons/[lid]` déclenche une réingestion incrémentale - S'exécute via Next.js `after()` (ne bloque pas la requête de l'administrateur) - Échec silencieux enregistré dans `CourseRagIngestion.errors` JSON Recommandé pour la production. Maintenez désactivé lors de la configuration initiale du cours pour éviter les embeddings gaspillés. ## Statut et débogage ``` GET /api/institution/courses/[courseId]/rag-ingest Response: { "ingestionId": "uuid", "courseId": "uuid", "mode": "incremental", "status": "completed", // pending | running | completed | failed "startedAt": "2026-05-23T10:00:00Z", "completedAt": "2026-05-23T10:01:34Z", "stats": { "lessonsProcessed": 5, "chunksCreated": 47, "tokensEmbedded": 12450, "costUsd": 0.0006 }, "errors": [] } ``` ## Fournisseur d'embeddings | Fournisseur | Modèle | Dims | Coût/1K tokens | |---|---|---|---| | Voyage AI (principal) | voyage-3 | 1024 | $0.00005 | | OpenAI (fallback) | text-embedding-3-large (avec `dimensions: 1024`) | 1024 | $0.00013 | Fetch direct (AI SDK v3 ne supporte pas le paramètre `dimensions`) : ```ts // Voyage AI fetch("https://api.voyageai.com/v1/embeddings", { body: JSON.stringify({ model: "voyage-3", input: texts, input_type: "document" }) }) ``` ## Retrieval en runtime Durant le chat du tuteur, RetrievalAgent exécute : ```ts const chunks = await retrieve({ query: reformulatedQuery, filters: { tenantId, courseId }, k: 10, tenantOnlyMode: true, // exclut le fallback vers le contenu global boostByWeakAreas: studentModel.quizContext.weakAreas }); ``` `tenantOnlyMode: true` garantit que le tuteur ne cite JAMAIS le contenu d'un autre tenant — même si un contenu similaire existe dans la base de données. ## Supprimer le RAG d'un cours ``` DELETE /api/institution/courses/[courseId]/rag-ingest ``` Supprime tous les ContentBlock + ContentEmbedding + CourseRagIngestion du cours. Utile pour archiver des cours sans occuper pgvector. ## Limitations - **Images** : ne sont pas converties en embeddings. Feuille de route : description automatique via vision LLM avant l'embedding. - **Équations mathématiques** : extraites sous forme de texte de type LaTeX. Le RAG fonctionne mais la qualité dépend du balisage d'origine. - **Vidéos sans transcription** : ne sont pas ingérées. Configurez la transcription automatique dans MediaAsset (Whisper → Google STT) au préalable. - **Taille maximale par cours** : pgvector supporte des millions de vecteurs mais la latence de retrieval augmente. >10K chunks par cours peut devenir lent — envisagez de diviser en sous-cours. ## Voir aussi - [Tutor IA Overview](/features/ai-tutor/overview) - [Media Transcription](/features/cms/media-transcription) ## FAQ **Q: Le tuteur IA cite-t-il le contenu de mon cours ?** Oui, mais vous devez d'abord ingérer le cours dans le RAG. POST /api/institution/courses/[id]/rag-ingest (modes : full | incremental). Le système extrait le texte de toutes les leçons publiées, les découpe en chunks, génère des embeddings via Voyage AI et les stocke avec un filtre par tenantId+courseId. Après cela, toutes les conversations du tuteur relatives au cours citent le bon contenu. **Q: Comment mettre à jour le RAG lorsque je modifie une leçon ?** Définissez Course.autoSyncRag=true. Toute modification de leçon via l'API déclenche une réingestion incrémentale via after() (en arrière-plan, ne bloque pas l'administrateur). Alternativement, déclenchez manuellement : POST /api/institution/courses/[id]/rag-ingest body {mode: 'incremental'}. **Q: Quel est le coût d'ingestion d'un cours ?** Embeddings via Voyage AI : ~$0.00005/1K tokens. Un cours moyen (30 leçons, 50K mots = ~70K tokens) coûte ~$0.004 en embeddings lors de la première ingestion. L'incrémental est proportionnel au delta. Aucun coût récurrent — les embeddings sont stockés dans pgvector. **Q: Quels types de leçons sont ingérés ?** rich_text (suppression HTML), slides (éléments texte + notes du présentateur), quiz (question + explication), pdf (document-extractor : PyPDF→Adobe extract fallback), video (LiveClassTranscription.transcriptionText lorsque disponible), assignment (instructions). Les types external_link et live_class sans transcription ne sont pas ingérés. --- # [fr-FR (AI-translated)] Agent Superviseur : modération IA du chat tuteur URL: https://docs.studeia.com/features/ai-tutor/safety-supervisor Locale: fr-FR Section: features Updated: 2026-05-23 **Short answer:** L'Agent Superviseur IA de Studeia modère le chat tuteur en arrière-plan après chaque tour via Claude Haiku (~$0.001/tour). Il classe en 5 niveaux de sévérité (low/medium/high/critical/safety) et 8 catégories (langage inapproprié, violence, illégal, sexuel, off_topic, harassment, self_harm, jailbreak_attempt). 3 infractions en 7 jours = quarantaine 48h. Self-harm (severity=safety) ne punit JAMAIS — affiche soutien + ressources de crise (3114, SAMU 15) + alerte URGENT à l'admin institutionnel. ## Philosophie L'enseignement à distance avec des mineurs et dans des contextes sensibles (dépression, anxiété pré-bac, harcèlement) exige une modération IA réelle, pas seulement des avertissements. Studeia adopte : 1. **Modération en arrière-plan, pas de gatekeeping** — le superviseur analyse après la réponse, sans bloquer le stream. L'apprenant reçoit une réponse normale et le superviseur intervient si nécessaire dans les tours suivants. 2. **Le self-harm comme crise, pas comme infraction** — ne jamais punir un apprenant en souffrance. 3. **Configuration en cascade** — l'admin peut désactiver par tenant ou par cours lorsque le contexte l'exige (anatomie, pharmacologie, psychologie). 4. **Audit complet** — chaque incident, transition de statut, quarantaine et appel est enregistré dans AdminAuditLog. ## Modèle de données ``` AiSupervisorIncident id, userId, tenantId, courseId? severity: low | medium | high | critical | safety categories: [types] status: open | acknowledged | resolved | dismissed | auto_resolved messagesSnapshot: JSON (PII — rétention 2 ans via cron) supervisorReasoning: string countedAsStrike: boolean detectedAt, resolvedAt appealText: string (max 500 chars, 1 par quarantaine) AiTutorQuarantine id, userId, tenantId reason: string expiresAt: timestamp liftedBy: userId? (admin ayant levé manuellement) ``` ## Pipeline superviseur ``` Tour de chat complet ↓ (after()) SupervisorAgent.run({ userId, tenantId, courseId, messages: lastNTurns, isMinor: user.isMinor, courseContext: { title, description } // whitelist contextuelle }) ↓ LLM (Haiku) classifie : severity + categories + reasoning ↓ decideAction({ severity, categories, recentStrikes, isMinor, isSafety }) ↓ Actions possibles : - none (non enregistré) - warn (notification in-app) - register (crée incident, countedAsStrike) - quarantine (crée AiTutorQuarantine 48h) - safety (cooldown Redis 24h + accueil bienveillant + admin URGENT) ``` ## Règles de sévérité | Sévérité | Catégorie typique | Action 1re infraction | Action 2e+ infraction | |---|---|---|---| | **low** | langage inapproprié léger | avertissement | strike +1 ; 3 strikes = quarantaine 48h | | **medium** | hors-sujet persistant, jailbreak | avertissement + enregistrement | strike +1 ; 3 strikes = quarantaine 48h | | **high** | violence, sexuel, illégal | quarantaine 48h | quarantaine 7 jours | | **critical** | menace envers autrui, contenu extrême | quarantaine 7 jours | quarantaine indéfinie + révision admin | | **safety** | self_harm | JAMAIS de quarantaine — cooldown 24h + accueil bienveillant + admin URGENT | identique | ## Self-harm : traitement spécial Lorsque `severity === "safety"` : 1. **Le stream du tuteur est immédiatement interrompu** — le tuteur ne répond pas de manière inappropriée à une crise 2. **Message d'accueil bienveillant** affiché à l'apprenant : > "Je suis là avec vous. Si vous traversez un moment difficile, veuillez chercher de l'aide : > - CVV 188 (24h, appel gratuit, anonyme) > - SAMU 192 > - [Centre de Valorisation de la Vie](https://cvv.org.br) — chat en ligne > Vous n'êtes pas seul(e)." 3. **Cooldown Redis** `tutor-safety-cooldown:{userId}` avec TTL configurable (`SUPERVISOR_SAFETY_COOLDOWN_HOURS`, défaut 24h) 4. **E-mail URGENT immédiat** à l'admin institutionnel via le template `ai_supervisor_safety_urgent` 5. **Incident créé en statut 'open'** — l'admin DOIT réviser 6. **JAMAIS de strike** (countedAsStrike=false), JAMAIS de quarantaine, JAMAIS de punition ## Appel de quarantaine L'apprenant en quarantaine voit le composant `QuarantineNotice` (web + équivalent mobile) : - Explique le motif (severity + catégorie, sans exposer le raisonnement interne du superviseur) - Affiche le compte à rebours jusqu'à l'expiration - Formulaire d'appel : max 500 caractères, 1 par quarantaine - La soumission crée `appealText` dans l'incident + notifie l'admin institutionnel - L'admin peut : accuser réception, rejeter (lève la quarantaine), résoudre ou ignorer (la quarantaine expire d'elle-même) ## Configuration ### Cascade d'activation ``` Course.supervisorEnabled (null = inherit) ↓ si null Tenant.supervisorEnabled (null = inherit) ↓ si null défaut = true pour B2B (avec tenant) ``` Cache Redis versionné : `supervisor-flag-version:{tenantId}` + clé `supervisor-enabled:v{N}:{tenantId}:{courseId}`. Toute mutation appelle `bumpSupervisorFlagVersion(tenantId)` qui incrémente la version — invalide logiquement toutes les clés sans SCAN+DEL. ### Seul l'admin global peut modifier - `PATCH /api/admin/tenants/[id]/supervisor` — toggle par tenant - `PATCH /api/admin/courses/[id]/supervisor` — toggle par cours - Les deux exigent `role === "admin"` global + sont auditées dans AdminAuditLog ### Prompt du superviseur Modifié UNIQUEMENT par l'admin global (règle critique 141) : `PromptTemplate` avec `taskType = chat_supervisor` accepte UNIQUEMENT `tenantId = null`. Les endpoints `/api/institution/prompts/*` rejettent ce taskType avec 403. ## Audit + rétention - Chaque incident est enregistré avec `messagesSnapshot` (PII) - Cron quotidien `/api/cron/supervisor-maintenance` : - Auto-expire les quarantaines échues - Purge `messagesSnapshot=[]` + `appealText=null` après 2 ans (règle critique 145) - Envoie un digest `ai_supervisor_digest` à l'admin regroupant les incidents open/acknowledged des dernières 24h - AdminAuditLog : `ai_supervisor.incident.created/acknowledged/dismissed/resolved`, `quarantine.lift`, `prompt.update`, `tenant.toggle`, `course.toggle` ## RGPD - `GET /api/user/data-export` inclut `aiSupervisor.{incidents, quarantines}` de l'utilisateur - `DELETE /api/user/account` anonymise `messagesSnapshot=[]` + `appealText=null` en conservant severity/categories pour la rétention réglementaire - Les listes (`/api/institution/ai-supervisor/incidents`) utilisent un `select` explicite qui OMET messagesSnapshot et reasoning — seule la route de détail les expose ## Limites connues - **Faux positifs dans un contexte médical/pharmacologie** : le contexte du cours (courseContext.title) est transmis au superviseur pour la whitelist. Mais cela peut échouer dans des cas extrêmes. Solution : désactiver le superviseur pour des cours spécifiques. - **Langue** : le prompt du superviseur est localisé (4 langues), mais la classification peut présenter de légères variations de qualité entre PT-BR et EN-US. - **Jailbreak sophistiqué** : des attaques d'injection de prompt très élaborées peuvent passer. Atténuation : défense en couches (system prompt + superviseur + rate limit). - **Compromis vie privée vs sécurité** : messagesSnapshot est une PII. Rétention maximale 2 ans. L'admin global y accède via /admin/ai-supervisor/incidents/[id] — audité. ## Voir aussi - [Tutor IA Overview](/features/ai-tutor/overview) - [Tutor IA : vision exécutive](/platform/ai-tutor) - [Conformité RGPD](/legal/lgpd-rights-guide) ## FAQ **Q: Comment Studeia protège-t-il les apprenants dans le chat IA ?** Trois couches : (1) Le system prompt du tuteur inclut des guardrails (pas de conseil médical/juridique/financier, pas de sujets inappropriés). (2) L'Agent Superviseur (Haiku, arrière-plan, ~$0,001) classifie chaque tour selon 5 niveaux de sévérité × 8 catégories. (3) Pour le self-harm (severity=safety), le tuteur est interrompu avec un message d'accueil bienveillant + ressources de crise (CVV 188, SAMU 192) + notification URGENT à l'admin. **Q: Si l'apprenant écrit quelque chose d'inapproprié, que se passe-t-il ?** Cela dépend de la sévérité. LOW (1re infraction) : avertissement à l'apprenant. MEDIUM : avertissement + incident enregistré. 3 strikes (LOW ou MEDIUM en 7 jours) : quarantaine 48h. CRITICAL : quarantaine 7 jours + notification admin. SAFETY (self-harm) : JAMAIS de punition — accueil bienveillant + ressources de crise + alerte URGENT. **Q: La quarantaine empêche-t-elle l'apprenant d'utiliser la plateforme ?** Uniquement le chat tuteur IA. L'apprenant conserve l'accès aux cours, leçons, matériaux, gradebook et messages avec le professeur. L'apprenant peut soumettre un appel (max 500 caractères, 1 par quarantaine) qui est examiné par l'admin institutionnel. **Q: Puis-je désactiver le superviseur pour un cours spécifique ?** Oui. Cascading : Course.supervisorEnabled (null = inherit) → Tenant.supervisorEnabled → défaut ON. L'admin global modifie via /admin/ai-supervisor/tenants ou /admin/ai-supervisor/courses. Utile pour les cours contenant du contenu médical/pharmacologie/anatomie où des termes sensibles sont légitimes. **Q: Le self-harm est-il traité comme une infraction ?** JAMAIS. Le self-harm (severity=safety) est une crise, pas une infraction. Le système : (1) Interrompt le tuteur avec un message d'accueil bienveillant. (2) Affiche des ressources de crise — CVV 188 (24h, anonyme), SAMU 192, Centre de Valorisation de la Vie en ligne. (3) Notifie l'admin URGENT par e-mail immédiat. (4) Crée un incident en statut 'open' destiné à une révision humaine. (5) N'applique JAMAIS de strike, ne crée JAMAIS de quarantaine. --- # [fr-FR (AI-translated)] Gradebook : notes, catégories et rubriques URL: https://docs.studeia.com/features/assessment/gradebook Locale: fr-FR Section: features Updated: 2026-05-23 **Short answer:** Le Gradebook de Studeia organise les notes via GradeCategory (pondérations), GradeItem (activités) et Grade (notes individuelles). Il prend en charge les rubriques multi-critères, un breakdown extensible pour les apprenants, l'export CSV, les indicateurs d'intégrité inline (ShieldAlert pour les quiz avec changements d'onglet/anomalies de temps), les catégories avec drop-lowest configurable, la pénalité de retard automatique, et la politique de publication (immediate/manual/scheduled). ## Modèle ``` GradeCategory (pondération, drop_lowest_n, late_penalty_pct) └── GradeItem (activité — quiz, assignment, manuel) └── Grade (note par apprenant) └── Rubric (optionnel — critères) ``` ## Calcul ``` courseGrade = Σ (categoryAvg × categoryWeight) / totalWeight categoryAvg = average(itemAvgs après drop_lowest) itemAvg = Σ studentGrades / itemMaxScore × 100 ``` La pénalité de retard est appliquée si `submittedAt > dueDate` (configurable par catégorie). ## Rubriques ```json { "name": "Rédaction ENEM", "criteria": [ { "name": "Maîtrise de la norme écrite", "weight": 0.2, "levels": [ { "score": 200, "label": "Excellent", "description": "..." }, { "score": 160, "label": "Bien", "description": "..." }, { "score": 120, "label": "Satisfaisant", "description": "..." } ] }, { "name": "Compréhension du sujet", "weight": 0.2, "levels": [...] } ] } ``` L'apprenant voit un breakdown extensible : note finale + chaque critère + commentaire. ## Indicateurs d'intégrité Affichés inline dans le gradebook à côté de chaque note de quiz : - 🛡️ ShieldAlert rouge → tabSwitchCount > 5 OU avgTimePerQuestion < 2s - 🛡️ ShieldAlert jaune → 2 à 5 changements d'onglet OU 2 à 5s par question - L'infobulle détaille : « Tab switches : 8, time per question : 1,2s avg » L'enseignant décide de l'action à prendre (annuler, conserver, réviser). ## Export `GET /api/institution/courses/[id]/gradebook/export?format=csv` retourne un CSV avec : - Apprenant - E-mail - Chaque GradeItem en colonne (note brute + note pondérée) - Total final - Statut (passing/failing basé sur passingScore) Compatible avec Google Sheets et Excel. ## Voir aussi - [Quiz Engine](/features/assessment/quiz-engine) ## FAQ **Q: Comment calculer une moyenne pondérée ?** Créez une GradeCategory avec un weight (ex : 'Quizzes' 40 %, 'Examens' 60 %). Chaque GradeItem (activité) appartient à une catégorie. Studeia calcule automatiquement la moyenne pondérée. **Q: Puis-je utiliser des rubriques dans les assignments ?** Oui. Créez une Rubric avec des critères (chacun avec une échelle de 1 à 5 ou personnalisée). Associez-la à un GradeItem ou à une leçon de type assignment. Lors de la correction, l'enseignant évalue critère par critère et le système calcule la note finale + un breakdown extensible pour l'apprenant. **Q: L'apprenant voit-il sa note immédiatement ?** Cela dépend : GradeItem.releasePolicy le contrôle. Options : 'immediate' (visible dès la publication), 'manual' (l'enseignant décide), 'scheduled' (releaseAt date). Quiz auto-corrigé avec showResultsToStudent=true : immédiat. **Q: Y a-t-il une détection de plagiat ?** Pour les assignments de texte : intégration avec Turnitin via LTI (roadmap). Pour les quiz : intégrité académique native (changement d'onglet, anomalies de temps — affichée sous forme de ShieldAlert dans le gradebook). Pour les essais : détection LLM optionnelle (activée par l'administrateur). --- # [fr-FR (AI-translated)] Quiz Engine : configuration, intégrité et analytics psychométriques URL: https://docs.studeia.com/features/assessment/quiz-engine Locale: fr-FR Section: features Updated: 2026-05-23 **Short answer:** Quiz Engine de Studeia : 8+ types de questions auto-corrigées (multiple_choice, true_false, fill_blank, matching, ordering, numeric, short_answer, essay). Configuration via maxAttempts, timeLimitMinutes, shuffleQuestions/Options, accessCode, scoringPolicy (highest/latest/average), reviewMode. Intégrité académique (changement d'onglet, anomalies temporelles). Analytics psychométriques (alpha de Cronbach, discrimination point-bisériale, difficulté d'item, analyse des distracteurs). Banque de questions réutilisable. ## Types de questions | Type | Auto-correction | Cas d'usage | |---|---|---| | multiple_choice | Oui | Connaissances factuelles, concepts | | true_false | Oui | Vérification rapide | | fill_blank | Oui (normalisation) | Vocabulaire, formules | | matching | Oui | Associations (mot-définition) | | ordering | Oui | Séquence logique/chronologique | | numeric | Oui (avec tolérance) | Calculs mathématiques/physiques | | short_answer | Oui (normalisation + synonymes) | Réponses courtes | | essay | Manuel (ou LLM optionnel) | Rédaction, dissertation | ## Configuration du quiz `QuizConfiguration` dans le contenu JSON : ```json { "maxAttempts": 3, "timeLimitMinutes": 30, "shuffleQuestions": true, "shuffleOptions": true, "accessCode": "ENEM2026", "scoringPolicy": "highest", // highest | latest | average "reviewMode": "after_submit", // after_submit | after_due_date | never "passingScore": 70, "showResultsToStudent": true, "allowGoBack": false // si false, l'élève ne peut pas revenir aux questions précédentes } ``` ## Flux de soumission ``` POST /api/courses/[courseId]/lessons/[lessonId]/quiz/start ↓ - Valide l'inscription + disponibilité de la leçon (checkLessonAvailability) - Valide que maxAttempts n'est pas dépassé - Valide accessCode si configuré - Crée QuizAttempt avec optionOrders (mélanges persistés) - Retourne les questions SANS correctIndex (règle critique 66) ↓ L'élève répond (le client envoie les événements de changement d'onglet en arrière-plan) ↓ POST /api/courses/[courseId]/lessons/[lessonId]/quiz/submit ↓ - remapStudentAnswer (inverse le mélange via optionOrders) - Auto-correction par type - Calcule le score - Crée/met à jour LessonCompletion (scoringPolicy décide) - Déclenche QuizEvaluationService : - Met à jour ConceptMastery par concepts[] de la question - Détecte les misconceptions (Haiku, ~$0.001) - Crée une note dans le carnet de notes (si GradeItem associée) - Déclenche l'automatisation quiz_submitted - Déclenche handleGamificationEvent (XP, badges, concours) ``` ## Intégrité académique QuizAttempt suit en arrière-plan : - `tabSwitchCount` — nombre de fois que l'élève a quitté l'onglet - `copyPasteCount` — événements de collage détectés - `blurEvents` — flou de la fenêtre - `avgTimePerQuestionSec` — temps moyen par question - `flagged: boolean` — true si un signal dépasse le seuil Le carnet de notes affiche l'icône ShieldAlert + infobulle « Changements d'onglet : 8, temps par question : 1,2 s en moyenne ». Le professeur décide d'annuler ou d'ignorer. ## Analytics psychométriques `/api/institution/courses/[id]/lessons/[lid]/quiz-analytics` retourne : ### Difficulté des items (valeur p) ``` difficulté = total_correctes / total_tentatives ``` - < 0,3 : très difficile (revoir la question) - 0,3-0,7 : idéal - > 0,85 : très facile ### Discrimination point-bisériale Corrélation entre la réussite d'un item et le score total. Identifie les questions qui NE discriminent PAS les bons des mauvais élèves. - > 0,4 : excellent - 0,2-0,4 : acceptable - < 0,2 : mauvais (supprimer/reformuler) ### Analyse des distracteurs (MC et TF) % d'élèves ayant choisi chaque alternative incorrecte. Indice de misconceptions courantes : ``` Q : « Capitale de l'Australie ? » A) Sydney (40% — misconception populaire) ← SIGNALEMENT B) Canberra (45% — correcte) C) Melbourne (10%) D) Brisbane (5%) ``` ### Alpha de Cronbach (cohérence interne) Mesure si les questions du quiz évaluent le même construit. - > 0,7 : acceptable - 0,6-0,7 : discutable - < 0,6 : reconcevoir le quiz Nécessite ≥ 30 tentatives pour une fiabilité statistique. ### Distribution des scores 10 intervalles de 0-100 %. Aide à détecter les quiz avec effet plafond/plancher. ## Banque de questions `QuestionBank` réutilise les questions dans plusieurs quiz : ``` POST /api/institution/question-banks POST /api/institution/question-banks/[id]/items ``` L'éditeur de quiz dispose d'un **sélecteur** qui filtre par banque, type, difficulté, étiquettes. L'import sélectionne N questions aléatoires dans la banque. Exportateurs : - Format GIFT (compatible Moodle, Canvas, Blackboard) - CSV (pour l'édition dans un tableur) La banque de questions peut être **intégrée dans le RAG** pour que le tuteur IA y accède également : `POST /api/institution/question-banks/[id]/rag-ingest` ## Limites et quotas - Maximum 200 questions par quiz (UX) - Maximum 1 000 questions par banque de questions (performance) - Limite de temps minimale 1 minute, maximale 360 minutes (6h) - Max tentatives : 1-99 ou `null` (illimité) ## Honnêteté technique Ce que Studeia fait bien : - IA multi-fournisseur pour la détection de misconceptions - Analytics psychométriques dans l'interface (rares LMS les proposent) - Banque de questions avec intégration RAG - Intégrité académique passive (sans surveillance intrusive) Ce que Studeia NE fait PAS (encore) : - Surveillance avec webcam/microphone (problèmes de confidentialité) - Navigateur verrouillé - Liste blanche d'IP par quiz - Regroupement avancé de questions (Canvas Quizzes 2.0 le fait mieux) - Tests adaptatifs (CAT) — feuille de route ## Voir aussi - [Carnet de notes](/features/assessment/gradebook) - [Types de leçons](/features/cms/lesson-types) ## FAQ **Q: Combien de types de questions Studeia prend-il en charge ?** 8+ types : multiple_choice, true_false, fill_blank, matching (paires), ordering (séquence), numeric (avec tolérance), short_answer (avec normalisation), essay. 7 sont auto-corrigés (essay est manuel ou via LLM si activé). **Q: Comment détecter le copier-coller dans un quiz ?** Intégrité académique intégrée : détection de changement d'onglet (incrémente QuizAttempt.tabSwitchCount), anomalies de temps (réponse en <2s indique une devinette ou une copie), détection de copier-coller, événements de flou de la fenêtre. Les signaux sont affichés dans le carnet de notes avec une icône ShieldAlert + une infobulle explicative. **Q: Comment empêcher les élèves de partager leurs réponses ?** Combinez plusieurs stratégies : shuffleQuestions=true (ordre différent par élève), shuffleOptions=true (alternatives mélangées), accessCode (code que le professeur donne à l'heure du quiz), timeLimitMinutes (soumission automatique à l'expiration), maxAttempts=1 (une seule tentative). Questions aléatoires via une banque de questions avec des étiquettes. **Q: Quelles analytics Studeia propose-t-il pour les quiz ?** Analytics psychométriques : difficulté des items (% de réussite), discrimination point-bisériale (corrélation item-total), analyse des distracteurs (quelle alternative incorrecte est la plus populaire = indice de misconception), alpha de Cronbach (cohérence interne), distribution des scores (10 intervalles), signalements pour les questions problématiques. Comparable à ce que Canvas Quizzes offre + quelques extensions. **Q: Le quiz dispose-t-il d'une analyse individuelle par élève ?** Oui. QuizAttempt enregistre chaque tentative avec horodatage, réponses, score, temps passé, signaux d'intégrité. L'élève voit l'historique dans /grades/. Le professeur voit le détail dans /institution/courses/[id]/lessons/[lid]/attempts. Inclut l'empreinte de temps par question. --- # [fr-FR (AI-translated)] Automatisations (mini-n8n natif) URL: https://docs.studeia.com/features/automations/overview Locale: fr-FR Section: features Updated: 2026-05-23 **Short answer:** Studeia dispose d'un moteur d'automatisations 'mini-n8n' intégré. Modèle : Déclencheur → Condition → Action. 3 types de trigger (événement de la plateforme, cron planifié, webhook public). 14+ événements (lesson_completed, quiz_submitted, enrollment_created, forum_post_created, scheduled_trigger, etc.). 8 actions (send_notification, add_tag, remove_tag, create_announcement, send_webhook, send_web_request, enroll_user, trigger_automation). Assistant UI en 4 étapes + historique des exécutions. ## Modèle Déclencheur → Condition → Action ``` Trigger (event, scheduled, ou webhook) ↓ Condition (logique AND/OR, avec rules sur user.*, event.*) ↓ Action (une ou plusieurs, exécutées séquentiellement) ``` ## Triggers (3 types) ### 1. event Déclenché par des événements de la plateforme via `emitAutomationEvent()` dans `after()`. ```json { "type": "event", "config": { "eventName": "lesson_completed", "filters": {} } } ``` Événements supportés : `lesson_completed`, `module_completed`, `course_completed`, `quiz_submitted`, `enrollment_created`, `enrollment_completed`, `forum_post_created`, `forum_reply_created`, `grade_posted`, `announcement_created`, `live_class_started`, `student_inactive`, `tag_added_to_user`, `tag_removed_from_user`, `webhook_received`, `scheduled_trigger`. ### 2. scheduled Basé sur des crons. ```json { "type": "scheduled", "config": { "mode": "interval|daily|weekly|cron", "hours": 24, "time": "08:00", "timezone": "America/Sao_Paulo" } } ``` Traité par `GET /api/cron/automations` (CRON_SECRET). ### 3. webhook Endpoint public authentifié par token hexadécimal de 64 caractères. ``` URL: /api/automations/webhook/[token] GET → vérification de santé POST → déclenche l'automatisation (le body JSON deviendra event.data) ``` ## Conditions ```json { "logic": "and", "rules": [ { "field": "user.role", "operator": "eq", "value": "student" }, { "field": "event.score", "operator": "gte", "value": 80 } ] } ``` Opérateurs : `eq, neq, gt, gte, lt, lte, contains, not_contains, in, not_in`. Champs accessibles : - `user.*` — id, name, email, role, tags - `event.*` — champs de l'événement (courseId, score, lessonTitle, etc.) Les groupes imbriqués (AND/OR) sont supportés. ## Actions (8 types) | Action | Fonction | |---|---| | send_notification | Notification in-app (trigger_user ou users_with_tag) | | add_tag | Ajouter un UserTag | | remove_tag | Supprimer un UserTag | | create_announcement | Crée une annonce + notifie les apprenants (cours ou tenant) | | send_webhook | POST/PUT vers une URL externe (avec prévention SSRF) | | send_web_request | GET/POST/PUT/DELETE vers une API externe | | enroll_user | Inscrit trigger_user à un cours | | trigger_automation | Enchaîne une autre automatisation (profondeur max 5) | ### Interpolation de templates Les chaînes dans les actions supportent les `{{placeholders}}` : - `{{user.name}}`, `{{user.email}}`, `{{user.role}}` - `{{event.courseId}}`, `{{event.score}}`, `{{event.lessonTitle}}` ## Sécurité - **Isolation des tenants** : toutes les requêtes sont filtrées par tenantId. L'automatisation d'un tenant ne s'exécute JAMAIS pour l'utilisateur d'un autre tenant. - **Prévention SSRF** : `url-validator.ts` bloque les IPs privées, localhost, les endpoints de métadonnées (169.254.169.254). IPv4 + IPv6. - **Timeout HTTP** : 10s via AbortController. - **Token webhook** : hexadécimal 64 caractères, renouvelable. - **Profondeur de chaîne** : max 5 niveaux de trigger_automation récursif. - **Rate limit** : maxRunsPerHour/maxRunsPerDay par automatisation (Redis INCR, fallback DB count). ## Exemple : notifier le parent lorsqu'un apprenant mineur est inactif depuis 5 jours ```json { "name": "Alerte inactivité — mineurs", "trigger": { "type": "event", "config": { "eventName": "student_inactive" } }, "conditions": { "logic": "and", "rules": [ { "field": "user.role", "operator": "eq", "value": "student" }, { "field": "user.isMinor", "operator": "eq", "value": true }, { "field": "event.inactiveDays", "operator": "gte", "value": 5 } ] }, "actions": [ { "type": "send_notification", "config": { "recipient": "users_with_tag", "tag": "parent_of_{{user.id}}", "title": "{{user.name}} inactif depuis {{event.inactiveDays}} jours", "message": "Nous vous encourageons à vous connecter. Accédez via [lien]." } } ] } ``` ## Interface utilisateur `/institution/automations` : - Liste avec filtres (statut, type de trigger), bascule, recherche - Assistant en 4 étapes (Trigger → Conditions → Actions → Récapitulatif) - Historique des exécutions avec lignes extensibles (statut, durée, actionResults JSON) ## Voir aussi - [Vue d'ensemble de la plateforme](/platform/overview) ## FAQ **Q: Studeia dispose-t-il d'automatisations intégrées ?** Oui. Moteur 'mini-n8n' natif : Déclencheur → Condition → Action. 3 types de trigger (événement de la plateforme, planifié, webhook public) avec 14+ événements. 8 types d'action (notification in-app, ajout/suppression de tag, création d'annonce, envoi de webhook, envoi de requête web, inscription d'utilisateur, déclenchement d'automatisation). Assistant UI en 4 étapes + historique des exécutions. **Q: Puis-je déclencher un webhook lorsqu'un apprenant termine un quiz ?** Oui. Trigger : event quiz_submitted. Condition optionnelle (ex. : score >= 80). Action : send_webhook vers votre URL. Supporte l'interpolation de templates : {{user.name}}, {{event.score}}, {{event.lessonTitle}}. **Q: Y a-t-il un rate limiting ?** Oui. Par automatisation : maxRunsPerHour + maxRunsPerDay. Vérifié via Redis INCR avec fallback DB count. En cas de dépassement : l'exécution est marquée comme skipped + log. **Q: Puis-je enchaîner des automatisations ?** Oui. L'action trigger_automation appelle une autre automatisation. Profondeur de chaîne maximale : 5 niveaux (protection anti-boucle infinie). --- # [fr-FR (AI-translated)] CMS : cours, modules et leçons URL: https://docs.studeia.com/features/cms/courses-modules-lessons Locale: fr-FR Section: features Updated: 2026-05-23 **Short answer:** Studeia organise le contenu selon la hiérarchie Course → Module → Lesson. Chaque cours appartient à un Tenant, peut avoir plusieurs modules (avec sortOrder), chaque module peut avoir plusieurs leçons avec 8 types (slides, video, PDF, rich_text, quiz, assignment, live_class, external_link) + 6 sous-types interactifs. CRUD via UI ou API publique. Prise en charge du clone, import IMS CC, auto-génération par IA (PDF→cours), publication planifiée (publishAt) et ingestion RAG pour le tuteur IA. ## Hiérarchie ``` Tenant (Institution) └── Course (titre, slug, status, theme, publishAt, aiTutorEnabled) └── CourseModule (titre, sortOrder) └── CourseLesson (type, content JSON, sortOrder, isPublished, publishAt) ├── CourseLessonMedia (N:N avec MediaAsset) └── LessonCompletion (1:N par studentId) ``` ## CRUD ### Cours ``` POST /api/institution/courses Créer GET /api/institution/courses Lister GET /api/institution/courses/[id] Détail PATCH /api/institution/courses/[id] Mettre à jour DELETE /api/institution/courses/[id] Supprimer (soft, status=archived) POST /api/institution/courses/[id]/clone Cloner (deep copy) POST /api/institution/courses/import Importer IMS CC ``` Scopes : `courses:read` (GET) | `courses:write` (POST/PATCH/DELETE). ### Modules ``` POST /api/institution/courses/[id]/modules Créer PATCH /api/institution/courses/[id]/modules/[mid] DELETE /api/institution/courses/[id]/modules/[mid] PATCH /api/institution/courses/[id]/modules/reorder (bulk sortOrder) ``` ### Leçons ``` POST /api/institution/courses/[id]/modules/[mid]/lessons Créer PATCH /api/institution/courses/[id]/modules/[mid]/lessons/[lid] DELETE /api/institution/courses/[id]/modules/[mid]/lessons/[lid] POST /api/institution/courses/[id]/lessons/reorder (bulk) ``` ## Statut du cours `Course.status: draft | published | archived` - **draft** : non visible pour les étudiants, modifiable - **published** : visible pour les inscrits (en tenant compte de publishAt) - **archived** : non visible, lecture seule pour l'historique `Course.publishAt` planifie la publication automatique via cron. ## Publication échelonnée Combinez `Course.publishAt` avec `Lesson.publishAt` pour un contrôle granulaire : ``` Cours publié le 2026-06-01 Module 1 (sans publishAt) → disponible depuis le 2026-06-01 Leçon 1.1 (sans publishAt) → disponible depuis le 2026-06-01 Leçon 1.2 (publishAt: 2026-06-08) → disponible à partir du 2026-06-08 Module 2 (sans publishAt) Leçon 2.1 (publishAt: 2026-06-15) → disponible à partir du 2026-06-15 ``` `checkLessonAvailability()` dans `apps/web/lib/lesson-availability.ts` valide sur TOUS les endpoints de leçon (view, quiz/start, quiz/submit, complete, interactive). ## Prérequis entre leçons `Lesson.prerequisiteLessonId` pointe vers la leçon qui DOIT être terminée avant d'accéder à la suivante. `checkLessonAvailability(lesson, { checkPrerequisite: true })` valide : 1. `lesson.isPublished === true` 2. `lesson.publishAt <= now` 3. Si `prerequisiteLessonId` : existence d'un `LessonCompletion` de l'étudiant pour cette leçon ## Clone de cours `POST /api/institution/courses/[id]/clone` effectue : 1. Crée un nouveau Course avec le slug `{slug}-clone-{n}` 2. Pour chaque Module original → crée une copie 3. Pour chaque Lesson originale → crée une copie avec le même content JSON 4. NE copie PAS : Enrollments, LessonCompletions, ClassGroups, QuizAttempts, ingestion RAG 5. Respecte la limite de cours du plan (checkTenantResourceLimit) ## Import IMS Common Cartridge `POST /api/institution/courses/import` body multipart/form-data avec .imscc : - Parseur : `packages/core/src/content/imscc-parser.ts` (parseur XML basé sur cheerio) - Prise en charge : IMS CC v1.0, v1.1, v1.2, v1.3 - Ressources prises en charge : web links, file resources, basic LTI links, quizzes QTI 1.2 (mappés vers le Quiz Engine), web content resources - NON pris en charge : packages de contenu H5P, SCORM 2004 PIF, IMS CP ## Ingestion RAG `Course.autoSyncRag: Boolean` contrôle la réingestion automatique. [Détails dans RAG Ingestion](/features/ai-tutor/rag-ingestion). ## Limitations - Maximum 100 modules par cours (soft limit, performance) - Maximum 200 leçons par module (soft limit, UX) - Content JSON par leçon jusqu'à 5 Mo (validé à la sauvegarde) - Le slug doit être unique par tenant + langue ## Voir aussi - [Types de leçon](/features/cms/lesson-types) - [Auto-génération de cours par IA](/features/cms/auto-course-generation) - [Ingestion RAG](/features/ai-tutor/rag-ingestion) ## FAQ **Q: Comment créer un nouveau cours ?** Via UI : /institution/courses > Nouveau Cours. Définissez le titre, le slug, la description, le thème visuel, le statut (draft). Via API : POST /api/institution/courses (scope courses:write). Après la création, ajoutez des modules et des leçons. **Q: Puis-je cloner un cours existant ?** Oui. POST /api/institution/courses/[id]/clone. Crée une copie avec un nouveau slug, les mêmes modules et leçons (deep copy). Utile pour créer de nouveaux groupes à partir d'un cours existant. Respecte la limite de cours du plan. **Q: Puis-je importer du contenu depuis Moodle/Canvas/Blackboard ?** Oui, via IMS Common Cartridge (IMS CC v1.x). POST /api/institution/courses/import avec un fichier .imscc. Le parseur extrait les modules, les leçons, les ressources (PDF, liens, quiz basiques). Limitation : H5P et SCORM 2004 ne sont pas entièrement pris en charge — uniquement IMS CC natif. **Q: Comment publier une leçon avec une date planifiée ?** Définissez lesson.isPublished=false + lesson.publishAt=timestamp. L'étudiant ne voit pas la leçon jusqu'à publishAt. checkLessonAvailability() valide sur tous les endpoints (quiz, complete, view). Se combine avec Course.publishAt pour publier l'intégralité du cours à un moment futur. --- # [fr-FR (AI-translated)] 8 types de leçon + 6 sous-types interactifs URL: https://docs.studeia.com/features/cms/lesson-types Locale: fr-FR Section: features Updated: 2026-05-23 **Short answer:** Studeia prend en charge 8 types primaires de leçon (slides, video, PDF, rich text, quiz, assignment, live class, external link) et 6 sous-types interactifs (interactive_video, drag_drop, fill_blanks, flashcard_set avec SRS, timeline, branching_scenario). Chaque type dispose d'un éditeur visuel dédié et d'un viewer optimisé. Le contenu est stocké en JSON structuré dans CourseLesson.content. ## Types primaires ### 1. slides Présentation avec éléments riches. ```json { "slides": [ { "id": "uuid", "layout": "title_content" | "two_column" | "image_focus" | "code_demo", "elements": [ { "type": "heading", "text": "...", "style": {} }, { "type": "paragraph", "text": "..." }, { "type": "image", "mediaAssetId": "uuid" }, { "type": "list", "items": ["..."], "ordered": true }, { "type": "code", "language": "python", "code": "..." }, { "type": "callout", "variant": "info|warning|tip", "text": "..." } ] } ], "speakerNotes": { "slide-uuid": "Notes..." } } ``` Viewer : `components/lesson-viewer/slide-viewer.tsx` (navigation au clavier, plein écran, notes du présentateur). ### 2. video ```json { "source": "youtube" | "vimeo" | "upload", "embedUrl": "https://...", "videoUrl": "...", "mediaAssetId": "uuid" } ``` Prend en charge la vitesse de lecture, les sous-titres, le contrôle de la lecture automatique. Transcription automatique via Whisper lorsque mediaAssetId est présent. ### 3. pdf_viewer ```json { "mediaAssetId": "uuid", "storageUrl": "...", "initialPage": 1 } ``` Viewer avec react-pdf, navigation, zoom, recherche en texte intégral. ### 4. rich_text ```json { "html": "

...

...

" } ``` Éditeur : Tiptap avec extensions (tableaux, blocs de code avec coloration syntaxique, images, liens, couleur, typographie, math). HTML assaini côté serveur avec `sanitizeHtml()`. ### 5. quiz ```json { "questions": [ { "type": "multiple_choice", "question": "...", "options": ["A","B","C","D"], "correctIndex": 0, "explanation": "...", "concepts": ["concept-id"] }, { "type": "true_false", "question": "...", "correctIndex": 0 }, { "type": "fill_blank", "question": "...", "blanks": [{"answer": "..."}] }, { "type": "matching", "pairs": [{"left": "...", "right": "..."}] }, { "type": "ordering", "items": ["..."] }, { "type": "numeric", "answer": 42, "tolerance": 0.1 }, { "type": "short_answer", "acceptedAnswers": ["..."] }, { "type": "essay", "prompt": "..." } ], "passingScore": 70, "configuration": { "maxAttempts": 3, "timeLimitMinutes": 30, "shuffleQuestions": true, "shuffleOptions": true, "accessCode": "...", "scoringPolicy": "highest" | "latest" | "average", "reviewMode": "after_submit" | "after_due_date" | "never" } } ``` Détails sur [Quiz Engine](/features/assessment/quiz-engine). ### 6. assignment ```json { "instructions": "...", "dueDate": "2026-06-15", "maxScore": 100, "submissionType": "text" | "file" | "both", "rubricId": "uuid" } ``` Les soumissions sont stockées dans le bucket privé `submissions/{tenantId}/{courseId}/{lessonId}/{userId}/` (règle critique 122). ### 7. live_class ```json { "liveClassId": "uuid" } ``` L'entité LiveClass dispose d'un fournisseur (BBB/Zoom/Teams/Meet), d'une URL de connexion et d'une URL d'enregistrement. [Détails sur les classes en direct](/features/live-classes/overview). ### 8. external_link ```json { "url": "https://...", "description": "...", "openInNewTab": true } ``` ## Sous-types interactifs Lorsque `lesson.subtype !== null`, un viewer interactif dédié est rendu : ### interactive_video Vidéo avec checkpoints (questions obligatoires avant de continuer). ```json { "videoUrl": "...", "checkpoints": [ { "timestampSec": 120, "question": { ... } } ] } ``` ### drag_drop ```json { "items": [{ "id": "1", "label": "Mitose" }], "targets": [{ "id": "a", "label": "Division cellulaire", "acceptedItemIds": ["1"] }] } ``` ### fill_blanks ```json { "text": "La capitale de la France est {{0}} et se trouve sur le continent {{1}}.", "blanks": [ { "id": 0, "acceptedAnswers": ["Paris"] }, { "id": 1, "acceptedAnswers": ["Europe", "européen"] } ] } ``` ### flashcard_set ```json { "cards": [ { "id": "1", "front": "Quel est le théorème de Pythagore ?", "back": "a² + b² = c²" } ], "srsEnabled": true } ``` Algorithme SRS SM-2 modifié. Planifie les révisions dans StudentFlashcardReview. ### timeline ```json { "events": [ { "date": "1500", "title": "Découverte du Brésil", "description": "..." } ] } ``` Frise chronologique interactive avec zoom. ### branching_scenario Arbre de décision pour les simulations (ex : cas clinique, dilemme éthique, négociation). ```json { "rootNodeId": "n1", "nodes": { "n1": { "text": "Vous êtes médecin et recevez un patient souffrant de douleurs thoraciques...", "choices": [ { "text": "Demander un ECG", "nextNodeId": "n2" }, { "text": "Hospitaliser immédiatement", "nextNodeId": "n3" } ] } } } ``` ## Éditeurs (Lesson Builder) Chaque type dispose d'un éditeur visuel dédié dans `components/lesson-builder/` : - slides → `slides-editor.tsx` (réordonnancement dnd-kit, éléments drag-drop) - rich_text → `rich-text-editor.tsx` (Tiptap) - quiz → `quiz-editor.tsx` (avec sélecteur de banque de questions + boîte de dialogue d'enregistrement) - assignment → `assignment-editor.tsx` (sélecteur de rubrique, date d'échéance) - video → `video-editor.tsx` (sélection de source + intégration) - pdf → `pdf-editor.tsx` (upload + sélecteur de médias) - live_class → `live-class-editor.tsx` (sélection du fournisseur + planification) - external_link → `external-link-editor.tsx` - sous-types interactifs → éditeurs dédiés dans `components/interactive/` ## Limitations - **Quiz de type essay sans correction automatique native** — l'administrateur peut activer la correction par LLM (coût supplémentaire) - **Les sous-types interactifs ne migrent pas vers H5P** — format propriétaire Studeia - **Branching_scenario profondeur maximale 10 niveaux** — protection contre les boucles infinies ## Voir aussi - [CMS : cours, modules, leçons](/features/cms/courses-modules-lessons) - [Quiz Engine](/features/assessment/quiz-engine) - [Contenu interactif](/features/interactive-content/overview) ## FAQ **Q: Combien de types de leçon existe-t-il ?** 8 types primaires : slides, video, pdf_viewer, rich_text, quiz, assignment, live_class, external_link. Plus 6 sous-types interactifs lorsque lesson.subtype !== null : interactive_video (avec checkpoints), drag_drop, fill_blanks, flashcard_set (SRS SM-2), timeline, branching_scenario (arbre de décision). **Q: Ai-je besoin de H5P pour le contenu interactif ?** Non. Studeia dispose de 6 sous-types interactifs natifs : interactive_video (avec checkpoints et quiz intégré), drag_drop, fill_blanks, flashcard_set (avec algorithme SRS SM-2), timeline et branching_scenario (arbres de décision avec ramifications). H5P peut être intégré via external_link mais n'est pas nécessaire. **Q: Le quiz est-il auto-corrigé ?** Oui, pour 7 des 8 types : multiple_choice, true_false, fill_blank, matching, ordering, numeric, short_answer (avec normalisation). Seul essay nécessite une correction manuelle (ou via LLM si l'administrateur l'active). Détails sur /features/assessment/quiz-engine. **Q: Puis-je intégrer une vidéo YouTube ou Vimeo ?** Oui. Type de leçon video, content { source: 'youtube' | 'vimeo' | 'upload', embedUrl: '...' }. Prend également en charge l'upload via la médiathèque (avec transcodage optionnel et transcription automatique via Whisper). --- # [fr-FR (AI-translated)] Gamification native : XP, badges, leaderboards, contests, rewards URL: https://docs.studeia.com/features/gamification/overview Locale: fr-FR Section: features Updated: 2026-05-23 **Short answer:** Studeia intègre une gamification native complète : moteur XP configurable hiérarchiquement (tenant→cours), 11 critères de badge avec logique booléenne AND/OR, badges exportables en OB 3.0 (Open Badges 3.0 — W3C Verifiable Credential), leaderboards Redis ZSET (portée cours/groupe, fenêtres alltime/weekly/monthly), contests avec 7 métriques (lifecycle draft→active→ended), boutique de récompenses avec monnaie virtuelle et agent IA dédié pour créer des stratégies via chat naturel. ## Modèle ``` TenantGamificationConfig (XP rules, level thresholds, features) └── CourseGamificationConfig (override per-course) UserGamificationProfile (totalXp, currentLevel, currentStreakDays, coins) ├── XpLog (chaque XP gagné avec source) ├── UserBadge[] ├── ContestParticipant[] └── RewardRedemption[] ``` ## Moteur XP XP gagné par activité. Config dans `xpRules` JSON : ```json { "lessonComplete": 50, "quizPass": 30, "quizPassFirstTry": 50, "assignmentSubmit": 40, "forumPostCreate": 10, "forumReplyCreate": 5, "chatTutorMessage": 2, "liveClassJoin": 20, "dailyLogin": 5, "streakBonus": [ { "days": 7, "bonus": 100 }, { "days": 30, "bonus": 500 } ] } ``` `handleGamificationEvent()` intégré dans 7 routes (leçon complétée, quiz, chat tuteur, post/réponse forum, participation classe live, soumission devoir). ## Niveaux Seuils configurables (par défaut : niveau N = 100 × N²) : ``` Niveau 1: 0 XP Niveau 2: 100 XP Niveau 3: 400 XP Niveau 4: 900 XP Niveau 5: 1600 XP ... ``` La montée de niveau déclenche l'événement `badge_earned` (automatisation) + notification push (mobile). ## Badges 11 types de critères avec logique booléenne AND/OR : | Critère | Déclencheur | |---|---| | lesson_count | N leçons complétées | | quiz_pass_count | N quiz réussis | | quiz_score_avg | moyenne de quiz >= X | | streak_days | streak de N jours | | level_reached | niveau >= N | | total_xp | XP >= N | | course_complete | N cours complétés | | forum_posts | N posts sur le forum | | concept_mastery | N concepts avec mastery >= X | | time_spent | N heures étudiées | | manual | attribué par enseignant/admin | **Critères composés** (AND/OR, profondeur max 3) : ```json { "logic": "AND", "rules": [ { "type": "quiz_pass_count", "value": 10 }, { "logic": "OR", "rules": [ { "type": "streak_days", "value": 7 }, { "type": "quiz_score_avg", "value": 90 } ] } ] } ``` ## Open Badges 3.0 L'obtention d'un badge crée un `UserBadge` avec page publique : - `/public/badges/verify/[userBadgeId]` (sans authentification) - `/api/badges/verify/[userBadgeId]` retourne JSON-LD OB 3.0 (W3C Verifiable Credential) - Compatible avec LinkedIn Add to Profile - Schema.org `EducationalOccupationalCredential` pour la découvrabilité ## Leaderboards Redis ZSET (sorted sets) pour les performances : ``` ZADD leaderboard:tenant:{tenantId}:scope:course:{courseId}:window:weekly {xp} {userId} ZADD leaderboard:tenant:{tenantId}:scope:class:{classId}:window:alltime {xp} {userId} ``` Portées : course, class_group. Fenêtres : alltime, weekly, monthly. Mode anonyme : l'apprenant apparaît comme "Apprenant #42" (config par tenant). ## Contests Cycle de vie : draft → active → ended (cron auto-start/end). 7 métriques : 1. xp_earned (XP total sur la période) 2. lessons_completed 3. quizzes_passed 4. avg_quiz_score 5. study_minutes 6. forum_posts 7. badges_earned Configurable : portée (course/class/tenant), date de début/fin, prix (rewards). ## Boutique de récompenses Catalogue de récompenses virtuelles. L'apprenant dépense des coins (accumulés via XP) : - certificate_template — diplôme stylisé - profile_customization — avatar/bordure - badge_special — badge unique - virtual_item — sticker, couleur de nom, etc. Échange atomique (anti-condition de course). Remboursement automatique si l'admin refuse. ## Agent IA de gamification L'admin peut créer/gérer la gamification via chat : ``` "Crée 5 badges pour mon cours de Mathématiques en mettant l'accent sur la régularité (streaks) et la maîtrise (>= 80% de réussite). Bonus pour les apprenants qui aident sur le forum." ``` 19 outils (CRUD badges/contests/rewards, config XP, analytics, attribution manuelle). Boucle tool_use max 15 itérations. [Détails dans Gamification Agent](/features/gamification/gamification-agent-ai). ## Rapports parentaux Gamification intégrée dans `packages/core/src/monitoring/advanced-reports.ts` : - StudentReport inclut XP, niveau, badges récents, streak - Le portail parents affiche une section "Accomplissements" avec grille de badges + compteur de streak - Le rapport LLM cite les accomplissements : "Marie a complété 3 cours et obtenu 5 badges ce mois-ci" ## Voir aussi - [Vue d'ensemble de la plateforme](/platform/overview) - [Comparatif Studeia vs Khan Academy](/comparisons/studeia-vs-google-classroom) ## FAQ **Q: Studeia dispose-t-il d'une gamification native ?** Oui, complète. XP par activité (config hiérarchique tenant→cours), niveaux configurables, badges avec 11 critères automatiques (compound AND/OR), leaderboards Redis ZSET avec portée cours ou groupe et fenêtres weekly/monthly/alltime, contests avec 7 métriques, boutique de récompenses avec monnaie virtuelle. Plus un agent IA dédié permettant à l'admin de créer une stratégie via chat. **Q: Les badges suivent-ils le standard Open Badges ?** Oui. Badges exportables au format OB 3.0 (Open Badges 3.0 — W3C Verifiable Credential JSON-LD). Chaque UserBadge dispose d'une page publique de vérification (/public/badges/verify/[id]) avec schema.org EducationalOccupationalCredential — compatible avec LinkedIn Add to Profile. **Q: Comment configurer les XP par leçon complétée ?** Paramètres du tenant > Gamification > Règles XP. Chaque activité a un XP de base (lessonComplete : 50, quizPass : 30, etc.). Le cours peut surcharger (CourseGamificationConfig). Bonus pour streak quotidienne, première fois, difficulté, etc. **Q: Puis-je désactiver la gamification dans un cours ?** Oui. CourseGamificationConfig.enabled=false. La barre latérale de l'apprenant masque 'Gamification' si l'apprenant n'a pas de cours actif avec la gamification activée. Le sous-menu du cours masque l'onglet 'Gamification' pour les cours spécifiques avec le flag désactivé. --- # [fr-FR (AI-translated)] Cours en direct multi-provider (BBB, Zoom, Teams, Meet) URL: https://docs.studeia.com/features/live-classes/overview Locale: fr-FR Section: features Updated: 2026-05-23 **Short answer:** Les cours en direct dans Studeia prennent en charge 4 providers via l'adapter pattern : BigBlueButton (par défaut, iframe embed), Zoom (Server-to-Server OAuth), Microsoft Teams (Graph API), Google Meet (OAuth Calendar). Identifiants chiffrés AES-256-GCM. Webhook lifecycle + cron de recording sync (fallback 15 min). LiveClassTranscription automatique pour Zoom/Teams (ingérable dans le RAG). ## Providers pris en charge | Provider | Auth | Rejoindre | Enregistrements | Transcription | |---|---|---|---|---| | BBB | sharedSecret | iframe | Oui, API native | Texte fourni | | Zoom | Server-to-Server OAuth | nouvel onglet | Webhook + cron | VTT auto | | Teams | Client Credentials | nouvel onglet | Graph API + cron | VTT auto | | Google Meet | OAuth + Calendar API | nouvel onglet | Calendar API + cron | Manuel dans Meet | ## Adapter pattern `packages/core/src/live-class/types.ts` : ```ts interface VideoProviderAdapter { createMeeting(params): Promise; getJoinUrl(params): Promise; endMeeting(meetingId, providerData?): Promise; getMeetingStatus(meetingId): Promise; getRecordings(meetingId): Promise; getTranscript?(meetingId): Promise; } ``` `resolveVideoProvider(tenantId, liveClass?)` cascade ainsi : 1. `liveClass.videoProvider` (si spécifié dans le cours) 2. `VideoProviderConfig.isDefault` (provider par défaut du tenant) 3. `Tenant.config.bbb` (legacy backward compat) 4. Variables d'environnement BBB (fallback global) ## Configuration par provider ### BBB (par défaut) Prérequis : instance BBB en cours d'exécution. Paramètres > Fournisseur vidéo > BBB > URL + Shared Secret. ### Zoom 1. Créez une application Server-to-Server OAuth sur le Zoom Marketplace 2. Scopes : `meeting:read`, `meeting:write`, `recording:read`, `user:read` 3. Paramètres > Fournisseur vidéo > Zoom > Account ID + Client ID + Client Secret 4. Webhook : `/api/webhooks/video/zoom` avec HMAC SHA-256 via `x-zm-signature` ### Teams 1. Enregistrement d'application Azure AD 2. Permissions : Microsoft Graph `OnlineMeetings.ReadWrite.All`, `OnlineMeetingRecording.Read.All` 3. Paramètres > Fournisseur vidéo > Teams > Tenant ID + Client ID + Client Secret + e-mail de l'organisateur 4. Webhook : Graph Change Notifications (validation d'abonnement via `validationToken`) ### Google Meet 1. Google Cloud Console > APIs > Calendar API + Meet REST API v2 2. OAuth 2.0 Client (application Web) 3. Paramètres > Fournisseur vidéo > Google Meet > Client ID + Client Secret 4. Flux de consentement administrateur via OAuth (redirection vers Google) 5. Limitation : endMeeting non pris en charge via API — l'adapter marque le cours comme terminé localement ## Identifiants Stockés dans `VideoProviderConfig` avec AES-256-GCM : - `encryptedCredentials` — blob JSON chiffré - `encryptionIv` + `encryptionAuthTag` - Tokens OAuth (Teams/Meet) : `accessToken`, `refreshToken`, `tokenExpiresAt` Unique : `[tenantId, provider]` — une configuration par provider par tenant. ## Webhooks et recording sync Chaque provider a son propre fonctionnement. Studeia normalise via des webhook handlers + cron fallback : - `POST /api/webhooks/video/zoom` — événements de réunion + recording.completed - `POST /api/webhooks/video/teams` — notifications Graph - `GET /api/cron/recording-sync` — polling toutes les 15 min pour les réunions terminées sans recordingUrl Les webhooks sont **peu fiables** (délais, expiration des abonnements). Le cron est toujours utilisé comme fallback. ## Transcription Zoom et Teams fournissent le VTT nativement après l'enregistrement. Studeia crée un LiveClassTranscription avec : - `transcriptionText` (extrait du VTT) - `transcriptionLanguage` - statut : pending → transcribing → review → approved → ingested Après approbation, l'administrateur peut déclencher l'ingestion dans le RAG du cours. [Détails dans Media Transcription](/features/cms/media-transcription). ## Portée par groupe `LiveClass.classGroupId` est optionnel. Lorsqu'il est défini : - Seuls les étudiants de ce groupe voient le cours dans /live-classes/ - Seuls les étudiants du groupe peuvent rejoindre le cours (validé lors de la connexion) - Notifications uniquement pour le groupe Sans classGroupId : portée au cours entier (tous les étudiants inscrits). ## Limitations - **BBB** : nécessite une instance auto-hébergée (ou un provider BBB managé). Coûts : 20-200 USD/mois selon la taille. - **Zoom** : limite de durée selon le niveau d'abonnement (gratuit = 40 min, payant = illimité). - **Teams** : endMeeting non pris en charge via API. - **Google Meet** : enregistrement/transcription démarré manuellement par l'hôte. - **Streaming vers YouTube/Twitch** : non pris en charge nativement. ## Voir aussi - [Vue d'ensemble de la plateforme](/platform/overview) - [Multi-tenancy](/platform/multi-tenancy) ## FAQ **Q: Quel provider vidéo Studeia utilise-t-il ?** 4 options : BigBlueButton (par défaut, iframe embed, open-source), Zoom (Server-to-Server OAuth), Microsoft Teams (Azure AD Client Credentials), Google Meet (OAuth admin consent). L'administrateur choisit par tenant (VideoProviderConfig par défaut) ou par cours spécifique (LiveClass.videoProvider override). **Q: BBB et Zoom fonctionnent-ils de la même façon pour l'étudiant ?** Pas exactement. BBB prend en charge l'iframe embed (joinMethod='iframe', l'étudiant voit le cours dans Studeia). Zoom, Teams et Meet s'ouvrent dans un nouvel onglet (joinMethod='external', X-Frame-Options bloque l'iframe). L'interface affiche une carte avec un compte à rebours + un bouton « Rejoindre » pour ces 3 providers. **Q: Les enregistrements sont-ils disponibles automatiquement ?** Oui, automatiquement. Le webhook du provider notifie lorsque l'enregistrement est prêt + le cron /api/cron/recording-sync s'exécute toutes les 15 min en tant que fallback. recordingUrl est enregistré dans LiveClass. Pour Zoom/Teams : la transcription VTT est également capturée (crée un LiveClassTranscription pouvant être ingéré dans le RAG). **Q: Puis-je restreindre un cours en direct à un groupe spécifique ?** Oui. LiveClass.classGroupId est optionnel. Lorsqu'il est défini : seuls les étudiants de ce groupe voient le cours et peuvent le rejoindre (règle critique 45-48). Sans classGroupId : tous les étudiants inscrits au cours peuvent le voir. --- # [fr-FR (AI-translated)] Glossaire e-learning : termes techniques LMS, IA et éducation URL: https://docs.studeia.com/glossary Locale: fr-FR Section: glossary Updated: 2026-05-23 **Short answer:** Glossaire complet des termes techniques utilisés en e-learning/LMS, tuteur IA, gamification, SSO Enterprise, LTI, SCIM, RAG et architecture SaaS. ~80 termes avec définitions courtes et références croisées vers des pages détaillées. ## A **API Key** — Clé d'authentification pour l'API publique de Studeia. Générée dans /institution/settings/api-keys, format `mia_` + 40 caractères hex. Stockée sous forme de hash SHA-256, jamais exposée après création. [En savoir plus](/api/authentication). **AGS (Assignment and Grade Service)** — Service LTI 1.3 permettant aux outils (comme Studeia) de renvoyer des notes au LMS consommateur (Canvas, Moodle, Blackboard). Studeia l'implémente en tant que provider. ## B **Badge** — Insigne de réussite. Studeia utilise Open Badges 3.0 (W3C Verifiable Credential). Peut être obtenu automatiquement (11 critères) ou manuellement (attribution par l'enseignant). [En savoir plus](/features/gamification/overview). **BBB (BigBlueButton)** — Plateforme open-source de visioconférence pour l'éducation. Studeia l'intègre comme provider vidéo par défaut via iframe embed. [En savoir plus](/features/live-classes/overview). **BNCC** — Base Nacional Comum Curricular brésilienne (référentiel national des compétences scolaires au Brésil). Studeia offre un support basique (tags par compétence BNCC) — alignement complet via PromptTemplate personnalisable. ## C **Canvas LMS** — LMS dominant dans les universités américaines (Instructure). Studeia fonctionne comme outil LTI 1.3 dans Canvas. [Comparatif](/comparisons/studeia-vs-canvas). **Chunking** — Division d'un texte long en segments plus petits (chunks) pour l'embedding et le retrieval. Studeia utilise 800 tokens avec un overlap de 200. **Circuit Breaker** — Modèle de résilience qui ignore un provider externe lorsqu'il échoue de manière répétée. Studeia l'utilise pour la chaîne de fallback LLM (Claude → GPT → Grok → Gemini). **Concept Mastery** — Probabilité bayésienne (distribution Beta) qu'un apprenant maîtrise un concept spécifique. Calculée par le ConceptMasteryEngine via les interactions (chat + quiz + contenu interactif). **Cronbach's alpha** — Coefficient de cohérence interne d'un quiz/évaluation. Indique si les questions mesurent le même construit. > 0,7 est acceptable. Studeia le calcule automatiquement dans /quiz-analytics. ## D **DPA (Data Processing Agreement)** — Contrat RGPD/LGPD définissant les responsabilités en matière de traitement des données personnelles. Studeia propose un DPA standard pour les clients Enterprise. **Distractor Analysis** — Dans un quiz à choix multiples, analyse quelle mauvaise réponse est la plus souvent choisie — indice d'une idée reçue fréquente. ## E **E-learning (Enseignement à distance)** — Modalité d'apprentissage en ligne. Le terme brésilien « EAD » (Educação a Distância) est l'équivalent de « e-learning » ou « online learning » en anglais. **Embedding** — Représentation vectorielle d'un texte (1024 dimensions dans Studeia, générée via Voyage AI). Permet la recherche sémantique par similarité. **Enrollment** — Inscription. Lie un apprenant à un cours, éventuellement avec un ClassGroup. Studeia : statut active/completed/paused/cancelled. **EvaluationAgent** — Agent IA de Studeia (Haiku, arrière-plan, ~0,001 $/tour) qui classifie les réponses de l'apprenant dans le chat et détecte les idées reçues. ## F **Fallback Chain** — Séquence ordonnée de providers à essayer lorsque le principal échoue. Fallback LLM Studeia : Claude → OpenAI → xAI Grok → Google Gemini. **FAQPage Schema** — JSON-LD Schema.org pour les FAQ. Structure les questions/réponses pour la découverte par les LLMs et les AI Overviews de Google. Studeia le génère automatiquement pour toutes les pages de documentation. ## G **RGPD** — Règlement Général sur la Protection des Données (Europe). Studeia est conforme via DPA Enterprise. Équivalent européen de la LGPD brésilienne. **Gradebook** — Carnet de notes. Studeia : GradeCategory (avec pondérations) > GradeItem > Grade. **Guardian** — Responsable légal (parent/tuteur). Lié à un apprenant via GuardianLink (vérifié par SMS pour la conformité LGPD/ECA). ## H **Haiku (Claude Haiku)** — Modèle Claude le plus rapide et le moins coûteux. Studeia l'utilise pour les tâches en arrière-plan : détection d'idées reçues, génération de contenu, résumé de session, superviseur de chat. **Hreflang** — Attribut HTML indiquant la version dans une autre langue de la même page. Important pour le SEO multilingue. ## I **IMS Common Cartridge (IMS CC)** — Standard de packaging de contenu éducatif. Studeia importe via `POST /api/institution/courses/import`. **Inline Quiz** — Quiz interactif affiché dans le chat du tuteur IA. Studeia : le LLM génère le marqueur `[INLINE_QUIZ]...[/INLINE_QUIZ]` après avoir détecté une idée reçue, le client affiche le composant interactif. **Item Difficulty** — En psychométrie des tests, proportion d'apprenants ayant répondu correctement à une question. p < 0,3 = difficile ; p > 0,85 = facile. ## J **JIT Provisioning (Just-In-Time)** — Création automatique d'un utilisateur lors du premier login via SSO. Studeia le fait pour SAML et OIDC, en respectant les allowedDomains. **JSON-LD** — JavaScript Object Notation for Linked Data. Format W3C de schema markup. Utilisé dans Studeia pour le SEO/GEO (Article, FAQPage, BreadcrumbList) et les accréditations OB 3.0. ## K **Khan Academy** — Plateforme éducative gratuite (Khan Academy / Khanmigo AI tutor). B2C, axée sur son propre contenu. Studeia est B2B, axée sur le contenu de l'institution. Ils ne sont pas en concurrence directe. ## L **LGPD** — Lei Geral de Proteção de Dados (Loi 13.709/2018, Brésil). Loi brésilienne sur la protection des données personnelles, équivalente au RGPD européen. Studeia est nativement conforme : export de données Art. 18 IV, suppression Art. 18 VI, consentement explicite, DPA enterprise. [En savoir plus](/legal/lgpd-rights-guide). **LiveClass** — Cours en direct. Studeia supporte 4 providers : BBB (iframe), Zoom, Teams, Google Meet (tous externes). **llms.txt** — Standard émergent pour un « robots.txt pour les LLMs » — fichier markdown à la racine indiquant ce que chaque LLM peut explorer + curation de contenu pour les agents IA. [llmstxt.org](https://llmstxt.org). **LLM Router** — Service interne de Studeia qui sélectionne le provider+modèle selon le type de tâche, avec fallback automatique et metering. **LMS** — Learning Management System. Plateforme de gestion de l'apprentissage. Studeia, Moodle, Canvas, Blackboard, Google Classroom sont des LMS. **LTI (Learning Tools Interoperability)** — Standard 1EdTech pour l'intégration entre LMS et outils éducatifs. LTI 1.3 utilise OIDC + JWT. Studeia fonctionne comme tool provider dans Canvas, Moodle, Blackboard. ## M **Mastery** — Maîtrise d'un concept ou d'une compétence. Studeia calcule via ConceptMastery (bayésien). Les stratégies pédagogiques s'adaptent selon la maîtrise (< 0,3 = instruction directe, > 0,9 = défi). **Misconception** — Erreur conceptuelle d'un apprenant. Studeia la détecte via EvaluationAgent et la suit avec un cycle de vie en 3 états : active → resolving → resolved. **Moodle** — LMS open-source le plus utilisé au monde. Studeia le complète ou le remplace selon le cas. [Comparatif](/comparisons/studeia-vs-moodle). **MRR (Monthly Recurring Revenue)** — Revenu Mensuel Récurrent. Indicateur clé SaaS. L'admin global Studeia consulte le MRR dans /admin/finance. **Multi-tenant** — Architecture dans laquelle plusieurs institutions (Tenants) utilisent la même instance de la plateforme avec des données isolées. Studeia : filtre obligatoire par tenantId + RLS Supabase. ## N **Next.js** — Framework React full-stack. Studeia utilise Next.js 15 App Router. ## O **OB 3.0 (Open Badges 3.0)** — Standard W3C Verifiable Credential pour les accréditations éducatives. Studeia exporte les badges en OB 3.0 avec une page de vérification publique. **OIDC (OpenID Connect)** — Protocole d'authentification moderne basé sur OAuth 2.0. Studeia le supporte pour le SSO Enterprise. **Orchestrator (Agent IA)** — Agent coordinateur du pipeline multi-agents du tuteur IA de Studeia. TypeScript pur (zéro coût LLM). ## P **pgvector** — Extension PostgreSQL pour stocker et rechercher des vecteurs. Studeia l'utilise pour le RAG (1024 dimensions). **Point-biserial discrimination** — Corrélation item-total en psychométrie des tests. Indique dans quelle mesure une question distingue les bons apprenants des moins bons. > 0,4 est excellent. **Persona** — Configuration d'avatar IA. Feuille de route Studeia. **PromptTemplate** — Template de prompt LLM stocké en base de données. Personnalisable par tenantId, taskType, provider, locale, courseId. ## Q **QTI (Question and Test Interoperability)** — Standard 1EdTech pour l'interopérabilité des quiz. Studeia importe QTI 1.2 via IMS CC. **Quarantine (chat tuteur)** — Restriction temporaire d'utilisation du chat tuteur IA imposée par l'Agent Superviseur après 3 strikes (LOW/MEDIUM en 7 jours). 48h par défaut. L'apprenant peut faire appel. ## R **RAG (Retrieval Augmented Generation)** — Combine recherche vectorielle + LLM. Studeia l'utilise par tenant : chaque cours ingéré dispose de chunks isolés, le tuteur cite le matériel propre au cours. **Rate Limit** — Limite d'appels par période. Studeia : trois niveaux pour l'API publique (1000/5000/custom req/heure) via Redis. **Redis** — Base de données en mémoire. Studeia l'utilise pour le cache, la file d'attente (BullMQ), les classements (ZSET), le rate limiting, l'état du circuit breaker, les nonces OAuth. **Rubric** — Grille d'évaluation multi-critères. Studeia : critères avec pondérations + niveaux (1-5 ou personnalisé) + descriptions. ## S **SaaS** — Software as a Service. Studeia est un SaaS multi-tenant. **SAML 2.0** — Protocole SSO via XML. Studeia supporte SP-initiated et IdP-initiated via node-saml. **SCIM 2.0** — System for Cross-domain Identity Management (RFC 7644). Provisionnement automatique d'utilisateurs/groupes via IdP. Studeia : 14 endpoints, Bearer token chiffré. **SCORM** — Sharable Content Object Reference Model. Standard legacy de packaging de contenu. Studeia NE supporte PAS nativement (uniquement IMS CC). H5P/SCORM 2004 ne migrent pas automatiquement. **Slugs (Plan)** — Identifiants des plans B2B Studeia : `demo`, `mini`, `growth`, `pro_100`, `enterprise`. Plus legacy : `starter`, `professional`. **SRS (Spaced Repetition System)** — Algorithme de révision espacée (ex. : SM-2). Studeia l'utilise dans les flashcards et la révision adaptative. **SSO (Single Sign-On)** — Authentification unique pour plusieurs applications. Studeia : SAML, OIDC (plan Enterprise). **Strike (chat tuteur)** — Infraction modérée par l'Agent Superviseur. 3 strikes (LOW/MEDIUM en 7 jours) = mise en quarantaine. **Stripe** — Provider de paiement international. Studeia intègre Stripe (carte bancaire) + Asaas (PIX/boleto Brésil). **StudentMisconception** — Modèle de base de données qui suit les erreurs conceptuelles d'un apprenant avec un cycle de vie (active → resolving → resolved). ## T **Tenant** — Institution dans une architecture multi-tenant. Studeia : Tenant.id est un filtre obligatoire dans toutes les requêtes. **TenantApiKey** — Clés API LLM propres au tenant (Anthropic, OpenAI, etc.). Chiffrées AES-256-GCM en base de données. Lorsqu'elles sont configurées : les coûts sont imputés au compte du tenant, pas à celui de Studeia. **Triple JSON-LD stack** — Article + FAQPage + BreadcrumbList sur la même page. Génère +1,8x de citations dans les LLMs par rapport à Article seul. ## U **User-agent (crawlers IA)** — Identifiants des bots IA : GPTBot, OAI-SearchBot, ChatGPT-User (OpenAI), PerplexityBot, ClaudeBot, Claude-Web, anthropic-ai (Anthropic), Google-Extended, Bytespider. ## V **Vercel AI SDK** — SDK Node.js unifié pour plusieurs providers LLM. Studeia l'utilise dans tous les agents pour abstraire Claude/GPT/Grok/Gemini. **VideoProvider** — Provider de cours en direct. Studeia en supporte 4 : BBB, Zoom, Teams, Google Meet (adapter pattern). **Voyage AI** — Provider d'embeddings (alternative à OpenAI). Studeia utilise voyage-3 (1024 dims) comme primary. ## W **WCAG 2.1 AA** — Web Content Accessibility Guidelines niveau AA. Studeia est conforme : skip-to-content, focus-visible, haut contraste, navigation clavier, compatibilité lecteur d'écran. **Webhook** — Callback HTTP pour des événements. Studeia : webhooks de facturation (Stripe/Asaas), providers vidéo (Zoom/Teams), automatisations (public authentifié par token), notifications Graph (Teams). **White-label** — Plateforme sans la marque du fournisseur. Studeia le propose via domaine personnalisé + branding total + suppression de la marque Studeia (Enterprise). ## X **xAPI** — Experience API. Standard moderne pour le suivi de l'apprentissage. Feuille de route Studeia. **XP (Experience Points)** — Points d'expérience de la gamification. Studeia : configuration hiérarchique tenant→cours. ## Y **YAML frontmatter** — En-tête de configuration dans les fichiers markdown/TS. Les docs Studeia l'utilisent pour les métadonnées. ## Z **Zoom** — Plateforme de visioconférence. Studeia l'intègre comme provider vidéo via Server-to-Server OAuth. ## Voir aussi - [Présentation de la plateforme](/platform/overview) - [API publique](/api/overview) ## FAQ **Q: Qu'est-ce que le RAG ?** Retrieval Augmented Generation. Technique qui combine la recherche sémantique (RAG) avec la génération de texte via un LLM. Au lieu que le LLM invente des réponses, il recherche des extraits pertinents dans une base vectorielle et les utilise comme contexte. Studeia utilise le RAG par tenant afin que le tuteur IA cite le matériel propre au cours. **Q: Qu'est-ce qu'Open Badges 3.0 ?** Standard W3C Verifiable Credentials pour les accréditations éducatives. Remplace les certificats PDF par du JSON-LD vérifiable numériquement. Studeia exporte les badges au format OB 3.0 avec une page de vérification publique + compatible avec LinkedIn Add to Profile. --- # [fr-FR (AI-translated)] Intégration Asaas (PIX + boleto + carte Brésil) URL: https://docs.studeia.com/integrations/asaas Locale: fr-FR Section: integrations Updated: 2026-05-24 **Short answer:** Asaas est le provider de paiement brésilien de Studeia : PIX instantané (1,99% de frais), boleto (R$3,49), carte nationale (4,99% + R$0,49). Pour les clients BR, c'est moins cher et plus natif que Stripe. Webhooks fail-closed (503 si token absent). Customer split par provider (stripeCustomerId vs asaasCustomerId). Pour l'international : Stripe USD en parallèle. ## Configuration ### 1. Dashboard Asaas 1. https://asaas.com (ou sandbox : https://sandbox.asaas.com) 2. Paramètres > Intégrations > API > copiez l'Access Token 3. Paramètres > Webhooks > Ajouter : - URL : `https://[tenant].studeia.com/api/webhooks/asaas?token=` - Événements : PAYMENT_RECEIVED, PAYMENT_OVERDUE, PAYMENT_REFUNDED, SUBSCRIPTION_CREATED/UPDATED/DELETED 4. Personnalisez le token (chaîne aléatoire, cryptographiquement forte) ### 2. Variables d'environnement ``` ASAAS_API_KEY=$aact_... ASAAS_WEBHOOK_TOKEN=...généré-à-l-étape-3... ASAAS_SANDBOX=true # optionnel, défaut false ``` ### 3. Créer des produits dans Asaas Asaas utilise un modèle de facturation récurrente différent de Stripe. Dans Studeia, les plans sont mappés via un code (il n'est pas nécessaire de créer un produit dans le dashboard Asaas). ## Flux PIX ``` L'admin clique sur "Payer avec PIX" dans /institution/billing ↓ POST /api/institution/billing/checkout Body: { planSlug: "mini", provider: "asaas" } ↓ Studeia AsaasBillingProvider.createCheckout() : 1. Résout asaasCustomerId (crée si inexistant — POST /customers) 2. POST /subscriptions avec billingType=PIX 3. Asaas retourne QR Code + payload PIX copier-coller 4. Studeia retourne { url } page hébergée Asaas avec QR ↓ L'admin scanne le QR dans son application bancaire, paie ↓ PIX confirme en ~30s (instantané) ↓ Webhook PAYMENT_RECEIVED → applyWebhookEvent → promeut Tenant.plan ``` ## Durcissement (règles 138, 139) - **Fail-closed** : absence de la variable d'env ASAAS_WEBHOOK_TOKEN = 503 `asaas_not_configured` (règle 138). Anti-contournement. - **Validation du token** : query param ?token=<...> comparé avec l'env (comparaison timing-safe) - **5xx en cas d'échec** : nouvelles tentatives automatiques - **PaymentLog idempotent** : unique [provider, externalEventId] - **Expurgation des données personnelles** : rawPayload passe par redactPaymentPayload() — supprime cpfCnpj, email, name, address, billing_details (règle 139) ## Customer split par provider TenantSubscription dispose de champs séparés : - `stripeCustomerId` — pour Stripe - `asaasCustomerId` — pour Asaas - `externalCustomerId` — héritage (maintenu comme fallback si le provider correspond) `resolveCustomerIdForProvider()` dans [create-checkout.ts](apps/web/lib/billing/create-checkout.ts) utilise les nouveaux champs — NE JAMAIS réutiliser un ID cross-provider. ## Quand utiliser Asaas vs Stripe | Scénario | Recommandé | |---|---| | Client brésilien avec PIX | **Asaas** | | Client brésilien avec boleto | **Asaas** | | Client brésilien avec carte | **Asaas** (moins cher) ou Stripe | | Client international | **Stripe USD obligatoire** (Asaas bloqué) | | Grand compte entreprise enterprise | Stripe (plus d'outils — Sigma, rapports personnalisés) | ## Comparatif des frais | Méthode | Asaas | Stripe | |---|---|---| | PIX | 1,99% | Non proposé nativement | | Boleto | R$3,49 fixe | Non proposé nativement | | Carte de crédit | 4,99% + R$0,49 | 3,99% + R$0,59 (USD) | | Carte de débit | 1,99% + R$0,39 | Non proposé (BR) | | Anticipation des créances | Disponible | Non | Pour un volume B2B brésilien typique : Asaas est ~20-40% moins cher en frais totaux. ## Voir aussi - [Intégration Stripe](/integrations/stripe) - [Vue d'ensemble de la plateforme](/platform/overview) ## FAQ **Q: Pourquoi Asaas et non uniquement Stripe ?** Pour le marché brésilien : 95% des transactions B2B utilisent PIX (instantané, sans frais) ou boleto. Stripe ne dispose pas de PIX natif (proposé via des tiers plus coûteux). Asaas est brésilien, intègre PIX/boleto/carte nationale nativement avec des frais inférieurs (1,99% PIX, R$3,49 boleto, 4,99% carte + R$0,49 contre Stripe 3,99% + R$0,59). **Q: Studeia détecte-t-il automatiquement quel provider utiliser ?** Oui. getCurrencyFromHeaders() côté serveur via x-vercel-ip-country / cf-ipcountry : BR = Asaas proposé dans l'UI (PIX/boleto/carte). Hors BR = Stripe USD obligatoire (Asaas bloqué côté serveur avec 400 'asaas_not_for_international'). **Q: Les webhooks Asaas sont-ils sécurisés ?** Oui, mais avec durcissement. Token via query param ASAAS_WEBHOOK_TOKEN. Sans token configuré : le webhook renvoie 503 asaas_not_configured (fail-closed — règle 138). Idempotence via PaymentLog unique. Asaas effectue des nouvelles tentatives avec backoff en cas de 5xx. **Q: Puis-je tester Asaas en sandbox ?** Oui, Asaas dispose d'un environnement sandbox séparé : https://sandbox.asaas.com. Le token et la clé API sont distincts. Configurez ASAAS_SANDBOX=true dans l'env pour router vers l'endpoint sandbox. --- # [fr-FR (AI-translated)] Intégration BigBlueButton (BBB) — standard open-source pour les cours en direct URL: https://docs.studeia.com/integrations/bigbluebutton Locale: fr-FR Section: integrations Updated: 2026-05-24 **Short answer:** BigBlueButton (BBB) est le fournisseur vidéo PAR DÉFAUT de Studeia : open-source AGPL, embed iframe (l'élève reste DANS Studeia), fonctionnalités éducatives natives (tableau blanc collaboratif, breakout rooms, polls). Configuration : instance self-hosted OU provider BBB managé (20-200 USD/mois). Authentification via checksum SHA-256 (sans OAuth). Supporte ~150 élèves par serveur, mise à l'échelle via Scalelite. ## Pourquoi BBB est le choix par défaut | Aspect | BBB | Zoom/Teams/Meet | |---|---|---| | Coût | Open-source + hébergement (20-200 USD/mois) | 14-25 USD/hôte/mois (Zoom) ou inclus (M365/Google) | | Embed iframe | **Oui** (l'élève reste dans Studeia) | NON (X-Frame-Options bloque) | | Tableau blanc collaboratif | Oui, natif | Limité (Zoom Whiteboard, Microsoft Whiteboard) | | Breakout rooms | Oui, illimités | Oui (limites selon le forfait) | | Polls / Lever la main | Oui, natifs | Oui | | Statut emoji (d'accord/pas d'accord) | Oui, natif | Limité | | Enregistrement | Oui, natif BBB | Oui | | Multi-partage | Oui (plusieurs partages d'écran simultanés) | NON sur Zoom (1 à la fois) | ## Self-hosted vs Managé ### Self-hosted (recommandé pour les établissements de taille moyenne/grande) Prérequis (1 instance pour 150 utilisateurs) : - 16 cœurs CPU - 16 Go de RAM - 500 Go de disque (enregistrements) - Ubuntu 20.04 LTS - Domaine + TLS (Let's Encrypt) Installation via [bbb-install.sh](https://github.com/bigbluebutton/bbb-install) (~30 min). Coût : VPS 30-100 USD/mois (Hetzner, DigitalOcean, Vultr). ### Managé (plus simple pour les petits/moyens établissements) Providers mondiaux : - **BlindsideNetworks** (créateurs de BBB) : 50-500 USD/mois - **HigherEdLab** : 20-200 USD/mois - **EduMeet** / **Blindside Networks BBB hosting** Inclut : hébergement + mises à jour + sauvegarde + support. Facturation par utilisateurs simultanés. ## Configuration dans Studeia 1. Obtenir l'URL de l'instance BBB (ex : `https://bbb.ecole.edu/bigbluebutton/api`) 2. Obtenir le Shared Secret du serveur BBB (`bbb-conf --secret` sur le serveur) 3. Studeia > Paramètres > Fournisseur vidéo > BBB > Ajouter : - URL - Shared Secret - Définir comme défaut 4. Tester : Studeia appelle `/api/getMeetings` et valide la réponse ## Fonctionnement ``` L'admin/professeur crée un LiveClass (videoProvider=bbb ou null=default) ↓ Studeia BBBAdapter.createMeeting() → Checksum SHA-256 (BBB n'utilise pas OAuth) → GET https://bbb.../api/create?meetingID=...&checksum=... → Retourne meetingID + joinUrl ↓ L'élève accède via /live-classes/[id] → joinMethod=iframe — Studeia affiche l'iframe BBB DANS la page → L'élève ne quitte pas Studeia ``` ## Enregistrements BBB enregistre sur son propre serveur : - Format : format d'enregistrement BBB (propriétaire) ou MP4/WebM (via plugin) - URL : `https://bbb.../playback/presentation/2.3/[recordingId]` - Studeia sauvegarde recordingUrl dans LiveClass après notification webhook BBB ## Limitations - **Pas d'application mobile native BBB** — les élèves utilisent le navigateur mobile (fonctionnel mais non optimal) - **WebRTC** : l'élève doit utiliser un navigateur moderne (Chrome, Firefox, Edge, Safari 14+) - **Bande passante** : ~1 Mbps en téléchargement par élève (pour la vidéo). Vérifier la connexion de l'établissement - **Latence** : BBB est excellent en LAN, correct en WAN. Pour les élèves avec une connexion faible : délai possible > 500 ms ## Voir aussi - [Aperçu des cours en direct](/features/live-classes/overview) - [Intégration Zoom](/integrations/zoom) ## FAQ **Q: BigBlueButton est-il gratuit ?** Le logiciel est gratuit (open-source AGPL 3.0). Mais vous devez héberger une instance BBB (serveur dédié avec ~16 CPU + 16 Go de RAM pour ~150 élèves simultanés) OU souscrire à un provider BBB managé (20-200 USD/mois selon la taille). Sans hébergement/provider : BBB ne fonctionne pas. **Q: Pourquoi BBB est-il le fournisseur vidéo par défaut de Studeia ?** Trois raisons : (1) Open-source éducatif — fonctionnalités natives pour l'enseignement (tableau blanc collaboratif, breakout rooms, polls, lever la main, statut emoji). (2) Embed iframe — l'élève reste DANS Studeia, sans avoir à ouvrir un autre onglet (Zoom/Teams/Meet bloquent l'iframe via X-Frame-Options). (3) Pas de coût par réunion — une fois l'instance payée, c'est illimité. **Q: Comment configurer BBB dans Studeia ?** Paramètres > Fournisseur vidéo > BBB > URL (ex : https://bbb.ecole.edu/bigbluebutton/api) + Shared Secret (depuis le serveur BBB). Authentification via checksum SHA-256 (BBB n'utilise pas OAuth). Studeia teste la connexion via /api/getMeetings. **Q: BBB est-il adapté à 1000 élèves simultanés dans un cours ?** Une instance BBB classique supporte ~150 élèves par serveur. Pour >150 : configurez BBB Scalelite (load balancer + plusieurs instances). Pour >1000 simultanés : envisagez Zoom Webinar (limite 10 000 participants passifs) plutôt que BBB. --- # [fr-FR (AI-translated)] Intégration Canvas LMS via LTI 1.3 (Studeia comme tool provider) URL: https://docs.studeia.com/integrations/canvas-lti Locale: fr-FR Section: integrations Updated: 2026-05-24 **Short answer:** Studeia fonctionne comme LTI 1.3 tool provider dans Canvas LMS. Configuration : Admin > Developer Keys > LTI Key > coller le JSON généré depuis /institution/lti-tools de Studeia > activer le placement. Lancement OIDC + JWT/JWKS + AGS grade passback (notes synchronisées automatiquement dans Canvas Gradebook). Utile pour les universités sous Canvas souhaitant enrichir leurs cours avec Studeia (tuteur IA, gamification, mobile B2B) sans abandonner leur LMS principal. ## Prérequis - Plan Studeia avec LTI activé (Enterprise ou plans payants) - Rôle Admin Canvas (pour enregistrer une Developer Key) - HTTPS des deux côtés (LTI 1.3 exige TLS) ## Configuration ### 1. Studeia : générer la config LTI tool `/institution/lti-tools > New Tool` : - Tool name : "Canvas Production" - Target Link URI : `https://[tenant].studeia.com/lti/launch` - OIDC Login URI : `https://[tenant].studeia.com/lti/login` - Public JWKS URL : `https://[tenant].studeia.com/.well-known/jwks.json` - Studeia génère un Client ID + Deployment ID Studeia affiche le JSON de config complet (spec LTI 1.3) — copiez-le. ### 2. Canvas : enregistrer une Developer Key 1. Canvas Admin > Developer Keys > + Developer Key > **LTI Key** 2. Method : **Paste JSON** 3. Collez le JSON de config de l'étape 1 4. Save > ON (activer la key) 5. Copiez le **Client ID** généré par Canvas ### 3. Canvas : installer l'app sur le compte/cours 1. Account Admin > Settings > Apps > + App > **By Client ID** 2. Collez le Client ID 3. Configurez les placements : - Course Navigation (lien dans le menu latéral du cours) - Assignment Selection (créer un assignment Studeia) - Link Selection (lien dans des pages/modules) - User Navigation (lien dans le menu de l'utilisateur) ### 4. Valider Dans n'importe quel cours Canvas : menu latéral > Studeia tool > doit ouvrir Studeia connecté avec le même utilisateur (via OIDC launch). ## Fonctionnement ``` L'apprenant dans Canvas clique sur "Studeia Module" ↓ Canvas POST /lti/login?iss=... (Studeia OIDC Login endpoint) ↓ Studeia valide + retourne une redirection vers Canvas avec : - state (HMAC-signed) - nonce (Redis 15min anti-replay) ↓ Canvas redirige l'apprenant vers /lti/launch avec JWT id_token signé ↓ Studeia LtiService.launch() : 1. Valide la signature JWT via Canvas JWKS 2. Valide le nonce (anti-replay) 3. Valide iss, aud, exp, deployment_id 4. Extrait user_id, name, email, roles, context_id 5. JIT provisioning (crée l'utilisateur s'il n'existe pas — User.externalId = LTI sub) 6. Crée/met à jour l'Enrollment (mapping course_id) 7. Démarre la session Studeia (Supabase auth) ↓ Redirection vers le module/la leçon/le quiz indiqué (LtiLaunch.targetResource) ↓ L'apprenant utilise Studeia normalement ``` ## AGS grade passback Lorsqu'un apprenant termine une activité Studeia associée à un AGS line_item : ``` LessonCompletion / QuizAttempt se termine ↓ Studeia LtiAdvantageService.sendScore() : POST {issuer}/api/lti/courses/{courseId}/line_items/{itemId}/scores Body : { userId: lti.sub, scoreGiven: 85, scoreMaximum: 100, activityProgress: "Completed", gradingProgress: "FullyGraded", timestamp: now() } Auth : OAuth 2.0 Client Credentials grant (Studeia private key signe le JWT) ↓ Canvas met à jour le Gradebook automatiquement ``` Pas de double écriture — Canvas Gradebook reste source-of-truth. ## Names and Roles Provisioning Service (NRPS) La spec LTI 1.3 permet à Studeia de consulter la liste des apprenants du cours Canvas : ``` GET {nrps_url}/memberships Auth : Bearer (OAuth 2.0 Client Credentials) ``` Retourne le roster (apprenants + rôles). Utile pour pré-peupler les Enrollments avant le premier launch. ## Cas d'usage courants ### Université déjà sur Canvas souhaitant Studeia sur un cours spécifique 1. Le département d'Informatique décide d'utiliser Studeia pour CS101 (tuteur IA réel) 2. L'Admin Canvas ajoute le Studeia tool dans le cours CS101 3. Structure : Canvas gère les topics + assignments + gradebook. Studeia gère le tuteur IA + gamification + contenu interactif 4. Quizzes via Studeia → grade passback vers le Canvas Gradebook 5. Les autres cours Canvas continuent sans Studeia ### Migration progressive Canvas → Studeia 1. Ajouter Studeia LTI dans tous les cours 2. Nouveaux cours : créer directement dans Studeia, lien LTI dans Canvas comme point d'entrée 3. Cours legacy : maintenir dans Canvas, compléter avec Studeia 4. En 1-2 ans : évaluer le décommissionnement de Canvas ## Limitations - **Deep Linking 1.3** : Studeia prend en charge la sélection d'une ressource spécifique (module/leçon) lors de l'ajout du tool dans un assignment - **LTI Sub Manage** (sub-tenants) : non pris en charge nativement — chaque tenant Studeia = une Developer Key Canvas - **Intégration plagiat Canvas** : non via Studeia LTI (utiliser un plugin Canvas séparé) ## Dépannage ### Échec de validation JWT Vérifier que la JWKS URL Studeia est accessible publiquement : `curl https://[tenant].studeia.com/.well-known/jwks.json` doit retourner un JSON avec les clés. ### Le grade passback ne fonctionne pas Vérifier que le scope AGS est activé dans la Developer Key Canvas : `https://purl.imsglobal.org/spec/lti-ags/scope/score` + `lineitem.readonly` ou `lineitem`. ### L'apprenant voit "Tool unavailable" Nonce OIDC expiré (>15min) ou mismatch du state HMAC. Recharger la page Canvas. ## Voir aussi - [Use case : University](/use-cases/university) - [Integration Moodle LTI](/integrations/moodle-lti) ## FAQ **Q: Comment ajouter Studeia dans un cours Canvas ?** Studeia fonctionne comme LTI 1.3 tool provider. Dans Studeia : /institution/lti-tools > Generate Client ID + JWKS. Dans Canvas : Admin > Developer Keys > LTI Key > Method: Paste JSON > collez la config Studeia. Ensuite Admin > Settings > Apps > By Client ID > collez l'ID. Activer les placements : course navigation, assignment, etc. **Q: Les notes se synchronisent-elles automatiquement ?** Oui, via AGS (Assignment and Grade Service). Lorsqu'un apprenant termine une activité Studeia : le backend appelle POST {issuer}/api/lti/courses/{courseId}/line_items/{itemId}/scores. La note apparaît dans le Gradebook Canvas (Canvas reste source-of-truth). Pas de double écriture. **Q: Puis-je utiliser le tuteur IA Studeia dans Canvas ?** Oui. Lorsqu'un apprenant accède au lien LTI dans Canvas : l'OIDC launch valide le JWT + crée une session Studeia + redirige vers le module/la leçon. L'apprenant utilise le tuteur IA, la gamification, tout ce que Studeia propose — dans l'iframe Canvas (ou un nouvel onglet si l'iframe est bloqué). **Q: Quelles données Canvas envoie-t-il à Studeia via LTI ?** Conformément à la spec LTI 1.3 : user_id, name, email, roles (Learner/Instructor/Administrator), context_id (course_id Canvas), context_label/title (nom du cours), launch_presentation, resource_link_id. Plus les endpoints AGS pour le grade passback. Names and Roles pour lister les apprenants du cours (avec permission). --- # [fr-FR (AI-translated)] Intégration Google Meet (OAuth + Calendar API + Meet REST v2) URL: https://docs.studeia.com/integrations/google-meet Locale: fr-FR Section: integrations Updated: 2026-05-24 **Short answer:** Google Meet s'intègre en tant que fournisseur vidéo via OAuth 2.0 avec consentement administrateur + Calendar API (crée un événement avec lien Meet) + Meet REST API v2 (statut). Configuration ~15min via Google Cloud Console. Limitations : enregistrement/transcription démarrés MANUELLEMENT par l'hôte (Google n'expose pas d'API start_recording), endMeeting non pris en charge (l'adaptateur marque comme terminé localement), la fonctionnalité complète nécessite un Workspace payant. ## Configuration ### 1. Google Cloud Console 1. https://console.cloud.google.com > APIs & Services > Library 2. Activer **Google Calendar API** + **Google Meet REST API v2** 3. Credentials > OAuth 2.0 Client ID > Web application 4. URI de redirection autorisé : `https://[tenant].studeia.com/api/institution/video-provider/callback/google-meet` 5. Copiez le Client ID + Client Secret ### 2. Studeia 1. Paramètres > Fournisseur vidéo > Google Meet > Connecter 2. Collez le Client ID + Client Secret 3. Cliquez sur « Autoriser » — redirection vers le consentement administrateur Google OAuth 4. Acceptez les autorisations (administrateur du domaine Google Workspace) 5. Studeia stocke access_token + refresh_token chiffrés en AES-256-GCM ### 3. Valider Créez une LiveClass avec videoProvider=google_meet > Studeia appelle Calendar API > événement créé avec lien Meet > l'étudiant rejoint via joinMethod=external (nouvel onglet). ## Fonctionnement ``` Studeia GoogleMeetAdapter.createMeeting() → Calendar API: events.insert { summary: "Cours : Mathématiques - Géométrie", start: { dateTime: ... }, end: { dateTime: ... }, conferenceData: { createRequest: { requestId: uuid, conferenceSolutionKey: { type: "hangoutsMeet" } } }, attendees: [...etudiants.map(s => ({ email: s.email }))] } → Google retourne l'événement + hangoutLink (ex : https://meet.google.com/abc-defg-hij) ↓ Studeia enregistre LiveClass.providerJoinUrl = hangoutLink ↓ L'étudiant rejoint : joinMethod=external (X-Frame-Options bloque l'iframe) ``` ## Synchronisation des enregistrements Cron `/api/cron/recording-sync` toutes les 15min : 1. Liste les LiveClasses terminées depuis > 15min sans recordingUrl 2. Pour chacune, appelle `adapter.getRecordings(meetingId)` 3. Meet REST API v2 : `GET https://meet.googleapis.com/v2/conferenceRecords/{name}` 4. Si l'enregistrement est disponible : met à jour recordingUrl + crée LiveClassTranscription (si transcript) **Important** : l'enregistrement doit avoir été DÉMARRÉ par l'hôte pendant la réunion. Si l'hôte a oublié d'enregistrer : il n'y a aucun enregistrement à synchroniser. ## Refresh tokens Les tokens OAuth Google expirent toutes les heures. Studeia : - Met en cache access_token dans Redis (TTL 55min) - Avant chaque appel : vérifie l'expiration, rafraîchit via refresh_token si nécessaire - Si le rafraîchissement échoue : marque l'intégration comme inactive + notifie l'administrateur ## Limitations par rapport à Zoom/Teams | Fonctionnalité | Google Meet | Zoom | Teams | |---|---|---|---| | Créer une réunion via API | Oui (Calendar) | Oui | Oui (Graph) | | Terminer une réunion via API | NON | Oui | NON | | Démarrer l'enregistrement via API | NON | Oui | NON | | Récupérer l'enregistrement via API | Oui (Meet REST v2) | Oui (webhook) | Oui (Graph) | | Transcription automatique | Oui (Workspace Edu+) | Oui (VTT) | Oui (VTT) | | Webhook lifecycle | NON (uniquement via polling) | Oui | Oui (Graph Notifications) | ## Quand NE PAS utiliser Google Meet - ❌ Établissement sans Workspace payant (limite de 1h par réunion) - ❌ Enregistrement automatique sans dépendre du clic de l'hôte - ❌ Intégration en iframe souhaitée (Studeia + BBB résout ce problème) - ❌ Événements webhook de réunion souhaités (Google ne les expose pas — Studeia dépend du cron de polling) ## Voir aussi - [Google Workspace overview](/integrations/google-workspace) - [Cours en direct](/features/live-classes/overview) - [Intégration BBB](/integrations/bigbluebutton) ## FAQ **Q: Comment Studeia crée-t-il une réunion dans Google Meet ?** Via Google Calendar API. Studeia crée un événement Calendar avec conferenceData en demandant un lien Meet — Google génère l'URL automatiquement. Meet REST API v2 est utilisé pour consulter le statut et les enregistrements (lorsqu'ils sont disponibles). **Q: Google Meet propose-t-il l'enregistrement automatique ?** Uniquement via Google Workspace Business Standard+ ou Education Standard+. Même dans ce cas, l'enregistrement doit être démarré MANUELLEMENT par l'hôte dans Meet (Google n'expose pas d'API pour start_recording automatique). Studeia consulte les enregistrements via Calendar Events API + Drive API après la fin de la réunion. **Q: Puis-je utiliser Google Meet sans Workspace payant ?** Pour créer des réunions via API : un Workspace payant est nécessaire. Pour que les étudiants PARTICIPENT : n'importe qui peut rejoindre (y compris avec un compte @gmail.com personnel). Pour les établissements avec Workspace for Education Fundamentals (gratuit) : les réunions fonctionnent mais avec une limite de 1h par session. **Q: Le endpoint endMeeting fonctionne-t-il ?** NON. Google n'expose pas d'API pour terminer une réunion de façon programmatique. L'adaptateur de Studeia marque la réunion comme terminée localement (LiveClass.actualEndTime = now()) mais la réunion Google elle-même continue jusqu'à ce que le dernier participant parte ou que l'hôte clique sur « Terminer la réunion » manuellement. --- # [fr-FR (AI-translated)] Intégration Google Workspace (Drive + Calendar + SSO + Meet) URL: https://docs.studeia.com/integrations/google-workspace Locale: fr-FR Section: integrations Updated: 2026-05-24 **Short answer:** Studeia s'intègre avec Google Workspace sur 4 aspects : (1) SSO via OIDC avec OAuth 2.0 Client, (2) synchronisation bidirectionnelle Google Drive pour la bibliothèque multimédia, (3) synchronisation Google Calendar pour les cours en direct, (4) Google Meet comme fournisseur vidéo natif. Fonctionne avec Workspace for Education (y compris le niveau gratuit Fundamentals) et Workspace Business/Enterprise. Configuration ~30 minutes via Google Cloud Console + Settings > Integrations dans Studeia. ## 4 points d'intégration ### 1. SSO via OIDC **Configuration** : 1. Google Cloud Console > APIs & Services > Credentials > Create Credentials > OAuth 2.0 Client ID 2. Application type : Web application 3. Authorized redirect URI : `https://[tenant].studeia.com/api/auth/sso/[slug]/oidc/callback` 4. Copiez le Client ID + Client Secret 5. Studeia > Settings > SSO > Add Provider > OIDC 6. Discovery URL : `https://accounts.google.com/.well-known/openid-configuration` (récupération automatique) 7. Allowed domains : ex. : `@ecole.edu.fr` (protection contre les comptes fantômes) Le provisionnement JIT crée automatiquement l'utilisateur lors de la première connexion. Attributs mappés : name, email, role. ### 2. Synchronisation Google Drive (bibliothèque multimédia) **Configuration** : 1. Google Cloud Console > APIs > Activer **Drive API** 2. Même OAuth Client (ou en créer un dédié) 3. Scopes : `https://www.googleapis.com/auth/drive.file` (accès aux fichiers créés par Studeia) ou `drive` (accès complet — si nécessaire) 4. Studeia > Settings > Integrations > Google Drive > Connect 5. Flux de consentement administrateur (OAuth admin du domaine) 6. Studeia stocke les tokens chiffrés en AES-256-GCM **Fonctionnalités** (DriveIntegration + DriveSyncEngine) : - **Import** : dossier Drive → MediaAsset dans Studeia - **Export** : MediaAsset → dossier Drive - **Sync** : bidirectionnel (les modifications des deux côtés se reflètent mutuellement) - **Backup** : snapshot complet des MediaAssets dans un dossier Drive Le cron `/api/cron/drive-sync` s'exécute périodiquement (configuré par l'administrateur) et synchronise les intégrations actives. ### 3. Google Calendar (cours en direct) **Configuration** : même OAuth Client, activer **Calendar API**. **Fonctionnalités** : - Lorsqu'un administrateur crée un LiveClass dans Studeia → un événement Calendar est créé pour tous les élèves de la classe - Modification de l'horaire → mise à jour de l'événement Calendar - Annulation → suppression de l'événement - L'élève voit le cours dans son Google Calendar sur mobile (notifications natives) ### 4. Google Meet (fournisseur vidéo) **Configuration** : 1. Google Cloud Console > APIs > Activer **Calendar API** + **Meet REST API v2** 2. OAuth 2.0 Client (le même que précédemment) 3. Studeia > Settings > Video Provider > Google Meet > Connect 4. Flux de consentement administrateur **Fonctionnement** : - LiveClass créé avec videoProvider=google_meet - Studeia crée un événement Calendar avec conferenceData (génère automatiquement le lien Meet) - L'élève rejoint via joinMethod=external (nouvel onglet, ouvre l'application/le site Meet) **Limitation** : endMeeting non pris en charge via API — l'adaptateur marque la session comme terminée localement. **Limitation** : l'enregistrement/la transcription doit être lancé manuellement par l'hôte (Google n'expose pas d'API pour démarrer l'enregistrement automatiquement). ## Configuration complète (30 minutes) | Étape | Durée | |---|---| | 1. Activer les 4 APIs dans Google Cloud Console | 5 min | | 2. Créer un OAuth 2.0 Client (web app) | 3 min | | 3. Configurer le SSO dans Studeia | 5 min | | 4. Connecter Drive + Calendar + Meet dans Studeia | 10 min | | 5. Valider avec 1 utilisateur test | 5 min | | 6. Informer les enseignants/élèves | 2 min | ## Dépannage ### Erreur « Token expired » Les tokens OAuth Google expirent toutes les heures. Studeia stocke le `refreshToken` et le renouvelle automatiquement. Si l'erreur persiste : ré-autoriser via Settings > Integrations > Disconnect + Reconnect. ### Synchronisation Drive lente L'API Drive a des quotas (1 000 req/100s/utilisateur). Pour plus de 5 000 fichiers par heure, envisagez : - De filtrer des dossiers spécifiques (pas la racine entière) - D'augmenter l'intervalle du cron (ex. : toutes les 2h au lieu de 30 min) ### Meet sans bouton « Enregistrer » Seul l'hôte (organisateur de la réunion) peut lancer l'enregistrement. Studeia définit organizer = enseignant configuré. Si un autre utilisateur a lancé la réunion : Meet bloque l'enregistrement. ## Considérations RGPD - Tokens OAuth chiffrés AES-256-GCM (règle critique 15) - OAuth state HMAC-SHA256 + nonce Redis 15 min (anti-replay) - La synchronisation Drive respecte les scopes minimaux (drive.file recommandé vs drive complet) ## Voir aussi - [SSO Enterprise](/platform/sso-enterprise) - [Cours en direct](/features/live-classes/overview) - [Intégration Microsoft 365](/integrations/microsoft-365) ## FAQ **Q: Studeia s'intègre-t-il avec Google Workspace ?** Oui, sur 4 aspects : (1) SSO via OIDC — les élèves/enseignants se connectent avec leur compte Google. (2) Synchronisation Google Drive — bibliothèque multimédia bidirectionnelle (un upload sur Drive apparaît dans Studeia, et vice-versa). (3) Google Calendar — les cours en direct de Studeia se synchronisent avec le Calendar de l'élève. (4) Google Meet — fournisseur vidéo natif pour les cours en direct (en plus de BBB/Zoom/Teams). **Q: Fonctionne-t-il avec Google Workspace for Education ?** Oui. Pour le K-12 avec Workspace Edu Fundamentals (gratuit) : le SSO fonctionne, mais les limites d'API peuvent affecter la synchronisation Drive à grande échelle. Pour Workspace Business/Enterprise : sans limites pratiques. Procédure : configurer un OAuth 2.0 Client dans Google Cloud Console > APIs > Calendar API + Drive API + Meet REST API v2, autoriser le flux de consentement administrateur, copier le Client ID + Secret dans Studeia Settings > Integrations. **Q: Puis-je restreindre Studeia aux utilisateurs d'un domaine Google spécifique ?** Oui. Configurez « Allowed domains » dans Settings > SSO (ex. : @ecole.edu.fr). Les connexions provenant d'autres domaines sont rejetées lors de la création JIT. Protection contre les comptes fantômes. **Q: Qui paie pour Google Meet ?** L'école/l'entreprise qui paie déjà Google Workspace (Meet inclus). Studeia ne facture rien de plus pour l'utilisation de Meet. La limite de durée dépend du niveau Workspace (Business Standard = 24h, Education Fundamentals = 1h). --- # [fr-FR (AI-translated)] Intégration Microsoft 365 (Teams + Graph API + Azure AD SSO + OneDrive) URL: https://docs.studeia.com/integrations/microsoft-365 Locale: fr-FR Section: integrations Updated: 2026-05-24 **Short answer:** Studeia s'intègre avec Microsoft 365 sur 4 aspects : (1) SSO Enterprise via Azure AD (SAML 2.0, OIDC, SCIM 2.0 avec mapping groupe→cours pour l'inscription automatique). (2) Microsoft Teams comme fournisseur vidéo pour les cours en direct via Graph API. (3) Synchronisation bidirectionnelle OneDrive dans la bibliothèque de médias. (4) Synchronisation du calendrier Outlook. Fonctionne avec Microsoft 365 A1/A3/A5 (Education) ou Business/Enterprise. ## 4 points d'intégration ### 1. Azure AD SSO (SAML / OIDC) **Configuration OIDC** (recommandée) : 1. Azure Portal > Azure Active Directory > App registrations > New registration 2. Redirect URI : `https://[tenant].studeia.com/api/auth/sso/[slug]/oidc/callback` 3. Certificates & secrets > New client secret 4. API permissions : `openid`, `profile`, `email` 5. Studeia > Settings > SSO > Add Provider > OIDC 6. Discovery URL : `https://login.microsoftonline.com/{tenantId}/v2.0/.well-known/openid-configuration` 7. Client ID + Client Secret de l'étape 3 **Allowed domains** : `@ecole.edu.fr` (anti-comptes fantômes). Provisionnement JIT + attributs mappés via `SsoAttributeMapping`. ### 2. SCIM 2.0 (provisionnement automatique) **Configuration** : 1. Azure Portal > Enterprise Applications > Studeia > Provisioning 2. Provisioning Mode : **Automatic** 3. Tenant URL : `https://[tenant].studeia.com/api/scim/v2` 4. Secret Token : généré dans Studeia > Settings > SSO > SCIM Token (chiffré AES-256-GCM) 5. Test Connection 6. Mappings : défaut Microsoft Graph (firstName, lastName, mail, displayName, accountEnabled, groups) 7. Scope : "Sync only assigned users and groups" 8. Settings : intervalle de cycle = 40 minutes (défaut) 9. Démarrer le provisionnement **Mapping groupe → cours** : Settings > SSO > Groups. Mappez un groupe AD (ex : "Ingénierie 2026.1") à un cours dans Studeia. Lorsque l'AD ajoute un utilisateur au groupe, Studeia l'inscrit automatiquement. **Grands groupes** (>50 membres) : traités via BullMQ async (queue `scim-group-sync`), réponse 202 + jobId. ### 3. Microsoft Teams (fournisseur vidéo) **Configuration** : 1. Azure AD > App registration > API Permissions > Microsoft Graph : - `OnlineMeetings.ReadWrite.All` - `OnlineMeetingRecording.Read.All` - Type : Application (non Delegated) 2. Admin consent (nécessite Global Administrator) 3. Studeia > Settings > Video Provider > Teams > Tenant ID + Client ID + Client Secret + e-mail de l'organisateur 4. Auth : flux Client Credentials (sans utilisateur interactif) **Webhook** : `/api/webhooks/video/teams` avec Graph Change Notifications. Validation de l'abonnement via retour `validationToken`. **Limitation** : endMeeting non supporté via Graph API — l'adaptateur marque la réunion comme terminée localement. ### 4. Synchronisation OneDrive (bibliothèque de médias) Même fonctionnement que l'intégration Drive : - Modèle DriveIntegration avec provider=onedrive - Tokens OAuth chiffrés AES-256-GCM - Cron `/api/cron/drive-sync` synchronise périodiquement - Opérations : import / export / synchronisation bidirectionnelle / sauvegarde ## Configuration complète (1 à 2 heures) | Étape | Durée | |---|---| | 1. Azure AD App registration | 10 min | | 2. Configurer les permissions API + admin consent | 10 min | | 3. SSO OIDC dans Studeia | 5 min | | 4. Provisionnement SCIM | 30-45 min | | 5. Fournisseur Teams | 10 min | | 6. Intégration OneDrive | 10 min | | 7. Tester avec 5 utilisateurs pilotes | 10 min | ## Dépannage ### "AADSTS50011: Reply URL mismatch" L'URI de redirection dans Azure AD ne correspond pas à celle configurée dans Studeia. Vérifier la correspondance exacte (sensible à la casse). ### SCIM "User not found in directory" L'utilisateur a été retiré du groupe dans l'AD mais Studeia y fait toujours référence. Attendre le prochain cycle (40 min) ou déclencher manuellement via Provisioning > Provision on demand. ### La réunion Teams se crée mais sans audio L'e-mail de l'organisateur dans la configuration Studeia ne dispose pas d'une licence Teams active. Vérifier dans le centre d'administration Microsoft 365. ## RGPD - Tokens OAuth chiffrés AES-256-GCM (règle 15) - Token Bearer SCIM chiffré (règle 85) - Audit complet via ScimAuditLog (règle 89) - DPA Microsoft applicable pour les entreprises européennes ## Voir aussi - [SSO Enterprise](/platform/sso-enterprise) - [Cours en direct](/features/live-classes/overview) - [Intégration Google Workspace](/integrations/google-workspace) ## FAQ **Q: Studeia s'intègre-t-il avec Microsoft 365 ?** Oui. (1) SSO Enterprise via Azure AD (SAML 2.0 OU OIDC + SCIM 2.0 pour le provisionnement automatique). (2) Microsoft Teams comme fournisseur vidéo pour les cours en direct via Graph API. (3) Synchronisation OneDrive dans la bibliothèque de médias (même fonctionnement que Google Drive). (4) Synchronisation du calendrier Outlook pour les cours en direct via Graph API. **Q: Fonctionne-t-il avec Microsoft 365 A1 (Education gratuit) ?** Oui pour SSO + Teams + OneDrive. Les limites de l'API Graph peuvent affecter SCIM à grande échelle (>1000 utilisateurs). Il est recommandé d'utiliser A3/A5 pour les établissements de taille moyenne/grande souhaitant un provisionnement robuste. **Q: Combien de temps prend la configuration SCIM avec Azure AD ?** 1 à 2 heures. Azure Portal > Enterprise Applications > Add app > 'Studeia' (catalogue ou personnalisé) > Provisioning > Mode : Automatic > Tenant URL : https://[tenant].studeia.com/api/scim/v2 > Secret Token (généré dans Studeia Settings > SSO > SCIM Token) > mappings par défaut (compatible Microsoft Graph) > Démarrer le provisionnement. **Q: Puis-je utiliser Teams comme fournisseur et continuer à utiliser Zoom pour certains cours ?** Oui. Configurez les deux fournisseurs dans Settings > Video Provider. Pour chaque LiveClass, l'administrateur choisit quel fournisseur utiliser (LiveClass.videoProvider remplace le fournisseur par défaut du tenant). --- # [fr-FR (AI-translated)] Intégration Moodle LMS via LTI 1.3 (Studeia comme outil externe) URL: https://docs.studeia.com/integrations/moodle-lti Locale: fr-FR Section: integrations Updated: 2026-05-24 **Short answer:** Studeia s'intègre à Moodle via LTI 1.3 (Moodle 3.10+). Configuration : Site administration > Plugins > External tool > Manage tools > Add tool > coller l'URL + Client ID Studeia. OIDC launch + AGS grade passback (notes synchronisées dans le Gradebook Moodle). Utile quand l'établissement conserve Moodle comme LMS principal et ajoute Studeia (tuteur IA, gamification, mobile B2B) sur des cours spécifiques. Pour migration complète Moodle → Studeia : utiliser IMS CC import (pas LTI). ## Prérequis - Moodle 3.10+ (LTI 1.3 natif) - Studeia avec LTI activé (Enterprise ou plans payants) - Rôle administrateur Moodle - HTTPS des deux côtés ## Configuration ### 1. Studeia : générer la configuration de l'outil LTI `/institution/lti-tools > New Tool` : - Nom de l'outil : "Moodle Production" - Target Link URI : `https://[tenant].studeia.com/lti/launch` - OIDC Login URI : `https://[tenant].studeia.com/lti/login` - Public JWKS URL : `https://[tenant].studeia.com/.well-known/jwks.json` - Studeia génère un Client ID + Deployment ID ### 2. Moodle : enregistrer l'outil 1. Site administration > Plugins > Activity modules > External tool > **Manage tools** 2. **+ configure a tool manually** 3. Nom de l'outil : "Studeia" 4. URL de l'outil : de l'étape 1 5. Version LTI : **LTI 1.3** 6. Type de clé publique : **Keyset URL** > URL : JWKS Studeia 7. Initiate login URL : de l'étape 1 8. Redirection URI(s) : de l'étape 1 9. Utilisation de la configuration de l'outil : **Show as preconfigured tool when adding an external tool** 10. Services > Assignment and Grade Services : **Use this service for grade sync and column management** 11. Services > Names and Role Provisioning : **Use this service to retrieve members information** 12. Enregistrer ### 3. Ajouter dans un cours 1. Cours Moodle > **Turn editing on** > Add an activity > **External tool** 2. Outil préconfiguré : **Studeia** 3. Nom de l'activité : "Module Studeia - CS101" 4. Enregistrer L'apprenant clique sur le lien > lancement OIDC > Studeia connecte via JWT > redirection vers le module. ## Fonctionnement Identique au Canvas LTI (même spécification LTI 1.3) : ``` L'apprenant clique sur "Module Studeia" dans le cours Moodle ↓ Moodle POST /lti/login (Studeia OIDC Login) ↓ Studeia valide + redirige avec state + nonce ↓ Moodle redirige l'apprenant vers /lti/launch avec JWT id_token ↓ Studeia LtiService.launch() : 1. Valide le JWT via Moodle JWKS (récupéré automatiquement) 2. Valide le nonce (Redis 15min anti-rejeu) 3. Provisionnement JIT (User avec User.externalId = LTI sub) 4. Crée une Enrollment si nécessaire 5. Initialise la session Studeia ↓ Redirection vers le module/la leçon ``` ## Renvoi de notes AGS ``` L'apprenant complète un quiz Studeia ↓ LtiAdvantageService.sendScore() → POST score ↓ Gradebook Moodle mis à jour ``` ## Quand utiliser LTI vs IMS CC | Scénario | Recommandé | |---|---| | Conserver Moodle, compléter avec Studeia dans des cours pilotes | **LTI** | | Migrer TOUT de Moodle vers Studeia | **Import IMS CC** (POST /api/institution/courses/import) | | Un département teste Studeia avant une décision institutionnelle | **LTI** | | Moodle sera arrêté dans 6-12 mois | **Import IMS CC** + parallèle pendant la migration | ## Avantages LTI vs migration totale ✅ L'apprenant utilise le SSO Moodle existant (Shibboleth, OIDC institutionnel) ✅ Le Gradebook Moodle reste la source de vérité ✅ Pas besoin de migrer les apprenants / cours / historique ✅ Réversible facilement — supprimer l'outil Moodle = retour à l'état précédent ✅ Par cours (uniquement les cours sélectionnés, pas toute l'institution) ## Limitations - **Performance** : chaque lancement LTI prend ~500-1000ms (validation JWT + initialisation Studeia) - **Expérience SSO** : l'apprenant fait 1 clic dans Moodle, 1-2s plus tard il est dans Studeia (pas instantané) - **Activités Moodle Workshop** : non mappables vers Studeia (à recréer manuellement) - **Plugins Moodle personnalisés** : non appelés via LTI Studeia ## Voir aussi - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) - [Canvas LTI](/integrations/canvas-lti) - [Cas d'usage : Université](/use-cases/university) ## FAQ **Q: Studeia fonctionne-t-il comme outil dans Moodle ?** Oui, via la spécification LTI 1.3 (même standard utilisé dans Canvas, Blackboard, Brightspace). Configuration dans Moodle : Site administration > Plugins > Activity modules > External tool > Manage tools > Add tool > collez l'URL de l'outil Studeia. Fonctionne avec Moodle 3.10+ (LTI 1.3 supporté nativement). **Q: Puis-je utiliser Studeia dans un cours Moodle MEC (e-Proinfo) ?** Oui, si l'installation Moodle accepte les plugins externes via LTI. Certaines installations gouvernementales bloquent les outils externes pour des raisons de sécurité/conformité — vérifier avec l'administrateur informatique du réseau éducatif. **Q: Les notes Studeia sont-elles renvoyées dans le Gradebook Moodle ?** Oui, via AGS (Assignment and Grade Service) — même mécanisme que Canvas. Studeia effectue un POST {issuer}/api/lti/courses/{courseId}/line_items/{itemId}/scores lorsque l'apprenant complète une activité. Le Gradebook Moodle est mis à jour. **Q: Puis-je migrer un cours entier de Moodle vers Studeia plutôt qu'utiliser LTI ?** Oui. Moodle exporte les cours en IMS Common Cartridge (IMS CC v1.x). Studeia importe via POST /api/institution/courses/import. LTI est destiné aux CAS où vous souhaitez conserver Moodle comme LMS principal + ajouter les fonctionnalités Studeia (tuteur IA, gamification) dans des cours spécifiques. Pour une migration totale : utilisez l'import IMS CC. --- # [fr-FR (AI-translated)] Intégration Stripe (checkout + webhooks + portail de billing) URL: https://docs.studeia.com/integrations/stripe Locale: fr-FR Section: integrations Updated: 2026-05-24 **Short answer:** Stripe est le provider de paiement B2B international de Studeia. Checkout self-service via Stripe Checkout Session, webhooks idempotents (HMAC SHA-256 + garde d'ordonnancement via lastEventAt) pour le cycle de vie des abonnements, portail Stripe self-manage pour que l'admin change de plan/carte, double devise BRL + USD détectée par géolocalisation. Pour PIX/boleto au Brésil : Asaas (intégration parallèle). ## Configuration ### 1. Tableau de bord Stripe 1. https://dashboard.stripe.com > Developers > API Keys > copiez la Secret Key 2. Webhooks > Add endpoint > URL : `https://[tenant].studeia.com/api/webhooks/stripe` 3. Events to send : - `checkout.session.completed` - `customer.subscription.created` - `customer.subscription.updated` - `customer.subscription.deleted` - `invoice.payment_succeeded` - `invoice.payment_failed` 4. Copiez le Webhook signing secret ### 2. Créer les produits + prices Pour chaque plan B2B de Studeia (mini, growth, pro_100) : 1. Products > Add product > nom (ex : "Studeia Mini") 2. Pricing : Recurring monthly + BRL R$ 250,00 3. Copiez le price_id (ex : `price_1TZk...`) 4. Répétez pour USD si vous souhaitez prendre en charge les clients internationaux ### 3. Variables d'environnement ``` STRIPE_SECRET_KEY=sk_live_... STRIPE_WEBHOOK_SECRET=whsec_... STRIPE_PRICE_MINI=price_... STRIPE_PRICE_GROWTH=price_... STRIPE_PRICE_PRO_100=price_... STRIPE_PRICE_MINI_USD=price_... STRIPE_PRICE_GROWTH_USD=price_... STRIPE_PRICE_PRO_100_USD=price_... ``` ## Flux de checkout ``` L'admin clique sur "Souscrire Mini" dans /institution/billing ↓ POST /api/institution/billing/checkout Body: { planSlug: "mini" } ↓ Studeia createCheckoutSession() (lib/billing/create-checkout.ts) : 1. resolveCustomerIdForProvider() — récupère/crée stripeCustomerId 2. Détecte la devise via getCurrencyFromHeaders() (côté serveur, anti-fraude) 3. Stripe Checkout Session avec line_items=[price_id correct] 4. Retourne { url } du Stripe Checkout ↓ Le frontend redirige : window.location.href = data.url ↓ L'admin paie sur Stripe Checkout ↓ Stripe envoie le webhook checkout.session.completed ↓ Studeia applyWebhookEvent() : 1. Valide la signature HMAC 2. stripe.subscriptions.retrieve(subscriptionId) — toujours re-fetch (ne fait pas confiance aux métadonnées) 3. Valide le price_id contre la liste blanche 4. Vérification croisée du tenantId entre session.metadata et subscription.metadata 5. Crée/met à jour TenantSubscription avec currentPeriodEnd RÉEL 6. Promeut Tenant.plan 7. Crée PaymentLog (idempotent via [provider, externalEventId]) ``` ## Durcissement (règles 129-139) - **Le webhook retourne 5xx en cas d'échec** : Stripe réessaie pendant 3 jours - **Garde d'ordonnancement** : `lastEventAt` + `lastEventId` dans TenantSubscription. Les événements hors ordre sont ignorés avec avertissement + PaymentLog - **Idempotence** : unique [provider, externalEventId] dans PaymentLog - **Schéma Zod** : `z.enum(PAID_PLAN_SLUGS)` dans le body du checkout (anti-typo) - **Suppression des PII** : PaymentLog.rawPayload passe par `redactPaymentPayload()` (supprime email/name/address/billing_details/cpfCnpj/card.last4 avant persistance) - **Blocage past_due** : `isAccessBlocked(status)` dans les layouts (remplace `status === "suspended"`). Le cron `/api/cron/billing-grace-expire` effectue la transition après une période de grâce de 7 jours ## Portail Stripe self-manage POST `/api/institution/billing/portal` retourne l'URL temporaire du portail Stripe : - L'admin change de plan (upgrade/downgrade) - Met à jour sa carte - Consulte les factures - Annule l'abonnement - Sans passer par le support Studeia ## Multi-devise | Aspect | BRL | USD | |---|---|---| | Détection | Par défaut | En-tête x-vercel-ip-country / cf-ipcountry | | Price IDs | STRIPE_PRICE_MINI, _GROWTH, _PRO_100 | STRIPE_PRICE_MINI_USD, _GROWTH_USD, _PRO_100_USD | | Fallback Asaas | Oui (PIX/boleto) | NON (Asaas est Brésil uniquement) | | Webhook | Même endpoint | Même endpoint | ## Voir aussi - [Intégration Asaas (PIX)](/integrations/asaas) - [Présentation de la plateforme](/platform/overview) ## FAQ **Q: Stripe est-il le moyen par lequel Studeia reçoit le paiement des abonnements mensuels ?** Oui, pour le B2B international/carte. Le plan est sélectionné dans /institution/billing > Studeia appelle POST /api/institution/billing/checkout qui crée une Stripe Checkout Session > l'admin paie > le webhook subscription.activated promeut tenant.plan automatiquement. Pour PIX/boleto au Brésil : utilisez Asaas (intégration parallèle). **Q: Les webhooks Stripe sont-ils fiables ?** Oui, mais Studeia les traite de manière défensive. (1) Vérifie le HMAC SHA-256 via l'en-tête stripe-signature avec STRIPE_WEBHOOK_SECRET. (2) Stripe réessaie pendant 3 jours avec backoff en cas de 5xx. (3) Idempotence via un [provider, externalEventId] unique dans PaymentLog. (4) Garde d'ordonnancement via lastEventAt/lastEventId — les événements hors ordre sont ignorés avec un avertissement. (5) checkout.session.completed effectue toujours stripe.subscriptions.retrieve() pour valider (ne fait pas confiance aux métadonnées). **Q: Studeia supporte-t-il la devise USD pour les clients hors du Brésil ?** Oui. STRIPE_PRICE_IDS (BRL) + STRIPE_PRICE_IDS_USD (USD) configurables via des variables d'environnement. Détecte la devise côté serveur via l'en-tête x-vercel-ip-country / cf-ipcountry. Les clients hors du Brésil voient automatiquement les prix en USD. **Q: Puis-je utiliser le Stripe Customer Portal pour le self-service ?** Oui. POST /api/institution/billing/portal retourne l'URL du portail Stripe — l'admin change de plan, met à jour sa carte, consulte les factures, annule. Sans avoir à passer par le support. --- # [fr-FR (AI-translated)] Intégration Zapier / Make (via webhook + API publique) URL: https://docs.studeia.com/integrations/zapier-and-make Locale: fr-FR Section: integrations Updated: 2026-05-24 **Short answer:** Studeia s'intègre avec Zapier, Make (Integromat), n8n et toute plateforme no-code via 2 mécanismes : (1) Les automations natives de Studeia déclenchent send_webhook vers une URL externe lors d'un événement (course_completed, quiz_submitted, etc.) — Zapier 'Catch Hook' reçoit. (2) La plateforme externe appelle l'API publique de Studeia (64+ endpoints, Bearer auth, scopes granulaires) pour créer/mettre à jour des ressources. Pas d'app officielle Zapier (roadmap 2026 H2) — utiliser 'Webhooks by Zapier' générique. ## 2 directions d'intégration ### Direction 1 : Studeia → Zapier (les événements Studeia déclenchent un workflow externe) Cas d'usage : un apprenant termine un cours → créer un lead Salesforce + notifier un canal Slack + envoyer le certificat par e-mail personnalisé. **Configuration** : 1. Zapier > New Zap > Trigger : **Webhooks by Zapier** > Catch Hook 2. Zapier génère une URL : `https://hooks.zapier.com/hooks/catch/.../...` 3. Dans Studeia : `/institution/automations > New Automation` 4. Trigger : événement `course_completed` 5. Conditions (optionnel) : `event.score >= 80` 6. Action : `send_webhook` > Méthode : POST > URL : URL du hook Zapier 7. Body (interpolation de template) : ```json { "studentName": "{{user.name}}", "studentEmail": "{{user.email}}", "courseId": "{{event.courseId}}", "completedAt": "{{event.completedAt}}", "score": "{{event.score}}" } ``` 8. Enregistrer l'automatisation 9. Zapier > Test trigger > terminer un cours dans Studeia > Zapier reçoit le payload 10. Continuer le Zap : ajouter des actions (Salesforce, Slack, Gmail, etc.) **Événements disponibles** : lesson_completed, module_completed, course_completed, quiz_submitted, enrollment_created, enrollment_completed, forum_post_created, forum_reply_created, grade_posted, announcement_created, live_class_started, student_inactive, tag_added_to_user, tag_removed_from_user. ### Direction 2 : Zapier → Studeia (créer/mettre à jour des ressources via API) Cas d'usage : nouveau lead dans HubSpot → créer un utilisateur apprenant + l'inscrire au cours de bienvenue. **Configuration** : 1. Dans Studeia : `/institution/settings/api-keys > Create` > scopes : `users:write`, `enrollments:write` 2. Copiez la clé (format `mia_` + 40 hex) — affichée UNE SEULE FOIS 3. Dans Zapier : - Trigger : HubSpot 'New Contact' - Action : **Webhooks by Zapier** > POST - URL : `https://[tenant].studeia.com/api/institution/users` - Headers : - `Authorization: Bearer mia_...` - `Content-Type: application/json` - `Accept-Language: fr-FR` - Body JSON : ```json { "name": "{{contact.name}}", "email": "{{contact.email}}", "role": "student", "sendInvite": true } ``` 4. Continuer le Zap : une autre Action POST vers `/api/institution/enrollments` avec courseId ## Rate limiting La clé API Studeia dispose d'un rate limit par niveau : - Standard : 1 000 req/heure - High : 5 000 req/heure - Custom : configurable Headers de réponse : `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`. En cas de dépassement : 429 + `Retry-After`. Zapier respecte automatiquement le Retry-After. Pour les volumes élevés : augmentez le niveau de rate limit ou utilisez les opérations batch. ## Prévention SSRF (limitation) Le webhook de Studeia bloque les IP privées (10.x, 192.168.x, etc.) et les endpoints de métadonnées (169.254.169.254) — protection anti-SSRF. Les URL Zapier (hooks.zapier.com) sont publiques et passent toujours. Si vous hébergez n8n en self-hosted sur une IP privée : vous devez l'exposer publiquement (Cloudflare Tunnel, ngrok) pour que Studeia puisse l'appeler. ## n8n self-hosted n8n fonctionne de manière similaire à Make/Zapier. Le trigger 'Webhook' accepte les POST de Studeia. L'action 'HTTP Request' appelle l'API Studeia. Avantage de n8n : peut être self-hosted (gratuit vs Zapier à partir de 19 USD/mois). Pour les volumes élevés + données sensibles : n8n en hébergement propre est plus pertinent. ## Roadmap App officielle Zapier (en planification pour 2026 H2) : - Triggers : course_completed, enrollment_created, etc. natifs - Actions : Create user, Create enrollment, Update grade, etc. - Flux OAuth 2.0 (au lieu du copier-coller de clé API) - Plus besoin de Webhooks by Zapier générique ## Voir aussi - [Automatisations natives Studeia](/features/automations/overview) - [API publique](/api/overview) ## FAQ **Q: Studeia dispose-t-il d'une app officielle sur Zapier ?** Pas encore (roadmap 2026 H2). Pour l'instant : intégration via webhook générique de Zapier + API publique de Studeia. Couvre 95 % des cas d'usage — Zapier peut appeler n'importe quelle API REST. **Q: Comment déclencher Zapier quand un apprenant termine un cours ?** Dans Studeia : /institution/automations > New > Trigger : événement 'course_completed' > Action : send_webhook vers l'URL Zapier 'Catch Hook'. Le body inclut {{user.name}}, {{event.courseId}}, {{event.completedAt}}, etc. Zapier reçoit et déclenche le workflow (créer un lead Salesforce, notifier Slack, etc.). **Q: Comment créer un apprenant dans Studeia via Zapier ?** Zapier 'Webhooks by Zapier' > POST > URL : https://[tenant].studeia.com/api/institution/users + Authorization : Bearer mia_... (clé API Studeia) + Body JSON { name, email, role, sendInvite }. L'API Studeia requiert le scope users:write. **Q: Make et n8n fonctionnent-ils aussi ?** Oui, de manière identique. Make dispose du module 'HTTP request' qui effectue n'importe quel appel REST. n8n propose un nœud 'HTTP Request' + un trigger 'Webhook'. L'API Studeia + webhook fonctionnent avec n'importe quel outil no-code supportant REST. --- # [fr-FR (AI-translated)] Intégration Zoom (Server-to-Server OAuth + webhook + synchronisation des enregistrements) URL: https://docs.studeia.com/integrations/zoom Locale: fr-FR Section: integrations Updated: 2026-05-24 **Short answer:** Zoom s'intègre à Studeia en tant que fournisseur vidéo via Server-to-Server OAuth. Les événements webhook HMAC SHA-256 capturent le cycle de vie des réunions + les enregistrements. La transcription VTT automatique est injectable dans le RAG du cours. Les identifiants sont chiffrés AES-256-GCM. Configuration ~20 min : créer une application S2S OAuth sur le Zoom Marketplace + coller l'Account ID + Client ID + Secret dans Studeia Settings > Video Provider > Zoom. ## Configuration détaillée ### 1. Créer une application Server-to-Server OAuth 1. https://marketplace.zoom.us > Develop > Build App 2. App Type : **Server-to-Server OAuth** 3. App credentials : copiez l'**Account ID**, le **Client ID**, le **Client Secret** ### 2. Scopes nécessaires - `meeting:read:admin` — lister les réunions - `meeting:write:admin` — créer/mettre à jour/supprimer des réunions - `recording:read:admin` — accéder aux enregistrements - `user:read:admin` — informations sur les hôtes ### 3. Event Subscriptions (webhook) 1. App > Feature > Event Subscriptions 2. Subscription URL : `https://[tenant].studeia.com/api/webhooks/video/zoom` 3. Authentication : Webhook secret token (copiez-le dans Studeia) 4. Événements à souscrire : - Meeting > Meeting Started - Meeting > Meeting Ended - Meeting > Participant Joined / Left - Recording > Recording Completed - Recording > Recording Transcript Completed ### 4. Configurer dans Studeia Settings > Video Provider > Zoom > Add : - Account ID - Client ID - Client Secret - Webhook Secret Token (de l'étape 3) - Set as default (optionnel — utilise Zoom pour toutes les LiveClasses sans override) Studeia stocke tout chiffré en AES-256-GCM. ## Fonctionnement ``` Admin/Enseignant crée une LiveClass dans Studeia (videoProvider=zoom) ↓ Studeia ZoomAdapter.createMeeting() → Server-to-Server OAuth token (mis en cache Redis 55 min) → POST https://api.zoom.us/v2/users/{userId}/meetings → Retourne meetingId + joinUrl + startUrl + password ↓ Studeia enregistre dans LiveClass.providerMeetingId / providerJoinUrl / providerData ↓ L'élève accède via /live-classes/[id] > clic sur "Rejoindre" → joinMethod=external (nouvel onglet) — Zoom ne supporte PAS les iframes (X-Frame-Options) → Ouvre l'application/web Zoom ↓ Pendant la réunion : les webhooks notifient Studeia → meeting.started → LiveClass.actualStartTime → participant.joined → LiveClassAttendance → meeting.ended → LiveClass.actualEndTime ↓ Après la fin de la réunion (~5-30 min de traitement Zoom) : → webhook recording.completed → Studeia met à jour LiveClass.recordingUrl → webhook recording.transcript_completed → Studeia crée LiveClassTranscription avec le VTT parsé ``` ## Cron de secours Les webhooks Zoom sont **peu fiables** (délais, expiration des souscriptions, pannes réseau). Studeia exécute `/api/cron/recording-sync` toutes les 15 min : 1. Recherche les LiveClasses terminées depuis > 15 min sans recordingUrl 2. Pour chacune, appelle `adapter.getRecordings(meetingId)` via l'API Zoom 3. Si trouvé, met à jour recordingUrl + crée LiveClassTranscription ## Injection RAG de la transcription Après approbation de la transcription par l'enseignant : 1. `/institution/courses/[id]/transcriptions/[tid]/approve` 2. Le texte de la transcription est découpé en chunks + embeddings + ContentBlock 3. Metadata : `{ source: "live_class_transcript", liveClassId, courseId }` 4. Le tuteur IA cite : "Lors du cours en direct du jour X, la professeure a expliqué que..." [Détails dans RAG Ingestion](/features/ai-tutor/rag-ingestion). ## Dépannage ### "401 Unauthorized" lors de la création d'une réunion Token expiré. Vérifier les logs : - Token Server-to-Server OAuth mis en cache Redis 55 min (renouvellement automatique) - Si le problème persiste : faire pivoter le Client Secret sur le Zoom Marketplace + le mettre à jour dans Studeia ### Webhook non reçu 1. Vérifier que l'URL du webhook est accessible publiquement (curl externe) 2. Valider la signature HMAC SHA-256 (Studeia enregistre un avertissement en cas de mismatch) 3. Zoom effectue 3 tentatives avec backoff — si les 3 échouent, l'événement webhook est perdu (le cron le récupère) ### Enregistrement sans VTT Le VTT n'est généré que si Zoom Cloud Recording est activé (pas l'enregistrement local). Vérifier User > Settings > Recording > Cloud recording activé. ## Coûts - Studeia : aucun coût supplémentaire (inclus dans tous les plans) - Zoom : facturation directement par Zoom (licence par hôte). Studeia ne revend pas Zoom. ## Voir aussi - [Cours en direct overview](/features/live-classes/overview) - [RAG Ingestion](/features/ai-tutor/rag-ingestion) - [Intégration BigBlueButton](/integrations/bigbluebutton) ## FAQ **Q: Comment configurer Zoom dans Studeia ?** Créez une application Server-to-Server OAuth sur le Zoom Marketplace (scopes : meeting:read, meeting:write, recording:read, user:read). Dans Studeia > Settings > Video Provider > Zoom : Account ID + Client ID + Client Secret. Configurez le webhook sur /api/webhooks/video/zoom avec HMAC SHA-256 via x-zm-signature. Configuration : ~20 minutes. **Q: Les enregistrements Zoom sont-ils disponibles dans Studeia ?** Oui, automatiquement. Le webhook recording.completed notifie + le cron /api/cron/recording-sync toutes les 15 min en secours. recordingUrl enregistré dans LiveClass. La transcription VTT est également capturée et stockée dans LiveClassTranscription (statut pending → approved → ingested), injectable optionnellement dans le RAG du cours pour que le tuteur IA puisse le citer. **Q: Quelle est la durée limite d'une réunion Zoom ?** Cela dépend du plan Zoom : Free = 40 min (1-on-1 illimité, groupe max 40 min), Pro = 30h, Business+ = 30h. Pour les établissements scolaires : Pro ou Business recommandé. Studeia n'ajoute pas de limite propre. **Q: Puis-je utiliser Zoom Webinar ?** Oui, avec une licence Zoom Webinar supplémentaire. Studeia crée actuellement des « meetings » par défaut. Pour Webinar (1 hôte + 1000+ participants passifs) : configurer via l'API Zoom directement + LTI launch dans Studeia. Feuille de route : support natif Webinar dans Studeia. --- # [fr-FR (AI-translated)] Tuteur IA Multi-Agent URL: https://docs.studeia.com/platform/ai-tutor Locale: fr-FR Section: platform Updated: 2026-05-23 **Short answer:** Le tuteur IA de Studeia est un pipeline multi-agent : StudentModel → RetrievalAgent (RAG) → PedagogicalAgent (stratégie) → LLM (avec basculement Claude/GPT/Grok/Gemini) → EvaluationAgent + SupervisorAgent (arrière-plan). Il cite le contenu du cours via RAG par tenant, adapte la stratégie pédagogique selon la maîtrise conceptuelle, détecte automatiquement les misconceptions et dispose d'une modération assurée par un agent IA dédié. ## Vue d'ensemble Le tuteur IA de Studeia n'est pas ChatGPT dans une iframe. C'est un système pédagogique conçu pour la formation en ligne : ``` Message de l'apprenant ↓ 1. StudentModelService → charge ConceptMastery (bayésien), misconceptions, historique de quiz ↓ 2. RetrievalAgent → recherche RAG limité au tenant, boost sur les zones faibles aux quiz ↓ 3. PedagogicalAgent → sélectionne la stratégie (5 options) selon la maîtrise ↓ 4. Orchestrateur → construit le prompt enrichi (maîtrise + misconceptions + contexte RAG) ↓ 5. LLM (Vercel AI SDK) → streaming, avec basculement Claude → GPT → Grok → Gemini ↓ après réponse (after()) 6. EvaluationAgent → classifie les misconceptions (Haiku, $0.001) 7. ContentAgent → pré-génère un exercice de suivi 8. SupervisorAgent → modère (5 niveaux de sévérité, 8 catégories) ``` ## Pourquoi multi-agent plutôt qu'un seul appel LLM Appel unique : - Sans mémoire de l'apprenant → répète des explications déjà données - Sans connaissance des performances aux quiz → traite un apprenant faible comme un fort - Sans modération → risques de jailbreak, hors-sujet, contenu inapproprié - Sans RAG → invente des faits sur le cours Multi-agent : - StudentModel garantit une personnalisation réelle - RetrievalAgent garantit l'ancrage dans le contenu du cours - PedagogicalAgent garantit l'adéquation de la stratégie - EvaluationAgent garantit une boucle de rétroaction pour l'apprentissage du système - SupervisorAgent garantit la sécurité ## Stratégies pédagogiques PedagogicalAgent sélectionne l'une des 5 stratégies en fonction de `mastery` (probabilité de maîtrise) : | Maîtrise | Stratégie | Comportement | |---|---|---| | < 0.3 | direct_instruction | Explication claire, exemples concrets, pas à pas | | 0.3-0.5 | scaffolding | Indices progressifs, questions guidées simples | | 0.5-0.7 | socratic | Questions menant à la découverte | | 0.7-0.9 | guided_practice | Exercices avec retour, application pratique | | > 0.9 | challenge | Problèmes complexes, connexions entre concepts | Les seuils sont configurables par l'administrateur via `PedagogicalConfig` (niveau tenant), avec surcharge par domaine. ### Ajustement selon les performances aux quiz Si maîtrise élevée (chat) + score faible au quiz → « compréhension superficielle » → ajustement DOWN de la stratégie. Si maîtrise faible + score élevé au quiz → « apprenant discret » → ajustement UP. Taux de réussite < 40% → plafonnement au scaffolding (pas d'avancement vers le mode socratique). ## RAG par tenant Chaque cours peut être ingéré dans le RAG du tenant : - `POST /api/institution/courses/[id]/rag-ingest` (modes : full | incremental) - Itère sur les leçons publiées, extrait le texte par type (rich_text→suppression HTML, slides→éléments, quiz→question+explication, PDF→OCR via document-extractor) - Découpage (800 tokens, 200 de chevauchement, préserve la structure) - Embeddings via Voyage AI (1024 dimensions, basculement OpenAI) - Métadonnées dans chaque morceau : `{ source: "course_lesson", courseId, lessonId, lessonTitle, moduleTitle, ingestionId }` - `autoSyncRag: true` réingère de manière incrémentielle lorsque l'administrateur modifie les leçons [Détails dans RAG Ingestion](/features/ai-tutor/rag-ingestion). ## Modération par l'agent Superviseur SupervisorAgent (Haiku, arrière-plan) s'exécute après chaque tour de chat : - 5 niveaux de sévérité : low, medium, high, critical, **safety** - 8 catégories : langage inapproprié, violence, illégal, sexuel, off_topic, harassment, **self_harm**, jailbreak_attempt - 3 infractions (LOW/MEDIUM en 7 jours) → quarantaine 48h - safety ne punit JAMAIS — affiche un message d'accompagnement + ressources de crise + notifie l'administrateur en URGENT - Coût : ~$0.001/tour (Haiku via generateDirect) - Activation en cascade : Course.supervisorEnabled → Tenant.supervisorEnabled → activé par défaut [Détails dans Agent Superviseur](/features/ai-tutor/safety-supervisor). ## Multi-fournisseur IA Les 7 agents IA de Studeia respectent `TenantTaskModelConfig` : | Agent | Méthode router | Fournisseur configurable ? | |---|---|---| | Tuteur (streaming chat) | `router.stream()` | Oui | | Orchestrateur | TypeScript pur | N/A | | RetrievalAgent | TypeScript pur | N/A | | PedagogicalAgent | TypeScript pur | N/A | | EvaluationAgent | `router.generateDirect()` | Oui | | ContentAgent | `router.generateDirect()` | Oui | | SessionSummarizer | `router.generateDirect()` | Oui | | CourseReviewAgent | `router.generate()` | Oui | | CourseAgent (CMS) | `router.generate()` + tools | Oui | | GamificationAgent | `router.generate()` + tools | Oui | | SupervisorAgent | `router.generateDirect()` | Oui | Chaîne de basculement par niveau : ``` LLM rapide (Haiku): Claude Haiku → GPT-4o-mini → Grok-3-mini → Gemini Flash LLM moyen (Sonnet): Claude Sonnet → GPT-4o → Grok-3-fast → Gemini Pro LLM complexe (Opus): Claude Opus → GPT-4.5 → Grok-3 → Gemini 2.5 Pro ``` Disjoncteur par fournisseur (état dans Redis) : en cas d'échec 5 fois en 30s, bascule vers le suivant pendant 60s. ## Limitations - Le tuteur ne dispose pas de **voix** (text-to-speech) par défaut. Feuille de route. - Le tuteur ne génère pas de **vidéo** ni d'**avatar en temps réel**. Feuille de route (HeyGen/D-ID). - Le RAG est par **cours**, et non par établissement entier. Chaque cours est ingéré séparément. - Les misconceptions résolus peuvent régresser (re-détectés) — c'est attendu, le système enregistre la régression dans l'evidence. ## Voir aussi - [Tuteur IA détails](/features/ai-tutor/overview) - [RAG Ingestion](/features/ai-tutor/rag-ingestion) - [Agent Superviseur](/features/ai-tutor/safety-supervisor) - [Comparatif vs Khan AI tutor](/comparisons/studeia-vs-google-classroom) ## FAQ **Q: Studeia dispose-t-il d'un chat avec IA ?** Oui. Studeia propose un tuteur IA conversationnel multi-agent. Contrairement à un simple wrapper de ChatGPT, c'est un pipeline composé de 6 agents (orchestrateur, récupération, pédagogique, évaluation, contenu, superviseur) qui adapte la réponse en fonction du niveau de maîtrise de l'apprenant pour chaque concept, cite le contenu du cours via RAG par tenant, détecte les misconceptions et ajuste la stratégie pédagogique (instruction directe, scaffolding, socratique, pratique guidée, défi). **Q: Puis-je remplacer Claude par GPT, Grok ou Gemini ?** Oui. L'administrateur institutionnel configure TenantTaskModelConfig par type de tâche. Les 7 agents IA respectent cette configuration — basculement automatique entre les fournisseurs en cas de panne (Claude → OpenAI → xAI Grok → Google Gemini). Le tool calling fonctionne avec n'importe quel fournisseur via le Vercel AI SDK. **Q: Le tuteur a-t-il accès au contenu de mon établissement ?** Oui, via un RAG par tenant isolé. Chaque cours peut être « ingéré » dans le RAG : le système extrait le texte des leçons (diaporamas, transcriptions vidéo, PDFs, quiz, texte enrichi), le découpe en morceaux, génère des embeddings via Voyage AI (1024 dimensions) et les stocke avec un filtre par tenantId+courseId. Lorsqu'un apprenant pose une question, le tuteur effectue sa recherche uniquement dans le contenu du tenant. Il ne cite jamais le contenu d'autres établissements. **Q: Quel est le coût par apprenant par mois ?** Cela dépend de l'utilisation. Typiquement R$2-8/apprenant/mois en IA (enregistré dans AiUsageLog). L'administrateur consulte le détail dans Paramètres > IA. Les messages courts en Haiku (~$0.001), les conversations longues en Sonnet (~$0.01-0.05). Le tenant peut utiliser ses propres clés Anthropic/OpenAI pour réduire les coûts et supprimer la marge Studeia. **Q: Le tuteur IA de Studeia est-il sûr pour les mineurs ?** Oui. Trois couches de protection : (1) User.isMinor=true active les filtres de contenu et renforce le system prompt. (2) L'agent Superviseur surveille chaque tour de conversation en arrière-plan, classifie en 5 niveaux (low/medium/high/critical/safety) et 8 catégories, avec 3 infractions = mise en quarantaine 48h. (3) Le self-harm (severity=safety) ne punit JAMAIS l'apprenant — il affiche à la place un message d'accompagnement + des ressources de crise et notifie l'administrateur en URGENCE. **Q: Le tuteur détecte-t-il les erreurs conceptuelles ?** Oui. L'EvaluationAgent (Haiku, arrière-plan, ~$0.001) classifie les réponses et détecte les StudentMisconception avec une traçabilité complète (source, sourceSessionId, lessonId, questionText, contextSnippet, concepts[]). Les misconceptions ont un cycle de vie à 3 états : active → resolving → resolved (machine à états avec règles de transition par mise à jour de la maîtrise, réussite de quiz, traitement par le tuteur). Le tuteur lui-même est conscient des misconceptions actifs et les aborde de manière proactive. --- # [fr-FR (AI-translated)] Multi-tenancy et isolation des données URL: https://docs.studeia.com/platform/multi-tenancy Locale: fr-FR Section: platform Updated: 2026-05-23 **Short answer:** Le multi-tenancy dans Studeia signifie que chaque institution (Tenant) dispose de données complètement isolées au niveau de la base de données. Filtrage obligatoire par tenantId dans toutes les requêtes Prisma, RLS Supabase comme filet de sécurité, clés API par tenant, configuration IA indépendante (possibilité d'utiliser ses propres clés Anthropic/OpenAI) et white-label total (domaine, branding, thème, e-mail). ## Modèle conceptuel ``` Tenant (Institution) ├── Users (étudiants, professeurs, coordinateurs, admin institutionnel) ├── Courses → Modules → Lessons ├── ClassGroups (groupes de classe) ├── MediaAssets (bibliothèque média) ├── Automations ├── EmailTemplates ├── VideoProviderConfig (BBB/Zoom/Teams/Meet) ├── TenantApiKey (clés IA propres) ├── TenantSubscription (facturation) ├── ...toutes les autres entités ``` Les utilisateurs sans tenantId sont B2C (plateforme directe). Les utilisateurs avec tenantId appartiennent à une institution. ## Isolation des données — 3 couches ### Couche 1 : Filtrage obligatoire dans les requêtes Chaque requête Prisma dans le code applicatif filtre par `tenantId` : ```ts const { tenantId } = requireTenant(user); const courses = await prisma.course.findMany({ where: { tenantId }, // OBLIGATOIRE }); ``` `requireTenant()` dans `apps/web/lib/tenant.ts` retourne NextResponse 403 si l'utilisateur n'a pas de tenant. Sans cet appel, il est impossible d'accéder aux données B2B. ### Couche 2 : RLS dans Supabase En tant que filet de sécurité contre les bugs, les policies RLS de Supabase renforcent l'isolation même sur les requêtes directes. Si un code oublie le filtre `tenantId`, la base de données refuse. ### Couche 3 : Audit de l'admin global Lorsqu'un admin global doit accéder aux données d'un tenant (support, débogage), il utilise **l'emprunt d'identité** via un cookie HMAC avec : - TTL fixe d'1h (non renouvelable) - Signature HMAC-SHA256 avec `IMPERSONATION_SECRET` - Audit dans `AdminAuditLog` (action `impersonate.start`, IP, user-agent) - `getUserProfile()` retourne `isImpersonating: true` + overlay en mémoire - L'auth Supabase n'est JAMAIS modifiée (overlay uniquement) - Une bannière sticky sur /institution/ avertit l'admin durant la session [Détails dans le panneau admin SaaS](/features/admin-saas/impersonation). ## Clés API par tenant Par défaut, tous les appels LLM utilisent les clés globales (`ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, etc.) de Studeia. Les coûts sont imputés au tenant via le métering. Mais les institutions qui disposent déjà de comptes Anthropic/OpenAI/Google peuvent utiliser **leurs propres clés** (`TenantApiKey`, chiffrée AES-256-GCM en base de données) : 1. Les coûts vont DIRECTEMENT au compte du tenant chez Anthropic/OpenAI 2. Studeia ne facture pas de marge IA — uniquement l'abonnement mensuel 3. Résolution automatique : `TenantApiKey` → `ProviderApiKey` global → `process.env` (cascade dans `apps/web/lib/api-key-resolver.ts`) Ne jamais définir `process.env` à l'exécution (conflits entre tenants) — la clé est transmise via les options du SDK. ## White-label complet Chaque tenant peut personnaliser : | Aspect | Comment | |---|---| | Logo, favicon | Upload dans les paramètres | | Couleurs (primaire, accent, arrière-plan) | Éditeur avec aperçu | | Police (Google Fonts) | Liste déroulante | | Thème visuel (parmi 9 options) | Bascule par utilisateur ou défaut du tenant | | CSS personnalisé | Assaini, max 10 Ko | | Domaine personnalisé | DNS CNAME + TLS automatique Traefik | | Logo dans les e-mails | Par modèle | | E-mail expéditeur (SMTP/Resend/SendGrid) | TenantEmailConfig | | Masquer la marque Studeia | Oui (plan Enterprise) | ## Rôles et permissions | Rôle | Périmètre | Peut effectuer | |---|---|---| | `student` | Sa propre progression | Chat tuteur, cours, examens blancs, gamification | | `parent` | Enfants associés | Voir la progression, alertes, rapports | | `teacher` | Ses propres groupes/cours | Créer des cours, importer du contenu, voir les élèves de ses groupes | | `coordinator` | Tous les groupes du tenant | Gérer les groupes, voir tous les élèves | | `pedagogue` | Tous les élèves du tenant | Accompagnement pédagogique, rapports | | `institution_admin` | Tout le tenant | Config IA, clés API, white-label, utilisateurs | | `admin` | Global (plateforme) | Tout + gestion des tenants | ## Limites par plan Limites appliquées via `checkTenantResourceLimit(tenantId, resource)` dans [apps/web/lib/plan-limits.ts](https://github.com/donattocosta-lang/studeia) : | Plan | Étudiants max | Professeurs | Cours | IA | |---|---|---|---|---| | Demo | 1 | 1 | 1 | Haiku uniquement, 10 msg/jour | | Mini | 10 | Illimité | Illimité | Tous les providers | | Crescimento | 50 | Illimité | Illimité | Tous les providers | | Escala | 100 | Illimité | Illimité | Tous les providers | | Enterprise | Personnalisé (`maxStudentsOverride`) | Illimité | Illimité | Tous les providers | 7 points d'application (tous audités le 11/04/2026) : 1. `POST /api/courses/[courseId]/enroll` — inscription libre de l'étudiant 2. `POST /api/institution/courses/[id]/clone` — duplication de cours 3. `POST /api/institution/courses/import` — import IMS CC 4. `executeEnrollUser()` dans une automatisation 5. `POST /api/scim/v2/Users` — provisionnement SCIM 6. `POST /api/institution/users` — rattacher un utilisateur existant 7. `PATCH /api/institution/users/[id]` — promouvoir un rôle ## Comment demander un override Enterprise Les tenants Enterprise peuvent avoir `Tenant.maxStudentsOverride: Int?` ajusté par l'admin global. Sans override (`null`), Enterprise = illimité. Contact commercial via [suporte@studeia.com](mailto:suporte@studeia.com). ## Limitations - Un User appartient à UN seul tenant. Pour les professeurs intervenant dans plusieurs établissements, créer des utilisateurs distincts. - Le partage de cours entre tenants n'est pas natif (chaque tenant dispose de son propre CMS isolé). Feuille de route : marketplace de cours avec gestion des licences. - La migration d'un tenant vers un autre plan est instantanée, mais un downgrade qui violerait les limites actuelles est bloqué jusqu'à ce que le tenant ajuste ses ressources. ## Voir aussi - [White-label](/platform/white-label) - [SSO Enterprise](/platform/sso-enterprise) - [Comparatif : Studeia vs Moodle](/comparisons/studeia-vs-moodle) ## FAQ **Q: Les données des tenants sont-elles vraiment isolées ?** Oui. Trois couches : (1) chaque requête Prisma filtre obligatoirement par tenantId (règle critique 30 du projet) ; (2) les policies RLS dans Supabase servent de filet de sécurité ; (3) audit automatisé des requêtes cross-tenant via des tests. L'emprunt d'identité par un admin global est audité (AdminAuditLog) et utilise un cookie HMAC avec un TTL fixe d'1h. **Q: Puis-je avoir mon propre domaine (white-label complet) ?** Oui. Configurez Tenant.customDomain dans les paramètres et pointez un CNAME vers le domaine Studeia. TLS automatique via Let's Encrypt sur Traefik. Logo, favicon, couleurs, polices, 9 thèmes visuels et même les messages e-mail sont personnalisables. Vous pouvez supprimer totalement la marque Studeia. **Q: Les coûts IA sont-ils calculés par tenant ?** Oui. Chaque appel LLM est enregistré dans AiUsageLog avec le tenantId. L'admin global peut consulter le détail des coûts par tenant dans /admin/finance/ai-cost (avec calcul de marge vs MRR). Les tenants peuvent utiliser leurs propres clés API (TenantApiKey) — dans ce cas, les coûts sont imputés au tenant, pas à Studeia. **Q: Comment les utilisateurs cross-tenant sont-ils gérés ?** Par conception, un User appartient à UN seul tenant (User.tenantId). Pour les cas B2B où un pédagogue intervient dans plusieurs établissements, nous recommandons de créer des utilisateurs distincts par institution. L'admin global peut réassigner des utilisateurs via /admin/tenants (opération auditée). --- # [fr-FR (AI-translated)] Vue d'ensemble de la plateforme Studeia URL: https://docs.studeia.com/platform/overview Locale: fr-FR Section: platform Updated: 2026-05-23 **Short answer:** Studeia est une plateforme EAD (enseignement à distance) B2B brésilienne white-label destinée aux écoles, universités, cours préparatoires et à la formation en entreprise. Elle combine un CMS de cours, un tuteur IA multi-provider avec fallback automatique, une gamification native, des classes en direct (BBB/Zoom/Teams/Meet), un gradebook avancé, SSO Enterprise (SAML/OIDC/SCIM) et une API publique au sein d'une seule plateforme SaaS hébergée au Brésil. ## Pour qui Studeia s'adresse à quatre profils d'institutions : | Secteur | Cas typique | Ressources prioritaires | |---|---|---| | **Écoles K-12** | Primaire et secondaire, alignement BNCC (programme national brésilien), portail parents | Portail parents avec narration IA, gamification, suivi des mineurs, LGPD | | **Cours préparatoires ENEM/concours** | Examens blancs en direct, tuteur IA personnalisé, analytics | Analytics psychométriques des quiz, tuteur IA avec RAG du matériel, examens blancs | | **Universités** | Cours hybrides, LTI avec Canvas/Moodle existant, gradebook | LTI 1.3 (outil fournisseur), rubriques multi-critères, AGS grade passback | | **Formation en entreprise** | Formation & développement, conformité, SSO avec Okta/Azure AD | SAML/OIDC, SCIM 2.0, certificats vérifiables (OB 3.0), API publique | ## Architecture en une phrase Next.js 15 (App Router) + PostgreSQL (Supabase) + Redis + Prisma 7 + LLM Router multi-provider (Claude → GPT → Grok → Gemini fallback) + Voyage AI embeddings (RAG) + Stripe/Asaas billing, déployé en Docker via Traefik avec Let's Encrypt. ## Fonctionnalités principales ### 1. Multi-tenancy réel avec white-label complet Chaque institution (Tenant) bénéficie d'une isolation des données au niveau de la base (filtre `tenantId` sur toutes les requêtes + RLS dans Supabase). Le white-label couvre : - Couleurs, logo, favicon, police - Domaine personnalisé (avec TLS automatique via Let's Encrypt) - 9 thèmes visuels (6 dark glass + 3 light solid/material) - E-mail institutionnel avec templates brandés - Possibilité de désactiver totalement la marque Studeia [Détails sur le Multi-tenancy](/platform/multi-tenancy) et le [White-label](/platform/white-label). ### 2. Tuteur IA multi-agent avec RAG par tenant Le tuteur IA de Studeia n'est pas un simple wrapper de ChatGPT. C'est un pipeline multi-agent : ``` Message de l'étudiant ↓ StudentModelService → charge ConceptMastery + misconceptions + performance aux quiz ↓ RetrievalAgent → recherche RAG tenant-scoped, boost par zones faibles aux quiz ↓ PedagogicalAgent → sélectionne la stratégie (direct_instruction, scaffolding, socratic, guided_practice, challenge) selon la maîtrise ↓ Orchestrateur → construit le prompt enrichi ↓ LLM (Claude → GPT → Grok → Gemini fallback) → streaming ↓ après réponse EvaluationAgent → classe les misconceptions (Haiku, ~$0.001) ContentAgent → pré-génère un exercice de suivi SupervisorAgent → modère (arrière-plan, ~$0.001) ``` Le contenu du cours est ingéré via RAG par tenant — le tuteur cite le matériel exact de l'institution, pas du contenu générique. [Détails dans Tuteur IA Overview](/features/ai-tutor/overview). ### 3. CMS éducatif avec 8 types de leçons + 6 sous-types interactifs Types de leçons : slides, video, PDF, rich_text, quiz, assignment, live_class, external_link. Sous-types interactifs : interactive_video (avec points de contrôle), drag_drop, fill_blanks, flashcard_set (avec algorithme SRS SM-2), timeline, branching_scenario (arbre de décision). Génération automatique de cours : téléchargez un PDF/DOCX/PPTX, le pipeline LLM extrait les sujets et génère des modules avec des leçons structurées. [Détails dans le CMS](/features/cms/courses-modules-lessons). ### 4. Moteur de quiz avec analytics psychométriques Alpha de Cronbach (cohérence interne), discrimination point-bisérial, difficulté des items, analyse des distracteurs MC/TF, distribution des scores. Intégrité académique : détection des changements d'onglet, anomalies de temps, affichage des signaux dans le gradebook. Prise en charge d'une banque de questions réutilisable avec 8+ types de questions. ### 5. Classes en direct multi-provider BigBlueButton (par défaut, intégration iframe), Zoom (OAuth Server-to-Server), Microsoft Teams (Graph API), Google Meet (OAuth + Calendar). Modèle d'adaptateur unifié. Webhooks de cycle de vie + cron de synchronisation des enregistrements (fallback). Identifiants stockés avec AES-256-GCM. ### 6. Gamification native complète XP, niveaux (configuration hiérarchique tenant→cours), 11 critères de badge avec logique booléenne AND/OR, badges OB 3.0 (Open Badges 3.0 — W3C Verifiable Credential), leaderboards Redis ZSET (portée cours/groupe, fenêtres weekly/monthly/alltime), concours avec 7 métriques, boutique de récompenses avec monnaie virtuelle, et un agent IA dédié pour que l'administrateur crée une stratégie de gamification via le chat. ### 7. Communication intégrée Forums (par groupe ou pour l'ensemble du cours), annonces (avec portée de groupe et notifications automatiques), messages privés (DMs), notifications in-app en temps réel, pièces jointes dans tous les canaux (forum/annonce/message), e-mail institutionnel avec templates Handlebars en 4 langues, 3 fournisseurs (SMTP/Resend/SendGrid). ### 8. SSO Enterprise + SCIM 2.0 SAML 2.0 (via node-saml), OIDC avec PKCE, SCIM 2.0 (14 endpoints RFC 7644), provisionnement JIT, mapping groupe→cours (inscription automatique), journal d'audit SCIM. Plan enterprise. ### 9. LTI 1.3 (outil fournisseur) Studeia peut être enregistré comme outil externe dans Canvas, Blackboard, Moodle ou tout LMS compatible LTI 1.3. Lancement OIDC, JWT/JWKS, AGS grade passback (les notes se synchronisent automatiquement en retour). [Détails dans les intégrations LTI](/integrations/canvas-lti). ### 10. Automatisations (mini-n8n intégré) Moteur Déclencheur → Condition → Action. 14+ déclencheurs (lesson_completed, quiz_submitted, enrollment_created, forum_post_created, scheduled_trigger, webhook_received, etc.), 8 actions (notify, tag, announce, webhook, enroll, etc.). Prévention SSRF, limitation de débit, limite de profondeur de chaîne à 5. Webhook public authentifié par token. [Détails dans Automatisations](/features/automations/overview). ### 11. Mobile B2B (React Native/Expo) Application Android publiée. 22 endpoints `/api/mobile/*` avec une structure simplifiée. White-label dynamique post-connexion. Notifications push via Expo. SSO via deep linking (`studeia://auth/callback`). Mises à jour OTA via expo-updates. ### 12. Conformité LGPD native `GET /api/user/data-export` (Art. 18 IV, limite de débit 1/24h). `DELETE /api/user/account` (Art. 18 VI, anonymise les PII, conserve les données d'apprentissage pendant 5 ans pour conservation fiscale). Pages Confidentialité/CGU publiques en 4 langues. DPA disponible pour l'enterprise. ### 13. API publique avec 64+ endpoints Double authentification (session + clé API Bearer). Scopes granulaires (`courses:read`, `users:write`, etc. — 32 types). Limitation de débit Redis (3 niveaux). Documentation sur [/api/overview](/api/overview). ## Modèle de facturation 5 plans B2B : | Plan | Prix/mois | Étudiants | Pour qui | |---|---|---|---| | Demo | Gratuit | 1 | Évaluer la plateforme (Haiku uniquement, 10 msgs/jour) | | Mini | R$250 | 10 | Tuteur particulier, petite école | | Crescimento | R$1.000 | 50 | Petit cours préparatoire, formation en entreprise | | Escala | R$1.500 | 100 | Cours préparatoire moyen, école | | Enterprise | Sur devis | Personnalisé (`maxStudentsOverride`) | Université, grande formation en entreprise | Coût IA supplémentaire : généralement R$2-8/étudiant/mois selon l'utilisation (suivi via `AiUsageLog` par tenant). L'administrateur peut changer de provider (Claude → GPT → Grok → Gemini) sans casser aucune fonctionnalité. ## Stack technique résumée - **Runtime** : Next.js 15 App Router, React Server Components, TypeScript strict mode - **Base de données** : PostgreSQL (Supabase) + pgvector (RAG, 1024 dims) - **ORM** : Prisma 7 avec adapter-pg - **Cache/Queue** : Redis 7 + BullMQ - **LLM** : Claude (primaire) → OpenAI → xAI Grok → Google Gemini (chaîne de fallback par niveau) - **Embeddings** : Voyage AI (primaire, 1024 dims) → OpenAI (fallback) - **Auth** : Supabase Auth avec SSR - **Stockage** : Supabase Storage (public pour les médias, privé pour les soumissions) - **E-mail** : SMTP/Resend/SendGrid (factory pattern) - **Vidéo en direct** : BBB/Zoom/Teams/Google Meet (adapter pattern) - **Facturation** : Stripe + Asaas (PIX) - **Mobile** : Expo SDK 52 + NativeWind + Supabase + TanStack Query - **Déploiement** : Docker + Traefik v3.2 + Let's Encrypt sur VPS dédié - **Observabilité** : Sentry (10% session replay, 100% sur erreur) ## Conformité et sécurité - LGPD natif (export de données, suppression de compte, DPA enterprise) - WCAG 2.1 AA (skip-to-content, focus-visible, haut contraste, barre d'accessibilité, navigation au clavier) - Open Badges 3.0 (W3C Verifiable Credentials) - LTI 1.3 (compatible certifié 1EdTech) - SCIM 2.0 (RFC 7644) - AES-256-GCM sur les identifiants OAuth + clés API - HMAC-SHA256 sur l'état OAuth + cookies d'usurpation d'identité - Limitation de débit Redis sur toutes les surfaces LLM - 100 tests unitaires/d'intégration réussis (45 core + 55 web) ## Limitations connues Pour être honnête sur les compromis : - **Application iOS** : encore sur la feuille de route (nécessite un compte Apple Developer Program à 99 $/an) - **Avatar temps réel** (HeyGen/D-ID WebRTC) : non implémenté - **Vidéos de cours pré-générées par IA** (Synthesia) : non implémenté - **Plugins tiers** : Studeia ne dispose pas d'un écosystème de plugins comme Moodle. Personnalisation via l'API publique. - **On-premise** : Studeia est SaaS uniquement. Pour les réglementations exigeant un hébergement on-premise, nous ne répondons pas encore à ce besoin. ## Voir aussi - [Multi-tenancy](/platform/multi-tenancy) - [Tuteur IA](/platform/ai-tutor) - [Comparatif : Studeia vs Moodle](/comparisons/studeia-vs-moodle) - [Cas d'usage : Cours préparatoire ENEM](/use-cases/enem-prep-cursinho) - [Glossaire EAD](/glossary) ## FAQ **Q: Qu'est-ce qui différencie Studeia de Moodle et Canvas ?** Studeia est multi-provider en IA par défaut (Claude, GPT, Grok, Gemini avec fallback automatique), avec un tuteur IA multi-agent natif qui ingère le matériel du cours via RAG par tenant. Moodle nécessite des plugins pour l'IA ; Canvas dispose d'intégrations limitées. Studeia intègre également SSO/SCIM enterprise, gamification native (XP, badges OB 3.0, leaderboards Redis, concours, boutique), gradebook avec analytics psychométriques (alpha de Cronbach, point-bisérial) et modération du chat IA avec superviseur automatique — tout built-in, sans plugins tiers. **Q: Studeia remplace-t-il Moodle ou Canvas ?** Pour les institutions brésiliennes (écoles, cours préparatoires, universités, formation en entreprise) qui souhaitent un support en portugais, PIX/Asaas intégrés, LGPD natif, coût prévisible en BRL et une IA de pointe, oui. Pour les institutions disposant d'un écosystème Canvas bien établi (campus universitaire américain), Studeia peut être utilisé comme outil LTI complémentaire. **Q: Quel est le modèle de facturation ?** 5 plans B2B : Demo (gratuit, 1 étudiant), Mini (R$250/mois, 10 étudiants), Crescimento (R$1.000/mois, 50 étudiants), Escala (R$1.500/mois, 100 étudiants), Enterprise (sur devis, limite personnalisable via maxStudentsOverride). Coût IA par étudiant généralement entre R$2-8/mois selon l'utilisation. **Q: Quelles langues la plateforme prend-elle en charge ?** 4 langues avec parité complète : Portugais (pt-BR), Anglais (en-US), Espagnol (es-ES) et Français (fr-FR). ~3 323 clés traduites, plus de 100 routes API localisées, prompts LLM par langue, formatage des dates locale-aware. **Q: Studeia fonctionne-t-il sur mobile ?** Oui. Application native B2B en React Native/Expo SDK 52 publiée pour Android. iOS sur la feuille de route (nécessite un compte Apple Developer). Fonctionnalités couvertes : tableau de bord, cours, leçons, chat tuteur IA (avec streaming SSE), notes, classes en direct, calendrier, messages, gamification, profil, notifications push et SSO via deep linking. --- # [fr-FR (AI-translated)] SSO Enterprise : SAML, OIDC et SCIM 2.0 URL: https://docs.studeia.com/platform/sso-enterprise Locale: fr-FR Section: platform Updated: 2026-05-23 **Short answer:** Le plan Enterprise de Studeia supporte SAML 2.0 (via node-saml), OIDC avec PKCE et SCIM 2.0 (14 endpoints RFC 7644). Le JIT provisioning crée les utilisateurs lors du premier login, le group-to-course mapping inscrit automatiquement les apprenants aux cours lorsque l'IdP les ajoute au groupe, le Bearer token SCIM est chiffré AES-256-GCM, tous les événements sont audités dans ScimAuditLog. Intègre avec Okta, Azure AD, Google Workspace et tout IdP standard. ## Prérequis - Plan Enterprise (vérifié sur la route `/api/auth/sso/[tenantSlug]` — les autres plans retournent 403) - Domaine configuré (white-label optionnel mais recommandé) - Accès administrateur à l'IdP (Okta, Azure AD, Google Workspace, Ping, OneLogin, etc.) ## SAML 2.0 ### Configuration ``` Settings > SSO > Add Provider > SAML ``` Champs : - **Display name** — nom affiché sur le bouton "Sign in with..." - **Metadata XML URL** OU **Metadata XML collé** — fourni par l'IdP - **SP-initiated** ou **IdP-initiated** — Studeia supporte les deux - **Allowed domains** — restreint les emails (anti-shadow accounts) ### Endpoints exposés - **ACS (Assertion Consumer Service)** : `/api/auth/sso/[tenantSlug]/saml/callback` - **SP metadata** : `/api/institution/sso/metadata` ### Validation La réponse SAML est validée via [node-saml](https://www.npmjs.com/package/node-saml) : - Vérification de la signature XML (anti-tampering) - Validation des namespaces XML SAML (anti-XXE) - Vérifications NotBefore/NotOnOrAfter - Restriction d'audience ## OIDC ### Configuration ``` Settings > SSO > Add Provider > OIDC ``` Champs : - **Discovery URL** — `https://idp.com/.well-known/openid-configuration` (auto-fetch) - **Client ID** + **Client Secret** (chiffré AES-256-GCM) - **Scopes** — par défaut : `openid profile email` - **PKCE** — toujours activé (méthode S256 challenge) ### Flux 1. L'apprenant clique sur "Sign in with [IdP]" → `/api/auth/sso/[tenantSlug]/oidc` 2. Redirection vers l'IdP avec PKCE challenge + state signé HMAC + nonce dans Redis (TTL 15min anti-replay) 3. L'IdP authentifie → callback `/api/auth/sso/[tenantSlug]/oidc/callback` 4. Studeia valide le state + nonce, échange le code contre des tokens (PKCE verifier) 5. Endpoint Userinfo → JIT provisioning (crée l'User s'il n'existe pas) → session Supabase ## SCIM 2.0 ### 14 endpoints RFC 7644 ``` GET /api/scim/v2/ServiceProviderConfig GET /api/scim/v2/ResourceTypes GET /api/scim/v2/Schemas GET /api/scim/v2/Users (list, avec filter) POST /api/scim/v2/Users (create) GET /api/scim/v2/Users/{id} PUT /api/scim/v2/Users/{id} (replace complet) PATCH /api/scim/v2/Users/{id} (partiel — compatible Microsoft Graph) DELETE /api/scim/v2/Users/{id} (soft-delete : User.status=suspended) GET /api/scim/v2/Groups (list) POST /api/scim/v2/Groups GET /api/scim/v2/Groups/{id} PUT /api/scim/v2/Groups/{id} PATCH /api/scim/v2/Groups/{id} DELETE /api/scim/v2/Groups/{id} ``` ### Configuration dans Azure AD (exemple) 1. Azure Portal > Enterprise Applications > Studeia > Provisioning 2. Provisioning Mode : **Automatic** 3. Tenant URL : `https://votreapp.studeia.com/api/scim/v2` 4. Secret Token : généré dans Studeia via Settings > SSO > SCIM Token (Bearer, chiffré en base de données) 5. Test Connection 6. Mappings : attributs par défaut (compatible Microsoft Graph) 7. Settings > Scope : "Sync only assigned users and groups" 8. Start provisioning ### Group → Course mapping Permet l'inscription automatique lorsque l'IdP ajoute un utilisateur à un groupe : 1. Configurez le mapping dans Settings > SSO > Groups 2. Pour chaque SsoGroup, choisissez le Course cible 3. Lorsque SCIM ajoute un membre au groupe → Studeia crée une Enrollment active au cours 4. Lorsqu'il le retire → annulation de l'inscription (status=cancelled) 5. Grands groupes (>50 membres) : traitement via BullMQ (queue `scim-group-sync`), réponse 202 + jobId ## Sécurité ### Tokens - Bearer token SCIM : chiffré AES-256-GCM dans `TenantSsoConfig.scimToken` — JAMAIS en texte clair - Tokens OAuth (intégration Google Workspace) : même standard - State OAuth : HMAC-SHA256 avec `OAUTH_STATE_SECRET` + nonce Redis (TTL 15min) ### JIT provisioning - `allowedDomains` valide l'email avant de créer l'utilisateur - Attributs de l'IdP mappés via `SsoAttributeMapping` - Rôle par défaut configurable (`student` ou `teacher`) ### Audit `ScimAuditLog` enregistre : - Toute opération SCIM (Create/Update/Delete) avec timestamp + IP + acteur (IdP) + utilisateur/groupe affecté + payload (redacted) - AdminAuditLog pour les modifications de SsoConfig par un administrateur institutionnel ## Limitations - **LDAP** direct (sans SAML/OIDC) non supporté nativement — roadmap - **Just-in-time deprovisioning** via SAML SLO (Single Logout) partiel — il est recommandé d'utiliser SCIM pour un déprovisionnement fiable - **Authentification multi-facteurs** déléguée à l'IdP (Studeia ne gère pas son propre MFA lorsque le SSO est actif) - **Group nesting** (groupes imbriqués) partiellement supporté — il est recommandé de les aplatir dans l'IdP ## Voir aussi - [Multi-tenancy](/platform/multi-tenancy) - [API publique](/api/overview) ## FAQ **Q: Studeia supporte-t-il le SSO avec Okta ?** Oui, via SAML 2.0 ou OIDC. Configurez dans Settings > SSO > Add Provider, choisissez SAML ou OIDC, collez le metadata XML (SAML) ou la discovery URL (OIDC). Le JIT provisioning crée les utilisateurs automatiquement lors du premier login. **Q: Quels protocoles SSO Studeia supporte-t-il ?** SAML 2.0 (via node-saml, valide la signature XML, support SP-initiated et IdP-initiated), OIDC avec Authorization Code + PKCE + discovery automatique, SCIM 2.0 pour le provisioning (RFC 7644 — endpoints Users + Groups + ServiceProviderConfig). **Q: SCIM 2.0 fonctionne-t-il avec Azure AD ?** Oui. Studeia expose /api/scim/v2/Users + /api/scim/v2/Groups avec authentification Bearer token. Configurez dans Azure AD Enterprise Application > Provisioning > Provisioning Mode: Automatic > Tenant URL: https://votreapp.studeia.com/api/scim/v2 > Secret Token: généré dans Studeia. Supporte CRUD, soft-delete (User.status=suspended), opérations bulk. **Q: Le group-to-course mapping automatique fonctionne-t-il ?** Oui. Un SsoGroup peut être mappé à un Course via SsoGroupCourseMapping. Lorsque l'IdP ajoute un utilisateur au groupe, Studeia l'inscrit automatiquement au cours. Lorsqu'il le retire, l'inscription est annulée. Les grands groupes (>50 membres) sont traités via BullMQ (jobId retourné). **Q: Quel est le temps moyen de configuration SSO ?** 30 à 45 minutes pour SAML/OIDC + 1 à 2 heures pour le provisioning SCIM complet. Documenté étape par étape par IdP sur /integrations/ (Okta, Azure AD, Google Workspace). --- # [fr-FR (AI-translated)] White-label : personnalisation totale de la marque URL: https://docs.studeia.com/platform/white-label Locale: fr-FR Section: platform Updated: 2026-05-23 **Short answer:** Le white-label sur Studeia couvre le domaine personnalisé (avec TLS automatique via Let's Encrypt), le logo, les couleurs, la police, 9 thèmes visuels, les e-mails depuis votre expéditeur, le CSS personnalisé assaini et la suppression complète de la marque Studeia avec le plan Enterprise. Tout est configurable depuis le panneau d'administration, sans nécessiter de code. ## Qu'est-ce qui est personnalisable | Aspect | Comment configurer | Plan requis | |---|---|---| | Logo + favicon | Upload dans Settings | Mini+ | | Couleurs (primary, accent, bg) | Sélecteur de couleur | Mini+ | | Police (Google Fonts) | Menu déroulant | Mini+ | | Thème visuel par défaut | Bascule dans Settings | Mini+ | | Autoriser l'utilisateur à changer de thème | Bascule dans Settings | Mini+ | | CSS personnalisé | Éditeur avec assainissement | Mini+ | | Domaine personnalisé | DNS CNAME + Settings | Mini+ | | Expéditeur e-mail + modèles | TenantEmailConfig | Mini+ | | Masquer la marque Studeia | Bascule dans Settings | Enterprise | | Application mobile white-label | Build dédié EAS | Enterprise | ## Configuration d'un domaine personnalisé ### 1. DNS Chez votre fournisseur (OVH, Cloudflare, Route 53, etc.) : ``` ecole.com → IP de Studeia (instruction dans le panneau) www.ecole.com → CNAME → studeia.com ``` Ou pour un sous-domaine (recommandé) : ``` formation.ecole.com → CNAME → studeia.com ``` ### 2. Panneau Studeia Settings > Domaine personnalisé > Ajouter un domaine > Valider. Traefik détecte le domaine via les labels Docker et génère un certificat Let's Encrypt en ~2 minutes. ### 3. Vérification ```bash curl -I https://formation.ecole.com # HTTP/2 200 # server: nginx (Traefik) # strict-transport-security: max-age=63072000 ``` ## Thèmes visuels — 9 options ### Dark (mode glass) 1. **Ocean Glass** (par défaut) — bleu océan profond 2. **Midnight Purple** — violet/mauve nocturne 3. **Forest Emerald** — vert émeraude 4. **Sunset Amber** — ambre/corail chaleureux 5. **Cyberpunk Neon** — néon vert/rose 6. **Rose Gold** — rose doré élégant ### Light (mode solid/material) 7. **Minimal Light** — épuré, neutre 8. **Corporate Slate** — professionnel, ombres douces 9. **Arctic Frost** — glass clair (fond gris-bleuté) Chaque thème définit : une palette de 4 couleurs, une police (Outfit, Playfair Display ou système), un mode de mise en page (glass/solid/material), un type d'arrière-plan (image/solid/gradient). [Détails dans le design-system](/features/design-system/overview-9-themes). ## CSS personnalisé Pour les personnalisations au-delà des thèmes, l'administrateur peut ajouter son propre CSS : - Champ dans Settings > Thème > CSS personnalisé - Assaini (max 10 Ko) - Bloque `@import`, `url(http...)`, `expression()` (anti-XSS) - Appliqué sur toutes les pages du tenant ## Masquer la marque Studeia (Enterprise) Le plan Enterprise permet de supprimer : - « Powered by Studeia » dans le pied de page - Les mentions « Studeia » dans les e-mails par défaut (remplacées par le nom du tenant) - Le favicon Studeia (remplacé par le vôtre) - La page de connexion rebrandée avec votre logo + couleurs À demander via [suporte@studeia.com](mailto:suporte@studeia.com). ## White-label mobile Par défaut, l'application mobile Studeia (feuille de route Android/iOS) effectue une requête vers `/api/mobile/tenant-branding` après connexion et applique : - Le logo du tenant - Les couleurs du thème - Le nom d'affichage - Les fonctionnalités activées/désactivées (feature flags) Pour le plan Enterprise, il est possible de générer un **build dédié** avec : - Bundle ID personnalisé (com.ecole.app) - Logo + nom dans le launcher - Écran de démarrage personnalisé - Publié sur les stores via votre Apple Developer Account + Google Play Console ## Voir aussi - [Multi-tenancy](/platform/multi-tenancy) - [Email templates](/features/email/templates) ## FAQ **Q: Studeia est-il vraiment un white-label complet ?** Oui. Le plan Enterprise permet de supprimer totalement la marque Studeia : domaine personnalisé (studeia.ecole.com), logo personnalisé, couleurs institutionnelles, police de marque, e-mails envoyés depuis votre propre domaine, personnalisation du thème visuel avec votre propre CSS. Les plans Mini/Crescimento/Escala conservent un pied de page discret « Powered by Studeia ». **Q: Comment configurer un domaine personnalisé ?** 1) Configurez un CNAME dans votre DNS pointant votre sous-domaine vers studeia.com. 2) Dans le panneau d'administration, allez dans Settings > Domaine personnalisé et ajoutez le domaine. 3) Traefik génère automatiquement un certificat Let's Encrypt (~2 min). Aucun coût supplémentaire pour le TLS. **Q: Puis-je envoyer des e-mails depuis mon propre domaine ?** Oui. Configurez TenantEmailConfig avec votre SMTP, Resend ou SendGrid. Expéditeur personnalisé, modèles brandés avec votre logo, prise en charge des préférences de désinscription et de digest par utilisateur. 40 modèles par défaut en 4 langues (10 slugs x 4 locales). **Q: Combien de thèmes visuels existe-t-il ?** 9 thèmes intégrés : 6 dark glass (Ocean Glass, Midnight Purple, Forest Emerald, Sunset Amber, Cyberpunk Neon, Rose Gold) + 3 light solid/material (Minimal Light, Corporate Slate, Arctic Frost). Chacun avec une palette complète, une police, un mode de mise en page (glass/solid/material). Le tenant définit lequel est par défaut et si les utilisateurs peuvent changer de thème. --- # [fr-FR (AI-translated)] Cas d'usage : Formation en entreprise (L&D) avec Studeia URL: https://docs.studeia.com/use-cases/corporate-training Locale: fr-FR Section: use-cases Updated: 2026-05-23 **Short answer:** Studeia répond aux besoins L&D en entreprise avec SSO Enterprise (SAML/OIDC), SCIM 2.0 avec group→course mapping (inscription automatique via IdP), certificats Open Badges 3.0 vérifiables, suivi de conformité via carnet de notes, piste d'audit complète, API publique pour intégrer Workday/BambooHR/Salesforce, RGPD via DPA. TCO typique R$200-400k sur 3 ans pour une entreprise de 500 employés — contre USD $270-540k sur Cornerstone OnDemand. ## Problèmes L&D que Studeia résout 1. **Provisionnement manuel** — les RH ajoutent/suppriment les employés un par un → SCIM 2.0 automatise 2. **Multiples connexions** — l'employé retient 10 mots de passe → SSO via Okta/Azure AD 3. **Conformité oubliée** — les formations obligatoires passent à la trappe → automatisation + rappels 4. **Certificats non reconnus** — PDF générés sans vérification → OB 3.0 W3C Verifiable Credentials 5. **Suivi impossible** — les RH ne savent pas qui a fait quoi → tableau de bord + API 6. **Vendor lock-in** — quitter Cornerstone/Saba est douloureux → Studeia dispose d'une API + export ## Configuration type (1-2 semaines) ### Semaine 1 — Infrastructure | Jour | Tâche | |---|---| | 1 | Demo Enterprise Trial, configuration du branding (logo, couleurs, domaine personnalisé) | | 2 | Configurer SSO via SAML ou OIDC (Okta/Azure AD/Google) | | 3 | Configurer le provisionnement SCIM 2.0 | | 4 | Mapper les groupes AD → Cours Studeia (inscription automatique) | | 5 | Tester le flux avec 5 employés pilotes | ### Semaine 2 — Contenu | Jour | Tâche | |---|---| | 6 | Importer les cours existants (IMS CC, CSV de quiz) | | 7 | Générer automatiquement des cours à partir de PDF/PPTX existants (auto-course generation) | | 8 | Configurer les certificats OB 3.0 + modèles | | 9 | Créer des automatisations (rappel de conformité, notifier le manager lorsqu'un employé ne complète pas) | | 10 | Mise en production | ## SSO + SCIM en détail ### Exemple Okta ``` Okta Admin Dashboard → Applications → Browse App Catalog → "Studeia" (ou Create Custom App si pas encore dans le catalogue) → SAML 2.0 : Single Sign On URL: https://[tenant].studeia.com/api/auth/sso/[slug]/saml/callback Audience URI: https://[tenant].studeia.com Name ID format: EmailAddress Attribute Statements: firstName, lastName, email, department → Attribuer des groupes : All Employees, Sales Team, Engineering, etc. → SCIM Provisioning : Endpoint: https://[tenant].studeia.com/api/scim/v2 Token: [généré dans Studeia sous Paramètres > SSO > Jeton SCIM] Mappings: SCIM standard (firstName, lastName, email, active, groups) Scope: utilisateurs + groupes assignés ``` ### Exemple Azure AD Même structure via Enterprise Applications > Provisioning. Studeia suit les extensions Microsoft SCIM (PATCH avec opérations : add/replace/remove). ### Mapping Group→Course Dans Studeia > Paramètres > SSO > Groupes : | Groupe AD | Cours Studeia | Type | |---|---|---| | All Employees | Onboarding Général | required | | Sales Team | Sales Methodology 2026 | required | | Engineering | Security & Compliance | required | | Engineering | Advanced AWS | optional | Lorsque les RH ajoutent un employé au groupe « Engineering » dans l'AD → synchronisation SCIM → Studeia l'inscrit automatiquement à « Security & Compliance » + « Advanced AWS ». Lorsque les RH retirent l'employé du groupe (départ/mutation) → annulation de l'inscription. Groupes importants (>50 membres) : traitement via BullMQ asynchrone (jobId retourné). ## Certificats OB 3.0 Lorsqu'un employé complète un cours obligatoire et atteint le passingScore : ``` Déclencheur automatique : ↓ 1. handleGamificationEvent (XP + badge spécial « Cours X Complété ») 2. UserBadge.id créé 3. Page publique : https://[tenant].studeia.com/public/badges/verify/[userBadgeId] 4. JSON-LD OB 3.0 disponible : /api/badges/verify/[userBadgeId] 5. E-mail envoyé à l'employé avec le lien 6. (Optionnel) Notification au manager via automatisation ``` L'employé peut : - Ajouter à LinkedIn (bouton « Add to Profile » compatible OB 3.0) - Partager l'URL publique sur les réseaux sociaux - Exporter le JSON-LD vers un système RH externe - Imprimer le certificat stylisé (modèle personnalisable via la boutique de récompenses) Un auditeur externe peut vérifier l'authenticité en visitant l'URL publique (W3C Verifiable Credential). ## Suivi de conformité Tableau de bord sur `/institution/reports/compliance` : - % d'employés ayant complété les cours obligatoires - Liste des retardataires (délai dépassé + non complété) - Échéances à venir (30/60/90 prochains jours) - Par département (filtré par user.department du SCIM) - Export CSV pour audit Automatisations recommandées : ``` 1. 30 jours avant l'échéance : send_notification + e-mail à l'employé 2. 7 jours avant : send_notification + e-mail à l'employé + manager (CC) 3. 1 jour avant : send_webhook vers Slack/Teams des RH 4. Après l'échéance : send_webhook vers l'API Workday (suspendre l'accès, optionnel) ``` ## Intégrations via API API Studeia avec 64+ endpoints et scopes granulaires. Cas d'usage L&D courants : | Intégration | Endpoints | |---|---| | **Workday** (HRIS) | Provisionnement via SCIM. Synchronisation des nouveaux employés/départs. | | **BambooHR** | SCIM. Évaluations de performance récupérant les cours complétés. | | **Salesforce** | Formation de l'équipe commerciale → événement de complétion → champ personnalisé dans Salesforce. | | **Slack/Teams** | Automatisation + webhook pour notifier un canal. | | **Tableau/Power BI** | Extraction de métriques via l'API publique (carnet de notes, analytiques, conformité). | ## TCO 500 employés / 3 ans | Poste | Cornerstone OnDemand | Studeia Enterprise | |---|---|---| | Licence | USD $300k-540k (R$1,5M-2,7M) | R$108k-288k (R$3-8k × 36) | | Setup + implémentation | USD $30k-100k | R$0-30k | | Développement personnalisé | USD $50k-200k | Inclus via API | | Coût IA (proportionnel) | USD $0 (sans IA réelle) | R$54k-90k (R$3-5 × 500 × 36) | | **TOTAL 3 ans** | **R$1,8M-3,2M** | **R$162k-408k** | Studeia est typiquement 70-85 % moins cher que Cornerstone. ## Confidentialité et sécurité - **RGPD natif** — données en Europe (région Supabase EU disponible) - **GDPR** — DPA disponible pour les entreprises européennes - **Piste d'audit complète** — toute action admin/SSO/SCIM dans AdminAuditLog - **Conformité SOC 2** — en cours (2026 H2) - **Chiffrement au repos** — AES-256-GCM pour les identifiants OAuth + clés API - **Chiffrement en transit** — TLS 1.3 via Let's Encrypt - **Export de données** — l'employé peut demander ses données (droit d'accès RGPD Art. 15) - **Suppression de données** — anonymisation au départ de l'employé (conservation des données d'apprentissage 5 ans) ## Voir aussi - [SSO Enterprise](/platform/sso-enterprise) - [API publique](/api/overview) - [Multi-tenancy](/platform/multi-tenancy) ## FAQ **Q: Studeia convient-il à la formation en entreprise ?** Oui, avec une excellente adéquation pour les moyennes et grandes entreprises. Fonctionnalités clés : SSO Enterprise (SAML 2.0, OIDC, SCIM 2.0 avec Okta/Azure AD/Google Workspace), certificats vérifiables (Open Badges 3.0), suivi de conformité via le carnet de notes avec indicateurs d'intégrité, API publique pour s'intégrer avec Workday/BambooHR/Salesforce, piste d'audit complète, RGPD via DPA. **Q: Comment intégrer avec Okta/Azure AD/Google Workspace ?** Plan Enterprise. SCIM 2.0 (provisionnement automatique) + SAML/OIDC (connexion). Configuration en 1-2 jours : (1) Paramètres > SSO > Ajouter un fournisseur, choisir SAML ou OIDC, coller les métadonnées. (2) Paramètres > SSO > Jeton SCIM, générer un jeton Bearer. (3) Dans le IdP (Okta/Azure AD) : configurer Studeia comme Application Enterprise, coller l'URL du tenant + le jeton. (4) Mapping Group→Course dans Paramètres > SSO > Groupes : lorsque le IdP ajoute un utilisateur à un groupe, Studeia l'inscrit automatiquement au cours correspondant. **Q: Y a-t-il des certificats de fin de formation ?** Oui. Plan Enterprise. Lorsqu'un apprenant complète un cours avec la note minimale requise : Studeia émet un certificat via la boutique de récompenses (modèle personnalisable) + optionnellement un badge OB 3.0 (Open Badges 3.0 — W3C Verifiable Credential) avec une page publique de vérification. L'employé peut l'ajouter à LinkedIn (bouton « Ajouter au profil ») ou exporter le JSON-LD vers des systèmes RH. **Q: Le suivi de conformité fonctionne-t-il ?** Oui. Les cours peuvent être marqués comme obligatoires. Le tableau de bord administrateur affiche : % d'employés certifiés, échéances à venir, apprenants en retard. Les automatisations peuvent déclencher des rappels (ex. : « La formation Conformité expire dans 30 jours »). Le journal d'audit conserve un historique immuable pour les audits externes. **Q: Combien cela coûte-t-il pour une entreprise de 500 employés ?** Plan Enterprise sur devis (typiquement R$3.000-8.000/mois pour 500-2000 employés). Coûts supplémentaires : IA proportionnelle à l'usage (~R$3-5/utilisateur actif/mois), éventuellement développement personnalisé via l'API publique. TCO sur 3 ans typiquement R$200-400k. À comparer avec Cornerstone OnDemand (~USD $5-15/utilisateur/mois = USD $90-180k/an). --- # [fr-FR (AI-translated)] Cas d'usage : Prépa ENEM avec Studeia URL: https://docs.studeia.com/use-cases/enem-prep-cursinho Locale: fr-FR Section: use-cases Updated: 2026-05-23 **Short answer:** Les prépa-bac (cursinho ENEM) utilisent Studeia pour : (1) Simulations périodiques avec analytics psychométriques (alpha de Cronbach, point-biserial, analyse des distracteurs). (2) Tuteur IA avec RAG ingérant du contenu propriétaire. (3) Gamification (XP, badges, leaderboards, concours) pour réduire l'abandon. (4) Portail parents avec rapports IA. (5) Banque de questions réutilisable importable via GIFT/CSV. TCO typique R$5-10k/mois pour 200 élèves vs R$10-30k/mois sur Moodle managé. ## Le problème des établissements de préparation au ENEM Les établissements de préparation au ENEM (équivalent brésilien des classes préparatoires / prépas aux examens d'entrée) font face à 4 défis structurels : 1. **Taux d'abandon élevé** — 30 à 50 % des élèves abandonnent avant le ENEM (motivation, coûts, difficulté) 2. **Les examens blancs manuels sont chronophages** — préparer 1 examen blanc de 90 questions + correction + analytics prend des semaines 3. **Le tutorat en présentiel est coûteux** — répondre aux questions individuelles 24h/24 nécessiterait de nombreux professeurs 4. **Les parents veulent de la visibilité** — surtout pour les mineurs, les parents demandent un suivi mais l'établissement n'a pas le temps Studeia s'attaque à ces 4 problèmes. ## Comment Studeia résout ces problèmes ### 1. Examens blancs automatisés avec analytics psychométriques L'examen blanc est configuré une fois, réutilisable pour plusieurs groupes : ```json { "configuration": { "maxAttempts": 1, "timeLimitMinutes": 270, "shuffleQuestions": true, "shuffleOptions": true, "scoringPolicy": "highest", "reviewMode": "after_due_date", "passingScore": 50 }, "questions": [...] // ou importé depuis question_bank } ``` Après l'examen blanc, analytics disponibles sur `/institution/courses/[id]/lessons/[lid]/quiz-analytics` : - **Difficulté des items** — quelles questions 80 % des élèves réussissent (trop facile) ou < 30 % (trop difficile) - **Discrimination point-bisériale** — identifie les questions qui NE différencient PAS les bons des faibles (candidates à supprimer) - **Analyse des distracteurs** — quelle mauvaise réponse est la plus choisie (indice de misconception) - **Alpha de Cronbach** — cohérence interne de l'examen blanc (doit être > 0,7 pour être fiable) - **Distribution des scores** — histogramme des notes (détecte l'effet plafond/plancher) ### 2. Banque de questions importable Les établissements ont déjà des banques de questions en PDF, Word ou tableurs. Studeia accepte : - **Format GIFT** (standard Moodle/Canvas, compatible) - **CSV** (1 question par ligne + réponses en colonnes) - **API JSON** (`POST /api/institution/question-banks/[id]/items`) - **Saisie manuelle via l'interface** (éditeur visuel) Chaque question possède `concepts[]` (mappés sur le ConceptMastery de l'élève). Lorsque le tuteur IA détecte un misconception par concept, il suggère de refaire les questions associées. ### 3. Tuteur IA personnalisé par élève Le contenu de l'établissement est intégré dans le RAG (`POST /api/institution/courses/[id]/rag-ingest`) : - Polycopiés en PDF - Cours vidéo avec transcription (Whisper auto) - Diaporamas - Corrections d'exercices Quand un élève demande « Comment résoudre la question 47 de l'examen blanc de Mathématiques ? » : 1. Le RetrievalAgent cherche la correction dans le contenu 2. Le PedagogicalAgent choisit une stratégie basée sur le ConceptMastery de l'élève en Mathématiques 3. Le tuteur répond en citant le polycopié/cours spécifique 4. L'EvaluationAgent détecte les misconceptions (ex : « l'élève confond domaine et image ») 5. Quiz proactif inline : « Je vais te poser 2 questions similaires pour confirmer que tu as compris » ### 4. Gamification pour lutter contre l'abandon XP par activité + bonus streak : ``` Jour 1 : 50 XP (cours) + 30 XP (quiz) Jour 2 : 50 XP + 30 XP + bonus streak 2j Jour 7 : 50 XP + 30 XP + bonus streak 7j (+100 XP) Jour 30 : 50 XP + 30 XP + bonus streak 30j (+500 XP) ``` Badges avec 11 critères automatiques : - « Marathonien » — 30 jours de streak - « As des Maths » — 100 questions de maths correctes - « Top 10 % » — parmi les 10 % meilleurs à l'examen blanc - Badges personnalisés créés par l'admin via l'Agent IA de gamification Leaderboards par groupe classe + fenêtre hebdomadaire pour maintenir une compétition saine sans comparaison globale (qui démotive les élèves les plus faibles). Concours temporels (ex : « Championnat de la semaine — qui complète le plus de quiz ») : - Récompense : badge spécial + 1000 coins - L'élève échange ses coins contre un avatar personnalisé, un modèle de certificat, etc. ### 5. Portail parents avec IA GuardianLink vérifié par SMS (conformité LGPD + ECA pour les mineurs) : - Liaison 1 parent → plusieurs enfants - Le parent choisit le niveau d'accès par enfant (Progress, Chat history, Time restrictions) - Alertes automatiques via push/e-mail/in-app : - Inactivité (> 5 jours sans connexion) - Baisse de performance (> 20 % sur la semaine vs moyenne historique) - Étape franchie (module complété, badge spécial) - Difficulté sur un sujet (mastery < 0,4 sur un concept clé) Rapports périodiques générés par LLM : - **Quotidien** (Haiku) : « Jean a étudié 45 min aujourd'hui, il a complété 3 cours de Chimie. » - **Hebdomadaire** (Sonnet) : « Cette semaine Jean a progressé en Chimie (mastery +0,15) mais a régressé en Mathématiques... » - **Mensuel** (Sonnet avec graphiques) : narration pédagogique complète + recommandations ## Mise en place type (1 semaine) | Jour | Tâche | |---|---| | 1 | Essai plan Demo, configuration du branding, création de l'admin institutionnel | | 2 | Import de la banque de questions (GIFT/CSV) — 500 à 2 000 questions | | 3 | Structuration des cours (Mathématiques, Langues, etc.) avec modules et leçons | | 4 | Upload des polycopiés (PDF) + cours vidéo (synchronisation Drive) | | 5 | Lancement de l'ingestion RAG + configuration du tuteur IA (PromptTemplate personnalisé) | | 6 | Configuration de la gamification (l'Agent IA crée 10 badges + règles XP + 1 concours mensuel) | | 7 | Invitation des élèves + parents (SCIM si AD existant, sinon CSV) | ## TCO 200 élèves / 3 ans | Poste | Studeia | Moodle géré | |---|---|---| | Licence | R$108.000 (Enterprise R$3k/mois) | R$0 | | Hébergement + DevOps | Inclus | R$108.000 (R$3k/mois) | | Tuteur IA | R$0 (inclus) | R$36.000 (plugin Anthropic + admin) | | Gamification | R$0 (inclus) | R$10.000 (plugins) | | Analytics psychométriques | R$0 (inclus) | R$0 (plugin gratuit mais limité) | | Mobile B2B | R$0 (inclus) | R$0 (Moodle Mobile générique) | | Coût IA (200 élèves × R$5 × 36 mois) | R$36.000 | R$36.000 | | **TOTAL 3 ans** | **R$144.000** | **R$190.000** | Studeia ~24 % moins cher + mise en place en 1 semaine contre 60 à 90 jours pour Moodle. ## Cas réels (anonymisés) > « Un établissement de préparation de 300 élèves dans l'intérieur de l'État de São Paulo a migré de Moodle vers Studeia en 2 mois. Réduction de 35 % de l'abandon au premier semestre grâce à la gamification + alertes aux parents. Le coût total est passé de R$8k/mois à R$5k/mois IA incluse. » — témoignage client ## Voir aussi - [Quiz Engine](/features/assessment/quiz-engine) - [RAG Ingestion](/features/ai-tutor/rag-ingestion) - [Gamification](/features/gamification/overview) - [Comparatif Studeia vs Moodle](/comparisons/studeia-vs-moodle) ## FAQ **Q: Studeia est-il adapté aux établissements de préparation au ENEM ?** Oui, c'est l'un des meilleurs cas d'usage. Fonctionnalités clés : examens blancs configurables (timeLimit, shuffleQuestions, accessCode, scoringPolicy 'highest'), analytics psychométriques (alpha de Cronbach, discrimination point-bisériale, analyse des distracteurs pour identifier les questions problématiques), tuteur IA avec RAG intégrant le contenu propre de l'établissement, gamification (XP, badges, leaderboards) pour lutter contre l'abandon, portail parents avec rapports IA. **Q: Puis-je importer une banque de questions ENEM existante ?** Oui. POST /api/institution/question-banks importe via JSON, CSV ou format GIFT. Chaque question peut avoir concepts[] (liés à ConceptMastery pour le tuteur IA), des tags (filtres), une difficulté. La banque de questions est réutilisable dans plusieurs examens blancs + injectable dans le RAG du tuteur. **Q: Comment motiver les élèves à étudier régulièrement ?** Gamification native : XP par cours complété + bonus streak quotidien (7j = +100XP, 30j = +500XP). Badges automatiques avec 11 critères (ex : '100 questions correctes en Mathématiques'). Leaderboards par groupe classe (périmètre class_group, fenêtres weekly). Concours temporels avec 7 métriques (ex : 'Meilleur taux de réussite à l'examen blanc de la semaine'). Boutique de récompenses avec coins virtuels. + Agent IA dédié pour que l'admin crée une stratégie. **Q: Les parents peuvent-ils suivre la progression ?** Oui. Portail parents (liaison via GuardianLink vérifié) : alertes automatiques (inactivité 5+ jours, baisse de performance, difficulté sur un sujet), rapports périodiques générés par IA (quotidien Haiku, hebdomadaire/mensuel Sonnet avec narration pédagogique), progression par cours, activité détaillée. Pour les élèves mineurs : le parent a accès par défaut (conformité LGPD + ECA). **Q: Quel est le coût pour un établissement de 200 élèves ?** Plan Crescimento R$1.000/mois (50 élèves) ou Escala R$1.500/mois (100 élèves) ou Enterprise sur devis pour 200+ élèves (typiquement R$3.000-5.000/mois). Coût IA proportionnel à l'usage (R$3-8/élève/mois typiquement). TCO total : R$5.000-10.000/mois IA incluse. À comparer avec R$10.000-30.000/mois pour un Moodle géré + plugins + admin DevOps. --- # [fr-FR (AI-translated)] Cas d'usage : École de langues avec Studeia URL: https://docs.studeia.com/use-cases/language-school Locale: fr-FR Section: use-cases Updated: 2026-05-24 **Short answer:** Les écoles de langues (Wizard, Cultura Inglesa, Yazigi, écoles indépendantes) utilisent Studeia pour : (1) Vidéo interactive avec checkpoints pour le listening. (2) Flashcards avec SRS (algorithme SM-2) pour le vocabulaire. (3) Cours en direct via Zoom/Teams/Meet (conversation classes). (4) Gamification avec streak quotidien pour encourager la pratique régulière. (5) Tuteur IA pour répondre aux questions de grammaire/usage (RAG ingère le contenu de l'école). Reconnaissance vocale native encore en roadmap. ## Problèmes des écoles de langues 1. **Pratique constante** : une langue s'apprend par la répétition quotidienne, pas 2x par semaine en cours 2. **Compréhension orale difficile** : les élèves regardent des vidéos sans s'arrêter, sans internaliser 3. **Vocabulaire mémorisé-oublié** : sans SRS, les mots sortent de la mémoire en quelques jours 4. **Conversation insuffisante** : peu d'opportunités de pratiquer l'oral en dehors du cours 5. **Engagement variable** : Duolingo crée des accros, les écoles traditionnelles non 6. **Évaluation subjective** : les rédactions/l'oral corrigés manuellement, c'est long ## Comment Studeia résout ces problèmes ### 1. Vidéo interactive (écoute + compréhension) Sous-type de leçon `interactive_video` : ```json { "videoUrl": "...", "checkpoints": [ { "timestampSec": 45, "question": { "type": "multiple_choice", "question": "What did Sarah say her job is?", "options": ["Teacher", "Doctor", "Engineer", "Artist"], "correctIndex": 0, "explanation": "Sarah said 'I'm a teacher' at 0:42" } }, { "timestampSec": 120, "question": { "type": "fill_blank", "question": "She mentioned that she lives in ____.", "blanks": [{ "id": 0, "acceptedAnswers": ["London", "london"] }] } } ] } ``` L'élève NE peut PAS avancer sans répondre à chaque checkpoint. Cela force l'attention et le traitement actif. ### 2. Flashcards avec SRS (vocabulaire) Sous-type de leçon `flashcard_set` avec algorithme SM-2 modifié : ``` Carte : "house" → "maison" L'élève évalue : easy / good / hard / again Easy → prochaine révision dans 14j Good → 7j Hard → 1j Again → 0j (même session) ``` Studeia stocke `StudentFlashcardReview` avec `nextReviewAt` calculé. Notifie l'élève quand des cartes sont à réviser (push + in-app). Les cartes peuvent avoir de l'audio intégré (prononciation) : ```json { "front": "embarrassed", "back": "gêné", "audioUrl": "https://...embarrassed.mp3", "exampleSentence": "She was embarrassed when she forgot his name." } ``` Se synchronise sur l'application mobile pour révision hors ligne (cache 7 jours) — l'élève pratique dans le métro/bus. ### 3. Cours en direct (classes de conversation) La conversation nécessite une interaction en temps réel. Studeia intègre : - **Zoom** : idéal pour les grandes écoles (limite 1000 participants, enregistrement automatique) - **BBB** : open-source pour les écoles souhaitant un self-hosted (sans coûts Zoom) - **Teams** : pour les écoles qui paient déjà Microsoft 365 - **Google Meet** : pour les écoles sous Google Workspace Fonctionnalités : enregistrement automatique (Zoom/Teams/Meet), transcription VTT (Zoom/Teams) ingérée dans le RAG du cours, breakout rooms (Zoom), sondages (Zoom/Teams). ### 4. Gamification pour le streak quotidien Une langue s'apprend par la RÉPÉTITION QUOTIDIENNE. La gamification encourage : **Règles XP** (configurées via Gamification Agent) : ``` dailyLogin: 5 XP lessonComplete: 30 XP quizPass: 20 XP flashcardReviewSession (>= 20 cartes): 25 XP liveClassJoin: 50 XP chatTutorMessage (>= 5 messages en anglais): 10 XP Bonus streak : - 7 jours consécutifs : +100 XP + badge "1 semaine" - 30 jours : +500 XP + badge "1 mois" - 100 jours : +2000 XP + badge "Centurion" - 365 jours : +10000 XP + badge "Dédicace Annuelle" ``` Classement par classe (class_group), fenêtre hebdomadaire — compétition saine entre camarades. ### 5. Tuteur IA pour les questions PedagogicalAgent s'adapte à la langue : - Niveau débutant (CEFR A1-A2) : `direct_instruction` prédominant - Intermédiaire (B1-B2) : `scaffolding` + `socratic` - Avancé (C1-C2) : `challenge` Le tuteur répond dans la langue cible (le prompt indique : "répondez en anglais. Si l'élève fait une erreur de grammaire, corrigez-la avec tact."). Le RAG ingère le matériel propre à l'école (manuels, listes de vocabulaire, textes de lecture) — le tuteur cite le livre de l'école, pas Wikipedia générique. ### 6. Évaluation de l'écrit via LLM (optionnel) Pour les questions de type essai : - L'administrateur active la notation LLM (coût supplémentaire ~$0.01-0.05 par correction) - Sonnet évalue selon la rubrique configurée (grammaire + cohésion + vocabulaire + contenu) - Le professeur ne révise qu'un échantillon (10-20 %) - Réduit le temps de correction de 70-80 % ## Configuration typique (1 semaine) | Jour | Tâche | |---|---| | 1 | Trial Demo, branding (logo de l'école, couleurs), domaine personnalisé | | 2 | Importer professeurs + élèves via CSV (segmentés par niveau CEFR) | | 3 | Créer les cours par niveau (A1, A2, B1, B2, C1) avec modules par unité | | 4 | Upload des vidéos de leçons + créer des checkpoints interactifs pour 5 unités | | 5 | Créer des sets de flashcards de vocabulaire (importer depuis Anki via CSV) | | 6 | Configurer la gamification (l'agent IA crée une stratégie axée sur le streak) | | 7 | Former 5 professeurs pilotes + mise en production avec 1 classe | ## TCO 500 élèves / 3 ans | Poste | Studeia Enterprise | Plateforme propriétaire de l'école | |---|---|---| | Licence | R$180k (R$5k/mois × 36) | R$300k-500k (LMS custom propriétaire) | | Coûts IA proportionnels | R$108k (R$6/élève × 500 × 36) | R$0 (sans IA réelle) ou R$60k (tiers) | | **TOTAL 3 ans** | **R$288k** | **R$300k-560k** | Studeia est généralement 30-50 % moins cher + tuteur IA réel + mobile B2B + LTI. ## Points en attente ❌ **Reconnaissance vocale propre** : roadmap. Pour l'instant, intégrer avec Speechling/ELSA Speak via external_link. ❌ **Pratique de l'oral structurée** : nécessite de l'audio enregistré + analyse. Roadmap 2026 H2. ❌ **Auto-évaluation CEFR** : pas de test de niveau CEFR automatique intégré (créer un quiz manuel). ❌ **Partenaire de conversation IA** : tuteur IA par texte oui, par voix non (pas encore). ## Voir aussi - [Types de leçons](/features/cms/lesson-types) - [Contenu interactif](/features/interactive-content/overview) - [Gamification](/features/gamification/overview) - [Cours en direct](/features/live-classes/overview) ## FAQ **Q: Studeia remplace-t-il Duolingo pour les écoles de langues ?** Pour le B2C massif (consommateur individuel) : non, Duolingo compte 500M+ utilisateurs et une UX gamifiée spécialiste des langues. Pour le B2B (écoles de langues avec classes, professeurs, certificats, contrôle parental pour les enfants) : Studeia l'emporte — Duolingo for Schools est limité, sans multi-tenancy réel, sans white-label, sans LTI, sans gradebook structuré. Une école de langues peut utiliser Studeia comme LMS propriétaire avec IA + gamification. **Q: Studeia dispose-t-il de la reconnaissance vocale pour la prononciation ?** La reconnaissance vocale native n'est PAS encore implémentée (roadmap). Pour l'instant : le tuteur IA accepte la transcription texte et donne du feedback en conversation. Pour la pratique de la prononciation : intégrer avec des outils externes (Speechling, ELSA Speak) via external_link ou LTI. Roadmap 2026 H2 : intégration Whisper + Google STT pour l'audio enregistré. **Q: La vidéo interactive avec pauses pour répondre est-elle prise en charge ?** Oui, via le sous-type de leçon 'interactive_video'. Vidéo avec checkpoints (pauses obligatoires) à des timestamps spécifiques. À chaque checkpoint : question multiple_choice / fill_blank / etc. L'élève NE peut PAS avancer sans répondre. Utile pour la compréhension orale (arrêter la vidéo, demander 'Qu'a-t-elle dit ?'). **Q: Les flashcards fonctionnent-ils avec la spaced repetition ?** Oui, via le sous-type de leçon 'flashcard_set'. Algorithme SRS SM-2 modifié : l'élève indique la difficulté (facile/moyen/difficile), Studeia planifie automatiquement la prochaine révision (1j, 3j, 7j, 14j, 30j croissant). Les cartes peuvent avoir de l'audio intégré pour le vocabulaire. Se synchronise sur l'application mobile pour révision hors ligne (cache 7 jours). --- # [fr-FR (AI-translated)] Cas d'usage : École primaire brésilienne avec la BNCC URL: https://docs.studeia.com/use-cases/primary-school-bncc Locale: fr-FR Section: use-cases Updated: 2026-05-24 **Short answer:** Les écoles K-12 brésiliennes utilisent Studeia pour : (1) Alignement BNCC via tags par compétence sur cours/quizzes. (2) Portail parents avancé avec narratif IA (rapports quotidiens/hebdomadaires/mensuels par LLM). (3) Protections mineurs (User.isMinor + GuardianLink + LGPD + ECA + Supervisor Agent IA). (4) Gamification kid-friendly (XP, badges visuels, leaderboards par classe). (5) Tuteur IA avec PedagogicalAgent adaptant le langage par âge. Coût typique R$5-8k/mois pour 300 élèves. ## Problèmes auxquels le K-12 brésilien est confronté 1. **BNCC obligatoire mais suivi manuel** — les écoles cartographient les compétences dans des tableurs, sans visibilité réelle de la couverture 2. **Les parents exigent de la transparence** — surtout pour les mineurs, sans outil dédié 3. **Insécurité numérique des mineurs** — exposition à des contenus inadaptés, contact avec des inconnus 4. **LGPD + ECA pour les enfants** — l'école a besoin du consentement parental, de règles de conservation des données, etc. 5. **Faible engagement** — Google Classroom fonctionne mais manque d'une gamification motivante 6. **Différences de rythme** — les élèves rapides s'ennuient, les élèves lents se démotivent (une adaptation est nécessaire) ## Comment Studeia répond à ces enjeux ### 1. Alignement BNCC via des tags Chaque cours/quiz/question peut être tagué : ``` EF02LP01 (Língua Portuguesa, 2e année, première compétence) EF03MA05 (Mathématiques, 3e année, cinquième compétence) EF05CI09 (Sciences, 5e année, neuvième compétence) EM13MAT401 (Ensino Médio intégré, Mathématiques, domaine 4) ``` Rapports disponibles : - Couverture BNCC par classe/élève (% de compétences travaillées) - Compétences sans couverture (analyse des lacunes) - Compétences avec faibles résultats collectifs (revoir la méthodologie) **Limitation honnête** : Studeia ne dispose pas d'un catalogue BNCC pré-mappé. L'école définit ses propres tags (opération à faire une seule fois, réutilisable chaque année). ### 2. Portail parents avec narration IA GuardianLink lié par SMS (anti-fraude, nécessite le numéro du parent + un code) : ``` Élève (User, isMinor=true) ↔ GuardianLink (verified via SMS) ↔ Parent (User, role=parent) ``` Le parent choisit le niveau d'accès par enfant (ProgressSharingConfig) : - viewProgress (notes, progression curriculaire) - viewChatHistory (conversations avec le tuteur IA) - viewActivityLog (connexion, temps d'utilisation, pages visitées) - viewMessages (messages avec l'enseignant — optionnel) - receiveAlerts (push/email/in-app) - setTimeRestrictions (limites horaires d'utilisation de l'application) **Pour les moins de 13 ans** : accès complet par défaut (LGPD + ECA). Pour les 13-17 ans : le parent configure le niveau. Alertes automatiques (StudentActivityLog + MonitoringAlert) : - **Inactivité** : 5 jours ou plus sans connexion → alerte + email/push - **Baisse de performance** : >20 % en dessous de la moyenne historique sur la semaine - **Étape franchie** : module complété / badge spécial obtenu / passage de niveau - **Difficulté sur un sujet clé** : maîtrise < 0,4 sur une compétence BNCC importante - **Risque** : score RiskAssessmentService >= 50 (multi-facteurs) Rapports LLM : - **Quotidien** (Haiku, ~$0,001) : « Jean a étudié 30 min en Mathématiques aujourd'hui. Il a complété 2 cours. Difficulté sur les équations du premier degré. » - **Hebdomadaire** (Sonnet) : narration pédagogique de 200 mots avec points forts, axes d'amélioration, recommandations - **Mensuel** (Sonnet avec graphiques) : rapport complet + comparaison avec la période précédente ### 3. Protections pour les mineurs User.isMinor=true active : 1. **Tuteur IA renforcé** : le system prompt inclut des garde-fous supplémentaires (« vous parlez avec un enfant, évitez les sujets inappropriés, encouragez toujours positivement ») 2. **Supervisor Agent prioritaire** : classifie avec une sensibilité accrue (les catégories self_harm/sexuel/violence se déclenchent plus rapidement) 3. **Filtres de contenu** : ne voit pas les messages des adultes non liés 4. **Messages directs restreints** : uniquement l'enseignant + les élèves de la même classe (pas d'adultes inconnus) 5. **Images avec précaution** : le téléchargement de photos nécessite le consentement parental 6. **LGPD Art. 14 (enfants)** : le traitement des données d'un mineur requiert un consentement spécifique, conservation avec une durée définie ### 4. Gamification adaptée aux enfants Configurée via le Gamification Agent (l'administrateur demande via le chat) : > « Créez une gamification pour le cycle primaire axée sur la régularité (streaks quotidiennes), les accomplissements visuels (10 badges colorés par matière) et la coopération (pas de compétition agressive). Classement uniquement au sein de la classe, sans classement global. » Résultat : - XP par cours complété, avec bonus streak (5 jours = +50 XP) - Badges visuels colorés par matière (Mathématiques = bleu, Sciences = vert, etc.) - 11 critères automatiques (ex. : « Plus que 2 jours pour compléter la streak hebdomadaire », « Vous avez déjà résolu 50 questions de Mathématiques ») - Classement limité à la classe (class_group), fenêtre hebdomadaire — évite la compétition toxique - Boutique de récompenses avec objets virtuels non tangibles (avatar personnalisé, couleur de nom) ### 5. Tuteur IA adapté par âge PedagogicalAgent ajuste la stratégie : - Enfant + maîtrise < 0,5 : **direct_instruction** plus fréquente (explication claire avec des exemples concrets, éviter l'abstraction) - Enfant + bon niveau : **guided_practice** avec des exercices progressifs (pas de challenge encore) - Langage : le tuteur répond avec un vocabulaire adapté à l'âge (system prompt avec `studentAgeRange: "child" | "teen" | "adult"`) - Renforcement positif : commence toujours par ce que l'élève a RÉUSSI avant de pointer une erreur ## Mise en place typique (2 semaines) | Semaine | Tâche | |---|---| | **Semaine 1 — Infrastructure** | | | Jours 1-2 | Essai Demo plan, configurer le branding (logo école, couleurs, domaine personnalisé ecole.com.br) | | Jour 3 | Importer enseignants + élèves via CSV ou SCIM (si déjà un AD) | | Jour 4 | Configurer les classes (ClassGroup) par niveau + section | | Jour 5 | Lier les parents via GuardianLink (SMS) + former 5 parents pilotes | | **Semaine 2 — Contenu + Gamification** | | | Jours 6-7 | Importer/créer les cours par matière (Français, Mathématiques, Sciences, etc.) avec des modules par trimestre | | Jour 8 | Tagger tout avec les compétences BNCC (une seule fois, réutilisable chaque année) | | Jour 9 | Configurer la gamification (l'Agent IA crée la stratégie adaptée aux enfants) | | Jour 10 | Former 3 enseignants pilotes + mise en production | ## Coût total de possession : 300 élèves / 3 ans | Poste | Studeia Enterprise | Google Workspace + Moodle | |---|---|---| | Licence | R$144k (R$4k/mois × 36) | R$0 Google + R$0 Moodle | | Hébergement + DevOps | Inclus | R$72k (R$2k/mois admin partiel) | | Portail parents robuste sur mesure | Inclus | R$40k (développement) | | Plugins (IA, gamification, suivi BNCC) | Inclus | R$30k | | Coût IA (300 × R$4/mois × 36) | R$43k | R$30k (proportionnel) | | **TOTAL 3 ans** | **R$187k** | **R$172k** | Les coûts sont similaires — mais Studeia offre des fonctionnalités modernes (tuteur IA, narration IA pour les parents, badges OB 3.0) que Moodle nécessiterait de développer sur mesure ou via des plugins limités. ## Quand NE PAS utiliser Studeia en K-12 ❌ École publique fédérale/d'État avec Moodle MEC déjà déployé (Moodle MEC préférable pour la conformité) ❌ École très petite (<30 élèves) — le coût n'est pas justifié (utilisez Google Classroom gratuitement) ❌ École sans connexion Internet stable (Studeia nécessite une connexion + cache partiel) ## Voir aussi - [Portail parents](/features/parent-portal/overview) - [Gamification](/features/gamification/overview) - [Conformité LGPD](/legal/lgpd-rights-guide) - [Studeia vs Google Classroom](/comparisons/studeia-vs-google-classroom) ## FAQ **Q: Studeia prend-il en charge la BNCC (socle national des programmes brésilien) ?** Oui, via des tags par compétence. Chaque cours/quiz peut être tagué avec des codes BNCC (ex. : EF02CI01, EM13MAT401). Des filtres par compétence sont disponibles dans le carnet de notes ainsi que des rapports de couverture curriculaire. Nous ne disposons PAS d'un catalogue BNCC pré-mappé (l'école définit ses propres tags) — mais la structure supporte entièrement l'alignement BNCC. **Q: Studeia est-il sécurisé pour les enfants de moins de 13 ans ?** Oui, avec des protections spécifiques. User.isMinor=true active : (1) Le tuteur IA avec des filtres de contenu renforcés dans le system prompt. (2) Le Supervisor Agent avec une sensibilité accrue. (3) La liaison GuardianLink obligatoire (LGPD + ECA — Statut de l'Enfant brésilien). (4) Le parent/responsable légal bénéficie par défaut d'un accès complet (ProgressSharingConfig). (5) Les messages directs avec des adultes non inscrits au même cours sont bloqués. (6) Photos/données personnelles soumises au consentement parental documenté. **Q: Les parents peuvent-ils suivre les progrès de leur enfant ?** Oui. GuardianLink lié par SMS (anti-fraude). Le parent choisit le niveau d'accès par enfant : voir les progrès, voir l'historique des conversations avec le tuteur IA, restrictions de temps d'utilisation. Alertes automatiques : inactivité pendant 5 jours ou plus, baisse de performance >20 % sur la semaine, étape franchie, difficulté sur un sujet clé. Rapports périodiques avec narration IA : quotidien (Haiku, « Jean a étudié 30 min en Mathématiques aujourd'hui »), hebdomadaire/mensuel (Sonnet, narration pédagogique complète). **Q: Combien cela coûte-t-il pour une école de 300 élèves ?** Formule Enterprise sur devis (typiquement R$4-6k/mois pour 300 élèves). Coût IA proportionnel (typiquement R$3-5/élève/mois). Coût total de possession ~R$5-8k/mois IA incluse. À comparer avec R$10-20k/mois pour un Moodle géré + plugins + administrateur partiel + portail parents sur mesure + IA via des tiers. **Q: Est-ce que cela fonctionne pour le cycle primaire (CP–CM2, 1re–5e année) ?** Oui, avec une interface adaptée. Fonctionnalités pour l'âge : gamification avec badges visuels colorés, tuteur IA avec un langage simple (PedagogicalAgent adapte la stratégie en 'direct_instruction' pour les enfants), narration audio optionnelle, contrôle du temps via l'application. Cela nécessite toutefois une implication parentale active (les jeunes enfants n'utilisent pas l'application/le PC seuls). --- # [fr-FR (AI-translated)] Cas d'usage : Certification professionnelle avec Studeia (OB 3.0 vérifiable) URL: https://docs.studeia.com/use-cases/professional-certification Locale: fr-FR Section: use-cases Updated: 2026-05-24 **Short answer:** Studeia pour la certification professionnelle : (1) Open Badges 3.0 (W3C Verifiable Credential JSON-LD) avec vérification publique + LinkedIn Add to Profile. (2) Moteur de quiz avec proctoring passif (changement d'onglet, anomalies temporelles) et analytics psychométriques (alpha de Cronbach, point-bisérial). (3) Gradebook avec rubriques multi-critères. (4) API pour intégration avec les ordres professionnels. Limites : sans checkout B2C natif (utilisez Stripe/Asaas) ni proctoring actif par webcam (utilisez Examity/ProctorU via LTI) ## Types de certifications pris en charge par Studeia | Type | Exemple | |---|---| | **Certification technique** | AWS, Cisco, CompTIA (pour les entreprises qui forment en interne) | | **Certification académique** | Troisième cycle, MBA, spécialisations | | **Certification réglementée** | Formation continue CFC (comptables), formation continue CRM (médecins), cours OAB | | **Certification d'entreprise** | Conformité interne, produits de l'entreprise, certifications propriétaires | | **Formations professionnalisantes** | Technicien informatique, agent de santé, micro-entrepreneur | ## Open Badges 3.0 — accréditations vérifiables Chaque UserBadge dans Studeia génère : ### 1. Page publique de vérification `/public/badges/verify/[userBadgeId]` (sans authentification) : ``` +----------------------------------------------------+ | 🛡️ Accréditation Vérifiée — OB 3.0 | +----------------------------------------------------+ | [Logo de l'émetteur] Cursinho XYZ | | | | 🏆 ENEM 2026 Champion | | Top 10% lors d'une simulation officielle | | | | Délivrée à : MARIA SILVA | | Le : 24 mai 2026 | | Catégorie : Academic Achievement | | | | [Télécharger JSON-LD] [Vérifier en ligne] | +----------------------------------------------------+ ``` ### 2. JSON-LD W3C Verifiable Credential `/api/badges/verify/[userBadgeId]` : ```json { "@context": [ "https://www.w3.org/2018/credentials/v1", "https://purl.imsglobal.org/spec/ob/v3p0/context.json" ], "type": ["VerifiableCredential", "OpenBadgeCredential"], "issuer": { "id": "https://cursinho-xyz.com", "type": "Profile", "name": "Cursinho XYZ" }, "issuanceDate": "2026-05-24T10:00:00Z", "credentialSubject": { "id": "did:web:user:maria-silva", "type": "AchievementSubject", "achievement": { "id": "https://cursinho-xyz.com/badges/enem-champion-2026", "type": "Achievement", "name": "ENEM 2026 Champion", "description": "Top 10% lors d'une simulation officielle", "criteria": { "narrative": "Top 10% lors de la simulation X" } } }, "proof": { ... signature numérique ... } } ``` ### 3. Schema.org EducationalOccupationalCredential Pour que Google + LinkedIn puissent indexer : ```json { "@type": "EducationalOccupationalCredential", "name": "ENEM 2026 Champion", "description": "Top 10% lors d'une simulation officielle", "credentialCategory": "achievement", "dateCreated": "2026-05-24", "url": "https://cursinho-xyz.com/public/badges/verify/abc", "recognizedBy": { "@type": "Organization", "name": "Cursinho XYZ" }, "about": { "@type": "Person", "name": "Maria Silva" } } ``` ### 4. LinkedIn Ajouter au profil Le bouton sur la page publique ouvre LinkedIn pré-rempli avec : - Nom de la certification - Émetteur (établissement) - Date d'émission - URL de vérification - Compétences associées L'apprenant n'a qu'à confirmer — l'accréditation est ajoutée au profil en 1 clic. ## Quiz engine pour les examens de certification ### Configuration type ```json { "configuration": { "maxAttempts": 1, "timeLimitMinutes": 180, "shuffleQuestions": true, "shuffleOptions": true, "accessCode": "CERT2026", "scoringPolicy": "latest", "reviewMode": "after_due_date", "passingScore": 70, "showResultsToStudent": false, "allowGoBack": false }, "questions": [...] // 100+ questions de la banque de questions } ``` ### Proctoring passif QuizAttempt enregistre en arrière-plan : - `tabSwitchCount` : l'apprenant a quitté l'onglet pendant l'examen - `copyPasteCount` : utilisation de Ctrl+C / Ctrl+V - `blurEvents` : fenêtre réduite - `avgTimePerQuestionSec` : temps moyen par question (anomalie si < 2s = devinette) - `flagged: boolean` : true si un signal dépasse le seuil Intégré dans le gradebook de l'administrateur : ``` Nom de l'apprenant | Score | Flags Maria Silva | 87 | 🛡️ Changements d'onglet : 12 (suspect) Joao Souza | 76 | (sans flags) ``` L'administrateur décide de l'action : annuler, maintenir, exiger un rattrapage en présentiel. ### Analyses psychométriques Après l'examen, /quiz-analytics retourne : - Difficulté des items (% de réussite par question) - Discrimination point-bisériale (questions qui NE différencient PAS les bons des faibles = candidates à la suppression) - Analyse des distracteurs (quelle mauvaise réponse est la plus populaire) - Alpha de Cronbach (cohérence interne >= 0,7 = test fiable) - Distribution des scores Pour les certifications : identification des questions problématiques + validation de la fiabilité du test. ### Proctoring actif (limitation) Pour les certifications nécessitant un proctoring avec webcam/microphone/partage d'écran (AWS, Cisco, CFA, etc.) : **Studeia NE le propose PAS nativement** (questions de confidentialité + RGPD). **Solutions** : 1. Intégrer **Examity** / **ProctorU** / **Honorlock** via LTI 1.3 — l'apprenant passe l'examen dans la fenêtre Studeia, le proctoring est assuré par le service externe 2. Pour les examens en présentiel (centre agréé) : proctoring physique traditionnel + Studeia comme système de diffusion de l'examen ## API publique pour les intégrations Un ordre professionnel (CFC, CRM, OAB) consulte les certifications via l'API : ```bash GET https://[institution].studeia.com/api/institution/badges ?category=continuing-education &dateFrom=2026-01-01 &dateTo=2026-12-31 Authorization: Bearer mia_... Scope: badges:read ``` Retourne la liste des UserBadges émis sur la période. L'ordre traite via ETL vers son système. Pour une intégration plus poussée : l'automatisation par webhook de Studeia notifie l'ordre lorsqu'un apprenant complète un cours de conformité : ```json Trigger: lesson_completed (avec le tag "certification-exam") Action: send_webhook → POST https://ordre.gouv.fr/api/certifications Body: { studentCpf, certificationName, completedAt, score, badgeVerificationUrl } ``` ## Facturation B2C (limitation) Studeia est orienté B2B — l'établissement facture les apprenants directement via : - **Stripe** : carte internationale (USD ou BRL) - **Asaas** : PIX, boleto, carte (Brésil) Pour le B2C avec affiliés/marketplace/checkout intégré de type Hotmart/EadBox : **Solution** : utiliser **EadBox** ou **Hotmart** en front-end (checkout + affiliés) + Studeia comme LMS via API. L'apprenant paie sur EadBox/Hotmart → un webhook crée l'inscription dans Studeia automatiquement. ## TCO pour 1 000 certifications/an | Poste | Studeia | Plateforme personnalisée sur mesure | |---|---|---| | LMS (R$3k-5k/mois × 12) | R$36-60k | R$0 (mais hébergement + admin) | | Implémentation OB 3.0 | Inclus | R$50-100k de développement | | Proctoring passif | Inclus | R$30-50k de développement | | Proctoring actif (Examity LTI) | ~$5-15/examen = R$30-90k | Idem | | API publique | Inclus | R$50-100k de développement | | Coût IA (proportionnel) | R$10-30k | R$10-30k | | **TOTAL année 1** | **R$76-180k** | **R$140-280k** | Studeia est généralement 40-50 % moins cher + déploiement en 2 mois contre 6-12 mois sur mesure. ## Voir aussi - [Badges OB 3.0](/features/gamification/badges) - [Quiz Engine](/features/assessment/quiz-engine) - [Cas d'usage : Formation en entreprise](/use-cases/corporate-training) - [API publique](/api/overview) ## FAQ **Q: Studeia émet-il des certificats vérifiables (verifiable credentials) ?** Oui, via Open Badges 3.0 (W3C Verifiable Credential JSON-LD). Chaque UserBadge génère une page publique de vérification sur /public/badges/verify/[id] avec Schema.org EducationalOccupationalCredential. Compatible avec le bouton LinkedIn « Ajouter au profil ». Un vérificateur externe (recruteur, entreprise, ordre professionnel) confirme l'authenticité via URL publique + téléchargement JSON-LD. N'utilise PAS la blockchain — utilise la signature numérique W3C VC. **Q: Puis-je intégrer les ordres professionnels (CRM, OAB, CRC) ?** Via l'API publique de Studeia (64+ endpoints). L'ordre consulte la liste des certificats émis : GET /api/institution/badges (avec scope badges:read). Ou l'apprenant présente l'URL publique du certificat pour vérification manuelle par l'ordre. L'intégration automatique avec les systèmes des ordres nécessite un développement personnalisé (chaque ordre dispose de sa propre API). **Q: Y a-t-il un proctoring pour éviter la fraude lors d'un examen de certification ?** Proctoring passif natif : tabSwitchCount, anomalies temporelles, détection de copier/coller, événements de perte de focus — flags intégrés dans le gradebook (ShieldAlert). Proctoring actif (webcam/microphone/partage d'écran) : nous NE le proposons PAS pour des raisons de confidentialité/RGPD. Pour les certifications nécessitant un proctoring strict (CFA, AWS, Cisco) : intégrer Examity/ProctorU/Honorlock via LTI 1.3. **Q: Puis-je facturer le certificat/cours ?** Pour le B2B (l'établissement facture les apprenants) : Stripe + Asaas intégrés nativement. Pour le B2C avec affiliés/checkout intégré de type Hotmart : nous ne disposons PAS de système natif. Ceux qui ont besoin d'affiliés peuvent utiliser EadBox/EadPlataforma en front-end + Studeia comme LMS via intégration API. --- # [fr-FR (AI-translated)] Cas d'usage : Université avec Studeia (LTI + gradebook + rubriques) URL: https://docs.studeia.com/use-cases/university Locale: fr-FR Section: use-cases Updated: 2026-05-24 **Short answer:** Les universités utilisent Studeia selon 3 scénarios : (1) Remplacement complet du LMS existant (Moodle/Blackboard/Canvas) avec un TCO inférieur de 60 à 85 %. (2) Complément via LTI 1.3 — les universités sous Canvas utilisent Studeia comme tool provider avec tuteur IA ou gamification. (3) Formation en ligne native uniquement avec Studeia. Fonctionnalités clés : LTI 1.3 + AGS grade passback, gradebook pondéré avec rubriques multicritères, SSO Enterprise (SAML/OIDC/SCIM), tuteur IA multi-agent avec RAG par cours. ## 3 scénarios universitaires ### Scénario 1 : Remplacement total (nouvelle université privée / modernisation) **Profil** : Nouvelle université 100 % en ligne, université privée jusqu'à ~5 000 étudiants, établissement avec Moodle legacy souhaitant se moderniser. **Pourquoi Studeia** : - TCO 60-85 % inférieur à Canvas/Blackboard enterprise - UX moderne sans 6 mois de formation du personnel - Tuteur IA réel (vs Canvas AI/Blackboard AI naissants) - Application mobile B2B native white-label - Mise en place en 1-2 mois vs 6-12 mois pour Canvas/Blackboard - Conformité RGPD native (données hébergées en Europe) - Support en français **Migration** : IMS Common Cartridge depuis Moodle/Blackboard + étudiants via SCIM. Cours legacy via LTI 1.3 dans un premier temps. ### Scénario 2 : Complément via LTI (grande université publique déjà sous Canvas/Moodle) **Profil** : Grandes universités publiques avec Moodle/Canvas en production depuis 5-15 ans. **Pourquoi Studeia comme outil LTI** : - Nouveaux cours spécifiques (ex. : discipline d'Informatique avec tuteur IA réel) sans désinvestir le LMS principal - Un département pilote expérimente avant la décision institutionnelle - Intégration avec le gradebook existant via AGS grade passback - L'étudiant utilise le SSO institutionnel (Shibboleth) — aucun nouveau mot de passe - Coûts réduits : seuls l'enseignant + les étudiants du cours spécifique paient (R$3-8k/mois pour 100 étudiants) **Configuration LTI** (15 minutes) : 1. Studeia génère l'URL de l'outil + Client ID + JWKS dans /institution/lti-tools 2. Canvas Admin → Settings → Apps → Add App → By Client ID → coller 3. Configurez les placements (course navigation, assignment) 4. Dans le cours Canvas : ajouter l'outil Studeia ### Scénario 3 : Nouvelle université 100 % en ligne **Profil** : Université 100 % en ligne récente, accréditée, axée sur une tarification compétitive. **Pourquoi Studeia** : - Plateforme complète (CMS + tuteur IA + gradebook + LTI + mobile) sans facturation par module - Application mobile B2B essentielle (les étudiants en ligne utilisent leur téléphone) - Le tuteur IA réduit le coût du tutorat humain (1 tuteur humain pour 200-500 étudiants vs 1 pour 30-50 sans IA) - Certificats OB 3.0 vérifiables (W3C VC) — avantage différenciateur vs établissements concurrents ## Fonctionnalités critiques pour l'université ### Gradebook professionnel | Fonctionnalité | Détail | |---|---| | **Catégories pondérées** | Examens 60 % + Travaux 30 % + Participation 10 % | | **Rubriques multi-critères** | Chacune avec échelle 1-5 ou personnalisée + description par niveau | | **Drop lowest N** | Éliminer la moins bonne note de la catégorie (ex. : supprimer les 2 pires quiz) | | **Pénalité de retard** | -10 % par jour de retard automatique | | **Indicateurs d'intégrité** | ShieldAlert inline dans le quiz avec changements d'onglet / anomalies de temps | | **Politique de publication** | immediate / manual / scheduled (releaseAt) | | **Export CSV** | Compatible avec Google Sheets, Excel, systèmes académiques legacy | ### Moteur de quiz avec analytique psychométrique Pour les évaluations universitaires (examens, travaux) : - 8 types de questions (multiple_choice, fill_blank, matching, ordering, numeric avec tolérance, short_answer avec normalisation, essay) - Configuration : maxAttempts, timeLimitMinutes, shuffleQuestions/Options, accessCode, scoringPolicy - Analytique : difficulté des items, discrimination point-bisériale, analyse des distracteurs, alpha de Cronbach, distribution des scores - Banque de questions réutilisable + ingestion RAG pour que le tuteur IA cite les questions propres à l'établissement ### LTI 1.3 tool provider Studeia fonctionne comme outil intégré dans Canvas/Moodle/Blackboard : ``` Étudiant dans Canvas ↓ clique sur "Module Studeia" (LTI launch) Authentification OIDC automatique ↓ Studeia s'affiche dans l'iframe Canvas (ou nouvel onglet) ↓ L'étudiant complète l'activité ↓ Studeia envoie la note via l'endpoint AGS : POST {issuer}/api/lti/courses/{courseId}/line_items/{itemId}/scores ↓ La note apparaît dans le gradebook Canvas (source de vérité : Canvas) ``` Aucune migration de données — Canvas reste la source de vérité des cours. ### SSO Enterprise Plan Enterprise. Configuration en 1-2 jours : 1. Settings > SSO > Add Provider > SAML ou OIDC 2. Collez les métadonnées XML (SAML) ou l'URL de découverte (OIDC) du IdP institutionnel 3. Domaines autorisés (ex. : @etudiant.univ.fr) 4. SCIM 2.0 pour le provisionnement automatique (un nouvel utilisateur à l'université est intégré automatiquement) 5. Mapping Groupe → Cours (ex. : le groupe "Informatique 2026.1" inscrit automatiquement aux cours de la période) ### Multi-tenancy isolé par unité Les grandes universités peuvent avoir Studeia avec **un tenant par unité** (Faculté d'Ingénierie, Faculté de Médecine, Formation en ligne, etc.) avec : - Données isolées par unité - White-label distinct (couleur + logo par unité) - Administrateur local par unité (institution_admin) - Président/Vice-Président comme administrateur global (accès à toutes les unités) ## TCO comparé — université de 5 000 étudiants / 3 ans | Poste | Blackboard / Canvas Enterprise | Studeia Enterprise | |---|---|---| | Licence | USD $40k-125k/an × 3 = R$600k-1,875M | R$108k-288k (R$3-8k/mois × 36) | | Installation + implémentation | USD $25k-100k | R$0-30k | | Formation du personnel | USD $10k-50k | Inclus (documentation) | | Développement personnalisé | USD $50k-300k | Via API publique | | Coûts IA (5 000 × R$4 × 36) | N/A (Canvas AI en supplément) | R$720k | | **TOTAL 3 ans** | **R$1,5M-3,5M** | **R$828k-1,038M** | Studeia est généralement 30-60 % moins cher. L'écart se réduit car l'IA représente un coût proportionnel. ## Limites à prendre en compte 1. **Accréditations académiques** : Studeia ne dispose pas encore d'accréditations institutionnelles spécifiques (attendues pour 2026 H2). Pour certains établissements publics : peut être un point bloquant. 2. **SCORM 2004** : NON pris en charge. Pour les cours legacy SCORM : nécessite de les recréer ou de conserver l'ancien LMS. 3. **Systèmes d'information académiques (Banner, etc.)** : l'intégration via l'API publique est possible mais nécessite un développement personnalisé. 4. **Recherche académique** : nous n'avons pas de module dédié à la gestion de la recherche, des publications, des groupes de travail. L'accent est mis sur l'enseignement. 5. **Bibliothèques numériques** : nous ne sommes pas intégrés avec Pearson, Cengage, etc. Mais la synchronisation Drive/OneDrive fonctionne pour les ressources propres. ## Voir aussi - [SSO Enterprise](/platform/sso-enterprise) - [Gradebook](/features/assessment/gradebook) - [Studeia vs Canvas](/comparisons/studeia-vs-canvas) - [Studeia vs Blackboard](/comparisons/studeia-vs-blackboard) - [Studeia vs Moodle](/comparisons/studeia-vs-moodle) ## FAQ **Q: Studeia remplace-t-il Canvas/Moodle/Blackboard dans une université ?** Il peut remplacer totalement les petites/moyennes universités (jusqu'à ~5 000 étudiants) qui souhaitent se moderniser et réduire le TCO (60-85 % par rapport à Canvas/Blackboard). Pour les grandes universités déjà sous Canvas/Moodle : le compléter via LTI 1.3 est plus réaliste (Studeia comme outil externe pour des nouveaux cours spécifiques, sans désinvestir le LMS principal). **Q: LTI 1.3 fonctionne-t-il avec Canvas ?** Oui, Studeia est un LTI 1.3 tool provider. Canvas Admin > Settings > Apps > Add App > By Client ID. Configurez les placements (course navigation, assignment, etc.). Les notes se synchronisent automatiquement via AGS (Assignment and Grade Service). Même logique pour Moodle (Site Admin > Plugins > External tool) et Blackboard. **Q: Le gradebook de Studeia est-il adapté à l'enseignement supérieur ?** Oui. Catégories pondérées (ex. : Examens 60 % + Travaux 30 % + Participation 10 %), rubriques multi-critères avec échelles personnalisées, drop_lowest_n (éliminer la moins bonne note), pénalité de retard automatique, indicateurs d'intégrité (changement d'onglet, anomalies de temps), export CSV compatible avec les systèmes académiques legacy. Prise en charge de la moyenne pondérée, de la médiane et du score final calculé automatiquement. **Q: Le SSO Enterprise s'intègre-t-il avec les systèmes académiques (Banner, Workday Student) ?** Oui, via SAML 2.0, OIDC et SCIM 2.0. Configurez sur le IdP institutionnel (Shibboleth, ADFS, Okta, Azure AD) en pointant vers /api/auth/sso/[slug]. SCIM 2.0 synchronise automatiquement les utilisateurs + groupes. Pour une intégration plus poussée avec Banner/Workday : l'API publique Studeia (64+ endpoints) permet un ETL personnalisé. **Q: Combien d'étudiants par enseignant Studeia peut-il gérer ?** Techniquement : illimité (multi-tenant + Redis pour les classements + pgvector pour le RAG). Opérationnellement : testé avec 1 000+ étudiants par cours (grandes promotions universitaires). Performance : chat tuteur avec file d'attente < 5 s en pic de charge, le gradebook s'affiche en < 2 s pour 500 étudiants. ---