feat(v2): candidate pool SQL (admin exclusion preserved, no hard LIMIT 10) + verbatim legacy SQL for shadow mode

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Gustavo
2026-08-24 15:19:39 -03:00
co-authored by Claude Sonnet 5
parent 60015c0972
commit 00bb89f4f4
7 changed files with 137 additions and 1 deletions
+13
View File
@@ -0,0 +1,13 @@
// @requires config.js
const config = parseConfig($env);
const glpiBaseUrl = String($('Config - Coordenador GLPI v2').first().json.glpi_base_url || '').replace(/\/$/, '').replace(/'/g, "''");
const queryTemplate = /* __SQL_CANDIDATOS_V2__ */;
const query = queryTemplate
.replaceAll('{DIAS_SEM_INTERACAO_ALERTA}', String(config.diasSemInteracaoAlerta))
.replaceAll('{HORAS_SLA_RISCO}', String(config.horasSlaRisco))
.replaceAll('{GLPI_BASE_URL}', glpiBaseUrl)
.replaceAll('{CANDIDATE_POOL_SIZE}', String(config.candidatePoolSize));
return [{ json: { query, config } }];
@@ -0,0 +1,19 @@
const { test } = require('node:test');
const assert = require('node:assert/strict');
const fs = require('node:fs');
const path = require('node:path');
test('SQL de candidatos V2 preserva a exclusao administrativa do V1', () => {
const sql = fs.readFileSync(path.join(__dirname, '..', '..', 'sql', 'candidatos_v2_glpi.sql'), 'utf8');
assert.ok(sql.includes("NOT LIKE 'ADMINISTRATIVO%'"));
assert.ok(sql.includes("NOT LIKE 'DESENVOLVIMENTO%'"));
assert.ok(sql.includes("NOT LIKE 'INFRA%'"));
assert.ok(sql.includes('is_deleted = false'));
assert.ok(sql.includes('status NOT IN (5, 6)'));
});
test('SQL de candidatos V2 NAO tem mais LIMIT fixo em 10 (funil maior)', () => {
const sql = fs.readFileSync(path.join(__dirname, '..', '..', 'sql', 'candidatos_v2_glpi.sql'), 'utf8');
assert.ok(sql.includes('LIMIT {CANDIDATE_POOL_SIZE}'));
assert.ok(!sql.includes('LIMIT 10'));
});
+11
View File
@@ -0,0 +1,11 @@
const config = $('Config - Coordenador GLPI v2').first().json;
const glpiBaseUrl = String(config.glpi_base_url || '').replace(/\/$/, '').replace(/'/g, "''");
const queryTemplate = /* __SQL_LEGADO_V1_VERBATIM__ */;
const query = queryTemplate
.replaceAll('{DIAS_SEM_INTERACAO_ALERTA}', '2')
.replaceAll('{HORAS_SLA_RISCO}', '8')
.replaceAll('{GLPI_BASE_URL}', glpiBaseUrl);
return [{ json: { query } }];