Pular para conteúdo

Inconsistências na Tabela ParametroSistema

Data da Análise

Análise realizada em: 27/11/2025 Banco de dados: NelmetaisDBUAT

Resumo do Problema

A tabela ParametroSistema apresenta diversas inconsistências entre os registros no banco de dados e o enum ParametroSistemaEnum definido no código-fonte.

Problemas Identificados

  1. Registros duplicados com o mesmo ParametroSistemaEnumId
  2. EnumIds incorretos - registros com nome de um parâmetro mas EnumId de outro
  3. Registros sem valor - duplicatas criadas manualmente sem preenchimento

Análise Detalhada

Referência: Enum no Código-Fonte

Localização: src/Nelmetais.SGE.Business/Enums/Administrativo/ParametroSistemaEnum.cs

EnumId Nome Esperado Tipo
1 Dias úteis para folha pagamento DiasSemanaListaInteiro
2 Dias úteis para logística DiasSemanaListaInteiro
3 Dias úteis para prazo de pagamento na venda DiasSemanaListaInteiro
4 Dias que o destinatário pode ter o cadastro desatualizado para venda InteiroPositivo
5 Dia limite para Data de previsão de entrega no pedido ser maior que data de emissão do pedido InteiroPositivo
6 Bloquear ao finalizar pedido se não possuir estoque disponível Booleano
7 Percentual Limite para Comissão de Representante PercentualZeroaMais100
8 Percentual Limite para Comissão de Comprador PercentualZeroaMais100
9 Índice divisor profai para calculo de custo de mão de obra de mercadoria Numerico
10 Permitir cadastro de pessoa com CPF ou CNPJ ou Documento estrangeiro duplicado Booleano
11 Permitir cadastro de pessoa sem CPF ou CNPJ ou Documento estrangeiro Booleano
12 Id da família que identifica as mercadorias que fazem parte composição da liga Inteiro
13 Percentual mínimo de margem comercial no pedido de venda PercentualZeroaMais100
14 Empresa emissão no pedido Empresa
15 Natureza operação no pedido NaturezaOperacao
16 Plano de conta utilizado para pagamento de comissionados PlanoConta
17 Plano de conta utilizado para faturamento de documentos fiscais PlanoConta
18 Executar job de integração com API de boleto FormatoCron
19 Dias de emissão retroativos da data atual para exibir pedidos com crédito liberado e não faturado InteiroPositivo
20 Dias de atraso no pagamento de duplicatas vencidas para efetuar cobrança InteiroPositivo
21 Executar job de sistema de comando SQL FormatoCron

Dados Atuais no Banco de Dados

SELECT "Id", "ParametroSistemaEnumId", "Nome", "Valor"
FROM "ParametroSistema"
ORDER BY "ParametroSistemaEnumId", "Id";
Id EnumId Nome no Banco Valor Status
12 1 Dias úteis para folha pagamento (vazio) :warning: Duplicado
25 1 Dias úteis para folha pagamento (vazio) :warning: Duplicado
15 3 Dias úteis para prazo de pagamento na venda (vazio) :white_check_mark: OK
14 4 Dias que o destinatário pode ter o cadastro desatualizado para venda 500 :white_check_mark: OK
27 5 Dia limite para Data de previsão de entrega no pedido... 90 :white_check_mark: OK
7 6 Percentual Limite para Comissão de Representante 30 :x: EnumId errado
22 6 Bloquear ao finalizar pedido se não possuir estoque disponível (vazio) :white_check_mark: OK (nome)
2 7 Dias úteis para logística [2,3,4] :x: EnumId errado
18 7 Percentual Limite para Comissão de Representante 5 :white_check_mark: Correto
20 7 Percentual Limite para Comissão de Representante (vazio) :x: Duplicado
17 8 Percentual Limite para Comissão de Comprador 30 :white_check_mark: OK
9 9 Índice divisor profai para calculo de custo de mão de obra... 0,7275 :white_check_mark: OK
11 9 Permitir cadastro de pessoa sem CPF ou CNPJ... False :x: EnumId errado (deveria ser 11)
5 10 Permitir cadastro de pessoa com CPF ou CNPJ... duplicado True :white_check_mark: OK
29 12 Id da família que identifica as mercadorias... 79 :white_check_mark: OK
19 13 Percentual mínimo de margem comercial no pedido de venda (vazio) :white_check_mark: OK
13 14 Empresa emissão no pedido [3,7] :white_check_mark: OK
28 14 Empresa emissão no pedido (vazio) :x: Duplicado
21 15 Natureza operação no pedido [2,1] :white_check_mark: OK
23 16 Plano de conta utilizado para pagamento de comissionados 10 :white_check_mark: OK
26 17 Plano de conta utilizado para faturamento de documentos fiscais 8 :white_check_mark: OK
30 19 Dias de emissão retroativos... 5 :white_check_mark: OK
31 20 Dias de atraso no pagamento de duplicatas vencidas... 5 :white_check_mark: OK

Inconsistências Críticas

1. Percentual Limite para Comissão de Representante (EnumId 7)

Problema Crítico - Tarefa NH-128

Este parâmetro é necessário para a validação do campo "% Representante" na tela de Cotação/Pedido.

Situação atual:

Id EnumId Nome Valor Criado Em Problema
7 6 Percentual Limite para Comissão de Representante 30 2023-01-23 EnumId errado (6 = Bloquear estoque)
18 7 Percentual Limite para Comissão de Representante 5 Migração inicial Registro correto
20 7 Percentual Limite para Comissão de Representante (vazio) 2023-11-16 Duplicado sem valor

Ação recomendada:

-- Remover registros incorretos/duplicados
DELETE FROM "ParametroSistema" WHERE "Id" IN (7, 20);

-- Verificar registro correto (ID 18)
SELECT * FROM "ParametroSistema" WHERE "Id" = 18;

2. Dias úteis para logística (EnumId 2) - INCORRETO

Id EnumId Nome Valor Problema
2 7 Dias úteis para logística [2,3,4] EnumId errado (deveria ser 2, não 7)

Ação recomendada:

-- Corrigir o EnumId
UPDATE "ParametroSistema"
SET "ParametroSistemaEnumId" = 2
WHERE "Id" = 2;

3. Permitir cadastro de pessoa sem CPF/CNPJ (EnumId 11) - INCORRETO

Id EnumId Nome Valor Problema
11 9 Permitir cadastro de pessoa sem CPF ou CNPJ... False EnumId errado (deveria ser 11, não 9)

Ação recomendada:

-- Corrigir o EnumId
UPDATE "ParametroSistema"
SET "ParametroSistemaEnumId" = 11
WHERE "Id" = 11;

4. Duplicados a Remover

Id EnumId Nome Ação
12 ou 25 1 Dias úteis para folha pagamento Remover um dos duplicados
28 14 Empresa emissão no pedido Remover (duplicado vazio)

Script de Correção Completo

Execute com cuidado

Faça backup antes de executar. Teste primeiro em ambiente de desenvolvimento.

-- ==============================================
-- SCRIPT DE CORREÇÃO - ParametroSistema
-- Data: 27/11/2025
-- Banco: NelmetaisDBUAT
-- ==============================================

BEGIN;

-- 1. Remover duplicados do Percentual Limite Comissão Representante
DELETE FROM "ParametroSistema" WHERE "Id" IN (7, 20);

-- 2. Corrigir EnumId do "Dias úteis para logística" (ID 2)
UPDATE "ParametroSistema"
SET "ParametroSistemaEnumId" = 2
WHERE "Id" = 2;

-- 3. Corrigir EnumId do "Permitir cadastro sem CPF/CNPJ" (ID 11)
UPDATE "ParametroSistema"
SET "ParametroSistemaEnumId" = 11
WHERE "Id" = 11;

-- 4. Remover duplicado de "Empresa emissão no pedido" (ID 28)
DELETE FROM "ParametroSistema" WHERE "Id" = 28;

-- 5. Remover um dos duplicados de "Dias úteis para folha pagamento"
DELETE FROM "ParametroSistema" WHERE "Id" = 25;

-- Verificar resultado
SELECT "Id", "ParametroSistemaEnumId", "Nome", "Valor"
FROM "ParametroSistema"
ORDER BY "ParametroSistemaEnumId", "Id";

COMMIT;

Causa Raiz

As inconsistências provavelmente ocorreram devido a:

  1. Criação manual de parâmetros sem seguir o padrão do enum
  2. Falta de constraint UNIQUE no campo ParametroSistemaEnumId
  3. Migrações não sincronizadas entre ambientes

Prevenção Futura

1. Adicionar Constraint Unique

-- Impedir duplicatas por EnumId (exceto para parâmetros por usuário)
CREATE UNIQUE INDEX "IX_ParametroSistema_EnumId_Padrao"
ON "ParametroSistema" ("ParametroSistemaEnumId")
WHERE "Padrao" = true;

2. Validação no Backend

Adicionar validação no ParametroSistemaValidation.cs:

RuleFor(p => p.ParametroSistemaEnumId)
    .Must((parametro, enumId) => ValidarEnumIdUnico(parametro, enumId))
    .WithMessage("Já existe um parâmetro de sistema cadastrado com este tipo.");

Referências

  • Tarefa relacionada: NH-128 - Carteira de Venda / Item de Estoque - % Representante
  • Enum source: src/Nelmetais.SGE.Business/Enums/Administrativo/ParametroSistemaEnum.cs
  • Tabela: public.ParametroSistema