Skip to content

Sprint 2

Yuri edited this page Jun 13, 2026 · 7 revisions

Sprint 2 — Documentação de Funcionalidades

Visão Geral

A Sprint 2 foi focada no desenvolvimento das features descritas na Sprint 1 por cada um dos membros, de tal maneira que foram implementadas tanto os cenários de teste quanto as funcionalidades.

O sistema CAMAAR é uma aplicação web desenvolvida em Ruby on Rails 8.1.3 com banco de dados SQLite3, destinada à gestão de avaliações acadêmicas na Universidade de Brasília. O sistema possui três papéis de usuário: Administrador, Professor e Estudante, cada um com acesso a diferentes funcionalidades.


Tabela de Features

ID Funcionalidade Issue Responsável Pontos
F01 Login de usuário #104 Yuri Santana Lopes 2
F02 Cadastro de usuário #100 Luidgi Varela Carneiro 2
F03 Redefinição de senha de usuário #107 João Vitor das Neves Romero 3
F04 Criação de formulário #103 João Felipe Stein 5
F05 Responder formulário criado #99 Arthur Souza Chagas 5
F06 Importar dados do SIGAA #98 João Vitor das Neves Romero 5
F07 Criar template de formulário #102 João Felipe Stein 5
F08 Gerar relatório do administrador #101 Arthur Souza Chagas 8
F09 Definição de senha #105 Yuri Santana Lopes 3
F10 Criação de formulário para discentes e docentes #113 Luidgi Varela Carneiro 3
F11 Atualizar base de dados com os dados do SIGAA #108 Yuri Santana Lopes 8
F12 Sistema de gerenciamento por departamento #106 Arthur Souza Chagas 8
F13 Visualização de formulários para responder #109 João Felipe Stein 3
F14 Visualização de resultados de formulários #110 Luidgi Varela Carneiro 5
F15 Visualização de templates criados #111 João Vitor das Neves Romero 2
F16 Edição / deleção de templates #112 João Felipe Stein 3

Descrição das Funcionalidades


F01 — Login de usuário

Responsável: Yuri Santana Lopes Issue: #104 Pontos: 2

Descrição

Permite que um usuário já cadastrado acesse o sistema através de suas credenciais (e-mail e senha). Após a autenticação bem-sucedida, o sistema redireciona o usuário para a página correspondente ao seu papel:

  • Administrador/gerenciamento
  • Professor/relatorios
  • Estudante/avaliacoes

Funcionamento

  1. O usuário acessa a rota GET /login e visualiza o formulário de login.
  2. Submete o formulário via POST /login informando e-mail e senha.
  3. O sistema busca o usuário pelo e-mail (normalizado para minúsculas) e verifica a senha com bcrypt via has_secure_password.
  4. Em caso de sucesso, o id do usuário é armazenado na sessão (session[:usuario_id]) e o redirecionamento é feito conforme o papel.
  5. Em caso de falha, o formulário é reexibido com mensagem de erro.

O encerramento de sessão é feito via DELETE /logout, que remove session[:usuario_id] e redireciona para a tela de login.


F02 — Cadastro de usuário

Responsável: Luidgi Varela Carneiro Issue: #100 Pontos: 2

Descrição

Permite que um novo usuário crie uma conta no sistema. Contas criadas por este fluxo recebem automaticamente o papel de Estudante.

Funcionamento

  1. O usuário acessa GET /signup e visualiza o formulário de cadastro.
  2. Preenche nome, e-mail, senha e confirmação de senha, e submete via POST /signup.
  3. O sistema cria um registro Usuario com role: :estudante.
  4. As seguintes validações são aplicadas:
    • Nome: obrigatório.
    • E-mail: obrigatório, formato válido e único no sistema (insensível a maiúsculas).
    • Senha: mínimo de 8 caracteres, contendo letras e números.
    • Confirmação de senha: deve corresponder à senha informada.
  5. Em caso de sucesso, o usuário é redirecionado para a tela de login com mensagem de confirmação.
  6. Em caso de erro, o formulário é reexibido com os erros de validação detalhados.

F03 — Redefinição de senha de usuário

Responsável: João Vitor das Neves Romero Issue: #107 Pontos: 3

Descrição

Permite que um usuário autenticado altere sua senha atual para uma nova senha de sua escolha.

Funcionamento

  1. O usuário autenticado acessa GET /senha/redefinir.
  2. O formulário exibe três campos: senha atual, nova senha e confirmação da nova senha.
  3. O formulário é submetido via POST /senha/redefinir.
  4. O sistema autentica a senha atual do usuário via authenticate.
  5. Se a senha atual for válida, atualiza o password_digest com a nova senha, sujeita às mesmas regras de complexidade (mínimo 8 caracteres, letras e números).
  6. A rota é protegida por before_action :require_login, impedindo acesso de usuários não autenticados.

F04 — Criação de formulário

Responsável: João Felipe Stein Issue: #103 Pontos: 5

Descrição

Permite que um administrador crie um formulário de avaliação associando um template de perguntas a uma turma específica e definindo o público-alvo (discente ou docente).

Funcionamento

  1. O administrador acessa GET /gerenciamento/formularios.
  2. O sistema carrega os templates disponíveis (TemplateFormulario) e as turmas cadastradas (Turma), com suas respectivas matérias.
  3. O formulário de criação exibe os campos:
    • Nome do formulário
    • Template (seleção a partir dos templates existentes)
    • Turma (exibida como "NOME DA MATÉRIA - Turma N - SEMESTRE")
    • Público-alvo (radio button: Discente ou Docente)
  4. O formulário é submetido via POST /gerenciamento/formularios.
  5. O sistema valida os campos com o contexto :criacao_por_publico:
    • Nome único por turma e público-alvo.
    • Template e turma obrigatórios.
    • Público-alvo deve ser discente ou docente.
    • Se o público for discente, a turma deve possuir ao menos uma matrícula ativa.
  6. O criador_formulario é associado automaticamente ao administrador logado.
  7. Em caso de sucesso, o formulário é salvo e o usuário é redirecionado com mensagem de confirmação.

F05 — Responder formulário criado

Responsável: Arthur Souza Chagas Issue: #99 Pontos: 5

Descrição

Permite que estudantes e professores respondam os formulários de avaliação que lhes foram destinados.

Funcionamento

  1. O usuário autenticado visualiza os formulários pendentes na tela de avaliações (ver F13).
  2. Ao selecionar um formulário, acessa a tela de resposta contendo as perguntas definidas no template associado.
  3. As perguntas podem ser do tipo discursivo ou múltipla escolha (radio), conforme o campo tipo_pergunta da entidade Pergunta.
  4. Ao submeter, o sistema registra um RespostaFormulario vinculando o usuário ao formulário, e um RespostaPergunta para cada resposta individual.
  5. Formulários já respondidos não são exibidos novamente para o mesmo usuário, pois a consulta de pendentes exclui registros já presentes em resposta_formularios.

F06 — Importar dados do SIGAA

Responsável: João Vitor das Neves Romero Issue: #98 Pontos: 5

Descrição

Permite que o administrador importe dados exportados do SIGAA para popular a base de dados do CAMAAR com turmas, professores e alunos.

Funcionamento

  1. O administrador acessa a página de gerenciamento e clica no botão "Importar Dados".

  2. Um modal é exibido solicitando dois arquivos JSON:

    • classes.json — contém os metadados das turmas (código e nome da matéria, código da turma, semestre e horário).
    • class_members.json — contém os membros de cada turma (docente e lista de discentes), referenciados pelo código da matéria, código da turma e semestre.
  3. O botão de importação permanece desabilitado até que ambos os arquivos sejam selecionados.

  4. Ao confirmar, os arquivos são enviados via POST /gerenciamento/importar e processados pelo ImportarDadosService.

  5. O serviço cruza os dois arquivos pelo triplo (code, classCode, semester) e cria, em uma única transação, os seguintes registros (apenas se ainda não existirem):

    Entidade Identificador único
    Departamento nome_departamento
    Materia codigoMateria
    Usuario (docente) email
    Professor usuario_id
    Turma materia + numero_turma + semestre_string
    Usuario (discente) email
    Estudante usuario_id
    Matricula estudante + turma
  6. Usuários importados recebem senha temporária no formato Camaar{matricula}.

  7. O código da turma (ex.: "TA") é convertido para número ordinal (A=1, B=2, ...).

  8. Ao final, uma mensagem de resumo indica a quantidade de registros criados.


F07 — Criar template de formulário

Responsável: João Felipe Stein Issue: #102 Pontos: 5

Descrição

Permite que o administrador crie templates de formulário reutilizáveis, compostos por um conjunto de perguntas que podem ser atribuídas a diferentes turmas em diferentes momentos.

Funcionamento

  1. O administrador acessa GET /gerenciamento/templates.
  2. Define o nome do template e adiciona perguntas de dois tipos:
    • Discursiva: campo aberto para resposta em texto.
    • Múltipla escolha (radio): conjunto de opções predefinidas e, opcionalmente, gabarito.
  3. O template é salvo como TemplateFormulario com suas perguntas (Pergunta) associadas.
  4. Templates criados ficam disponíveis para seleção na criação de formulários (F04).

F08 — Gerar relatório do administrador

Responsável: Arthur Souza Chagas Issue: #101 Pontos: 8

Descrição

Permite que o administrador visualize um relatório consolidado com informações referentes a todos os formulários respondidos no sistema, possibilitando análise de resultados por turma e matéria.

Funcionamento

  1. O administrador acessa GET /gerenciamento/resultados.
  2. O sistema consulta os formulários respondidos (RespostaFormulario) e agrega os dados por formulário, turma e matéria.
  3. O relatório exibe métricas como:
    • Total de respostas por formulário.
    • Média de notas (nota_media, nota_final) por turma.
    • Distribuição de respostas por questão (para perguntas de múltipla escolha).
  4. A funcionalidade é restrita a usuários com papel de Administrador.

F09 — Definição de senha

Responsável: Yuri Santana Lopes Issue: #105 Pontos: 3

Descrição

Permite que usuários importados do SIGAA — que recebem uma senha temporária gerada automaticamente no processo de importação — definam uma senha permanente de sua escolha no primeiro acesso ao sistema.

Funcionamento

  1. Usuários importados via SIGAA (F06) recebem uma senha temporária no formato Camaar{matricula} (ex.: Camaar190084006).
  2. No primeiro acesso, o usuário realiza login com a senha temporária.
  3. O sistema disponibiliza o fluxo de redefinição de senha em GET /senha/redefinir.
  4. O usuário informa a senha temporária como senha atual e define uma nova senha pessoal, obedecendo às regras de complexidade (mínimo 8 caracteres, letras e números).
  5. A nova senha substitui a temporária, completando o processo de definição de credenciais permanentes.

F10 — Criação de formulário para discentes e docentes

Responsável: Luidgi Varela Carneiro Issue: #113 Pontos: 3

Descrição

Estende a criação de formulários (F04) permitindo que o administrador especifique o público-alvo: discentes (estudantes matriculados na turma) ou docentes (professor responsável pela turma).

Funcionamento

  1. Durante a criação de um formulário, o administrador seleciona o público-alvo via botões de rádio: Discente ou Docente.
  2. A seleção define o campo publico_estudante no registro Formulario:
    • true → formulário destinado a discentes.
    • false → formulário destinado ao docente da turma.
  3. Ao criar formulários para discentes, o sistema valida se a turma selecionada possui ao menos uma matrícula ativa (trancado: false). Caso contrário, a criação é bloqueada com mensagem de erro.
  4. A filtragem de formulários pendentes por papel (F13) utiliza este campo para exibir apenas os formulários pertinentes a cada usuário.

F11 — Atualizar base de dados com os dados do SIGAA

Responsável: Yuri Santana Lopes Issue: #108 Pontos: 8

Descrição

Estende a funcionalidade de importação (F06) com comportamento de upsert: ao reimportar dados do SIGAA, registros já existentes são atualizados com novas informações, enquanto registros ausentes são inseridos. Nenhum dado existente é removido.

Funcionamento

O mesmo fluxo de importação da F06 é utilizado. A diferença está na lógica do ImportarDadosService, que substitui find_or_create_by! por find_or_initialize_by seguido de save! para as entidades com campos atualizáveis:

Entidade Campo atualizado Campo protegido
Materia nome_materia departamento (imutável após criação)
Usuario nome role, password, matricula
Turma professor materia, numero_turma, semestre_string

Campos protegidos como role e password nunca são sobrescritos, preservando quaisquer alterações feitas manualmente no sistema após a importação inicial.

Ao final da operação, a mensagem de resumo distingue registros criados de registros atualizados (ex.: "3 usuarios criados; 1 materias atualizados.").


F12 — Sistema de gerenciamento por departamento

Responsável: Arthur Souza Chagas Issue: #106 Pontos: 8

Descrição

Permite que o administrador gerencie usuários e turmas segmentados por departamento, refletindo a estrutura organizacional da universidade.

Funcionamento

  1. Cada Admin está vinculado a um Departamento, que por sua vez agrupa as Materias e suas respectivas Turmas.
  2. O painel de gerenciamento exibe as turmas e usuários filtrados pelo departamento do administrador logado.
  3. O administrador pode visualizar, dentro do seu departamento:
    • Turmas ativas por semestre.
    • Professores e alunos vinculados a cada turma.
  4. A hierarquia de departamento é estabelecida no momento da importação dos dados do SIGAA (F06), onde o campo docente.departamento do JSON define o Departamento associado à matéria.

F13 — Visualização de formulários para responder

Responsável: João Felipe Stein Issue: #109 Pontos: 3

Descrição

Permite que estudantes e professores visualizem a lista de formulários pendentes de resposta que lhes foram destinados.

Funcionamento

  1. O usuário autenticado acessa GET /avaliacoes.
  2. O sistema consulta os formulários pendentes com base no papel do usuário:
    • Estudante: formulários com publico_estudante: true cujas turmas possuam matrícula ativa do estudante (não trancada).
    • Professor: formulários com publico_estudante: false cujas turmas sejam de responsabilidade do professor.
  3. Formulários já respondidos (presentes em resposta_formularios para o usuário) são excluídos da listagem.
  4. Os resultados são exibidos como cartões contendo:
    • Nome do formulário.
    • Nome da matéria e semestre.
    • Nome do professor responsável pela turma.
  5. Se não houver formulários pendentes, uma mensagem de confirmação é exibida: "Você está em dia! Sem formulários para preencher."

F14 — Visualização de resultados de formulários

Responsável: Luidgi Varela Carneiro Issue: #110 Pontos: 5

Descrição

Permite que o administrador visualize os resultados consolidados de um formulário específico, incluindo as respostas recebidas e métricas de desempenho.

Funcionamento

  1. O administrador acessa GET /gerenciamento/resultados.
  2. Seleciona o formulário desejado a partir da lista de formulários criados.
  3. O sistema exibe:
    • Total de respostas recebidas vs. total de destinatários.
    • Para perguntas discursivas: listagem das respostas enviadas.
    • Para perguntas de múltipla escolha: distribuição percentual das respostas por opção.
    • Nota média consolidada (nota_media) quando aplicável.
  4. O acesso é restrito ao papel de Administrador.

F15 — Visualização de templates criados

Responsável: João Vitor das Neves Romero Issue: #111 Pontos: 2

Descrição

Permite que o administrador visualize a lista completa dos templates de formulário existentes no sistema.

Funcionamento

  1. O administrador acessa GET /gerenciamento/templates.
  2. O sistema lista todos os TemplateFormulario cadastrados, exibindo:
    • Nome do template.
    • Número de perguntas associadas.
    • Data de criação.
  3. A partir desta listagem, o administrador pode selecionar um template para edição (F16) ou utilizá-lo na criação de um novo formulário (F04).

F16 — Edição / deleção de templates

Responsável: João Felipe Stein Issue: #112 Pontos: 3

Descrição

Permite que o administrador edite ou remova templates de formulário previamente criados, desde que não estejam em uso por formulários ativos.

Funcionamento

  1. A partir da listagem de templates (F15), o administrador seleciona um template para edição ou exclusão.
  2. Edição: o administrador pode alterar o nome do template e adicionar, modificar ou remover perguntas individuais. As alterações são salvas via PATCH /gerenciamento/templates/:id.
  3. Exclusão: o administrador pode remover um template via DELETE /gerenciamento/templates/:id. O sistema verifica se o template está referenciado por algum Formulario ativo; em caso positivo, a exclusão é bloqueada com mensagem de aviso.
  4. O acesso é restrito ao papel de Administrador.

Clone this wiki locally