US2.10
Notificações de Status de Candidatura (RF13)
História de Usuário
Como usuário, quero receber notificações sobre mudanças de status de candidaturas para me manter informado em tempo hábil sobre o andamento das minhas inscrições e das vagas que publico.
Rastreabilidade
| Item | Código / Referência |
|---|---|
| User Story | US2.10 |
| Requisito Funcional | RF13 — Notificar candidatura |
| 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 o sistema de notificações sobre mudanças de situação das candidaturas. O estudante deve ser notificado quando sua candidatura for aprovada ou recusada pela organização. A organização deve ser notificada quando receber uma nova candidatura em uma de suas vagas. As notificações devem ser visíveis em um centro de notificações dentro da plataforma. Esta funcionalidade compõe o fluxo de notificação de candidaturas (RF13), complementando US2.9 (cancelamento) e US2.11 (acompanhamento). O escopo é full-stack.
Critérios de Aceite (BDD / Gherkin)
Cenário 1: Notificação de candidatura aprovada
Dado que a organização aprovou a candidatura da estudante "Maria Silva" para a vaga "Apoio em Eventos"
Quando a avaliação é registrada no sistema
Então o sistema gera uma notificação para Maria com o texto "Sua candidatura para Apoio em Eventos foi aprovada!" e a exibe no centro de notificações
Cenário 2: Notificação de candidatura recusada
Dado que a organização recusou a candidatura do estudante "João Souza"
Quando a avaliação é registrada
Então o sistema gera uma notificação para João com o texto "Sua candidatura para a vaga foi recusada" e a exibe no centro de notificações
Cenário 3: Notificação de nova candidatura para a organização
Dado que a estudante "Maria Silva" se candidatou à vaga "Apoio em Eventos" da organização "ONG Esperança"
Quando a candidatura é registrada
Então o sistema gera uma notificação para a organização com o texto "Nova candidatura: Maria Silva se candidatou para Apoio em Eventos"
Cenário 4: Centro de notificações com indicador de não lidas
Dado que o estudante "João Souza" possui 3 notificações não lidas
Quando acessa a plataforma
Então o sistema exibe um indicador com o número 3 no ícone de notificações e, ao abrir o centro de notificações, lista as notificações com destaque visual para as não lidas
Cenário 5: Marcar notificação como lida
Dado que o estudante possui notificações não lidas no centro de notificações
Quando clica em uma notificação específica ou no botão "Marcar todas como lidas"
Então o sistema atualiza o estado das notificações para lidas e remove o indicador numérico
Regras de Negócio
- As notificações devem ser geradas automaticamente quando ocorrerem os seguintes eventos: aprovação de candidatura, recusa de candidatura e recebimento de nova candidatura pela organização.
- Cada notificação deve conter: o tipo de evento, o título da vaga relacionada, o nome do estudante ou organização envolvida, a data e o horário do ocorrido e um indicador se já foi lida ou não.
- O centro de notificações deve exibir um contador de notificações não lidas, visível em toda a plataforma enquanto houver notificações pendentes.
- As notificações devem ser apresentadas em ordem cronológica inversa, das mais recentes para as mais antigas.
- Notificações antigas (com mais de 90 dias) podem ser removidas automaticamente do centro de notificações para manter a interface organizada.
Requisitos Técnicos
- Backend: Django + DRF. Criar modelo
Notificationcom campos:recipient(FK → User),type(choices: application_approved, application_rejected, new_application),title,message,related_opportunity(FK → Opportunity, nullable),related_application(FK → Application, nullable),is_read,created_at. - Endpoint:
GET /api/v1/notifications/— listar notificações do usuário.PATCH /api/v1/notifications/{id}/read/— marcar como lida.PATCH /api/v1/notifications/read-all/— marcar todas como lidas. - Gatilhos: Criar notificações nos signals/eventos de:
Application.statusalterado paraapproved,Application.statusalterado pararejected, novaApplicationcriada. - Frontend: React Native + Expo + NativeWind. Ícone de sino com badge numérico no header, centro de notificações com lista de cards, ação de marcar como lida com toque.
- Responsividade: Layout adaptável a iOS e Android (RNF04).
- Testes: pytest para testar geração automática de notificações nos eventos de candidatura, listagem, marcação como lida e permissão de acesso.
Referências de Design
- Protótipo Figma (Geral): https://www.figma.com/design/f6bQuVohTvZLF5WWPEbNob/Liaison?node-id=647-2&t=Bn4zGHNjZFTDPrK5-0
Dependências
- Relacionada a: #22 (Candidatura — RF10/US2.7), #24 (Avaliação de Candidaturas — RF11/US2.8)
- Bloqueada por: #22 (RF10 — Realizar candidatura), #24 (RF11 — Avaliar candidatura)
- Bloqueia: N/A
Notas
- ICE Score: I=8 C=7 E=6 = 336 | MoSCoW: Must | Quadrante: Quick Win
- RF13 (US2.10) complementa US2.9 (cancelamento de candidatura). Enquanto US2.9 tem complexidade majoritariamente de backend, US2.10 adiciona também a camada de frontend para o centro de notificações.
- No MVP, as notificações serão apenas internas (in-app). Notificações push e por e-mail podem ser consideradas como melhoria futura.
- Os gatilhos de notificação devem ser implementados preferencialmente via Django Signals para desacoplamento do código de avaliação de candidaturas.
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)
- Candidatura aprovada: Quando a organização aprova uma candidatura, o estudante recebe uma notificação: "Sua candidatura para [nome da vaga] foi aprovada!"
- Candidatura recusada: Quando a organização recusa, o estudante recebe notificação informando que foi recusado.
- Nova candidatura recebida: Quando um estudante se candidata a uma vaga, a organização recebe notificação: "Nova candidatura: [nome do estudante] se candidatou para [nome da vaga]".
- Indicador de não lidas: O usuário vê um número no ícone de notificações indicando quantas ainda não foram lidas.
- Marcar como lida: O usuário consegue marcar notificações individualmente ou todas de uma vez como lidas, removendo o indicador numérico.*
Acesso & Evidência
- Código Homologado: Repositório Principal
- Status de Conclusão: 100% Entregue (conforme Matriz de Completude).