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
- Única: utiliza a tabela
0. - 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.
- 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).
- Perfil: informar a tabela em "Perfis" (Configurações » Cadastros), no campo "Tabela de Preço". Observação: usa o Perfil Principal do parceiro.
- Parceiro: informar a tabela no cadastro de parceiros, aba Crédito, campo "Tabela de preço".
- Tipo de Negociação: informar a tabela no cadastro de "Tipo de Negociação", aba Características, campo "Tabela de Preço".
- Local: informar a tabela no cadastro de Local, campo "Tabela de Preço".
- Tipo de Negociação/Vendedor: habilita a aba "Vendedor/Tabela" no Tipo de Negociação para ligar vendedores a diferentes tabelas.
- 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).
- 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 (usaCODPRODpara 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), ouundefinedquando 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 comparacodTabecodProd. - 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 tabela0.
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 Empresa | Regra aplicada |
|---|---|
| Disan | Usa a tabela selecionada (tablePriceSelected) |
| NeoDistribuidora | Prioriza tabela por empresa (TABELAPOREMPRESA) |
| Makena | Usa tablePriceSelected |
| GRM | Usa codTab = 0 |
| Outras | Usa tabela do parceiro (CODTAB) ou perfil (TABELAPORPERFIL) |
| TABPADCSLTPROD | Usa 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 comoTABPADCSLTPROD. - Product: utiliza
CODPRODpara 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.TABPADCSLTPRODquando não há parceiro. - Regras dedicadas: Disan, NeoDistribuidora, Makena e GRM.
- Conversões seguras: uso de
toString()nas comparações para robustez.
🧭 Resumo Operacional
- Checa base para busca (parceiro/tabelas/permissão/tipo de empresa).
- Varre
catalog.tablePrices. - Aplica regras específicas por empresa.
- Retorna a entrada da tabela que corresponde ao produto.
- Se não encontrar, retorna
undefined.