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:
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:
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:
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).
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).
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.
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:
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 |
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:
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:
Na aba de autorização, é selecionado o tipo Basic e informado os dados de usuário e senha:
No header da requisição, informaado o tipo do conteúdo:
Content-Type: application/json
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"
}
]
}
"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.
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:
Na URL para o Datasul, 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:
Na aba de autorização, selecione o tipo Basic e informe os dados de usuário e senha:
No header da requisição, informado o tipo do conteúdo:
Content-Type: application/json
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
}
]
}
"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
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 }
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:
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:
Na aba de autorização, é selecionado o tipo Basic e informado os dados de usuário e senha:
No header da requisição, informaado o tipo do conteúdo:
Content-Type: application/json
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"
}
]
}
"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.