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
- Registros duplicados com o mesmo
ParametroSistemaEnumId - EnumIds incorretos - registros com nome de um parâmetro mas EnumId de outro
- 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:
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:
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:
- Criação manual de parâmetros sem seguir o padrão do enum
- Falta de constraint UNIQUE no campo
ParametroSistemaEnumId - 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