Módulo de Notificações
Arquitetura de Notificações
O SystemClinic utiliza duas camadas de notificações:
- Notificações assíncronas (e-mail): Processadas por background jobs via Hangfire
- Notificações em tempo real (in-app): Entregues via SignalR
Notificações por E-mail
Provedor
E-mails são enviados via Resend — provedor de e-mail transacional.
Templates de E-mail
| Template | Trigger | Destinatário |
|---|---|---|
| Confirmação de agendamento | Criação do agendamento | Paciente |
| Lembrete D-1 | Job agendado para 24h antes | Paciente |
| Lembrete H-2 | Job agendado para 2h antes | Paciente |
| Cancelamento | Status → CANCELADO | Paciente |
| Convite de usuário | Admin cria convite | Novo usuário |
| Redefinição de senha | Solicitação de reset | Usuário |
Processamento via Hangfire
csharp
// Ao criar agendamento, enfileira jobs:
BackgroundJob.Enqueue(() => SendConfirmationEmail(appointmentId));
BackgroundJob.Schedule(
() => SendReminderEmail(appointmentId, "24h"),
appointment.StartAt.AddHours(-24)
);
BackgroundJob.Schedule(
() => SendReminderEmail(appointmentId, "2h"),
appointment.StartAt.AddHours(-2)
);Política de Retry
| Tentativa | Delay |
|---|---|
| 1ª retry | 1 minuto |
| 2ª retry | 5 minutos |
| 3ª retry | 15 minutos |
| Após 3 falhas | Dead-letter queue |
Itens na dead-letter queue geram alerta para o Admin e podem ser reprocessados manualmente no painel do Hangfire.
Notificações In-App (SignalR)
Eventos Disponíveis
| Evento | Descrição |
|---|---|
appointment.created | Novo agendamento criado |
appointment.updated | Status ou dados de agendamento alterados |
appointment.cancelled | Agendamento cancelado |
invoice.paid | Pagamento confirmado |
notification.alert | Alerta geral (estoque baixo, erro de integração) |
Conexão no Frontend
typescript
// SignalRService — conexão autenticada
this.signalr.connect(environment.apiUrl + '/hubs/notifications', token);
this.signalr.on('appointment.created', (data) => {
this.dashboard.refresh();
});Histórico de Notificações
O módulo Notificações (/app/notifications) exibe o histórico de notificações in-app do usuário atual com opção de marcar como lida.
Funcionalidades Planejadas (V1)
- [ ] Notificações via WhatsApp (integração Z-API / Evolution API)
- [ ] Notificações push no PWA (Service Worker)
- [ ] Configurações de preferência de notificação por usuário
- [ ] Agendamento de campanhas de retorno (pacientes sem consulta há X dias)