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. Utilizarpermission_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).