Etapa 7 — Motor de alertas (BullMQ)
Adiciona um processo worker separado do processo web (src/worker.ts, WorkerModule) com dois crons diários e processors do BullMQ para alertas de mensalidade (master→tenant) e cobrança (tenant→customer): marca faturas/parcelas atrasadas, resolve template com fallback tenant→master por canal, renderiza placeholders, dispara WhatsApp/e-mail com retry e backoff exponencial, e grava alert_logs com idempotência por dia. Módulo alerts (web) traz o CRUD de alert_templates (master e tenant) e a consulta de alert_logs com filtros. alert_templates/alert_logs não têm RLS no schema, então o isolamento entre tenants é feito manualmente (PrismaMasterService + filtro por tenant_id), coberto por teste e2e dedicado. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -68,3 +68,18 @@ TENANT_TRIAL_DIAS=14
|
||||
# Nunca reutilize o valor de exemplo em produção — trocar invalida todos os
|
||||
# segredos já cifrados no banco (seria necessário recriá-los).
|
||||
ENCRYPTION_KEY=troque-este-valor-por-um-segredo-forte-com-32-caracteres-ou-mais
|
||||
|
||||
# --- Motor de Alertas (BullMQ) — só lido pelo processo worker (src/worker.ts) ----
|
||||
# Horário dos jobs diários, em formato cron (padrão node-cron/crontab: min hora dia mes dia-semana)
|
||||
ALERT_CRON_MENSALIDADE=0 8 * * *
|
||||
ALERT_CRON_COBRANCA=0 8 * * *
|
||||
|
||||
# Quantos dias antes do vencimento o alerta já é disparado (além de toda fatura/parcela
|
||||
# já vencida e ainda sem alerta hoje)
|
||||
ALERT_DIAS_ANTECEDENCIA_MENSALIDADE=3
|
||||
ALERT_DIAS_ANTECEDENCIA_COBRANCA=3
|
||||
|
||||
# Retry do BullMQ para falha transitória de envio: nº de tentativas e atraso-base (ms)
|
||||
# do backoff exponencial (tentativa N espera ALERT_JOB_BACKOFF_MS * 2^(N-1))
|
||||
ALERT_JOB_MAX_ATTEMPTS=3
|
||||
ALERT_JOB_BACKOFF_MS=5000
|
||||
|
||||
Reference in New Issue
Block a user