Pular para conteúdo

US2.1

Criação de Vagas de Voluntariado (RF18)

História de Usuário

Como organização, quero criar novas vagas de voluntariado para atrair estudantes interessados em participar das atividades da organização.


Rastreabilidade

Item Código / Referência
User Story US2.1
Requisito Funcional RF18 — Criar oportunidade
Característica de Produto CP02 — Ciclo de Vagas e Engajamento
Requisitos Não-Funcionais RNF04 (responsivo iOS/Android), RNF06 (suporte a 1.000 usuários simultâneos)
Release Planejada R2 —Perfil e Conexão

Descrição

Implementar o fluxo completo de criação de vagas de voluntariado pela organização. A organização deve poder preencher um formulário com os dados da vaga (título, descrição, carga horária, data, local e requisitos), salvar como rascunho e, posteriormente, publicar. Esta funcionalidade é a base de todo o módulo de vagas (CP02) — sem ela, nenhuma outra funcionalidade de engajamento (busca, candidatura, avaliação) pode existir. O escopo é full-stack (backend Django/DRF + frontend React Native/Expo).


Critérios de Aceite (BDD / Gherkin)

Cenário 1: Criação de vaga com campos obrigatórios

Dado que a organização está autenticada e acessa o formulário de criação de vaga
Quando preenche título, descrição, carga horária, data de realização, local e requisitos, e submete o formulário
Então o sistema cria a vaga em modo rascunho, exibe mensagem de sucesso e a adiciona ao painel da organização

Cenário 2: Campos obrigatórios em branco

Dado que a organização está no formulário de criação de vaga
Quando tenta submeter o formulário com campos obrigatórios em branco (título ou descrição vazios)
Então o sistema destaca os campos pendentes com mensagem de erro específica e não cria a vaga

Cenário 3: Organização não autenticada

Dado que um usuário não autenticado tenta criar uma vaga de voluntariado
Quando envia os dados do formulário sem estar logado na plataforma
Então o sistema recusa a operação e exibe a mensagem de que é necessário fazer login

Cenário 4: Vaga salva como rascunho

Dado que a organização preencheu parcialmente o formulário de criação de vaga
Quando clica em "Salvar como rascunho"
Então o sistema armazena a vaga em modo rascunho, permite edição posterior e não a torna visível para estudantes

Cenário 5: Criação de vaga com modalidade

Dado que a organização está preenchendo o formulário de criação de vaga
Quando seleciona a modalidade da vaga (presencial, remoto ou híbrido) e submete o formulário
Então o sistema registra a modalidade escolhida e a associa à vaga criada

Cenário 6: Criação de vaga recorrente

Dado que a organização está preenchendo o formulário de criação de vaga
Quando marca a vaga como recorrente e informa a duração de cada sessão
Então o sistema registra a vaga como recorrente com a duração de sessão definida


Regras de Negócio

  • Somente organizações sociais aprovadas pela moderação administrativa podem criar vagas de voluntariado na plataforma.
  • Toda vaga de voluntariado deve conter, obrigatoriamente: título, descrição da atividade, carga horária prevista, data de realização, local e fotos.
  • Uma vaga pode ser criada em modo rascunho — neste estado, permanece oculta para os estudantes e editável pela organização.
  • Cada vaga de voluntariado pertence a uma única organização social.
  • A plataforma deve garantir que uma organização visualize e gerencie apenas as vagas que ela própria criou.

Requisitos Técnicos

  • Backend: Django + DRF. Criar modelo Opportunity no app opportunities com campos: title, description, workload_hours, event_date, location, requirements, status (choices: draft/active/paused/closed), organization (FK → OrganizationProfile), created_at, updated_at.
  • Endpoint: POST /api/v1/opportunities/ — criação. GET /api/v1/organizations/me/opportunities/ — listagem das vagas da própria organização.
  • Frontend: React Native + Expo + NativeWind. Formulário multi-passo conforme protótipo Figma.
  • Segurança: Apenas a organização dona da vaga pode editá-la. Validar permissões no backend via permission_classes.
  • Performance: Resposta do endpoint de criação ≤2s (RNF02).
  • Responsividade: Layout adaptável a iOS e Android (RNF04).
  • Testes: pytest com factory_boy para modelo Opportunity. Testar criação, validação de campos, permissões de acesso.

Referências de Design

  • Protótipo Figma (Geral): https://www.figma.com/design/f6bQuVohTvZLF5WWPEbNob/Liaison?node-id=0-1
  • Observação: A tela específica de criação de vaga precisa ser confirmada no protótipo Figma. Caso não exista, solicitar ao time de design.

Dependências

  • Relacionada a: #13 (Cadastro de Organizações — RF02/US1.2), #18 (Moderação de Organizações — RF06/US1.7)
  • Bloqueada por: N/A (RF18 é item fundacional do CP02)
  • Bloqueia: US2.2/#nova (Editar oportunidade — RF19), US2.3/#nova (Publicar oportunidade — RF20), US2.4/#nova (Encerrar oportunidade — RF21)

Notas

  • ICE Score: I=10 C=7 E=5 = 350 | MoSCoW: Must | Quadrante: Quick Win
  • RF18 está no limiar Quick Win/Plan (E=5, ≈13h incluindo formulário multi-passo). Recomendação: fatiar em (1) modelo+endpoint, (2) formulário frontend, (3) validações+publicação.
  • O campo status com choices (draft/active/paused/closed) é essencial para o fluxo de publicação (RF20) e encerramento (RF21).
  • Não confundir "criação de vaga" (RF18) com "publicação de vaga" (RF20) — são issues separadas, com RF20 dependendo de RF18.

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)

  • Criação com sucesso: A organização preenche título, descrição, carga horária, data, local e requisitos, e a vaga é criada em modo rascunho (invisível para estudantes). A vaga aparece no painel da organização.
  • Campos obrigatórios em branco: Se algum campo obrigatório (título ou descrição) estiver vazio, o sistema destaca o problema e não cria a vaga.
  • Usuário não logado: Se alguém tentar criar uma vaga sem estar logado, o sistema solicita que faça login.
  • Salvar como rascunho: A organização consegue salvar o formulário parcialmente preenchido como rascunho para continuar depois. A vaga não fica visível para os estudantes nesse estado.

Acesso & Evidência

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