Skip to content

feat(inadimplencia): snapshot mensal automático com aviso de erro#130

Merged
Warleypablo merged 7 commits intomainfrom
feature/inadimplencia-snapshot-mensal
Apr 24, 2026
Merged

feat(inadimplencia): snapshot mensal automático com aviso de erro#130
Warleypablo merged 7 commits intomainfrom
feature/inadimplencia-snapshot-mensal

Conversation

@Warleypablo
Copy link
Copy Markdown
Owner

Summary

  • Nova tabela cortex_core.inadimplencia_snapshots — 1 linha por mês, upsert idempotente via UNIQUE(mes_referencia).
  • Job agendado que roda ao meio-dia do último dia de cada mês e registra o total de inadimplência (mesma regra do painel ao vivo).
  • Recovery automático no startup caso o servidor esteja fora na janela das 12h.
  • Aviso por email via SendGrid para financeiro@turbopartners.com.br em caso de falha.
  • Endpoint manual POST /api/inadimplencia/snapshot/run para disparo fora do agendamento.

Arquitetura

  • migrations/2026-04-24_inadimplencia_snapshots.sql — schema.
  • server/services/sendgrid-notification.ts — adiciona sendAlertEmail genérico (sem BCC do jurídico).
  • server/services/inadimplenciaSnapshotJob.tsrunSnapshotJob, isLastDayOfMonth, setupInadimplenciaSnapshotJob, recovery + alerta.
  • server/routes/inadimplencia.ts — endpoint POST /snapshot/run.
  • server/index.ts — setup do job junto aos outros sync jobs.
  • test/services/inadimplenciaSnapshotJob.test.ts — 7 testes do helper (inclui ano bissexto).

Documentação

  • Spec: docs/superpowers/specs/2026-04-24-inadimplencia-snapshot-mensal-design.md
  • Plano: docs/superpowers/plans/2026-04-24-inadimplencia-snapshot-mensal.md

Histórico

Esta PR foi aberta originalmente como #129 stacked contra feature/notificacao-extrajudicial-juridico. Quando aquela PR (#128) mergeou em main, a base desta foi deletada e GitHub fechou #129 automaticamente. Este é o PR de substituição contra main.

Test plan

  • Migration aplicada em local e prod
  • npx vitest run → 7/7 passing
  • npx tsc --noEmit sem erros
  • runSnapshotJob() gravou R$ 744.599,36 / 141 clientes / 181 parcelas em 2026-04
  • Segunda execução faz upsert (1 linha no SELECT — idempotência)
  • Query do snapshot bate exato com o painel ao vivo
  • Startup exibe [inadimplencia-snapshot] Scheduled hourly check — trigger at 12:00 on last day of month
  • Email de alerta chega em financeiro@turbopartners.com.br (MessageId XWcbkzm6QsKLltggcHlmcg)

🤖 Generated with Claude Code

Warleypablo and others added 7 commits April 24, 2026 16:28
Tabela cortex_core.inadimplencia_snapshots + job agendado para meio-dia do último dia de cada mês + aviso por email em caso de falha.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
8 tasks: branch, migration, sendAlertEmail, service do job, endpoint
manual, setup no index.ts, validação end-to-end, finalização.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Tabela cortex_core.inadimplencia_snapshots para snapshot mensal
do total de inadimplência. Upsert idempotente via UNIQUE(mes_referencia).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Função genérica para envio de alertas (sem BCC do jurídico).
Reusa ensureConfig() já presente.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Job que roda ao meio-dia do último dia de cada mês, calcula o total de
inadimplência (caz_parcelas.nao_pago) e faz upsert em inadimplencia_snapshots.
Envia email para financeiro@turbopartners.com.br em caso de falha.

Inclui recovery de restart e teste unitário do helper isLastDayOfMonth.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Permite disparar o snapshot fora do agendamento (recuperação após falha).
Body opcional { mesReferencia: 'YYYY-MM' } — padrão: mês corrente.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Chama setupInadimplenciaSnapshotJob() junto aos outros sync jobs.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@Warleypablo Warleypablo merged commit 08c7806 into main Apr 24, 2026
1 check passed
@Warleypablo Warleypablo deleted the feature/inadimplencia-snapshot-mensal branch April 24, 2026 20:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant