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
Opportunityno appopportunitiescom 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
statuscom 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).