diff --git a/client/src/pages/SOE.tsx b/client/src/pages/SOE.tsx index 83a5b4f..b6a75d5 100644 --- a/client/src/pages/SOE.tsx +++ b/client/src/pages/SOE.tsx @@ -1,2 +1,2 @@ -// SOE — Sistema de Operações Empresariais (alias para o módulo Plus/ERP) -export { default } from "./Plus"; +// SOE — Sistema de Operações Empresariais +export { default } from "./ERP"; diff --git a/scripts/seed-soe-rules.ts b/scripts/seed-soe-rules.ts new file mode 100644 index 0000000..5e4fdb2 --- /dev/null +++ b/scripts/seed-soe-rules.ts @@ -0,0 +1,63 @@ +/** + * Seed das regras padrão do SOE (soe_regras) + * Insere FISCAL_RULES_PADRAO + BUSINESS_RULES_PADRAO no banco. + * Idempotente: pula regras que já existem (por nome + trigger). + * + * Uso: + * DATABASE_URL=postgres://... npx tsx scripts/seed-soe-rules.ts + */ + +import "dotenv/config"; +import pg from "pg"; +import { FISCAL_RULES_PADRAO } from "../server/soe/rule-engine/fiscal-rules"; +import { BUSINESS_RULES_PADRAO } from "../server/soe/rule-engine/business-rules"; + +if (!process.env.DATABASE_URL) { + throw new Error("DATABASE_URL não definida"); +} + +const client = new pg.Client({ connectionString: process.env.DATABASE_URL }); +await client.connect(); + +const ALL_RULES = [...FISCAL_RULES_PADRAO, ...BUSINESS_RULES_PADRAO]; + +console.log(`Inserindo ${ALL_RULES.length} regras padrão SOE...\n`); + +let inserted = 0; +let skipped = 0; + +for (const rule of ALL_RULES) { + const existing = await client.query( + `SELECT id FROM soe_regras WHERE nome = $1 AND trigger = $2 AND origem_padrao = true`, + [rule.nome, rule.trigger] + ); + + if ((existing.rowCount ?? 0) > 0) { + console.log(` [SKIP] ${rule.id}`); + skipped++; + continue; + } + + await client.query( + `INSERT INTO soe_regras (dominio, trigger, nome, condicao, acao, prioridade, ativo, origem_padrao, tenant_id) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)`, + [ + rule.dominio, + rule.trigger, + rule.nome, + JSON.stringify(rule.condicao), + JSON.stringify(rule.acao), + rule.prioridade, + rule.ativo, + true, + null, + ] + ); + + console.log(` [OK] ${rule.id} — ${rule.nome}`); + inserted++; +} + +await client.end(); + +console.log(`\nConcluído: ${inserted} inseridas, ${skipped} ignoradas.`);