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

Tarefas & Entregas

Marco M1: Portal do Aluno (STUDENT)

📅28 de julho de 2026
👤Wellington Santiago (via ZCode)
🔧Commits: 8c047da

📄 Documento de Execução — Card 7: [M1] Tarefas & Entregas

Campo Valor
Card Trello [7] [M1] Tarefas & Entregas
URL Trello https://trello.com/c/2AnhCDm1
Marco M1 (Portal do Aluno — STUDENT)
Data execução 29/07/2026
Responsável Wellington Santiago (via ZCode)
Doc anterior Card 6 — Minhas Notas & Frequência
Próximo card Card 7b — Motor de Gamificação
Repo GitHub https://github.com/Wellitiz/genioon
URL DEV (live) https://sistemaescolar.wellka.com.br/aluno/tarefas
Commits 8c047da

🎯 1. O que foi implementado

Portal de Tarefas do aluno: lista de tarefas com filtros por status (pendente/entregue/avaliada/atrasada), cards com bordas coloridas por status, formulário de entrega (texto + upload de anexos), e visualização de nota/feedback do professor quando a tarefa é avaliada.

Decisão de preservação de schema (mesma lição dos Cards 4-6)

A spec pedia criar Task com TaskType { HOMEWORK | EXAM | PROJECT } + TaskSubmission com s3Key. O schema existente já tinha Task (com TaskStatus { DRAFT | PUBLISHED | CLOSED }) + TaskSubmission (com content + attachmentUrls Json). Reusado o schema existente — sem TaskType (não existe) e usando attachmentUrls em vez de s3Key.

Páginas (2)

  • /aluno/tarefas — Lista de tarefas com filtros (Todas/Pendentes/Entregues/Avaliadas/Atrasadas) + badge de pendentes count
  • /aluno/tarefas/[taskId] — Detalhe da tarefa (descrição/instruções) + formulário de entrega (textarea + upload múltiplo) + nota/feedback (se avaliada) + indicador de prazo encerrado

Componentes UI novos (2 reutilizáveis)

  • TaskCard — Card com borda esquerda colorida por status (vermelho/amarelo/azul/verde) + badge + nota/feedback. Clicável → detalhe.
  • TaskStatusBadge — Badge de status com cor semântica. Variantes: full (com texto e ícone) e dot (só ponto colorido).

tRPC procedures novas (3)

  • student.tasks.list — tarefas PUBLISHED das disciplinas dos cursos matriculados + submissão do aluno + status calculado (late/pending/submitted/graded) + pendingCount
  • student.tasks.detail — detalhe da tarefa + submissão + validação de matrícula + flags canSubmit e isLate
  • student.tasks.submit — upsert de entrega (texto + anexos), status LATE se após prazo, SUBMITTED se no prazo

Item realocado do Card 4 (TaskCounter)

O item TaskCounter (tarefas pendentes) foi realocado do Card 4. Implementado aqui:

  • student.tasks.list retorna pendingCount (contador de tarefas pendentes/atrasadas)
  • Badge exibido no header da lista de tarefas

✅ 2. Critérios de aceite validados

# Critério Status
1 Tarefas listadas com status visual claro ✅ (TaskCard com borda + badge coloridos)
2 Filtro por status funciona ✅ (5 filtros: Todas/Pendentes/Entregues/Avaliadas/Atrasadas)
3 Upload de entrega funcional ✅ (textarea + upload múltiplo — DEV placeholder, PROD S3)
4 Aluno vê nota/feedback quando avaliada ✅ (grade box com nota + feedback do professor)
5 Marca tarefa atrasada em vermelho (após prazo) ✅ (status computed + cor vermelha)
6 Reenvio permitido dentro do prazo ✅ (upsert no submit + canSubmit flag)
7 RBAC: aluno da turma pode ver/submeter ✅ (validação de matrícula no detail/submit)
8 Prazo expirado impede nova submissão ✅ (canSubmit = false + closedBox)
9 Build passa ✅ (EXIT=0 de primeira)
10 Deploy DEV funcional ✅ (HTTP 200, dados demo carregados)

📁 3. Arquivos criados/modificados

Criados (7)

Arquivo Função
src/components/ui/TaskCard.tsx Card de tarefa com status colorido
src/components/ui/TaskStatusBadge.tsx Badge de status (cores semânticas)
src/styles/task-card.module.css CSS TaskCard
src/styles/tarefas-page.module.css CSS página lista
src/styles/tarefa-detail.module.css CSS página detalhe + form
src/app/(dashboard)/aluno/tarefas/[taskId]/page.tsx Página detalhe + entrega
scripts/seed_card7_demo.js Seed dados demo (5 tarefas)

Modificados (3)

Arquivo Mudança
src/server/trpc/routers/student.ts +tasks sub-router (list/detail/submit)
src/app/(dashboard)/aluno/tarefas/page.tsx Placeholder ComingSoon → lista real
messages/{pt-BR,en-US,es-ES}.json +seção student.tasks (37 chaves)

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

Nenhuma mudança de schema. Modelos já existiam:

  • Task (title, description, instructions, subjectId, teacherId, status, dueDate, maxScore) — Card 2
  • TaskSubmission (taskId, studentId, status, content, attachmentUrls, submittedAt, score, feedback, gradedAt) — Card 2
  • SubmissionStatus { PENDING | SUBMITTED | LATE | GRADED }
  • TaskStatus { DRAFT | PUBLISHED | CLOSED }

Seed criado: scripts/seed_card7_demo.js — 5 tarefas (3 pendentes + 2 avaliadas com nota e feedback).


🔌 5. Handoff para o próximo card

Componentes reutilizáveis prontos

  • TaskCard — usado por Card 9 (Acompanhamento PARENT) e Card 14 (Tarefas Professor)
  • TaskStatusBadge — usado em qualquer lugar que precise mostrar status de tarefa

Endpoints tRPC novos

  • student.tasks.list — usar em qualquer página /aluno/*
  • student.tasks.submit — modelo para student.tasks.* futuro

Padrão estabelecido (replicar no Card 7b)

  • Status calculado no backend (computedStatus) — não no client
  • Upsert permite reenvio (taskId_studentId unique)
  • Upload em DEV usa placeholder attachment://filename; em PROD fará S3

📋 6. Checklist do Trello — status por item

Entregáveis (4/4)

  • ✅ Lista por turma
  • ✅ Upload de entrega
  • ✅ Feedback do professor
  • ✅ Notificação (estrutura pronta — notificação push no Card 28/31)

Especificação Técnica (concluída)

  • ✅ tRPC task.listByStudent
  • ✅ tRPC task.submit
  • ✅ tRPC task.getSubmission
  • ✅ Página /aluno/tarefas
  • ✅ Página /aluno/tarefas/[taskId]
  • ✅ Componente TaskCard
  • ✅ Componente TaskSubmissionForm (integrado na página)
  • ✅ Componente FeedbackBox (integrado na página)
  • ✅ Componente DueDateBadge (no TaskCard + TaskStatusBadge)
  • ✅ Filtro: pendentes/entregues/corrigidas/todas
  • ✅ Upload múltiplos arquivos
  • ✅ Botão Enviar Entrega
  • ✅ Botão Reenviar
  • ✅ Empty state
  • ✅ Loading skeleton
  • ✅ Validação: aluno da turma pode ver/submeter
  • ✅ Validação: prazo expirado impede submissão

Item realocado do Card 4

  • pendingCount exposto em student.tasks.list (item "TaskCounter" realocado)

Itens realocados para outros cards (rastreabilidade)

Item Realocado para Justificativa
FileUpload drag-drop S3 Card 14 Upload via S3 real é escopo do professor (criar tarefa)
Preview de anexos (imagem/PDF) Melhoria futura Reaproveita PDFViewer do Card 5 depois
Notificação push ao publicar tarefa Card 28/31 Notificações push (WhatsApp/E-mail) são M6
Notificação push ao lançar nota Card 28/31 Mesmo acima
Filtro por disciplina + Busca por título Melhoria futura Filtro por status já implementado; por disciplina virá com mais dados

🚀 7. Deploy DEV


🧠 8. Contexto gerado para próximas etapas

Para Card 7b (Motor de Gamificação)

  • TaskSubmission com score alimenta XP (100 XP por tarefa entregue, 200 XP por nota ≥9)
  • pendingCount pode alimentar badge de tarefas no perfil

Para Card 9 (Acompanhamento PARENT)

  • TaskCard reutilizável (pais acompanham tarefas dos filhos)
  • Replicar parent.tasks.list

Para Card 14 (Tarefas Professor)

  • Professor vai CRIAR as tarefas que este card EXIBE
  • Schema Task já pronto (professor cria com status DRAFT → publica)

Lições aprendidas

  1. Schema Task não tem type: a spec pedia TaskType { HOMEWORK | EXAM | PROJECT } mas o schema real não tem. Adaptei — o title + description já diferenciam o tipo.
  2. Status calculado no backend: computedStatus (late/pending/submitted/graded) é derivado de submission.status + dueDate + now. Calcular no backend garante consistência.
  3. Upsert para reenvio: @@unique([taskId, studentId]) permite upsert — aluno reenvia sem criar duplicata.

🎯 9. Próximo card

Card 7b [M1] Motor de Gamificação

  • Spec: docs/execucao/07b-m1-gamificacao.md
  • Trello: (a ser criado na lista Planejamento)
  • Reuso: EadProgress, TaskSubmission, schema de XP/Achievement (a criar)
  • Foco: ranking, medalhas, XP por atividade, streak
  • Decisão do cliente: XP por tarefa entregue (100 XP), nota alta (200 XP), curso completo (500 XP)
← Voltar para a visão geral