Pular para o conteúdo principal

Tabelas de Preços

Visão Geral

A função getProductTablePrice é responsável por determinar o preço de tabela aplicável a um produto dentro do catálogo, considerando o contexto do usuário, o parceiro selecionado e as permissões da empresa. Ela consolida regras de negócio específicas por tipo de empresa (ex.: Disan, NeoDistribuidora, Makena, GRM) e integra dados do estado global do catálogo e das permissões.

🧩 Tipo de tabela de preço Sankhya

  1. Única: utiliza a tabela 0.
  2. Região do vendedor: informar a tabela na tela "Regiões" (Configurações » Cadastros » Endereços), no campo "Tabela Preço"; vincular a região ao vendedor no cadastro de vendedores.
  3. Região do Parceiro: informar a tabela na tela "Regiões" (Configurações » Cadastros » Endereços), no campo "Tabela Preço"; vincular a região no cadastro de parceiros (aba Endereços).
  4. Perfil: informar a tabela em "Perfis" (Configurações » Cadastros), no campo "Tabela de Preço". Observação: usa o Perfil Principal do parceiro.
  5. Parceiro: informar a tabela no cadastro de parceiros, aba Crédito, campo "Tabela de preço".
  6. Tipo de Negociação: informar a tabela no cadastro de "Tipo de Negociação", aba Características, campo "Tabela de Preço".
  7. Local: informar a tabela no cadastro de Local, campo "Tabela de Preço".
  8. Tipo de Negociação/Vendedor: habilita a aba "Vendedor/Tabela" no Tipo de Negociação para ligar vendedores a diferentes tabelas.
  9. Parceiro/Tipo Negociação/Vendedor: prioriza a tabela do parceiro; se não houver, usa a tabela do Tipo de Negociação para o vendedor (aba Vendedor/Tabela do Tipo de Negociação).
  10. Parceiro/Empresa: usa a tabela informada na aba "Grupo de ICMS/ISS por empresa" do cadastro do parceiro (quando habilitada por parâmetro), para sugerir o preço de venda.

⚙️ Principais Funções e Parâmetros

getProductTablePrice(product: Product, catalog: CatalogState, permission: PermissionWithCompany): TablePrice | undefined
  • Parâmetros:
    • product: objeto de produto (usa CODPROD para a correspondência).
    • catalog: estado atual do catálogo (tabelas de preço, parceiro/empresa selecionados, tabela selecionada).
    • permission: permissões e regras específicas da empresa logada.
  • Retorno: objeto da tabela de preço correspondente (TablePrice), ou undefined quando nada é encontrado.

🧩 Fluxo Lógico da Função

1) Validação inicial

A execução segue quando pelo menos uma condição é verdadeira:

  • Existe parceiro e lista de tabelas de preço: catalog.selectedPartner && catalog.tablePrices;
  • Existe tabela padrão por permissão: permission.TABPADCSLTPROD;
  • A empresa é Disan ou NeoDistribuidora (regras dedicadas).

2) Busca da tabela de preço (sobre catalog.tablePrices)

  • Disan, NeoDistribuidora, Makena: usa a tabela selecionada (catalog.tablePriceSelected) e compara codTab e codProd.
  • Tabela padrão (TABPADCSLTPROD): sem parceiro selecionado, utiliza a tabela definida na permissão.
  • Tabelas por empresa (TABELAPOREMPRESA) / TIPTABPRECOS = 10: quando o parceiro possui tabelas vinculadas por empresa, escolhe a que corresponde à catalog.selectedCompany.
  • Tabela direta do parceiro (CODTAB) / TIPTABPRECOS = 5: se o parceiro possui uma tabela definida diretamente, utiliza essa relação.
  • Tabelas por perfil (TABELAPORPERFIL) / TIPTABPRECOS = 4: verifica perfis vinculados e utiliza o primeiro perfil disponível.
  • Empresa GRM / codTab === 0: aplica a regra especial de uso da tabela 0.

3) Retorno

Retorna o objeto TablePrice correspondente, ou undefined se nenhuma regra se aplicar.

🧠 Lógica de Permissões e Empresas

Tabela de regras por tipo de empresa:

Tipo de EmpresaRegra aplicada
DisanUsa a tabela selecionada (tablePriceSelected)
NeoDistribuidoraPrioriza tabela por empresa (TABELAPOREMPRESA)
MakenaUsa tablePriceSelected
GRMUsa codTab = 0
OutrasUsa tabela do parceiro (CODTAB) ou perfil (TABELAPORPERFIL)
TABPADCSLTPRODUsa tabela padrão definida pela permissão

Observação: comparações utilizam toString() quando necessário para evitar discrepâncias de tipo.

🧱 Integrações

  • CatalogState: fornece selectedPartner, selectedCompany, tablePrices, tablePriceSelected.
  • PermissionWithCompany: identifica empresa (isDisan, isMakena, isNeoDistribuidora, isGRM, etc.) e disponibiliza permissões como TABPADCSLTPROD.
  • Product: utiliza CODPROD para correspondência com as entradas da tabela de preços.

⚡ Requisitos Funcionais

  • Determinar automaticamente a tabela correta considerando permissões, parceiro e empresa ativa.
  • Suportar configurações por empresa, perfil e tabela global.
  • Compatível com empresas que possuem regras exclusivas de precificação.

🧩 Principais Customizações

  • Múltiplas tabelas por empresa: suporte a TABELAPOREMPRESA.
  • Tabela padrão por permissão: uso de permission.TABPADCSLTPROD quando não há parceiro.
  • Regras dedicadas: Disan, NeoDistribuidora, Makena e GRM.
  • Conversões seguras: uso de toString() nas comparações para robustez.

🧭 Resumo Operacional

  1. Checa base para busca (parceiro/tabelas/permissão/tipo de empresa).
  2. Varre catalog.tablePrices.
  3. Aplica regras específicas por empresa.
  4. Retorna a entrada da tabela que corresponde ao produto.
  5. Se não encontrar, retorna undefined.