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 |
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¶
- Descobre owners elegíveis pela RPC canônica de créditos e lifecycle de arquivamento.
- Reivindica um relatório único por tenant, usuário, janela e versão.
- Consolida score, análises sociais e coorte Resend da semana.
- Persiste o payload canônico com fingerprint.
- Reivindica uma entrega
whatsappúnica. - Lê
users.phonedo owner e monta a copy sem LLM. - Chama a Lara usando o tenant remetente configurado.
- Provider confirmado vira
sent; outcome ambíguo viraunknowne não reenvia. - O resumo separa
deliveryFailed,deliveryUnknownedeliveryPartial; 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
trialremovido; migration, worker e E2E controlado validados em produção.