Pular para conteúdo

Política de Venda vs Natureza de Operação

Visão Geral

Este documento descreve a regra de negócio que determina quando o campo Política de Venda (PlanoComercialPrecoVenda) é obrigatório ou proibido ao adicionar itens a um pedido.

A obrigatoriedade depende do Tipo de Natureza de Operação configurado no pedido.

Implementação

A validação está implementada em: - Arquivo: src/Nelmetais.SGE.Business/Services/Comercial/PedidoItemService.cs - Método: ValidarPlanoComercialPrecoVenda() (linhas 596-618)

Regra de Negócio

Quando a Política de Venda É OBRIGATÓRIA

Condição: Natureza de Operação = Venda (TipoNaturezaOperacaoEnum.Venda = 1)

if (pedidoItem.Pedido?.NaturezaOperacao?.TipoNaturezaOperacao == TipoNaturezaOperacaoEnum.Venda)
{
    if (pedidoItem.PlanoComercialPrecoVendaId is null)
    {
        Notify("É obrigatório informar o plano comercial do preço de venda para esse tipo de natureza operação de Venda.");
        return false;
    }
}

Comportamento esperado: - Campo habilitado na interface - Campo é obrigatório (required) - Sistema valida e rejeita se não informado

Quando a Política de Venda NÃO DEVE ser Informada

Condição: Natureza de Operação ≠ Venda (todos os outros tipos)

else
{
    if (pedidoItem.PlanoComercialPrecoVendaId is not null)
    {
        Notify("Não deve ser informado o plano comercial do preço de venda para esse tipo de natureza operação de Venda.");
        return false;
    }
}

Comportamento esperado: - Campo desabilitado/oculto na interface - Campo não deve ser preenchido - Sistema rejeita se for informado algum valor

Tabela de Referência

Natureza de Operação Código Política de Venda Comportamento
Venda 1 OBRIGATÓRIA Campo habilitado e required
Devolução Venda 2 PROIBIDA Campo desabilitado/oculto
Compra 3 PROIBIDA Campo desabilitado/oculto
Devolução Compra 4 PROIBIDA Campo desabilitado/oculto
Transferência 5 PROIBIDA Campo desabilitado/oculto
Outros 7 PROIBIDA Campo desabilitado/oculto
Beneficiamento 8 PROIBIDA Campo desabilitado/oculto

Mensagens de Validação

Mensagem de Obrigatoriedade

É obrigatório informar o plano comercial do preço de venda para esse tipo de natureza operação de Venda.

Mensagem de Proibição

Não deve ser informado o plano comercial do preço de venda para esse tipo de natureza operação de Venda.

Fluxo de Validação

graph TD
    A[Item do Pedido] --> B{Natureza = Venda?}
    B -->|Sim| C{Política Venda informada?}
    B -->|Não| D{Política Venda informada?}
    C -->|Sim| E[✓ Validação OK]
    C -->|Não| F[✗ Erro: Campo obrigatório]
    D -->|Não| G[✓ Validação OK]
    D -->|Sim| H[✗ Erro: Campo não deve ser informado]

URL de Teste

http://localhost:8000/comercial/adicionar-item-estoque/5?tipoPedidoItem=Pedido

Referências

  • Enum: src/Nelmetais.SGE.Business/Enums/Cadastros/TipoNaturezaOperacaoEnum.cs
  • Model: src/Nelmetais.SGE.Business/Models/Comercial/PedidoItem.cs
  • ViewModel: src/Nelmetais.SGE.WebApp/Areas/Comercial/ViewModels/PedidoItemViewModel.cs
  • Controller: src/Nelmetais.SGE.WebApp/Areas/Comercial/Controllers/PedidoItemController.cs
  • Service: src/Nelmetais.SGE.Business/Services/Comercial/PedidoItemService.cs

Notas Importantes

  1. A validação ocorre no backend (Service layer) durante a operação de Add ou Update de PedidoItem
  2. A interface (frontend) deve refletir essa regra habilitando/desabilitando o campo conforme a Natureza de Operação
  3. Esta regra garante que apenas operações de Venda tenham políticas comerciais associadas
  4. Para operações de Compra, a lógica de preços segue regras diferentes (Ordem de Compra)

Última atualização: 2025-11-07 Versão: 1.0