Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Painel
borderStylenone

DADOS GERAIS SOBRE O RECURSO

Painel

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.

Image Modified

Painel

Índice
maxLevel4
minLevel2
stylecircle
separatorpipe


Deck of Cards
id2
Card
defaulttrue
labelEscopo Funcional / Manual

Configuração do Plugin

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


CampoDados informados
Campo que definirá se o plugin utilizado será Protheus, Datasul ou Outro Plugin dentro das diretrizes informada na documentação
URL de conexãoUrl fornecida pelo plugin para gerar a integração com o cálculo de imposto
UsuárioUsuário do plugin
SenhaSenha do plugin
Timeout ao requisitar impostos (seg)Tempo de espera para o retorno da consulta no Plugin
Obrigar simulação de impostos paraCampo 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"
Deck of Cards
effectDuration0.5
historyfalse
idsamples
effectTypefade
Card
defaulttrue
id1
labelProtheus

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).

Card
defaulttrue
id2
labelDatasul

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).

Card
defaulttrue
id3
labelGenérico

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.






Card
labelEscopo Técnico

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



Deck of Cards
effectDuration0.5
historyfalse
idsamples
effectTypefade
Card
defaulttrue
id0
labelModelo Requisição

Modelo de requisição enviada:


Bloco de código
{
    "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:

Bloco de código
{
  "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çãoCampo do SFA
itemimposto.impostos.sglimposto

pedidoimposto.idimposto

itemimposto.impostos.valorbase

pedidoimposto.valorbasecalculoreducao

itemimposto.impostos.aliquotapedidoimposto.valorbasecalculo
itemimposto.impostos.valortotalimposto

pedidoimposto.valorimposto

itemimposto.ordem / itemimposto.idprodutopedidoimposto.idpedidoproduto (procurar por pedidoproduto.ordem e pedidoproduto.idproduto respectivamente)
itemimposto.valortotalfretepedidoproduto.valorfrete
itemimposto.valortotalcomimpostospedidoproduto.valortotalcomimposto
Card
defaulttrue
id1
labelProtheus

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 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:

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

Card
defaulttrue
id2
labelDatasul

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.

Card
defaulttrue
id3
labelGenérico

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
}



Card
defaulttrue
id4
labelInformações complementares Datasul

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.



Informações
titleErro

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çãoCampo do SFA
itemimposto.impostos.sglimposto

pedidoimposto.idimposto

itemimposto.impostos.valorbase

pedidoimposto.valorbasecalculoreducao

itemimposto.impostos.aliquotapedidoimposto.valorbasecalculo
itemimposto.impostos.valortotalimposto

pedidoimposto.valorimposto

itemimposto.ordem / itemimposto.idprodutopedidoimposto.idpedidoproduto (procurar por pedidoproduto.ordem e pedidoproduto.idproduto respectivamente)
itemimposto.valortotalfretepedidoproduto.valorfrete
itemimposto.valortotalcomimpostospedidoproduto.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"
        }
    ]
}