# language: pt
Funcionalidade: Candidatura a um squad existente
Cenário: Não-APTO é bloqueado
Dado um usuário que não concluiu o onboarding Squads
Quando ele tenta se candidatar a um squad
Então a candidatura é bloqueada e ele é direcionado ao onboarding
Cenário: APTO cria candidatura
Dado um usuário APTO sem candidatura pendente nesse squad
Quando ele se candidata
Então uma application com status pending é criada
Cenário: Sem candidatura pendente duplicada
Dado um usuário com candidatura pending num squad
Quando ele se candidata novamente ao mesmo squad
Então a segunda candidatura é bloqueada
Parent
#342
O que construir
A candidatura a um squad, gated no APTO do onboarding (dependência cross-PRD).
squad_applications:status(defaultpending),message(nullable),decided_by(nullable),decided_at(nullable);INDEX (squad_id, status); partialUNIQUE (squad_id, user_id) WHERE status = 'pending'. Model + enumApplicationStatus.ApplyToSquad: exige o gate de conclusão do onboarding Squads (APTO) —isCompleted(user, tenant, Squads); bloqueia quem não é APTO e direciona ao onboarding; impede candidaturapendingduplicada no mesmo squad.Critérios de aceite
pendingApplyToSquadbloqueia quem não é APTO (direciona ao onboarding)applicationpendingpendingduplicada no mesmo squad é bloqueadaBDD
Bloqueada por
isCompleted)