Pular para conteúdo

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ção cancel. 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. Utilizar permission_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).