Skip to content

Sprint 2

Yuri edited this page Jun 17, 2026 · 7 revisions

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.


Usuário para acesso ao sistema:

Email: admin@unb.br · Senha: Admin123

Tabela de Features implementadas

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
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. Quando os dados são importados, emails são disparados para cada um dos usuários contendo um link de acesso com token que expira em 48h. Ao acessar o link contido no email, o usuário deverá definir a sua senha para que ele seja efetivamente cadastrado no sistema.

  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, ao acessarem o link enviado pelo email com token que expira em 48h, consigam definir uma senha permanente de sua escolha no primeiro acesso ao sistema.

Funcionamento

  1. Usuários importados via SIGAA (F06) recebem um email (presente na pasta "/notificacoes") contendo um link para que cadastre a senha de suas conta.
  2. O usuário que recebeu o email deve abrir o link que expira em 48h e cadastrar uma senha para a sua conta.
  3. Após realizar o cadastro de uma senha para a sua conta e confirmar, o usuário consegue entrar no sistema.

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