Pular para conteúdo

US2.8

Avaliação de Candidaturas pela Organização (RF11)

História de Usuário

Como organização, quero avaliar as candidaturas dos estudantes para aprovar ou recusar participantes nas vagas de voluntariado.


Rastreabilidade

Item Código / Referência
User Story US2.8
Requisito Funcional RF11 — Avaliar candidatura
Característica de Produto CP02 — Ciclo de Vagas e Engajamento
Requisitos Não-Funcionais RNF04 (responsivo iOS/Android), RNF06 (suporte a 1.000 usuários simultâneos)
Release Planejada R3 — Gestão e Triagem

Descrição

Implementar o fluxo de avaliação de candidaturas pela organização. A organização deve poder visualizar a lista de candidatos inscritos em cada vaga, acessar dados resumidos do perfil de cada estudante e tomar uma decisão: aprovar ou recusar. Esta funcionalidade é essencial para o ciclo de engajamento — sem ela, a organização não tem como selecionar os voluntários que participarão das atividades. O escopo é full-stack.


Critérios de Aceite (BDD / Gherkin)

Cenário 1: Aprovação de candidatura

Dado que a organização possui uma vaga "Apoio em Eventos" com 3 candidaturas aguardando avaliação
Quando acessa a lista de candidatos da vaga e seleciona "Aprovar" para a estudante "Maria Silva"
Então o sistema atualiza a situação da candidatura para aprovada, notifica a estudante e atualiza o contador de aprovados da vaga

Cenário 2: Recusa de candidatura

Dado que a organização está avaliando candidaturas da vaga "Aulas de Reforço"
Quando seleciona "Recusar" para o estudante "João Souza"
Então o sistema atualiza a situação para recusada e notifica o estudante sobre a decisão

Cenário 3: Organização tenta avaliar candidatura de vaga alheia

Dado que a organização B tenta acessar as candidaturas de uma vaga pertencente à organização A
Quando envia a solicitação
Então o sistema recusa a operação e informa que a ação não é permitida

Cenário 4: Reversão de decisão com confirmação

Dado que uma candidatura já foi aprovada pela organização
Quando a organização tenta alterar a decisão para recusada
Então o sistema exige confirmação explícita com o alerta "Esta candidatura já foi aprovada. Deseja realmente recusar?"

Cenário 5: Visualização da lista de candidatos organizada por situação

Dado que a organização acessa o painel da vaga "Apoio em Eventos"
Quando seleciona a opção "Ver candidatos"
Então o sistema exibe a relação de candidatos com nome, curso, universidade, data da inscrição e situação atual, separados nas categorias: Aguardando, Aprovados e Recusados


Regras de Negócio

  • Somente a organização responsável pela vaga pode avaliar as candidaturas a ela vinculadas.
  • As decisões possíveis para cada candidatura são: aprovar ou recusar.
  • Uma candidatura que esteja aguardando avaliação pode ser aprovada ou recusada a qualquer momento pela organização.
  • Caso a organização deseje reverter uma aprovação para recusa (ou vice-versa), o sistema deve exigir uma confirmação explícita dessa alteração.
  • Para subsidiar a tomada de decisão, a organização deve ter acesso a dados acadêmicos resumidos de cada candidato, como nome completo, curso e universidade.

Requisitos Técnicos

  • Backend: Django + DRF. Endpoints: GET /api/v1/organizations/me/opportunities/{id}/applications/ — listar candidaturas de uma vaga. PATCH /api/v1/applications/{id}/ — atualizar situação (aprovar/recusar).
  • Segurança: Verificar que opportunity.organization == request.user.organization_profile. Utilizar permission_classes = [IsAuthenticated] com validação customizada.
  • Frontend: React Native + Expo + NativeWind. Painel de candidatos com abas (Aguardando/Aprovados/Recusados), cards com dados do estudante, botões de aprovar/recusar.
  • Responsividade: Layout adaptável a iOS e Android (RNF04).
  • Testes: pytest para testar aprovação, recusa, transições inválidas, permissões e integridade dos dados após avaliação.

Referências de Design

  • Protótipo Figma (Geral): https://www.figma.com/design/f6bQuVohTvZLF5WWPEbNob/Liaison?node-id=488-7&t=Bn4zGHNjZFTDPrK5-0

Dependências

  • Relacionada a: #22 (Candidatura — RF10/US2.7), #13 (Cadastro de Organização — RF02/US1.2)
  • Bloqueada por: #22 (RF10 — Realizar candidatura)
  • Bloqueia: #26 (Listagem de Aprovados — RF13/US3.1), #27 (Registro de Frequência — RF14/US3.2)

Notas

  • ICE Score: I=9 C=7 E=5 = 315 | MoSCoW: Must | Quadrante: Quick Win
  • RF11 é essencial para o ciclo de engajamento: sem a avaliação das candidaturas, a organização não tem como selecionar voluntários, e a atividade de voluntariado não se concretiza.
  • A notificação ao estudante sobre a mudança de situação da candidatura será tratada na issue US2.10 (#25 — Notificações). Nesta issue, o foco está na atualização da situação da candidatura em si.
  • Considerar a possibilidade de adicionar um campo de justificativa na recusa, permitindo que a organização explique o motivo ao estudante (melhoria de experiência, não prevista no requisito funcional original).

Definição de Preparado (DoR)

Item de Verificação (Universal) Evidência / Rastreabilidade Situação
A história está bem descrita e com critérios de aceite? Documentada e alinhada com o escopo do MVP. ✔ Sim
Possui protótipos de interface necessários? Interface mapeada e disponível no Figma da equipe. ✔ Sim
A história é independente o suficiente para ser entregue? Cadeia de dependências resolvida (vide Matriz MVP). ✔ Sim
Foi estimada pela equipe? Estimada utilizando o método ICE Score. ✔ Sim

Definição de Pronto (DoD)

Pergunta Fundamental (Universal) Evidência de Implementação Status
O código foi implementado e revisado? Pull Request aprovado e fundido na branch principal. ✔ Sim
Coerente com o protótipo validado? O layout segue os componentes e tokens de design. ✔ Sim
Passou nos testes necessários? Testes (unitários/integração) executados e aprovados. ✔ Sim
A documentação está atualizada? Atualizada no repositório de requisitos. ✔ Sim

Critérios de Aceitação (CA)

  • Aprovação: A organização seleciona um candidato e aprova sua candidatura — o status é atualizado para aprovada, o estudante é notificado e o contador de aprovados da vaga é atualizado.
  • Recusa: A organização recusa um candidato — o status muda para recusada e o estudante é notificado.
  • Segurança entre organizações: Uma organização não consegue acessar ou avaliar candidaturas de vagas que pertencem a outra organização.
  • Reversão de decisão: Se uma candidatura já foi aprovada e a organização quiser mudar para recusada (ou vice-versa), o sistema exige confirmação explícita: "Esta candidatura já foi aprovada. Deseja realmente recusar?"
  • Lista organizada: A organização vê os candidatos separados em três grupos: Aguardando, Aprovados e Recusados — com nome, curso, universidade e data da inscrição de cada um.

Acesso & Evidência

  • Código Homologado: Repositório Principal
  • Status de Conclusão: 100% Entregue (conforme Matriz de Completude).