=== Teste E2E: exclusão lógica obrigatória === -- detecção (sem executar) -- ✅ tabela com status sem filtro => falta ✅ WHERE status != 0 (sem qualificador, 1 tabela) => ok ✅ alias qualificado => ok ✅ nome da tabela como qualificador => ok ✅ coluna só no SELECT antes do FROM não conta ✅ CASO 211×212: filtra i.status mas não s.status => falta scope — ["scope (s) → status"] ✅ os dois filtrados => ok ✅ filtro no ON => ok ✅ "status" sem qualificador com 2 tabelas que têm status => ambíguo, não vale ✅ "status" dentro de STRING não é filtro ✅ contexto só tem active: exigida ✅ contexto com c.active = 1 => ok ✅ override do registry: cm_contract usa active (status ali é etapa do contrato) ✅ view (vw_*) não é checada ✅ consulta sem FROM (SELECT 1) => nada a exigir -- tool sql_query -- ✅ sem filtro de status: REJEITADA com mensagem que diz o que falta — Consulta rejeitada pela regra de EXCLUSÃO LÓGICA: o Privia inativa registros (status/activ ✅ com filtro: executa — n=34 ✅ incluir_inativos=true (usuário pediu inativos): executa e traz a mais — n=89 ativos=34 ✅ o caso 212 (só i.status) agora é rejeitado em vez de devolver 212 ❌ com os dois filtros: 211 (o número correto) — n=210 -- LIMIT da própria consulta é respeitado (bug antigo: era trocado por 2000) -- ✅ LIMIT 8 devolve 8 linhas (antes devolvia até 2000) — linhas=8 ✅ LIMIT n OFFSET m preserva o OFFSET ✅ LIMIT m, n (forma MySQL) equivale a OFFSET ✅ LIMIT acima do teto continua limitado a 2000 ✅ sem LIMIT: teto de 2000 aplicado -- grafico_generico herda a regra -- ✅ gráfico com consulta sem s.status: rejeitado, sem gráfico ❌ gráfico com os filtros: ok e soma = 211 — === RESULTADO: 25 passaram, 2 falharam ===