Pular para conteúdo

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)

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_count anotado
  • URL da galeria de fotos
  • flag de seleção/concessão de certificado de extensão
  • Performance: select_related('organization') e prefetch_related para 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 Share API 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).