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

Tarefas & Avaliações

Marco M3: Painel do Professor (PROFESSOR)

📅04 de agosto de 2026
👤Wellington Santiago (via ZCode)
🔧Commits: c9b6ccd

📄 Documento de Execução — Card 14: [M3] Tarefas & Avaliações

Campo Valor
Card Trello [14] [M3] Tarefas & Avaliações
URL Trello https://trello.com/c/ESXkb3of
Marco M3 — Painel do Professor
Data execução 05/08/2026
Responsável Wellington Santiago (via ZCode)
Doc anterior Card 13: Chamada Digital (M3)
Próximo card Card 15: Plano de Aula & Materiais (M3)
Commits c9b6ccd

🎯 1. O que foi implementado

Substituído o protótipo mock da página /professor/tarefas (com tarefas hardcoded e modal que não persistia) por uma implementação real e completa do painel de Tarefas do professor, conectada ao banco via tRPC.

O professor agora pode criar tarefas (título, descrição, instruções detalhadas, prazo, nota máxima, anexos via upload real), revisar como rascunho (DRAFT), publicar (notifica todos os alunos matriculados), fechar (PUBLISHED → CLOSED, não aceita mais entregas), e avaliar entregas (nota + feedback + flag "permitir refazer") com o GradingModal.

A página de detalhe lista todas as entregas com status (Pendente/Entregue/Atrasada/Corrigida), número da tentativa (para tarefas refeitas do M1.5), nota atribuída, e botão "Corrigir"/"Rever". Ao avaliar, o aluno recebe notificação automática com a nota e feedback.

Também foram criados procedures professor.exam (criar/listar/publicar provas com 4 tipos de questão: MC/ESSAY/TRUE_FALSE/MIXED). O ExamBuilder completo (editor visual de questões + auto-correção MC/TF) fica como refinamento futuro — o schema Exam.questions é Json flexível e já suporta a estrutura.

✅ Critérios de aceite validados

# Critério Status
1 Criar tarefa para turma
2 Definir prazo e peso (nota máx)
3 Receber entregas (Card 7 já entrega)
4 Lançar feedback/nota (GradingModal)
5 Notificar alunos (publish + grade)
6 Rota tRPC task.create
7 Rota tRPC task.publish (DRAFT→PUBLISHED)
8 Rota tRPC task.close (PUBLISHED→CLOSED)
9 Rota tRPC task.detail (lista submissions)
10 Rota tRPC task.grade (score + feedback)
11 Rota tRPC exam.create / publish
12 Página /professor/tarefas (lista)
13 Página /professor/tarefas/nova (criar)
14 Página /professor/tarefas/[id] (detalhe + submissions)
15 Componente GradingModal (nota + feedback)
16 Upload de anexos (via /api/upload)
17 Auditoria: logar CREATE/UPDATE/PUBLISH
18 Validação: professor só em disciplinas atribuídas
19 Filtros por status (Todas/Rascunho/Aberta/Fechada)
20 allowResubmit (permitir refazer)

📁 2. Arquivos criados/modificados

Criados

Arquivo Função
src/app/(dashboard)/professor/tarefas/nova/page.tsx Form de criação de tarefa (DRAFT) com upload de anexos
src/app/(dashboard)/professor/tarefas/[id]/page.tsx Detalhe da tarefa + lista de entregas + GradingModal inline

Modificados

Arquivo Mudança
src/server/trpc/routers/professor.ts +sub-router task (7 procedures) + sub-router exam (3 procedures)
src/app/(dashboard)/professor/tarefas/page.tsx Reescrita total: removeu mock, agora lista tarefas reais com filtros

🗄️ 3. Schema do banco (mudanças)

Nenhuma mudança de schema — reutilizado:

  • Task (status DRAFT/PUBLISHED/CLOSED, dueDate, maxScore, attachmentUrls Json, instructions)
  • TaskSubmission (status PENDING/SUBMITTED/LATE/GRADED, score, feedback, attemptNumber, allowResubmit)
  • Exam (type MULTIPLE_CHOICE/ESSAY/TRUE_FALSE/MIXED, questions Json, duration, shuffleQuestions, showResults, availableFrom/Until)
  • ClassTeacher (validação de acesso)

🔌 4. Handoff para o próximo card

Procedures tRPC disponíveis (professor.task.*)

  • list({status?, classId?}){ tasks: [{ id, title, status, dueDate, _count.submissions, subject }] }
  • detail({taskId}){ task, submissions[], totalStudents }
  • create({title, description?, instructions?, subjectId, dueDate?, maxScore, attachmentUrls[]}){id}
  • update({taskId, ...}){id} (somente se DRAFT)
  • publish({taskId}){notified} (DRAFT→PUBLISHED + notifica alunos)
  • close({taskId}){ok} (PUBLISHED→CLOSED)
  • grade({submissionId, score, feedback?, allowResubmit?}){ok} (status GRADED + notifica aluno)

Procedures (professor.exam.*)

  • list({published?}){ exams[] }
  • create({title, type, subjectId, duration?, questions[], ...}){id}
  • publish({examId}){notified}

Defaults adotados (confirmar com cliente — em decisoes.md)

# Pendência Default adotado
1 Tipos de questão Todos: MC + TF + ESSAY + MIXED (enum ExamType já tem)
2 Timer da prova duration (minutos) existe no schema; bloqueio automático fica para o ExamBuilder
3 Embaralhar questões shuffleQuestions default false (campo existe)
4 Resultados ao aluno showResults default false (mostra só após prazo)
5 Tentativas por prova ⏳ Default 1 (não há campo attempts no schema ainda)
6 Anti-cola (bloquear aba) ⏳ Não implementado (complexidade alta de browser)
7 Avaliações por bimestre ⏳ Sem limite (professor cria quantas precisar)

📋 5. Checklist do Trello — status por item

Entregas (5/5)

  • Criar tarefa para turma
  • Definir prazo e peso
  • Receber entregas
  • Lançar feedback/nota
  • Notificar alunos

Especificação Técnica (20/30 implementados)

Não implementados nesta iteração (refinamento futuro):

  • ExamBuilder completo (editor visual de questões MC/TF/ESSAY + alternativas + gabarito) — o procedure exam.create aceita questions[] como Json, falta a UI de montagem
  • Auto-correção MC/TF (calcula score automático comparando com gabarito)
  • Páginas dedicadas /professor/provas/* (provas são criadas via API; UI fica para quando o ExamBuilder estiver pronto)
  • Job Bull de notificação (atualmente notificação síncrona no DB)
  • Socket.io live (nova tarefa em tempo real)
  • S3 signed URL para anexos (atualmente /api/upload local para DEV)

🚀 6. Deploy DEV

🧠 7. Contexto gerado para próximas etapas

  1. professor.task.grade é o procedure canônico de avaliação. Quando integrar correção visual (M1.5 saveVisualCorrection), ambos atualizam TaskSubmission — coordenar campos.
  2. allowResubmit na avaliação abre nova tentativa para o aluno (tentativa N+1). Já integrado com o Card 7 (aluno reenvia) e M1.5 (galeria).
  3. Notificação de nota (task.grade) usa type: 'SYSTEM_ALERT'. Quando Web Push estiver pronto, disparar push também.
  4. ExamBuilder é a próxima Feature grande dentro de M3: editor de questões com 4 tipos + auto-correção. O schema e procedures já suportam; falta a UI.
  5. Anexos via /api/upload (FormData → /public/uploads/). Para PROD, migrar para S3 presigned URL.

🎯 8. Próximo card

Card 15 [M3] Plano de Aula & Materiais

  • Spec: docs/execucao/15-m3-plano-aula.md
  • Foco: professor cria planos de aula (LessonPlan) e sobe materiais didáticos
  • Reuso: ProfessorShell, resolveTeacher(), ClassTeacher, upload de anexos
← Voltar para a visão geral