US2.6
Visualização de Detalhes da Vaga (RF09)
História de Usuário
Como estudante, quero visualizar os detalhes completos de uma vaga de voluntariado para decidir se devo me candidatar.
Rastreabilidade
| Item | Código / Referência |
|---|---|
| User Story | US2.6 |
| Requisito Funcional | RF09 — Consultar vaga |
| 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 tela de detalhes de uma vaga de voluntariado, acessada pelo estudante a partir da listagem de busca (RF08) ou de um link direto. A tela deve exibir todas as informações relevantes da vaga e conter um botão de candidatura que redireciona para o fluxo de candidatura (RF10). O escopo é full-stack.
Decisões de design (layout, cores, tipografia, ícones, organização visual das seções): consultar o protótipo no Figma. Este documento registra apenas comportamento, regras de negócio e critérios de aceite.
Regras de Negócio
- Qualquer pessoa, autenticada ou não, pode visualizar os detalhes de uma vaga de voluntariado.
- A vaga exibe status explícito (ex.: Ativa, Em Destaque, Encerrada, Pausada).
- O botão de candidatura somente é exibido quando:
- a vaga está com inscrições abertas, e
- o usuário está autenticado com perfil de estudante.
- Visitantes não autenticados visualizam os detalhes normalmente, mas o botão de candidatura é substituído por "Faça login para se candidatar".
- Para vagas com inscrições encerradas/pausadas, o botão de candidatura é ocultado e o sistema exibe o aviso "Inscrições encerradas".
- A tela exibe o nome e as informações institucionais básicas da organização responsável, com link para o perfil público da organização.
- A tela exibe o número de candidatos inscritos / vagas preenchidas e a quantidade restante, quando a funcionalidade de candidatura estiver implementada.
- O salvamento da vaga (botão "Salvar") é uma ação independente da candidatura e fica disponível mesmo quando as inscrições estão encerradas.
- A vaga pode ser compartilhada via link (deep link) para que terceiros abram a tela de detalhes diretamente.
- Vagas que concedem certificado de extensão devem tornar essa informação visível na tela de detalhes.
- A tela deve tratar o caso de vaga inexistente retornando 404 e exibindo a mensagem "Vaga não encontrada".
Critérios de Aceite (BDD / Gherkin)
Cenário 1: Visualização de vaga ativa com todos os detalhes
Dado que existe uma vaga publicada "Apoio em Eventos" da organização "ONG Esperança"
Quando o estudante acessa a página de detalhes da vaga
Então o sistema exibe todas as informações relevantes da vaga: título, descrição completa, nome da organização, carga horária, data, local, requisitos, modalidade (presencial/remoto/híbrido), indicação de recorrência e número de vagas disponíveis
Cenário 2: Vaga não encontrada
Dado que o estudante tenta acessar uma vaga com identificador inexistente
Quando o sistema processa a requisição
Então o sistema exibe a mensagem "Vaga não encontrada"
Cenário 3: Vaga encerrada ou pausada
Dado que existe uma vaga com inscrições encerradas
Quando o estudante acessa a página de detalhes
Então o sistema exibe os detalhes da vaga, mas oculta o botão de candidatura e exibe o aviso "Inscrições encerradas"
Cenário 4: Botão de candidatura visível apenas para estudante autenticado
Dado que um visitante não autenticado acessa a página de detalhes de uma vaga com inscrições abertas
Quando a página é renderizada
Então o sistema exibe os detalhes da vaga, mas substitui o botão de candidatura por "Faça login para se candidatar"
Cenário 5: Candidatura habilitada para estudante autenticado em vaga ativa
Dado que existe uma vaga ativa com inscrições abertas
E que o usuário está autenticado como estudante
Quando o estudante acessa a página de detalhes da vaga
Então o sistema exibe o botão de candidatura habilitado
E ao acioná-lo, o sistema inicia o fluxo de candidatura (RF10)
Cenário 6: Compartilhamento de vaga via link
Dado que um estudante está na página de detalhes de uma vaga ativa
Quando ele aciona a ação de compartilhar vaga
Então o sistema fornece um link direto (deep link) para a página de detalhes da vaga, utilizável em aplicativos de mensagem e redes sociais
Cenário 7: Salvar e remover vaga salva
Dado que um estudante autenticado está na página de detalhes de uma vaga
Quando ele aciona a ação de salvar vaga
Então a vaga passa a constar na lista de vagas salvas do estudante e a ação reflete o estado "salva"
E quando acionada novamente, a vaga é removida das vagas salvas
Cenário 8: Acesso ao perfil da organização
Dado que o estudante está na página de detalhes da vaga
Quando ele aciona a ação de ver perfil da organização
Então o sistema navega para a página de perfil público da organização responsável
Cenário 9: Vaga concede certificado de extensão
Dado que existe uma vaga que concede certificado de extensão digital
Quando o estudante acessa a página de detalhes
Então o sistema exibe a informação do certificado de extensão, incluindo título, descrição e total de horas de extensão acumuladas ao concluir
Referências de Design
- Protótipo Figma: https://www.figma.com/design/f6bQuVohTvZLF5WWPEbNob/Liaison?node-id=294-2&t=WcTGWfQMCHTfG33Q-0
Requisitos Técnicos
- Backend: Django + DRF. Endpoint
GET /api/v1/opportunities/{id}/com serializer detalhado incluindo: - dados da organização (nested serializer ou
SerializerMethodField) - lista de requisitos
- lista de cursos preferenciais (público-alvo)
- cronograma (marcos da vaga)
- contadores de ocupação (vagas preenchidas, restantes) e
application_countanotado - URL da galeria de fotos
- flag de seleção/concessão de certificado de extensão
- Performance:
select_related('organization')eprefetch_relatedpara requisitos, público-alvo, cronograma e fotos, evitando N+1. - Frontend: React Native + Expo + NativeWind. Tela com scroll vertical, botão de candidatura e ações de salvar/compartilhar no rodapé.
- Responsividade: Layout adaptável a iOS e Android (RNF04).
- Compartilhamento: Integração com
ShareAPI do React Native para gerar deep link da vaga. - Testes (pytest): endpoint de detalhes com diferentes status de vaga, resposta 404 para id inexistente, inclusão de dados da organização e contadores de ocupação.
- Testes (frontend): renderização das seções, variação do CTA por estado de autenticação e status da vaga, toggle de salvar vaga.
Dependências
- Relacionada a: #20 (Busca e Filtro — RF08/US2.5), US2.3/#nova (Publicação — RF20)
- Bloqueada por: US2.3/#nova (RF20 — Publicar oportunidade)
- Bloqueia: #22 (Candidatura — RF10/US2.7)
Notas
- ICE Score: I=8 C=9 E=7 = 504 | MoSCoW: Must | Quadrante: Quick Win
- RF09 é um Quick Win sólido (E=7, C=9). A funcionalidade consiste essencialmente em uma consulta de detalhes com visualização formatada.
- Considerar adicionar compartilhamento de vaga (deep link) para que estudantes possam compartilhar vagas com colegas via aplicativos de mensagem e redes sociais.
- O contador de candidaturas (
application_count) pode ser um campo anotado na consulta para evitar consultas adicionais ao banco de dados. - O salvamento de vaga e a candidatura são ações independentes: um candidato pode salvar a vaga mesmo sem se candidatar.
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)
- Detalhes completos: O estudante consegue ver título, descrição completa, organização, carga horária, data, local, requisitos e quantidade de vagas disponíveis.
- Vaga não encontrada: Se o estudante acessar um link inválido, o sistema exibe "Vaga não encontrada".
- Vaga encerrada: Se a vaga não estiver mais aceitando inscrições, os detalhes são exibidos mas o botão de candidatura é substituído por "Inscrições encerradas".
- Visitante não logado: O visitante vê os detalhes normalmente, mas o botão de candidatura é substituído por "Faça login para se candidatar".
- Estudante logado: O botão de candidatura aparece habilitado para vagas ativas com inscrições abertas. Ao clicar, inicia o fluxo de candidatura.
- Compartilhar vaga: O estudante consegue compartilhar um link direto da vaga para enviar a amigos por aplicativos de mensagem.
- Salvar/remover vaga: O estudante consegue salvar ou remover a vaga dos favoritos, mesmo que as inscrições estejam encerradas.
- Ir ao perfil da organização: O estudante consegue navegar para a página pública da organização responsável pela vaga.
- Certificado de extensão: Se a vaga concede certificado, essa informação aparece claramente nos detalhes.
Acesso & Evidência
- Código Homologado: Repositório Principal
- Status de Conclusão: 100% Entregue (conforme Matriz de Completude).