feat(auditoria): script CRM→ERP + relatório (R$ 10,5M de vazamento)#113
Open
Warleypablo wants to merge 18 commits intomainfrom
Open
feat(auditoria): script CRM→ERP + relatório (R$ 10,5M de vazamento)#113Warleypablo wants to merge 18 commits intomainfrom
Warleypablo wants to merge 18 commits intomainfrom
Conversation
…rias Spec one-shot script gerando relatório Markdown + CSVs anexos. Cobre vazamento de caixa, sub-cobrança, pós-churn, higiene, status divergente, cross-CRM e cobertura. Janela 12 meses, multi-empresa unificada (Turbo Partners + PEIXOTO DEBBANE). Achados pré-spec: 539/611 deals "ganhos" sem CNPJ no Bitrix; pipeline "Pós-Ganho/Subir-Ajustar Cobrança" com 0% CNPJ; stage_semantic vazio em ~99,9% dos deals (bug ETL). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Plano TDD bite-sized para o spec aprovado em 2026-04-14. Cobre: - Task 1: DISCOVERY.md com schema gotchas - Task 2: helpers (CNPJ normalize, validate módulo 11, format BRL) + tests - Task 3: runner skeleton + catalog + dry-run - Tasks 4-10: 23 queries SQL distribuídas em 7 seções - Task 11: renderer markdown completo - Task 12: execução final + sanity check SQL pré-validado contra prod read-only durante plan-writing (tipo_evento='RECEITA' uppercase, tipo_fatura 100% NULL, status buckets ClickUp lowercase). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…rmat BRL Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ódulo 11 Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…, mensagem pg_trgm - Pool.end() movido para bloco finally (evita pool leak em crash path) - DATABASE_URL ausente agora exibe os dois caminhos tentados antes de exit(1) - writeCsv só executa quando result.error é falso (sem CSVs vazios em erro) - Mensagem pg_trgm esclarece que similarity() é o motivo (queries 02 e 16) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…nsion - DATABASE_URL no .env aponta pro local (cortex_dev); auditoria precisa rodar contra prod. Novo env var AUDITORIA_DATABASE_URL tem precedência. - ssl auto-desliga quando a URL é localhost. - Verificar pg_trgm via pg_extension em vez de tentar CREATE EXTENSION (que exige superuser e estava emitindo falso alarme — extension já está instalada no prod). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Implementa as 5 queries da Seção A (vazamento de caixa) para o audit runner. Fix: cast explícito ids::uuid nas queries 03 e 05 para resolver mismatch de tipos varchar/uuid no join com caz_parcelas.id_cliente. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adiciona queries 06 (MRR contratado vs cobrado), 07 (valor pontual sem parcela no CAZ) e 08 (reajustes não refletidos, exploratório). Inclui cast ::uuid em caz_clientes.ids para corrigir type mismatch com caz_parcelas.id_cliente (uuid). Validadas em prod: 42, 80 e 0 linhas. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adiciona queries 09 (contratos encerrados com parcelas abertas) e 10 (inadimplência pós-churn > 90 dias). Inclui cast ::uuid em caz_clientes.ids para corrigir type mismatch. Validadas em prod: 1175 e 274 linhas. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…p por cliente
- Query 09: substitui filtro 'PAGO'/'CANCELADO' (inexistentes no DB) por
status IN ('PENDENTE', 'ATRASADO'), que são os valores reais de parcelas abertas
- Queries 09 e 10: cup_closed agregado por cliente (GROUP BY + MAX encerramento)
elimina duplicação N×parcela quando cliente tem múltiplos contratos encerrados
- Resultado: Q09 203 rows (era ~1175), Q10 159 rows (era ~274), sem duplicatas
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Queries 11-16 cobrem higiene de cadastro: duplicatas de CNPJ em ClickUp e Conta Azul, clientes sem CNPJ, CNPJs malformados (comprimento/dígitos) e nomes divergentes entre sistemas via pg_trgm similarity. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Queries 17-18 detectam clientes inativos no ClickUp com parcelas pagas pós-inativação (>30 dias) e clientes ativos sem parcela de receita nos últimos 6 meses — ambas com cast ::uuid para join caz_clientes.ids → caz_parcelas.id_cliente. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Queries 19 e 20: deals perdidos no Bitrix com cliente ativo no ClickUp, e clientes ativos no ClickUp sem deal correspondente no Bitrix. Query 20 usa DISTINCT ON para deduplicar CNPJs com múltiplas tasks. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Queries 21-23: % CNPJ preenchido por pipeline, % stage_semantic preenchido por pipeline (confirma bug ETL: <0.3% de cobertura), e top campos críticos vazios por sistema (empresa 100% vazio, stage_semantic 99.9%, CNPJ Bitrix 92.6%). Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
… ações ROI, anexo) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Resultado da execução de 14/04/2026 contra prod (Turbo Partners + PEIXOTO DEBBANE unificadas). Janela de 12 meses. Todas as 23 categorias rodaram sem erro. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🎯 TL;DR
Script one-shot que audita o funil Bitrix → ClickUp → Conta Azul em 23 categorias e gera um relatório Markdown + 23 CSVs versionados em
docs/auditoria/. A primeira execução em produção encontrou R$ 10.495.223,52 de vazamento financeiro estimado nos últimos 12 meses (worst case).Documentos de referência:
docs/superpowers/specs/2026-04-14-auditoria-crm-erp-design.mddocs/superpowers/plans/2026-04-14-auditoria-crm-erp.mddocs/auditoria/2026-04-15-auditoria-crm-erp.md🔥 Top 5 vazamentos identificados
O #1 sozinho explica 68% do vazamento — 407 deals em "Negócio Ganho" no Bitrix sem CNPJ preenchido, impossibilitando o JOIN com o ERP.
📦 O que tem na diff
Código novo (
scripts/auditoria/):auditoria-crm-erp.ts— runner principal (orquestra catalog + queries + render)lib/normalize-cnpj.ts,validate-cnpj.ts(módulo 11),format-currency.ts(BRL)lib/run-query.ts— wrapper de execução com timing + erro gracefullib/render-csv.ts— exporta CSV viacsv-stringify/synclib/render-markdown.ts— gera o relatório completo com headline, top 5, seções, ações ROI, anexocatalog.ts— metadados das 23 categoriasqueries/01..23-*.sql— 23 SQLs validadas em prodlib/__tests__/*.test.ts— 14 testes unitários (helpers)DISCOVERY.md— gotchas de schema descobertos durante o plan-writingArtefatos (committed):
docs/auditoria/2026-04-15-auditoria-crm-erp.md— relatório principal (42KB)docs/auditoria/2026-04-15/csv/*.csv— 23 CSVs (3.838 linhas)Modificações:
package.json— adiciona script `auditoria-crm-erp` + dep `csv-stringify@^6.7.0````bash
AUDITORIA_DATABASE_URL='postgresql://postgres:...@34.95.249.110:5432/dados_turbo' \
npm run auditoria-crm-erp
```
`AUDITORIA_DATABASE_URL` é necessário porque o `DATABASE_URL` padrão do projeto aponta pro banco local de dev.
🩺 Achados estruturais (sub-tasks de remediação sugeridas, fora deste PR)
✅ Test plan
🤖 Generated with Claude Code