Pular para conteúdo

Worker do relatório semanal

Identidade

Campo Valor
Runtime Python 3.12 na VPS Master
Entry point crons/weekly_performance_reports.py
Agregação pipeline/weekly_performance_report.py
WhatsApp pipeline/weekly_performance_whatsapp.py
Transporte Lara pipeline/lara_notifications.py
Agenda segunda-feira, 08:00 BRT
Persistência weekly_performance_reports + weekly_performance_deliveries
Issues DEV-1653, DEV-1654 e DEV-1805

Elegibilidade do tenant

A fonte de verdade é a migration 20260824230500_weekly_performance_report_credit_eligibility_dev1805.sql. A RPC list_weekly_performance_report_scopes e o claim reutilizam o mesmo predicado: owner, tenant não arquivado e carteira de créditos em active ou grace. Saldo zero continua elegível. O campo legado tenants.status não participa mais do relatório.

No rollout, a migration do cadencia-app precisa ser aplicada antes do deploy do cadencia-growth. Sem a RPC, o worker falha fechado e não pula tenants silenciosamente.

Fluxo

  1. Descobre owners elegíveis pela RPC canônica de créditos e lifecycle de arquivamento.
  2. Reivindica um relatório único por tenant, usuário, janela e versão.
  3. Consolida score, análises sociais e coorte Resend da semana.
  4. Persiste o payload canônico com fingerprint.
  5. Reivindica uma entrega whatsapp única.
  6. users.phone do owner e monta a copy sem LLM.
  7. Chama a Lara usando o tenant remetente configurado.
  8. Provider confirmado vira sent; outcome ambíguo vira unknown e não reenvia.
  9. O resumo separa deliveryFailed, deliveryUnknown e deliveryPartial; qualquer um dos três gera exit code não zero para monitoramento.

Operação segura

# Read-only: sem claim, coleta social, escrita ou envio
python3 crons/weekly_performance_reports.py --dry-run --tenant <TENANT_ID> --json

# Agrega sem tentar WhatsApp
python3 crons/weekly_performance_reports.py --skip-whatsapp --json

O rollout DEV-1805 foi validado em produção com 41 scopes elegíveis: 8 owners legítimos antes bloqueados passaram a entrar e 26 owners sem carteira válida ou arquivados ficaram fora. O E2E do entry point processou um tenant em dry-run, sem WhatsApp, sem trigger social e sem escrita de relatório.

Histórico

  • 2026-08-24 — DEV-1653: agregação, persistência e cron validados em produção.
  • 2026-08-24 — DEV-1654: entrega WhatsApp idempotente validada em rollout controlado.
  • 2026-08-25 — DEV-1805: gate legado de trial removido; migration, worker e E2E controlado validados em produção.