Árvore de páginas

Módulos
Modulo Venda




DADOS GERAIS SOBRE O MÓDULO

Este módulo tem o objetivo de manipular vendas dentro da aplicação. Na guia de pedidos, o usuário pode fazer novos pedidos de venda, consulta-los em listagem, aprovações entre outros. Este repositório permite que o usuário faça personalizações da aplicação conforme a necessidade, para atender todas as estratégias de venda utilizada pelo cliente.

Já na guia de Notas Fiscais, o usuário poderá realizar consultas das informações de notas fiscais que são importadas (integradas) do ERP utilizado. 

ÍNDICE DO MÓDULO

Erro ao processar a macro "toc"

null

Documentos relacionados


CORE




GUIA NOTA FISCAL

Neste módulo o usuário do sistema poderá consultar informações referente as notas fiscais que são integradas do ERP (Enterprise Resource Planning - ou  Sistema de Gestão Empresarial).

Sendo assim, a listagem de notas é exibida ao usuário desta forma:

No botão de "Visualização" de cada registro, é exibido as informações da nota fiscal importadas do ERP. São exibidos os dados de do cabeçalho da Nota fiscal, como também os dados do produto. 

Lembrando que alguns desses dados são exibidos quando associados aos pedidos emitidos pela aplicação TOTVS - SFA.

Configuração dos campos de exibição

O sistema também permite que o usuário faça a manipulação dos campos que serão listados na consulta de notas fiscais.

Para isso, acesse Configuração > Configuração pedido > Consulta nota fiscal

Quando selecionado com "Exibir coluna" será apresentado o campo ao usuário na consulta. Ao "exibir filtro" o campo é listado como filtro na consulta de notas fiscais na web. Os outros campos tem o mesmo funcionamento que a configuração de consulta para os pedidos.

Por exemplo, a exibição de Data de vencimento da nota fiscal:

Na configuração, para o campo WEB_LISTAGEM_DATAVENCIMENTO é alterado para "Exibir coluna - Sim" e o Campo de Data vencimento é exibido na listagem

Porém quando o campo WEB_CABECALHO_DATAVENCIMENTO é alterado para  "Exibir coluna - Sim" e o Campo de Data vencimento é exibido no Cabeçalho da consulta da Nota fiscal 

Consequentemente, a configuração funciona para os outros campos da mesma forma.


GUIA PEDIDO

Nesse módulo o usuário do sistema poderá emitir pedidos de vendas e enviá-los ao ERP (Enterprise Resource Planning - ou  Sistema de Gestão Empresarial) integrado para posterior processamento e faturamento. 

Também é possível visualizar os pedidos já existentes, a fim de validar informações e acompanhar o andamento deles.

Durante a emissão de um pedido de venda, o usuário terá a possibilidade de:  

  1. Preencher os dados do cabeçalho do pedido;
  2. Pesquisar os produtos disponíveis para venda; 
  3. Incluir produtos no pedido; 
  4. Consultar e editar as informações dos produtos no carrinho; 
  5. Consultar ou definir as parcelas do pedido; 
  6. Definir informações de entrega do pedido; 
  7. Preencher dados complementares do pedido; 
  8. Consultar o resumo de todas as informações do pedido; 
  9. Gravar um rascunho do pedido ou finalizá-lo para envio ao ERP. 

Em todas essas ações, o pedido poderá ser parametrizado de várias maneiras diferentes, baseado no Configurador de  Pedidos do TOTVS CRM | SFA

Configurador de Pedidos é o recurso do sistema capaz de parametrizar regras para exibição/ocultação de informações e/ou  lógicas de execução de validações em geral. 

Abaixo serão descritas as principais possibilidades de configuração do emissor de pedidos do TOTVS CRM | SFA.

1.1 Cabeçalho 

O cabeçalho do pedido é a seção destinada ao preenchimento dos dados comuns e gerais do pedido. Os produtos somente poderão ser adicionados ao pedido após o preenchimento dos campos obrigatórios do cabeçalho. Pelo Configurador de Pedidos, pode-se ativar ou desativar campos, definir títulos, se serão exibidos ou ocultados (e em qual ordem), se serão editáveis ou protegidos (com ou sem produtos no carrinho), se o preenchimento será obrigatório ou opcional e se  o campo deverá ser exibido ou ocultado no relatório de pedido de venda. Além disso, alguns campos permitem a configuração de  consultas específicas (que podem ser organizadas por níveis) para disponibilização das opções para seleção e qual registro já  deverá vir selecionado por padrão. 

O cabeçalho do pedido standard disponibiliza para preenchimento de alguns dos seguintes campos: 

Aplicação web:

Aplicação Android:






















1.1.1 Profissional

Nesse campo deve ser preenchido o profissional responsável pelo pedido.


Vínculos disponíveis 


Hierarquia profissional 

Perfil de acesso 

Local de venda 

Filial 

Operação

Exemplo 

Exibe o profissional autenticado e os profissionais ativos  abaixo da sua hierarquia.

1.1.2 Cliente 

Nesse campo deve ser preenchido o cliente do pedido.

Vínculos disponíveis∙ ∙ 

Profissional autenticado 

Hierarquia profissional

Exemplo

Exibe os clientes ativos vinculados ao profissional autenticado  ou vinculados aos profissionais abaixo da hierarquia do  profissional autenticado.

1.1.3 Local de venda 

Nesse campo deve ser preenchido o local de venda/faturamento do cliente do pedido. Entende-se local como sendo os  endereços/lojas do cliente. 


Vínculos disponíveis 

Cliente 

Profissional 

Filial 

Segmento 

Unidade federativa da filial 

Unidade federativa do local de venda 

Operação

Exemplo 

Exibe os locais de venda/faturamento ativos vinculados ao  cliente e ao profissional do pedido.

Para o Local de atendimento, foi incluso um novo comportamento no Android, onde o Local do atendimento é selecionado automaticamente no pedido, quando disponível.

Sendo assim, na Visão 360º, quando selecionado um Local de atendimento, ao Clicar em "Novo pedido", é aberto a tela de pedidos, já com o mesmo local selecionado. A ideia é facilitar o preenchimento do cabeçalho trazendo já esta informação, mesmo que o usuário possa alterar o campo manualmente.

1.1.4 Bloqueios 

Após a seleção do local de venda do pedido, um semáforo indicará se o local possui ou não bloqueios cadastrados, podendo  ser na cor verde, amarela ou vermelha. 

No TOTVS CRM | SFA Web, o semáforo é exibido no cabeçalho da tela de pedidos, ao lado do campo "Local de venda". Já no  TOTVS CRM | SFA Mobile, o mesmo semáforo é apresentado ao lado do campo "Local" na tela da visão 360 do cliente.

É possível cadastrar diferentes tipos de bloqueio no TOTVS CRM | SFA, conforme apresentado abaixo. 


Configurações 

Cor do semáforo (verde/amarela/vermelha) 

Permite iniciar pedido (sim/não) 

Permite finalizar pedido (sim/não) 

Requer aprovação (sim/não)

Exemplo

Detalhes do bloqueio do cliente (Web)

1.1.5 Títulos financeiros 

Após a seleção do local de venda do pedido, o ícone de "dinheiro" indica se o cliente possui títulos a pagar, pagos e/ou vencidos.  Ao clicar sobre esse ícone, será exibida uma tela contendo informações detalhadas dos títulos do cliente. No TOTVS CRM | SFA Web, o ícone de "dinheiro" é exibido no cabeçalho da tela de pedidos, ao lado do campo "Local de  venda". Já no TOTVS CRM | SFA Mobile, as mesmas informações são apresentadas na tela da visão 360 do cliente.


Configurações 

Ícone verde: Todos os títulos do cliente estão pagos. 

Ícone amarelo: O cliente não possui títulos vencidos, porém possui títulos a vencer,  podendo ou não também possuir títulos pagos. 

Ícone vermelho: O cliente possui títulos vencidos, podendo ou não também possuir  títulos a vencer e/ou pagos.

Exemplo

Detalhes dos títulos do cliente (Web)

1.1.6 Local de cobrança 

Nesse campo deve ser preenchido o local de cobrança do cliente do pedido. Entende-se local como sendo os endereços/lojas  do cliente. 




Vínculos disponíveis 

Cliente 

Profissional 

Filial 

Segmento 

Unidade federativa da filial 

Unidade federativa do local de venda 

Operação

Exemplo 

Exibe os locais de cobrança ativos vinculados ao cliente e ao  profissional do pedido.

1.1.7 Filial 

Nesse campo deve ser preenchida a filial de venda do pedido. 



Vínculos 

Local de venda 

Profissional 

Operação 

Tabela de preços

Exemplo 

Exibe as filiais ativas vinculadas ao local de venda e ao  profissional do pedido.

1.1.8 Tipo de pedido 

Nesse campo deve ser preenchido o tipo do pedido.




Vínculos disponíveis 

Profissional 

Local de venda 

Segmento 

Operação 

Filial 

Condição de pagamento 

Grupo de produtos

Exemplo 

Exibe os tipos de pedido ativos vinculados ao profissional e  ao local de venda do pedido.

1.1.9 Tabela de preços 

Nesse campo deve ser preenchida a tabela de preços do pedido, que será responsável por definir os preços dos produtos que  serão inseridos no pedido. 


Vínculos disponíveis 

Profissional 

Filial 

Cliente 

Local de venda 

Condição de pagamento 

Tipo de pedido 

Segmento 

Local de cobrança 

Grupo de clientes 

Região do local de venda 

Região da filial 

Unidade federativa da filial 

Unidade federativa do local de venda 

Operação 

Tipo de produto

Exemplo

Exibe as tabelas de preços ativas, vigentes, vinculadas ao  profissional e ao local de venda do pedido. 

Caso não sejam encontradas tabelas de preços com as  condições acima, exibe as tabelas de preços ativas, vigentes,  vinculadas a unidade federativa do local de venda do pedido. Caso não sejam encontradas tabelas de preços com as  condições acima, exibe as tabelas de preços ativas, vigentes,  vinculadas a unidade federativa da filial do pedido. Caso não sejam encontradas tabelas de preços com as  condições acima, exibe uma tabela de preços específica.

1.1.10 Condição de pagamento 

Nesse campo deve ser preenchida a condição de pagamento do pedido. Entende-se como condição de pagamento os prazos  para pagamento do pedido.


Vínculos 

Filial 

Prazo médio do local de venda 

Segmento 

Profissional 

Cliente 

Local de venda 

Tipo de cobrança 

Tabela de preços 

Tipo de pedido 

Operação

Exemplo 

Exibe as condições de pagamento ativas vinculadas ao local  de venda e a tabela de preços do pedido.

1.1.11 Tipo de cobrança 

Nesse campo deve ser preenchido o tipo de cobrança do pedido. Entende-se como tipo de cobrança a forma de pagamento do  pedido. 


Vínculos disponíveis 

Profissional 

Local de venda 

Filial 

Segmento 

Cliente 

Segmento 

Operação 

Condição de pagamento 

Tipo de pedido

Exemplo 

Exibe os tipos de cobrança ativos vinculados a condição de  pagamento e ao cliente do pedido.

1.1.12 Grupo de clientes 

Nesse campo deve ser preenchido o grupo de clientes do pedido. 

Vínculos disponíveis∙ 

Cliente

Exemplo 

Exibe os grupos de clientes ativos vinculados ao cliente do  pedido.

1.1.13 Segmento 

Nesse campo deve ser preenchido o segmento do pedido. 


Vínculos disponíveis 





Local de venda 

Filial 

Profissional 

Cliente 

Operação 

Grupo de produtos 

Tipo de produtos

Exemplo 

Exibe os segmentos ativos vinculados ao cliente do pedido.

1.1.14 Tipologia 

Nesse campo deve ser preenchida a tipologia do pedido. 


Vínculos disponíveis 



Local de venda 

Filial 

Segmento

Exemplo 

Exibe as tipologias ativas vinculadas ao cliente do pedido.

1.1.15 Operação

Nesse campo deve ser preenchida a operação do pedido. 


Vínculos disponíveis ∙ 


Profissional 

Tipo de pedido 

Condição de pagamento 

Filial 

Local de venda 

Segmento 

Unidade federativa da filial 

Unidade federativa do local de venda 

Cliente 

Tabela de preços 

Tipo de cobrança 

Tipo de produto

Exemplo 

Exibe as operações ativas vinculadas a filial, local de venda e  tabela de preços do pedido.

1.1.16 Grupo de produtos 

Nesse campo deve ser preenchido o grupo de produtos do pedido. 


Vínculos disponíveis ∙ 


Tipo de pedido 

Operação 

Filial 

Segmento

Exemplo 

Exibe os grupos de produtos ativos vinculados a operação e  ao segmento do pedido.

1.1.17 Tipo de produto 

Nesse campo deve ser preenchido o tipo dos produtos do pedido. 


Vínculos disponíveis


Profissional 

Cliente 

Local de venda 

Operação 

Segmento 

Tabela de preços

Exemplo 

Exibe os tipos de produtos ativos vinculados ao profissional e  ao cliente do pedido.

1.1.18 Conta flex 

Nesse campo deve ser preenchido o cadastro da conta flex que será utilizada no pedido. Mais detalhes em "Configuração do  flex".

Vínculos disponíveis∙ 

Profissional

Exemplo 

Exibe a conta flex ativa, vigente e vinculada ao profissional  do pedido.

1.1.19 Data do pedido 

Esse campo é preenchido automaticamente com a data atual no momento da criação do pedido. 

Configurações disponíveis∙ 

Nenhum

Exemplo 

Ao iniciar um pedido no dia 01/06/2019, esse campo  será preenchido com 01/06/2019.

1.1.20 Local de entrega 

Nesse campo deve ser preenchido o local de entrega do pedido. Entende-se local como sendo os endereços/lojas do cliente. O  mesmo campo poderá estar disponível na seção de "Entrega" do pedido. 



Vínculos disponíveis 


Cliente 

Profissional 

Filial 

Segmento 

Unidade federativa da filial 

Unidade federativa do local de venda 

Operação

Exemplo 

Exibe os locais de entrega ativos vinculados ao cliente e ao  profissional do pedido.

1.1.21 Data de entrega 

Nesse campo deve ser preenchida a data de entrega do pedido. O mesmo campo poderá estar disponível na seção de "Entrega"  do pedido. 


Configurações  

disponíveis 


Em branco 

Data atual 

Data atual + x dias

Exemplo

Se configurado para "Data atual + 2 dias", ao emitir um pedido  no dia 20/11/2019, a data de entrega será preenchida com  22/11/2019.

1.1.22 Tipo de frete 

Nesse campo deve ser preenchido o tipo de frete do pedido. O mesmo campo poderá estar disponível na seção de "Entrega"  do pedido.


Vínculos disponíveis 


Filial 

Cidade da filial 

Local de venda 

Cidade do local venda 

Segmento 

Tabela de preços 

Cliente

Exemplo 

Exibe os tipos de frete ativos vinculados a filial e a cidade do  local de venda do pedido.

1.2 Listagem de produtos 

Após o preenchimento do "Cabeçalho", será possível adicionar produtos ao pedido. 

Pelo Configurador de Pedidos, é possível definir quais produtos deverão estar disponíveis para venda no pedido, conforme  vínculos abaixo. 

1.2.1 Produtos 



Vínculos disponíveis 


Filial 

Segmento 

Região da filial 

Região do local de venda 

Tipo de produto 

Tipologia do local de venda 

Tipologia da filial 

Grupo de produtos 

Tipo de pedido 

Profissional 

Local de venda 

Condição de pagamento 

Tabela de preços 

Cliente 

Grupo de clientes 

Cidade da filial 

Cidade do local de venda 

Tipologia 

Unidade federativa da filial 

Unidade federativa do local de venda 

Operação 

Tipo de estoque 

Tipo de cobrança

Exemplo 

Exibe os produtos ativos vinculados a filial, ao profissional e  a tabela de preços do pedido.

A pesquisa de produtos poderá ser realizada em todos os produtos disponíveis ou somente nos produtos pertencentes a uma  categoria específica. 

As categorias disponíveis são: HistóricoSugestão de vendaLançamento Oferta. (Para detalhes vide link)

1.2.1.1 Todos 

Nessa seção será possível pesquisar todos os produtos disponíveis para venda no pedido, de acordo com a configuração prévia  realizada. 

Para pesquisar um produto utilizando o TOTVS CRM | SFA Web, levando em consideração todos os produtos disponíveis  (independentemente da categoria), o profissional deverá acessar a aba "Carrinho" e utilizar o campo "Produto" da grid ou clicar  sobre o botão lupa para exibir a tela de pesquisa de produtos.










As informações disponíveis na tela de pesquisa de produtos do ambiente Web são: código, descrição, grupo, estoque,  quantidade, preço de venda e categoria. 












Para pesquisar um produto utilizando o TOTVS CRM | SFA Mobile, levando em consideração todos os produtos disponíveis  (independentemente da categoria), o profissional deverá acessar a aba "Produtos", selecionar a opção "Todos" e utilizar o campo de pesquisa. Também é possível realizar a busca utilizando a pesquisa avançada, através do botão lupa cruzada. 










 1.2.1.2 Histórico

Nessa seção estarão disponíveis para pesquisa somente os produtos da seção "Todos" que estiverem categorizados como  "Histórico". 

A categorização do "Histórico" é processada e gerada automaticamente pelo TOTVS CRM | SFA de acordo com as  configurações abaixo. 


Vínculos e  

configurações  

disponíveis 

Cliente e local de venda 

Quantidade de produtos a serem sugeridos 

Vendidos em maior quantidade 

Vendidos mais vezes 

Vendidos nos últimos x dias 

Vendidos nos últimos x pedidos 

Periodicidade de geração do histórico

Exemplo

Categoriza como "Histórico" os diferentes produtos que foram  vendidos em maior quantidade para o cliente e local de venda,  considerando os últimos 10 pedidos emitidos nos últimos 30  dias, limitado ao máximo de 5 produtos.

Para pesquisar um produto categorizado como "Histórico" utilizando o TOTVS CRM | SFA Web, o profissional deverá acessar  a aba "Histórico". 











Para pesquisar um produto categorizado como "Histórico" utilizando o TOTVS CRM | SFA Mobile, o profissional deverá acessar  a aba "Produtos", selecionar a opção "Histórico" e utilizar o campo de pesquisa. 











1.2.1.3 Sugestão de venda 

Nessa seção estarão disponíveis para pesquisa somente os produtos da seção "Todos" que estiverem categorizados como  "Sugestão de venda". 

A categorização da "Sugestão de venda" pode ser cadastrada no TOTVS CRM | SFA de acordo com as configurações abaixo. 


Vínculos e  ∙ 

configurações  

disponíveis 

Período de vigência 

Produtos 

Clientes 

Unidades federativas 

Cidades 

Tipologias 

Classificação de clientes 

Grupos de clientes

Exemplo

Categoriza como "Sugestão de venda" os produtos "Margarina"  e "Manteiga" para todos os clientes da tipologia "Padaria"  pertencentes ao estado do "Paraná" durante o período de  01/06/2019 à 31/12/2019.

Para pesquisar um produto categorizado como "Sugestão de venda" utilizando o TOTVS CRM | SFA Web, o profissional deverá  acessar a aba "Sugestão de venda". 










Para pesquisar um produto categorizado como "Sugestão de venda" utilizando o TOTVS CRM | SFA Mobile, o profissional  deverá acessar a aba "Produtos", selecionar a opção "Sugestão de venda" e utilizar o campo de pesquisa.








1.2.1.4 Lançamento 

Nessa seção estarão disponíveis para pesquisa somente os produtos da seção "Todos" que estiverem categorizados como  "Lançamento". 

A categorização de "Lançamento" pode ser cadastrada no TOTVS CRM | SFA de acordo com as configurações abaixo. 


Vínculos e 

configurações  

disponíveis 


Produtos 

Filial 

Cliente 

Local de venda 

Grupo de clientes 

Tipo de pedido

Exemplo

Categoriza como "Lançamento" os produtos "Leite  semidesnatado" e "Iogurte integral" em pedidos emitidos pela  Matriz cujo tipo de pedido seja "Venda normal".

Para pesquisar um produto categorizado como "Lançamento" utilizando o TOTVS CRM | SFA Web, o profissional deverá  acessar a aba "Lançamento". 










Para pesquisar um produto categorizado como "Lançamento" utilizando o TOTVS CRM | SFA Mobile, o profissional deverá  acessar a aba "Produtos", selecionar a opção "Lançamento" e utilizar o campo de pesquisa.










1.2.1.5 Oferta 

Nessa seção estarão disponíveis para pesquisa somente os produtos da seção "Todos" que estiverem categorizados como  "Oferta". 

A categorização de "Oferta" pode ser cadastrada no TOTVS CRM | SFA de acordo com as configurações abaixo. 



Vínculos e  

configurações  


disponíveis 



Período de vigência 

Produtos 

Percentual de desconto 

Valor de desconto 

Filial 

Cliente 

Local de venda 

Grupo de clientes 

Tipo de pedido

Exemplo

Categoriza como "Oferta" o produto "Chocolate em pó" e  concede 10% de desconto sobre o preço de tabela em pedidos  emitidos para o cliente "Atacadão" durante o período de  01/12/2019 à 31/12/2019.

Para pesquisar um produto categorizado como "Oferta" utilizando o TOTVS CRM | SFA Web, o profissional deverá acessar a  aba "Oferta". 










Para pesquisar um produto categorizado como "Oferta" utilizando o TOTVS CRM | SFA Mobile, o profissional deverá acessar a  aba "Produtos", selecionar a opção "Oferta" e utilizar o campo de pesquisa. 










1.2.2 Embalagem 

A funcionalidade de embalagem do TOTVS CRM | SFA permite que o sistema seja capaz de exibir, tratar e persistir dados  a respeito de embalagem de produtos no pedido de venda. 

Campo editável onde são exibidas as embalagens vinculadas ao produto e à filial selecionada no pedido, ou seja, que um  mesmo produto pode ser adquirido através de embalagens diferentes. O campo embalagem é exibido apenas quando o sistema  vende por embalagens. 

Como exemplo de produto sendo comercializado por embalagem, um produto REFRIGERANTE, pode ser comercializado por  UNIDADE, contendo 1 unidade, efetivamente, ou pode ser comercializado por FARDO, contendo 12 unidades. A relação entre as  unidades e quantidades é estabelecida pelo fator de quantidade. 

Quando o sistema trabalha por embalagem, algumas funcionalidades como campanhas de desconto, políticas de desconto,  campanhas de brinde, regras de preço fixo priorizarão os registros em que o campo de embalagem esteja preenchido. Os preços de venda poderão ser alterados em função da embalagem, através do fator de preço. Por exemplo, se o fator de  preço da embalagem FARDO for 0,90, significa que o preço unitário receberá um desconto de 10%. 


Vínculos e configurações disponíveis 

Produto 

Embalagem 

Código de barra 

Fator de embalagem 

Fator de embalagem padrão 

Fator de preço 

Local 

Quantidade múltipla de venda 

Sigla da unidade de medida padrão Embalagem ativa 

Embalagem padrão

Através das configurações da embalagem será possível realizar validações, mostrar valores e preenchimento automático  com a embalagem que possuir menor fator de quantidade. 

Os dados de embalagem serão exibidos no carrinho quando inserido produto ao carrinho. Quando inserido será  selecionado automático a embalagem do produto aplicando o filtro configurado. 

A embalagem possui relação com a quantidade, pois com o preenchimento da embalagem do produto será possível  determinar a quantidade de produtos. 

No carrinho será exibido o campo de “Qt. Embalagem” que será a multiplicação da quantidade informada com o fator da  quantidade do produto. 

Nas configurações de embalagem poderá definir qual campo será exibido tanto no ambiente Android como no ambiente  Web como: 

  • Ambiente Web
    • Campo embalagem na grid do carrinho
    • Campo quantidade da embalagem na grid do carrinho 
  • Ambiente Android
  • Campo embalagem no card
  • Campo embalagem na tela de negociação
  • Campo embalagem no carrinho
  • Campo quantidade da embalagem no card
  • Campo quantidade da embalagem na tela de negociação
  • Campo quantidade da embalagem no carrinho 

Quando realizado a alteração nos campos de Embalagem, Qt. Embalagem e Quantidade o sistema deverá atualizar as  informações desses campos automaticamente aplicando os valores correspondentes aos dados cadastrados no produto e na  embalagem do produto. 

1.2.3 Unidade de medida 

O sistema deverá exibir a unidade de medida vinculada ao produto. No campo unidade de medida vai permitir a visualização  das informações da embalagem, preferencialmente quando o sistema utilizar embalagem. Caso não utilizar embalagem no sistema,  será trazido a unidade de medida vinculada ao produto. 

O campo será exibido no interior do card no ambiente Android e na grid de produtos no ambiente Web.







1.2.4 Cota 

No pedido de venda, o sistema irá realizar a restrição de aplicação de quantidades para produtos segundo a cota vigente  para o registro. Essa cota será controlada através de movimentações geradas no TOTVS CRM | SFA evitando assim que o usuário  consuma uma quantidade superior ao disponível. 










Regras 

  • As validações de cota irão somente considerar produto e não será considerado a grade de produtos.
  • As cotas serão importadas via integração, mas para realizar o processamento de cota, será preciso que seja  personalizado segundo as regras do cliente.
  • No ambiente Android as cotas serão movimentadas em modo offline, desse modo pode haver de dois usuários  compartilharem a mesma cota fazendo com que as movimentações ultrapassam o saldo disponível, gerando um  saldo negativo.
  • Através das configurações de cota, poderá variar pelas seguintes entidades do sistema:
    • Produto;
    • Unidade de venda / Filial selecionada no cabeçalho;
    • Tabela de preço selecionada no cabeçalho do pedido;
    • Profissional selecionado no cabeçalho;
    • Segmento selecionado no cabeçalho; 
  • Quando existir mais de uma cota aplicável para aquela configuração de registros selecionados, o sistema exibirá  a conta com menor valor.
  • O sistema restringirá a inserção de produtos com cotas configuradas com valor 0.
  • O sistema restringirá a aplicação do campo “Quantidade” para valores maiores à cota vigente.
  • Caso não exista registro de cota para a configuração de registros selecionados, o sistema não fará a restrição  de produto e aplicação da quantidade do produto segundo cota.
  • O saldo exibido em tela para o produto será a subtração entre o saldo disponível e as movimentações daquela  cota ativas e não processadas.
    • Por exemplo, se o saldo disponível para o PROFISSIONAL X, PRODUTO Y for 50, porém, há  movimentação não processada de 10, vinculada à essa cota, o valor apresentado em tela será 40, e é  por esse valor que o sistema fará as regras de restrição.
  • O sistema restringirá a inserção do produto ao carrinho, caso o valor da quantidade desejada na inserção seja  maior que o valor da cota.
  • O sistema restringirá a alteração dos campos que influenciem no campo “Quantidade”, sendo “Embalagem”, “Qt.  Embalagem” e o próprio campo “Quantidade” quando o valor desejado seja maior que a cota disponível para  utilização. 

1.2.4.1 Buscando cota ativa e vigente 

A busca por cota ativa e vigente no sistema irá validar os parâmetros de configuração que estão habilitados que deverão  validar através da ativação do parâmetro HABILITAR_GERENCIAMENTO_COTA, onde a aplicação deverá validar cota para os  pedidos emitidos. 

Quando realizado o preenchimento do cabeçalho do pedido, a aplicação deverá buscar se o pedido se enquadra em alguma  cota cadastrada e vigente na listagem dos produtos. A aplicação buscará as configurações de controle de cota para verificar se  existe alguma cota para ser validada na busca do pedido. 

1.2.4.2 Consultando saldo de cota 

A consulta de saldo é realizada através da tela de consulta de produtos, tanto no ambiente Android como ambiente Web.  Após consultar os produtos disponíveis para venda, caso o usuário tenha uma cota vigente, a aplicação irá consultar o saldo  disponível de cota. O saldo disponível irá considerar os movimentos gerados em pedidos anteriores caso houver. 

O saldo da cota será obtido através da consulta feita no controle da cota e então será somado as movimentações geradas  para aquele produto nos registros do controle das movimentações da cota segundo o exemplo a seguir: 

  • O saldo cadastrado na cota em ControleCota.SaldoDisponivel, e então somar as movimentações geradas para aquele  produto em ControleCotaMovimento.Quantidade, onde controleCotaMovimento.idnativo = 1, e  controleCotaMovimento.idnProcessado = 0 geradas em pedidos anteriores. 

Para localizar uma cota vigente e para calcular as movimentações, a aplicação irá considerar como filtro a configuração  realizada no controle da cota. O TOTVS CRM | SFA não deverá considerar a situação dos pedidos que consumiram cota para  calcular o saldo disponível. As movimentações consideras serão todas as ativas e não processadas.  

1.2.4.3 Exibir saldo da cota 

A exibição do saldo da conta será no campo cota, dessa forma a aplicação irá validar quais produtos possuem cota  cadastrada, e caso existir será considerado o saldo disponível. Para o estoque da aplicação a cota terá um peso superior, então caso o produto possua cota a aplicação irá validar a cota, no entanto, caso o produto possua cota cadastrada, a aplicação irá considerar o saldo de estoque disponível, exibido no campo “Estoque”. 

Caso o produto não tenha cota e nem estoque, o saldo será apresentado zerado em ambos os campos para impedir o  usuário de incluir o produto ao pedido. 

Quando o sistema realizar o cálculo do saldo disponível, caso o saldo estiver zerado ou negativo, a aplicação não irá permitir o usuário incluir o produto ao pedido, pois o usuário já consumiu toda a conta disponível em outros pedidos.

O saldo de cota e estoque estarão disponíveis na consulta de produto do ambiente Web e Android. No ambiente Web,  estará disponível na grid de produto e na listagem de produtos, caso a funcionalidade de cota está habilitada. Já no ambiente Android na tela de negociação do produto e no carrinho de compras. Suas exibições poderão ser configuradas e assim exibidas  conforme a necessidade do cliente. 



















1.2.4.4 Consumindo a cota 

Ao adicionar um produto ao carrinho com saldo de cota disponível, a aplicação irá impedir o usuário de informar uma  quantidade superior ao saldo disponível. Caso o usuário uma quantidade superior ao saldo cota disponível, a aplicação irá exibir a  seguinte mensagem: “O valor deve ser menor ou igual a XXX”, conforme exibido na validação de estoque atualmente.  

Na gravação de um pedido, a aplicação irá gerar as movimentações de cota, onde irá ser realizada somente na finalização  do pedido. Quando realizado a finalização do pedido o sistema irá gerar as movimentações de cota para todos os produtos que  possuem cota cadastrada. Caso o usuário apenas grave, a aplicação não irá gerar movimentações, entretanto ao editar o pedido o  saldo disponível de cota irá ser consultado novamente e atualizado no campo “Cota”. 

Na finalização de um pedido gravado anteriormente, a aplicação validará se a quantidade informada é maior que a cota  disponível. Se a quantidade informada for superior ao saldo de cota disponível, a aplicação não irá permitir finalizar o pedido e será  apresentado a seguinte mensagem: “Existem produtos sem cota disponível, por gentileza, verifique as quantidades”.  

O TOTVS CRM | SFA não irá processar as cotas geradas, essa responsabilidade se necessário deverá ocorrer por parte  da integração.







1.2.4.5 Removendo movimentações para pedidos reprovados 

Em algumas regras o sistema pode ser configurado para aprovação do pedido por um usuário superior. Nesses casos ao  finalizar um pedido, ele será encaminhado para aprovações. Caso o pedido entre na regra de aprovação, a aplicação não irá gerar  as movimentações da cota normalmente. 

Quando o pedido for reprovado por qualquer alçada de aprovação, o sistema irá retornar o pedido para não finalizado, e  todas as movimentações de cota gerada para esse pedido serão excluídas. Caso o usuário contestar o pedido ou apenas finalizar o pedido novamente, o sistema irá fazer a validação se a cota está vigente e verificar se a cota possui saldo disponível e então gerar  as movimentações novamente, caso não houver será impedido que o usuário finalize o pedido. 











1.2.5 Inclusão de produtos 

No TOTVS CRM | SFA Web, os produtos podem ser incluídos no carrinho do pedido utilizando as linhas da grid da aba  "Carrinho", pelo botão "Confirmar" da tela de pesquisa avançada de produtos ou pelos botões de adicionar presentes nas abas  "Histórico", "Sugestão de venda", "Lançamento" e "Oferta", conforme descrito na seção "Pesquisa de produtos". 

Na versão Mobile, um produto pode ser adicionado ao carrinho do pedido inserindo um valor no campo "Quantidade" do card  do produto ou através do botão "Confirmar" da tela de negociação do produto.
























No Configurador de pedidos, é possível parametrizar quais campos deverão ser exibidos na grid do carrinho da Web, assim  como no card, no carrinho e na tela de negociação do Mobile.  Também é possível atribuir títulos para os campos, definir a posição em que eles deverão ser apresentados e se os mesmos  deverão ser impressos no relatório do pedido de venda. Abaixo seguem os campos do produto passíveis de configuração:

CAMPO 

DESCRIÇÃO

Código 

Código do produto.

Estoque 

Quantidade em estoque disponível para o produto de acordo com a  filial do pedido.

Quantidade 

Quantidade de venda do produto.

Preço de tabela 

Preço de tabela do produto. Mais detalhes em "Configuração do preço  de tabela".

% Desconto

Percentual de desconto do produto. Caso o percentual de desconto  seja diferente de zero, os campos "Valor de desconto" e "Preço de  venda" serão atualizados.

Valor de  desconto Valor de desconto do produto. Caso o valor de desconto seja diferente  de zero, os campos "% Desconto" e "Preço de venda" serão  atualizados.
Preço de venda Preço de venda do produto. Caso o preço de venda seja diferente do  preço de tabela, os campos "% Desconto" e "Valor de desconto" serão  atualizados. Mais detalhes em "Configuração do preço de venda,  oferta e desconto".
% Comissão  Percentual de comissão do produto. Mais detalhes em "Configuração  da comissão".
Valor da  comissão Valor da comissão do produto. Mais detalhes em "Configuração da  comissão".
Valor unitário  de flex Valor unitário de flex gerado no produto. Mais detalhes em  "Configuração do flex".
Valor total de  flex Valor total de flex gerado no produto. Mais detalhes em "Configuração  do flex".
Valor total  Valor total líquido do produto.

Peso total 

Peso total do produto.

Peso unitário 

Peso unitário do produto.

Situação 

Situação do produto (ex: faturado, cancelado, em separação, etc.).

Desempenho  de venda

Desempenho de venda do produto. Mais detalhes em "Configuração  do desempenho de venda".

Histórico de  venda

Exibe todos os pedidos emitidos para o cliente e local de venda do  pedido que contenham o respectivo produto.

Imagem 

Imagem do produto.


1.2.6 Carrinho 

O carrinho do pedido é responsável por exibir os produtos que foram adicionados ao pedido. 

Após confirmar a inserção do produto no pedido, o profissional poderá manipular as informações de quantidade, preço de venda,  percentual e valor de desconto diretamente no carrinho do pedido, tanto na grid da Web como no card ou tela de negociação do  Mobile. 






















1.3 Parcela 

Nessa seção serão definidas as parcelas de pagamento do pedido. 

Existem duas configurações possíveis: "Parcelamento livre" ou "Parcelamento por condição de pagamento".

1.3.1 Parcelamento livre 

No parcelamento livre, o profissional poderá definir quais serão as parcelas do pedido, informando a quantidade de parcelas, a  data de vencimento e o valor de cada parcela. 




















CAMPO 

DESCRIÇÃO


Quantidade  de parcelas 


Quantidade de parcelas do pedido. 

Ao definir a quantidade de parcelas, o TOTVS CRM | SFA automaticamente cria os  registros delas, definindo as datas de vencimento como sendo os dias seguintes a  emissão do pedido e o valor de cada parcela como sendo o valor total líquido do pedido  dividido pela quantidade de parcelas. Porém, o profissional poderá alterar as datas e  os valores de cada parcela criada. 

O pedido deverá possuir no mínimo uma parcela.


Data de  vencimento 

 

Data de vencimento da parcela. 

A data de vencimento da primeira parcela deverá ser maior que a data de emissão do  pedido. 

A data de vencimento da segunda parcela não poderá ser igual ou inferior a data de  vencimento da primeira parcela, e assim sucessivamente.


Valor da  parcela 


Valor da parcela. 

Se o pedido possuir apenas uma parcela, obrigatoriamente o valor dela será igual ao  valor total líquido do pedido. 

Caso o pedido possua mais que uma parcela, ao alterar o valor de uma parcela as  demais serão automaticamente ajustadas com o valor proporcional restante do pedido. O valor máximo da parcela é igual ao valor líquido do pedido.

Ordem 

Ordem sequencial de cada parcela, de acordo com as datas delas.

Botão responsável por adicionar uma parcela ao pedido, fazendo a redistribuição  proporcional dos valores de cada parcela.

Botão responsável por remover uma parcela do pedido, fazendo a redistribuição  proporcional dos valores de cada parcela.

Botão responsável por redistribuir proporcionalmente o valor total líquido do pedido  nas parcelas existentes.

1.3.2 Parcelamento por condição de pagamento 

No parcelamento por condição de pagamento, o TOTVS CRM | SFA definirá automaticamente a quantidade, valor e vencimento  das parcelas de acordo com a condição de pagamento do pedido e não é possível alterá-las manualmente. Ao alterar a condição de pagamento do pedido, as parcelas serão automaticamente recalculadas. 

A definição das parcelas do pedido se baseia nos seguintes parâmetros da condição de pagamento:

  • Número de parcelas
  • Número de dias para a primeira parcela
  • Número de dias entre as demais parcelas
  • Valor mínimo da parcela
  • Número máximo de parcelas
  • Dia fixo da parcela 

1.4 Entrega 

Essa seção destina-se a configuração dos dados da entrega do pedido. Existem duas configurações possíveis: "Entrega por  pedido" ou "Entrega por item". 

Na "Entrega por pedido", uma única entrega poderá ser definida e a mesma será aplicada a todos os itens do pedido. Já na "Entrega por item", poderão ser definidas diversas entregas onde cada uma será aplicada a determinados itens do pedido.























1.4.1 Data de entrega 

Nesse campo deve ser preenchida a data de entrega do pedido. O mesmo campo poderá estar disponível na seção de  Cabeçalho do pedido. 


Configurações  

disponíveis 


Em branco 

Data atual 

Data atual + x dias

Exemplo

Se configurado para "Data atual + 2 dias", ao emitir um pedido  no dia 20/11/2019, a data de entrega será preenchida com  22/11/2019.

1.4.2 Local de entrega 

Nesse campo deve ser preenchido o local de entrega do pedido. Entende-se local como sendo os endereços/lojas do cliente. O  mesmo campo poderá estar disponível na seção de Cabeçalho do pedido. 


Vínculos  

disponíveis 


Cliente 

Profissional 

Filial 

Segmento 

Unidade federativa da filial 

Unidade federativa do local de venda 

Operação

Exemplo 

Exibe os locais de entrega ativos vinculados ao cliente e ao  profissional do pedido.

1.4.3 Observação 

Nesse campo deve ser preenchida a observação de entrega do pedido. 

Configurações disponíveis ∙ 

Nenhuma

Exemplo 

"Pedido com urgência".

1.4.4 Tipo de frete 

Nesse campo deve ser preenchido o tipo de frete da entrega do pedido. O mesmo campo poderá estar disponível na seção de  Cabeçalho do pedido.


Vínculos  

disponíveis 

Filial 

Cidade da filial 

Local de venda 

Cidade do local venda 

Segmento 

Tabela de preços 

Cliente

Exemplo 

Exibe os tipos de frete ativos vinculados a filial e a cidade do local  de venda do pedido.

1.4.5 Transportadora 

Nesse campo deve ser preenchida a transportadora principal da entrega do pedido. 


Vínculos  

disponíveis 


Local de venda 

Segmento 

Cliente 

Profissional

Exemplo 

Exibe as transportadoras ativas vinculadas ao local de venda  do pedido.

1.4.6 Transportadora despacho 

Nesse campo deve ser preenchida a transportadora de despacho da entrega do pedido 


Vínculos  

disponíveis 

Local de venda 

Segmento 

Cliente 

Profissional

Exemplo 

Exibe as transportadoras ativas vinculadas ao local de venda  do pedido.

1.4.7 Operador logístico 

Nesse campo deve ser preenchido o operador logístico da entrega do pedido. 


Vínculos  

disponíveis 

Local de venda 

Segmento 

Cliente 

Profissional

Exemplo 

Exibe os operadores logísticos ativos vinculados ao local de  venda do pedido.

1.4.8 Nome do transportador 

Nesse campo deve ser preenchido o nome do transportador da entrega do pedido. 

Configurações disponíveis ∙ 

Nenhuma

Exemplo 

"Transporte Rápido Ltda".

1.4.9 Data de coleta 

Nesse campo deve ser preenchida a data de coleta da entrega do pedido.


Configurações  

disponíveis 

Em branco 

Data atual 

Data atual + x dias

Exemplo

Se configurado para "Data atual + 2 dias", ao emitir um pedido  no dia 20/11/2019, a data de coleta será preenchida com  22/11/2019.

1.4.10 Data de carregamento 

Nesse campo deve ser preenchida a data de carregamento da entrega do pedido. 

Configurações disponíveis∙ 

Nenhuma

Exemplo 

Data de carregamento prevista para 15/06/2019.

1.4.11 Valor de frete 

Nesse campo deve ser preenchido o valor de frete da entrega do pedido. 

Configurações disponíveis ∙ 

Nenhuma

Exemplo 

Valor de frete R$50,00.

1.4.12 Valor de despesa 

Nesse campo deve ser preenchido o valor de despesa da entrega do pedido. 

Configurações disponíveis ∙ 

Nenhuma

Exemplo 

Valor de despesa R$25,00.

1.4.13 Valor do seguro 

Nesse campo deve ser preenchido o valor do seguro da entrega do pedido. 

Configurações disponíveis ∙ 

Nenhuma

Exemplo 

Valor do seguro R$30,00.

1.5 Complemento 

Essa seção refere-se aos dados complementares do pedido.






















CAMPO 

DESCRIÇÃO

Observação do pedido 

Observação geral do pedido.

Observação da nota fiscal 

Observação que deverá ser impressa na nota fiscal.

Observação da situação 

Observação sobre a situação do pedido.

Observação da expedição 

Observação sobre a expedição do pedido.

Ordem de compra 

Número da ordem de compra do cliente.

Número pedido ERP 

Número do pedido gerado no ERP.

Data/hora início 

Data e hora de início da digitação do pedido.

Data/hora finalização 

Data e hora de finalização da digitação do pedido.

1.6 Resumo 

O resumo do pedido é responsável por exibir os totalizadores dos valores envolvidos na negociação do pedido. 



























CAMPO 

DESCRIÇÃO

Quantidade de  produtos

Quantidade total de produtos distintos (SKUs) inseridos no carrinho  do pedido.

Quantidade de  itens 

Quantidade total de itens (volume) inseridos no carrinho do pedido.

Peso total 

Peso total dos itens inseridos no carrinho do pedido.

Valor total flex

Valor total de flex gerado no pedido. O ícone ao lado do valor exibe  a vigência, o saldo inicial, o saldo disponível e o saldo a liberar do  flex. Mais detalhes em "Configuração do flex".

Valor total  comissão

Valor total da comissão do pedido. Mais detalhes em "Configuração  da comissão".

Percentual total  comissão

Percentual total da comissão do pedido. Mais detalhes em  "Configuração da comissão".

Valor total bruto 

Valor total bruto do pedido.

Valor total  desconto 

Valor total de desconto do pedido.

Percentual total  desconto 

Percentual total de desconto do pedido.

Valor total líquido 

Valor total líquido do pedido.

Desempenho de  venda

Desempenho de venda do pedido. Mais detalhes em "Configuração  do desempenho de venda".

1.7 Relatório 

Botão disponível apenas no TOTVS CRM | SFA Web, sendo responsável pela geração do relatório do pedido, que contém todas  as informações da negociação realizada e poderá ser exportado nos formatos PDF e XLSX. 

No TOTVS CRM | SFA Mobile o mesmo relatório poderá ser gerado, porém essa ação deverá ser efetuada no módulo  "Relatórios", informando manualmente o número do pedido desejado.











1.8 Enviar e-mail 

Botão responsável por gravar o pedido e enviar o relatório do pedido ao e-mail do cliente, no formato PDF. O envio do e-mail  não é imediato, a rotina de envio de e-mails do TOTVS CRM | SFA é executada de acordo com uma periodicidade pré-definida. 

]








1.9 Gravar pedido 

Botão responsável por realizar a gravação do pedido no TOTVS CRM | SFA. Ao gravar um pedido, o estado atual do mesmo  será salvo e ficará disponível para edição posterior (rascunho), mantendo a situação do pedido como "Não finalizado" e não será  enviado ao ERP. 

1.10 Finalizar pedido 

Botão responsável por realizar a finalização do pedido no TOTVS CRM | SFA.

Ao finalizar um pedido no TOTVS CRM | SFA Web, ele estará apto para ser enviado ao ERP e não será mais possível editá-lo  no TOTVS CRM | SFA

Quando a finalização do pedido é realizada através do TOTVS CRM | SFA Mobile, ele permanecerá editável na aplicação móvel  enquanto não for realizada uma nova sincronização. Ao sincronizar o TOTVS CRM | SFA Mobile, o pedido será enviado ao servidor  do TOTVS CRM | SFA e estará apto para ser enviado ao ERP, não sendo mais possível editá-lo no TOTVS CRM | SFA

O envio do pedido ao ERP, processo esse chamado de "exportação do pedido", é realizado através de uma tarefa agendada  que é executada periodicamente. 

1.11 Assinatura 

Durante a emissão do pedido no TOTVS CRM | SFA Mobile, é possível coletar a assinatura do cliente no próprio aparelho  móvel, de maneira digital. Essa assinatura poderá ser visualizada na Web após a sincronização da aplicação. 









 

1.12 Configuração do flex 

O conceito de flex utilizado no TOTVS CRM | SFA assemelha-se ao funcionamento de uma conta corrente, que estará vinculada  ao profissional. 

Quando o profissional realiza a venda de um produto utilizando um preço de venda superior ao preço flex, é gerado no TOTVS  CRM | SFA um lançamento positivo (crédito) na sua conta corrente, que inicialmente não estará liberado para utilização. O  processamento e liberação desse crédito somente será realizado quando o pedido exportado ao ERP retornar ao TOTVS CRM |  SFA com a informação de faturamento dos itens do pedido, onde a liberação do crédito será proporcional a quantidade faturada do  item que a gerou. Caso o item gerador do crédito tenha sofrido corte integral do pedido, o crédito será cancelado. 

Quando o profissional realiza a venda de um produto utilizando um preço de venda inferior ao preço flex, é gerado no TOTVS  CRM | SFA um lançamento negativo (débito) na sua conta corrente, que é processado no momento da realização da venda no  TOTVS CRM | SFA, consumindo imediatamente o valor do saldo flex do profissional. 

O cálculo do valor do flex é composto conforme fórmula abaixo: 

valor_flex_produto = (preço de venda – preço flex) x quantidade vendida 

Exemplo

O vendedor Emerson tem saldo flex igual a R$100,00 e realizou a seguinte venda:

PRODUTO 

QTDE  

VENDIDA

PREÇO  FLEX

PREÇO  VENDA

TOTAL  

VENDA

LANÇAMENTO  FLEX

Produto A 

10 

R$10,00 

R$8,00 

R$80,00 

-R$20,00

Produto B 

20 

R$15,00 

R$18,00 

R$360,00 

+R$60,00

A venda do Produto A gerou um lançamento negativo de flex no valor R$20,00, pois o preço de venda ficou abaixo do preço  flex: 

valor_flex_produto = (8,00 – 10,00) x 10 

valor_flex_produto = -20,00 

A venda do Produto B gerou um lançamento positivo de flex no valor R$60,00, pois o preço de venda ficou acima do preço flex: valor_flex_produto = (18,00 – 15,00) x 20 

valor_flex_produto = 60,00 


O saldo disponível de flex será, portanto: Saldo da conta de flex - movimentações de flex negativas e não processadas.

Quando há o processamento de flex, o saldo é ajustado conforme o valor da movimentação.

Portanto, seguindo o exemplo anterior, logo após a digitação do pedido, o saldo flex do Emerson seria R$80,00, pois existe 1 movimentação negativa ainda não processada.

Assim que a movimentação for processada manualmente ou via integração de dados (cuja explicação está descrita pelo presente link) vinculada a status de pedido, se o pedido for faturado, o novo saldo flex do vendedor seria de R$140,00.

1.13 Configuração da aprovação 

Ao finalizar um pedido, ele poderá estar sujeito à aprovação dependendo das regras pré-estabelecidas, conforme configurações  disponíveis abaixo. 

1.13.1 Tipos de aprovação 

  • Classificação do desempenho de venda
  • Bloqueio
  • Percentual de desconto do pedido excedido
  • Preço máximo do produto excedido
  • Preço mínimo do produto excedido
  • Quantidade máxima do produto excedida
  • Quantidade mínima do produto excedida
  • Quantidade mínima de produtos por condição de pagamento excedida
  • Quantidade mínima de produtos por tipo de pedido excedida
  • Valor mínimo do pedido por condição de pagamento excedido
  • Valor mínimo do pedido por local de venda excedido
  • Valor mínimo do pedido por tabela de preços excedido
  • Valor mínimo do pedido por tipo de cobrança excedido 

1.13.2 Vínculos disponíveis 

  • Usuário
  • Perfil de acesso
  • Grupo de usuários
  • Segmento
  • Filial
  • Cidade da filial
  • Região da filial
  • Unidade federativa da filial
  • Cliente
  • Grupo de clientes
  • Classificação de clientes
  • Local de venda
  • Cidade do local de venda
  • Região do local de venda
  • Unidade federativa do local de venda
  • Local de cobrança
  • Tipo de pedido
  • Condição de pagamento
  • Tipo de cobrança
  • Conta flex
  • Tipologia
  • Operação
  • Grupo de produtos
  • Produto
  • Tabela de preços 

Um pedido sujeito a aprovação no TOTVS CRM | SFA poderá ser aprovado ou reprovado pelo gestor responsável, com a  possibilidade de inserir uma observação. 

Caso o pedido seja aprovado, ele seguirá para exportação ao ERP, não havendo a necessidade de intervenção do vendedor  que o emitiu. Porém, se o gestor reprovar, o pedido retornará ao vendedor, que, por sua vez, poderá contestar a decisão do gestor  inserindo novas observações e encaminhando para aprovação novamente, ou então poderá realizar as adequações necessárias no  pedido mencionadas pelo gestor e realizar a finalização do pedido novamente. 









1.14 Configuração do desempenho de venda 

O cálculo do desempenho de venda no TOTVS CRM | SFA visa classificar determinado produto e/ou pedido de acordo com a  margem de lucro obtida na venda. 

Para o cálculo, são utilizados como parâmetros o custo total e o preço de venda dos produtos inseridos no pedido. As seguintes informações são exibidas: valor do desempenho, percentual do desempenho e classificação através de um gráfico  de barras horizontal. 

Podem ser criadas diversas faixas de desempenho, onde os seguintes dados serão parametrizados:

  • Descrição
  • Percentual inicial
  • Percentual final
  • Pedido requer aprovação
  • Produto requer aprovação
  • Permite finalizar pedido
  • Cor
  • Ordem 

Adicionalmente, é possível configurar quais perfis de acesso poderão visualizar essas informações. 

Exemplo 








1.14.1 Fórmulas 

Valor do desempenho de venda do produto = (preço de venda x quantidade) – (preço de custo x quantidade) Percentual de desempenho de venda do produto = (((preço de venda x quantidade) – (preço de custo x quantidade)) / (preço  de venda x quantidade)) x 100 

Valor do desempenho de venda do pedido = ∑ (valor_desempenho_produto) 

Percentual de desempenho de venda do pedido = (valor_desempenho_pedido / valor_líquido_pedido) x 100 1.15 Configuração do preço de tabela 

A formação do preço de tabela no TOTVS CRM | SFA é composta pelo seguinte cálculo: 

Preço de tabela = Preço original - (Preço original x Percentual de acréscimo/desconto da condição de pagamento) O preço original do produto pode ser configurado de acordo com os vínculos abaixo. 


Vínculos disponíveis ∙ 


Profissional 

Condição de pagamento 

Tabela de preços 

Filial 

Cliente 

Local de venda 

Grupo de clientes 

Cidade da filial 

Cidade do local de venda 

Tipologia do local de venda 

Tipologia do pedido 

Tipologia da filial 

Tipo de pedido 

Unidade federativa da filial 

Unidade federativa do local de venda 

Segmento 

Região da filial 

Região do local de venda 

Produto 

Grupo de produtos

Exemplo 

O produto "Margarina", da tabela de preços "Outubro/2019",  para o cliente "Atacadão", possui o preço original de R$3,90.

percentual de acréscimo/desconto da condição de pagamento pode ser configurado de acordo com os vínculos abaixo: 

Vínculos disponíveis∙ 

Condição de pagamento do pedido

Exemplo 

A condição de pagamento "À vista" possui 3% de desconto.

1.16 Configuração do preço de venda, oferta e desconto 

A formação do preço de venda sugerido no TOTVS CRM | SFA é composta pelas seguintes variáveis:

  • Preço de tabela
  • Preço, percentual ou valor de desconto de oferta
  • Percentual ou valor de desconto adicional 

Além das variáveis acima, existem dois modelos de cálculo, que envolvem a ordem em que as variáveis são expostas na  fórmula.

  • Oferta e Desconto: nesse modelo, o cálculo do preço de venda é formado primeiramente pelo preço de tabela e, a partir  dele, são aplicadas as variáveis de oferta e desconto adicional, necessariamente nessa ordem.
  • Desconto e Oferta: nesse modelo, o cálculo do preço de venda é formado primeiramente pelo preço de tabela e, a partir  dele, são aplicadas as variáveis desconto adicional e oferta, necessariamente nessa ordem. 

Caso o preço de venda calculado seja diferente do preço de tabela, os campos "% Desconto" e "Valor de desconto" serão  atualizados. 

preço, percentual ou valor de oferta podem ser configurados de acordo com os vínculos e parâmetros abaixo. 


Vínculos e  

configurações  

disponíveis 


Período de vigência 

Produtos 

Percentual de desconto 

Valor de desconto 

Filial 

Cliente 

Local de venda 

Grupo de clientes 

Tipo de pedido

Exemplo

O produto "Chocolate em pó" possui 10% de desconto em  pedidos emitidos para o cliente "Atacadão" durante o  período de 01/12/2019 à 31/12/2019.

percentual ou valor de desconto adicional podem ser configurados de acordo com os vínculos abaixo: 


Vínculos disponíveis 


Profissional 

Filial 

Cliente 

Grupo de clientes 

Local de venda 

Região do local de venda 

Região da filial 

Tipologia do local de venda 

Tipologia da filial 

Unidade federativa do local de venda 

Unidade federativa da filial 

Condição de pagamento 

Tabela de preços 

Segmento 

Produto

Exemplo 

O produto "Leite integral" possui 5% de desconto para locais  de venda com a tipologia "Padaria".

1.17 Configuração da comissão 

O cálculo do valor de comissão no TOTVS CRM | SFA pode ser configurado de duas formas: por item ou por pedido.

1.17.1 Comissão por item 

Para realizar o cálculo do valor de comissão por item, primeiramente é necessário configurar os percentuais de comissão dos  produtos. 

Essa configuração pode ser realizada de acordo com os parâmetros abaixo: 

  • Produto
  • Percentual de desconto mínimo do produto
  • Percentual de desconto máximo do produto
  • Percentual de comissão do produto 

Caso o percentual de desconto do produto no pedido esteja entre os percentuais mínimo e máximo de desconto da configuração,  então o seguinte cálculo é realizado: 

Valor de comissão do produto = Valor total líquido do produto x percentual de comissão do produto Se o percentual de desconto do produto no pedido não estiver contido na faixa de desconto configurada, o valor da comissão  do produto será zero. 

1.17.2 Comissão por pedido 

Para realizar o cálculo do valor de comissão por pedido, primeiramente é necessário configurar o percentual de comissão geral  que será aplicado. 

Essa configuração pode ser realizada de acordo com os parâmetros abaixo: 

  • Percentual de desconto mínimo do pedido
  • Percentual de desconto máximo do pedido
  • Percentual de comissão do pedido 

Caso o percentual de desconto total do pedido esteja entre os percentuais mínimo e máximo de desconto da configuração,  então o seguinte cálculo é realizado: 

Valor de comissão do pedido = Valor total líquido do pedido x percentual de comissão do pedido Se o percentual de desconto total do pedido não estiver contido na faixa de desconto configurada, o valor da comissão do pedido será zero. 

GUIA RELATÓRIOS

Nesta guia, é possível gerar relatórios de Títulos financeiros manipulando os filtros em tela. 

Filtro Descrição
Período Campo que define o período correspondente ais dados que serão gerados no relatório
Profissional Campo que permite gerar o relatório por profissional
Cliente Campo que permite gerar o relatório por Cliente
Local Campo que permite gerar o relatório por Local
Considerar hierarquia Campo que permite gerar o relatório considerando o supervisor do profissional, conforme a configuração no cadastro do profissional
Considerar clientes da hierarquia Campo que permite gerar o relatório considerando os clientes dos profissionais atrelados a um supervisor, conforme a configuração no cadastro do profissional
Agrupar por Agrupar dados do relatório por Títulos ou Clientes
Situação Campo que permite definir qual situação dos títulos será considerada no relatório

Por exemplo:

Os relatórios são gerados em PDF, HTM ou Planilha.






Requisitos
Agrupadores de configuração

DADOS GERAIS SOBRE O RECURSO

O sistema conta com a opção de agrupar configurações em opções que serão disponibilizadas no cabeçalho do pedido.

Assim, quando configurado previamente, o usuário poderá selecionar no cabeçalho e o pedido seguirá as regras daquelas condições.

Configuração

No menu Configuração → Configuração pedido → Geral, no botão "Agrupadores"


E Nesta tela é possível criar um agrupador para a validação escolhida, por exemplo uma validação de pedidos com estoque:



Nesta opção de agrupar, o usuário pode definir uma configuração para que valide o estoque e não permita finalizar o pedido com produtos com estoque negativo,

Exemplo de Agrupador

Segue um exemplo de agrupador de estoque:


Nome do Agrupador

Combinação de parâmetros

Ativo

Com estoqueHABILITAR_EXIBICAO_PRODUTOS_COM_ESTOQUESim
VALEST_LOGICA_BLOQUEIA_SALDO_NEGATIVOSim
VALEST_GATILHO_FINALIZARSim


Para que a venda seja possível concluir, deverá ser utilizado no campo "Config. pedido" a opção "Com estoque". Assim ao incluir o item no carrinho como no quadro a seguir, o saldo ficará positivo e permitirá finalizar o pedido:

Produto

Estoque disponível

Qtde no carrinho

Z146J310000045 - GRAMA SINTETICA 10MM NACIONAL 1,5X2,00M - 9PCS INBOX102


Neste exemplo, o saldo ficará positivo, e o produto ainda possui um estoque positivo de 8 unidades, sendo assim o pedido será gravado ou finalizado corretamente. Mas se o usuário utilizar uma venda com quantidade maior que o estoque disponível, será exibido um alerta em tela e não será possível concluir a venda.


Anexos de Pedido

DADOS GERAIS SOBRE O RECURSO

O sistema conta com a opção de Anexo, quando gravado um pedido na aplicação TOTVS - SFA, e então é exibido o botão em tela.

Botão Anexo

Dentro do pedido há a opção de anexo de documentos, essa informação pode ser utilizada pelo cliente para anexar informações de documentos de licitações de órgãos públicos, ordens de compras e empenhos. 

Como regra, as informações de anexo não são exportadas para o ERP. Lembrando que para o botão anexo ser apresentado o pedido precisa ser gravado, somente após isso o botão ficará disponível. 

Ao clicar no botão "Anexo" é exibido a seguinte tela para o usuário:

Nesta grid, é possível criar uma lista de arquivos que ficarão anexados ao pedido em questão e poderão ser visualizados posteriormente, seja no ambiente web ou Android.

Opções de Anexo

Possui os seguintes botões para manipulação dos arquivos:

BotãoDescrição
AdicionarPermite adicionar um arquivo a este pedido
RemoverQuando selecionado, permite que seja removido os arquivos já anexados a este pedido
GravarPermite gravar a lista de arquivos agora relacionados ao pedido
BaixarPermite fazer o download dos arquivos selecionados

Após incluir o arquivo, não é necessário gravar o pedido, pois agravação do mesmo é feito pela tela de anexo.

Ao clicar no campo Observação quando existir um anexo a pop-up é possível fazer a adição da observação pelo usuário. 

Dessa forma, os anexos associados aos pedidos serão passíveis de consulta e edição, conforme a parametrização.

Configuração necessária para exibição dos anexos no Pedido

Para habilitar o botão Anexo, é preciso ativar o parâmetro em "Configuração > Configuração pedido > Geral"

Descrição do Parâmetro principal e Parâmetros dependentes:

CampoDescrição
HABILITAR_BOTAO_ANEXOQuando habilitado, exibe o botão "Anexo" para pedidos gravados


HABILITAR_BOTAO_ANEXO_TAMANHOMAXIMODefine o tamanho máximo em megabytes em que o arquivo que pode ser anexado. Ex: 100 representa a 100MB, 1024 representa 1GB.
HABILITAR_BOTAO_ANEXO_EXTENSAOARQUIVODefine quais extensões de arquivos podem ser anexados ao pedido. Extensões possíveis (PDF, DOCX, PPTM, PPTX, PUB, ONE, XLSB, XLSM, XLSX, DOC, PPT, XLS, PDF, JPG, BMP, TXT, CSV, PNG) 
HABILITAR_BOTAO_ANEXO_QUANTIDADEMAXIMADefine a quantidade máxima de arquivos que podem ser anexados. 
HABILITAR_BOTAO_ANEXO_STATUS_FINALIZADODefine se será possível editar os anexos do pedido mesmo que ele já esteja Finalizado, se desativado vai permitir apenas a visualização para pedidos com status finalizado

Conforme parametrizado, será exibido na grid dentro do pedido.




Aplicações de Desconto

DADOS GERAIS SOBRE O RECURSO

Na digitação de pedido, ao inserir o produto, o sistema precisa validar se existe desconto cadastrado para a configuração do pedido.

Caso exista descontos cadastrados, o usuário pode incluir manualmente sem que valide aprovação ou, quando configurado para isso, pode ser preenchido automaticamente o percentual de desconto e calcula os valores de preço de venda e preço total, considerando o desconto aplicado. 

Cadastro de Descontos

No cadastro de descontos tanto para o ambiente Web quanto para o Mobile, onde os perfis terão acesso e poderão realizar o cadastro de descontos. Essa interface possui um campo de pesquisa, uma Pesquisa avançada de acordo com os campos do cadastro de desconto. 

O cadastro de descontos deve possuir os seguintes campos: 

Campo Descrição
Descrição Campo que será informado uma descrição específica para este desconto
Lógica ao exceder

Campo que define o comportamento que será realizado quando o desconto exceder do definido nos próximos campos

  • Selecione (vazio): quando se precisa “sugerir um desconto”, mas não deve restringir seleção de descontos dentro da faixa
  • Bloquear alteração: quando se deseja o comportamento de “teto” para o desconto. Não se pode exceder o desconto. (faixapercentualmin - % desconto)
  • Gerar Aprovação: Também se comporta como teto. Ao exceder, o pedido vai para aprovação. (PEDPROD_PERCENTUAL_DESCONTO_ITEM)
  • Gerar aprovação por itens: opção que permite criar descontos considerando apenas itens específicos dentro do pedido
Sigla Campo para definir uma sigla que identificará o desconto no banco de dados
Tipo Aprovação Campo que o usuário define qual tipo de aprovação será gerada quando validar a lógica ao exceder
Valor (R$) Campo que define um único valor para Descontar diretamente no produto
Percentual (%) Percentual de desconto que será aplicado no produto
Faixa Percentual inicial (%) Campo que permite o usuário a definir o inicio de uma faixa de percentual de valor para aplicar o desconto 
Faixa Percentual final (%) Campo que permite o usuário a definir o Final da faixa de percentual de valor editada no campo acima
Quantidade mínima Campo que permite definir uma quantidade mínima para aplicar este desconto
Quantidade máxima Campo que permite definir um limite de quantidade para aplicar este desconto
Data de inicio da vigência  Campo que permite selecionar a data atual ou superior;
Data de fim da vigência  Campo que permite selecionar data igual ou superior a data "Inicio Vigência";
Aplicar automático Quando ativo, aplicará o desconto automaticamente, assim que o item for inserido no carrinho e estiver dentro das condições configuradas no desconto em questão
Ícone de Edição Campo de preenchimento livre
Ícone Aprovação  Indica se o cadastro está pendente de aprovação.

Ao editar o Desconto pelo ícone de Edição, é aberto uma grid que permite informar condições para a aplicação desse desconto, como: 


Segue as informações dos seguintes campos:

Campo Descrição
Segmento Segmente pertencente ao cliente selecionado no cabeçalho
Filial Campo lista todos as Filiais cadastradas e ativas;
Região Campo que permite definir uma Região específica para aplicar o desconto
Unidade federativa Campo que permite definir uma UF específica para aplicar o desconto
Profissional Campo lista todos os profissionais e quando informado aplicará o desconto apenas para estes usuários quando gerarem novos pedidos
Grupo de Clientes Campo que permite definir um Grupo de clientes específico
Cliente Campo lista todos os clientes ativos da carteira de clientes do profissional ligado ou na carteira de clientes dos profissionais abaixo da hierarquia do profissional autenticado;
Local Campo lista todos os locais ativos do cliente selecionado no campo "Cliente".
Tipologia Campo lista tipologia de clientes para definir como parâmetro para aplicação do desconto
Grupo de Produtos Campo que permite definir um Grupo de Produtos específico
Produto Campo que permite definir produtos para aplicar o desconto
Tabela de preços  Campo lista todas as tabelas de preços ativas, vinculadas ao "Estabelecimento" e "Local" para aplicação do desconto
Condição de Pagamento Campo que permite definir as Condições de pagamento para aplicar o desconto
Produto  Campo lista todos os produtos ativos, da tabela de preços selecionada no campo "Tabela de Preços"
Perfil de acesso Campo que permite definir perfis de acesso que poderão aplicar o desconto
Grupos de usuários Campo que permite definir Grupos de usuários que poderão aplicar o desconto
Tipos de Pedidos Campo que permite definir tipos de pedido que poderão aplicar o desconto
Embalagem Campo que permite definir embalagens que poderão aplicar o desconto
Tipos de Produtos Campo que permite definir tipos de produtos que poderão aplicar o desconto
Cidade Campo que permite definir cidades dos clientes que poderão aplicar o desconto
Classificação parceiro Campo que permite definir a classificação de clientes que poderão aplicar o desconto
Linha Campo que permite definir uma linha de produtos que poderão aplicar o desconto
Tipo Frete Campo que permite definir tipos de frete que poderão aplicar o desconto
Tipo Estoque Campo que permite definir tipos de estoque do produto que poderão aplicar o desconto
Faixa de vida útil Campo que permite definir uma faixa de vida útil baseada no Lote do produto para aplicar o desconto (vide a documentação específica para este processo)
Lote Campo que permite definir lotes que poderão aplicar o desconto (vide a documentação específica para este processo)

Após o cadastro dos Descontos, será possível aplica-los no pedido conforme as regras cadastradas




Desconto dinâmicos por configuração de níveis

Sendo assim, a aplicação busca se o desconto é dinâmica, ou seja está disponível para o produto, mas não exigindo cadastro informando produto. Por exemplo, o sistema sugere um desconto de 5% para todos os produtos quando utilizado uma condição de pagamento específica. Nesse exemplo, basta que o usuário tenha informado uma Condição de pagamento no cadastro do Desconto. 

A busca de cache de produtos acontece no preenchimento de todos os campos obrigatórios do cabeçalho, portanto, deve-se garantir que os campos que influenciam na determinação de descontos devem ser marcados como obrigatórios no cabeçalho.

Quando o sistema encontra mais de um registro para o produto no item, ele considera o menor desconto.

Agora, os campos % e R$ estão funcionais Quando há os dois cadastros, o % será considerado o sistema encontra mais de um registro para o produto no item, ele considera o menor desconto Entidades com prefixo PRODUTO será uma interpolação à nível de produto.
Por exemplo, diferença entre os filtros IDTIPOLOGIA (Cabeçalho) e PRODUTO_IDTIPOLOGIA (Qualquer uma das tipologias do item).

Para que o pedido caia em aprovação, deve haver ao menos um desconto cuja lógica ao exceder seja Aprovação, em que o desconto aplicado ao item esteja acima do “teto”. Existirá um “nível invisível” que valida os descontos por produto, para respeito à clientes da base, que já utilizam o recurso de descontos. Quando há níveis cadastrados, esses serão considerados. Caso contrário, o desconto virá por produto.

Aprovação de Pedidos com Bloqueio por Desconto excedido

Todo pedido que sofrer qualquer alteração do preço ou desconto, deve gerar uma solicitação de aprovação ao ser finalizado. Para que o pedido caia em aprovação, deve haver ao menos um desconto cuja lógica ao exceder seja Aprovação no cadastro do Desconto, em que o desconto aplicado ao item esteja acima do valor ou percentual definido na regra.

  • Os descontos concedidos de forma automática, e que já tenho sido aprovado o cadastro de desconto, não passarão por aprovação.
  • Caso o percentual de desconto aplicado seja diferente do desconto concedido de forma automática, o pedido deve ser enviado par aprovação;
  • Neste caso, deve ser enviado na notificação de aprovação a alteração efetuada (valor tabela, valor/percentual desconto original e valor/percentual desconto confirmado);
  • Todo pedido que for finalizado e que for enviado para aprovação não deve gravar as movimentações Cota e não deve ser exportado ao ERP até que seja aprovado;
  • Somente após o pedido ser aprovado ele deve gravar as movimentações de cotas e ser exportado ao ERP.

Quando os descontos em um pedido excederem o % desconto permitido para algum grupo de descontos, esse pedido deve ser encaminhado para aprovação obedecendo a  alçada de cada aprovador.

Regras:
• O % alçada de cada aprovador varia conforme o grupo de produtos;
• O % de alçada para cada aprovador e grupo de produtos será importado do Protheus;
• O aprovador só pode aprovar pedidos cujo % desconto adicional seja igual ou inferior ao % alçada para ele definido;
• São 3 os níveis de alçada de aprovação:

Supervisor: este é o superior imediato dos vendedores;
Diretor Regional: este é o superior dos supervisores;
Diretor: este está no topo da hierarquia e é a instância final de aprovação;

Nesta etapa os pedidos passam por uma hierarquia de aprovações baseadas em qual o porcentual de desconto do pedido e quantos % de desconto está liberado para o usuário aprovador. Caso o usuário SUPERVISOR por exemplo não esteja liberado para aprovar pedidos com a % cadastrada, será passado para o Diretor Regional Aprovar, caso o Diretor Regional não esteja liberado para aprovação da quantidade % será passado para o Diretor realizar a aprovação.

Um pedido reprovado por qualquer instância de aprovação, retorna ao vendedor com status de "Não Finalizado" para que seja editado, revisado ou excluído.

Desconto por Desempenho de Venda

É possível configurar um tipo de aprovação específico para este processo, em "Cadastro > venda > Tipos de Aprovação" e alterar o registro PED_DESEMP_VENDA_ITEM para ativo.

Em seguida, o usuário precisa configurar uma faixa de desconto para o Desempenho da venda em "Cadastro > venda > Desempenho de venda" utilizando um registro que tenha a coluna Requer Aprovação Ativo.

Assim quando o usuário estiver realizando um pedido, em que o Desempenho de venda exceda o permitido na configuração e entre na faixa de Desempenho que Requer aprovação, vai gerar a aprovação conforme o exemplo a seguir:

E as aprovações ou Reprovações deste tipo de aprovação segue o padrão.

Desconto por condição de pagamento

Para configuração desta opção, é preciso criar um desconto e incluir a condição de pagamento como filtro. Por exemplo:

 

E nos filtros, incluir uma condição de pagamento:

Assim, no pedido o Desconto é aplicado conforme a regra:

Este fluxo vale também para os outros filtros que podem ser utilizado pelo usuário.

Desconto de item por vida útil do produto

O sistema disponibiliza telas de cadastro de Faixas de Vida Útil, para que se possa definir faixa de dias restantes ou porcentagem da vida útil de produtos. Esse cadastro poderá ser vinculado com uma regra de desconto, pela tela de cadastro de descontos de itens (Cadastro > Venda > Desconto)

Além disso, o sistema conta com tela de configuração de descontos, que pode ser configurada de forma que a vida útil vinculada no cadastro seja considerada para a busca de descontos válidos para o item. No pedido de venda, quando selecionado um lote (deve ser cadastrado por integração), o sistema calculará a vida útil do lote do produto, e considerará a vida útil para a busca de descontos válidos.

Exemplo:

Data atual: 29/06/2023

CADASTRO DE FAIXAS DE VIDA ÚTIL

Código Descrição Cor Situação Percentual inicial Percentual final Núm. dias inicial Núm. dias final
AZUL FAIXA AZUL #0000ff Ativo 0 50

AMARELA FAIXA AMARELA #fdff3e Ativo 50 70

VERMELHA FAIXA VERMELHA #ff3901 Ativo 70 90

CADASTRO DE DESCONTO 

Descrição Sigla Percentual (%) Faixa percentual inicial (%) Faixa percentual final (%) Faixa Vida Útil
Desconto faixa Azul AZUL 15 0 15 AZUL
Desconto faixa Amarela AMARELA 30 0 30 AMARELA
Desconto faixa Vermelha VERMELHA 50 0 50 VERMELHA

CADASTRO DE LOTES

codigo descricao quantidade datainicio datafim
1 PRODUTO 1 - LOTE 1 50 25/06/2023 30/06/2023
2 PRODUTO 1 - LOTE 2 100 29/06/2023 30/07/2023

DESCONTO APLICÁVEL NO PEDIDO

Produto Quantidade Lote Dias fim Vida Útil % Vida Útil Desconto aplicável no pedido
PRODUTO 1 30 PRODUTO 1 - LOTE 1 1 80 0-50% (Faixa Vermelha)
PRODUTO 1 60 PRODUTO 1 - LOTE 2 31 3 0-15% (Faixa Azul)
Escopo técnico desta regra

Escopo Técnico para o Cadastro

  • Para essa funcionalidade, o sistema conta com coluna na tabela lote: 
    • quantidadeoriginal: decimal(18,6), nullable
  • Para essa funcionalidade, o sistema conta com a tabela faixavidautil, contendo as colunas:
    • idfaixavidautil: PK
    • codigo: varchar(20), not-null
    • descricao: varchar(80), not-null
    • idnativo: byte, not-null, default 1
    • cor: varchar(6), nullable
    • percentualinicial: decimal(18,6), nullable
    • percentualfinal: decimal(18,6), nullable
    • numerodiasinicial: decimal(18,6), nullable
    • numerodiasfinal: decimal(18,6), nullable
  • Para essa funcionalidade, o sistema conta com colunas na tabela desconto:
    • idfaixavidautil: FK para tabela faixavidautil, nullable
    • idlote: FK para a tabela lote, nullable
  • Para essa funcionalidade, o sistema conta com registro presente na tabela wsconfigpedidocampo
    • INSERT INTO public.wsconfigpedidocampo (contexto,nomeentidade,"label",idnativo,idnvisivel,idneditavel,idneditavelcomitens,idnobrigatorio,idnunion,ordem,idnexiberelatorio)
          VALUES ('PRODUTO','PEDIDOPRODUTO_LOTE','standard.pedidoconfig.campo.lbl.lote',0,1,1,1,0,0,0,0);
  • O sistema possui, na tela de cadastro de vínculos de desconto, os campos de pesquisa para as entidades:
      • faixavidautil: label "Faixa vida útil"
      • lote: label "Lote"
    • A tela de pesquisa exibe os campos descrição das entidades
  • O sistema conta com tela de cadastro de "Faixa vida útil" (abaixo do menu Cadastro > Venda), contendo grid, para cadastro das seguintes colunas:
    • "Código": Campo textual, editável, persistindo em faixavidautil.codigo
    • "Descrição": Campo textual, editável, persistindo em faixavidautil.descricao
    • "Situação": Checkbox, com descrição Sim/Não, editável, persistindo em faixavidautil.idnativo
    • "Cor": Campo de seleção de cor (Conforme tela de configuração do tema), editável, persistindo o código hexadecimal em faixavidautil.cor
    • "Percentual inicial": Campo numérico (arredondamento considerando parâmetros de QTD_CASAS_DECIMAIS_PORCENTAGEM e MODO_ARREDONDAMENTO_PORCENTAGEM), editável, persistindo em faixavidautil.percentualinicial
      • Caso haja valores nos campos "Núm. dias inicial" ou "Núm. dias final", o sistema deve bloquear a ação de gravar, informando o usuário: "Não é possível trabalhar com percentuais e numero de dias simultaneamente"
    • "Percentual final": Campo numérico (arredondamento considerando parâmetros de QTD_CASAS_DECIMAIS_PORCENTAGEM e MODO_ARREDONDAMENTO_PORCENTAGEM), editável, persistindo em faixavidautil.percentualfinal
      • Caso haja valores nos campos "Núm. dias inicial" ou "Núm. dias final", o sistema deve bloquear a ação de gravar, informando o usuário: "Não é possível trabalhar com percentuais e numero de dias simultaneamente"
    • "Núm. dias inicial": Campo numérico (arredondamento considerando parâmetros de QTD_CASAS_DECIMAIS e MODO_ARREDONDAMENTO_GERAL), editável, persistindo em faixavidautil.numerodiasinicial
      • Caso haja valores nos campos "Percentual inicial" ou "Percentual final", o sistema deve bloquear a ação de gravar, informando o usuário: "Não é possível trabalhar com percentuais e numero de dias simultaneamente"
    • "Núm. dias final": Campo numérico (arredondamento considerando parâmetros de QTD_CASAS_DECIMAIS e MODO_ARREDONDAMENTO_GERAL), editável, persistindo em faixavidautil.numerodiasfinal
      • Caso haja valores nos campos "Percentual inicial" ou "Percentual final", o sistema deve bloquear a ação de gravar, informando o usuário: "Não é possível trabalhar com percentuais e numero de dias simultaneamente"
  • Na tela de configuração de campos dos itens (Configuração > Configuração Pedido > Produto), o sistema conta com os parâmetros:
    • ANDROID_CARD_LOTE
    • ANDROID_CARRINHO_LOTE
    • ANDROID_NEGOCIACAO_LOTE
    • WEB_GRID_LOTE
    • ANDROID_CARD_DIAS_VIDAUTIL 
      • Não há implementação para as colunas Editável e Obrigatório, sendo opções fixas "-"
    • ANDROID_CARRINHO_DIAS_VIDAUTIL
      • Não há implementação para as colunas Editável e Obrigatório, sendo opções fixas "-"
    • ANDROID_NEGOCIACAO_DIAS_VIDAUTIL
      • Não há implementação para as colunas Editável e Obrigatório, sendo opções fixas "-"
    • WEB_GRID_DIAS_VIDAUTIL
      • Não há implementação para as colunas Editável e Obrigatório, sendo opções fixas "-"
    • ANDROID_CARD_PERCENTUAL_VIDAUTIL
      • Não há implementação para as colunas Editável e Obrigatório, sendo opções fixas "-"
    • ANDROID_CARRINHO_PERCENTUAL_VIDAUTIL
      • Não há implementação para as colunas Editável e Obrigatório, sendo opções fixas "-"
    • ANDROID_NEGOCIACAO_PERCENTUAL_VIDAUTIL
      • Não há implementação para as colunas Editável e Obrigatório, sendo opções fixas "-"
    • WEB_GRID_PERCENTUAL_VIDAUTIL
  • Na tela de busca de descontos (Configuração > Configuração Pedido > Busca Produto > DESCONTO),
    • O sistema conta com 2 campos na determinação dos filtros gerais e níveis, sendo eles
      • PRODUTO_IDLOTE
      • PRODUTO_IDFAIXAVIDAUTIL
  • Na tela de busca de produtos (Configuração > Configuração Pedido > Busca Produto)
    • O sistema implementa busca de LOTE baseado no registro novo da wsconfigpedidocampo, de código "PEDIDOPRODUTO_LOTE"
      • Tabelas selecionáveis
        • Lote
          • Registros de cláusulas where selecionáveis:
            • PRODUTO_IDESTOQUE: lote.idestoque = id do estoque do cache para o produto em questão
            • QUANTIDADE: operação editável com opções de campo numérico (GT, LT, LE, GE...) para comparar com lote.quantidade
            • QUANTIDADEORIGINAL: operação editável com opções de campo numérico (GT, LT, LE, GE...)
            • VIGENCIA: current_date between LOTE.datainicio and LOTE.datafim
            • DIASFIM_VIDAUTIL: operação editável com opções de campo numérico (GT, LT, LE, GE...)
            • PERCENTUAL_VIDAUTIL: operação editável com opções de campo numérico (GT, LT, LE, GE...)
  • Na tela de parâmetros gerais do pedido (Configuração > Configuração Pedido > Geral), o sistema conta com parâmetro:
    • "VIDAUTIL_CONSIDERA_DIAS_UTEIS": 
      • inativo por padrão
      • descrição: "Quando ativo, desconsidera finais de semana e registros de datas comemorativas (datacomemorativa.idnferiado = 1)"

Implementação no Pedido de Venda

  • Na tela de pedidos de venda, no contexto de itens,
    • O sistema implementa os seguintes campos:
      • Campo "Lote", campo de pesquisa, seleção única, cuja tela de pesquisa (dialog) exiba os campos lote.descricao e lote.quantidade (desconsiderar movimentações definidas no tópico 3) 
        • O campo respeita as configurações dos parâmetros: 
          • ANDROID_CARD_LOTE
          • ANDROID_CARRINHO_LOTE
          • ANDROID_NEGOCIACAO_LOTE
          • WEB_GRID_LOTE
        • A consulta das opções selecionáveis é:
          • Resultado da configuração de filtros gerais e níveis da busca produto > LOTE

      • Campo "Dias fim vida útil", decimal (arredondamento: QTD_CASAS_DECIMAIS e MODO_ARREDONDAMENTO_GERAL)
        • O campo respeita as configurações dos parâmetros: 
          • ANDROID_CARD_DIAS_VIDAUTIL
          • ANDROID_CARRINHO_DIAS_VIDAUTIL
          • ANDROID_NEGOCIACAO_DIAS_VIDAUTIL
          • WEB_GRID_DIAS_VIDAUTIL
        • O campo é somente leitura, cujo valor exibido é o resultado da fórmula a seguir:
          • lote.datafim (lote selecionado no item) - DATA ATUAL
            • O sistema valida o parâmetro VIDAUTIL_CONSIDERA_DIAS_UTEIS para considerar ou não os finais de semana e datas comemorativas (datacomemorativa.idnferiado = 1)
      • Campo "% vida útil", decimal (arredondamento: QTD_CASAS_DECIMAIS_PORCENTAGEM e MODO_ARREDONDAMENTO_PORCENTAGEM)
        • O campo respeita as configurações dos parâmetros: 
          • ANDROID_CARD_PERCENTUAL_VIDAUTIL
          • ANDROID_CARRINHO_PERCENTUAL_VIDAUTIL
          • ANDROID_NEGOCIACAO_PERCENTUAL_VIDAUTIL
          • WEB_GRID_PERCENTUAL_VIDAUTIL
        • O campo é somente leitura, cujo valor exibido é o resultado da fórmula a seguir:
          • (lote.datafim (lote selecionado no item) - DATA ATUAL) / (lote.datafim (lote selecionado no item) - lote.datainicio (lote selecionado no item))* 100
            • O sistema valida o parâmetro VIDAUTIL_CONSIDERA_DIAS_UTEIS para considerar ou não os finais de semana e datas comemorativas (datacomemorativa.idnferiado = 1)
    • O sistema implementa o filtro de descontos do cache pelos campos:
      • PRODUTO_IDLOTE
        • A cláusula where dessa configuração é:
          • where desconto.idlote = ${lote selecionado na linha do item}

      • PRODUTO_IDFAIXAVIDAUTIL
        • A clausula where dessa configuração é:
          • where desconto.idfaixavidautil in (
            select idfaixavidautil from faixavidautil
            where (-- Comparando registros cadastrados com faixa de percentual
            percentualinical is not null
            and percentualfinal is not null
            and ${Campo "% vida útil"} >= percentualinical
            and  ${Campo "% vida útil"} <= percentualfinal)
            or (-- Comparando registros cadastrados com faixa de numero de dias
            numerodiasinicial is not null
            and numerodiasfinal is not null
            and ${Campo "Dias fim vida útil"} >= numerodiasinicial
            and  ${Campo "Dias fim vida útil"} <= numerodiasfinal)
            )

    • O parâmetro "CHAVE_UNICA_PRODUTOS_DUPLICADOS" implementa o valor configurado "idlote", para que a coluna de "Lote" possa servir como chave combinada para não permitir que múltiplos itens da pedidoproduto compartilhem as mesmas chaves combinadas, quando o parâmetro "HABILITAR_INCLUSAO_PRODUTO_DUPLICADO" estiver ativo

Validação de quantidade de Lote + Movimentação de quantidades de Lote

  • Pelo tools, opção 3, o sistema deve conta com tabela lotemovimento:
    • idlotemovimento: PK
    • idlote: FK para lote, not-null
    • quantidade: decimal(18,6), not-null
    • idnativo: byte, not-null, default 1
    • idnprocessado: byte, not-null, default 0
    • idpedidoproduto: fk para pedidoproduto, nullable
  • No pedido de venda,
    • O sistema não permite que o campo "Quantidade" seja inserido com valor maior que: o campo lote.quantidade do lote selecionado no item do pedido subtraído das movimentações negativas de lote ativas e não processadas, valor definido pela select a seguir:
      • select l.quantidade - (select sum(lm.quantidade) from lotemovimento lm where lm.idlote = l.idlote and lm.idnativo = 1 and lm.idnprocessado = 0 and lm.quantidade < 0) from lote l where idlote = ${lote selecionado no item}

    • Ao finalizar o pedido, o sistema persiste uma movimentação negativa de movimentação de lote com os seguintes valores:
      • idlotemovimento: nextval("seqpklotemovimento")
      • idlote: ${id do lote selecionado no item}
      • quantidade: pedidoproduto.quantidade where idpedidoproduto = ${id do pedidoproduto}
      • idnativo: 1
      • idnprocessado: 0
      • idpedidoproduto: ${id do pedidoproduto}

E-mail de Notificação e Aprovação

O Sistema também um e-mail de notificação para os aprovadores, informando da existência de pedido aguardando para ser aprovado, quando marcado o campo "Gerar notificação" para "Sim" no tipo de aprovação:

Lembrando que para este processo, é necessário realizar a configuração da Conta de e-mail e de Envio, utilizando o contexto "aprovação".


Quando o aprovador clicar em um dos links Aprovar ou Reprovar, é replicado o mesmo comportamento já realizado na grid de Aprovações da Listagem de pedidos, na aplicação.
Em caso de tentativa de aprovação de um pedido já aprovado por outro aprovador, a aplicação apenas ignorar a ação.

Documentação em construção! 





























Campo Adicionais no Pedido

DADOS GERAIS SOBRE O RECURSO

O sistema possui cadastro de campos adicionais sendo então possível criar campos extras no sistema,  usados para complementar os dados dentro do pedido.

O campo adicional para exibição no Pedido pode ser configurado de acordo com a necessidade dos usuários.

Lembrando que há também os campos adicionais gerais, que são exibidos nas outras telas de cadastro e podem ser acessados Aqui

Edição e Configuração de Campos Adicionais dentro do Pedido

em "Configuração > Configuração Pedido > Campos adicionais" é realizado o cadastro dos campos adicionais que serão exibidos na tela de pedido, sendo assim é exibido os botões "Adicionar" para novos registros de campos, "Cancelar alteração" se deseja ignorar as alterações realizadas antes de gravar ou "Gravar" que permite gravar os novos registros criados.

Segue as descrições dos campos da tela:

RegistroDescrição
ContextoExibe qual contexto corresponde o registro, ou seja o módulo que o campo será exibido
DescriçãoExibe a descrição informada pelo usuário na configuração
ChaveExibe a chave identificadora do campo adicional informada pelo usuário na configuração
IdentificadorExibe a identificação do campo no banco de dados
Tipo de CampoExibe o Tipo do campo para o registro informado pelo usuário na configuração
ObrigatórioExibe se o campo será obrigatório no cadastro
SituaçãoExibe se o campo está ativo ou inativo na configuração do registro
Exibir no relatórioExibe se o parâmetro para exibir no relatório estiver ativo
Botão EditarNeste botão será realizado a configuração para o campo
Botão configuração de dados pessoaisNeste botão é realizado configuração da suframa (integração)

Quando clicado no Botão Editar é realizado a configuração dos Campos adicionais do pedido.

Ao clicar no botão teremos os seguintes campos para preencher e configurar:

CampoDescrição
SituaçãoO campo situação tem a funcionalidade e o objetivo de deixar o campo com situação “Ativo” e “Inativo”. Quando configurado com a situação Ativo o campo a ser configurado ficara ativo no cadastro configurado de acordo com o contexto configurado. Quando configurado com a situação Inativo ele não será exibido e não estará funcionando no contexto configurado.
ContextoNo campo contexto podemos selecionar qual cadastro o campo adicionado será cadastrado. O contexto é dividido em Cliente (cadastro do cliente), Contato (cadastro contato do cliente), Lead (cadastro de etapas do lead) e Local (cadastro do local).
Tipo de campoO tipo de campo é relacionado que tipo de dado inserido, ou qual será sua ação dentro do cadastro. Ao lado do campo Tipo de campo terá uma lupa que quando clicado abrirá uma tela para selecionar qual o tipo do campo.
DescriçãoNa descrição informaremos o nome do campo adicional, ou seja, o nome que será exibido no cadastro.
IdentificadorO campo chave é um campo onde informamos um nome único para o campo adicional, pois não pode haver duplicação de campo dentro do cadastro.
Valor PadrãoAlguns "Tipos de campos" requer que o usuário informe um valor padrão no campo adicional, obrigando que o usuário preencha este campo
MáscaraPermite informar uma mascará padrão para o campo, por exemplo Data __/__/__
Tamanho mínimoAlguns "Tipos de campos" requer que o usuário informe um valor mínimo para campo adicional, como por exemplo campos numéricos
Tamanho máximoAlguns "Tipos de campos" requer que o usuário informe um valor máximo para campo adicional, como por exemplo campos numéricos
ObrigatórioEssa configuração tem o objetivo de dizer se o campo será obrigatório no cadastro, ou seja, se será necessário que seja preenchido algum dado ou selecionado.
Permite visualizarPermite se o campo será visível no cadastro, ou seja, se será possível ver o campo.
Permite cadastrarPermite se através do campo pode ser inserido ou selecionado algum dado.
Permite editarCaso possua algum dado pré-selecionado ou preenchido, permite editar o campo.
Exibir no relatórioPermite o usuário escolher se o campo adicional será exibido no relatório que for gerado da tela

Tipos de Contexto disponíveis

São eles:

  • Cabeçalho
  • Complemento
  • Entrega
  • PedidoProduto
  • Resumo

Os campos adicionais do pedido serão exibidos nos blocos conforme o contexto selecionado, na seguinte forma:

Detalhamento do Tipo de campo com Exemplos:

  • Campo adicional geral vinculável (precisa ser vinculado a um campo adicional geral em Cadastro > Geral > Campos adicionais) 

O objetivo desse campo é buscar dados partir do campo adicional de cadastros. Por exemplo um campo adicional vinculado no pedido trazer informações de um campo adicional do contexto do cadastro de Produto.

  • Combo box

  • Data picker

  • Hiper Link

  • Label

  • Number field

  • Pesquisa em entidade  (precisa ser vinculado a um campo adicional geral em Cadastro > Geral > Campos adicionais)

Similar com o comportamento dos campos vinculáveis, porém busca dados de uma única entidade, por exemplo Produto.

  • Radio button

  • Switch

  • Text Field

  • Textarea

  • Time picker

Após a configuração, os campos são exibidos no Pedido conforme o seu contexto configurado.

Campo selecionável definindo agrupamento de parâmetros de pedido

Não foi possível renderizar {include} A página incluída não pôde ser encontrada.

Campos Adicionais de Pedido

DADOS GERAIS SOBRE O RECURSO

O sistema possui cadastro de campos adicionais sendo então possível criar campos extras no sistema,  usados para complementar os dados dentro do pedido.

O campo adicional para exibição no Pedido pode ser configurado de acordo com a necessidade dos usuários.

Lembrando que há também os campos adicionais gerais, que são exibidos nas outras telas de cadastro e podem ser acessados Aqui

Edição e Configuração de Campos Adicionais dentro do Pedido

em "Configuração > Configuração Pedido > Campos adicionais" é realizado o cadastro dos campos adicionais que serão exibidos na tela de pedido, sendo assim é exibido os botões "Adicionar" para novos registros de campos, "Cancelar alteração" se deseja ignorar as alterações realizadas antes de gravar ou "Gravar" que permite gravar os novos registros criados.

Segue as descrições dos campos da tela:

RegistroDescrição
ContextoExibe qual contexto corresponde o registro, ou seja o módulo que o campo será exibido
DescriçãoExibe a descrição informada pelo usuário na configuração
ChaveExibe a chave identificadora do campo adicional informada pelo usuário na configuração
IdentificadorExibe a identificação do campo no banco de dados
Tipo de CampoExibe o Tipo do campo para o registro informado pelo usuário na configuração
ObrigatórioExibe se o campo será obrigatório no cadastro
SituaçãoExibe se o campo está ativo ou inativo na configuração do registro
Exibir no relatórioExibe se o parâmetro para exibir no relatório estiver ativo
Botão EditarNeste botão será realizado a configuração para o campo
Botão configuração de dados pessoaisNeste botão é realizado configuração da suframa (integração)

Quando clicado no Botão Editar é realizado a configuração dos Campos adicionais do pedido.

Ao clicar no botão teremos os seguintes campos para preencher e configurar:

CampoDescrição
SituaçãoO campo situação tem a funcionalidade e o objetivo de deixar o campo com situação “Ativo” e “Inativo”. Quando configurado com a situação Ativo o campo a ser configurado ficara ativo no cadastro configurado de acordo com o contexto configurado. Quando configurado com a situação Inativo ele não será exibido e não estará funcionando no contexto configurado.
ContextoNo campo contexto podemos selecionar qual cadastro o campo adicionado será cadastrado. O contexto é dividido em Cliente (cadastro do cliente), Contato (cadastro contato do cliente), Lead (cadastro de etapas do lead) e Local (cadastro do local).
Tipo de campoO tipo de campo é relacionado que tipo de dado inserido, ou qual será sua ação dentro do cadastro. Ao lado do campo Tipo de campo terá uma lupa que quando clicado abrirá uma tela para selecionar qual o tipo do campo.
DescriçãoNa descrição informaremos o nome do campo adicional, ou seja, o nome que será exibido no cadastro.
IdentificadorO campo chave é um campo onde informamos um nome único para o campo adicional, pois não pode haver duplicação de campo dentro do cadastro.
Valor PadrãoAlguns "Tipos de campos" requer que o usuário informe um valor padrão no campo adicional, obrigando que o usuário preencha este campo
MáscaraPermite informar uma mascará padrão para o campo, por exemplo Data __/__/__
Tamanho mínimoAlguns "Tipos de campos" requer que o usuário informe um valor mínimo para campo adicional, como por exemplo campos numéricos
Tamanho máximoAlguns "Tipos de campos" requer que o usuário informe um valor máximo para campo adicional, como por exemplo campos numéricos
ObrigatórioEssa configuração tem o objetivo de dizer se o campo será obrigatório no cadastro, ou seja, se será necessário que seja preenchido algum dado ou selecionado.
Permite visualizarPermite se o campo será visível no cadastro, ou seja, se será possível ver o campo.
Permite cadastrarPermite se através do campo pode ser inserido ou selecionado algum dado.
Permite editarCaso possua algum dado pré-selecionado ou preenchido, permite editar o campo.
Exibir no relatórioPermite o usuário escolher se o campo adicional será exibido no relatório que for gerado da tela

Tipos de Contexto disponíveis

São eles:

  • Cabeçalho
  • Complemento
  • Entrega
  • PedidoProduto
  • Resumo

Os campos adicionais do pedido serão exibidos nos blocos conforme o contexto selecionado, na seguinte forma:

Detalhamento do Tipo de campo com Exemplos:

  • Campo adicional geral vinculável (precisa ser vinculado a um campo adicional geral em Cadastro > Geral > Campos adicionais) 

O objetivo desse campo é buscar dados partir do campo adicional de cadastros. Por exemplo um campo adicional vinculado no pedido trazer informações de um campo adicional do contexto do cadastro de Produto.

  • Combo box

  • Data picker

  • Hiper Link

  • Label

  • Number field

  • Pesquisa em entidade  (precisa ser vinculado a um campo adicional geral em Cadastro > Geral > Campos adicionais)

Similar com o comportamento dos campos vinculáveis, porém busca dados de uma única entidade, por exemplo Produto.

  • Radio button

  • Switch

  • Text Field

  • Textarea

  • Time picker

Após a configuração, os campos são exibidos no Pedido conforme o seu contexto configurado.

Configuração de campos de item no pedido

DADOS GERAIS SOBRE O RECURSO

O recurso de Configurar a exibição e manipulação dos campos permite que o usuário personalize as Guias de Carrinho, Histórico, Sugestão de venda, Oferta, Lançamento e Campanha dentro do Pedido.

Configuração dos campos para Exibição

Para que seja possível manipular os campos existentes no carrinho, o usuário realiza a configuração em "Configuração > Configuração Pedido > Produtos". 

Campo Descrição
Campo Nome do campo que será exibido para os itens, lembrando que normalmente há campos definidos para cada ambeinte
Label Descrição que será exibido para o campo, se o usuário não editar a label, será exibido uma descrição padrão existente
Visível Permite que o campo seja exibido em tela
Editável Permite que o campo seja editado pelo usuário, na tela de pedidos
Obrigatório Permite definir se o campo será ou não obrigatório o preenchimento
Exibir no relatório Permite definir se o campo será exibido no Espelho do pedido
Linha Define em qual linha  é exibido o componente em tela
Coluna Define em qual Coluna é exibido o componente em tela
Botão Validação Alguns campos permite informar uma validação específica para ele, para mais detalhes vide o fluxo do campo
Botão Editar Alguns campos permite Editar especificações, para mais detalhes vide o fluxo do campo

Sendo assim, a descrição dos campos irão definir se o mesmo será exibido no ambiente Web ou Android

Por exemplo:

Ativando o campo "Lote" no Ambiente web e verificando no carrinho: 

Realizando a mesma configuração agora para o ambiente Android:

São exibidos:

Campos com Validações

Alguns campos configuráveis possuem a opção de incluir validação, Por exemplo, a configuração de Data Entrega, onde é possível incluir a validação de Dias que serão considerados para o cálculo.

Ao Clicar no botão é exibido a dialog, e o usuário define a validação Mínima ou Máxima e informa os dias do cálculo:

Campos com Edições

Alguns campos configuráveis possuem a opção de Edição, Por exemplo, a configuração de Cultura, onde é possível incluir ao informações de cultura que serão preenchidas no campo, no Item:

Ao Clicar no botão é exibido uma tela, e o usuário define os campos que serão considerados para preenchimento do mesmo:

Campos Exibidos em Card de produtos

Há também as opções para exibição dos campos nos cards de produto nas abas de "Sugestão de venda", "Black Friday", "Lançamento", e "Oferta".

Por exemplo: Saldo de estoque nos Cards:

O Objetivo desse recurso, é oferecer uma visualização mais prática e rápida do estoque disponível, eliminando a necessidade de adicionar um produto ao carrinho para essa consulta. Exibido da seguinte forma:



Consulta Android

DADOS GERAIS SOBRE O RECURSO

O módulo de Consulta do ambiente Android possibilita a consulta das informações relacionadas a venda, ao profissional, informações dos produtos, aprovações, notas fiscais e relatórios.

Consulta - Aprovações

O módulo de aprovações serão listados os pedidos que sofreram algum tipo de restrição e que necessitam de aprovação de um profissional responsável ou superior. Suas aprovações serão listadas de acordo com o tipo de aprovação. Somente os profissionais configurados para a aprovação poderão aprovar/reprovar os pedidos. Para profissionais que realizaram o pedido as aprovações poderão ser visualizadas e verificadas se o pedido foi aprovado ou reprovado pelo usuário responsável.

Consulta - Histórico de atendimentos

A consulta de histórico de atendimento conterá todos os dados relacionados ao atendimento realizado pelo profissional. Através dos filtros da tela de atendimento poderá ser feito a consulta dos últimos atendimentos realizados pelo profissional. Informações como Justificativa e Imagens poderão ser visualizadas no atendimento realizado com o cliente.

Consulta - Histórico de vendas (Pedido)

A consulta de Histórico de vendas (Pedido) poderão ser visualizados os pedidos gerados pelo profissional. Os pedidos serão listados por cliente e poderão ser acessados a qualquer momento pelo profissional.

Pedidos gerados no ambiente Android poderão somente ser finalizados pelo ambiente Android, possibilitando o controle dos pedidos gerados no ambiente Web e Android.

Nesta guia é possível manipular os pedidos que foram gerados no Android, pelos botões de opção que são disponibilizados. Segue os detalhes dos botões: 

BotãoDescrição
AprovaçãoExibe os detalhes de status de bloqueios e aprovações sobre o pedido em questão
CorteExibe se o pedido possui itens com corte de quantidade
PreçoExibe as informações de quantidade por preço dos itens dentro do pedido
ExportaçãoPermite consultar se o pedido já foi exportado para o ERP
AmbienteExibe se o pedido foi gerado pelo Ambiente da Web ou do Android
TransmissãoPermite consultar se o pedido já foi sincronizado

Além dos botões de status, há também o botão de Opções:

Ao clicar, é exibido uma janela com as seguintes opções:

OpçãoDescrição
AprovaçãoExibe os detalhes de status de bloqueios e aprovações sobre o pedido em questão
AssinaturaExibe a tela de assinatura que foi preenchido durante o pedido
VisualizarPermite visualizar e Editar o pedido, abrindo a tela de pedidos
ClonarPermite Clonar o pedido em questão, com os mesmos dados informados no cabeçalho
CancelarPermite cancelar o pedido, mudando seu status
Salvar Cópia do PedidoGera um PDF do Espelho do pedido (relatório do pedido)

Consulta - Histórico de vendas (Notas Fiscais)

Na consulta de Histórico de vendas (Notas Fiscais) serão listados as notas faturadas e armazenadas no ambiente. Informações das notas fiscais poderão ser visualizadas de acordo com o profissional autenticado ou sua hierarquia. As notas fiscais terão os produtos faturados e poderão ser visualizados informações dos produtos das notas fiscais e do pedido que gerou esses produtos.

Nesta guia também possui um botão de Opções que permite visualizar os campos da Nota fiscal como também imprimir a DANFE que foi anexada ao pedido.

Consulta - Financeiro (Débito e Crédito)

A consulta de Financeiro (Débito e Crédito) possibilita consultar os títulos dos clientes. Os títulos visíveis serão somente dos clientes da carteira do profissional.

Poderão ser consultadas informações do títulos como status de vencidos, pago, a vencer, títulos de crédito e limite de crédito.

Detalhes de Títulos Vencidos:

Detalhes de Títulos Pagos:

Consulta - Produtos

A consulta de Produtos permite consultar os produtos do sistema, como informações, estoque do produto e dados relacionados a caracterização do produto.

A consulta dos produtos pode ser filtradas pela pesquisa avançada da tela de produtos.

Ao clicar em um dos produtos, os detalhes são exibidos:

Consulta - Positivação de produto (por cliente)

Tem a possibilidade de consultar os dados relacionados aos pedidos dos clientes. Para consultar os dados dos pedidos gerados para esse cliente é executado uma função que busca os dados dos pedidos dos clientes no sistema e grava em uma tabela denominada positivação do produto. Nessa tabela são gravados as relações dos clientes com os pedidos, possibilitando assim consultar os produtos dos pedidos gerados para os clientes.

Quando realizado a consulta pode ser consultado os produtos do pedido do cliente consultado

Consulta - Positivação de produto (da empresa)

Parecido com a tela de positivação de produto por cliente, a tela da empresa possibilita consultar os dados relacionados aos produtos adquiridos pela empresa. Para consultar os dados dos produtos gerados é executado uma função que busca os dados dos produtos da empresa no sistema e grava em uma tabela denominada positivação do produto. Nessa tabela são gravados as relações dos produtos com a empresa, possibilitando assim consultar os produtos da empresa.

Consulta - Relatórios

O sistema disponibiliza a visualização de relatórios para os usuários, incluindo Exportação e Compartilhamento dos mesmos.

Ao pressionar sobre uma pasta, a mesma será aberta para exibir seu conteúdo, como pode ser visto na imagem abaixo:

Para abrir a seleção de filtros do relatório e a opção de exportar o mesmo para visualizá-lo no dispositivo, basta pressionar sobre o relatório desejado que a seguinte tela será aberta:

Desconto de item por vida útil do produto

DADOS GERAIS SOBRE O RECURSO

O sistema disponibiliza telas de cadastro de Faixas de Vida Útil, para que se possa definir faixa de dias restantes ou porcentagem da vida útil de produtos.

Além disso, o sistema conta com tela de configuração de descontos, que pode ser configurada de forma que a vida útil vinculada no cadastro seja considerada para a busca de descontos válidos para o item.

Cadastro de Desconto

Esse cadastro poderá ser vinculado com uma regra de desconto, pela tela de cadastro de descontos de itens (Cadastro > Venda > Desconto)

No pedido de venda, quando selecionado um lote (deve ser cadastrado por integração), o sistema calculará a vida útil do lote do produto, e considerará a vida útil para a busca de descontos válidos.

Exemplo:

Data atual: 29/06/2023

CADASTRO DE FAIXAS DE VIDA ÚTIL

Código Descrição Cor Situação Percentual inicial Percentual final Núm. dias inicial Núm. dias final
AZUL FAIXA AZUL #0000ff Ativo 0 50

AMARELA FAIXA AMARELA #fdff3e Ativo 50 70

VERMELHA FAIXA VERMELHA #ff3901 Ativo 70 90

CADASTRO DE DESCONTO 

Descrição Sigla Percentual (%) Faixa percentual inicial (%) Faixa percentual final (%) Faixa Vida Útil
Desconto faixa Azul AZUL 15 0 15 AZUL
Desconto faixa Amarela AMARELA 30 0 30 AMARELA
Desconto faixa Vermelha VERMELHA 50 0 50 VERMELHA

CADASTRO DE LOTES

codigo descricao quantidade datainicio datafim
1 PRODUTO 1 - LOTE 1 50 25/06/2023 30/06/2023
2 PRODUTO 1 - LOTE 2 100 29/06/2023 30/07/2023

DESCONTO APLICÁVEL NO PEDIDO

Produto Quantidade Lote Dias fim Vida Útil % Vida Útil Desconto aplicável no pedido
PRODUTO 1 30 PRODUTO 1 - LOTE 1 1 80 0-50% (Faixa Vermelha)
PRODUTO 1 60 PRODUTO 1 - LOTE 2 31 3 0-15% (Faixa Azul)


Escopo funcional para o Cadastro

  • Para essa funcionalidade, o sistema conta com coluna na tabela lote: 
    • quantidadeoriginal: decimal(18,6), nullable
  • Para essa funcionalidade, o sistema conta com a tabela faixavidautil, contendo as colunas:
    • idfaixavidautil: PK
    • codigo: varchar(20), not-null
    • descricao: varchar(80), not-null
    • idnativo: byte, not-null, default 1
    • cor: varchar(6), nullable
    • percentualinicial: decimal(18,6), nullable
    • percentualfinal: decimal(18,6), nullable
    • numerodiasinicial: decimal(18,6), nullable
    • numerodiasfinal: decimal(18,6), nullable
  • Para essa funcionalidade, o sistema conta com colunas na tabela desconto:
    • idfaixavidautil: FK para tabela faixavidautil, nullable
    • idlote: FK para a tabela lote, nullable
  • Para essa funcionalidade, o sistema conta com registro presente na tabela wsconfigpedidocampo
    • INSERT INTO public.wsconfigpedidocampo (contexto,nomeentidade,"label",idnativo,idnvisivel,idneditavel,idneditavelcomitens,idnobrigatorio,idnunion,ordem,idnexiberelatorio)
          VALUES ('PRODUTO','PEDIDOPRODUTO_LOTE','standard.pedidoconfig.campo.lbl.lote',0,1,1,1,0,0,0,0);
  • O sistema possui, na tela de cadastro de vínculos de desconto, os campos de pesquisa para as entidades:
      • faixavidautil: label "Faixa vida útil"
      • lote: label "Lote"
    • A tela de pesquisa exibe os campos descrição das entidades
  • O sistema conta com tela de cadastro de "Faixa vida útil" (abaixo do menu Cadastro > Venda), contendo grid, para cadastro das seguintes colunas:
    • "Código": Campo textual, editável, persistindo em faixavidautil.codigo
    • "Descrição": Campo textual, editável, persistindo em faixavidautil.descricao
    • "Situação": Checkbox, com descrição Sim/Não, editável, persistindo em faixavidautil.idnativo
    • "Cor": Campo de seleção de cor (Conforme tela de configuração do tema), editável, persistindo o código hexadecimal em faixavidautil.cor
    • "Percentual inicial": Campo numérico (arredondamento considerando parâmetros de QTD_CASAS_DECIMAIS_PORCENTAGEM e MODO_ARREDONDAMENTO_PORCENTAGEM), editável, persistindo em faixavidautil.percentualinicial
      • Caso haja valores nos campos "Núm. dias inicial" ou "Núm. dias final", o sistema deve bloquear a ação de gravar, informando o usuário: "Não é possível trabalhar com percentuais e numero de dias simultaneamente"
    • "Percentual final": Campo numérico (arredondamento considerando parâmetros de QTD_CASAS_DECIMAIS_PORCENTAGEM e MODO_ARREDONDAMENTO_PORCENTAGEM), editável, persistindo em faixavidautil.percentualfinal
      • Caso haja valores nos campos "Núm. dias inicial" ou "Núm. dias final", o sistema deve bloquear a ação de gravar, informando o usuário: "Não é possível trabalhar com percentuais e numero de dias simultaneamente"
    • "Núm. dias inicial": Campo numérico (arredondamento considerando parâmetros de QTD_CASAS_DECIMAIS e MODO_ARREDONDAMENTO_GERAL), editável, persistindo em faixavidautil.numerodiasinicial
      • Caso haja valores nos campos "Percentual inicial" ou "Percentual final", o sistema deve bloquear a ação de gravar, informando o usuário: "Não é possível trabalhar com percentuais e numero de dias simultaneamente"
    • "Núm. dias final": Campo numérico (arredondamento considerando parâmetros de QTD_CASAS_DECIMAIS e MODO_ARREDONDAMENTO_GERAL), editável, persistindo em faixavidautil.numerodiasfinal
      • Caso haja valores nos campos "Percentual inicial" ou "Percentual final", o sistema deve bloquear a ação de gravar, informando o usuário: "Não é possível trabalhar com percentuais e numero de dias simultaneamente"
  • Na tela de configuração de campos dos itens (Configuração > Configuração Pedido > Produto), o sistema conta com os parâmetros:
    • ANDROID_CARD_LOTE
    • ANDROID_CARRINHO_LOTE
    • ANDROID_NEGOCIACAO_LOTE
    • WEB_GRID_LOTE
    • ANDROID_CARD_DIAS_VIDAUTIL 
      • Não há implementação para as colunas Editável e Obrigatório, sendo opções fixas "-"
    • ANDROID_CARRINHO_DIAS_VIDAUTIL
      • Não há implementação para as colunas Editável e Obrigatório, sendo opções fixas "-"
    • ANDROID_NEGOCIACAO_DIAS_VIDAUTIL
      • Não há implementação para as colunas Editável e Obrigatório, sendo opções fixas "-"
    • WEB_GRID_DIAS_VIDAUTIL
      • Não há implementação para as colunas Editável e Obrigatório, sendo opções fixas "-"
    • ANDROID_CARD_PERCENTUAL_VIDAUTIL
      • Não há implementação para as colunas Editável e Obrigatório, sendo opções fixas "-"
    • ANDROID_CARRINHO_PERCENTUAL_VIDAUTIL
      • Não há implementação para as colunas Editável e Obrigatório, sendo opções fixas "-"
    • ANDROID_NEGOCIACAO_PERCENTUAL_VIDAUTIL
      • Não há implementação para as colunas Editável e Obrigatório, sendo opções fixas "-"
    • WEB_GRID_PERCENTUAL_VIDAUTIL
  • Na tela de busca de descontos (Configuração > Configuração Pedido > Busca Produto > DESCONTO),
    • O sistema conta com 2 campos na determinação dos filtros gerais e níveis, sendo eles
      • PRODUTO_IDLOTE
      • PRODUTO_IDFAIXAVIDAUTIL
  • Na tela de busca de produtos (Configuração > Configuração Pedido > Busca Produto)
    • O sistema implementa busca de LOTE baseado no registro novo da wsconfigpedidocampo, de código "PEDIDOPRODUTO_LOTE"
      • Tabelas selecionáveis
        • Lote
          • Registros de cláusulas where selecionáveis:
            • PRODUTO_IDESTOQUE: lote.idestoque = id do estoque do cache para o produto em questão
            • QUANTIDADE: operação editável com opções de campo numérico (GT, LT, LE, GE...) para comparar com lote.quantidade
            • QUANTIDADEORIGINAL: operação editável com opções de campo numérico (GT, LT, LE, GE...)
            • VIGENCIA: current_date between LOTE.datainicio and LOTE.datafim
            • DIASFIM_VIDAUTIL: operação editável com opções de campo numérico (GT, LT, LE, GE...)
            • PERCENTUAL_VIDAUTIL: operação editável com opções de campo numérico (GT, LT, LE, GE...)
  • Na tela de parâmetros gerais do pedido (Configuração > Configuração Pedido > Geral), o sistema conta com parâmetro:
    • "VIDAUTIL_CONSIDERA_DIAS_UTEIS": 
      • inativo por padrão
      • descrição: "Quando ativo, desconsidera finais de semana e registros de datas comemorativas (datacomemorativa.idnferiado = 1)"

Implementação no Pedido de Venda

  • Na tela de pedidos de venda, no contexto de itens,
    • O sistema implementa os seguintes campos:
      • Campo "Lote", campo de pesquisa, seleção única, cuja tela de pesquisa (dialog) exiba os campos lote.descricao e lote.quantidade (desconsiderar movimentações definidas no tópico 3) 
        • O campo respeita as configurações dos parâmetros: 
          • ANDROID_CARD_LOTE
          • ANDROID_CARRINHO_LOTE
          • ANDROID_NEGOCIACAO_LOTE
          • WEB_GRID_LOTE
        • A consulta das opções selecionáveis é:
          • Resultado da configuração de filtros gerais e níveis da busca produto > LOTE

      • Campo "Dias fim vida útil", decimal (arredondamento: QTD_CASAS_DECIMAIS e MODO_ARREDONDAMENTO_GERAL)
        • O campo respeita as configurações dos parâmetros: 
          • ANDROID_CARD_DIAS_VIDAUTIL
          • ANDROID_CARRINHO_DIAS_VIDAUTIL
          • ANDROID_NEGOCIACAO_DIAS_VIDAUTIL
          • WEB_GRID_DIAS_VIDAUTIL
        • O campo é somente leitura, cujo valor exibido é o resultado da fórmula a seguir:
          • lote.datafim (lote selecionado no item) - DATA ATUAL
            • O sistema valida o parâmetro VIDAUTIL_CONSIDERA_DIAS_UTEIS para considerar ou não os finais de semana e datas comemorativas (datacomemorativa.idnferiado = 1)
      • Campo "% vida útil", decimal (arredondamento: QTD_CASAS_DECIMAIS_PORCENTAGEM e MODO_ARREDONDAMENTO_PORCENTAGEM)
        • O campo respeita as configurações dos parâmetros: 
          • ANDROID_CARD_PERCENTUAL_VIDAUTIL
          • ANDROID_CARRINHO_PERCENTUAL_VIDAUTIL
          • ANDROID_NEGOCIACAO_PERCENTUAL_VIDAUTIL
          • WEB_GRID_PERCENTUAL_VIDAUTIL
        • O campo é somente leitura, cujo valor exibido é o resultado da fórmula a seguir:
          • (lote.datafim (lote selecionado no item) - DATA ATUAL) / (lote.datafim (lote selecionado no item) - lote.datainicio (lote selecionado no item))* 100
            • O sistema valida o parâmetro VIDAUTIL_CONSIDERA_DIAS_UTEIS para considerar ou não os finais de semana e datas comemorativas (datacomemorativa.idnferiado = 1)
    • O sistema implementa o filtro de descontos do cache pelos campos:
      • PRODUTO_IDLOTE
        • A cláusula where dessa configuração é:
          • where desconto.idlote = ${lote selecionado na linha do item}

      • PRODUTO_IDFAIXAVIDAUTIL
        • A clausula where dessa configuração é:
          • where desconto.idfaixavidautil in (
            select idfaixavidautil from faixavidautil
            where (-- Comparando registros cadastrados com faixa de percentual
            percentualinical is not null
            and percentualfinal is not null
            and ${Campo "% vida útil"} >= percentualinical
            and  ${Campo "% vida útil"} <= percentualfinal)
            or (-- Comparando registros cadastrados com faixa de numero de dias
            numerodiasinicial is not null
            and numerodiasfinal is not null
            and ${Campo "Dias fim vida útil"} >= numerodiasinicial
            and  ${Campo "Dias fim vida útil"} <= numerodiasfinal)
            )

    • O parâmetro "CHAVE_UNICA_PRODUTOS_DUPLICADOS" implementa o valor configurado "idlote", para que a coluna de "Lote" possa servir como chave combinada para não permitir que múltiplos itens da pedidoproduto compartilhem as mesmas chaves combinadas, quando o parâmetro "HABILITAR_INCLUSAO_PRODUTO_DUPLICADO" estiver ativo

Validação de quantidade de Lote + Movimentação de quantidades de Lote

  • Pelo tools, opção 3, o sistema deve conta com tabela lotemovimento:
    • idlotemovimento: PK
    • idlote: FK para lote, not-null
    • quantidade: decimal(18,6), not-null
    • idnativo: byte, not-null, default 1
    • idnprocessado: byte, not-null, default 0
    • idpedidoproduto: fk para pedidoproduto, nullable
  • No pedido de venda,
    • O sistema não permite que o campo "Quantidade" seja inserido com valor maior que: o campo lote.quantidade do lote selecionado no item do pedido subtraído das movimentações negativas de lote ativas e não processadas, valor definido pela select a seguir:
      • select l.quantidade - (select sum(lm.quantidade) from lotemovimento lm where lm.idlote = l.idlote and lm.idnativo = 1 and lm.idnprocessado = 0 and lm.quantidade < 0) from lote l where idlote = ${lote selecionado no item}

    • Ao finalizar o pedido, o sistema persiste uma movimentação negativa de movimentação de lote com os seguintes valores:
      • idlotemovimento: nextval("seqpklotemovimento")
      • idlote: ${id do lote selecionado no item}
      • quantidade: pedidoproduto.quantidade where idpedidoproduto = ${id do pedidoproduto}
      • idnativo: 1
      • idnprocessado: 0
      • idpedidoproduto: ${id do pedidoproduto}







Estoque considerando previsão de entrada

DADOS GERAIS SOBRE O RECURSO

O sistema disponibiliza a opção de considerar estoque previsto para os itens, ou seja considerar no pedido de venda: o estoque atual somado com ordens de compra de produtos que ainda terão entrada no estoque em uma determinada data posterior. 

Para que isso seja possível, o requisito realiza a importação das ordens de produção existentes no ERP para o SFA, e exibe essas ordens na tela de pedido do SFA para o usuário.

Dessa forma, o usuário terá condições de saber quando determinado produto estará disponível para venda/entrega ao cliente, em que quantidade estará disponível, podendo assim negociar melhor os detalhes do pedido como a data da entrega, quantidades vendidas, etc.

Também é possível projetar uma Data de Faturamento do pedido baseado na data das ordens de entrada dos itens.

Importação de dados do ERP

Para que seja disponibilizado as ordens de compra/produção para o usuário visualizar, o banco de dados deve ser alimentado com esses registros, sendo assim cada ordem possui a informação da filial à qual pertence, os produtos e suas respectivas quantidades previstas para reposição, bem como a data prevista para essa reposição.

Essas informação são armazenadas na tabela ordemproducao e relacionadas a um tipo de estoque. Com essa combinação, a tabela estoque consulta as ordens de produção com o tipo de estoque selecionado pelo usuário e exibe em tela, no pedido.

Configuração de validação de Quantidade prevista

Para utilização do estoque com qualidade prevista dentro das Ordens de Produção é necessário ativar o parâmetro sim3g.pedido.qtde.prevista.idnValidaQtdePrevista em: Configuração > Geral  

Configuração de Busca Produto

Para listar na tela do pedido as ordens de compra vinculadas ao produto, é preciso antes ativar a configuração de busca ORDEM_PRODUCAO para filtrar corretamente o armazém vinculado às ordens de produção existentes.

Essa configuração é realizada  em: Configuração > Configuração Pedido > Busca Produto.

Quanto aos filtros para exibição das ordens de produção do produto, podem ser configuradas conforme o usuário desejar, como por exemplo por TIPOESTOQUE, ou LOCALFILIAL.

Configuração de Ícone Fixo

Para visualização da Ordem de Produção no pedido, será necessário ativar o Ícone correspondente ao fluxo, para que ele seja exibido na coluna de Categoria da Grid de Produtos.

Esta configuração é realizada em: Cadastro > Geral > Ícone.

Por tratar-se de um ícone fixo, não é necessário informar consulta e imagem, apenas ativa-lo e já será exibido nas Grid de produto, dentro do pedido:

Configuração de Data de previsão de Faturamento

Os usuários podem optar por ativar o campo de Data de previsão faturamento, e por meio das datas de entrada no estoque que são inseridas na ordem de produção, a aplicação automaticamente preenche este campo uma data que o estoque estará disponível para a venda real.

Essa configuração é realizada  em: Configuração > Configuração Pedido > Busca Cabeçalho ou Resumo. Isso vai depender de qual bloco o usuário deseja visualizar o campo.

Quando exibido o campo de Data Previsão Faturamento, a aplicação preenche esse campo automaticamente com a Data em que a quantidade de estoque poderá ser faturada, seja a data atual ou as datas de entrada de produto no estoque.

Por exemplo, o Estoque atual deste item está em 150 unidades e a venda realizada é de apenas 1 unidade, então como o estoque atual atende essa demanda, a Data prevista Faturamento pode ser a data atual

Porém se o usuário informar uma quantidade maior que o estoque atual, a aplicação irá consumir o estoque provisionado, projetando a data para a próxima entrada no estoque

Exibição das Ordens de Produção no Carrinho

Após a configuração, na tela de pedido, serão exibidas as ordens vinculadas à filial selecionada e aos produtos listados para venda e/ou adicionados ao carrinho de compras. Esta ordens serão consideradas válidas cuja data de entrega prevista seja igual ou superior à data atual no momento da importação.

Desta forma, quando o usuário abrir a Grid de produtos, na coluna "Categoria" o ícone correspondente as ordens de produção são exibidas para os produtos que tenham ordens validas:

Quando o usuário clicar no ícone  exibir uma pop-up listando as ordens de compra válidas:

Opcionalmente, será possível também visualizar no carrinho de compras em ambos os ambientes a quantidade total prevista para entrega dos produtos inseridos,

Essa opção é realizada pela configuração em: Configuração > Configuração Pedido > Produto > QUANTIDADE_PREVISTA_ENTRADA ativando os parâmetros filhos.

A Quantidade prevista é a soma de todas as quantidades das ordens de compra vinculadas ao produto que está no carrinho.

Também é possível validar o estoque permitido para a venda, ativando o parâmetro de validação de estoque configurando para que o Meu SFA não permitir vendas acima da quantidade prevista para entrega, ativando o parâmetro sim3g.pedido.qtde.prevista.idnValidaQtdePrevista em: Configuração > Geral  

Após essa configuração, agora é possível que o usuário faça vendas com previsões de estoque e faturamento apenas visualizando os campos diretos no pedido.


INTEGRAÇÃO - Importação de Ordens de Produção

Detalhamento técnico - Comportamento 

Importa para a tabela [ORDEMPRODUCAO] as ordens de produção existentes no ERP salvos na tabela [SC2];



TOTVS CRM SFA

PROTHEUS

Tipo TOTVS CRM SFA

Obrigatório

1

IDLOCALFILIAL

C2_FILIAL

INTEIRO

SIM

2

NUMEROPEDIDO

C2_NUM

VARCHAR

SIM

3

IDPRODUTO

C2_PRODUTO

INTEIRO

SIM

4

QUANTIDADE

C2_QUANT

NUMERIC

SIM

5

DATAINICIOORDEM

C2_EMISSAO

DATE

SIM

6

DATAFIMORDEM

C2_DATPRF

DATE

SIM

7

IDNATIVO

FIXO 1

INTEIRO

SIM

8

IDTIPOESTOQUE

C2_LOCAL

INTEIRO

SIM

Utiliza o filtro C2_DATRF = '' para importar apenas ordens de produção válidas;

Ordens antigas (datafimordem < data atual) salvas no banco podem ser excluídas ou atualizadas para IDNATIVO=0.

No comportamento anterior era importado o campo:

  1. C2_QUANT para ordemproducao.quantidade.

O campo C2_QUANT é a quantidade solicitada para produção;
O campo C2_QUJE é Quantidade ja entregue dessa solicitação.

Portando a quantidade prevista deve ser:

  1. ordemproducao.quantidade = C2_QUANT - C2_QUJE

APLICAÇÃO

Filtros de Busca no PedidoEngine

As opções de filtro direto e níveis agora possuem:

ORDEMPRODUTO.IDPRODUTO

ORDEMPRODUCAO.IDTIPOESTOQUE

ORDEMPRODUCAO.IDLOCALFILIAL

TIPOESTOQUE.SGLTIPOESTOQUE

TIPOESTOQUE.IDNATIVO

TIPOESTOQUE.IDNDISPONIVELPARAPEDIDO

OBS: o filtro de busca (and o.datafimordem >= CURRENT_DATE and o.idnativo=1), será sempre fixo, independente da configuração do pedidoengine;

Não havendo configuração específica no pedidoengine, segue abaixo a busca padrão:

SELECT o.numeropedido as Pedido,
       l.descricao     AS Filial,
		tp.descricao	as "Tipo Estoque"
       p.codigo,       AS Codigo,
       quantidade      AS Quantidade,
       datainicioordem AS "Data emissao",
       datafimordem    AS "Data prevista entrega"
FROM   ordemproducao o
       INNER JOIN produto p
               ON p.idproduto = o.idproduto
       INNER JOIN local l
               ON l.idlocal = o.idlocalfilial
		INNER JOIN tipoestoque tp
				ON tp.idtipoestoque = o.idtipoestoque
WHERE  o.idproduto in (select idproduto from tabelapecoproduto where
       idtabelapreco=tabela_preco_do_cabecalho)
       and o.datafimordem >= CURRENT_DATE
       and o.idnativo=1; 

Criação da configuração de Ícones Fixos

Detalhamento técnico - Comportamento 

Adicionado via Tools pela opção 18, a configuração de ícone na tabela [ICONE]:



MasterSALES


Obrigatório

1

DESCRICAO

Consulta Ordens de produção ativas no ERP

SIM

2

CODIGO

ORDEM_PRODUCAO

SIM

3

IMAGEM

SIM

4

SGLCONTEXTO

PRODUTO

SIM

5

IDNATIVO

0

SIM

6

IDNFIXO

1

SIM

Adicionar na tela de cadastro de ícones, a coluna Ícone Fixo referente ao campo [ICONE.IDNFIXO];

Se [ICONE.IDNFIXO] = 1 permite a edição em tela da coluna DESCRICAO apenas, demais campos não devem ser editáveis.

Na Exibição da Grid de Produtos e no Carrinho


Detalhamento técnico - Comportamento 

Exibe no grid de produtos da WEB e nas telas do mobile (Card, Carrinho e Negociação), campo referente à quantidade prevista;

A quantidade prevista é a soma de todas as quantidades das ordens de compra vinculadas ao produto que está no carrinho;

Para obter a soma da quantidade prevista deve ser utilizada a mesma configuração de busca padrão

O filtro de busca (datafimordem >= CURRENT_DATE AND idnativo=1) sempre é fixo, independente da configuração do pedidoengine;

Caso não haja configuração de busca, segue abaixo a consulta padrão para o campo ‘Quantidade Prevista’:

SELECT idproduto,
       Sum(quantidade) AS "quantidade prevista"
FROM   ordemproducao o
WHERE  idproduto=:produto_no_carrinho
       AND idlocalfilial = :filial_do_pedido  
       AND datafimordem >= CURRENT_DATE
       AND idnativo=1
GROUP  BY idproduto ;

Utilizado os campos:

WEB_GRID_QUANTIDADE_PREVISTA_ENTRADA

ANDROID_CARD_QUANTIDADE_PREVISTA_ENTRADA

ANDROID_CARRINHO_QUANTIDADE_PREVISTA_ENTRADA

ANDROID_NEGOCIACAO_QUANTIDADE_PREVISTA_ENTRADA

Validações de Parâmetros:


Detalhamento técnico - Comportamento 

Se o parâmetro HABILITAR_VALIDACAO_ESTOQUE = ATIVO, então:

    Valida se o parâmetro ‘sim3g.pedido.qtde.prevista.idnValidaQtdePrevista’ = ATIVO;

       Se ambos os parâmetros HABILITAR_VALIDACAO_ESTOQUE e ‘sim3g.pedido.qtde.prevista.idnValidaQtdePrevista’ estão ATIVOS, então:

         Realizar um cálculo para obter a QUANTIDADE TOTAL DISPONÍVEL (ESTOQUE ATUAL + QUANTIDADE PREVISTA);

A QUANTIDADE PREVISTA é o somatório das ordens de produção consultados pela configuração de busca produto > ORDEM_PRODUCAO

·     Por exemplo, se configurados filtros na consulta de ORDEM_PRODUCAO com as seguintes colunas:

    • ORDEMPRODUTO.IDPRODUTO
    • ORDEMPRODUCAO.IDTIPOESTOQUE
    • ORDEMPRODUCAO.IDLOCALFILIAL
    • OBS: o filtro de busca (AND o.idnativo = 1 AND o.datafimordem >= CURRENT_DATE) sempre será fixo.

A consulta seria realizada segundo a sql a seguir:

SELECT e.idproduto,
       e.quantidade
       + (SELECT Sum(quantidade)
          FROM   ordemproducao o
          WHERE  o.idproduto = e.idproduto
                 AND o.idlocalfilial = e.idlocalfilial
                 AND o.idtipoestoque = e.idtipoestoque
                 AND o.idnativo = 1
				 AND o.datafimordem >= CURRENT_DATE) AS quantidade_disponível
       FROM   estoque e
       WHERE  e.idproduto = :produto_no_carrinho
              AND e.idlocalfilial = :filial_cabecalho
              AND e.idtipoestoque = :tipo_estoque_item_carrinho;

Uma vez realizada a validação dos parâmetros e obtida a quantidade total disponível, essa passa a ser o valor referência para a validação de estoque, isto é:

      • Se QUANTIDADE VENDIDA > QUANTIDADE TOTAL DISPONÍVEL, bloqueia a venda para aquele produto;

Dadas as considerações acima, se o usuário digitar uma quantidade maior que a quantidade total disponível, exibir em tela um aviso com a mensagem:

     ‘Quantidade não permitida, pois é superior à quantidade total disponível. Quantidade total disponível (estoque + quantidade prevista = XXX)’

Segue abaixo, fluxograma da regra de validação de estoque:


Criação do campo tipo estoque no Banco de dados


Detalhamento técnico - Comportamento 

ALTER TABLE ordemproducao
ADD COLUMN idtipoestoque INT8 REFERENCES tipoestoque (idtipoestoque);

Data Previsão Faturamento

  1. Replicado o campo Data previsão faturamento do Cabeçalho para o Resumo.
    1. Preenche resumo com max(item.data previsão de faturamento)
    2. Validação do resumo: "Data não pode ser menor que data mínima de faturamento"
  2. O campo Data previsão faturamento do item segue a seguinte lógica:
    1. quantidade <= estoque_atual (sem somar ordemproducao), o campo deverá ser preenchido automaticamente com a data corrente, sob a CONDIÇÃO X
    2. quantidade > estoque_atual, o campo deverá ser preenchido automaticamente com a data mínima de faturamento* da ordemproducao que conterá a quantidade solicitada, sob a CONDIÇÃO X
    3. Validação: Data não pode ser menor que data mínima de faturamento
  3. "Data mínima de faturamento = Data da ordemproducao que conterá a quantidade solicitada"
  4. CONDIÇÃO X: Caso o usuário não tenha alterado a data de previsão de faturamento do item
    1. Caso o usuário tenha alterado o campo de Data de previsão de faturamento do item, e a data inserida pelo usuário for menor que a Data mínima de faturamento, então o sistema devera atualizar automaticamente o campo e informar o usuário (msg toast): "A data de faturamento do item foi recalculada automaticamente"






Fórmula e arredondamento de valores

DADOS GERAIS SOBRE O RECURSO

O sistema possui o campo de valor total de itens e valor total de resumo cuja implementação lógica é definida através de declaração de fórmulas, a partir da tela Configuração > Configuração pedido > Fórmulas.

Com essa configurações, ele pode definir como será exibido o valor para os campos totais de formula, incluindo em como será considerado o arredondamento utilizado para estes campos

ESCOPO FUNCIONAL

Fórmulas no contexto de Item

O registro do valor da fórmula para o contexto de produtos é a label "PROD_VALOR_TOTAL_FORMULA" referente ao valor total do item no carrinho, definido por meio de fórmula. Nos campos passíveis de comporem a definição dessa fórmula, estão presentes os seguintes registros:

Variável Descrição da variável
PROD_QUANTIDADE Campo referente ao valor informado no campo quantidade do produto
PROD_PRECO_VENDA Campo referente ao valor informado no campo preço de venda
PROD_VALOR_DESCONTO Campo referente ao valor informado no campo Desconto
PROD_PERCENTUAL_DESCONTO Campo referente ao valor informado no campo Percentual de Desconto
PROD_PRECO_BASE Campo referente ao valor  informado no campo preço base na Tabela de Preços
PROD_PRECO_ORIGINAL Campo  referente ao valor informado no campo Preço Base na Tabela de Preços
PROD_FATOR_EMBALAGEM Campo  referente ao valor  informado no campo fator embalagem, na Tabela produtoembalagem
PROD_VALOR_FLEX Campo  referente ao valor calculado em cima do flex gerado
PROD_VALOR_TOTAL_COM_IMPOSTO Campo  referente ao valor calculado com impostos
PROD_VALOR_TOTAL Campo referente ao valor total do produto
PROD_VALOR_TOTAL_DESCONTO Campo referente ao valor calculado com o desconto informado
VALOR_TOTAL_FORMULA Campo referente  ao valor total do pedido composto também por SOMA_PROD_VALOR_TOTAL_FORMULA, referente ao somatório do valor definido pela fórmula PROD_VALOR_TOTAL_FORMULA

Com estes campos, o usuário pode definir uma fórmula para o cálculo da coluna "Valor da fórmula" exibida no carrinho para os itens acessando a tela Configuração > Configuração pedido > Fórmulas e Editando o registro PROD_VALOR_TOTAL_FORMULA.

Por exemplo:

Para representação do campo de itens em tela, é utilizado a configuração de campo chamado "VALOR_TOTAL_FORMULA" na tela Configuração > Configuração pedido > Produto, que fará relação com campo no contexto de itens, de label "Valor total fórmula". 

No exemplo, a fórmula utilizada é a PROD_PRECO_VENDA * PROD_QUANTIDADE que será exibida no item, da seguinte forma:

Fórmulas no contexto de Resumo

As configurações para as fórmulas para o contexto de Resumo são bem similares ao contexto de itens, porém é utilizado o registro VALOR_TOTAL_FORMULA

Nas configurações, o usuário pode utilizar das variáveis disponíveis, por exemplo:

O resultado da fórmula será exibido no Resumo do pedido, no campo "Valor total fórmula" que pode ser ativado na tela Configuração > Configuração pedido > Resumo.

Método de arredondamento nas Fórmulas

Na declaração de fórmulas, é possível utilizar função ROUND(Valor numérico, modo arredondamento, quantidade casas decimais) que é responsável por arredondar o "valor numérico" em quantas casas decimais forem definidas no parâmetro "quantidade casas decimais", utilizando o modo de arredondamento declarado no parâmetro "modo arredondamento", cujas opções aceitáveis é o: 

  • UP,
  • DOWN,
  • CEILING,
  • FLOOR,
  • HALF_UP,
  • HALF_DOWN,
  • HALF_EVEN,
  • UNNECESSARY,

segundo a documentação https://docs.oracle.com/javase/7/docs/api/java/math/RoundingMode.html .Dessa forma, o sistema interpreta, por exemplo, as seguintes fórmula:

  • PROD_VALOR_TOTAL_FORMULA = ROUND(PROD_PRECO_VENDA,'HALF_UP',2) * QUANTIDADE

ou

  • VALOR_TOTAL_FORMULA = SOMA_PROD_VALOR_TOTAL_FORMULA

Onde "ROUND" é a função do arredondamento, e dentro dos "( _ )" são informados a variável e o número de casas decimais que serão considerados para a formula.

Exemplo:

PROD_PRECO_VENDA=9.1085 e PROD_QUANTIDADE=20

Então a Fórmula seria: ROUND(PROD_PRECO_VENDA), HALF_UP, 2) * PROD_QUANTIDADE

Então: ROUND(9.1085), HALF_UP, 2) * 20 = 9.11 * 20 = 182.2

Resultado exibido no campo "Valor total fórmula" = R$ 182,20

ESCOPO TÉCNICO

Banco de dados

  • Pelo tools, opção 5, o sistema adiciona o seguinte registro à tabela wsconfigpedidoformula, sendo:
    • INSERT INTO wsconfigpedidoformula (idwsconfigpedidoformula,identificador,descricao,formula,idnativo,contexto,codigoerp,wsversao) VALUES
      (nextval('seqpkwsconfigpedidoformula'),'PROD_VALOR_TOTAL_FORMULA','Valor total do item do pedido, calculado por fórmula','PRECOVENDA * QUANTIDADE',1,'NEGOCIACAO',NULL,7)

  • Pelo tools, opção 5, o sistema adiciona o seguinte registro à tabela wsconfigpedidoproduto, sendo:
    • INSERT INTO wsconfigpedidoproduto (idwsconfigpedidoproduto,chave,"label",linha,coluna,idnvisivel,idneditavel,codigoerp,idnexiberelatorio,idnobrigatorio) VALUES
      (nextval('seqpkwsconfigpedidoproduto'),'WEB_GRID_VALOR_TOTAL_FORMULA','standard.pedidoconfig.item.valortotalformula',0,0,0,0,NULL,0,0),
      (nextval('seqpkwsconfigpedidoproduto'),'ANDROID_CARD_VALOR_TOTAL_FORMULA','standard.pedidoconfig.item.valortotalformula',0,0,0,0,NULL,0,0),(nextval('seqpkwsconfigpedidoproduto'),'ANDROID_CARRINHO_VALOR_TOTAL_FORMULA','standard.pedidoconfig.item.valortotalformula',0,0,0,0,NULL,0,0),(nextval('seqpkwsconfigpedidoproduto'),'ANDROID_NEGOCIACAO_VALOR_TOTAL_FORMULA','standard.pedidoconfig.item.valortotalformula',0,0,0,0,NULL,0,0)

  • Pelo tools, opção 3, o sistema adiciona a seguinte coluna à tabela pedidoproduto: 
    • valortotalformula: decimal(18,6), nullable

Tela de configuração de campos de produto

  • Na tela Configuração > Configuração pedido > produto, o sistema foi implementado os registros criados pelo tools referentes aos códigos:
      • WEB_GRID_VALOR_TOTAL_FORMULA
      • ANDROID_CARD_VALOR_TOTAL_FORMULA
      • ANDROID_CARRINHO_VALOR_TOTAL_FORMULA
      • ANDROID_NEGOCIACAO_VALOR_TOTAL_FORMULA
    • O campo "editável" não é implementado, visto que o campo de destino é somente leitura,
      • Como valor do campo, o sistema traz o caractere "-"

Tela de configuração de fórmulas

  • Na tela Configuração > Configuração pedido > Fórmulas,
    • O sistema foi implementado, na grid, a visualização do registro referente ao código PROD_VALOR_TOTAL_FORMULA:
      • Ao editar o registro, o sistema exibe na seção "Variáveis" os seguintes registros:
        • PROD_QUANTIDADE, referente ao valor lógico do campo WEB_GRID_QUANTIDADE
        • PROD_PRECO_VENDA, referente ao valor lógico do campo WEB_GRID_PRECO_VENDA
        • PROD_VALOR_DESCONTO, referente ao valor lógico do campo WEB_GRID_VALOR_DESCONTO
        • PROD_PERCENTUAL_DESCONTO, referente ao valor lógico do campo WEB_GRID_PERCENTUAL_DESCONTO
        • PROD_PRECO_BASE, referente ao valor lógico do campo WEB_GRID_PRECO_TABELA (persistido em pedidoproduto.precooriginal)
        • PROD_PRECO_ORIGINAL, referente ao valor retornado pela busca de tabelaprecoproduto referente ao item (persistido em pedidoproduto.precotabela)
        • PROD_FATOR_EMBALAGEM, referente ao valor lógico do campo WEB_GRID_FATOR_EMBALAGEM
        • PROD_VALOR_FLEX, referente ao valor lógico do campo WEB_GRID_VALOR_FLEX
        • PROD_VALOR_TOTAL_COM_IMPOSTO, referente ao valor lógico do campo WEB_GRID_VALOR_TOTAL_COM_IMPOSTO
        • PROD_VALOR_TOTAL, referente ao valor lógico do campo WEB_GRID_VALOR_TOTAL
        • PROD_VALOR_TOTAL_DESCONTO, referente ao valor lógico do campo VALOR_TOTAL_DESCONTO
    • Ao editar o registro de VALOR_TOTAL_FORMULA, o sistema adiciona na seção "Variáveis" o seguinte registro:
      • SOMA_PROD_VALOR_TOTAL_FORMULA, referente ao campo resultante da fórmula de código SOMA_PROD_VALOR_TOTAL_FORMULA

Arredondamento de valores via fórmula

  • Na tela de edição de fórmula (Configuração > Configuração pedido > Fórmulas > Editar)
    • O sistema exibe nova seção de título "Funções", que exibe grid com as seguintes colunas:
        • "Função": Campo textual, somente leitura
        • "Descrição": Campo textual, somente leitura
        • "Exemplo": Campo textual, somente leitura
      • Nessa grid, o sistema traz os seguintes registros:


        Função

        Descrição

        Exemplo

        ROUND(valor numérico, modo arredondamento, quantidade casas decimais)

        Função responsável por retornar o ${valor numérico} arredondado em ${quantidade casas decimais} casas decimais, utilizando o modo de arredondamento de código ${modo arredondamento}.

        Valores aceitáveis para o parâmetro "modo arredondamento": UP,DOWN,CEILING,FLOOR,HALF_UP,HALF_DOWN,HALF_EVEN,UNNECESSARY, conforme documentação https://docs.oracle.com/javase/7/docs/api/java/math/RoundingMode.html

        Se
        PRECO_VENDA=9.1085,
        QUANTIDADE=20

        Fórmula: ROUND(PRECOVENDA), HALF_UP, 2) * QUANTIDADE

        Então: ROUND(9.1085), HALF_UP, 2) * 20 = 9.11 * 20 = 182.2

  • O cálculo de fórmulas considera a nova função de código ROUND(valor numérico, modo arredondamento, quantidade casas decimais)

Implementação no pedido

  • No pedido de venda,
    • No contexto de itens,
      • O sistema implementa a visualização dos campos de código:
          • WEB_GRID_VALOR_TOTAL_FORMULA: valor numérico, somente leitura
          • ANDROID_CARD_VALOR_TOTAL_FORMULA: valor numérico, somente leitura
          • ANDROID_CARRINHO_VALOR_TOTAL_FORMULA: valor numérico, somente leitura
          • ANDROID_NEGOCIACAO_VALOR_TOTAL_FORMULA: valor numérico, somente leitura
        • O valor exibido pelos campos dos códigos acima é resultante da fórmula cadastrada de código "PROD_VALOR_TOTAL_FORMULA", considerando a implementação da função ROUND
          • A persistência do valor é realizada no campo pedidoproduto.valortotalformula
        • A label padrão dos campos dos códigos acima é "Valor total fórmula"
    • No resumo, no campo de código VALOR_TOTAL_FORMULA
      • O valor exibido do campo é resultante da fórmula cadastrada de código "VALOR_TOTAL_FORMULA", considerando a implementação da função ROUND

Espelho do pedido

  • No relatório de espelho do pedido,
    • O sistema representa os seguintes campos do pedido:
      • Configuração > Configuração pedido > Produto > WEB_GRID_VALOR_TOTAL_FORMULA
        • O valor do campo é obtido pelo campo pedidoproduto.valortotalformula
      • Configuração > Configuração pedido > Resumo > VALOR_TOTAL_FORMULA
        • O valor do campo é obtido pelo campo pedido.valortotalformula
      • Configuração > Configuração pedido > Resumo > VALOR_DESCONTO_RESUMO
        • O valor do campo é obtido pelo campo pedido.valordescontoresumo
      • Configuração > Configuração pedido > Resumo > PERCENTUAL_DESCONTO_RESUMO
        • O valor do campo é obtido pelo campo pedido.percdescontoresumo






Moedas simultâneas no pedido

DADOS GERAIS SOBRE O RECURSO

O sistema tem a possibilidade de converter a moeda associada à tabela de preço para a moeda selecionada no cabeçalho que será aplicada no pedido, convertendo os valores da cotação selecionada também no cabeçalho.

Ou seja, A tabela de preço é definida com uma moeda padrão, porém o usuário pode realizar pedidos com outra moeda e automaticamente será realizado a conversão de valores, conforme uma cotação para o indexador do dia.

Configuração

Na Tabela de preço, pode ser definido qual será a moeda referente aos valores dos produtos, dessa forma já é configurado os seus valores considerando este indexador específico. Por exemplo:

Para que seja exibido os campos de Moeda (indexador) no pedido, é necessário realizar a configuração destes campos. Na tela Configuração > Configuração Pedido > Busca Cabeçalho o usuário pode ativar os seguintes campos:

Entidade Descrição
MOEDA Campo selecionável para que o usuário defina a moeda que será aplicada no pedido
MOEDAORIGEM Campo não editável que exibe a moeda origem da Tabela de Preço
COTACAO_INDEXADOR Campo selecionável para que o usuário defina qual será a cotação que será utilizada neste pedido, para a conversão de valores da moeda da tabela de preço para a moeda do pedido

Quanto aos filtros e níveis, são configurados assim como os outros campos, permitindo que o usuário defina as entidades e sequencias que ocorrerão as validações de cada campo.

Na tela Configuração > Configuração Pedido > Resumo, também é disponibilizado campos para exibição dos valores com a conversão das moedas.

Campos Descrição
VALOR_FATURADO_MOEDAORIGINAL Campo que exibe a conversão dos valores considerando o campo pedido.valorfaturado
VALOR_PENDENTE_MOEDAORIGINAL Campo que exibe a conversão dos valores considerando o campo pedido.valorpendente
VALOR_TOTAL_BRUTO_MOEDAORIGINAL Campo que exibe a conversão dos valores considerando o campo de Valor total Bruto do pedido
VALOR_TOTAL_LIQUIDO_MOEDAORIGINAL Campo que exibe a conversão dos valores considerando o campo de Valor total Liquido do pedido
VALOR_TOTAL_DESCONTOS_MOEDAORIGINAL Campo que exibe a conversão dos valores considerando o campo de Valor Total de Descontos que incidiram no pedido
VALOR_TOTAL_COM_IMPOSTOS_MOEDAORIGINAL Campo que exibe a conversão dos valores considerando o campo de Valor com Impostos do pedido
VALOR_DESCONTO_RESUMO_MOEDAORIGINAL Campo que exibe a conversão dos valores considerando o campo de Valor de Descontos que incidiram no pedido
VALOR_TOTAL_FORMULA_MOEDAORIGINAL Campo que exibe a conversão dos valores considerando o campo pedido.valortotalformula

Conversão de Moeda no Pedido

Ao realizar o pedido, o Profissional informa campo Tabela de Preço e automaticamente é preenchido o campo Moeda origem cujo comportamento de tela é associado ao meta dado de código "MOEDAORIGEM". Por exemplo:

Em seguida, o usuário poderá informar o campo Moeda, que corresponde a moeda que será utilizada no pedido, e a Cotação do Indexador, que é o valor de conversão da Moeda Origem para a Moeda utilizada no pedido.

E Desta forma, o produto será exibido na Moeda do pedido, porém no Resumo será exibido as informações de ambas as moedas

Para que o usuário possa visualizar tanto os valores sem conversão, quanto os valores convertidos, o sistema exibe os campos monetários do resumo de pedidos desta forma.

 ESCOPO TÉCNICO

Banco de dados

  • Pelo tools, opção 3, o sistema cria o seguinte campo na tabela cotacaoindexador:
    • idindexadororigem: FK para tabela indexador, nullable
  • Pelo tools, opção 18, o sistema cria registro na tabela wsconfigpedidocampo:
contexto nomeentidade label idnativo idnvisivel idneditavel idneditavelcomitens idnobrigatorio idnunion ordem codigoerp idnexiberelatorio
CABECALHO

MOEDAORIGEM

"Moeda Origem" 0 1 1 1 1 0 22
0
  • Pelo tools, opção 18, o sistema cria registro na tabela wsconfigpedidoresumo:
chave label ordem idnvisivel idnobrigatorio codigoerp idnexiberelatorio idneditavel
VALOR_FATURADO_MOEDAORIGINAL
0 0 0
0 0
VALOR_PENDENTE_MOEDAORIGINAL
0 0 0
0 0
VALOR_TOTAL_BRUTO_MOEDAORIGINAL
0 0 0
0 0
VALOR_TOTAL_LIQUIDO_MOEDAORIGINAL
0 0 0
0 0
VALOR_TOTAL_DESCONTOS_MOEDAORIGINAL
0 0 0
0 0
VALOR_TOTAL_COM_IMPOSTOS_MOEDAORIGINAL
0 0 0
0 0
VALOR_DESCONTO_RESUMO_MOEDAORIGINAL
0 0 0
0 0
VALOR_TOTAL_FORMULA_MOEDAORIGINAL
0 0 0
0 0

Telas de configuração

Na tela Configuração > Configuração Pedido > Busca Cabeçalho,

    • Implementado novo registro MOEDAORIGEM,
      • A coluna "Editável" e "Editável com Itens" não deve ter ação para esse registro, recebendo o valor "-"

Na tela Configuração > Configuração Pedido > Resumo,

    • Implementado novos registros:
VALOR_FATURADO_MOEDAORIGINAL
VALOR_PENDENTE_MOEDAORIGINAL
VALOR_TOTAL_BRUTO_MOEDAORIGINAL
VALOR_TOTAL_LIQUIDO_MOEDAORIGINAL
VALOR_TOTAL_DESCONTOS_MOEDAORIGINAL
VALOR_TOTAL_COM_IMPOSTOS_MOEDAORIGINAL
VALOR_DESCONTO_RESUMO_MOEDAORIGINAL
VALOR_TOTAL_FORMULA_MOEDAORIGINAL

A coluna "Editável" não deve ter ação para esse registro, recebendo o valor "-"

Implementação no pedido

Nos ambientes Web/Android, no pedido de venda

  • No cabeçalho,
      • Criado campo Moeda Origem no cabeçalho, cujo comportamento de tela é associado ao meta dado de código "MOEDAORIGEM"
        • O valor do campo será fixo, trazido do campo de banco de dados tabelapreco.idindexador referente à tabela de preço selecionada no cabeçalho.
      • Na pesquisa de opções selecionáveis do campo cotacaoindexador,
        • Na cláusula associada ao registro "INDEXADOR_IDINDEXADOR",
          • O sistema altera o filtro para:

/* select * from cotacaoindexador
    where (idindexador = ${indexador selecionado no cabeçalho}
        or idindexador = ${indexador selecionado no cabeçalho})
        and (idindexador = ${indexador origem}
        or idindexador = ${indexador origem})

Nos itens,

  • Na pesquisa do campo tabela preço dos itens:
    • Aplica filtro fixo (Restrição AND com filtros do Engine) para trazer apenas tabelas de preço cujo campo tabelapreco.idindexador seja o mesmo do campo "Moeda Origem"
  • No cálculo do preço de tabela:
    • Caso o campo cotacaoindexador.idindexadororigem for igual ao campo de tela "Moeda origem" e o campo cotacaoindexador.idindexador for igual ao campo de tela "Moeda"
      • O sistema continua multiplicando o preço da tabela tabelaprecoproduto pela fator do campo cotacaoindexador.valor 
    • Caso o campo cotacaoindexador.idindexadororigem for igual ao campo de tela "Moeda" e o campo cotacaoindexador.idindexador for igual ao campo de tela "Moeda origem"
      • O sistema realiza a divisão do preço da tabela tabelaprecoproduto pela fator do campo cotacaoindexador.valor 

No resumo,

  • Implementado novos elementos de tela referentes aos seguintes registros de meta dados:
VALOR_FATURADO_MOEDAORIGINAL

Campo implementa associado à visualização do campo VALOR_FATURADO, da seguinte forma:

Valor faturado: ${Cifrão da moeda associada à tabela de preço} ${Valor convertido à moeda associada à tabela de preço} / ${Cifrão da moeda selecionada no cabeçalho} ${Valor convertido à moeda selecionada no cabeçalho}

VALOR_PENDENTE_MOEDAORIGINAL

Campo implementa associado à visualização do campo VALOR_PENDENTE, da seguinte forma:

Valor pendente: ${Cifrão da moeda associada à tabela de preço} ${Valor convertido à moeda associada à tabela de preço} / ${Cifrão da moeda selecionada no cabeçalho} ${Valor convertido à moeda selecionada no cabeçalho}

VALOR_TOTAL_BRUTO_MOEDAORIGINAL

Campo implementa associado à visualização do campo VALOR_TOTAL_BRUTO, da seguinte forma:

Valor total bruto: ${Cifrão da moeda associada à tabela de preço} ${Valor convertido à moeda associada à tabela de preço} / ${Cifrão da moeda selecionada no cabeçalho} ${Valor convertido à moeda selecionada no cabeçalho}

VALOR_TOTAL_LIQUIDO_MOEDAORIGINAL

Campo implementa associado à visualização do campo VALOR_TOTAL_LIQUIDO, da seguinte forma:

Valor total liquido: ${Cifrão da moeda associada à tabela de preço} ${Valor convertido à moeda associada à tabela de preço} / ${Cifrão da moeda selecionada no cabeçalho} ${Valor convertido à moeda selecionada no cabeçalho}

VALOR_TOTAL_DESCONTOS_MOEDAORIGINAL

Campo implementa associado à visualização do campo VALOR_TOTAL_DESCONTOS, da seguinte forma:

Valor total descontos: ${Cifrão da moeda associada à tabela de preço} ${Valor convertido à moeda associada à tabela de preço} / ${Cifrão da moeda selecionada no cabeçalho} ${Valor convertido à moeda selecionada no cabeçalho}

VALOR_TOTAL_COM_IMPOSTOS_MOEDAORIGINAL

Campo implementa associado à visualização do campo VALOR_TOTAL_COM_IMPOSTOS, da seguinte forma:

Valor total com impostos: ${Cifrão da moeda associada à tabela de preço} ${Valor convertido à moeda associada à tabela de preço} / ${Cifrão da moeda selecionada no cabeçalho} ${Valor convertido à moeda selecionada no cabeçalho}

VALOR_DESCONTO_RESUMO_MOEDAORIGINAL

Campo implementa associado à visualização do campo VALOR_DESCONTO_RESUMO, da seguinte forma:

Valor desconto resumo: ${Cifrão da moeda associada à tabela de preço} ${Valor convertido à moeda associada à tabela de preço} / ${Cifrão da moeda selecionada no cabeçalho} ${Valor convertido à moeda selecionada no cabeçalho}

VALOR_TOTAL_FORMULA_MOEDAORIGINAL

Campo implementa associado à visualização do campo VALOR_TOTAL_FORMULA, da seguinte forma:

Valor total fórmula: ${Cifrão da moeda associada à tabela de preço} ${Valor convertido à moeda associada à tabela de preço} / ${Cifrão da moeda selecionada no cabeçalho} ${Valor convertido à moeda selecionada no cabeçalho}

O cálculo do valor monetário associado à moeda de origem deve ser feito da seguinte forma:

  • Caso o campo cotacaoindexador.idindexadororigem for igual ao campo de tela "Moeda origem" e o campo cotacaoindexador.idindexador for igual ao campo de tela "Moeda"
    • O sistema realiza a divisão do valor monetário de referência pelo fator do campo cotacaoindexador.valor 
  • Caso o campo cotacaoindexador.idindexadororigem for igual ao campo de tela "Moeda" e o campo cotacaoindexador.idindexador for igual ao campo de tela "Moeda origem"
    • O sistema realiza a multiplicação do valor monetário de referência pela fator do campo cotacaoindexador.valor 

Prazo para Data de Entrega no Pedido

DADOS GERAIS SOBRE O RECURSO

O Sistema contém uma configuração específica para definir uma data de Entrega para os pedidos.

Desta forma os usuários configuram regras para gerar um prazo em dias para que sejam calculado prazo para entrega.

Prazo de Entrega

A configuração é realizada em "Configuração > Configuração Pedido > Prazo de Entrega"

Campo Descrição
Cliente Campo que determina se a regra criada considera um cliente específico, para validação
Cidade Origem Campo que determina se a regra criada considera a cidade origem do pedido, ou seja o endereço da Filial, para validação
Cidade Destino Campo que determina se a regra criada considera a cidade Destino do pedido, ou seja o endereço do Cliente, para validação
UF Origem Campo que determina se a regra criada considera a Unidade Federativa origem do pedido, ou seja o endereço da Filial, para validação
UF Destino Campo que determina se a regra criada considera a Unidade Federativa Destino do pedido, ou seja o endereço do Cliente, para validação
Filial Campo que determina se a regra considera a Filial selecionada no pedido, para validação
Segmento Campo que determina se a regra considera o Segmento selecionado no pedido, para validação
Dias para entrega Campo que determina quantos dias será considerados para determinar o prazo de entrega do pedido
Tipo Prazo Campo que determina se o cálculo será feito sobre dias corridos, ou dias úteis (desconsiderando finais de semana e feriados)

Além disso, há critérios de busca dos prazos de entrega em níveis, por exemplo:

  1. Busca os prazos por Cliente
  2. Se não encontrar, busca os prazos por UF Origem / UF Destino

No pedido de venda, a partir da busca configurada acima, o sistema trás o campo "Data entrega" automaticamente preenchido segundo o contexto do pedido.

Caso o campo "Data entrega" seja configurado como editável, e o usuário poderá alterá-lo manualmente, o sistema apenas restringi que o prazo de entrega mínimo não seja infringido, ou seja, que o campo não possa ser inferior à data de entrega calculada automaticamente.

Configuração de Busca

Na tela Configuração > Configuração Pedido > Busca entrega, o sistema possui a configuração de níveis e filtros gerais e a validação será aplicada conforme definida nessas configurações.

No Primeiro ícone, de "Validação" o usuário define a regra que será considerada, que para o fluxo de "Prazo de Entrega" deve ser selecionado "Data mínima: busca prazo de entrega"

Observação: Se o usuário escolher as outras opções, como Data mínima com Valor de Dias, entra em outro fluxo de validações, e não considera as regras criadas no Menu "Prazo de Validade", calculando apenas os dias informados manualmente nesta tela

No Segundo ícone, de "Níveis", a configuração segue conforme é realizado para outros campos, onde o usuário define níveis de validação para a Entidade Prazoentrega, como PARCEIRO_IDPARCEIRO, CIDADEORIGEM_IDCIDADE e outros.

Ainda nas configurações, no ícone "Filtros Diretos" o usuário define os campos que serão considerados na validação, como também se a regra poderá conter valor nulo para incidir no pedido. Por exemplo:

Para este caso, todos os campos estão sendo considerados na validação e nenhum campo poderá ser nulo para que a regra seja incidida no pedido.

Prazo de entrega no Pedido

Após configurado as regras de validação, quando o campo DATA_ENTREGA estiver ativo no pedido, a Data de Entrega é gerada automaticamente.

Lembrando que se o campo permitir edição o usuário pode altera-lo, porém não poderá informar uma data menor que o prazo definido na regra. Ao finalizar o pedido, é exibido a mensagem para que será corrigido e informado uma data válida:

Desta forma, as datas de entrega são validadas corretamente no pedido.

Escopo Técnico

1. Banco de dados

  • Pelo tools, opção 3, o sistema adiciona as seguintes colunas na tabela prazoentrega:
    • idparceiro: FK para tabela parceiro, nullable
  • Pelo tools, opção 3, na tabela prazoentrega, o sistema torna a coluna idlocalfilial nullable

2. Telas de cadastro

  • Abaixo do menu Configuração > Configuração Pedido, o sistema recebe tela de cadastro, de nome "Prazo Entrega",
    • A tela contém grid contendo as seguintes colunas:
      • "Cliente": campo seleção, cujas opções selecionáveis são os parceiros ativos do sistema. 
        • Persistência no campo prazoentrega.idparceiro
      • "Cidade Origem": campo seleção, cujas opções selecionáveis são as cidades ativas do sistema.
        • Caso selecionada alguma opção no campo "UF Origem", o sistema filtra as seleções do presente campo segundo a consulta:
          • /* select idcidade, descricao from cidade where idunidadefederativa = "ID da UF Origem selecionada" and idnativo = 1 */

        • Persistência no campo prazoentrega.idcidadeorigem
      • Cidade Destino
        • Caso selecionada alguma opção no campo "UF Destino", o sistema filtra as seleções do presente campo segundo a consulta:
          • /* select idcidade, descricao from cidade where idunidadefederativa = "ID da UF Destino selecionada" and idnativo = 1 */

        • Persistência no campo prazoentrega.idcidadedestino
      • "UF Origem": campo seleção, cujas opções selecionáveis são as unidades federativas ativas do sistema
        • Caso selecionada alguma opção no campo "Cidade Origem", o sistema filtra as seleções do presente campo segundo a consulta:
          • /* select
                uf.idunidadefederativa, uf.descricao
            from cidade c
            inner join unidadefederativa uf on uf.idunidadefederativa = c.idunidadefederativa
            where c.idcidade = "ID da Cidade Origem selecionada"
            and uf.idnativo = 1 */

        • Persistência no campo prazoentrega.idunidadefedorigem
      • "UF Destino"; campo seleção, cujas opções selecionáveis são as unidades federativas ativas do sistema
        • Caso selecionada alguma opção no campo "Cidade Destino", o sistema filtra as seleções do presente campo segundo a consulta:
          • /* select
                uf.idunidadefederativa, uf.descricao
            from cidade c
            inner join unidadefederativa uf on uf.idunidadefederativa = c.idunidadefederativa
            where c.idcidade = "ID da Cidade Destino selecionada"
            and uf.idnativo = 1 */

        • Persistência no campo prazoentrega.idunidadefeddestino
      • "Filial": campo seleção, cujas opções selecionáveis são as filiais ativas do sistema, segundo a consulta:
        • /* select l.idlocal from local l
          inner join localtipolocal ltl on ltl.idlocal = l.idlocal
          inner join tipolocal tl on tl.idtipolocal = ltl.idtipolocal
          where tl.sgltipolocal = "UEM"
          */

        • Persistência no campo prazoentrega.idlocalfilial
      • "Segmento": campo seleção, cujas opções selecionáveis são os segmentos ativos do sistema
        • Persistência no campo prazoentrega.idsegmento
      • "Dias para entrega": Campo numérico editável, aceitando valores inteiros positivos
        • Persistência no campo prazoentrega.prazo
      • "Tipo Prazo": campo drop-down, com as seguintes opções fixas:
          • "Dias corridos": valor "DIASCORR"
          • "Dias úteis": valor "DIASUTEIS"
        • Persistência no campo prazoentrega.sgltipoprazo
      • Persistir o campo prazoentrega.sgltipoentrega como "ENT" de maneira fixa.

3. Configuração de busca

  • Na tela Configuração > Configuração Pedido > Busca entrega, o sistema abre configuração os ícones de níveis e filtros gerais,
    • A tabela de origem da busca será a tabela prazoentrega, olhando para o universo de registros marcados como "ENT" no campo prazoentrega.sgltipoentrega
      • Não haverá outra tabela associada para join na busca por níveis.
    • Na última tela (Filtros), serão selecionáveis as seguintes opções no campo "Nome":
        • PARCEIRO_IDPARCEIRO: Parceiro selecionado no pedido
          • Texto de ajuda: 
            • -- Parceiro selecionado no pedido
              where prazoentrega.idparceiro = ${Identificador do parceiro selecionado no pedido}

        • CIDADEORIGEM_IDCIDADE: Cidade da filial de venda selecionada no pedido
          • Texto de ajuda:
            • -- Cidade da filial de venda selecionada no pedido
              where prazoentrega.idcidadeorigem = (select idcidade from local where idlocal = ${Identificador da filial selecionada no pedido})

        •  CIDADEDESTINO_IDCIDADE: Cidade do local do cliente selecionado no pedido
          • Texto de ajuda:
            • -- Cidade do local do cliente selecionado no pedido
              where prazoentrega.idcidadedestino = (select idcidade from local where idlocal = ${Identificador do local selecionado no pedido})

        • UFORIGEM_IDUNIDADEFEDERATIVA: Unidade federativa da cidade da filial de venda selecionada no pedido
          • Texto de ajuda:
            • -- Unidade federativa da cidade da filial de venda selecionada no pedido
              where prazoentrega.idunidadefedorigem = (select idunidadefederativa from cidade where idcidade = (select idcidade from local where idlocal = ${Identificador da filial selecionada no pedido}))

        • UFDESTINO_IDUNIDADEFEDERATIVA: Unidade federativa da cidade do local selecionado no pedido
          • Texto de ajuda:
            • -- Unidade federativa da cidade do local selecionado no pedido
              where prazoentrega.idunidadefeddestino = (select idunidadefederativa from cidade where idcidade = (select idcidade from local where idlocal = ${Identificador do local selecionado no pedido}))

        • FILIAL_IDLOCAL
          • Texto de ajuda: Filial de venda selecionada no pedido
            • -- Filial de venda selecionada no pedido
              where prazoentrega.idlocalfilial = ${Identificador da filial selecionada no pedido}

        • SEGMENTO_IDSEGMENTO: Segmento selecionado no pedido
          • Texto de ajuda:
            • -- Segmento selecionado no pedido
              where prazoentrega.idsegmento = ${Identificador do segmento selecionado no pedido}))

4. Implementação no pedido

  • No pedido de venda, 
    • No campo "Data entrega",
      • O sistema preenche automaticamente o campo mediante a busca definida pela configuração referente ao ponto 3, adicionando o prazo de entrega resultante da consulta à data atual (current_date + prazoentrega.prazo)
        • Caso o registro de prazo de entrega retornado pela busca configurada no ponto 3 esteja com sgltipoprazo = 'DIASCORR', o sistema adiciona o prazo do campo prazoentrega.prazo à data corrente, sem desconsiderar finais de semanas e feriados.
          • (CURRENT_DATE + {prazoentrega.prazo})
        • Caso o registro de prazo de entrega retornado pela busca configurada no ponto 3 esteja com sgltipoprazo = 'DIASUTEIS', o sistema adiciona o prazo do campo prazoentrega.prazo à data corrente, desconsiderando finais de semanas e feriados.
          • (CURRENT_DATE + {prazoentrega.prazo} + contagem de feriados e finais de semana entre current_date e data final)
          • Os feriados do sistema são considerados a partir da consulta a seguir:
            • /* select * from datacomemorativa where idnferiado = 1

            • A entidade feriado não é utilizada atualmente pelo sistema e pode ser depreciada em código-fonte.
      • Caso o usuário edite o campo manualmente, o sistema valida somente ao finalizar o pedido que a data do campo seja maior ou igual que a data definida pela consulta acima.
        • Caso seja maior ou igual, o sistema deve permitir a finalização no pedido
        • Caso contrário, o sistema realiza Rollback, retornando a seguinte mensagem: a data de entrega mínima deva ser ${Data retornada pelo calculo current_date + prazoentrega.prazo retornado pela consulta}














Plugin de integração "Simulação de Impostos"

DADOS GERAIS SOBRE O RECURSO

O sistema disponibiliza o plugin de nome "Simulação de impostos", onde o usuário terá a possibilidade de visualizar os impostos que serão gerados no pedido, tendo uma visão mais precisa dos valores.

A configuração é realizada nas configurações > Integração > Plugins de integração.

  • Antes de realizar as configurações de impostos é preciso validar as configurações gerais, afim de garantir que a aplicação possui os acessos ao "Carte", veja o material: 

Configuração do serviço de integração Pentaho Carte



Configuração do Plugin

Nas configurações do Plugin, o usuário realiza o cadastro dos dados confirme a sua necessidade:


Campo Dados informados
Campo que definirá se o plugin utilizado será Protheus, Datasul ou Outro Plugin dentro das diretrizes informada na documentação
URL de conexão Url fornecida pelo plugin para gerar a integração com o cálculo de imposto
Usuário Usuário do plugin
Senha Senha do plugin
Timeout ao requisitar impostos (seg) Tempo de espera para o retorno da consulta no Plugin
Obrigar simulação de impostos para Campo que permite selecionar se haverá validação de imposto calculado tanto na gravação do pedido quanto na finalização.

Exemplo de configuração do Plugin Simulação de impostos:

Simulação de imposto no pedido

No pedido de venda, caso o Plugin de integração de código "imposto" estiver ativo,

O sistema disponibiliza o botão de "Calcular impostos" Web e ícone no Android.

Este botão é dinâmico, ou seja, o sistema muda a cor de ícone baseado na situação dos impostos:

        • Impostos não calculados: cor amarela
        • Impostos calculados: cor verde

Se alterado dados dos produtos, o ícone retorna para o status de "não calculado"


Ao clicar no botão de "Calcular impostos" o sistema dispara uma requisição POST para carte do Pentaho:

Imagem de exemplo:

 

A representação dos impostos em tela exibe os valores persistidos na linha do item e nos resumos, agrupando os valores dos itens.

Sobre a validação ao Cincuir o Pedido, varia confirme for selecionado na Configuração do Plugin de Integração:

    • Selecionado opção para validar ao gravar o pedido,
      • Caso a checkbox "Gravar pedido" estiver marcada, o sistema restringi a gravação caso os impostos não estiverem calculados (cor verde), com mensagem: "É obrigatória a simulação de impostos para executar esta ação"
    • Selecionado opção para validar ao finalizar o pedido
      • Caso a checkbox "Finalizar pedido" estiver marcada, o sistema restringi a finalização caso os impostos não estiverem calculados (cor verde), com mensagem: "É obrigatória a simulação de impostos para executar esta ação"

Modelo de requisição para simulação de impostos Protheus APIs Nativas

O Pentaho Carte, recebe a requisição da aplicação na rota COMMONS_Bloco_TAXSIMULATION, e trata os dados recebidos segundo o modelo da entrada da API de simulação de impostos do Protheus, segundo documentação  https://api.totvs.com.br/apidetails/SalesTaxes_v1_000.json

Com o retorno, o serviço de integração implementa os campos definidos pela tabela de-para do Modelo Protheus (veja em "Escopo Técnico).

Modelo de requisição para Simulação de impostos Datasul APIs Nativas

O Pentaho Carte, recebe a requisição da aplicação na rota COMMONS_Bloco_TAXSIMULATION, e trata os dados recebidos segundo o modelo da entrada da API de simulação de impostos do Datasul, que segue o modelo: API-REST Imposto/Classificação Imposto

A URL da rota é definida pelo padrão; ${base_url}/api/ftp/v2/ItemTaxSimulationPublic

Com o retorno, o serviço de integração implementa os campos definidos pela tabela de-para do Modelo Datasul (veja em "Escopo Técnico).

Modelo de requisição para simulação de impostos Genérica

Foi também implementado um modelo genérico padrão, onde o Pentaho envia requisição com autenticação básica definida segundo modelo padrão e esperando receber retorno segundo modelo padrão definido pela documentação Plugin de Integração "Simulação de Impostos".

Caso os sistemas terceiros se adaptem ao modelo padrão definido acima, o requisito de simulação de impostos poderá ser implementados sem necessidade de customização.

Entretanto, caso os sistemas não possam se adaptar para receber e retornar a requisição segundo o definido pela documentação acima, esse modelo de simulação de impostos será configurado na aplicação para que dispare serviço de integração customizado, que respeita apenas o contrato requisição/retorno definido entre aplicação/pentaho.






Escopo Técnico

Pelo tools, opção 5, o sistema cria o registro na tabela pluginintegracao.codigo com valor = IMPOSTO

Para funcionar corretamente, o cadastro das configurações do plugin de Imposto insere na tabela pluginintconfig as seguintes informações:

        • Campo de label "Modelo de simulação de impostos":
          • Opções fixas (pluginintconfig.valor):
            • "Protheus APIs Nativas": valor "protheus"
            • "Datasul APIs Nativas": valor "datasul"
            • "Genérico": valor "generico"
          • Registro na tabela pluginintconfig:
            • idpluginintegracao = ID da tabela pluginintegracao com codigo = IMPOSTO
            • codigoelemento = IMPOSTO
            • agrupador = 0
            • sglcampo = IMPOSTO_MODELO
            • idnativo = 0
            • valor = Dependendo da seleção (PROTHEUS, DATASUL ou GENERICO)
        • Campo de label "URL de conexão": textual obrigatório
          • Registro na tabela pluginintconfig:
            • idpluginintegracao = ID da tabela pluginintegracao com codigo = IMPOSTO
            • codigoelemento = IMPOSTO
            • agrupador = 0
            • sglcampo = IMPOSTO_URL
            • idnativo = 0
            • valor = Valor inserido pelo usuário
        • Grupo de elementos de label "Autenticação"
          • Campo de label "Usuário": textual obrigatório
            • Registro na tabela pluginintconfig:
              • idpluginintegracao = ID da tabela pluginintegracao com codigo = IMPOSTO
              • codigoelemento = IMPOSTO
              • agrupador = 0
              • sglcampo = IMPOSTO_USUARIO
              • idnativo = 0
              • valor = Valor inserido pelo usuário
          • Campo de label "Senha": textual, obrigatório, tipado como "password" para não pemitir visualização direta da senha na tela.
            • Registro na tabela pluginintconfig:
              • idpluginintegracao = ID da tabela pluginintegracao com codigo = IMPOSTO
              • codigoelemento = IMPOSTO
              • agrupador = 0
              • sglcampo = IMPOSTO_SENHA
              • idnativo = 0
              • valor = Valor inserido pelo usuário
        • Campo de label "Timeout ao requisitar impostos (seg)": campo numérico, se não informado, adotar o padrão 30 segundos
          • Registro na tabela pluginintconfig:
            • idpluginintegracao = ID da tabela pluginintegracao com codigo = IMPOSTO
            • codigoelemento = IMPOSTO
            • agrupador = 0
            • sglcampo = IMPOSTO_TIMEOUT
            • idnativo = 0
            • valor = Valor inserido pelo usuário
        • Campo de label "Obrigar simulação de impostos para:": Checkbox, seleção opcional
          • Checkbox de label "Gravar pedido"
            • Registro na tabela pluginintconfig:
              • idpluginintegracao = ID da tabela pluginintegracao com codigo = IMPOSTO
              • codigoelemento = IMPOSTO
              • agrupador = 0
              • sglcampo = IMPOSTO_OBRIGATORIO_AO_GRAVAR
              • idnativo = 0
              • valor = Valor 0 ou1
          • Checkbox de label "Finalizar pedido"
            • Registro na tabela pluginintconfig:
              • idpluginintegracao = ID da tabela pluginintegracao com codigo = IMPOSTO
              • codigoelemento = IMPOSTO
              • agrupador = 0
              • sglcampo = IMPOSTO_OBRIGATORIO_AO_FINALIZAR
              • idnativo = 0
              • valor = Valor 0 ou1



Modelo de requisição enviada:


{
    "idusuario": 1, //pedido.idusuarioprofissional
    "idparceiro": 1, //pedido.idparceiro
    "idlocal": 2, //pedido.idlocal
    "idlocalcobranca": 3, //pedido.idlocalcobranca
    "idfilialvenda": 3, //pedido.idlocalfilialvenda
    "idfilialretira": 4, //pedido.idlocalfilialretirada
    "idfilialfaturamento": 5, //pedido.idlocalfilialfaturamento
    "idtipopedido": 4, //pedido.idtipopedido
    "idtipocobranca": 5, //pedido.idtipocobranca
    "idtabelapreco": 6, //pedido.idtabelapreco
    "idcondicaopagamento": 5, //pedido.idcondicaopagamento
    "idsegmento": 8, //pedido.idsegmento
    "idtipologia": 8, //pedido.idtipologia
    "idoperacao": 8, //pedido.idoperacao
    "idmoeda": 8, //pedido.idindexador
    "idtipoestoque": 8, //pedido.idtipoestoque
    "valortotalbruto": 8.00, //Campo "Valor total bruto do resumo"
    "valortotalliquido": 9.00,//Campo "Valor total liquido do resumo"
    "descontopedido": [
        {
            "codigo": "8", //pedidotipodesconto.idtipodesconto > tipodesconto.codigo
            "percentual": 9.00, //pedidotipodesconto.percentual
            "valor": 10.00 //pedidotipodesconto.valor
        },
        {
            "codigo": "8", //pedidotipodesconto.idtipodesconto > tipodesconto.codigo
            "percentual": 9.00, //pedidotipodesconto.percentual
            "valor": 10.00 //pedidotipodesconto.valor
        }
    ],
    "pedidoproduto": [
        {
            "ordem": 1, //pedidoproduto.ordem
            "idproduto": 8, //pedidoproduto.idproduto
			"idembalagem": 10, //pedidoproduto.idembalagem,
            "quantidade": 9.00, //pedidoproduto.quantidade
            "precovenda": 10.00, //pedidoproduto.precovenda PS:Valor unitário
            "precotabela": 11.00, //pedidoproduto.precotabela PS:Valor unitário
            "precooriginal": 12.00, //pedidoproduto.precooriginal PS:Valor unitário
            "percentualdesconto": 13.00, //pedidoproduto.percentualdesconto
            "valordesconto": 13.00, //pedidoproduto.valordesconto PS:Valor unitário
            "percentualacrescimo": 13.00, //pedidoproduto.percentualacrescimo
            "valoracrescimo": 13.00, //pedidoproduto.valoracrescimo PS:Valor unitário
            "idtipopedido": 13.00, //pedidoproduto.idtipopedido
            "idtipoestoque": 14, //pedidoproduto.idtipoestoque
            "idtabelapreco": 15, //pedidoproduto.idtabelapreco
        },
        {
            "ordem": 1, //pedidoproduto.ordem
            "idproduto": 8, //pedidoproduto.idproduto
 			"idembalagem": 10, //pedidoproduto.idembalagem,
            "quantidade": 9.00, //pedidoproduto.quantidade
            "precovenda": 10.00, //pedidoproduto.precovenda PS:Valor unitário
            "precotabela": 11.00, //pedidoproduto.precotabela PS:Valor unitário
            "precooriginal": 12.00, //pedidoproduto.precooriginal PS:Valor unitário
            "percentualdesconto": 13.00, //pedidoproduto.percentualdesconto
            "valordesconto": 13.00, //pedidoproduto.valordesconto PS:Valor unitário
            "percentualacrescimo": 13.00, //pedidoproduto.percentualacrescimo
            "valoracrescimo": 13.00, //pedidoproduto.valoracrescimo PS:Valor unitário
            "idtipopedido": 13.00, //pedidoproduto.idtipopedido
            "idtipoestoque": 14, //pedidoproduto.idtipoestoque
            "idtabelapreco": 15, //pedidoproduto.idtabelapreco
        }
    ],
    "pedidoentrega": [
        {
            "idtipofrete": 4, //pedidoentrega.idtipofrete
            "idtransportadora": 7,//pedidoentrega.idparceirotransportador
			"idparceiroentrega": 8, //pedidoentrega.idparceiroentrega
            "valorfrete": 5.00, //pedidoentrega.valorfrete
            "valordespesa": 6.00, //pedidoentrega.valordespesa
            "valorseguro": 7.00 //pedidoentrega.valorseguro        
        },
        {
            "idtipofrete": 4, //pedidoentrega.idtipofrete
            "idtransportadora": 7,//pedidoentrega.idparceirotransportador
			"idparceiroentrega": 8, //pedidoentrega.idparceiroentrega
            "valorfrete": 5.00, //pedidoentrega.valorfrete
            "valordespesa": 6.00, //pedidoentrega.valordespesa
            "valorseguro": 7.00 //pedidoentrega.valorseguro        
        }
    ]
}

O retorno esperado virá com o modelo a seguir:

{
  "valortotalcomimpostos": 178.56,
  "valortotalimpostos": 21.96,
  "valortotaldespesa": 0, //pedidoentrega.valordespesa
  "valortotalseguro": 7, //pedidoentrega.valorseguro  
  "pedidoimposto": [
    {
      "sglimposto": "ICMS",
      "aliquota": 7,
      "valortotalimposto": 12.14
    },
    {
      "sglimposto": "IPI",
      "aliquota": 6,
      "valortotalimposto": 9.82
    }
  ],
  "itemimposto": [
    {
      "ordem": 1, //pedidoproduto.ordem
      "idproduto": 8, //pedidoproduto.idproduto //
      "valortotalcomimpostos": 89.21, //NÃO UNITÁRIO, precisa ser múltiplicado pela requisição.quantidade
      "valortotalfrete": 2.5, //NÃO UNITÁRIO, precisa ser múltiplicado pela requisição.quantidade
      "impostos": [
        {
          "sglimposto": "ICMS",
          "valorbase": 78.3,
          "aliquota": 6.24,
          "valortotalimposto": 6.24 //NÃO UNITÁRIO, precisa ser múltiplicado pela requisição.quantidade
        },
        {
          "sglimposto": "IPI",
          "valorbase": 78.3,
          "aliquota": 6,
          "valortotalimposto": 4.91 //NÃO UNITÁRIO, precisa ser múltiplicado pela requisição.quantidade
        },
        {
          "sglimposto": "ST",
          "valorbase": 78.3,
          "aliquota": 0,
          "valortotalimposto": 0 //NÃO UNITÁRIO, precisa ser múltiplicado pela requisição.quantidade
        },
        {
          "sglimposto": "COFINS",
          "valorbase": 78.3,
          "aliquota": 0,
          "valortotalimposto": 0 //NÃO UNITÁRIO, precisa ser múltiplicado pela requisição.quantidade
        },
        {
          "sglimposto": "CSLL",
          "valorbase": 78.3,
          "aliquota": 0,
          "valortotalimposto": 0 //NÃO UNITÁRIO, precisa ser múltiplicado pela requisição.quantidade
        }
      ]
    },
    {
      "ordem": 2, //pedidoproduto.ordem
      "idproduto": 9, //pedidoproduto.idproduto //
      "valortotalcomimpostos": 84.3, //NÃO UNITÁRIO, precisa ser múltiplicado pela requisição.quantidade
      "valortotalfrete": 2.5, //NÃO UNITÁRIO, precisa ser múltiplicado pela requisição.quantidade
      "impostos": [
        {
          "sglimposto": "ICMS",
          "valorbase": 78.3,
          "aliquota": 5.9,
          "valortotalimposto": 5.9 //NÃO UNITÁRIO, precisa ser múltiplicado pela requisição.quantidade
        },
        {
          "sglimposto": "IPI",
          "valorbase": 78.3,
          "aliquota": 6,
          "valortotalimposto": 4.91 //NÃO UNITÁRIO, precisa ser múltiplicado pela requisição.quantidade
        },
        {
          "sglimposto": "ST",
          "valorbase": 78.3,
          "aliquota": 0,
          "valortotalimposto": 0 //NÃO UNITÁRIO, precisa ser múltiplicado pela requisição.quantidade
        },
        {
          "sglimposto": "COFINS",
          "valorbase": 78.3,
          "aliquota": 0,
          "valortotalimposto": 0 //NÃO UNITÁRIO, precisa ser múltiplicado pela requisição.quantidade
        },
        {
          "sglimposto": "CSLL",
          "valorbase": 78.3,
          "aliquota": 0,
          "valortotalimposto": 0 //NÃO UNITÁRIO, precisa ser múltiplicado pela requisição.quantidade
        }
      ]
    }
  ]
}


Com o retorno acima, o sistema persiste as informações em tela, segundo o seguinte de-para:


Retorno da Simulação Campo do SFA
itemimposto.impostos.sglimposto

pedidoimposto.idimposto

itemimposto.impostos.valorbase

pedidoimposto.valorbasecalculoreducao

itemimposto.impostos.aliquota pedidoimposto.valorbasecalculo
itemimposto.impostos.valortotalimposto

pedidoimposto.valorimposto

itemimposto.ordem / itemimposto.idproduto pedidoimposto.idpedidoproduto (procurar por pedidoproduto.ordem e pedidoproduto.idproduto respectivamente)
itemimposto.valortotalfrete pedidoproduto.valorfrete
itemimposto.valortotalcomimpostos pedidoproduto.valortotalcomimposto

Modelo Protheus

Abaixo está o escopo do cálculo de imposto do Protheus.

A integração recebe a solicitação da aplicação via Carte, busca, processa e retorna para a mesma.

Abaixo estão exemplos via POSTMAN:

URL

Na URL para o Protheus, o formato será o seguinte:

POST {{URL}/AMBIENTE/api/fat/v1/SalesTaxes

Substitua a variável URL pelo caminho da API, informado pelo cliente.

Exemplo:

Autorização

Na aba de autorização, selecione o tipo Basic e informe os dados de usuário e senha:

Header

No header da requisição, informado o tipo do conteúdo:

Content-Type: application/json

Body

No corpo da mensagem, substituido os dados da ordem de venda nas tags correspondentes.

Exemplo:

Corpo de uma mensagem de exemplo:

{
  "SalesType""N",
  "CustomerId""0D69DO",
  "CustomerUnit""01",
  "CustomerIdDelivery""0D69DO",
  "CustomerUnitDelivery""01",
  "CustomerType""S",
  "Payment""002",
  "DiscountPercentage1"9,
  "DiscountPercentage2"0,
  "DiscountPercentage3"0,
  "DiscountPercentage4"0,
  "Currency"1,
  "Freight"0,
  "Insurance"0,
  "Expense"0,
  "ListofProducts": [
    {
      "ItemId""1",
      "ProductId""181647",
      "Quantity"90,
      "UnitaryValue"10,
      "TotalValue"900,
      "ItemDiscountPercentage"13,
      "operationType""03",
      "TES""501",
      "ItemDiscountValue"0
    }
  ]
}

Explicando cada um dos campos do corpo da simulação de impostos

"SalesType": "N"

Tipo da venda, usa o valor “N" fixo

"CustomerId": "0D69DO"

Código do cliente, extraído do campo PARCEIRO.NUMEROMATRICULA selecionado no cabeçalho da ordem de venda

"CustomerUnit": "01"

Código da loja selecionado no cabeçalho da ordem de venda, extraído do campo LOCAL.SPLIT_PART(CODIGOERP,'#',4), ou se for nulo, FILIALVENDA.SPLIT_PART(CODIGOERP,'#',3) 

"CustomerIdDelivery": "0D69DO"

Código do cliente, extraído do campo PARCEIRO.NUMEROMATRICULA selecionado na entrega da ordem de venda

"CustomerUnitDelivery": "01"

Código da loja do cliente, extraído do campo LOCAL.SPLIT_PART(CODIGOERP,'#',4) selecionado na entrega da ordem de venda

"CustomerType": "S"

Tipo do cliente, usa o valor extraído do campo CLASSIFICACAOPARCEIRO.CODIGOERP

 "Payment": "002"

Código da condição de pagamento, campo CONDICAOPAGAMENTO.SPLIT_PART(CODIGOERP,'#',2) selecionado no cabeçalho da ordem de venda

"DiscountPercentage1": 9,  "DiscountPercentage2": 0, "DiscountPercentage3": 0, "DiscountPercentage4": 0

Campo Calculado: total bruto dos itens - total liquido dos itens ((1 - (totalliquido/ totalbruto)) * 100) na primeira tag, nas demais não é enviado nenhum valor.

"Currency": 1

Fixo 1

"Freight": 0

Valor do frete inserido na ordem de venda, campo PEDIDOENTREGA.VALORFRETE

"Insurance": 0

Valor do seguro do pedido, campo PEDIDOENTREGA.VALORSEGURO

"Expense": 0

Valor de despesas acessórias, campo PEDIDOENTREGA.VALORDESPESA

"ListofProducts"."ItemId": “1”

Número sequencial de cada item dentro da ordem de venda, campo PEDIDOPRODUTO.ORDEM

"ListofProducts"."ProductId": "181647"

Código do produto inserido nos itens da ordem de venda, campo PRODUTO.SPLIT_PART(CODIGOERP,'#',2)

"ListofProducts"."Quantity": 90

Quantidade do item em questão inserido nas ordens de venda, campo PEDIDOPRODUTO.QUANTIDADE

"ListofProducts"."UnitaryValue": 10

Valor unitário do item inserido nas ordens de venda (valor cheio, não considera desconto), campo PEDIDOPRODUTO.PRECOVENDA

"ListofProducts"."TotalValue": 900

Valor total do item inserido nas ordens de venda, PEDIDOPRODUTO.QUANTIDADE * PEDIDOPRODUTO.PRECOVENDA

"ListofProducts"."ItemDiscountPercentage": 13

Percentual de desconto inserido no item da ordem de venda, campo PEDIDOPRODUTO.PERCENTUALDESCONTO

"ListofProducts"."ItemDiscountValue": 0

Fixo 0

"ListofProducts"."OperationType": "03"

TES INTELIGENTE, campo TIPOPEDIDO.CODIGOERP

OBS: Caso o tipo de pedido do item for nulo, é enviado o do cabeçalho

"ListofProducts"."TES": "501"

TES PADRÃO, campo TIPOPEDIDO.SPLIT_PART(CODIGOERP,'#',2)

OBS: Caso o tipo de pedido do item for nulo, é enviado o do cabeçalho

Modelo Datasul

Abaixo está o escopo do cálculo de imposto do Datasul.

A integração recebe a solicitação da aplicação via Carte, busca, processa e retorna para a mesma.

Abaixo estão exemplos via POSTMAN:

URL

Na URL para o Datasul, o formato será o seguinte:

POST {{URL}/api/ftp/v2/ItemTaxSimulationPublic

Substitua a variável URL pelo caminho da API, informado pelo cliente.

Exemplo:

Autorização

Na aba de autorização, é selecionado o tipo Basic e informado os dados de usuário e senha:

Header

No header da requisição, informaado o tipo do conteúdo:

Content-Type: application/json

Body

No corpo da mensagem, substituido os dados da ordem de venda nas tags correspondentes.

Exemplo:

Corpo de uma mensagem de exemplo:

{
    "SalesType""N",
    "CustomerId""000001",
    "CustomerUnit""01",
    "CustomerIdDelivery""000001",
    "CustomerUnitDelivery""01",
    "CustomerType""F",
    "Payment""001",
    "DiscountPercentage1"10,
    "DiscountPercentage2": 0,
    "DiscountPercentage3": 0,
    "DiscountPercentage4": 0,
    "Currency"1,
    "Freight"10,
    "Insurance"0,
    "Expense"0,
    "ListofProducts": [
        {
            "ItemId""01",
            "ProductId""3395979",
            "Quantity"10,
            "UnitaryValue"100,
            "TotalValue"1000,
            "ItemDiscountPercentage"10,
            "ItemDiscountValue"100,
            "OperationType""02"
        }
    ]
}

Explicando cada um dos campos do corpo da simulação de impostos

"SalesType": "N"

Tipo da venda, usa o valor “N" fixo

"CustomerId": "000001"

Código do cliente, extraído do campo PARCEIRO.SPLIT_PART(CODIGOERP,'#',3) selecionado no cabeçalho da ordem de venda

"CustomerUnit": "01"

Código da loja, extraído do campo PARCEIRO.SPLIT_PART(CODIGOERP,'#',3) selecionado no cabeçalho da ordem de venda

"CustomerIdDelivery": "000001"

Código do cliente de entrega, extraído do campo PARCEIRO.SPLIT_PART(CODIGOERP,'#',3) selecionado na entrega da ordem de venda

"CustomerUnitDelivery": "01"

Código da loja do cliente de entrega, extraído do campo PARCEIRO.SPLIT_PART(CODIGOERP,'#',3) selecionado na entrega da ordem de venda

"CustomerType": "F"

Tipo do cliente, usa o valor extraído do campo CLASSIFICACAOPARCEIRO.SUBSTR(C.CODIGOERP,LENGTH(C.CODIGOERP),LENGTH(C.CODIGOERP))

 "Payment": "001"

Código da condição de pagamento, campo CONDICAOPAGAMENTO.SPLIT_PART(CODIGOERP,'#',2) selecionado no cabeçalho da ordem de venda

"DiscountPercentage1": 10,  "DiscountPercentage2": 0, "DiscountPercentage3": 0, "DiscountPercentage4": 0

Campo Calculado: total bruto dos itens - total liquido dos itens ((1 - (totalliquido/ totalbruto)) * 100) na primeira tag, nas demais não é enviado nenhum valor.

"Currency": 1

Moeda selecionada na ordem de venda, campo INDEXADOR.CAST(SPLIT_PART(CODIGOERP,'#',2) AS INT)

"Freight": 10

Valor do frete inserido na ordem de venda, campo PEDIDOENTREGA.VALORFRETE

"Insurance": 0

Valor do seguro do pedido, campo PEDIDOENTREGA.VALORSEGURO

"Expense": 0

Valor de despesas acessórias, campo PEDIDOENTREGA.VALORDESPESA

"ListofProducts"."ItemId": “01”

Número sequencial de cada item dentro da ordem de venda, campo PEDIDOPRODUTO.ORDEM * 10

"ListofProducts"."ProductId": "3395979"

Código do produto inserido nos itens da ordem de venda, campo PRODUTO.SPLIT_PART(CODIGOERP,'#',2)

"ListofProducts"."Quantity": 10

Quantidade do item em questão inserido nas ordens de venda, campo PEDIDOPRODUTO.QUANTIDADE

"ListofProducts"."UnitaryValue": 100

Valor unitário do item inserido nas ordens de venda (valor cheio, não considera desconto), campo PEDIDOPRODUTO.PRECOVENDA

"ListofProducts"."TotalValue": 1000

Valor total do item inserido nas ordens de venda, PEDIDOPRODUTO.QUANTIDADE * PEDIDOPRODUTO.PRECOVENDA

"ListofProducts"."ItemDiscountPercentage": 10

Percentual de desconto inserido no item da ordem de venda, campo PEDIDOPRODUTO.PERCENTUALDESCONTO

"ListofProducts"."ItemDiscountValue": 100

Fixo 0

"ListofProducts"."OperationType": "02"

Tipo de operação, campo TIPOPEDIDO.CODIGOERP

OBS: Caso o tipo de pedido do item for nulo, é enviado o do cabeçalho.

Modelo Genérico

Protocolo HTTP REST

Modelo de autenticação: Básica Usuário/Senha

// Requisicao
 
{
    "idusuario": 1, //pedido.idusuarioprofissional
    "idusuario_externalid": "cod", //pedido.idusuarioprofissional > codigoerp
    "idparceiro": 1, //pedido.idparceiro
    "idparceiro_externalid": "cod", //pedido.idparceiro > codigoerp
    "idparceiro_subentities": {
        "parceirogrupoparceiro": [
            {
                "idnpadrao": 1,
                "idgrupoparceiro": 1,
                "idgrupoparceiro_idnativo": 1,
                "idgrupoparceiro_externalid": "1"
            }
        ]
    },
    "idlocal": 2, //pedido.idlocal
    "idlocal_externalid": "cod", //pedido.idlocal > codigoerp
    "idlocal_subentities": {
          "localsegmento": [
            {
              "idnpadrao": 0,
              "idsegmento": 1,
              "idsegmento_idnativo": 1,
              "idsegmento_sigla": "ABC",
              "idsegmento_codigo": "CDE",
              "idsegmento_externalid": "000001"
            }
          ],
          "localregiao": [
            {
              "idregiao": 1,
              "idregiao_idnativo": 1,
              "idregiao_externalid": "001"
            }
          ],
          "localtipologia": [
            {
                "idtipologia_codigo": "1",
                "idtipologia_externalid": "1",
                "idtipologia_idnativo": 1,
                "idtipologia": 1,
                "idtipologia_sgltipologia": "TIPOS"
            }
          ]
        },
    "idlocalcobranca": 3, //pedido.idlocalcobranca
    "idlocalcobranca_externalid": "cod", //pedido.idlocalcobranca > codigoerp
    "idfilialvenda": 3, //pedido.idlocalfilialvenda
    "idfilialvenda_externalid": "cod", //pedido.idlocalfilialvenda > codigoerp
    "idfilialretira": 4, //pedido.idlocalfilialretirada
    "idfilialretira_externalid": "cod", //pedido.idlocalfilialretirada > codigoerp
    "idfilialfaturamento": 5, //pedido.idlocalfilialfaturamento
    "idfilialfaturamento_externalid": "cod", //pedido.idlocalfilialfaturamento > codigoerp
    "idtipopedido": 4, //pedido.idtipopedido
    "idtipopedido_externalid": "cod", //pedido.idtipopedido > codigoerp
    "idtipocobranca": 5, //pedido.idtipocobranca
    "idtipocobranca_externalid": "cod", //pedido.idtipocobranca > codigoerp
    "idtabelapreco": 6, //pedido.idtabelapreco
    "idtabelapreco_externalid": "cod", //pedido.idtabelapreco > codigoerp
    "idcondicaopagamento": 5, //pedido.idcondicaopagamento
    "idcondicaopagamento_externalid": "cod", //pedido.idcondicaopagamento > codigoerp
    "idsegmento": 8, //pedido.idsegmento
    "idsegmento_externalid": "cod", //pedido.idsegmento > codigoerp
    "idtipologia": 8, //pedido.idtipologia
    "idtipologia_externalid": "cod", //pedido.idtipologia > codigoerp
    "idoperacao": 8, //pedido.idoperacao
    "idoperacao_externalid": "cod", //pedido.idoperacao > codigoerp
    "idmoeda": 8, //pedido.idindexador
    "idmoeda_externalid": "cod", //pedido.idindexador > codigoerp
    "idtipoestoque": 8, //pedido.idtipoestoque
    "idtipoestoque_externalid": "cod", //pedido.idtipoestoque > codigoerp
    "valortotalbruto": 8.00, //Campo "Valor total bruto do resumo"
    "valortotalliquido": 9.00,//Campo "Valor total liquido do resumo"
    "descontopedido": [
        {
            "codigo": "8", //pedidotipodesconto.idtipodesconto > tipodesconto.codigo
            "percentual": 9.00, //pedidotipodesconto.percentual
            "valor": 10.00 //pedidotipodesconto.valor
        },
        {
            "codigo": "8", //pedidotipodesconto.idtipodesconto > tipodesconto.codigo
            "percentual": 9.00, //pedidotipodesconto.percentual
            "valor": 10.00 //pedidotipodesconto.valor
        }
    ],
    "pedidoproduto": [
        {
            "ordem": 1, //pedidoproduto.ordem
            "idproduto": 8, //pedidoproduto.idproduto
            "idproduto_externalid": "cod", //pedidoproduto.idproduto > codigoerp
            "idembalagem": 10, //pedidoproduto.idembalagem
            "idembalagem_externalid": "cod", //pedidoproduto.idembalagem > codigoerp
            "quantidade": 9.00, //pedidoproduto.quantidade
            "quantidadeembalagem": 2.00, //pedidoproduto.quantidadeembalagem
            "precovenda": 10.00, //pedidoproduto.precovenda PS:Valor unitario
            "precotabela": 11.00, //pedidoproduto.precotabela PS:Valor unitario
            "precooriginal": 12.00, //pedidoproduto.precooriginal PS:Valor unitario
            "percentualdesconto": 13.00, //pedidoproduto.percentualdesconto
            "valordesconto": 13.00, //pedidoproduto.valordesconto PS:Valor unitario
            "percentualacrescimo": 13.00, //pedidoproduto.percentualacrescimo
            "valoracrescimo": 13.00, //pedidoproduto.valoracrescimo PS:Valor unitario
            "idtipopedido": 13.00, //pedidoproduto.idtipopedido
            "idtipopedido_externalid": "cod", //pedidoproduto.idtipopedido > codigoerp
            "idtipoestoque": 14, //pedidoproduto.idtipoestoque
            "idtipoestoque_externalid": "cod", //pedidoproduto.idtipoestoque > codigoerp
            "idtabelapreco": 15, //pedidoproduto.idtabelapreco
            "idtabelapreco_externalid": "cod" //pedidoproduto.idtabelapreco > codigoerp
        },
        {
            "ordem": 1, //pedidoproduto.ordem
            "idproduto": 8, //pedidoproduto.idproduto
            "idproduto_externalid": "cod", //pedidoproduto.idproduto > codigoerp
            "idembalagem": 10, //pedidoproduto.idembalagem
            "idembalagem_externalid": "cod", //pedidoproduto.idembalagem > codigoerp 
            "quantidade": 9.00, //pedidoproduto.quantidade
            "quantidadeembalagem": 2.00, //pedidoproduto.quantidadeembalagem
            "precovenda": 10.00, //pedidoproduto.precovenda PS:Valor unitario
            "precotabela": 11.00, //pedidoproduto.precotabela PS:Valor unitario
            "precooriginal": 12.00, //pedidoproduto.precooriginal PS:Valor unitario
            "percentualdesconto": 13.00, //pedidoproduto.percentualdesconto
            "valordesconto": 13.00, //pedidoproduto.valordesconto PS:Valor unitario
            "percentualacrescimo": 13.00, //pedidoproduto.percentualacrescimo
            "valoracrescimo": 13.00, //pedidoproduto.valoracrescimo PS:Valor unitario
            "idtipopedido": 13.00, //pedidoproduto.idtipopedido
            "idtipopedido_externalid": "cod", //pedidoproduto.idtipopedido > codigoerp
            "idtipoestoque": 14, //pedidoproduto.idtipoestoque
            "idtipoestoque_externalid": "cod", //pedidoproduto.idtipoestoque > codigoerp
            "idtabelapreco": 15, //pedidoproduto.idtabelapreco
            "idtabelapreco_externalid": "cod" //pedidoproduto.idtabelapreco > codigoerp
        }
    ],
    "pedidoentrega": [
        {
            "idtipofrete": 4, //pedidoentrega.idtipofrete
            "idtipofrete_externalid": "cod", //pedidoentrega.idtipofrete > codigoerp
            "idparceiroentrega": 4, //pedidoentrega.idparceiroentrega
            "idparceiroentrega_externalid": "cod", //pedidoentrega.idparceiroentrega > codigoerp
            "idtransportadora": 7,//pedidoentrega.idparceirotransportador
            "idtransportadora_externalid": "cod",//pedidoentrega.idparceirotransportador > codigoerp
            "valorfrete": 5.00, //pedidoentrega.valorfrete
            "valordespesa": 6.00, //pedidoentrega.valordespesa
            "valorseguro": 7.00 //pedidoentrega.valorseguro       
        },
        {
            "idtipofrete": 4, //pedidoentrega.idtipofrete
            "idtipofrete_externalid": "cod", //pedidoentrega.idtipofrete > codigoerp
            "idparceiroentrega": 4, //pedidoentrega.idparceiroentrega
            "idparceiroentrega_externalid": "cod", //pedidoentrega.idparceiroentrega > codigoerp 
            "idtransportadora": 7,//pedidoentrega.idparceirotransportador
            "idtransportadora_externalid": "cod",//pedidoentrega.idparceirotransportador > codigoerp
            "valorfrete": 5.00, //pedidoentrega.valorfrete
            "valordespesa": 6.00, //pedidoentrega.valordespesa
            "valorseguro": 7.00 //pedidoentrega.valorseguro       
        }
    ]
}
 
// Retorno
 
{
    "valortotalcomimpostos": 15.00,
    "valortotalimpostos": 16.00,
    "valortotaldespesa": 6.00, //pedidoentrega.valordespesa
    "valortotalseguro": 7.00, //pedidoentrega.valorseguro       
    "pedidoimposto": [
        {
            "sglimposto": "ICMS", //20 caracteres max
            "aliquota": 11.00,
            "valortotalimposto": 0.5,
        },
        {
            "sglimposto": "ST", //20 caracteres max
            "aliquota": 11.00,
            "valortotalimposto": 0.5
        },
        {
            "sglimposto": "IPI", //20 caracteres max
            "aliquota": 11.00,
            "valortotalimposto": 0.5
        }
    ],
    "itemimposto": [
        {
            "ordem": 1, //pedidoproduto.ordem
            "idproduto": 8, //pedidoproduto.idproduto //
            "idproduto_externalid": "cod", //pedidoproduto.idproduto > codigoerp //80 caracteres max
            "valortotalcomimpostos": 12.00, //NAO UNITARIO, precisa ser multiplicado pela requisicao.quantidade
            "valortotalfrete": 15.00, //NAO UNITARIO, precisa ser multiplicado pela requisicao.quantidade
            "impostos": [
                {
                    "sglimposto": "ICMS", //20 caracteres max
                    "valorbase": 10.00,
                    "aliquota": 11.00,
                    "valortotalimposto": 12.00 //NAO UNITARIO, precisa ser multiplicado pela requisicao.quantidade
                },
                {
                    "sglimposto": "IPI", //20 caracteres max
                    "valorbase": 10.00,
                    "aliquota": 11.00,
                    "valortotalimposto": 12.00 //NAO UNITARIO, precisa ser multiplicado pela requisicao.quantidade
                },
                {
                    "sglimposto": "ST", //20 caracteres max
                    "valorbase": 10.00,
                    "aliquota": 11.00,
                    "valortotalimposto": 12.00 //NAO UNITARIO, precisa ser multiplicado pela requisicao.quantidade
                }
            ]
        },
        {
            "ordem": 1, //pedidoproduto.ordem
            "idproduto": 8, //pedidoproduto.idproduto
            "idproduto_externalid": "cod", //pedidoproduto.idproduto > codigoerp //80 caracteres max
            "valortotalcomimpostos": 12.00, //NAO UNITARIO, precisa ser multiplicado pela requisicao.quantidade
            "valortotalfrete": 15.00, //NAO UNITARIO, precisa ser multiplicado pela requisicao.quantidade
            "impostos": [
                {
                    "sglimposto": "ICMS", //20 caracteres max
                    "valorbase": 10.00,
                    "aliquota": 11.00,
                    "valortotalimposto": 12.00 //NAO UNITARIO, precisa ser multiplicado pela requisicao.quantidade
                },
                {
                    "sglimposto": "IPI", //20 caracteres max
                    "valorbase": 10.00,
                    "aliquota": 11.00,
                    "valortotalimposto": 12.00 //NAO UNITARIO, precisa ser multiplicado pela requisicao.quantidade
                },
                {
                    "sglimposto": "ST", //20 caracteres max
                    "valorbase": 10.00,
                    "aliquota": 11.00,
                    "valortotalimposto": 12.00 //NAO UNITARIO, precisa ser multiplicado pela requisicao.quantidade
                }
            ]
        }
    ] //Impostos para o item do pedido
}



Liberação de acesso API nativa

Inicialmente quando utilziado a API nativa, o usuario da integração deve possuir acesso a estrutura da API dentro do DATASUL, para isso o cliente precisa realziar a seguinte configuração:

Acessar a tela do cadastro de permissão de usuário, CD0821 e realizar o cadastro do usuario que faz a chamada da API. 


Outro erro que pode ser apresentado é de "data do faturamento maior que a data do próximo faturamento" é em relação a tua série, la no FT0114, usado para visualizar a data do próximo faturamento, para funcionamento, pode ser removido o parâmetro "controle próximo faturamento" e deixar o campo em branco pra série e estab que esta sendo usado.



Erro

O seguinte erro é apresentado caso as telas acima não estejam de acordo com as liberações. 


{
    "detailedMessage": "Usuário integrador não tem permissão para executar esse programa.\n",
    "code": "852",
    "details": [
        {
            "detailedMessage": "A data de emissão da nota fiscal informada é maior que a data do próximo faturamento da série/estabelecimento.\n",
            "code": "5173",
            "message": "Data do faturamento maior que data do próximo faturamento",
            "type": "error"
        },
        {
            "detailedMessage": "",
            "code": "17006",
            "message": "Ocorreu algum erro técnico durante a simulação dos impostos. Favor avaliar o log do Appserver Progress.",
            "type": "error"
        }
    ],
    "message": "Usuário integrador não Cadastrado no Banco Comercial",
    "type": "error"
}


Quando as liberações estão corretas o calculo de imposto é possivel, conforme imagem abaixo:



Retorno da Simulação Campo do SFA
itemimposto.impostos.sglimposto

pedidoimposto.idimposto

itemimposto.impostos.valorbase

pedidoimposto.valorbasecalculoreducao

itemimposto.impostos.aliquota pedidoimposto.valorbasecalculo
itemimposto.impostos.valortotalimposto

pedidoimposto.valorimposto

itemimposto.ordem / itemimposto.idproduto pedidoimposto.idpedidoproduto (procurar por pedidoproduto.ordem e pedidoproduto.idproduto respectivamente)
itemimposto.valortotalfrete pedidoproduto.valorfrete
itemimposto.valortotalcomimpostos pedidoproduto.valortotalcomimposto


Abaixo está o escopo do cálculo de imposto do Datasul.

A integração recebe a solicitação da aplicação via Carte, busca, processa e retorna para a mesma.

Abaixo estão exemplos via POSTMAN:

URL

Na URL para o Datasul, o formato será o seguinte:

POST {{URL}/api/ftp/v2/ItemTaxSimulationPublic

Substitua a variável URL pelo caminho da API, informado pelo cliente.

Exemplo:

Autorização

Na aba de autorização, é selecionado o tipo Basic e informado os dados de usuário e senha:

Header

No header da requisição, informaado o tipo do conteúdo:

Content-Type: application/json

Body

No corpo da mensagem, substituido os dados da ordem de venda nas tags correspondentes.

Exemplo:

Corpo de uma mensagem de exemplo:

{
    "SalesType""N",
    "CustomerId""000001",
    "CustomerUnit""01",
    "CustomerIdDelivery""000001",
    "CustomerUnitDelivery""01",
    "CustomerType""F",
    "Payment""001",
    "DiscountPercentage1"10,
    "DiscountPercentage2": 0,
    "DiscountPercentage3": 0,
    "DiscountPercentage4": 0,
    "Currency"1,
    "Freight"10,
    "Insurance"0,
    "Expense"0,
    "ListofProducts": [
        {
            "ItemId""01",
            "ProductId""3395979",
            "Quantity"10,
            "UnitaryValue"100,
            "TotalValue"1000,
            "ItemDiscountPercentage"10,
            "ItemDiscountValue"100,
            "OperationType""02"
        }
    ]
}











Plugin de integração TOTVS Pagamento Instantâneo - PIX

DADOS GERAIS SOBRE O RECURSO

O sistema disponibiliza o plugin de nome "TOTVS Pagamento instantâneo", onde o usuário terá a possibilidade de gerenciar o pagamento feito pela modalidade PIX.

Sendo assim, quando o Plugin estiver ativo e as configurações realizadas corretamente, ao finalizar um pedido utilizando o Tipo de Cobrança configurado para o Pagamento instantâneo, já será gerado em tela um QRCode que permitirá o usuário realizar o pagamento.

Após o pagamento, a aplicação vai consultar o plugin e exibir em tela que o Pagamento por PIX foi realizado, gerando o pedido com status Finalizado.

Configuração do Plugin

Na tela de Plugins de integração acessado em Configuração > Integração, o sistema disponibiliza um card de nome "TOTVS Pagamento Instantâneo" para ativar o recurso. 

Ao clicar no botão "Configurar", é aberto a Tela de configurações do TOTVS Pagamento instantâneo. Informe cada campo conforme a configuração detalhada a seguir:

Configuração do TPI
Tenant

Informe a URL em que a API do TOTVS Pagamento Instantâneo (TPI) estará sendo servida (Ex: https://produtosfa.rac.staging.totvs.app)

Usuário Informe o Usuário da autenticação básica do TPI
Senha Informe a senha da autenticação básica do TPI
Client ID Informe o identificador do sistema solicitante da requisição
Client secret Informe a senha do sistema solicitante da requisição
Carteira Informe o código da carteira digital. Para o pix, terá o identificador "pix"
Business unit ID Informe o identificador da unidade de negócio geradora de transações de pagamento
POS ID Informe o identificador do ponto de venda cadastrado
Configuração do SFA
Tipos de cobrança

Selecione os Tipos de cobrança que serão utilizados para disparar a requisição da transação de pagamento.

Timeout ao gerar transação Campo que determina a quantidade de segundos que o sistema aguardará o retorno da criação da transação
Timeout consulta pagamento Campo que determina quantos segundos o sistema irá aguardar para a consulta de pagamento.

Após essa configuração, o Plugin já está passível de utilização na Aplicação.

Configuração de envio de e-mail para contexto "Plugin TOTVS Pagamento Instantâneo"

É importante que o usuário realize a configuração de e-mail para envio do QRCode, assim o cliente do Pedido poderá receber as informações do processo de pagamento por PIX por e-mail disparado pelo próprio Totvs CRM SFA através da conta de e-mail configurada na ferramenta.

Nos tópicos a seguir, é detalhar como será o comportamento para cada modelo.

Estas configurações são acessadas somente por usuários administradores e deve estar localizada em: Configuração > Email > Configuração de envio.

Contexto

Campo que permite selecionar o contexto “Plugin TOTVS Pagamento instantâneo”. Este contexto permitirá que seja configurado um envio de e-mail que tem relação com o processo de pagamento com pix.

O contexto “Plugin TOTVS Pagamento instantâneo ” somente será apresentado quando a configuração do plugin TOTVS Pagamento Instantâneo também estiver ativo (pluginintegracao.idnativo = 1)

Condição para envio 

Campo que permite selecionar o registro chamado “Envio de QR Code PIX - sob demanda”. O propósito desta configuração é enviar o link de pagamento gerado pela TOTVS Pagamento instantâneo conforme a solicitação do usuário responsável pelo pedido. Ou seja, é necessário que o usuário acione o botão de enviar na tela de QR Code para que essa configuração seja executada. E com isso a aplicação encaminha um e-mail ao(s) destinatário(s) conforme as configurações informadas.

Arquivo do relatório

Campo que permita anexar um modelo de relatório nos e-mails enviados. Podendo ser o espelho do pedido, ou um resumo do pedido entre outras possibilidades de relatório no formato PRPT.

Enviar para (Contexto)

Campo que permite definir quem receberá o e-mail:

  • Cliente
  • Profissional logado
  • Profissional selecionado no cabeçalho
  • Profissional supervisor do selecionado no cabeçalho

É possível também selecionar o campo check-box de "Exibir tela de confirmação/edição de e-mail" com label de "Permitir editar e-mails de contexto na tela de confirmação de e-mail".

  • Caso o parâmetro estiver marcado, os e-mails selecionados no contexto não poderão ser editados na tela de confirmação de envio.
  • Caso o parâmetro estiver desmarcado, os e-mails selecionados no contexto serão pré-preenchidos como sugestão, e podem ser editados na tela de confirmação de envio.
  • Deverá ser persistida em campo configuracaoenvio.idneditaemail, byte default 0, que deverá ser criado pelo tools, opção 3.

Assunto 

Será adicionado este campo que deve permitir configurar um assunto padrão de envio nos e-mails que tratam deste processo de pagamento com cartão de crédito. Também será possível adicionar uma TAG dentro deste assunto, que irá fazer com que a aplicação troque a TAG do assunto pelo número do pedido referente ao processo de pagamento de cartão de crédito. Desta forma, o cliente quando receber o e-mail, já irá conseguir ver através do assunto qual a numeração que se trata.

Configuração do corpo do e-mail 

Neste campo é possível configurar um corpo do e-mail personalizado para este tipo de situação. Onde o usuário cria um template de e-mail para que fique alinhado com o cliente e dar mais credibilidade ao processo. A seguir um protótipo de como ficará essa parte da configuração:

  • Corpo 

Neste campo é exibido as tags: 

  • "NÚMERO DO PEDIDO” - Se  o usuário incluir essa tag no corpo, ao enviar o e-mail será substituído pelo número do pedido em questão.
  • “IMAGEM QR CODE” - Se o usuário incluir essa tag no corpo, ao enviar o e-mail será substituído pela imagem do QR Code gerada pela TPI (pedidopagamento.imagem)
  • "PIX COPIA E COLA" - Se o usuário incluir essa tag no corpo, ao enviar o e-mail será substituído pelo código do QR Code gerado pela TPI. (pedidopagamento.codigotransacao)

Pagamento instantâneo por PIX no Pedido de Venda

Após a configuração realizada nos pontos acima, o Pedido de venda já estará pronto para realizar o processo gerando essa forma de pagamento em QRCode.

Assim, ao confeccionar um pedido de venda no SFA, contanto que o campo "Tipo de cobrança" do cabeçalho do pedido esteja vinculado com o plugin de integração "TOTVS Pagamento Instantâneo", o sistema irá disparar a seguinte lógica de funcionamento;

Ao finalizar um pedido, contato que não haja aprovações pendentes para o pedido, o sistema realiza a solicitação do QR code para pagamento junto à TOTVS Pagamento Instantâneo, respeitando o tempo do campo "Timeout ao gerar transação".
Quando a requisição for bem sucedida, o sistema exibe em tela o QR Code (pedidopagamento.imagem), juntamente com o código do "PIX copia e cola"(pedidopagamento.codigopagamento), armazenando a informação vinculado ao pedido de venda (processorTransactionId) (pedidopagamento.tokentransacao).

Caberá ao usuário vendedor compartilhar a informação para pagamento.

Por exemplo, ao finalizar o pedido normalmente:  

Logo em seguida é exibido em tela o tempo de requisição do Plugin TOTVSPagamento Instantâneo para gerar o QRCode do pagamento:

Assim que o pagamento é gerado, é exibido em tela a as opções de leitura do QRCode, Cancelar o pagamento, Enviar via email e Finalizar o pagamento:

Quando o pagamento é realizado no tempo dentro do tempo determinado nas configurações, é exibido em tela a mensagem de "Pagamento aprovado":

O mesmo processo é realizado no Android, e ocorre da seguinte forma: 


Enviando o QR Code por E-mail

Se a configuração de envio de e-mail de contexto "Plugin TOTVS Pagamento Instantâneo" estiver ativa, o sistema exibirá botão "Enviar" com ícone de envelope, para enviar o QR Code por e-mail ao cliente.

Na web:

 No Android:

Ao clicar no botão enviar, o sistema exibe os e-mails trazidos pelo contexto da configuração de e-mail, respeitando o que foi definido na flag "Não permitir editar e-mails de contexto na tela de confirmação de envio", porém também da a possibilidade de o usuário adicionar novos e-mails para receber o QR Code.

Dessa forma, ainda que o e-mail do cadastro não esteja correto, o usuário tem a oportunidade de colocar o e-mail correto para recebimento do QR Code. Nestes casos que o envio do QR Code é realizado por e-mail, o sistema seguirá realizando a consulta de pagamento de 10 em 10 segundos no servidor, até que obtenha um resultado diferente de PENDENTE do servidor de pagamentos da TPI.

E assim como no exemplo anterior, o servidor responde que o pagamento está aprovado, o sistema exibe a mensagem de "Pagamento aprovado. Pedido finalizado com sucesso."  Dessa forma, o pedido será finalizado e o status de pagamento (pedidopagamento.idtiposituacaopagamento, onde sgltiposituacaopagamento="APR") será atualizado para APROVADO.

Mensagens de alerta ao gerar o Pagamento

Nos casos de alguma inconsistência no processo, é sempre alertado ao usuário em tela sobre o procedimento, por exemplo:

Caso a geração do QR Code não seja bem sucedida, por qualquer que seja o motivo, o sistema exibe a mensagem: 

Caso o servidor responda que o pagamento está expirado ou cancelado, o sistema irá exibe a mensagem de "Pagamento expirado/cancelado. Finalize o pedido novamente para gerar um novo pagamento". Dessa forma, o pedido não será finalizado, e o status de pagamento é atualizado para o código de retorno (cancelado (sgl CAN)/expirado (sgl EXP)).

O sistema respeita o tempo máximo de consulta de status de pagamento, segundo o parâmetro "Timeout consulta pagamento". Quando o tempo de requisição de pagamento ultrapassar o tempo definido no campo de timeout, o usuário será notificado: "Pedido finalizado com sucesso! Entretanto, o pagamento precisa ser aprovado para que o pedido seja devidamente encaminhado para faturamento". Dessa forma, o pedido é finalizado e o status de pagamento permanecerá como PENDENTE.

Caso a resposta não seja bem sucedida, por qualquer motivo o sistema notificado o usuário.

Botão Cancelar

Como visto no exemplo anterior, o sistema também disponibiliza o botão "Cancelar", que, ao clicado, exibe uma mensagem de confirmação para o usuário: "A ação irá cancelar o QR Code, que não poderá mais ser pago. Deseja prosseguir?" Sim/não.

Se sim, é disparado uma requisição de cancelamento do QR Code para o servidor do TPI.

Caso a resposta seja bem sucedida, o sistema irá notificar o usuário: "Pagamento cancelado com sucesso. Finalize o pedido novamente para gerar um novo pagamento". Dessa forma, o pedido não será finalizado, e o status de pagamento deverá ser atualizado para cancelado(sgl CAN).

Caso a resposta não seja bem sucedida, o sistema deverá notificar o usuário: "Pagamento não pode ser cancelado. Tente novamente mais tarde ou entre em contato com o suporte técnico"

Botão Finalizar

Como visto no exemplo anterior, o sistema também disponibiliza o botão "Finalizar", que, ao clicado, notifica o usuário: "Pedido finalizado com ressalva! O pedido precisa ter seu pagamento aprovado para ser encaminhado para faturamento. Você será notificado automaticamente das atualizações, porém pode consultar instantaneamente o status do pagamento pela tela de pagamentos do pedido". Dessa forma, o pedido será finalizado e o status de pagamento permanecerá como PENDENTE (sgl PEND).

Acompanhamento das Operações de pagamento após a finalização do pedido

Após a finalização do pedido, o sistema disponibiliza ícone de "Status de pagamento" na listagem de pedidos, e também no "Roda teto" do pedido, exibindo o status do último registro de pagamento vinculado ao pedido.

Os status possíveis são:

  • PENDENTE: com ícone de "alerta amarelo", o status representa o pagamento gerado mas com pagamento ainda pendente de aprovação
  • APROVADO: com ícone de "check verde", o status representa o pagamento já validado no servidor como aprovado.
  • CANCELADO: com ícone "X vermelho", o status representa o pagamento que foi cancelado pelo operador.
  • EXPIRADO: com ícone de "ampulheta", o status representa o pagamento que não foi pago a tempo, e teve seu registro expirado pelo servidor de pagamento.
  • REEMBOLSADO: com ícone de "dinheiro amarelo", o status representa o pagamento que tinha sido aprovado, mas foi reembolsado ao pagador.

Ao clicar no ícone de "Pagamentos" relacionado ao pedido, o sistema exibe tela a seguir:

Também exibido na aplicação Mobile. No Android, a consulta dos registros será online, para garantir que os dados sempre estejam atualizados. Caso não seja possível realizar a conexão online, o sistema deverá mostrar a data de atualização como a data da ultima sincronização.

Os campos de informações disponíveis no card, são:

  • Identificador transação: identificador do token que será o mesmo identificador exibido na plataforma da TOTVS Pagamento Instantâneo. Ao clicar sobre o conteúdo, o sistema copia o identificador para a área de transferência do dispositivo, e disparar uma mensagem toast: "Copiado para área de transferência"
  • Status pagamento: além do ícone, exibe o nome do status de pagamento conforme possibilidades supracitadas.
  • Data criação: Data de criação da transação no servidor de pagamento.
  • Data última atualização: Data referente à última observação do pagamento

Botões de ação

Botão Histórico do pagamento

Ícone que, ao clicado, exibe tela conforme o protótipo a seguir, exibindo o conteúdo textual da tabela de observações de pagamento, para acompanhamento do histórico.

 

Botão Exibir QR Code

Ícone que, ao clicado, consultará no banco para retornar a imagem e conteúdo do QR code para pagamento. Nessa tela, as opções de "Cancelar" e "Cobrar depois" não serão exibidas, somente a função "Enviar e-mail". O timer de consulta de pagamento também não será disparado.

Caso a resposta não seja bem sucedida, por qualquer motivo o sistema deverá notificar o usuário: "Pagamento não pôde ser criado no servidor do {nome do plugin}, cuja resposta foi: ${resposta da requisição}. ". Caso não houver mensagem de retorno, o sistema deverá exibir: "Pagamento não pôde ser criado no servidor do {nome do plugin}. Tente novamente mais tarde ou entre em contato com o suporte técnico"

Botão Consultar pagamento

Ícone que, ao clicado, fará uma requisição ao servidor do TPI para retornar o status atual do pagamento.

         

Caso o servidor responda que o pagamento está aprovado, o sistema irá exibir mensagem toast de "Pagamento aprovado" Dessa forma, o status do pagamento será atualizado para APROVADO.
Caso o servidor responda que o pagamento está expirado, o sistema irá exibir mensagem toast de "Pagamento expirado" Dessa forma, o status do pagamento será atualizado para EXPIRADO.
Caso o servidor responda que o pagamento está cancelado, o sistema irá exibir mensagem toast de "Pagamento cancelado" Dessa forma, o status do pagamento será atualizado para CANCELADO.
Caso o servidor responda que o pagamento está reembolsado, o sistema irá exibir mensagem toast de "Pagamento reembolsado" Dessa forma, o status do pagamento será atualizado para REEMBOLSADO.
Caso o servidor responda que o pagamento está pendente, o sistema irá exibir a mensagem toast de "Pagamento pendente"
Caso a resposta não seja bem sucedida, por qualquer motivo, o sistema deverá notificar o usuário: "Pagamento não pôde ser consultado no servidor do {nome do plugin}, cuja resposta foi: ${resposta da requisição}.". Caso não houver mensagem de retorno, o sistema deverá exibir: "Pagamento não pôde ser consultado no servidor do {nome do plugin}. Tente novamente mais tarde ou entre em contato com o suporte técnico"

Botão Cancelar pagamento

Ícone que, ao clicado, deverá exibir mensagem de confirmação para o usuário: "A ação irá cancelar o QR Code, que não poderá mais ser pago. Deseja prosseguir?" Sim/não. Se sim, fará uma requisição ao servidor do TPI para cancelar o pagamento

Caso a resposta seja bem sucedida, o sistema deverá exibir mensagem toast: "Pagamento cancelado". Dessa forma, o status de pagamento deverá ser atualizado para CANCELADO.

Caso a resposta não seja bem sucedida, o sistema deverá notificar o usuário: "Pagamento não pode ser cancelado no servidor do {nome do plugin}, cuja resposta foi: ${resposta da requisição}. ". Caso não houver mensagem de retorno, o sistema deverá exibir: "Pagamento não pôde ser criado no servidor do {nome do plugin}. Tente novamente mais tarde ou entre em contato com o suporte técnico"


Botão "Novo pagamento"

É exibido sempre que não houver a presença de nenhum pagamento com status APROVADO ou PENDENTE, para pedidos de origem Web/Android, sem numeropedidoerp, de status PENDENTE.

Esse botão, quando clicado, fará a criação de nova transação junto à TPI, e exibir o conteúdo do QR code, em tela semelhante ao resultado do ícone "Exibir QR code"

Fluxo de pagamento quando há aprovações de pedidos

Ao finalizar um pedido com tipos de cobrança vinculados com o plugin de integração TPI, em que o mesmo seja encaminhado para aprovação, qualquer que seja, o sistema não realiza a criação do pagamento. Ao invés, informa o usuário com a seguinte mensagem: "A geração do pagamento do pedido deverá ser gerada após a aprovação do pedido, para que seja devidamente encaminhado para faturamento."

Nesse cenário, o pedido passa pelo fluxo de aprovação padrão, onde os usuários determinarão a situação das aprovações do pedido. Um pedido é declarado totalmente aprovado quando apenas possui aprovações vinculadas nos status de APROVADO ou CANCELADO.

Na notificação que é gerada pela aplicação quando o pedido é aprovado, o sistema deve consultar se o plugin "TOTVS Pagamento instantâneo" está ativo e o pedido está vinculado com um dos tipos de cobrança configurados no plugin. Se positivo, o sistema deverá adicionar a mensagem "Será necessário gerar um pagamento para o pedido X através da tela de "Pagamentos do pedido""

Após aprovação do pedido, é então exibido o ícone de Pendente para pagamentos e ao gerenciar pela tela de Pagamentos, será disponibilizado o botão "Novo pagamento" para que seja gerado um novo QrCode.

Desta forma o pagamento vai ser gerado também para pedidos que passam pelo fluxo de Aprovação

Persistência e integração de dados de pagamento

A presente documentação apenas define que os tokens de pagamento serão armazenados em banco de dados do SFA, vinculados com os pedidos de venda.

A integração de dados de pagamento com o ERP deverá ocorrer sob demanda, de maneira configurável ou customizada, mediante identificação dos campos de destino pelo cliente que utiliza o plugin de integração.


Detalhamento técnico - Comportamento 

  • Pelo tools, opção 5 é inserido um registro na tabela "pluginintegracao" com código "TOTVS_PAG".
  • Pelo tools, opção 3, o sistema cria a tabela pedidopagamento, com os seguintes campos:
    • idpedidopagamento: PK
    • idpedido: FK para tabela pedido, not-null
    • datahoracriacao: timestamp, not-null
    • datahoraultatualizacao: timestamp, nullable
    • tokentransacao: varchar(200), not-null
    • idtiposituacaopagamento: FK para tabela tiposituacaopagamento, not null
    • valor: decimal (18,6), not-null
    • imagem: bytea, nullable
    • link: varchar(200), nullable
    • codigopagamento: varchar(200), nullable
    • codigoerp: varchar(80), nullable
  • Pelo tools, opção 3, o sistema cria a tabela tiposituacaopagamento, com os seguintes campos:
    • idtiposituacaopagamento: PK
    • sgltiposituacaopagamento: varchar(10), not-null
    • descricao: varchar(80), not-null
    • idnativo, byte, not null, default 1
    • codigoerp: varchar(80), nullable
  • Pelo tools, opção 3, o sistema cria a tabela observacaopagamento, com os seguintes campos:
    • idobservacaopagamento,
    • observacao: varchar(4000) not null
    • idpedidopagamento: FK para tabela pedidopagamento, not-null
    • idtiposituacaopagamento: FK para tabela tiposituacaopagamento, not-null
    • idusuario: FK para tabela usuário, not-null
    • datahora: timestamp, not-null
    • codigoerp: varchar(80), nullable
  • Pelo tools, opção 5, o sistema cria os seguintes registros na tabela tiposituacaopagamento:
    • sgltiposituacaopagamento: "PEND"
      • descricao: "Pendente"
      • idnativo: 1
    • sgltiposituacaopagamento: "APR"
      • descricao: "Aprovado"
      • idnativo: 1
    • sgltiposituacaopagamento: "EXP"
      • descricao: "Expirado"
      • idnativo: 1
    • sgltiposituacaopagamento: "REEMB"
      • descricao: "Reembolsado"
      • idnativo: 1
    • sgltiposituacaopagamento: "CAN"
      • descricao: "Cancelado"
      • idnativo: 1
  • Ao finalizar o pedido, a aplicação realiza uma requisição GET para a rota ${"Cadastro de plugin TPI"."Configurações do Pentaho"."URL"}/kettle/executeJob?rep=COMMON_SERVICES&job=COMMONS_Bloco_TPIGENERATEPAYMENT&idpedido=${pedido.idpedido}
    • Autenticação básica com {"Cadastro de plugin TPI"."Configurações do Pentaho"."Usuário"} e {"Cadastro de plugin TPI"."Configurações do Pentaho"."Senha"}
    • O retorno da rota será:
      • codigotransacao
      • imagempagamento
      • codigopagamento
      • valor
    • Enquanto o retorno da request estiver sendo aguardado, na tela, exibe um timer segundo o que foi configurado em ${"Cadastro de plugin TPI"."Configurações do SFA"."Timeout ao gerar transação"}
      • Após o timer zerar, o sistema notifica o usuário que "Pagamento não pôde ser criado no servidor do {nome do plugin}. Tente novamente em breve ou entre em contato com o suporte"
    • Ao receber o QR Code de maneira bem sucedida, o sistema realiza a persistência da tabela pedidopagamento, segundo o de-para a seguir:
      • idpedidopagamento: PK sequencial
      • datahoracriacao: current_timestamp
      • datahoraultatualizacao: current_timestamp
      • tokentransacao: retorno.codigotransacao 
      • idtiposituacaopagamento: id de sgl "PEND"
      • valor: retorno.valor
      • imagem: retorno.imagempagamento
      • link: null
      • codigopagamento: retorno.codigopagamento
    • Persiste também, registro na tabela observacaopagamento, com os campos:
      • observacao: Pagamento de ID ${pedidopagamento.tokentransacao} criado.
        Código do pix copia e cola: ${retorno.codigopagamento}
      • idpedidopagamento: id do registro persistido acima
      • idtiposituacaopagamento: id de sgl "PEND"
      • idusuario: id do usuário logado
      • datahora: current_timestamp

Após a consulta do QR code, o sistema realiza a consulta de pagamento de 10 em 10 segundos no servidor, até que obtenha um resultado diferente de PENDENTE do servidor de pagamentos da TPI.

        • Requisição GET para a rota ${"Cadastro de plugin TPI"."Configurações do Pentaho"."URL"}/kettle/executeJob?rep=COMMON_SERVICES&job=COMMONS_Bloco_TPIGETSTATUS&codigotransacao=${pedidopagamento.tokentransacao}
          • Autenticação básica com {"Cadastro de plugin TPI"."Configurações do Pentaho"."Usuário"} e {"Cadastro de plugin TPI"."Configurações do Pentaho"."Senha"}
          • O retorno da rota será:
            • status: retorno.status
              •  Os possíveis valores da resposta serão:
                • pending: pendente de aprovação

                • approved: aprovado pagamento

                • expired: expirado o QR Code por prazo (padrão 1h)

                • refunded: estornado o valor para o consumidor final, após realizado o pagamento do QR Code

                • cancelled: pedido cancelado pelo operador, sem realizar o pagamento

          • Enquanto o status de pagamento estiver sendo retornado como pendente, na tela, deverá ser exibido um timer segundo o que foi configurado em ${"Cadastro de plugin TPI"."Configurações do SFA"."Timeout consulta pagamento"}
            • Após o timer zerar, o sistema deverá
              • Substituir a label "PIX aguardando pagamento" por "Pagamento não confirmado"
              • O texto "O pedido será finalizado quando o pagamento for confirmado" para "Clique em finalizar para pagamento posterior"

        Caso o servidor responda que o pagamento está aprovado, o sistema irá exibir mensagem de "Pagamento aprovado. Pedido finalizado com sucesso.". Dessa forma, o pedido será finalizado e o status de pagamento (pedidopagamento.idtiposituacaopagamento, onde sgltiposituacaopagamento="APR") será atualizado para APROVADO.

            • Deverá ser alterado o campo pedidopagamento.datahoraultatualizacao
            • Deverá ser persistido um registro em observacaopagamento, com a mensagem: "Pagamento aprovado", e idtiposituacaopagamento de sgl "APR"

        Caso o servidor responda que o pagamento está expirado ou cancelado, o sistema irá exibir a mensagem de "Pagamento expirado/cancelado. Finalize o pedido novamente para gerar um novo pagamento". Dessa forma, o pedido não será finalizado, e o status de pagamento deverá ser atualizado para o código de retorno (cancelado (sgl CAN)/expirado (sgl EXP)).

            • Deverá ser alterado o campo pedidopagamento.datahoraultatualizacao
            • Deverá ser persistido um registro em observacaopagamento, com a mensagem: "Pagamento expirado/cancelado", e idtiposituacaopagamento de sgl "CAN" ou "REEMB", dependendo do retorno

        O sistema deverá respeitar o tempo máximo de consulta de status de pagamento, segundo o parâmetro "Timeout consulta pagamento". Quando o tempo de requisição de pagamento ultrapassar o tempo definido no campo de timeout, o usuário será notificado: "Pedido finalizado com sucesso! Entretanto, o pagamento precisa ser aprovado para que o pedido seja devidamente encaminhado para faturamento". Dessa forma, o pedido será finalizado e o status de pagamento permanecerá como PENDENTE.

        Caso a resposta não seja bem sucedida, por qualquer motivo o sistema deverá notificar o usuário: "Pagamento não pôde ser criado no servidor do {nome do plugin}, cuja resposta foi: ${resposta da requisição}." Caso não houver mensagem, o sistema deverá exibir: "Pagamento não pôde ser consultado no servidor do {nome do plugin}."

        Após a mensagem, o sistema deverá:

            • Substituir a label "PIX aguardando pagamento" por "Pagamento não confirmado"
            • O texto "O pedido será finalizado quando o pagamento for confirmado" para "Clique em finalizar para pagamento posterior"

        O sistema exibirá o botão "Cancelar", que, ao clicado, deverá exibir mensagem de confirmação para o usuário: "A ação irá cancelar o QR Code, que não poderá mais ser pago. Deseja prosseguir?" Sim/não. Se sim, disparar uma requisição de cancelamento do QR Code para o servidor do TPI.

        • Requisição GET para a rota ${"Cadastro de plugin TPI"."Configurações do Pentaho"."URL"}/kettle/executeJob?rep=COMMON_SERVICES&job=COMMONS_Bloco_TPICANCELPAYMENT&codigotransacao=${pedidopagamento.tokentransacao}
          • Autenticação básica com {"Cadastro de plugin TPI"."Configurações do Pentaho"."Usuário"} e {"Cadastro de plugin TPI"."Configurações do Pentaho"."Senha"}
          • O retorno da rota será:
            • status: retorno.status
            • Os possíveis valores da resposta serão:
              • refunded: estornado o valor para o consumidor final, após realizado o pagamento do QR Code
              • cancelled: pedido cancelado pelo operador, sem realizar o pagamento

              • expired: pagamento expirado.

        Caso a resposta seja bem sucedida, o sistema deverá notificar o usuário: "Pagamento cancelado com sucesso. Finalize o pedido novamente para gerar um novo pagamento". Dessa forma, o pedido não será finalizado, e o status de pagamento deverá ser atualizado para cancelado(sgl CAN).

        Caso a resposta não seja bem sucedida, o sistema deverá notificar o usuário: "Pagamento não pode ser cancelado no servidor do {nome do plugin}, cuja resposta foi: ${resposta da requisição}.". Caso não houver mensagem de retorno, o sistema deverá exibir: "Pagamento não pode ser cancelado no servidor do {nome do plugin}. Tente novamente mais tarde ou entre em contato com o suporte técnico"

        O sistema exibirá o botão "Finalizar", que, ao clicado, deverá notificar o usuário: "Pedido finalizado com ressalva! O pedido precisa ter seu pagamento aprovado para ser encaminhado para faturamento. Você será notificado automaticamente das atualizações, porém pode consultar instantaneamente o status do pagamento pela tela de pagamentos do pedido". Dessa forma, o pedido será finalizado e o status de pagamento permanecerá como PENDENTE (sgl PEND).

Consulta de status de pagamento de maneira agendada

Para evitar que pedidos fiquem travados no fluxo de integração com o ERP por falta de consulta do usuário, mesmo tendo sido pagos, o serviço de integração deverá consultar, com frequência definida baseado no recurso infra estrutural do servidor, os status dos pagamentos de transações com status de PENDENTE, para que, ao aprovado, o sistema possa atualizar os status dos pagamentos de maneira ativa, e quando o fizer, notificar o usuário, via notificação PUSH, que o pagamento do pedido foi aprovado/cancelado/expirado.

Portanto, o sistema de integração deve consultar os pagamentos que estão com status pendente de pagamento através da consulta a seguir:

/* CONSULTA_PAGAMENTOS_PENDENTES
select pp.tokentransacao from pedido p
inner join pedidopagamento pp on pp.idpedido = p.idpedido
inner join tiposituacaopagamento tsp on tsp.idstiposituacaopagamento = pp.idstiposituacaopagamento
where tsp.sgltiposituacaopagamento = 'PEND'
*/

Com os tokens retornados, o sistema de integração deverá consultar na api da transformação COMMONS_Bloco_TPIGETSTATUS, e verificar qual é o status atualizado do pagamento a partir do retorno "status".

Com o status do pagamento em memória, o sistema de integração deverá atualizar a coluna pedidopagamento.idstiposituacaopagamento, conforme o seguinte de-para:

Status do retorno

sgltiposituacaopagamento

pending PEND
approved APR
expired EXP
refunded REEMB
cancelled CAN

Se houve alteração de status, o sistema de integração deverá inserir novo registro na tabela observacaopagamento, segundo o seguinte de-para:

PARA

DE

PARA

DE

idobservacaopagamento nextval('seqpkobservacaopagamento')
observacao "O status do pagamento foi atualizado para ${retorno.status > tiposituacaopagamento.descricao}"
idpedidopagamento CONSULTA_PAGAMENTOS_PENDENTES.tokentransacao
idtiposituacaopagamento retorno.status > tiposituacaopagamento.idtiposituacaopagamento
idusuario lookup para tabela usuario where login = 'admin'
datahora current_timestamp

Sincronização de pedido instantaneamente durante operações de pagamento

Para que não exista risco de um pedido já pago permaneça no android sem ser sincronizado, o sistema disponibiliza função de "Sincronização instantânea" via função de "envio de dados" da Sincronização para processos online como o processo de geração de pagamento.

O envio de dados acontecerá de maneira síncrona nos gatilhos abaixo, enviando apenas os dados (DATS) de pedido e suas dependências.

A sincronização instantânea será realizada nas etapas de:

  • Inicio do processo de finalização, enviando o pedido gravado, antes da chamada da criação do pagamento.
  • Após recebimento do QR Code, enviando o registro da tabela de pagamentos do pedido.
  • Após recebimento da atualização do status de pagamento, enviando o registro da tabela de pagamentos do pedido.
  • Após recebimento da confirmação do cancelamento do pedido, enviando o registro da tabela de pagamentos do pedido
  • Após a finalização do pedido, sendo ele pago, ou selecionado para cobrança posterior, atualizando o registro de status do pedido para PENDENTE.
  • Geração de novo pagamento, enviando o registro da tabela de pagamentos do pedido

Dessa forma, o pedido devidamente pago, seja atualizado pela integração, de maneira, agendada, ou seja atualizado instantaneamente, via consulta de pagamentos, fará com que o pedido esteja em condições de ser exportado na próxima execução da integração.

Filtragem de exportação de pedidos sem pagamento aprovado com tipos de cobrança associados ao plugin

Caso o plugin de integração da TPI estiver ativo, a integração padrão deverá aguardar o envio do pedido pedido para o ERP segundo as restrições a seguir:

  • Pedido estar associado à tipos de cobrança que estão configurados no plugin de integração, pelo campo "Tipos de cobrança"
  • Pedido precisa conter 1 pagamento com status APROVADO

OBS: Anteriormente, no Android, pedidos que haviam sido finalizados ainda continuavam editáveis até a sincronização. Agora, esses pedidos que já foram transmitidos ao servidor não serão mais editáveis, como acontece na Web, por exemplo.

Sincronização de dados de maneira online no Android

DADOS GERAIS SOBRE O RECURSO

O sistema disponibiliza a opção de trabalhar de maneira híbrida (online/offline) para os pedidos gerados no Aplicativo Meu SFA, armazenando dados dos pedidos já finalizados.

Ou seja, caso haja conexão com a internet, os pedidos serão enviadas para o servidor automaticamente assim que sejam finalizados.

Configuração

Para atingir esse comportamento, o sistema possui os seguintes parâmetros gerais: 

  • sincronizacao.envio.automatico: se ativo, considerará os seguintes parâmetros filhos:
    • sincronizacao.envio.automatico.gatilho.pedido.finalizacao: Gatilho de sincronização de pedidos (e dependências) na ação de finalização de pedido
    • sincronizacao.envio.automatico.timeout: Tempo, em segundos, que o sistema aguardará para que o processo de sincronização online, ocorra. Caso ultrapasse o tempo estabelecido, o sistema exigirá a sincronização do pedido de maneira manual (armazenando os registos de maneira offline no aparelho mobile)

Desta forma, quando os parâmetros estiverem ativos e o usuário finalizar o pedido no Mobile, já mostra a sincronização automática e é exibido uma mensagem em toast indicando que o pedido foi Finalizado e Sincronizado,

Comportamento

Exemplo de comportamento quando o pedido é gravado e sincronizado automaticamente:  

Assim que o pedido é finalizado e sincronizado vai para o servidor e fica disponível para consulta na web. Sendo então disponibilizado em tempo real.

Lembrando que no caso do profissional estiver sem acesso a internet, é exibido um aviso para que o mesmo faça a sincronização manual assim que a internet estiver disponível.

E em seguida, ele poderá fazer a sincronização manual, como anteriormente.

Escopo técnico

  • Ao finalizar o pedido, mediante configuração dos parâmetros sim3g.sincronizacao.envio.automatico e pedido.finalizacao com ativos, o sistema envia o pedido instantaneamente para o servidor.
    • Um pedido finalizado e enviado ao servidor não poderá ser editado.
      • Envio de dados preenche colunas de datatransmissao e horatransmissao
      • Neste momento é marcado o registro para ser desconsiderado na sincronização offline
    • O ícone de pedido transmitido é marcado
    • O sistema retorna mensagem toast longa quando sucesso, com mensagem: "Pedido sincronizado com sucesso"
    • O sistema retorna mensagem dialog quando falha, informando mensagens tratadas nos casos de:
      • "Aparelho não está conectado à internet.
        O pedido deverá ser sincronizado manualmente"
      • "Servidor não está acessível no momento. O pedido deverá ser sincronizado manualmente"
    • A URL de conexão da sync vem da propriedade HOSTS do Sim.ini
      • Caso não haja sucesso com o primeiro valor, é executado uma tentativa de conexão com os outros valores, em um forEach.
  • Para registros marcados com idnsyncautomatica = 1, o sistema tira do fluxo de sincronização manual, visto que o registro já está no servidor
    • Ao final da sincronização manual, todos os dats recebidos, ficam com coluna idnsyncautomatica = 0
  • No tools, opção 18, é incluso os seguintes parâmetros:
    • sincronizacao.envio.automatico 
        • descrição: "Define se o sistema enviará dados do aparelho mobile ao servidor automaticamente, se conectado à internet"
        • observacao: "Se não conectado à internet, o usuário será notificado para executar a sincronização manual"
        • valor: 0
      • sincronizacao.envio.automatico.timeout
        • descrição: "Tempo máximo, em segundos, que o sistema aguardará para executar a sincronização automática"
        • observacao: "Se ultrapassado o tempo de espera, o usuário será notificado para executar a sincronização manual"
        • valor: 30
      • sincronizacao.envio.automatico.gatilho.pedido.finalizacao
        • descrição: "Envia pedido no gatilho de finalização, se conectado à internet"
        • observacao: "Se não conectado à internet, o usuário será notificado para executar a sincronização manual"
        • valor: 0


Tabela de preço nos itens do pedido

DADOS GERAIS SOBRE O RECURSO

O sistema disponibiliza a possibilidade de utilizar tabelas de preço nos itens do pedido, funcionalidade cujo a qual proporciona uma maior flexibilidade de preços ao incluir produtos no pedido de venda.

Configuração

Para habilitar a visualização do campo de tabela de preço nos itens do pedido acesse:
Configuração > Configuração pedido > Produto

Campos Descrição
WEB_GRID_TABELAPRECO Determina se o campo de tabela de preço será exibido na grid de produtos do pedido (Carrinho) .
WEB_PESQUISA_TABELAPRECO Determina se o campo de tabela de preço será exibido na consulta de produtos do pedido.
ANDROID_CARD_TABELAPRECO Determina se o campo de tabela de preço será exibido na nos cards da aba Produto do Android.
ANDROID_CARRINHO_TABELAPRECO Determina se o campo de tabela de preço será exibido na nos cards da aba Carrinho do Android.
ANDROID_NEGOCIACAO_TABELAPRECO Determina se o campo de tabela de preço será exibido na tela de negociação do Android.

A configuração de busca desse campo pode ser realizada no menu:
Configuração > Configuração pedido > Busca produto > Entidade: PEDIDOPRODUTO_TABELAPRECO

Obs.: Quando utilizada esta funcionalidade de tabela de preço nos itens do pedido, para que a busca de preços ocorra normalmente também é necessário adicionar o filtro PEDIDOPRODUTO_TABELAPRECO_IDTABELAPRECO na entidade TABELAPRECOPRODUTO da busca de produtos.

Utilização de tabela de preço nos itens do pedido

Com os campos devidamente habilitados e configurados, no lançamento de pedido será exibido o campo de tabela de preço nos produtos:

Este campo é do tipo Combobox e permite que o usuário altere a tabela de preço diretamente nos itens.
Por padrão, a tabela de preço do cabeçalho virá selecionada também nos itens.
Ao alterar a tabela de preço no item. o preço do produto será atualizado conforme a configuração da tabela selecionada.

Escopo técnico - Banco de Dados

  • Pelo tools, opção 5, o sistema cria o seguinte registro na tabela wsconfigpedidocampo:
contexto nomeentidade label idnativo idnvisivel idneditavel idneditavelcomitens idnobrigatorio idnunion ordem codigoerp idnexiberelatorio sglordenacao
PRODUTO PEDIDOPRODUTO_TABELAPRECO standard.pedidoconfig.campo.lbl.tabelapreco 0 0 0 0 0 0 0
0
  • Pelo tools, opção 5, o sistema cria o seguinte registro na tabela wsconfigpedidogeral:
chave label idnativo codigoerp idparametrosuperior
EXIBIR_PRODUTOS_COM_PRECOS_EM_OUTRAS_TABELAS
0

  • Pelo tools, opção 18, o sistema cria os seguintes registros na tabela wsconfigpedidoproduto:
chave label linha coluna idnvisivel idneditavel codigoerp idnexiberelatorio idnobrigatorio idwsconfigpedprodsup
WEB_GRID_TABELAPRECO standard.pedidoconfig.item.tabelapreco 0 0 0 0
0 0
WEB_PESQUISA_TABELAPRECO standard.pedidoconfig.filtro.item.tabelapreco 0 0 0 0
0 0
ANDROID_CARD_TABELAPRECO standard.pedidoconfig.item.tabelapreco 0 0 0 0
0 0
ANDROID_CARRINHO_TABELAPRECO standard.pedidoconfig.item.tabelapreco 0 0 0 0
0 0
ANDROID_NEGOCIACAO_TABELAPRECO standard.pedidoconfig.item.tabelapreco 0 0 0 0
0 0
  • Pelo tools, opção 18, o sistema cria o seguinte registro na tabela icone:
idnativo descricao codigo imagem consulta sglcontexto codigoerp idnfixo mapacomparador
0 O produto possui preço em outras tabelas de preço PRODUTO_POSSUI_PRECO_OUTRAS_TABELAS

PRODUTO
1

Telas de Configuração

Na tela disponível em Configuração > Configuração pedido > Busca produto:

    • Implementado o novo registro PEDIDOPRODUTO_TABELAPRECO.

Na tela disponível em Configuração > Configuração pedido > Produto:

    • Implementado os novos registros:
WEB_GRID_TABELAPRECO
WEB_PESQUISA_TABELAPRECO
ANDROID_CARD_TABELAPRECO
ANDROID_CARRINHO_TABELAPRECO
ANDROID_NEGOCIACAO_TABELAPRECO

Na tela disponível em Configuração > Configuração pedido > Geral:

    • Implementado o novo registro EXIBIR_PRODUTOS_COM_PRECOS_EM_OUTRAS_TABELAS.

Na tela disponível em Cadastro > Geral > Ícone:

    • Implementado o novo registro PRODUTO_POSSUI_PRECO_OUTRAS_TABELAS.


Validações de estoque

DADOS GERAIS SOBRE O RECURSO

O sistema possibilita validar o estoque ao incluir o item no carrinho como também ao gravar ou finalização o pedido. 

Configuração

A configuração é realizada nos parâmetros do pedido Configuração > Configuração Pedido > Geral.

No parâmetro principal HABILITAR_VALIDACAO_ESTOQUE é aberto a raiz de parâmetros de gatilhos que definem o comportamento da validação do estoque.

Campo

HABILITAR_VALIDACAO_ESTOQUE



VALEST_GATILHO_ALTERACAO_CARRINHO

VALEST_GATILHO_GRAVAR

VALEST_GATILHO_FINALIZAR
VALEST_LOGICA_BLOQUEIA_SALDO_NEGATIVO
VALEST_LOGICA_BLOQUEIA_SALDO_POSITIVO

Sendo assim é configurado pelo usuário, uma combinação de parâmetros que define o comportamento do saldo de estoque dos produtos no carrinho.

Exemplos de combinação

  • Configuração para que valide o estoque e não permita finalizar o pedido com produtos com estoque negativo

Configuração de pedido

Combinação de parâmetros

Ativo

Com estoque HABILITAR_EXIBICAO_PRODUTOS_COM_ESTOQUE Sim
VALEST_LOGICA_BLOQUEIA_SALDO_NEGATIVO Sim
VALEST_GATILHO_FINALIZAR Sim

Para que a venda sea possível concluir, deverá ser utilizado no campo "Config. pedido" a opção "Com estoque". Assim ao incluir o item no carrinho como no quadro a seguir, o saldo ficará positivo e permitirá finalizar o pedido:

Produto

Estoque disponível

Qtde no carrinho

Z146J310000045 - GRAMA SINTETICA 10MM NACIONAL 1,5X2,00M - 9PCS INBOX 10 2

Neste exemplo, o saldo ficará positivo, e o produto ainda possui um estoque positivo de 8 unidades, sendo assim o pedido será gravado ou finalizado corretamente. Mas se o usuário utilizar uma venda com quantidade maior que o estoque disponível, será exibido um alerta em tela e não será possível concluir a venda.

  • Configuração para que valide o estoque e não permita finalizar o pedido com produtos com estoque positivo:

Configuração de pedido

Combinação de parâmetros

Ativo

Sem estoque HABILITAR_EXIBICAO_PRODUTOS_SEM_ESTOQUE Sim
HABILITAR_EXIBICAO_PRODUTOS_COM_ESTOQUE Sim
VALEST_LOGICA_BLOQUEIA_SALDO_POSITIVO Sim
VALEST_GATILHO_FINALIZAR Sim

Para que a venda seja possível concluir, deverá ser utilizado no campo "Config. pedido" a opção "Sem estoque". Assim ao incluir o item no carrinho como no quadro a seguir, o saldo ficará negativo e permitirá finalizar o pedido:

Produto

Estoque disponível

Qtde no carrinho

Z146J310000045 - GRAMA SINTETICA 10MM NACIONAL 1,5X2,00M - 9PCS INBOX 10 14

Porém se nestas condições o usuário tentar utilizar o item com saldo positivo, como no quadro a seguir: 

Produto

Estoque disponível

Qtde no carrinho

Z146J310000045 - GRAMA SINTETICA 10MM NACIONAL 1,5X2,00M - 9PCS INBOX 10 8

Neste exemplo, o saldo ficará positivo, e o produto ainda possui um estoque positivo de 2 unidades, como a venda está sendo feita com a opção "Sem estoque" no campo "Config. pedido", deve ser validado na finalização do pedido, impedindo a finalização, pois o produto ainda possui um saldo positivo, e para isso deve se usar no campo "Config. pedido" a opção "Com estoque".

Alteração na base dados

  • Pela opção 5 do tools é criado os registros:
    • VALEST_GATILHO_ALTERACAO_CARRINHO
      • Descrição: Dispara a lógica dos parâmetros VALEST_LOGICA_BLOQUEIA_SALDO_NEGATIVO e VALEST_LOGICA_BLOQUEIA_SALDO_POSITIVO, na alteração de produtos no carrinho

    • VALEST_GATILHO_GRAVAR
      • Descrição: Dispara a lógica dos parâmetros VALEST_LOGICA_BLOQUEIA_SALDO_NEGATIVO e VALEST_LOGICA_BLOQUEIA_SALDO_POSITIVO, quando o pedido for gravado
    • VALEST_GATILHO_FINALIZAR
      • Descrição: Dispara a lógica dos parâmetros VALEST_LOGICA_BLOQUEIA_SALDO_NEGATIVO e VALEST_LOGICA_BLOQUEIA_SALDO_POSITIVO, quando o pedido for finalizado
    • VALEST_LOGICA_BLOQUEIA_SALDO_NEGATIVO
      • Descrição: O sistema não permitirá a venda de produtos com saldo negativo (Quantidade solicitada > estoque disponível). A lógica somente será disparada quando um dos parâmetros VALEST_GATILHO_ALTERACAO_CARRINHO / VALEST_GATILHO_GRAVAR / VALEST_GATILHO_FINALIZAR estiverem ativos
    • VALEST_LOGICA_BLOQUEIA_SALDO_POSITIVO
      • Descrição: O sistema não permitirá a venda de produtos com saldo positivo (Quantidade solicitada <= estoque disponível). A lógica somente será disparada quando um dos parâmetros VALEST_GATILHO_GRAVAR / VALEST_GATILHO_FINALIZAR estiverem ativos

Lógica no pedido

  • Ao alterar o campo de "Quantidade" ou "Quantidade Embalagem",
    • Caso o parâmetro VALEST_GATILHO_ALTERACAO_CARRINHO estiver ativo,
      • Caso o parâmetro VALEST_LOGICA_BLOQUEIA_SALDO_NEGATIVO estiver ativo,
        • O sistema bloqueia a alteração (rollback) se o campo "Quantidade" > "Estoque disponível" (QUANTIDADE_PREVISTA_ENTRADA ? QUANTIDADE_PREVISTA_ENTRADA : ESTOQUE) 
      • Caso contrário,
        • O sistema permite a alteração
    • Caso contrário,
      • O sistema permite a alteração
  • Ao clicar no botão Gravar do pedido
    • Caso o parâmetro VALEST_GATILHO_GRAVAR estiver ativo,
      • Caso o parâmetro VALEST_LOGICA_BLOQUEIA_SALDO_NEGATIVO estiver ativo,
        • O sistema bloqueia a alteração (rollback) se o campo "Quantidade" > "Estoque disponível" (QUANTIDADE_PREVISTA_ENTRADA ? QUANTIDADE_PREVISTA_ENTRADA : ESTOQUE) 
      • Caso contrário,
        • O sistema permite a alteração
      • Caso o parâmetro VALEST_LOGICA_BLOQUEIA_SALDO_POSITIVO estiver ativo,
        • O sistema bloqueia a alteração (rollback) se o campo "Quantidade" <= "Estoque disponível" (QUANTIDADE_PREVISTA_ENTRADA ? QUANTIDADE_PREVISTA_ENTRADA : ESTOQUE) 
      • Caso contrário,
        • O sistema permite a alteração
    • Caso contrário,
      • O sistema deverá permitir a alteração
  • Ao clicar no botão Finalizar do pedido
    • Caso o parâmetro VALEST_GATILHO_FINALIZAR estiver ativo,
      • Caso o parâmetro VALEST_LOGICA_BLOQUEIA_SALDO_NEGATIVO estiver ativo,
        • O sistema bloqueia a alteração (rollback) se o campo "Quantidade" > "Estoque disponível" (QUANTIDADE_PREVISTA_ENTRADA ? QUANTIDADE_PREVISTA_ENTRADA : ESTOQUE) 
      • Caso contrário,
        • O sistema permite a alteração
      • Caso o parâmetro VALEST_LOGICA_BLOQUEIA_SALDO_POSITIVO estiver ativo,
        • O sistema bloqueia a alteração (rollback) se o campo "Quantidade" <= "Estoque disponível" (QUANTIDADE_PREVISTA_ENTRADA ? QUANTIDADE_PREVISTA_ENTRADA : ESTOQUE) 
      • Caso contrário,
        • O sistema permite a alteração
    • Caso contrário,
      • O sistema permite a alteração










Venda com embalagem

DADOS GERAIS SOBRE O RECURSO

A funcionalidade controle de embalagem do TOTVS CRM | SFA permite que o sistema seja capaz de exibir, tratar e persistir dados a respeito de embalagem de produtos no pedido de venda.

Quando utilizado, o campo embalagem é editável e são exibidas as embalagens vinculadas ao produto e à filial selecionada no pedido, ou seja, um mesmo produto pode ser adquirido através de embalagens diferentes.

Embalagem de itens no Pedido

O campo embalagem é exibido apenas quando o sistema vende por embalagens, assim os parâmetros para este fluxo devem estar configurados para este tipo de venda.

Como exemplo, um produto sendo comercializado por embalagem, como "Refrigerante", pode ser comercializado por Unidade, ou pode ser comercializado por Fardo contendo 12 unidades. A relação entre as unidades e quantidades é estabelecida pelo "fator embalagem".

Quando o sistema trabalha por embalagem, algumas funcionalidades como campanhas de desconto, políticas de desconto, campanhas de brinde, regras de preço fixo priorizarão os registros em que o campo de embalagem esteja preenchido.

Os preços de venda poderão ser alterados em função da embalagem, através do fator de preço. Por exemplo, se o fator de preço da embalagem Fardo for 0,90, significa que o preço unitário receberá um desconto de 10%.

Vínculos e configurações disponíveis 

  • Embalagem
  • Produto
  • Embalagem
  • Código de barra
  • Fator de embalagem
  • Fator de embalagem padrão
  • Fator de preço
  • Local
  • Quantidade múltipla de venda
  • Sigla da unidade de medida padrão
  • Embalagem ativa
  • Embalagem padrão

Através das configurações da embalagem será possível realizar validações, mostrar valores e preenchimento automático com a embalagem que possuir menor fator de quantidade.

Os dados de embalagem serão exibidos no carrinho quando inserido produto ao carrinho. Quando inserido será selecionado automático a embalagem do produto aplicando o filtro configurado.

A embalagem possui relação com a quantidade, pois com o preenchimento da embalagem do produto será possível determinar a quantidade de produtos. No carrinho será exibido o campo de “Qt. Embalagem” que será a multiplicação da quantidade informada com o fator da quantidade do produto.

Nas configurações de embalagem poderá definir qual campo será exibido tanto no ambiente Android como no ambiente Web como:

  • Ambiente Web
    • Campo embalagem na grid do carrinho
    • Campo quantidade da embalagem na grid do carrinho
  • Ambiente Android
    • Campo embalagem no card
    • Campo embalagem na tela de negociação
    • Campo embalagem no carrinho
    • Campo quantidade da embalagem no card
    • Campo quantidade da embalagem na tela de negociação
    • Campo quantidade da embalagem no carrinho

Quando realizado a alteração nos campos de Embalagem, Qt. Embalagem e Quantidade o sistema deverá atualizar as informações desses campos automaticamente aplicando os valores correspondentes aos dados cadastrados no produto e na embalagem do produto.

Configuração

Para utilização da venda por embalagem, o parâmetro sim3g.pedido.embalagem.utilizavendaporembalagem deve estar ativo

Ativar no produto a validação de produto embalagem

E escolher exibir o campo no carrinho, em Configuração > Configuração Pedido > Produto:

Unidade de medida

O sistema deverá exibir a unidade de medida vinculada ao produto. No campo unidade de medida vai permitir a visualização das informações da embalagem, preferencialmente quando o sistema utilizar embalagem.

Caso não utilizar embalagem no sistema, será trazido a unidade de medida vinculada ao produto.

O campo será exibido no interior do card no ambiente Android e na grid de produtos no ambiente Web.

Venda com embalagem fracionada

Quando o sistema estiver configurada para venda por embalagens, o usuário pode editar no Cadastro do produto a opção "Permite fracionada"

Assim, quando ativo, irá permitir que o usuário informe a quantidade de embalagens com casas decimais e o cálculo será feito automaticamente para que seja vendido apenas frações de embalagem do item

Porém quando a quantidade fracionada estiver desmarcado, o sistema permite informar a quantidade do item fracionado porém a quantidade de embalagem aceita somente números inteiros.

Preços de Tabela com Fator de Embalagem

O sistema de pedidos de venda possui o recurso "Fator de Embalagem". Isso permite visualizar, de maneira clara, quantos itens individuais estão contidos em uma embalagem selecionada para um produto específico.

Assim como o campo "Preço de tabela", não será editável e servirá apenas para visualização. Os campos idneditavel e idnobrigatorio não serão implementados no pedido de venda e devem mostrar "-" na configuração dos campos do produto.

Quando o campo "Embalagem" do produto for alterado, este campo também deve ser atualizado. O novo "Fator de embalagem" deve ser levado em consideração no "Preço tabela embalagem".

Com a nova funcionalidade "Fator de Embalagem" implementada no sistema, embaixo de cada produto no pedido, o cliente pode ver claramente quantas unidades estão contidas em uma embalagem selecionada. Isso trouxe transparência ao processo de pedido, reduziu o número de erros e aumentou a confiança dos clientes na distribuidora. Os clientes, agora, podem fazer pedidos com maior precisão, sabendo exatamente quantas unidades estão solicitando.

Mais detalhes deste processo no Link

Exibição do Fator de Embalagem no Carrinho

O "Fator de Embalagem" é um aditivo recente ao TOTVS SFA, proporcionando aos usuários uma visualização imediata da relação entre produto e embalagem. Disponível tanto na interface Web quanto na aplicação Android, esse recurso simplifica e esclarece o processo de pedidos.

Permite aos usuários visualizar o "Fator de Embalagem" diretamente na grade de produtos na interface web.

  • Caminho: Configuração → Configuração de pedido → Produto.
    • As colunas "Editável" e "Obrigatório" para registros FATOR_EMBALAGEM devem ser protegidas contra modificações.

Com a funcionalidade "Fator de Embalagem" implementada no sistema, agora, embaixo de cada produto no pedido, o cliente pode ver claramente quantas unidades estão contidas em uma embalagem selecionada. Isso trouxe transparência ao processo de pedido, reduziu o número de erros e aumentou a confiança dos clientes na distribuidora. Os clientes, agora, podem fazer pedidos com maior precisão, sabendo exatamente quantas unidades estão solicitando.

Mais detalhes deste processo no Link








  • Sem rótulos