US2.9
Cancelamento de Candidatura (RF12)
História de Usuário
Como estudante, quero cancelar minha candidatura a uma vaga de voluntariado caso não tenha mais interesse ou disponibilidade.
Rastreabilidade
| Item | Código / Referência |
|---|---|
| User Story | US2.9 |
| Requisito Funcional | RF12 — Acompanhar candidatura |
| Característica de Produto | CP02 — Ciclo de Vagas e Engajamento |
| Requisitos Não-Funcionais | RNF04 (responsivo iOS/Android) |
| Release Planejada | R2 — Perfis e Conexão |
Descrição
Implementar a funcionalidade de cancelamento de candidatura pelo estudante. O estudante deve poder visualizar a lista de suas candidaturas vigentes e cancelar qualquer uma que ainda esteja aguardando avaliação da organização. Esta funcionalidade compõe o módulo de acompanhamento de candidaturas (RF12) e permite que o estudante mantenha seu painel de inscrições organizado e atualizado. O escopo é full-stack.
Critérios de Aceite (BDD / Gherkin)
Cenário 1: Cancelamento de candidatura pendente
Dado que o estudante possui uma candidatura aguardando avaliação para a vaga "Apoio em Eventos"
Quando acessa a lista de "Minhas Candidaturas" e clica em "Cancelar candidatura"
Então o sistema atualiza a situação da candidatura para cancelada, exibe a mensagem "Candidatura cancelada" e a remove da lista de inscrições ativas
Cenário 2: Tentativa de cancelar candidatura já avaliada
Dado que o estudante possui uma candidatura que já foi aprovada pela organização
Quando tenta cancelar a candidatura
Então o sistema bloqueia a ação e exibe a mensagem "Não é possível cancelar uma candidatura que já foi avaliada pela organização"
Cenário 3: Confirmação de cancelamento
Dado que o estudante clicou em "Cancelar candidatura"
Quando o modal de confirmação é exibido
Então o sistema pergunta "Tem certeza que deseja cancelar sua candidatura?" com as opções "Sim, cancelar" e "Voltar"
Cenário 4: Segurança entre estudantes
Dado que dois estudantes distintos — A e B — estão cadastrados na plataforma
Quando o estudante A tenta cancelar uma candidatura que pertence ao estudante B
Então o sistema recusa a operação e informa que a ação não é permitida
Regras de Negócio
- Apenas o próprio estudante que realizou a candidatura pode solicitar seu cancelamento.
- O cancelamento somente é permitido enquanto a candidatura estiver aguardando avaliação da organização.
- Uma vez que a organização tenha avaliado a candidatura (aprovando ou recusando), o estudante não pode mais cancelá-la.
- O cancelamento é uma ação definitiva: a candidatura passa ao estado cancelada e não pode ser revertida pelo estudante.
- O histórico de candidaturas canceladas deve ser preservado para fins de auditoria, não sendo excluído do sistema.
Requisitos Técnicos
- Backend: Django + DRF. Endpoint
PATCH /api/v1/applications/{id}/com açãocancel. Validar que o estudante autenticado é o autor da candidatura e que o status atual permite cancelamento. - Frontend: React Native + Expo + NativeWind. Tela "Minhas Candidaturas" com lista de cards, cada um com botão de cancelamento. Modal de confirmação antes de efetivar o cancelamento.
- Segurança: Verificar
application.student == request.user.student_profile. Utilizarpermission_classes = [IsAuthenticated]com validação customizada. - Responsividade: Layout adaptável a iOS e Android (RNF04).
- Testes: pytest para testar cancelamento, bloqueio de cancelamento de candidaturas já avaliadas, e restrição de acesso entre estudantes distintos.
Referências de Design
- Protótipo Figma (Geral): https://www.figma.com/design/f6bQuVohTvZLF5WWPEbNob/Liaison?node-id=647-2&t=Bn4zGHNjZFTDPrK5-0
Dependências
- Relacionada a: #22 (Candidatura — RF10/US2.7), #25 (Notificações — RF12/US2.10)
- Bloqueada por: #22 (RF10 — Realizar candidatura)
- Bloqueia: N/A
Notas
- ICE Score: I=8 C=7 E=6 = 336 | MoSCoW: Must | Quadrante: Quick Win
- RF12 (US2.9) é parte do módulo de acompanhamento de candidaturas. Trata-se de uma funcionalidade de implementação majoritariamente no backend, com complexidade controlada (E=6, ~6-8h).
- A outra parte do RF12 (US2.10 — Notificações) será tratada em issue separada (#25) por envolver complexidade distinta (notificações assíncronas).
- Avaliar se o cancelamento de uma candidatura deve liberar vaga para outro estudante, caso a organização tenha definido limite de participantes.
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)
- Cancelamento de candidatura pendente: O estudante acessa "Minhas Candidaturas", clica em "Cancelar candidatura" em uma candidatura ainda aguardando avaliação, confirma a ação e o status é atualizado para cancelada.
- Candidatura já avaliada: Se a organização já aprovou ou recusou a candidatura, o sistema exibe "Não é possível cancelar uma candidatura que já foi avaliada pela organização".
- Confirmação: Antes de cancelar, o sistema pergunta "Tem certeza que deseja cancelar sua candidatura?" com as opções "Sim, cancelar" e "Voltar".
- Segurança: Um estudante não consegue cancelar a candidatura de outro estudante — o sistema recusa e informa que a ação não é permitida.
Acesso & Evidência
- Código Homologado: Repositório Principal
- Status de Conclusão: 100% Entregue (conforme Matriz de Completude).