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 porstatuse suporte a ordenação porcreated_atdesc. - 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 porstudent=request.user.student_profile. Aplicarpermission_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).