Pular para conteúdo

US2.11

Acompanhamento de Minhas Candidaturas (RF12)

História de Usuário

Como estudante, quero visualizar e acompanhar o status de todas as minhas candidaturas para saber em que etapa cada processo se encontra e tomar decisões a partir dessas informações.


Rastreabilidade

Item Código / Referência
User Story US2.11
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 R3

Descrição

Implementar a tela "Minhas Candidaturas", acessível pelo estudante autenticado, que lista todas as candidaturas realizadas por ele, exibindo o status atual de cada uma (pendente, aprovada, recusada, cancelada) e fornecendo ações contextuais de acordo com o status. A tela é o ponto central de acompanhamento do ciclo de candidaturas (RF12) e integra as demais US do RF: cancelamento (US2.9/#23) e notificações (US2.10/#25). O escopo é full-stack.

Decisões de design (layout, cores, tipografia, ícones, organização visual): consultar o protótipo no Figma. Este documento registra apenas comportamento, regras de negócio e critérios de aceite.


Regras de Negócio

  • Apenas o estudante autenticado pode visualizar suas próprias candidaturas.
  • A tela deve listar todas as candidaturas do estudante, independentemente do status.
  • Cada item da lista deve exibir, no mínimo: vaga (título + organização), data da candidatura e status atual.
  • Os possíveis status de uma candidatura são: pendente, aprovada, recusada, cancelada.
  • A lista deve ser ordenada por data de candidatura (mais recente primeiro).
  • O estudante deve poder filtrar a lista por status.
  • A partir da lista, o estudante deve poder:
  • Abrir os detalhes da vaga relacionada (RF09/#21).
  • Cancelar a candidatura quando o status for pendente (RF12/US2.9 — #23).
  • Quando o status for aprovada, recusada ou cancelada, a ação de cancelar não deve ser exibida.
  • A lista deve refletir em tempo real alterações de status promovidas pela organização (RF11/#24) e cancelamentos feitos pelo próprio estudante (RF12/US2.9 — #23).
  • A tela deve tratar o caso de estudante sem candidaturas, exibindo um estado vazio com orientação e CTA para "Buscar vagas" (RF08/#20).

Critérios de Aceite (BDD / Gherkin)

Cenário 1: Listagem completa de candidaturas do estudante

Dado que o estudante está autenticado e possui candidaturas em diferentes status
Quando acessa a tela "Minhas Candidaturas"
Então o sistema exibe a lista de todas as suas candidaturas, com vaga, data de candidatura e status de cada uma, ordenadas da mais recente para a mais antiga

Cenário 2: Filtro por status

Dado que o estudante possui candidaturas em diferentes status
Quando seleciona um filtro de status (ex.: "Aprovadas")
Então o sistema exibe apenas as candidaturas com aquele status

Cenário 3: Abertura dos detalhes da vaga a partir da candidatura

Dado que o estudante está na lista de "Minhas Candidaturas"
Quando aciona uma candidatura da lista
Então o sistema navega para a página de detalhes da vaga correspondente (RF09/#21)

Cenário 4: Cancelamento de candidatura pendente a partir da lista

Dado que o estudante possui uma candidatura com status pendente
Quando aciona a ação de cancelar candidatura na lista
Então o sistema solicita confirmação e, ao confirmar, atualiza o status da candidatura para cancelada, exibindo a alteração imediatamente na lista

Cenário 5: Ação de cancelar oculta em candidaturas já avaliadas

Dado que o estudante possui uma candidatura com status aprovada, recusada ou cancelada
Quando visualiza essa candidatura na lista
Então o sistema não exibe a ação de cancelar candidatura

Cenário 6: Estado vazio

Dado que o estudante autenticado ainda não possui candidaturas
Quando acessa a tela "Minhas Candidaturas"
Então o sistema exibe uma mensagem informativa e oferece uma ação para "Buscar vagas" que navega para a tela de busca (RF08/#20)

Cenário 7: Segurança entre estudantes

Dado que dois estudantes distintos — A e B — estão cadastrados na plataforma
Quando o estudante A acessa "Minhas Candidaturas"
Então o sistema exibe apenas as candidaturas pertencentes a A, nunca as de B

Cenário 8: Atualização refletindo decisão da organização

Dado que o estudante possui uma candidatura com status pendente
E a organização aprova a candidatura (RF11/#24)
Quando o estudante consulta a tela "Minhas Candidaturas"
Então o sistema exibe a candidatura com status aprovada e oculta a ação de cancelar


Referências de Design

Protótipo Figma: - https://www.figma.com/design/f6bQuVohTvZLF5WWPEbNob/Liaison?node-id=647-2&t=Bn4zGHNjZFTDPrK5-0


Requisitos Técnicos

  • Backend: Django + DRF. Endpoint GET /api/v1/applications/ retornando as candidaturas do estudante autenticado, com filtros por status e suporte a ordenação por created_at desc.
  • Serializer: Incluir dados mínimos da vaga (id, título, organização) e dados da candidatura (id, status, created_at) para renderização da lista.
  • Performance: select_related('opportunity', 'opportunity__organization') para evitar N+1. Paginação recomendada.
  • Frontend: React Native + Expo + NativeWind. Tela "Minhas Candidaturas" com lista de cards, filtro por status, ações contextuais por item e estado vazio. Integração com o endpoint de cancelamento existente (#23) para a ação de cancelar.
  • Segurança: Garantir que o endpoint GET /api/v1/applications/ filtre por student=request.user.student_profile. Aplicar permission_classes = [IsAuthenticated].
  • Responsividade: Layout adaptável a iOS e Android (RNF04).
  • Testes (pytest): listagem filtrada pelo estudante autenticado, filtros por status, isolamento entre estudantes distintos, ordenação por data.
  • Testes (frontend): renderização da lista, filtros, ações condicionais por status, navegação para detalhes da vaga e estado vazio.

Dependências

  • Relacionada a: #22 (Candidatura — RF10/US2.7), #23 (Cancelamento — RF12/US2.9), #24 (Avaliação — RF11/US2.8), #25 (Notificações — RF12/US2.10), #21 (Detalhes da Vaga — RF09/US2.6), #20 (Busca — RF08/US2.5)
  • Bloqueada por: #22 (RF10 — Realizar candidatura)
  • Bloqueia: N/A

Notas

  • ICE Score: I=8 C=8 E=7 = 448 | MoSCoW: Must | Quadrante: Quick Win
  • Esta US complementa o RF12, hoje coberto por #23 (cancelamento) e #25 (notificações), fornecendo o ponto central de visualização e acompanhamento.
  • A interface de filtros por status deve ser simples no MVP (chips/segmented control); filtros avançados (por data, organização, modalidade) podem ser fatiados em issue futura.
  • O endpoint de listagem é compartilhado (potencialmente) com a visão da organização sobre candidaturas recebidas (RF11/#24); avaliar se a separação por papel deve ser feita por rota (/students/applications/ vs /organizations/applications/) ou por filtro no serializer.

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)

  • Lista completa: O estudante acessa "Minhas Candidaturas" e vê todas as suas candidaturas (pendentes, aprovadas, recusadas e canceladas), ordenadas da mais recente para a mais antiga, com o nome da vaga, organização, data e status de cada uma.
  • Filtro por status: O estudante filtra as candidaturas por status (ex.: "Aprovadas") e o sistema exibe apenas as candidaturas com aquele status.
  • Ver detalhes da vaga: O estudante consegue tocar em uma candidatura da lista e ser levado para a página de detalhes da vaga correspondente.
  • Cancelar candidatura pendente: Em candidaturas com status pendente, o estudante consegue cancelar — o sistema pede confirmação e, ao confirmar, atualiza o status na lista imediatamente.
  • Cancelar não aparece para candidaturas avaliadas: Para candidaturas aprovadas, recusadas ou canceladas, a opção de cancelar não é exibida.
  • Lista vazia: Se o estudante não tiver nenhuma candidatura, o sistema exibe uma mensagem informativa e oferece um botão para "Buscar vagas".
  • Segurança: O estudante só vê suas próprias candidaturas — nunca as de outros estudantes.
  • Atualização de status: Quando a organização aprova uma candidatura, o estudante consulta a lista e vê o status atualizado para aprovada, sem a opção de cancelar.

Acesso & Evidência

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