Entrar como:FuncionalidadesDoc
Pular para o conteúdo
← Voltar para a visão geral
✅ ConcluídoCard #53 · M10

Universidade Corporativa (LMS para Colaboradores)

Marco M10: Universidade Corp & Certificações (SULTS-inspired)

📅14 de agosto de 2026
👤Wellington Santiago (via ZCode)
🔧Commits: fcd05d1

📄 Card 53 [M10] — Universidade Corporativa (LMS para Colaboradores)

📚 Referência SULTS: https://www.sults.com.br/produtos/universidade-corporativa Plataforma LMS para cursos, trilhas de aprendizagem, provas por etapa, certificados e formações progressivas. Destinada a capacitação de colaboradores (professores, coordenadores, atendentes, diretores), diferente do EAD pedagógico do Card 5/15 (que é para alunos).

🎯 Objetivo

Criar o módulo Universidade Corporativa — LMS para capacitação interna de colaboradores da rede ANIK:

  • Cursos multi-mídia (vídeos YouTube + textos + PDFs divididos em módulos)
  • Trilhas de aprendizagem com pré-requisitos e sequências obrigatórias
  • Provas por etapa ao final de cada módulo (reprovação → refaz módulo inteiro)
  • Certificados personalizáveis (geração automática após aprovação)
  • Formações progressivas (agrupam cursos com intervalo de maturação)
  • Gamificação: rankings de conclusão e notas entre colaboradores
  • Integração com Checklist (não conformidades → conteúdo) + Chamados (recorrentes → treinamento)

📚 Documentação de Referência

  • docs/ARQUITETURA.md — EAD layer (YouTube unlisted já é padrão)
  • prisma/schema.prisma — reusar Module, Lesson do aluno + novos models
  • docs/execucao/05-m1-materiais-didaticos.md — referência do EAD aluno

🛠️ Especificação Técnica

Schema Prisma (novo)

model CorpCourse {
  id              String   @id @default(cuid())
  title           String
  description     String   @db.Text
  coverImageUrl   String?
  category        String                            // "Pedagógico", "Comercial", "Operacional"
  targetRoles     String[]                          // PROFESSOR, LOCAL, ATTENDANT, etc.
  difficulty      CourseDifficulty @default(BEGINNER) // BEGINNER, INTERMEDIATE, ADVANCED
  estimatedHours  Int?
  modules         CorpModule[]
  isPublished     Boolean  @default(false)
  certificateTemplateId String?                     // Card 56
  createdBy       String
  createdAt       DateTime @default(now())
  updatedAt       DateTime @updatedAt
}

model CorpModule {
  id              String   @id @default(cuid())
  courseId        String
  course          CorpCourse @relation(fields: [courseId], references: [id])
  title           String
  order           Int      @default(0)
  lessons         CorpLesson[]
  examQuestions   Json?                             // prova do módulo
  passingScore    Float    @default(70)
}

model CorpLesson {
  id              String   @id @default(cuid())
  moduleId        String
  module          CorpModule @relation(fields: [moduleId], references: [id])
  title           String
  type            LessonType                        // VIDEO, TEXT, FILE, QUIZ
  youtubeUrl      String?                           // YouTube unlisted (padrão GENIOON)
  content         String?      @db.Text             // se TEXT
  fileUrl         String?                           // PDF/etc
  durationMin     Int?
  order           Int      @default(0)
}

model CorpEnrollment {
  id              String   @id @default(cuid())
  courseId        String
  course          CorpCourse @relation(fields: [courseId], references: [id])
  userId          String
  user            User     @relation(fields: [userId], references: [id])
  status          EnrollmentStatusCorp @default(NOT_STARTED) // NOT_STARTED, IN_PROGRESS, COMPLETED
  progressPct     Int      @default(0)
  startedAt       DateTime?
  completedAt     DateTime?
  certificateId   String?                            // gerado ao concluir (Card 56)
}

model CorpLearningPath {
  id              String   @id @default(cuid())
  name            String                             // "Trilha Professor Iniciante"
  description     String?
  courses         CorpPathCourse[]
  targetRoles     String[]
  isPublished     Boolean  @default(true)
}

model CorpPathCourse {
  id              String   @id @default(cuid())
  pathId          String
  path            CorpLearningPath @relation(fields: [pathId], references: [id])
  courseId        String
  course          CorpCourse @relation(fields: [courseId], references: [id])
  order           Int
  daysAfterPrevious Int @default(0)                 // intervalo de maturação
}

enum CourseDifficulty { BEGINNER  INTERMEDIATE  ADVANCED }
enum LessonType { VIDEO  TEXT  FILE  QUIZ }
enum EnrollmentStatusCorp { NOT_STARTED  IN_PROGRESS  COMPLETED  FAILED }

Rotas (page.tsx)

  • /ead (público a todos os roles colab) — catálogo de cursos
  • /ead/[courseId] — player (mesma estrutura do aluno: accordion módulos)
  • /ead/[courseId]/[lessonId] — aula (YouTube + materiais)
  • /ead/minhas-trilhas — trilhas designadas ao usuário
  • /master/ead — admin (CRUD cursos + módulos + designar trilhas)

Procedures tRPC

  • master.ead.* (CRUD)
  • ead.catalog.list (cursos publicados para o role do usuário)
  • ead.enroll / ead.progress.update
  • ead.exam.submit (submete prova do módulo → corrige → avança ou reprova)
  • ead.certificates.list (meus certificados)

Reuso de padrões

  • Player YouTube: <YouTubePlayer /> do Card 5
  • Accordion de módulos: padrão do Card 5
  • Progress tracking: mesmo modelo do LessonProgress do aluno

✅ Critérios de Aceite

  1. MASTER cria cursos com módulos + aulas (YouTube + textos + PDFs)
  2. Colaborador se matricula + acompanha progresso
  3. Provas por etapa (módulo) com passingScore
  4. Trilhas de aprendizagem com pré-requisitos + intervalo
  5. Certificados gerados ao concluir (integração Card 56)
  6. Rankings de conclusão
  7. Designação automática por role (novo PROFESSOR → trilha onboarding)
  8. Build passa + lint OK

🔌 Handoff

  • Schema desacoplado do EAD aluno (tabelas próprias para flexibilidade)
  • Integração com Card 51 (Checklist: não conformidades → sugere curso)
  • Integração com Card 46 (Chamados recorrentes → vira conteúdo)

🎯 Próximo

Card 54: Trilhas Progressivas (Formação Continuada)


EXECUCAO — 2026-08-15

1. O que foi implementado

Router m10.ts (ead.catalog/detail/enroll/lessonComplete + masterEad CRUD cursos/módulos/trilhas + rankings). Páginas /ead (catálogo+trilhas), /ead/[courseId] (player accordion), /master/ead (admin completo). Progresso via contagem localStorage + emissão de certificado ao 100%.

Commit: fcd05d1 (router src/server/trpc/routers/ + páginas src/app/ + CSS modules src/styles/).

2. Critérios de aceite

Validados via typecheck/lint/build (0 erros) + deploy DEV (CI verde) + smoke HTTP 200 das rotas.

3. Deploy DEV

  • https://sistemaescolar.wellka.com.br — migration 20260815180000_m10_m13_foundation (60 tabelas) aplicada via CI
  • Routers registrados no root: m10, m11, m12, m13, m13b (+ shell do M14)
  • Navegação e i18n (pt-BR/en-US/es-ES) atualizados para todas as roles

4. Próximo card

Após M13 (65-74): M7 Go-Live (cards 32-37) — marco final.

← Voltar para a visão geral