Árvore de páginas

INFORMAÇÕES PROPRIETÁRIA


Este documento é de propriedade da Wealth Systems Informática Ltda. Todas as informações contidas aqui são confidenciais e não devem ser copiadas ou divulgadas para quaisquer terceiros sem antes um consentimento formal, por escrito, da Wealth Systems, podendo somente ser divulgada dentro do Cliente para os seus funcionários que estiverem diretamente envolvidos no projeto, o qual este documento relata.
A empresa Cliente será solenemente responsável por assegurar que todos seus funcionários envolvidos estejam de acordo e acatem estas condições e ainda, está intitulado para usar as informações contidas neste documento, somente para propósitos de avaliação. Este documento é versionado e sua estrutura não poderá ser alterada sem o consentimento do Gerente de Projetos da Wealth Systems.

HISTÓRICO DE REVISÃO

Data

Modificado por

Descrição da mudança

30/09/2022

Danielly Omori

Criação do documento

17/10/2022William Rodrigues de MelloRevisão do Documento

INTRODUÇÃO


1 INTEGRAÇÃO DE DADOS

A integração de dados entre TOTVS SFA e Datasul se dá através de uma API (Application Programming Interface) que utiliza web services com arquitetura REST (Representational State Transfer), tanto para a importação de dados (Datasul → TOTVS SFA) como para a exportação de Pedidos e Clientes (TOTVS SFA → Datasul).



Envie ao Coordenador do Projeto as informações a seguir por ambiente, HOMOLOGAÇÃO E PRODUÇÃO:

  • URL Ambiente REST: 
  • http://{IP}:{PORTA}/dts/datasul-rest/resources/prg/


  • Usuário e Senha cadastrado no Datasul (exemplo - usuário: totvssfadt senha: dtsenha14)
  • Considerações: de preferência, o usuário e senha deve ser minúsculo e sem nenhum caractere especial.


1.1 Agendamento De Rotinas

O agendamento varia muito, conforme o poder de processamento de cada servidor, e da quantidade de registros de tráfego.
Foi criado agendamentos padrão nas rotinas de integração, porém, não necessariamente deve ser seguido à risca pelo motivo explicado acima. Nos cenários necessários, agendamos uma carga completa para ser executada durante a noite.


1.2 Importação De Dados

Abaixo estão descritas todas as entidades que são importadas na integração standard entre Datasul e TOTVS SFA, assim como informações relevantes sobre as APIs e transformações desenvolvidas no Pentaho Spoon pelo time de integração da TOTVS.

Método de requisição: GET 

URL base: http://{IP}:{PORTA}/dts/datasul-rest/resources/prg/{TIPO}/v1/{ENTIDADE}

A URL base acima é o endereço base de vários serviços, que serão listados mais abaixo como entidade.

As informações do IP e a PORTA dependem da configuração do ambiente do cliente. O campo TIPO se refere as divisões de serviços da API Nativa Datasul que são: cdp, cep, ftp, pdp, qop, finapi. 


1.3 Requisições De Autenticação

A autenticação utilizada pelas APIs é a Basic Auth que usa a autenticação por um usuário e senha do Datasul e é convertido em um token base 64 no seguinte modelo:

usuario:senha

Convertendo para base64 temos o seguinte resultado: dXN1YXJpbzpzZW5oYQ==

Adicionando a tag Basic na frente temos o token final:

Basic dXN1YXJpbzpzZW5oYQ==

Esta tag é passada no header Authorization do step do Pentaho ou Postman (se for o caso)

Considerações: de preferência, o usuário e senha deve ser minúsculo e sem nenhum caractere especial.

1.4 Requisições Count

Como o nome já sugere, antes de requisitarmos os dados, contamos os registros que nos retornaram nas chamadas a seguir. Dessa maneira dividimos os registros em páginas, limitando a quantidade total por página (geralmente mil registros por página, mas é possível ser configurado rotina a rotina).
Isso deve ser seguido, pois requisições com um volume de retorno muito grande além gerar lentidão, podem derrubar o serviço do plugin.
Para gerar as paginações fazemos uma primeira requisição com um parâmetro chamado totalCount com o valor true, sendo assim o retorno informa o total de registros na entidade no campo totalHits, conforme mostra o Código 1 para que possamos calcular a quantidade de páginas e o número de registros por requisição.

Segue o exemplo:
URL: http://IP:PORTA/dts/datasul-rest/resources/prg/cdp/v1/cityPublic?totalCount=true 

Resultado:

{
"total": 1,
"totalHits": 5595,
"hasNext": true,
"items": [
{
"IBGECode": 5200050,
"regionCode": "CENTRO",
"sigla": "GO246",
"city": "ABADIA DE GOIAS",
"stateCode": "GO",
"countryName": "BRASIL",
"_expandables": [
"state",
"country"
],
"microRegionCode": ""
}
]
}


2 ENTIDADES

Nesta foi realizado um de-para de todas as rotinas executadas em um cliente Datasul. Serão apresentadas informações como tabela e campo de origem do Datasul, qual endpoint e campos utilizados para trazer os dados via API e em quais tabelas e campos do SFA essas informações serão inseridas.

Abaixo será apresentado também como é feita hoje a organização das transformações utilizadas pela integração. 


BLOCO

TRANSFORMAÇÕES

Bloco_Default_SFA (Executado somente uma vez, no início do processo de integracação)TipoFrete, TipoEstoque, ClassificacaoParceiro, PerfilAcesso, TipoPedido, TipoSituacaoPedido, TipoSitPedidoProduto, TipoProduto,  TipoSituacaoCadastro, ClassificacaoFinTitulo, TipoEmail, TipoTelefone, Operacao
Bloco_CommonsPais_Uf_Cidade (Pais, UnidadeFederativa e Cidade), CondiçãoPagamento, TipoCobranca, TipoNotaFiscal, Moeda (Indexador e ContacaoIndexador), Tipologia, Linha, TipoDocumento e GrupoParceiro.
Bloco_FilialFilial (LocalUEM, ParceiroUEM, ParceiroLocalUEM, ParceiroTipoParceiroUEM, LocalTipoLocalUEM, LocalFilialUEM) e Região (Regiao, LocalRegiao).
Bloco_VendedorVendedor (Usuario, UsuarioTelefone, UsuarioEmail, UsuarioFilial).
Bloco_ProdutoGrupoProduto, UnidadeMedida, Produto (Produto, ProdutoEmbalagem, ProdutoGrupoProduto, ProdutoFilial).
Bloco_PrecoTabelaPreco, TabelaPrecoProduto.
Bloco_EstoqueEstoque.
Bloco_ParceiroTransportadora (LocalTRA, ParceiroTRA, ParceiroLocalTRA, ParceiroTipoParceiroTRA, LocalTipoLocalTRA, LocalTelefoneTRA), Cliente (ParceiroCLI, LocalCLI, PessoaFisica, PessoaJuridica, ParceiroTipoParceiroCLI, ParceiroTransportador, ParceiroGrupoParceiro, ParceiroLocalCLI, LocalTipoLocalCLI, LocalEmailCLI, LocalTelefoneCLI, LimiteCredito, LocalCondicaoPgto, UsuarioLocal, LocalTipologia, LocalTabelaPreco, Parceiro_NomeAbrev, Parceiro_NaturezaOperacao, LocalENT (LocalENT, LocalTipoLocalENT, ParceiroLocalENT), ClienteContato (ContatoPessoa, ContatoPessoaEmail, ContatoPessoaTelefone)), LocalIdentificacao, Portador.
Bloco_PedidoPedido (Pedido, PedidoProduto, PedidoEntrega).
Bloco_NotaFiscalNotaFiscal (NotaFiscal, NotaFiscalProduto), NotaFiscalDevolucao (NotaFiscalDevolucao, NotaFiscalProdutoDevolucao).
Bloco_FinanceiroFinanceiroTitulo.
Bloco_Exp_PedidoExportação de Pedidos.
Bloco_Exp_ClienteExportação de Clientes.


Segue um mapeamento de todas entidades integradas pelo Datasul atualmente.


PAIS-UF-CIDADE

Os dados das tabelas cidade, pais e unid-feder do Datasul, são acessados através do endpoint /dts/datasulrest/resources/prg/cdp/v1/cityPublic e são salvos nas tabelas cidade, pais e unidadefederativa do TOTVS SFA com os seguintes campos: 

TOTVS SFA

TIPO

DATASUL

PAIS.SIGLASTRING

CASE

WHEN countryName(cidade.pais) = 'BRASIL' 

THEN 'BR'

WHEN countryName(cidade.pais) = 'PAIS INDEFINIDO' 

THEN 'EX'

ELSE {

CASE

WHEN countryName(cidade.pais) = ''  (vazio)

THEN 'EX'

ELSE

substr(countryName(cidade.pais), 0, 2)

}

PAIS.DESCRICAOSTRINGcountryName(cidade.pais)
PAIS.NACIONALIDADESTRING

CASE

WHEN countryName(cidade.pais) = 'BRASIL' 

THEN 'BRASILEIRA'

WHEN countryName(cidade.pais) = 'PAIS INDEFINIDO'

THEN 'INDEFINIDA'

ELSE 

'ESTRANGEIRA'

PAIS.CODIGOSTRING

CASE

WHEN countryName(cidade.pais) = 'BRASIL'

THEN 'BR'

WHEN  countryName(cidade.pais) = 'PAIS INDEFINIDO'

THEN 'EX'

ELSE {

CASE

WHEN countryName(cidade.pais) = ''

THEN 'EX'

ELSE

substr(countryName(cidade.pais), 0, 2)

}

PAIS.IDNATIVOINTEGERFIXO 1
PAIS.IDNPADRAOINTEGER

CASE

WHEN countryName(cidade.pais) = 'BRASIL'

THEN 1

ELSE

0

PAIS.CODIGOERPSTRINGEMPRESA + '#' + countryName (cidade.pais)

TOTVS SFA

TIPO

DATASUL

UNIDADEFEDERATIVA.IDNATIVOINTEGERFIXO 1
UNIDADEFEDERATIVA.SIGLASTRINGstateCode(cidade.estado)
UNIDADEFEDERATIVA.CODIGOSTRINGstateCode(cidade.estado)
UNIDADEFEDERATIVA.DESCRICAOSTRING

Nome do estado é fixo na integração, baseado no valor do campo stateCode (cidade.estado).

EX: stateCode = 'AC' estado ='ACRE'

UNIDADEFEDERATIVA.IDPAISINTEGEREMPRESA + '#' +PAIS.SIGLA
UNIDADEFEDERATIVA.CODIGOERPSTRINGEMPRESA + '#' + stateCode(cidade.estado)

TOTVS SFA

TIPO

DATASUL

CIDADE.CODIGO

INTEGER

IBGECode(cidade.cdn-munpio-ibge)

CIDADE.DESCRICAO

STRING

city(cidade.cidade)

CIDADE.IDNATIVOINTEGERFIXO 1
CIDADE.IDUNIDADEFEDERATIVAINTEGEREMPRESA + '#' + stateCode(cidade.estado)
CIDADE.CODIGOERPSTRINGEMPRESA + '#' + countryName + '#' + stateCode+ '#'+ city


CLIENTE

Os dados das tabelas emitente, cidade e loc-entr do Datasul, são acessados através do endpoint /dts/datasul-rest/resources/prg/cdp/v1/customerPublic e são salvos nas tabelas parceiro, local, localtipolocal, parceirolocal, parceirotransportador, parceirogrupoparceiro, pessoafisica, pessoajuridica, localemail, parceirotipoparceiro, limitecredito, localtelefone, usuariolocal, localtipologia, localtabelapreco, localcandicaopagamento, parceiro_nomeAbrev, parceiro_NaturezaOperacao, contatopessoa, contatopessoaemail, contatopessoatelefone e localENT, localTipoLocalENT e parceiroENT,  do TOTVS SFA com o seguintes campos:

TOTVS SFA

TIPO

DATASUL

TOTVS SFA

TIPO

DATASUL

PARCEIRO.NOMEPARCEIROSTRINGcustomerCode(emitente.cod-emitente)+ '-' +customerName(emitente.nome-emit)
PARCEIRO.NOMEPARCEIROFANTASIASTRINGshortName(emitente.nome-abrev)
PARCEIRO.SGLTIPOPESSOASTRING

CASE

WHEN entityType(emitente.natureza) = 1 THEN 'PF'

WHEN entityType(emitente.natureza) = 2 THEN 'PJ'

WHEN entityType(emitente.natureza) = 3 THEN 'ES'

WHEN entityType(emitente.natureza) = 4 THEN 'TR'

ELSE 'ES'

END

PARCEIRO.IDNATIVOINTEGER

CASE

WHEN credit(emitente.ind-cre-cli) = 4

THEN 0

ELSE 1

END

PARCEIRO.IDNCONTRIBUINTEINTEGERFIXO 0
PARCEIRO.NUMEROMATRICULASTRINGcustomerCode(emitente.cod-emitente)
PARCEIRO.EMAILSTRINGemail(emitente.e-mail)
PARCEIRO.HOMEPAGESTRINGhomePage(emitente.home-page)
PARCEIRO.DATAULTIMAATUALIZACAODATEupdateDate(emitente.dt-atualiza)
PARCEIRO.DATACADASTRODATEimplementationDate(emitente.data-implant)
PARCEIRO.OBSERVACAOSTRINGemitente.observacoes
PARCEIRO.IDCLASSIFICACAOPARCEIROBIGNUMBER

CASE

WHEN entityType(emitente.natureza) = 1 THEN 'PF'

WHEN entityType(emitente.natureza) = 2 THEN 'PJ'

WHEN entityType(emitente.natureza) = 3 THEN 'ES'

WHEN entityType(emitente.natureza) = 4 THEN 'TR'

ELSE 'ES'

END

PARCEIRO.IDNEXPORTADOERPDATEFIXO 1
PARCEIRO.CODIGOERPSTRING'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)
PARCEIRO.IDTIPOSITUACAOCADASTROBIGNUMBERFIXO 'REG'

TOTVS SFA

TIPO

DATASUL

LOCAL.IDIPIINTEGERFIXO 0
LOCAL.IDNATIVOINTEGER

CASE

WHEN credit(emitente.ind-cre-cli) = 4

THEN 0

ELSE 1

END

LOCAL.IDNREQUERDATAENTREGAINTEGERFIXO 0
LOCAL.IDNREQUERNUMEROPEDIDOCLIENTEINTEGERFIXO 0
LOCAL.NUMEROMATRICULASTRINGcustomerCode(emitente.cod-emitente)
LOCAL.BAIRROSTRINGneighborhood(emitente.bairro) ou billingNeighborhood(emitente.bairro-cob)
LOCAL.CNPJSTRINGpersonalId(emitente.cgc)
LOCAL.CEPSTRINGzipCode(emitente.cep) ou billingZipCode(emitente.cep-cob) 
LOCAL.INSCRICAOESTADUALSTRINGstateRegistration(emitente.ins-estadual)
LOCAL.DESCRICAOSTRINGPRI +'#' + address(emitente.endereco) ou COB + '#' + billingAddress(emitente.endereco-cob)
LOCAL.INSCRICAOMUNICIPIOSTRINGmunicipalRegistration(emitente.ins-municipal) 
LOCAL.LOGRADOUROSTRINGaddress(emitente.endereco) ou billingAddress(emitente.endereco-cob)
LOCAL.DOCUMENTOIDENTIFICACAOSTRINGpersonalId(emitente.cgc)
LOCAL.OBSERVACAOSTRINGemitente.observacoes
LOCAL.DATACADASTRODATEimplementationDate(emitente.data-implant)
LOCAL.DATAULTIMAATUALIZACAODATEupdateDate(emitente.dt-atualiza)
LOCAL.LIMITESUGERIDOBIGNUMBERcreditLimit(emitente.lim-credito)
LOCAL.IDCIDADEBIGNUMBER

EMPRESA + '#' + country(emitente.pais) + '#' + state(emitente.estado) + '#' + city(emitente.cidade) ou

EMPRESA + '#' + country(emitente.pais) + '#' + billingState(emitente.estado-cob) + '#' +billingCity(emitente.cidade-cob)

LOCAL.IDUNIDADEFEDERATIVAFISCALBIGNUMBERstate(emitente.estado) || billingState(emitente.estado-cob)
LOCAL.IDNEXPORTADOERPINTEGERFIXO 1
LOCAL.CODIGOERPSTRING(PRI ou COB) + '#' + 'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)



TOTVS SFA

TIPO

DATASUL

LOCALTIPOLOCAL.IDLOCALINTEGER(PRI ou COB) + '#' + 'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)
LOCALTIPOLOCAL.IDTIPOLOCALINTEGER'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)
LOCALTIPOLOCAL.IDNATIVOINTEGER

CASE

WHEN credit(emitente.ind-cre-cli) = 4

THEN 0

ELSE 1

END

LOCALTIPOLOCAL.IDNPADRAOINTEGER

CASE WHEN TipoLocal = PRI

THEN 1

ELSE 0

END

LOCALTIPOLOCAL.IDNEXPORTADOERPINTEGERFIXO 1
LOCALTIPOLOCAL.CODIGOERPSTRING(PRI ou COB) + '#' + 'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)



TOTVS SFA

TIPO

DATASUL

PARCEIROLOCAL.IDPARCEIROINTEGER'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)
PARCEIROLOCAL.IDLOCALINTEGER(PRI ou COB) + '#' + 'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)
PARCEIROLOCAL.IDNEXPORTADOERPINTEGERFIXO 1
PARCEIROLOCAL.CODIGOERPSTRING(PRI ou COB) + '#' + 'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)



TOTVS SFA

TIPO

DATASUL

PARCEIROTRANSPORTADOR.IDPARCEIROINTEGER'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)
PARCEIROTRANSPORTADOR.IDTRANSPORTADORINTEGER'TRA#' + EMPRESA + '#' + standardCarrierCode(emitente.cod-transp)
PARCEIROTRANSPORTADOR.IDUSUARIOINTEGEREMPRESA + '#' + representativeCode(emitente.cod-rep)
PARCEIROTRANSPORTADOR.IDNPADRAOINTEGERFIXO 1
PARCEIROTRANSPORTADOR.CODIGOERPSTRING'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente) + '#' +  standardCarrierCode(emitente.cod-transp) + '#' + representativeCode(emitente.cod-rep)



TOTVS SFA

TIPO

DATASUL

PARCEIROGRUPOPARCEIRO.IDPARCEIROINTEGER'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)
PARCEIROGRUPOPARCEIRO.IDNPADRAOINTEGERFIXO 1
PARCEIROGRUPOPARCEIRO.CODIGOERPSTRINGEMPRESA + '#' + customerGroup(emitente.cod-gr-cli) + '#' +customerCode(emitente.cod-emitente) 
PARCEIROGRUPOPARCEIRO.IDGRUPOPARCEIROINTEGEREMPRESA + '#' + customerGroup(emitente.cod-gr-cli)



TOTVS SFA

TIPO

DATASUL

PESSOAFISICA.IDPESSOAFISICAINTEGERPARCEIRO.IDPARCEIRO
PESSOAFISICA.CPFSTRINGpersonalId(emitente.cgc)
PESSOAFISICA.IDNEXPORTADOERPINTEGERFIXO 1
PESSOAFISICA.DIANASCIMENTOINTEGERbirthdate(emitente.dat-nasc)
PESSOAFISICA.MESNASCIMENTOINTEGERbirthdate(emitente.dat-nasc)
PESSOAFISICA.ANONASCIMENTOINTEGERbirthdate(emitente.dat-nasc)
PESSOAFISICA.DOCUMENTOIDENTIFICACAOSTRINGpersonalId(emitente.cgc)
PESSOAFISICA.IDTIPOIDENTIFICACAOBIGNUMBERFIXO 'cpf'
PESSOAFISICA.CODIGOERPSTRING'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)



TOTVS SFA

TIPO

DATASUL

PESSOAJURIDICA.IDPESSOAJURIDICAINTEGERPARCEIRO.IDPARCEIRO
PESSOAJURIDICA.DOCUMENTOIDENTIFICACAOSTRINGpersonalId(emitente.cgc)
PESSOAJURIDICA.IDTIPOIDENTIFICACAOINTEGERFIXO 'cnpj'
PESSOAJURIDICA.IDNEXPORTADOERPINTEGERFIXO 1
PESSOAJURIDICA.DATAFUNDACAODATEimplementationDate(emitente.data-implant)
PESSOAJURIDICA.CNPJPRINCIPALINTEGERpersonalId(emitente.cgc)
PESSOAJURIDICA.CODIGOERPINTEGER'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)



TOTVS SFA

TIPO

DATASUL

LOCALEMAIL.EMAILSTRINGLOWER(email(emitente.e-mail))
LOCALEMAIL.IDNPADRAOINTEGER

CASE WHEN TipoLocal = PRI

THEN 1

ELSE 0

END

LOCALEMAIL.IDLOCALINTEGER(PRI ou COB) + '#' + 'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)
LOCALEMAIL.IDPARCEIROINTEGER'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)
LOCALEMAIL.IDNEXPORTADOERPINTEGERFIXO 1
LOCALEMAIL.IDTIPOEMAILINTEGERFIXO 'PRI'
LOCALEMAIL.CODIGOERPSTRING(PRI ou COB) + '#' + 'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente) + '#' + LOWER(email(emitente.e-mail))



TOTVS SFA

TIPO

DATASUL

PARCEIROTIPOPARCEIRO.IDTIPOPARCEIROINTEGERentityType(emitente.natureza)
PARCEIROTIPOPARCEIRO.IDPARCEIROINTEGER'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)
PARCEIROTIPOPARCEIRO.CODIGOERPSTRINGentityType(emitente.natureza) = '#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)



TOTVS SFA

TIPO

DATASUL

LIMITECREDITO.DATAINICIOVIGENCIADATEFIXO 1900-01-01
LIMITECREDITO.DATAFIMVIGENCIADATEFIXO 2099-12-31
LIMITECREDITO.SALDOLIMITEBIGNUMBER(18,6)creditLimit(emitente.lim-credito)
LIMITECREDITO.SALDODISPONIVELBIGNUMBER(18,6)creditLimit(emitente.lim-credito)
LIMITECREDITO.IDPARCEIROINTEGER'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)
LIMITECREDITO.IDLOCALINTEGER(PRI ou COB) + '#' + 'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)
LIMITECREDITO.CODIGOERPSTRING(PRI ou COB) + '#' + 'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)



TOTVS SFA

TIPO

DATASUL

LOCALTELEFONE.TELEFONESTRINGphone1(emitente.telefone[1])  ou  phone2(emitente.telefone[2]) ou telefax(emitente.telefax) ou telex(emitente.telex)
LOCALTELEFONE.IDNPADRAOINTEGER

CASE

WHEN phone1(emitente.telefone[1]) IS NOT NULL THEN 1 (para o registro contendo phone1 e 0 para os demais)

WHEN phone2(emitente.telefone[2]) IS NOT NULL THEN 1 (para o registro contendo phone2 e 0 para os demais)

WHEN telefax(emitente.telefax) IS NOT NULL THEN 1 (para o registro contendo telefax e 0 para os demais)

WHEN telex(emitente.telex) IS NOT NULL THEN 1 (para o registro contendo telex e 0 para os demais)

ELSE 0

END

LOCALTELEFONE.IDLOCALINTEGER(PRI ou COB) + '#' + 'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)
LOCALTELEFONE.IDPARCEIROINTEGER'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)
LOCALTELEFONE.IDNEXPORTADOERPINTEGERFIXO 1
LOCALTELEFONE.IDTIPOTELEFONEINTEGER

CASE

WHEN phone1(emitente.telefone[1]) IS NOT NULL  THEN 'TEL1'

WHEN phone2(emitente.telefone[2]) IS NOT NULL  THEN 'TEL2'

WHEN telefax(emitente.telefax) IS NOT NULL  THEN 'LEX'

WHEN telex(emitente.telex) IS NOT NULL  THEN 'FAX'

END

LOCALTELEFONE.CODIGOERPSTRING(PRI ou COB) + '#' + 'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente) + '#' + ('TEL1' ou 'TEL2' ou 'LEX' ou 'FAX') + '#' + (phone1(emitente.telefone[1])  ou  phone2(emitente.telefone[2]) ou telefax(emitente.telefax) ou telex(emitente.telex))



TOTVS SFA

TIPO

DATASUL

USUARIOLOCAL.IDLOCALINTEGER(PRI ou COB) + '#' + 'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)
USUARIOLOCAL.IDUSUARIOINTEGEREMPRESA + '#' + representativeCode(emitente.cod-rep)
USUARIOLOCAL.IDPARCEIROINTEGER'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)
USUARIOLOCAL.CODIGOERPSTRING(PRI ou COB) + '#' + 'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)



TOTVS SFA

TIPO

DATASUL

LOCALTIPOLOGIA.IDLOCALINTEGER(PRI ou COB) + '#' + 'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)
LOCALTIPOLOGIA.IDTIPOLOGIAINTEGEREMPRESA + '#' + salesChannel(emitente.cod-canal-venda)
LOCALTIPOLOGIA.IDPARCEIROINTEGER'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)
LOCALTIPOLOGIA.IDNPADRAOINTEGER

FIXO 0

LOCALTIPOLOGIA.CODIGOERPSTRING(PRI ou COB) + '#' + 'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)



TOTVS SFA

TIPO

DATASUL

LOCALTABELAPRECO.IDLOCALINTEGER(PRI ou COB) + '#' + 'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)
LOCALTABELAPRECO.IDTABELAPRECOINTEGEREMPRESA + '#' + priceTable(emitente.nr-tabpre)
LOCALTABELAPRECO.IDPARCEIROINTEGER'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)
LOCALTABELAPRECO.IDTIPOLOGIAINTEGEREMPRESA + '#' + salesChannel(emitente.cod-canal-venda)
LOCALTABELAPRECO.IDUSUARIOINTEGEREMPRESA + '#' + representativeCode(emitente.cod-rep)
LOCALTABELAPRECO.IDNPADRAOINTEGERFIXO 1
LOCALTABELAPRECO.CODIGOERPSTRING(PRI ou COB) + '#' + 'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)



TOTVS SFA

TIPO

DATASUL

LOCALCONDICAOPAGAMENTO.IDLOCALINTEGER(PRI ou COB) + '#' + 'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)
LOCALCONDICAOPAGAMENTO.IDCONDICAOPAGAMENTOINTEGEREMPRESA + '#'+ paymentTerms(emitente.cod-cond-pag)
LOCALCONDICAOPAGAMENTO.IDNREGRAESPECIALINTEGERFIXO 0
LOCALCONDICAOPAGAMENTO.IDNPADRAOINTEGERFIXO 1
LOCALCONDICAOPAGAMENTO.IDPARCEIROINTEGER'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)
LOCALCONDICAOPAGAMENTO.CODIGOERPSTRING(PRI ou COB) + '#' + 'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)



TOTVS SFA

TIPO

DATASUL

CAMPORESPOSTA.RESPOSTASTRINGshortName(emitente.nome-abrev)
CAMPORESPOSTA.CODIGOERPSTRING'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente) + '#nomeabrev'
CAMPORESPOSTA.IDPARCEIROINTEGER'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)
CAMPORESPOSTA.IDCAMPOINTEGERFIXO 'nomeabrev'



TOTVS SFA

TIPO

DATASUL

CAMPORESPOSTA.RESPOSTASTRINGtransactionType(emitente.nat-operacao)
CAMPORESPOSTA.CODIGOERPSTRING'CLI#' + EMPRESA + '#' +customerCode(emitente.cod-emitente) + '#naturezaoperacao'
CAMPORESPOSTA.IDPARCEIROINTEGER'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)
CAMPORESPOSTA.IDCAMPOINTEGERFIXO 'naturezaoperacao'



TOTVS SFA

TIPO

DATASUL

CONTATOPESSOA.NOMESTRINGcustomerContacts[0].contactName(cont-emit.nome)
CONTATOPESSOA.CARGOSTRINGcustomerContacts[0].office(cont-emit.cargo)
CONTATOPESSOA.DEPARTAMENTOSTRINGcustomerContacts[0].contactArea(cont-emit.area)
CONTATOPESSOA.IDNPADRAOINTEGERFIXO 0
CONTATOPESSOA.IDNATIVOINTEGER

CASE

WHEN credit(emitente.ind-cre-cli) = 4

THEN 0

ELSE 1

END

CONTATOPESSOA.DIANASCIMENTOINTEGERbirthdate(emitente.dat-nasc)
CONTATOPESSOA.MESNASCIMENTOINTEGERbirthdate(emitente.dat-nasc)
CONTATOPESSOA.ANONASCIMENTOINTEGERbirthdate(emitente.dat-nasc)
CONTATOPESSOA.DATANASCIMENTODATEbirthdate(emitente.dat-nasc)
CONTATOPESSOA.DOCUMENTOIDENTIFICACAOSTRINGpersonalId(emitente.cgc)
CONTATOPESSOA.IDPARCEIROBIGNUMBER'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)
CONTATOPESSOA.IDNEXPORTADOERPINTEGERFIXO 1
CONTATOPESSOA.CODIGOERPSTRING'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente) + '#' + customerContacts[0].sequence(cont-emit.cod-emitente)



TOTVS SFA

TIPO

DATASUL

CONTATOPESSOAEMAIL.EMAILSTRINGcustomerContacts[0].email(cont-emit.e-mail)
CONTATOPESSOAEMAIL.IDNPADRAOINTEGERFIXO 0
CONTATOPESSOAEMAIL.IDCONTATOPESSOAINTEGER'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente) + '#' + customerContacts[0].sequence(cont-emit.cod-emitente) 
CONTATOPESSOAEMAIL.CODIGOERPSTRING'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente) + '#' + customerContacts[0].sequence(cont-emit.cod-emitente) + '#' + customerContacts[0].email(cont-emit.e-mail)



TOTVS SFA

TIPO

DATASUL

CONTATOPESSOATELEFONE.TELEFONESTRINGcustomerContacts[0].phone(cont-emit.telefone) ou customerContacts[0].telephone ou customerContacts[0].telefax(cont-emit.telefax)
CONTATOPESSOATELEFONE.IDNPADRAOINTEGERFIXO 0
CONTATOPESSOATELEFONE.IDCONTATOPESSOAINTEGER'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente) + '#' + customerContacts[0].sequence(cont-emit.cod-emitente) 
CONTATOPESSOATELEFONE.CODIGOERPSTRING'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente) + '#' + customerContacts[0].sequence(cont-emit.cod-emitente) + '#' + customerContacts[0].email (cont-emit.e-mail)



TOTVS SFA

TIPO

DATASUL

LOCAL.IDNATIVOINTEGER

CASE

WHEN credit(emitente.ind-cre-cli) = 4

THEN 0

ELSE 1

END

LOCAL.NUMEROMATRICULASTRINGcustomerCode(emitente.cod-emitente)
LOCAL.BAIRROSTRINGdeliveryPlaces[0].neighborhood(loc-entr.bairro)
LOCAL.CNPJSTRINGpersonalId(emitente.cgc)
LOCAL.CEPSTRINGdeliveryPlaces[0].zipCode(loc-entr.cep)
LOCAL.DESCRICAOSTRING'ENT#'+ deliveryPlaces[0].address(loc-entr.endereco)
LOCAL.LOGRADOUROSTRINGdeliveryPlaces[0].address(loc-entr.endereco)
LOCAL.DOCUMENTOIDENTIFICACAOSTRINGpersonalId(emitente.cgc)
LOCAL.DATACADASTRODATEimplementationDate(emitente.data-implant)
LOCAL.DATAULTIMAATUALIZACAODATEupdateDate(emitente.dt-atualiza)
LOCAL.IDCIDADEINTEGEREMPRESA + '#' + deliveryPlaces[0].country(loc-entr.pais) + '#' + deliveryPlaces[0].state(loc-entr.estado) + '#' + deliveryPlaces[0].city(loc-entr.cidade)
LOCAL.IDUNIDADEFEDERATIVAINTEGERdeliveryPlaces[0].state(loc-entr.estado)
LOCAL.IDNEXPORTADOERPINTEGERFIXO 1
LOCAL.CODIGOERPSTRING'ENT#'+'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente) + '#' + deliveryPlaces[0].deliveryCode(loc-entr.cod-entrega)



TOTVS SFA

TIPO

DATASUL

LOCALTIPOLOCAL.IDLOCALBIGNUMBER'ENT#'+'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente) + '#' + deliveryPlaces[0].deliveryCode(loc-entr.cod-entrega)
LOCALTIPOLOCAL.IDTIPOLOCALBIGNUMBERFIXO 'ENT'
LOCALTIPOLOCAL.IDNATIVOINTEGER

CASE

WHEN credit(emitente.ind-cre-cli) = 4

THEN 0

ELSE 1

END

LOCALTIPOLOCAL.IDNPADRAOINTEGERFIXO 0
LOCALTIPOLOCAL.IDNEXPORTADOERPINTEGERFIXO 1
LOCALTIPOLOCAL.CODIGOERPSTRING'ENT#'+'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente) + '#' + deliveryPlaces[0].deliveryCode(loc-entr.cod-entrega)



TOTVS SFA

TIPO

DATASUL

TOTVS SFA

TIPO

DATASUL

PARCEIROLOCAL.IDPARCEIROINTEGER'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente)
PARCEIROLOCAL.IDLOCALINTEGER'ENT#'+'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente) + '#' + deliveryPlaces[0].deliveryCode(loc-entr.cod-entrega)
PARCEIROLOCAL.IDNEXPORTADOERPINTEGERFIXO 1
PARCEIROLOCAL.CODIGOERPSTRING'ENT#'+'CLI#' + EMPRESA + '#' + customerCode(emitente.cod-emitente) + '#' + deliveryPlaces[0].deliveryCode(loc-entr.cod-entrega)


CONDIÇÃO PAGAMENTO

Os dados da tabela cond-pagto do Datasul são acessados através do endpoint /dts/datasul-rest/resources/prg/cdp/v1/paymentTermsPublic e são salvos na tabela condicaopagamento do TOTVS SFA com os seguintes campos:

TOTVS SFA

TIPO

DATASUL

CONDICAOPAGAMENTO.IDNATIVO

INTEGER

FIXO 1

CONDICAOPAGAMENTO.IDNREQUERDATAENTREGAINTEGERFIXO 0
CONDICAOPAGAMENTO.IDNDISPPRIMEIROPEDIDOINTEGERFIXO 1
CONDICAOPAGAMENTO.IDNPADRAOINTEGERFIXO 0

CONDICAOPAGAMENTO.DESCRICAO

STRING

description(cond-pagto.descricao)

CONDICAOPAGAMENTO.PERCENTUALDESCONTO

NUMERIC(18,6)

FIXO 0.0

CONDICAOPAGAMENTO.PERCENTUALACRESCIMO

NUMERIC(18,6)

FIXO 0.0

CONDICAOPAGAMENTO.NUMEROPARCELAS

INTEGER

instNum(cond-pagto.num-parcelas)

CONDICAOPAGAMENTO.NUMERODIASENTREPARCELAS

STRING

Installment.instTerm[1… 12] (cond-pagto.prazos[extent])

CONDICAOPAGAMENTO.CODIGOSTRING code(cond-pagto.cod-cond-pag)
CONDICAOPAGAMENTO.CODIGOERPSTRING

EMPRESA + '#' + code(cond-pagto.cod-cond-pag)



ESTOQUE

Os dados da tabela saldo-estoq do Datasul são acessados através do endpoint /dts/datasul-rest/resources/prg/cep/v1/stockBalancePublic e serão salvos na tabela estoque do TOTVS SFA com os seguintes campos: 

TOTVS SFA

TIPO

DATASUL

ESTOQUE.QUANTIDADE

NUMERIC(18,6)

(qtyAvailBalance - qtyAllocated - qtyAllocOrder - qtyAllocProd)

(saldo-estoq.qtidade-atu - saldo-estoq.qt-alocada - saldo-estoq.qt-aloc-ped - saldo-estoq.qt-aloc-prod)

ESTOQUE.PESOMEDIO

NUMERIC(18,6)

PRODUTO.PESOMEDIO (lookup na tabela Produto)

ESTOQUE.DATAPOSICAO

DATE

Current_date

ESTOQUE.HORAPOSICAOSTRINGCurrent_date
ESTOQUE.IDLOCALFILIALINTEGER'EMP#' + EMPRESA + '#' + siteCode(saldo-estoq.cod-estabel)
ESTOQUE.IDPRODUTOINTEGEREMPRESA + '#' + itemCode(saldo-estoq.it-codigo)
ESTOQUE.IDTIPOESTOQUEINTEGERFIXO 'EDI'
ESTOQUE.CODIGOSTRINGwarehouseCode (saldo-estoq.cod-depos)
ESTOQUE.CODIGOERPSTRINGEMPRESA + '#' + siteCode(saldo-estoq.cod-estabel) + '#' + itemCode(saldo-estoq.it-codigo) + '#' + upper(warehouseCode(saldo-estoq.cod-depos))


FILIAL

Os dados das tabelas estabelec e cidade do Datasul são acessados através do endpoint /dts/datasul-rest/resources/prg/cdp/v1/establishmentsPublic e serão salvos nas tabelas parceiro, local, localfilial, parceirolocal, parceirotipoparceiro, localtipolocal do TOTVS SFA na seguinte ordem

TOTVS SFA

TIPO

DATASUL

PARCEIRO. NOMEPARCEIROSTRINGcode(estabelec.cod-estabel) + '#' + name(estabelec.nome)
PARCEIRO.NOMEPARCEIROFANTASIASTRINGfantasyName(mgadm.estab-compl.nom-fantasia)
PARCEIRO.SGLTIPOPESSOASTRINGFIXO 'PJ'
PARCEIRO.IDNATIVOINTEGERFIXO 1
PARCEIRO.IDNCONTRIBUINTEINTEGERFIXO 0
PARCEIRO.NUMEROMATRICULASTRINGcode(estabelec.cod-estabel)
PARCEIRO.DATAULTIMAATUALIZACAODATEFIXO '2000-01-01'
PARCEIRO.DATACADASTRODATEFIXO '2000-01-01'
PARCEIRO.IDNCLASSIFICACAOPARCEIROBIGNUMBER(18,6)FIXO 'PJ'
PARCEIRO.CNAESTRINGcnaeCode(mgdis.inf-compl.des-campo)
PARCEIRO.IDNEXPORTADOERPINTEGERFIXO 1
PARCEIRO.CODIGOERPSTRING'EMP#' + EMPRESA + '#' + code(estabelec.cod-estabel)

TOTVS SFA

TIPO

DATASUL

LOCAL. IDNIPIINTEGERFIXO 0
LOCAL.IDNATIVOINTEGERFIXO 1
LOCAL.IDNREQUERDATAENTREGAINTEGERFIXO 0
LOCAL.IDNREQUERNUMEROPEDIDOCLIENTEINTEGERFIXO 0
LOCAL.NUMERMATRICULASTRINGcode(estabelec.cod-estabel)
LOCAL.BAIRROSTRINGdistrict(estabelec.bairro)
LOCAL.CNPJSTRINGcnpj(estabelec.cgc)
LOCAL.CEPSTRINGzipCode(estabelec.cep)
LOCAL.INSCRICAOESTADUALSTRINGstateRegistration(estabelec.ins-estadual)
LOCAL.DESCRICAOSTRINGname(estabelec.nome)
LOCAL.INSCRICAOMUNICIPALSTRINGcityRegistration(estabelec.ins-municipal)
LOCAL.LOGRADOUROSTRINGaddress(estabelec.endereco)
LOCAL.DOCUMENTOIDENTIFICACAOSTRINGcnpj(estabelec.cgc)
LOCAL.DATACADASTRODATEFIXO '2000-01-01'
LOCAL.DATAULTIMAATUALIZACAODATEFIXO '2000-01-01'
LOCAL.IDCIDADEBIGNUMBER(18,6)EMPRESA + '#' + country(mgadm.estabelec.pais)+ '#' + state(mgadm.estabelec.estado() + '#' + ibgeCode(cidade.cdn-munpio-ibge) 
LOCAL.IDNEXPORTADOERPINTEGERFIXO 1
LOCAL.CODIGOERPSTRING'EMP#' + EMPRESA + '#' + code(estabelec.cod-estabel)

TOTVS SFA

TIPO

DATASUL

PARCEIROLOCAL.IDPARCEIROINTEGER'EMP#' + EMPRESA + '#' + code(estabelec.cod-estabel)
PARCEIROLOCAL.IDLOCALINTEGER'EMP#' + EMPRESA + '#' + code(estabelec.cod-estabel)
PARCEIROLOCAL.IDNEXPORTADOERPINTEGERFIXO 1
PARCEIROLOCAL.CODIGOERPSTRING'EMP#' + EMPRESA + '#' + code(estabelec.cod-estabel)

TOTVS SFA

TIPO

DATASUL

PARCEIROTIPOPARCEIRO.IDTIPOPARCEIROINTEGERFIXO 'EMP'
PARCEIROTIPOPARCEIRO.IDPARCEIROINTEGER'EMP#' + EMPRESA + '#' + code(estabelec.cod-estabel)
PARCEIROTIPOPARCEIRO.CODIGOERPSTRING'EMP#' + EMPRESA + '#' + code(estabelec.cod-estabel)

TOTVS SFA

TIPO

DATASUL

LOCALTIPOLOCAL.IDLOCALINTEGER'EMP#' + EMPRESA + '#' + code(estabelec.cod-estabel)
LOCALTIPOLOCAL.IDTIPOLOCALINTEGERFIXO 'UEM'
LOCALTIPOLOCAL.IDNATIVOINTEGERFIXO 1
LOCALTIPOLOCAL.IDNPADRAOINTEGERFIXO 1
LOCALTIPOLOCAL.IDNEXPORTADOERPINTEGERFIXO 1
LOCALTIPOLOCAL.CODIGOERPSTRING'EMP#' + EMPRESA + '#' + code(estabelec.cod-estabel)

TOTVS SFA

TIPO

DATASUL

LOCALFILIAL.IDLOCALINTEGER'EMP#' + EMPRESA + '#' + code(estabelec.cod-estabel)
LOCALFILIAL.IDFILIALINTEGERLOCAL.IDLOCAL
LOCALFILIAL.SGLTIPOFILIALSTRINGFIXO 'UEM'
LOCALFILIAL.IDNPADRAOINTEGERFIXO 1
LOCALFILIAL.CODIGOERPSTRING'EMP#' + EMPRESA + '#' + code(estabelec.cod-estabel)


GRUPO PRODUTO

Os dados da tabela grup-estoque do Datasul são acessados através do endpoint /dts/datasul-rest/resources/prg/cep/v1/inventoryGroupsPublic e serão salvas na tabela grupoproduto do TOTVS SFA com o os seguintes campos:

TOTVS SFA

TIPO

DATASUL

GRUPOPRODUTO.IDNATIVOINTEGERFIXO 1

GRUPOPRODUTO.CODIGO

STRING(80)

code(grup-estoque.ge-codigo)

GRUPOPRODUTO.CODIGOERP

STRING(80)

EMPRESA + '#' + code(grup-estoque.ge-codigo)

GRUPOPRODUTO.DESCRICAO

STRING(80)

description(grup-estoque.descricao)


MOEDA

Os dados das tabelas moeda e cotacao do Datasul são acessados através do endpoint /dts/datasul-rest/resources/prg/cdp/v1/currencyPublic e serão salvos nas tabelas indexador e cotacaoindexador do TOTVS SFA com os seguintes campos:

TOTVS SFA

TIPO

DATASUL

INDEXADOR.IDNATIVO

INTEGER

FIXO 1

INDEXADOR.DESCRICAO

STRING

currency.currencyDescription(moeda.descricao)

INDEXADOR.ABREVIATURA

STRING

initials(cotacao.cotacao[extent])

INDEXADOR.CODIGOERP

STRING

EMPRESA + '#' + currencyCod (cotacao.mo-codigo) + '#' + initials(cotacao.cotacao[extent])

TOTVS SFA

TIPO

DATASUL

COTACAOINDEXADOR.DATADATEyearPeriod + dayQuote(cotacao.ano-periodo + Não se aplica (De acordo com o dia do mês - 31 dias)
COTACAOINDEXADOR.VALORNUMERIC(18,6)

currencyQuote(cotacao.cotacao[extent])

COTACAOINDEXADOR.IDINDEXADORINTEGEREMPRESA + '#' + currencyCode(cotacao.mo-codigo) + '#' + initials(cotacao.cotacao[extent])
COTACAOINDEXADOR.CODIGOERPSTRINGEMPRESA + '#' + currencyCode(cotacao.mo-codigo) + '#' + initials(cotacao.cotacao[extent]) + '#' + COTACAOINDEXADOR.DATA


NOTA FISCAL

Os dados das tabelas nota-fiscal, transporte, it-nota-fisc, natur-oper e item do Datasul são acessados através do endpoint /dts/datasul-rest/resources/prg/ftp/v1/invoicePublic e serão salvos nas tabelas notafiscal e notafiscalproduto do TOTVS SFA com os seguintes campos:

TOTVS SFA 

TIPO

DATASUL

NOTAFISCAL.IDNCANCELADAINTEGER

CASE

WHEN cancellationDate(nota-fiscal.dt-cancela) IS NOT NULL

THEN 1

ELSE 0

END

NOTAFISCAL.NUMERONOTAFISCALSTRINGinvoiceNumber(nota-fiscal.nr-nota-fis)
NOTAFISCAL.SERIESTRINGseries(nota-fiscal.serie)
NOTAFISCAL.DATAEMISSAODATEprintDate(nota-fiscal.dt-emis-nota)
NOTAFISCAL.VALORFATURADOBIGNUMBER(18,6)invoiceAmount(nota-fiscal.vl-tot-nota)
NOTAFISCAL.VALORFRETEBIGNUMBER(18,6)freightValue(nota-fiscal.vl-frete)
NOTAFISCAL.IDLOCALFILIALFATURAMENTOBIGNUMBER(18,6)'EMP#' +EMPRESA+"#"+ siteID(nota-fiscal.cod-estabel)
NOTAFISCAL.IDLOCALFILIALRETIRADABIGNUMBER(18,6)'EMP#' +EMPRESA + '#' +  siteID(nota-fiscal.cod-estabel)
NOTAFISCAL.IDLOCALFILIALVENDABIGNUMBER(18,6)'EMP#' +EMPRESA + '#' +  siteID(nota-fiscal.cod-estabel)
NOTAFISCAL.IDLOCALBIGNUMBER(18,6)'PRI#CLI#' + EMPRESA + '#' + customerID(nota-fiscal.cod-emitente)
NOTAFISCAL.IDPARCEIROBIGNUMBER(18,6)'CLI#' + EMPRESA + '#' + customerID(nota-fiscal.cod-emitente)
NOTAFISCAL.IDPARCEIROTRANSPORTADORABIGNUMBER(18,6)'%-' + carrierName(nota-fiscal.nome-transp)
NOTAFISCAL.IDCONDICAOPAGAMENTOBIGNUMBER(18,6)EMPRESA + '#' + paymentTerms(nota-fiscal.cod-cond-pag);
NOTAFISCAL.IDUSUARIOBIGNUMBER(18,6)EMPRESA + '#' + representativeCode(nota-fiscal.cod-rep);
NOTAFISCAL.IDTIPONOTAFISCALBIGNUMBER(18,6)EMPRESA + '#' + transactionTypeID(nota-fiscal.nat-operacao) 
NOTAFISCAL.CODIGOERPSTRINGEMPRESA + '#' + siteID(nota-fiscal.cod-estabel) + '#' + invoiceNumber(nota-fiscal.nr-nota-fis) + '#' + series(nota-fiscal.serie)
NOTAFISCALQUANTIDADEFATURADA*BIGNUMBER(18,6)SUM(nvoiceItem.internalQuantity(it-nota-fisc.qt-faturada[1]))
NOTAFISCAL.VALORFATURADO*BIGNUMBER(18,6)

SUM(nvoiceItem.internalQuantity(it-nota-fisc.qt-faturada[1]) * (

CASE WHEN (invoiceItem.itemTotalAmount(it-nota-fisc.vl-tot-item)) = 0 ou (invoiceItem.internalQuantity(it-nota-fisc.qt-faturada[1]) = 0 )

THEN 0

ELSE (invoiceItem.itemTotalAmount(it-nota-fisc.vl-tot-item)/invoiceItem.internalQuantity(it-nota-fisc.qt-faturada[1]))

END

) )

NOTAFISCAL.VALORSEGURO*BIGNUMBER(18,6)SUM(insuranceValue(-))

*Atualizados na rotina SNotaFiscalProduto


TOTVS SFA 

TIPO

DATASUL

TOTVS SFA 

TIPO

DATASUL

NOTAFISCALPRODUTO.QUANTIDADEFATURADABIGNUMBER(18,6)

CASE

WHEN invoiceItem.internalQuantity(it-nota-fisc.qt-faturada[1]) IS NOT NULL

THEN invoiceItem.internalQuantity(it-nota-fisc.qt-faturada[1])

ELSE 0

END

NOTAFISCALPRODUTO.PRECOFATURADOBIGNUMBER(18,6)

CASE

WHEN(invoiceItem.itemTotalAmount(it-nota-fisc.vl-tot-item)) = 0 ou (invoiceItem.internalQuantity(it-nota-fisc.qt-faturada[1]) = 0 )

THEN 0

ELSE (invoiceItem.itemTotalAmount(it-nota-fisc.vl-tot-item)/invoiceItem.internalQuantity(it-nota-fisc.qt-faturada[1]))

END

NOTAFISCALPRODUTO.PRECOORIGINALBIGNUMBER(18,6)invoiceItem.netPrice(it-nota-fisc.vl-preuni)
NOTAFISCALPRODUTO.IDNOTAFISCALINTEGEREMPRESA + '#' + siteID(nota-fiscal.cod-estabel) + '#' + invoiceNumber(nota-fiscal.nr-nota-fis) + '#' + series(nota-fiscal.serie)
NOTAFISCALPRODUTO.IDPEDIDOINTEGEREMPRESA + '#' + siteID(nota-fiscal.cod-estabel) + '#' +invoiceItem.customerOrderNumber(it-nota-fisc.it-nota-fisc.nr-pedcli)
NOTAFISCALPRODUTO.IDPRODUTOINTEGEREMPRESA + '#' + invoiceItem.itemCode(it-nota-fisc.it-codigo) + 

(

CASE

WHEN it-nota-fisc.reference(it-nota-fisc.cod-refer) IS NOT NUL

THEN('#' + it-nota-fisc.reference(it-nota-fisc.cod-refer))

END

)

NOTAFISCALPRODUTO.IDTIPONOTAFISCALINTEGEREMPRESA + '#' + invoiceItem.transactionTypeID(it-nota-fisc.nat-operacao) 
NOTAFISCALPRODUTO.VALORIPIBIGNUMBER(18,6)invoiceItemTax.vlIpiIt(it-nota-fisc.vl-ipi-it)
NOTAFISCALPRODUTO.VALORICMSBIGNUMBER(18,6)invoiceItemTax.vlIcmsIt(it-nota-fisc.vl-icms-it)
NOTAFISCALPRODUTO.VALORCSLLBIGNUMBER(18,6)invoiceItemTax.vlCsllRet(it-nota-fisc.val-retenc-csll)
NOTAFISCALPRODUTO.VALORDESPESAACESSORIABIGNUMBER(18,6)invoiceItem.expenseValue(it-nota-fisc.vl-despes-it)
NOTAFISCALPRODUTO.VALORISSBIGNUMBER(18,6)invoiceItemTax.vlIssIt(it-nota-fisc.vl-iss-it)
NOTAFISCALPRODUTO.VALORFRETEBIGNUMBER(18,6)invoiceItem.freightValue(it-nota-fisc.vl-frete-it)
NOTAFISCALPRODUTO.VALORINSSRETIDOBIGNUMBER(18,6)invoiceItemTax.vlInssRf (it-nota-fisc.vl-ir-adic)
NOTAFISCALPRODUTO.VALORIRRFBIGNUMBER(18,6)invoiceItemTax.vlIrfIt(it-nota-fisc.vl-irf-it)
NOTAFISCALPRODUTO.VALORCONFINSBIGNUMBER(18,6)invoiceItemTax.vlCofins
NOTAFISCALPRODUTO.VALORPISBIGNUMBER(18,6)invoiceItemTax.vlPis(it-nota-fisc.val-retenc-pis)
NOTAFISCALPRODUTO.VALORFUNRURALBIGNUMBER(18,6)FIXO 0
NOTAFISCALPRODUTO.VALORSTBIGNUMBER(18,6)invoiceItemTax.vlIcmsubIt(it-nota-fisc.vl-icmsub-it)
NOTAFISCALPRODUTO.ALIQUOTAIPIBIGNUMBER(18,6)invoiceItemTax.ipiTaxPercent(it-nota-fisc.aliquota-ipi)
NOTAFISCALPRODUTO.ALIQUOTAICMSBIGNUMBER(18,6)invoiceItemTax.icmsTaxPercent(it-nota-fisc.aliquota-icm)
NOTAFISCALPRODUTO.ALIQUOTACONFINSBIGNUMBER(18,6)invoiceItemTax.cofinsTaxPercent(-)
NOTAFISCALPRODUTO.ALIQUOTACSLLBIGNUMBER(18,6)invoiceItemTax.percRetCsll(-)
NOTAFISCALPRODUTO.ALIQUOTAPISBIGNUMBER(18,6)invoiceItemTax.pisTaxPercent(-)
NOTAFISCALPRODUTO.ALIQUOTAFUNRURALBIGNUMBER(18,6)FIXO 0
NOTAFISCALPRODUTO.ALIQUOTAINSSBIGNUMBER(18,6)FIXO 0
NOTAFISCALPRODUTO.ALIQUOTAISSBIGNUMBER(18,6)invoiceItemTax.issTaxPercent(it-nota-fisc.aliquota-iss)
NOTAFISCALPRODUTO.BASERETENCAOICMSBIGNUMBER(18,6)invoiceItemTax.vlBsubsIt(it-nota-fisc.vl-bsubs-it)
NOTAFISCALPRODUTO.BASEICMSBIGNUMBER(18,6)invoiceItemTax.vlBicmsIt(it-nota-fisc.vl-bicms-it)
NOTAFISCALPRODUTO.BASEICMSSTBIGNUMBER(18,6)invoiceItemTax.vlBsubsIt(it-nota-fisc.vl-bsubs-it)
NOTAFISCALPRODUTO.BASEIPIBIGNUMBER(18,6)invoiceItemTax.vlBipiIt(it-nota-fisc.vl-bipi-it)
NOTAFISCALPRODUTO.BASEISSBIGNUMBER(18,6)invoiceItemTax.vlBissIt(it-nota-fisc.vl-biss-it)
NOTAFISCALPRODUTO.BASECONFINSBIGNUMBER(18,6)invoiceItemTax.vlBCofins(-)
NOTAFISCALPRODUTO.BASEPISBIGNUMBER(18,6)invoiceItemTax.vlBPis(-)
NOTAFISCALPRODUTO.BASEFUNRURALBIGNUMBER(18,6)FIXO 0
NOTAFISCALPRODUTO.CODIGOERPSTRINGEMPRESA + '#' + siteID(nota-fiscal.cod-estabel) + '#' + invoiceNumber(nota-fiscal.nr-nota-fis) + '#' + series(nota-fiscal.serie) + '#' + invoiceItem.itemCode(it-nota-fisc.it-codigo) + '#' + invoiceItem.sequence(it-nota-fisc.nr-seq-fat)
NOTAFISCALPRODUTO.IDCFOPINTEGEREMPRESA and invoiceItem.transactionTypeID(it-nota-fisc.nat-operacao)  (Realizado um stream lookup entre esses dois campos)


NOTA FISCAL DEVOLUÇÃO

Os dados da tabela devol-cli do Datasul, são acessados através do endpoint dts/datasul-rest/resources/prg/ftp/v1/returnInvoicePublic e serão salvos na tabela notafiscal e notafiscalproduto do TOTVS SFA com os seguintes campos

TOTVS SFA

TIPO

DATASUL

NOTAFISCAL.IDNCANCELADAINTEGERFIXO 0
NOTAFISCAL.NUMERONOTAFISCALSTRINGinvoiceNumber(devol-cli.nr-nota-fis)
NOTAFISCAL.SERIESTRINGinvoiceSeries(evol-cli.serie)
NOTAFISCAL.DATAEMISSAODATEreturnDate(devol-cli.dt-devol)
NOTAFISCAL.QUANTIDADEFATURADABIGNUMBER(18,6)SUM(returnQty(devol-cli.qt-devolvida))
NOTAFISCAL.VALORFATURADOBIGNUMBER(18,6)SUM(returnValue(devol-cli.vl-devol))
NOTAFISCAL.IDLOCALFILIALFATURAMENTOBIGNUMBER(18,6)'EMP#' + EMPRESA +"#"+ siteCode(devol-cli.cod-estabel)
NOTAFISCAL.IDLOCALFILIALRETIRADABIGNUMBER(18,6)'EMP#' + EMPRESA +"#"+ siteCode(devol-cli.cod-estabel)
NOTAFISCAL.IDLOCALFILIALVENDABIGNUMBER(18,6)'EMP#' + EMPRESA +"#"+ siteCode(devol-cli.cod-estabel)
NOTAFISCAL.IDLOCALBIGNUMBER(18,6)'PRI#CLI#' + EMPRESA +"#"+ customerCode(devol-cli.cod-emitente)
NOTAFISCAL.IDPARCEIROBIGNUMBER(18,6)'CLI#' + EMPRESA +"#"+ customerCode(devol-cli.cod-emitente)
NOTAFISCAL.IDTIPONOTAFISCALBIGNUMBER(18,6)EMPRESA +"#"+ upper(transactionType(devol-cli.nat-operacao))
NOTAFISCAL.CODIGOERPSTRING'DEV#' + EMPRESA +"#"+ siteCode(devol-cli.cod-estabel) +"#"+ invoiceNumber(devol-cli.nr-nota-fis) +"#"+ invoiceSeries(evol-cli.serie)



TOTVS SFA

TIPO

DATASUL

NOTAFISCALPRODUTO.QUANTIDADEFATURADABIGNUMBER(18,6)returnQty(devol-cli.qt-devolvida)
NOTAFISCALPRODUTO.PRECOFATURADOBIGNUMBER(18,6)returnValue(devol-cli.vl-devol)/returnQty(devol-cli.qt-devolvida)
NOTAFISCALPRODUTO.PRECOORIGINALBIGNUMBER(18,6)costValue(devol-cli.vl-custo)/returnQty(devol-cli.qt-devolvida)
NOTAFISCALPRODUTO.PRECOCUSTOBIGNUMBER(18,6)costValue(devol-cli.vl-custo)/returnQty(devol-cli.qt-devolvida)
NOTAFISCALPRODUTO.IDNOTAFISCALBIGNUMBER(18,6)'DEV#' + EMPRESA +"#"+ siteCode(devol-cli.cod-estabel) +"#"+ invoiceNumber(devol-cli.nr-nota-fis) +"#"+ invoiceSeries(evol-cli.serie)
NOTAFISCALPRODUTO.IDNOTAFISCALORIGEMBIGNUMBER(18,6)EMPRESA +"#"+ siteCode(devol-cli.cod-estabel)+ '#' + invoiceNumber(devol-cli.nr-nota-fis) + '#' + invoiceSeries(evol-cli.serie)
NOTAFISCALPRODUTO.IDPRODUTOBIGNUMBER(18,6)EMPRESA + '#' + productCode(devol-cli.it-codigo) + 

(

CASE

WHEN referenceCode(devol-cli.cod-refer) IS NOT NUL

THEN ('#' + referenceCode(devol-cli.cod-refer))

END

)

NOTAFISCALPRODUTO.IDTIPONOTAFISCALBIGNUMBER(18,6)EMPRESA +"#"+ upper(transactionType(devol-cli.nat-operacao))
NOTAFISCALPRODUTO.IDCFOPBIGNUMBER(18,6)EMPRESA and transactionTypeID(transactionType (devol-cli.nat-operacao))  (Realizado um stream lookup entre esses dois campos)
NOTAFISCALPRODUTO.VALORTOTALBRUTOBIGNUMBER(18,6)returnValue(devol-cli.vl-devol) * returnQty(devol-cli.qt-devolvida)
NOTAFISCALPRODUTO.VALORTOTALLIQUIDOBIGNUMBER(18,6)returnValue(devol-cli.vl-devol) * returnQty(devol-cli.qt-devolvida)
NOTAFISCALPRODUTO.CODIGOERPSTRING'DEV#' + EMPRESA +"#"+ siteCode(devol-cli.cod-estabel) +"#"+ invoiceNumber(devol-cli.nr-nota-fis) +"#"+ invoiceSerie (evol-cli.serie) + '#' + productCode(devol-cli.it-codigo) + 

(

CASE

WHEN referenceCode(devol-cli.cod-refer) IS NOT NUL

THEN ('#' + referenceCode(devol-cli.cod-refer))

END

) + '# ' + returnInoiceSeq(devol-cli.sequencia)


PEDIDO

Os dados da tabela pedido do Datasul, são acessados através do endpoint /dts/datasul-rest/resources/prg/pdp/v1/ordersPublic e serão salvos na tabela pedido, pedidoproduto e pedidoentrega do TOTVS SFA com o s seguintes campos:

TOTVS SFA

TIPO

DATASUL

PEDIDO.IDNPEDIDOLIDOINTEGERFIXO 1
PEDIDO.IDNEXPORTADOERPINTEGERFIXO 1
PEDIDO.NUMEROPEDIDOSTRING

CASE

WHEN customerOrderId(ped-venda.nr-pedcli) IS NOT NULL

THEN customerOrderId(ped-venda.nr-pedcli)

ELSE ('ERP#' + orderId(ped-venda.nr-pedido))

END

PEDIDO.NUMEROPEDIDOERPSTRING

orderId(ped-venda.nr-pedido)

PEDIDO.SGLORIGEMPEDIDOSTRING'ERP' ou 'SIM3GWEB' ou 'SIM3GAND'
PEDIDO.HORATRANSMISSAOSTRINGCURRENT_DATE
PEDIDO.OBSERVACAOPEDIDOSTRINGcomments(ped-venda.observacoes)
PEDIDO.DATATRANSMISSAODATECURRENT_DATE
PEDIDO.DATAPEDIDODATEimplantationDate(ped-venda.dt-implant)
PEDIDO.IDLOCALFILIALFATURAMENTOBIGNUMBER(18,6)'EMP#' + EMPRESA + UPPER(branchId(ped-venda.cod-estabel)
PEDIDO.IDTABELAPRECOBIGNUMBER(18,6)EMPRESA + '#' + priceTableOrder(ped-venda.nr-tabpre)
PEDIDO.IDCONDICAOPAGAMENTOBIGNUMBER(18,6)EMPRESA + '#' +paymentTerms(ped-venda.cod-cond-pag)
PEDIDO.IDTIPOSITUACAOPEDIDOBIGNUMBER(18,6)orderSituation(ped-venda.cod-sit-ped)
PEDIDO.IDTIPOPEDIDOBIGNUMBER(18,6)FIXO 'TPV'
PEDIDO.IDLOCALFILIALVENDABIGNUMBER(18,6)'EMP#' + EMPRESA + UPPER(branchId(ped-venda.cod-estabel)
PEDIDO.IDLOCALBIGNUMBER(18,6)'PRI#CLI#' + EMPRESA + '#' + customerCode(ped-venda.cod-emitente)
PEDIDO.IDPARCEIROBIGNUMBER(18,6)'CLI#' + EMPRESA + '#' + customerCode(ped-venda.cod-emitente)
PEDIDO.IDUSUARIOBIGNUMBER(18,6)representativeShortName(ped-venda.no-ab-reppri)
PEDIDO.IDUSUARIOPROFISSIONALBIGNUMBER(18,6)representativeShortName(ped-venda.no-ab-reppri)
PEDIDO.IDTIPOLOGIABIGNUMBER(18,6)EMPRESA + '#' +salesChannel(ped-venda.cod-canal-venda)
PEDIDO.CODIGOERPSTRINGEMPRESA + '#' + UPPER(branchId(ped-venda.cod-estabel) + '#' +orderId(ped-venda.nr-pedido)
PEDIDO.QUANTIDADETOTAL*BIGNUMBER(18,6)SUM(orderItems.quantityRequested (ped-item.qt-pedida))
PEDIDO.VALORTOTAL*BIGNUMBER(18,6)SUM(orderItems.priceUnitary(ped-item.vl-preuni) * orderItems.quantityRequested (ped-item.qt-pedida))

*Atualizados na rotina SPedidoProduto


TOTVS SFA

TIPO

DATASUL

PEDIDOPRODUTO.IDPRODUTOBIGNUMBER(18,6)

EMPRESA + '#' +orderItems.itemCode(ped-item.it-codigo) + (

CASE

WHEN orderItems.referenceCode IS NOT NUL

THEN ('#' + orderItems.referenceCode(ped-item.cod-refer))

END

)

PEDIDOPRODUTO.QUANTIDADEBIGNUMBER(18,6)orderItems.quantityRequested(ped-item.qt-pedida)
PEDIDOPRODUTO.QUANTIDADEITENSBIGNUMBER(18,6)count(ordemItens)
PEDIDOPRODUTO.QUANTIDADEPENDENTEBIGNUMBER(18,6)orderItems.quantityPending(ped-item.qt-pendente)
PEDIDOPRODUTO.QUANTIDADEENTREGARBIGNUMBER(18,6)orderItems.quantityRequested(ped-item.qt-pedida)
PEDIDOPRODUTO.QUANTIDADEFATURADABIGNUMBER(18,6)orderItems.quantityAttentive(ped-item.qt-atendida)
PEDIDOPRODUTO.PRECOFATURADOBIGNUMBER(18,6)orderItems.priceUnitary(ped-item.vl-preuni)
PEDIDOPRODUTO.PESOMEDIOBIGNUMBER(18,6)PRODUTO.PESOMEDIO 
PEDIDOPRODUTO.VALORDESCONTOBIGNUMBER(18,6)orderItems.informedDiscount(ped-item.val-desconto-inform)
PEDIDOPRODUTO.PERCENTUALDESCONTOBIGNUMBER(18,6)itemPercentageDiscount(ped-item.per-des-item)
PEDIDOPRODUTO.PRECOCUSTOBIGNUMBER(18,6)PRODUTO.PRECOCUSTO
PEDIDOPRODUTO.PRECOORIGINALBIGNUMBER(18,6)orderItems.originalPrice(ped-item.vl-preori)
PEDIDOPRODUTO.PRECOSUGERIDOBIGNUMBER(18,6)orderItems.originalPrice(ped-item.vl-preori)
PEDIDOPRODUTO.PRECOVENDABIGNUMBER(18,6)orderItems.priceUnitary(ped-item.vl-preuni)
PEDIDOPRODUTO.VALORIPIBIGNUMBER(18,6)orderItems.ipiValue(ped-item.val-ipi)
PEDIDOPRODUTO.NATUREZAOPERACAOSTRINGorderItems.transactionType(ped-item.nat-operacao)
PEDIDOPRODUTO.IDEMBALAGEMBIGNUMBER(18,6)UPPER(orderItems.msrUnit(ped-item.cod-un))
PEDIDOPRODUTO.IDTABELAPRECOBIGNUMBER(18,6)UPPER(orderItems.priceTable(ped-item.nr-tabpre))
PEDIDOPRODUTO.IDPEDIDOINTEGEREMPRESA + '#' + UPPER(branchId(ped-venda.cod-estabel) + '#' +orderId(ped-venda.nr-pedido)
PEDIDOPRODUTO.IDTIPOSITPEDIDOPRODUTOBIGNUMBER(18,6)orderItems.orderItemSituation(ped-item.cod-sit-item)?
PEDIDOPRODUTO.ORDEMINTEGERorderItems.sequence(ped-item.nr-sequencia)
PEDIDOPRODUTO.CODIGOERPSTRING

EMPRESA + '#' + UPPER(branchId(ped-venda.cod-estabel) + '#' +orderId(ped-venda.nr-pedido) + orderItems.itemCode(ped-item.it-codigo) + (

CASE

WHEN orderItems.referenceCode IS NOT NUL

THEN ('#' + orderItems.referenceCode(ped-item.cod-refer))

END

) + '#' + orderItems.sequence(ped-item.nr-sequencia)

PEDIDOPRODUTO.OBSERVACAOSTRINGorderItems.comments(ped-item.observacao)
PEDIDOPRODUTO.NUMEROITEMPEDIDOCLIENTESTRINGorderItems.purchaseOrder(ped-item.cod-ord-compra)

TOTVS SFA

TIPO

DATASUL

PEDIDOENTREGA.IDPEDIDOINTEGEREMPRESA + '#' + UPPER(branchId(ped-venda.cod-estabel) + '#' +orderId(ped-venda.nr-pedido)
PEDIDOENTREGA.IDTIPOFRETEBIGNUMBER(18,6)

CASE 

WHEN cifCity(ped-venda.cidade-cif) IS NOT NUL

THEN '1'

ELSE '0'

END

PEDIDOENTREGA.IDPEDIDOPRODUTOBIGNUMBER(18,6)

EMPRESA + '#' + UPPER(branchId (ped-venda.cod-estabel) + '#' +orderId(ped-venda.nr-pedido) + orderItems.itemCode(orderItems.ped-item.it-codigo) + (

CASE

WHEN orderItems.referenceCode IS NOT NUL

THEN ('#' + orderItems.referenceCode (ped-item.cod-refer))

END

) + '#' + orderItems.sequence(ped-item.nr-sequencia)

PEDIDOENTREGA.IDLOCALENTREGAINTEGER'PRI#CLI#' + EMPRESA + '#' + customerCode(ped-venda.cod-emitente)
PEDIDOENTREGA.IDPARCEIROENTREGAINTEGER'CLI#' + EMPRESA + '#' + customerCode(ped-venda.cod-emitente)
PEDIDOENTREGA.IDPARCEIROTRANSPORTADORBIGNUMBER(18,6)'TRA#' + EMPRESA + '#' + codeCarrier(transporte.cod-transp)
PEDIDOENTREGA.IDCIDADEINTEGERLOCAL.IDCIDADE
PEDIDOENTREGA.DATAENTREGADATEorderItems.delireryDate(ped-item.dt-entrega)
PEDIDOENTREGA.IDNENTREGAFUTURAINTEGERFIXO 0
PEDIDOENTREGA.QUANTIDADEBIGNUMBER(18,6)orderItems.quantityRequested(ped-item.qt-pedida)
PEDIDOENTREGA.VALORFRETEBIGNUMBER(18,6)valueFreight(movdis.ped-venda.val-frete)
PEDIDOENTREGA.QUANTIDADEITENSBIGNUMBER(18,6)count(ordemItens)
PEDIDOENTREGA.VALORDESPESABIGNUMBER(18,6)valuePacking(movdis.ped-venda.val-embal)
PEDIDOENTREGA.NOMETRANSPORTADORSTRING'TRA#' + EMPRESA + '#' + codeCarrier(transporte.cod-transp)
PEDIDOENTREGA.VALORSEGUROBIGNUMBER(18,6)valueInsurance(movdis.ped-venda.val-seguro)
PEDIDOENTREGA.IDPARCEIROREDESPACHOBIGNUMBER(18,6)'TRA#' + EMPRESA + '#' + codeReshipmentTransp(transporte.cod-transp-red)
PEDIDOENTREGA.IDNEXPORTADOERPINTEGERFIXO 1
PEDIDOENTREGA.CODIGOERPSTRING

EMPRESA + '#' + UPPER(branchId(ped-venda.cod-estabel) + '#' +orderId(ped-venda.nr-pedido) + orderItems.itemCode(ped-item.it-codigo) + (

CASE

WHEN orderItems.referenceCode IS NOT NUL

THEN ('#' + orderItems.referenceCode(ped-item.cod-refer))

END

) + '#' + orderItems.sequence(ped-item.nr-sequencia) + '#' + orderItems.delireryDate(ped-item.dt-entrega)

PEDIDOENTREGA.SGLPEDIDOENTREGASTRINGFIXO 'PRINCIPAL'


PRODUTO

Os dados das tabelas item, alternativo, item-caixa e item-uni-estab do Datasul são acessados através do endpoint /dts/datasul-rest/resources/prg/cep/v1/productPublic e serão salvos nas tabelas produtoprodutogrupoprodutoprodutoembalagem produtofilial do TOTVS SFA com os seguintes campos:

TOTVS SFA

TIPO

DATASUL

PRODUTO.DESCRICAOSTRINGproductDescription(item.desc-item)
PRODUTO.CODIGOSTRINGproductCode(item.it-codigo)
PRODUTO.COMPLEMENTOSTRINGcomplInformation(item.inform-compl)
PRODUTO.OBSERVACAOSTRINGcomments(item.narrativa)
PRODUTO.CODIGOADICIONALSTRINGauxiliaryCode(item.cod-auxiliar)
PRODUTO.COMENTARIOSTRINGcomments(item.narrativa)
PRODUTO.IDNATIVOINTEGER

CASE

WHEN obsolete(item-uni-estab.cod-obsoleto) != 1||idnativo = 0

THEN 0

ELSE 1

END

PRODUTO.IDNPERMITEDEVOLUCAOINTEGERFIXO 0
PRODUTO.IDNREQUERQTDMULTIPLAINTEGERFIXO 0
PRODUTO.IDNLANCAMENTOINTEGERFIXO 0
PRODUTO.IDNUTILIZACOTAINTEGERFIXO 0
PRODUTO.IDNPERMITEVENDAFRACIONADAINTEGERFIXO 0
PRODUTO.PESOMINIMOBIGNUMBER(18,6)netWeight(item.peso-liquido)
PRODUTO.PESOMAXIMOBIGNUMBER(18,6)grossWeight(item.peso-bruto)
PRODUTO.PESOMEDIOBIGNUMBER(18,6)grossWeight(item.peso-bruto)
PRODUTO.QUANTIDADEAPRESENTACAOBIGNUMBER(18,6)netWeight(item.peso-liquido)
PRODUTO.PRECOCUSTOBIGNUMBER(18,6)productSiteCost[0].batchMatValue(item-estab.val-unit-mat-m) + productSiteCost[0].batchMOBValue(item-estab.val-unit-mob-m + productSiteCost[0].batchGGFValue(item-estab.val-unit-ggf-m)
PRODUTO.IDGRUPOPRODUTOBIGNUMBER(18,6)EMPRESA + '#' + inventoryGroup(item.ge-codigo)
PRODUTO.IDUNIDADEMEDIDAPADRAOBIGNUMBER(18,6)EMPRESA+ '#' + measureUnit(item.un)
PRODUTO.IDUNIDADEMEDIDAVENDABIGNUMBER(18,6)EMPRESA+ '#' + measureUnit(item.un)
PRODUTO.IDNSERVICOINTEGERFIXO 0
PRODUTO.CODIGOERPSTRING

EMPRESA + '#' + productCode(item.it-codigo) +(

CASE

WHEN referenceCode IS NOT NULL

THEN '#' + referenceCode

END

)

TOTVS SFA

TIPO

DATASUL

PRODUTOGRUPOPRODUTO.IDPRODUTOINTEGER

EMPRESA + '#' + productCode(item.it-codigo) +(

CASE

WHEN referenceCode IS NOT NULL

THEN '#' + referenceCode

END

)

PRODUTOGRUPOPRODUTO.IDGRUPOPRODUTOINTEGEREMPRESA + '#' + inventoryGroup(item.ge-codigo)
PRODUTOGRUPOPRODUTO.CODIGOERPSTRING

EMPRESA + '#' + productCode(item.it-codigo) +(

CASE

WHEN referenceCode IS NOT NULL

THEN '#' + referenceCode

END

) + '#' + inventoryGroup(item.ge-codigo)

TOTVS SFA

TIPO

DATASUL

PRODUTOEMBALAGEM.FATOREMBALAGEMPADRAOBIGNUMBER(18,6)FIXO 1.0
PRODUTOEMBALAGEM.FATOREMBALAGEMBIGNUMBER(18,6)FIXO 1.0
PRODUTOEMBALAGEM.IDNEXIBEEMBALAGEMINTEGERFIXO 1
PRODUTOEMBALAGEM.IDNPADRAOINTEGERFIXO 1
PRODUTOEMBALAGEM.IDNATIVOINTEGER

CASE

WHEN obsolete(item-uni-estab.cod-obsoleto) != 1||idnativo = 0

THEN 0

ELSE 1

END

PRODUTOEMBALAGEM.IDPRODUTOINTEGER

EMPRESA + '#' + productCode(item.it-codigo) +(

CASE

WHEN referenceCode IS NOT NULL

THEN '#' + referenceCode

END

)

PRODUTOEMBALAGEM.IDEMBALAGEMBIGNUMBER(18,6)EMPRESA+ '#' + measureUnit(item.un)
PRODUTOEMBALAGEM.CODIGOERPSTRING

EMPRESA + '#' + productCode(item.it-codigo) +(

CASE

WHEN referenceCode IS NOT NULL

THEN '#' + referenceCode

END

)

TOTVS SFA

TIPO

DATASUL

PRODUTOFILIAL.IDPRODUTOINTEGER

EMPRESA + '#' + productCode(item.it-codigo) +(

CASE

WHEN referenceCode IS NOT NULL

THEN '#' + referenceCode

END

)

PRODUTOFILIAL.IDLOCALFILIALINTEGER'EMP#' + EMPRESA + '#' + productSite[0].siteCode(item-uni-estab.cod-estabel)
PRODUTOFILIAL.CODIGOERPSTRING'EMP#' + EMPRESA + '#' + productSite[0].siteCode(item-uni-estab.cod-estabel) 

+ '#' + productCode(item.it-codigo) +(

CASE

WHEN referenceCode IS NOT NULL

THEN '#' + referenceCode

END

)

PRODUTOFILIAL.IDNPADRAOINTEGERFIXO 1


TIPO SITUAÇÃO PEDIDO

A entidade tiposituacaopedido do TOTVS SFA conta com valores fixos:

TOTVS SFA

TIPO

VALORES

TIPOSITUACAOPEDIDO.IDNATIVOINTEGER1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1

TIPOSITUACAOPEDIDO.DESCRICAO

STRING

'NAO FINALIZADO'; 'ABERTO'; 'ATENDIDO PARCIAL', 'ATENDIDO TOTAL'; 'PENDENTE'; 'SUSPENSO'; 'CANCELADO';'FATUR BALCAO'; 'CANCELADO DATASUL';  'INATIVO'; 'SIMULACAO DE ORCAMENTO'; 'ORCAMENTO FINALIZADO'; 'ORCAMENTO GRAVADO'

TIPOSITUACAOPEDIDO.SGLTIPOSITUACAOPEDIDOSTRING'NF'; 'PA'; 'FP'; 'PF'; 'PP'; 'PS'; 'PC'; 'FB'; 'CD'; 'INI'; 'SO'; 'OF'; 'OR
TIPOSITUACAOPEDIDO.CODIGOERPSTRING'NF'; '1'; '2'; '3'; '4'; '5'; '6'; '7'; 'CD'; 'INI'; 'SO'; 'OF'; 'OR


TABELA PREÇO

Os dados da tabela tb-preco do Datasul são acessados através do endpoint /dts/datasul-rest/resources/prg/cdp/v1/priceTablePublic e serão salvos na tabela tabelapreco do TOTVS SFA com os seguintes campos:

OTVS SFA

TIPO

DATASUL

TABELAPRECO.CODIGO

STRING

priceTableCode(tb-preco.nr-tabpre)

TABELAPRECO.DESCRICAO

STRING(80)

priceTableCode(tb-preco.nr-tabpre) + '-' + priceTableDescription(tb-preco.descricao)

TABELAPRECO.DATAINICIOVIGENCIA

TIMESTAMP

startDate(tb-preco.dt-inival)

TABELAPRECO.DATAFIMVIGENCIA

TIMESTAMP

endDate(tb-preco.dt-fimval)

TABELAPRECO.IDNATIVOINTEGER

CASE

WHEN status(tb-preco.situacao) != 1

THEN 0

ELSE 1

END

TABELAPRECO.IDNACALCULOANTECIPACAOINTEGERFIXO 0
TABELAPRECO.IDNLISTAPEDIDOINTEGERFIXO 1
TABELAPRECO.IDNDISPPRIMEIROPEDIDOINTEGERFIXO 0

TABELAPRECO.IDINDEXADOR

BIGNUMBER(18,6)

EMPRESA + '#' + CurrencyCode(tb-preco.mo-codigo)

TABELAPRECO.CODIGOERPSTRINGEMPRESA + '#' +priceTableCode(tb-preco.nr-tabpre)


TABELA PRECO PRODUTO

Neste adapter deverão ser geradas as informações dos produtos das tabelas de preço. Tabela preco-item e item-uni-estab, são acessados através do endpoint /dts/datasul-rest/resources/prg/cdp/v1/priceItemPublic, e serão salvos na tabela tabelaprecoproduto do TOTVS SFA com os seguintes campos:

TOTVS SFA

TIPO

DATASUL

TABELAPRECOPRODUTO.IDNCALCULAANTECIPACAOINTEGERFIXO 0

TABELAPRECOPRODUTO.PRECO

BIGNUMBER(18,6)

salesPrice(preco-item.preco-venda)

TABELAPRECOPRODUTO.PRECOMINIMOBIGNUMBER(18,6)0.0
TABELAPRECOPRODUTO.PRECOMAXIMOBIGNUMBER(18,6)99999.990000
TABELAPRECOPRODUTO.FAIXAESCALONAMENTOMINIMOBIGNUMBER(18,6)minimumQuantity(preco-item.quant-min)
TABELAPRECOPRODUTO.FAIXAESCALONAMENTOMAXIMOBIGNUMBER(18,6)FIXO 99999.99 ou  minimumQuantity(preco-item.quant-min) + 1
TABELAPRECOPRODUTO.DATAINICIOVIGENCIADATEstartDate(preco-item.dt-inival)
TABELAPRECOPRODUTO.DATAFIMVIGENCIADATEFIXO 9999-12-31
TABELAPRECOPRODUTO.IDNPRECOFIXOINTEGERFIXO 0
TABELAPRECOPRODUTO.IDNUTILIZALOTEINTEGERFIXO 0

TABELAPRECOPRODUTO.IDTABELAPRECO

BIGNUMBER(18,6)

EMPRESA + '#' + priceTable(preco-item.nr-tabpre)

TABELAPRECOPRODUTO.IDPRODUTO

BIGNUMBER(18,6)

EMPRESA + '#' + itemCode(preco-item.it-codigo) (

CASE

WHEN referenceCode IS NOT NULL

THEN (+ '#' +referenceCode(preco-item.cod-refer)

END

)

TABELAPRECOPRODUTO.CODIGOERPSTRINGEMPRESA + '#' + priceTable(preco-item.nr-tabpre) + 

EMPRESA + '#' + itemCode(preco-item.it-codigo) (

CASE

WHEN referenceCode IS NOT NULL

THEN (+ '#' +referenceCode(preco-item.cod-refer)

END

)  + '#' + startDate(preco-item.dt-inival) + '#' + ordem (calculada baseada na faixa de escalonamento)


TIPO COBRANÇA

Os dados da tabela cart_bcia do Datasul são acessados através do endpoint /dts/datasul-rest/resources/prg/cdp/v1/portfolioPublic e serão salvos na tabela tipocobranca do TOTVS SFA com os seguintes campos:

OTVS SFA

TIPO

DATASUL

TIPOCOBRANCAO.IDNATIVO

INTEGER

FIXO 1

TIPOCOBRANCAO.IDNREQUERBANCOINTEGERFIXO 0
TIPOCOBRANCAO.IDNDISPPRIMEIROPEDIDOINTEGERFIXO 1
TIPOCOBRANCAO.IDREEMBOLSAVELINTEGERFIXO 1
TIPOCOBRANCAO.IDNVALIDAVALORLIMITEINTEGERFIXO 1
TIPOCOBRANCAO.IDNPERMITEALTERARREEMBOLSOINTEGERFIXO 1
TIPOCOBRANCAO.IDNPADRAOINTEGERFIXO 0
TIPOCOBRANCAO.DESCRICAOSTRINGportfolioDescription(cart_bcia.des_cart_bcia)
TIPOCOBRANCAO.CODIGOSTRINGportfolioCode(cart_bcia.cod_cart_bcia)
TIPOCOBRANCA.CODIGOERPSTRINGEMPRESA + '#' + portfolioCode(cart_bcia.cod_cart_bcia)


TIPO FRETE 

A entidade tipofrete do TOTVS SFA conta com valores fixos:

TOTVS SFA

TIPO

VALORES

TIPOFRETE.DESCRICAO

STRING

'CIF - Por conta do fornecedor';  'CIF - Por conta do fornecedor'; 'OUTROS'

TIPOFRETE.SGLTIPOFRETE

STRING

'CIF'; 'FOB'; 'OUTROS'

TIPOFRETE.IDNATIVOINTEGER1; 1; 1
TIPOFRETE.IDNPADRAOINTEGER0; 1; 0
TIPOFRETE.IDNSOMARFRETEINTEGER0; 1; 1
TIPOFRETE.CODIGOERPSTRING'1'; '2'; '3'


TIPO NOTA FISCAL

Os dados da tabela cfop-natur do Datasul são acessados através do endpoint /dts/datasul-rest/resources/prg/cdp/v1/transactionTypesPublic e serão salvos na tabela tiponotafiscal do TOTVS SFA com os seguintes campos:

TOTVS SFA

TIPO

DATASUL

TIPONOTAFISCAL.IDNATIVOINTEGERFIXO 1

TIPONOTAFISCAL.CODIGOERP

STRING

EMPRESA + '#' + code(natur-oper.nat-operacao)

TIPONOTAFISCAL.DESCRICAO

STRING

description(natur-oper.nat-operacao)


TITULOS À RECEBER

Os dados das tabelas tit-acr e espec_docto do Datasul são acessados através do endpoint /dts/datasul-rest/resources/prg/fin/v1/receivableDocumentPublic e serão salvos na tabela financeirotitulo do TOTVS SFA com os seguintes campos:

TOTVS SFA

TIPO

DATASUL

TOTVS SFA

TIPO

DATASUL

FINANCEIROTITULO.IDLOCALBIGNUMBER'PRI#CLI#' + EMPRESA +"#"+ customerCode(tit_acr.cdn_cliente)

FINANCEIROTITULO.IDPARCEIRO

BIGNUMBER

'CLI#' + EMPRESA +"#"+ customerCode(tit_acr.cdn_cliente)

FINANCEIROTITULO.DESCRICAO

STRING

documentTypeDescription(espec_docto.ind_tip_espec_docto)

FINANCEIROTITULO.SGLTIPOTITULOSTRING

CASE 

WHEN(TIPODOCUMENTO.DESCRICAO = 'Antecipação' ou TIPODOCUMENTO.DESCRICAO = 'Nota de Crédito') THEN 'TC'

WHEN(TIPODOCUMENTO.DESCRICAO = 'Nenhum' ou TIPODOCUMENTO.DESCRICAO = 'Normal' ou TIPODOCUMENTO.DESCRICAO = 'Cheques Recebidos' ou TIPODOCUMENTO.DESCRICAO = 'Nota de Débito' ou TIPODOCUMENTO.DESCRICAO = 'Nota Fiscal' ou TIPODOCUMENTO.DESCRICAO = 'Aviso Débito' ou TIPODOCUMENTO.DESCRICAO = 'Nota Promissória' ou TIPODOCUMENTO.DESCRICAO = 'Previsão' ou TIPODOCUMENTO.DESCRICAO = 'Provisão') THEN 'TD'

ELSE 'TD'

END

FINANCEIROTITULO.IDNPAGOINTEGER

CASE

WHEN settleDate(tit_acr.dat_liquidac_tit_acr) IS NOT  NULL

THEN 1

ELSE 0

END

FINANCEIROTITULO.NUMERODOCUMENTOSTRINGdocumentNumber(tit_acr.cod_tit_acr)
FINANCEIROTITULO.NUMEROPARCELASTRING

CASE

WHEN documentParcel(tit_acr.cod_parcela) IS NULL

THEN '01'

ELSE documentParcel(tit_acr.cod_parcela)

END

FINANCEIROTITULO.DATAMOVIMENTODATEissueDate(tit_acr.dat_emis_docto)
FINANCEIROTITULO.DATAVENCIMENTODATEdueDate(tit_acr.dat_vencto_tit_acr)
FINANCEIROTITULO.DATAPAGAMENTODATEsettleDate(tit_acr.dat_liquidac_tit_acr)
FINANCEIROTITULO.PORTADORSTRING'POR#' + EMPRESA +"#"+ holderCode(tit_acr.cod_portador)
FINANCEIROTITULO.VALORORIGINALBIGNUMBER(18,6)

CASE

WHEN grossValue(tit_acr.val_origin_tit_acr) ! =  0

THEN grossValue(tit_acr.val_origin_tit_acr)

ELSE 0

END

FINANCEIROTITULO.VALORPAGOPARCIALBIGNUMBER(18,6)

CASE

WHEN settleDate(tit_acr.dat_liquidac_tit_acr) IS  NULL

THEN (grossValue(tit_acr.val_origin_tit_acr) - balanceValue(tit_acr.val_sdo_tit_acr))

ELSE 0

END

FINANCEIROTITULO.VALORDESCONTOBIGNUMBER(18,6)discountValue(tit_acr.val_desc_tit_acr)
FINANCEIROTITULO.VALORJUROSBIGNUMBER(18,6)interestValue(tit_acr.val_juro)
FINANCEIROTITULO.VALORMULTABIGNUMBER(18,6)penaltyValue tit_acr.val_multa_tit_acr)
FINANCEIROTITULO.OBSERVACAOSTRINGTIPODOCUMENTO.OBSERVACAO
FINANCEIROTITULO.IDUSUARIOBIGNUMBER(18,6)EMPRESA+"#"+represent(tit_acr.cdn_repres)
FINANCEIROTITULO.IDCLASSIFICACAOFINTITULOBIGNUMBER(18,6)

CASE

WHEN reversal(tit_acr.log_tit_acr_estordo) = TRUE THEN 'Cancelado'

WHEN bankStatusDescription(tit_acr.ind_sit_bcia_tit_acr) = 'Protesto' THEN 'Protesto Efetivo'

WHEN balanceValue(tit_acr.val_sdo_tit_acr) = 0 THEN 'Baixado'

WHEN balanceValue(tit_acr.val_sdo_tit_acr) <  grossValue(tit_acr.val_origin_tit_acr) THEN 'Parcialmente Baixado'

ELSE 'Normal'

END

FINANCEIROTITULO.IDINDEXADORBIGNUMBER(18,6)EMPRESA +"#"+ currencyCode(tit_acr.cod_indic_econ)
FINANCEIROTITULO.IDLOCALFILIALBIGNUMBER(18,6)'EMP# '+ EMPRESA + "#"+ branchCode(tit_acr.cod_estab)
FINANCEIROTITULO.CODIGOERPSTRINGEMPRESA +"#"+ branchCode(tit_acr.cod_estab) +"#"+ documentNumber(tit_acr.cod_tit_acr)+"#"+ documentPrefix(tit_acr.cod_ser_docto) +"#"+ documentParcel(tit_acr.cod_parcela) +"#"+ documentType(tit_acr.cod_espec_docto)+"#"+ customerCode(tit_acr.cdn_cliente)


TRANSPORTADORA

Os dados da tabela transporte e cidade do Datasul são acessados através do endpoint /dts/datasul-rest/resources/prg/cdp/v1/carriersPublic e serão salvos nas tabelas parceiro, local, parceirolocal, localtelefone, parceirotipoparceiro, localtipolocal do TOTVS SFA com os seguintes campos:

TOTVS SFA

TIPO

DATASUL

PARCEIRO.NOMEPARCEIROSTRINGcode(transporte.cod-transp) + '-' + name(transporte.nome)
PARCEIRO.NOMEPARCEIROFANTASIASTRINGcode(transporte.cod-transp) + '-' + shortName(transporte.nome-abrev)
PARCEIRO.SGLTIPOPESSOASTRING

CASE 

WHEN descType(transporte.natureza) = 'PESSOA JURÍDICA' THEN 'PJ'

WHEN descType(transporte.natureza) = 'PESSOA FÍSICA' THEN 'PF'

WHEN descType(transporte.natureza) = 'ESTRANGEIRO' THEN 'ES'

WHEN descType(transporte.natureza) = 'TRADING' THEN 'TR'

ELSE 'ES'

END

PARCEIRO.IDNATIVOINTEGERFIXO 1
PARCEIRO.IDNCONTRIBUINTEINTEGERFIXO 0
PARCEIRO.NUMEROMATRICULASTRINGcode(transporte.cod-transp)
PARCEIRO.DATAULTIMAATUALIZACAODATEFIXO 2000-01-01
PARCEIRO.DATACADASTRODATEFIXO 2000-01-01
PARCEIRO.IDCLASSIFICACAOPARCEIROBIGNUMBER(18,6)

CASE 

WHEN descType(transporte.natureza) = 'PESSOA JURÍDICA' THEN 'PJ'

WHEN descType(transporte.natureza) = 'PESSOA FÍSICA' THEN 'PF'

WHEN descType(transporte.natureza) = 'ESTRANGEIRO' THEN 'ES'

WHEN descType(transporte.natureza) = 'TRADING' THEN 'TR'

ELSE 'ES'

END

PARCEIRO.IDNEXPORTADOERPDATEFIXO 1
PARCEIRO.CODIGOERPSTRING'TRA#' + EMPRESA + '#' + code(transporte.cod-transp)

TOTVS SFA

TIPO

DATASUL

LOCAL.IDNIPIINTEGERFIXO 0
LOCAL.IDNATIVOINTEGERFIXO 1
LOCAL.IDNREQUERDATAENTREGAINTEGERFIXO 0
LOCAL.IDNREQUERNUMEROPEDIDOCLIENTEINTEGERFIXO 0
LOCAL.NUMEROMATRICULASTRINGcode(transporte.cod-transp)
LOCAL.BAIRROSTRINGdistrict(transporte.bairro)
LOCAL.CNPJSTRINGcnpj(transporte.cgc)
LOCAL.CEPSTRINGzipCode(transporte.cep)
LOCAL.INSCRICAOESTADUALSTRINGstateRegistration(transporte.ins-estadual)
LOCAL.DESCRICAOSTRINGcode(transporte.cod-transp) + '-' + name(transporte.nome)
LOCAL.LOGRADOUROSTRINGaddress(transporte.endereco)
LOCAL.DOCUMENTOIDENTIFICACAOSTRINGcnpj(transporte.cgc)
LOCAL.DATACADASTRODATEFIXO 2000-01-01
LOCAL.DATAULTIMAATUALIZACAODATEFIXO 2000-01-01
LOCAL.IDCIDADEBIGNUMBER(18,6)EMPRESA + '#' + country(transporte.pais) + '#' + stat (transporte.estado) + '#' + city(transporte.cidade)
LOCAL.IDNEXPORTADOERPINTEGERFIXO 1
LOCAL.CODIGOERPSTRING'TRA#' + EMPRESA + '#' + code(transporte.cod-transp)

TOTVS SFA

TIPO

DATASUL

PARCEIROLOCAL.IDPARCEIROBIGNUMBER(18,6)'TRA#' + EMPRESA + '#' + code(transporte.cod-transp)
PARCEIROLOCAL.IDLOCALBIGNUMBER(18,6)'TRA#' + EMPRESA + '#' + code(transporte.cod-transp)
PARCEIROLOCAL.IDNEXPORTADOERPINTEGERFIXO 1
PARCEIROLOCAL.CODIGOERPSTRING'TRA#' + EMPRESA + '#' + code(transporte.cod-transp)

TOTVS SFA

TIPO

DATASUL

LOCALTELEFONE.TELEFONESTRINGphone(transporte.telefone)
LOCALTELEFONE.IDNPADRAOINTEGERFIXO 1
LOCALTELEFONE.IDNEXPORTADOERPINTEGERFIXO 1
LOCALTELEFONE.IDPARCEIROBIGNUMBER(18,6)'TRA#' + EMPRESA + '#' + code(transporte.cod-transp)
LOCALTELEFONE.IDLOCALBIGNUMBER(18,6)'TRA#' + EMPRESA + '#' + code(transporte.cod-transp)
LOCALTELEFONE.CODIGOERPSTRING'TRA#' + EMPRESA + '#' + code(transporte.cod-transp) + '#' + phone(transporte.telefone)

TOTVS SFA

TIPO

DATASUL

PARCEIROTIPOPARCEIRO.IDTIPOPARCEIROBIGNUMBER(18,6)FIXO 'TRA'
PARCEIROTIPOPARCEIRO.PARCEIROBIGNUMBER(18,6)'TRA#' + EMPRESA + '#' + code(transporte.cod-transp)
PARCEIROTIPOPARCEIRO.CODIGOERPSTRING'TRA#' + EMPRESA + '#' + code(transporte.cod-transp)

TOTVS SFA

TIPO

DATASUL

LOCALTIPOLOCAL.IDLOCALBIGNUMBER(18,6)'TRA#' + EMPRESA + '#' + code(transporte.cod-transp)
LOCALTIPOLOCAL.IDTIPOLOCALBIGNUMBER(18,6)FIXO 'PRI'
LOCALTIPOLOCAL.IDNATIVOINTEGERFIXO 1
LOCALTIPOLOCAL.IDNPADRAOINTEGERFIXO 0
LOCALTIPOLOCAL.IDNEXPORTADOERPINTEGERFIXO 1
LOCALTIPOLOCAL.CODIGOERPSTRING'TRA#' + EMPRESA + '#' + code(transporte.cod-transp)


UNIDADE MEDIDA

Os dados da tabela tab-unidade do Datasul são acessados através do endpoint /dts/datasul-rest/resources/prg/cdp/v1/unityMeasuresPublic e serão salvos na tabela unidademedida do TOTVS SFA com os seguintes campos:

TOTVS SFA

TIPO

DATASUL

UNIDADEMEDIDA.IDNATIVOINTEGERFIXO 1
UNIDADEMEDIDA.IDNDISPONIVELPARACOTAINTEGERFIXO 0

UNIDADEMEDIDA.DESCRICAO

STRING

UPPER(description(tab-unidade.descricao))

UNIDADEMEDIDA.CODIGOSTRINGUPPER(code(tab-unidade.un))

UNIDADEMEDIDA.SGLUNIDADEMEDIDA

STRING

UPPER(code(tab-unidade.un))

UNIDADEMEDIDA.SGLTIPOUNIDADEMEDIDASTRINGUPPER(code(tab-unidade.un))

UNIDADEMEDIDA.CODIGOERP

STRING

EMPRESA + '#' +UPPER(code(tab-unidade.un))


VENDEDOR

Os dados da tabela repres do Datasul são acessados através do endpoint /dts/datasul-rest/resources/prg/cdp/v1/representativesPublic e serão salvos na tabela usuario, usuariotelefone, usuarioemail usuariofilial do TOTVS SFA com os seguintes campos:

TOTVS SFA

TIPO

DATASUL

USUARIO.LOGINSTRINGshortName(repres.nome-abrev)
USUARIO.NOMESTRING(80)code(mgadm.repres.cod-rep) + '-' + name(repres.nome)
USUARIO.SENHASTRING(30)SHA1HEX(Senha Fixa) → Valor é passado fixo na integração
USUARIO.EMAILSTRINGemail(repres.e-mail)
USUARIO.TELEFONESTRINGphone1(repres.telefone)
USUARIO.DATACADASTRODATEFIXO DataAtual
USUARIO.IDNATIVOINTEGER

CASE

WHEN status(repres.ind-situacao) = '1'

THEN 1

ELSE 0

END

USUARIO.FAXSTRINGfax(repres.telefax)
USUARIO.ENDERECOSTRINGaddress(repres.endereco)
USUARIO.CEPSTRINGzipCode(repres.cep)
USUARIO.IDCIDADEBIGNUMBER(18,6)EMPRESA + '#' + UPPER(country(repres.pais)) +'#' + UPPER(state(repres.estado)) + '#' + UPPER(city(repres.cidade))
USUARIO.BAIRROSTRINGdistrict(repres.bairro)
USUARIO.IDPERFILACESSOBIGNUMBER(18,6)FIXO 'XML#PV'
USUARIO.IDNEXIGEALFANUMERICOINTEGERFIXO 0
USUARIO.IDNPERMITIRINTEGRACAOINTEGERFIXO 1
USUARIO.IDNHABILITARLDAPINTEGERFIXO 0
USUARIO.DOCUMENTOIDENTIFICACAOSTRING(80)cnpj(repres.cgc)
USUARIO.IDNEXPORTADOERPINTEGERFIXO 1
USUARIO.DEPARTAMENTOSTRINGFIXO VALOR DA EMPRESA NO KETTLE
USUARIO.CODIGOERPSTRINGEMPRESA + '#' + code(mgadm.repres.cod-rep)

TOTVS SFA

TIPO

DATASUL

USUARIOTELEFONE.TELEFONESTRINGphone1(repres.telefone) ou telex(repres.telex)  ou fax(repres.telefax)
USUARIOTELEFONE.IDNPADRAOINTEGER

CASE

WHEN type = 'TEL'

THEN  1

ELSE 0

END

USUARIOTELEFONE.IDUSUARIOBIGNUMBER(18,6)EMPRESA + '#' + code(mgadm.repres.cod-rep)
USUARIOTELEFONE.CODIGOERPSTRINGEMPRESA + '#' + code(mgadm.repres.cod-rep) + '#' +type('TEL' ou 'TLX' ou 'FAX')+'#'+ (phone1(repres.telefone) ou telex(repres.telex)  ou fax(repres.telefax))

TOTVS SFA

TIPO

DATASUL

USUARIOEMAIL.EMAILSTRINGlower(email(repres.e-mail))
USUARIOEMAIL.IDNPADRAOINTEGERFIXO 1
USUARIOEMAIL.IDUSUARIOBIGNUMBER(18,6)EMPRESA + '#' + code(mgadm.repres.cod-rep)
USUARIOEMAIL.CODIGOERPSTRING(80)EMPRESA + '#' + code(mgadm.repres.cod-rep) + '#' + lower(email(repres.e-mail))

TOTVS SFA

TIPO

DATASUL

USUARIOFILIAL.IDUSUARIOBIGNUMBER(18,6)EMPRESA + '#' + code(mgadm.repres.cod-rep)
USUARIOFILIAL.IDLOCALFILIALBIGNUMBER(18,6)local.idlocal (onde local.codigoerp like 'EMP#'%)  
USUARIOFILIAL.IDNPADRAOINTEGERFIXO 0
USUARIOFILIAL.CODIGOERPSTRINGlocal.codigoerp(onde local.codigoerp like 'EMP#'%)  +'#'+ code(mgadm.repres.cod-rep)


CFOP

Os dados da tabela cond-pagto do Datasul são acessados através do endpoint /dts/datasul-rest/resources/prg/cdp/v1/paymentTermsPublic e são salvos na tabela CFOP do TOTVS SFA com os seguintes campos:

TOTVS SFA

TIPO

DATASUL

CFOP.DESCRICAOSTRINGcode(cond-pagto.cod-cond-pag)
CFOP.DESCRICAOCLASSIFICASTRING

description(cond-pagto.descricao)

CFOP.CODIGOCOMPLEMENTOSTRINGtype
CFOP.IDNATIVOINTEGER

CASE 

WHEN actv = TRUE

THEN 1

ELSE 0

END

CFOP.CODIGOERPSTRINGEMPRESA + '#' + cfopCode


CLASSIFICAÇÃO FINANCEIRA TITULO

A entidade classificacaofintitulo do TOTVS SFA conta com valores fixos:

TOTVS SFA

TIPO

VALORES

CLASSIFICACAOFINTITULO.IDNATIVOINTEGER1; 1; 1; 1; 1; 1; 1; 1; 1

CLASSIFICACAOFINTITULO.DESCRICAO

STRING

'Normal'; 'Cancelado'; 'Protesto Solicitado'; 'Protesto Efetivo'; 'Falencia'; 'Concordata'; 'Incobrável'; 'Baixado'; 'Parcialmente Baixado'

CLASSIFICACAOFINTITULO.SGLCLASSIFICACAOSTRING'001'; '002'; '003'; '004'; '005'; '006'; '007'; '008'; '009'
CLASSIFICACAOFINTITULO.CODIGOERPSTRING'001'; '002'; '003'; '004'; '005'; '006'; '007'; '008'; '009'


CLASSIFICAÇÃO PARCEIRO

A entidade classificacaoparceiro do TOTVS SFA conta com valores fixos:

TOTVS SFA

TIPO

VALORES

CLASSIFICACAOPARCEIRO.IDNATIVO

INTEGER

1; 1; 1; 1

CLASSIFICACAOPARCEIRO.DESCRICAO

STRING

'PESSOA FÍSICA'; 'PESSOA JURÍDICA'; 'ESTRANGEIRO'; 'TRADING'

CLASSIFICACAOPARCEIRO.ORDEMINTEGER0; 1; 2; 3
CLASSIFICACAOPARCEIRO.CODIGOERPSTRING'PF'; 'PJ'; 'ES'; 'TR'


GRUPO PARCEIRO

Os dados da tabela mgadm.gr do Datasul são acessados através do /dts/datasul-rest/resources/prg/cdp/v1/customerGroupsPublic e são gravados na tabela grupoparceiro do SFA com os seguintes campos.

TOTVS SFA

TIPO

DATASUL

GRUPOPARCEIRO.DESCRICAOSTRINGdescription(mgadm.gr-cli.descricao)
GRUPOPARCEIRO.SGLGRUPOPARCEIROSTRINGFIXO 'PARCEIRO'
GRUPOPARCEIRO.IDNATIVOINTEGERFIXO 1
GRUPOPARCEIRO.CODIGOERPSTRINGEMPRESA + '#' + code(mgadm.gr-cli.cod-gr-cli)


LINHA 

Os dados da tabela familia do Datasul são acessados através do /dts/datasul-rest/resources/prg/cep/v1/materialFamiliesPublic e são gravados na tabela linha do SFA com os seguintes campos.

TOTVS SFA

TIPO

DATASUL

LINHA.IDNATIVO

INTEGER

FIXO 1

LINHA.DESCRICAO

STRING

description(familia.descricao)

LINHA.CODIGOSTRINGcode(familia.fm-codigo)
LINHA.CODIGOERPSTRINGEMPRESA + '#' + code(familia.fm-codigo)


LOCAL IDENTIFICACAO

Os dados que serão salvos na tabela localidentificacao são retirados do próprio SFA utilizando a seguinte consulta:

SELECT
    p.idparceiro,
    p.idnexportadoerp,
    'cnpj' AS idTipoIdentificacao_,
    l.idlocal,
    pj.cnpjprincipal AS documentoIdentificacao,
    l.codigoerp AS codigoERPLocal
FROM
    parceiro p
INNER JOIN pessoajuridica pj ON
    p.idparceiro = pj.idpessoajuridica
    AND pj.cnpjprincipal IS NOT NULL
INNER JOIN parceirolocal pl ON
    pl.idparceiro = p.idparceiro
INNER JOIN LOCAL l ON
    l.idlocal = pl.idlocal
INNER JOIN LOCALTIPOLOCAL LTL ON LTL.IDLOCAL = L.IDLOCAL
INNER JOIN TIPOLOCAL TL ON TL.IDTIPOLOCAL = LTL.IDTIPOLOCAL
WHERE
    TL.SGLTIPOLOCAL <> 'ENT'
    AND L.CODIGOERP IS NOT NULL
UNION
SELECT
    p.idparceiro,
    p.idnexportadoerp,
    'cpf' AS idTipoIdentificacao_,
    l.idlocal,
    pf.cpf AS documentoIdentificacao,
    l.codigoerp AS codigoERPLocal
FROM
    parceiro p
INNER JOIN pessoafisica pf ON
    p.idparceiro = pf.idpessoafisica
    AND pf.cpf IS NOT NULL
INNER JOIN parceirolocal pl ON
    pl.idparceiro = p.idparceiro
INNER JOIN LOCAL l ON
    l.idlocal = pl.idlocal
WHERE
    l.codigoERP IS NOT null
UNION
SELECT
    p.idparceiro,
    p.idnexportadoerp,
    'inscricaoestadual' AS idTipoIdentificacao_,
    l.idlocal,
    l.inscricaoestadual AS documentoIdentificacao,
    l.codigoerp AS codigoERPLocal
FROM
    parceiro p
INNER JOIN parceirolocal pl ON
    pl.idparceiro = p.idparceiro
INNER JOIN LOCAL l ON
    l.idlocal = pl.idlocal
WHERE
    l.codigoERP IS NOT NULL
    AND l.inscricaoestadual IS NOT NULL
UNION
SELECT
    p.idparceiro,
    p.idnexportadoerp,
    'inscricaomunicipal' AS idTipoIdentificacao_,
    l.idlocal,
    l.inscricaomunicipal AS documentoIdentificacao,
    l.codigoerp AS codigoERPLocal
FROM
    parceiro p
INNER JOIN parceirolocal pl ON
    pl.idparceiro = p.idparceiro
INNER JOIN LOCAL l ON
    l.idlocal = pl.idlocal
WHERE
    l.codigoERP IS NOT NULL
    AND l.inscricaomunicipal IS NOT NULL 


OPERAÇÃO

A entidade operacao do TOTVS SFA conta com valores fixos:

TOTVS SFA

TIPO

VALORES

OPERACAO.IDNATIVOINTEGER1; 1; 1; 1; 1; 1

OPERACAO.DESCRICAO

STRING

'Desconto 1'; 'Desconto 2'; 'Desconto 3'; 'Desconto 4'; 'Desconto 5'; 'Desconto 6'

OPERACAO.SGLTIPOOPERACAOSTRING'DESCONTO'; 'DESCONTO'; 'DESCONTO'; 'DESCONTO'; 'DESCONTO'; 'DESCONTO'
OPERACAO.SGLOPERACAOSTRING'DESC1'; 'DESC2'; 'DESC3'; 'DESC4'; 'DESC5'; 'DESC6'
OPERACAO.CODIGOERPSTRING'DESC1'; 'DESC2'; 'DESC3'; 'DESC4'; 'DESC5'; 'DESC6'


PERFIL ACESSO

A entidade perfilacesso do TOTVS SFA conta com valores fixos:

TOTVS SFA

TIPO

VALORES

PERFILACESSO.IDNADMINISTRADORINTEGER0; 1

PERFILACESSO.IDNATIVO

INTEGER

1; 1

PERFILACESSO.SGLPERFILACESSOSTRING'PV'; 'PA'

PERFILACESSO.DESCRICAO

STRING

'VENDEDOR'; 'ADMINISTRADOR';

PERFILACESSO.IDNPONTOOBRIGATORIOINTEGER0; 0
PERFILACESSO.IDNPROMOTORINTEGER0; 0
PERFILACESSO.TIPOPONTOINTEGER0;
PERFILACESSO.SGLACAOSELECAOCLIENTESTRING'PAINEL'; 'PAINEL'
PERFILACESSO.CODIGOERPSTRING'XML#PV'; 'XML#PA'


PORTADOR

Os dados da tabela portador do Datasul são acessados através do endpoint /dts/datasul-rest/resources/prg/fin/v1/holderPublic e serão salvos na tabela parceiro do TOTVS SFA com os seguintes campos:

TOTVS SFA

TIPO

DATASUL

PARCEIRO.NOMEPARCEIROSTRINGshortName(portador.nom_abrev)
PARCEIRO.SGLTIPOPESSOASTRINGFIXO 'PJ'
PARCEIRO.IDNATIVOINTEGERFIXO 1
PARCEIRO.IDNCONTRIBUINTEINTEGERFIXO 0
PARCEIRO.DATAULTIMAATUALIZACAODATECURRENT_DATE
PARCEIRO.DATACADASTRODATECURRENT_DATE
PARCEIRO.OBSERVACAOSTRINGFIXO 'MODALIDADE'
PARCEIRO.IDNEXPORTADOERPINTEGERFIXO 1
PARCEIRO.CODIGOERPSTRING'POR#' + EMPRESA + holderCode(portador.cod_portador)


REGIÃO

Os dados da tabela mgadm.regiao do Datasul são acessados através do endpoint /dts/datasul-rest/resources/prg/cdp/v1/regionsPublic e serão salvos na tabela regiao e localregiao do TOTVS SFA com os seguintes campos:

TOTVS SFA

TIPO

DATASUL

REGIAO.DESCRICAO

STRING

name(mgadm.regiao.nome-regiao)

REGIAO.CODIGO

STRING

code(mgadm.regiao.nome-ab-reg)

REGIAO.AREAABRANGENCIA

STRING

localization(mgadm.regiao.localizacao)

REGIAO.IDNATIVOINTEGERFIXO 1
REGIAO.CODIGOERPSTRINGEMPRESA + '#' + code(mgadm.regiao.nome-ab-reg)

TOTVS SFA

TIPO

DATASUL

LOCALREGIAO.IDREGIAO

INTEGER

EMPRESA + '#' + code(mgadm.regiao.nome-ab-reg)

LOCALREGIAO.IDLOCALFILIAL

INTEGER

local.idlocal(onde local.numeroMatricula = establishment (mgadm.regiao.cod-estabel) e local.codigoerp like 'EMP#'%)  

LOCALREGIAO.IDLOCAL

INTEGER

local.idlocal(onde local.numeroMatricula = establishment (mgadm.regiao.cod-estabel) e local.codigoerp like 'EMP#'%)  

LOCALREGIAO.CODIGOERPSTRINGEMPRESA + '#' + code(mgadm.regiao.nome-ab-reg) + '#' + local.codigoErp


TIPO DOCUMENTO

Os dados da tabela espec_docto do Datasul são acessados através do /dts/datasul-rest/resources/prg/fin/v1/documentTypePublic e são gravados na tabela tipodocumento do SFA com os seguintes campos.

TOTVS SFA

TIPO

DATASUL

TIPODOCUMENTO.OBSERVACAOOBTENCAOSTRINGdocumentType (-)
TIPODOCUMENTO.DESCRICAOSTRINGdescription(espec_docto.des_espec_docto)
TIPODOCUMENTO.OBSERVACAOSTRINGdocumentTypeDescription(espec_docto.ind_tip_espec_docto)
TIPODOCUMENTO.CODIGOERPSTRINGEMPRESA + '#' + code(espec_docto.cod_espec_docto)
TIPODOCUMENTO.SGLTIPODOCUMENTOSTRINGFIXO 'FINANCEIRO'

TIPODOCUMENTO.IDNATIVO

INTEGER

FIXO 1


TIPO EMAIL

A entidade tipoemail do TOTVS SFA conta com valores fixos:

TOTVS SFA

TIPO

VALORES

TIPOEMAIL.DESCRICAOSTRING'PRINCIPAL'; 'NFe'
TIPOEMAIL.CODIGOSTRING'PRI'; 'NFE'
TIPOEMAIL.IDNATIVOINTEGER1; 1

TIPOEMAIL.IDNPADRAO

INTEGER

1; 0

TIPOEMAIL.IDNDISPONIVELCADASTROINTEGER1; 1
TIPOEMAIL.IDNEXPORTADOERPINTEGER1; 1
TIPOEMAIL.CODIGOERPSTRINGPRI'; 'NFE'


TIPO ESTOQUE

A entidade tipoestoque do TOTVS SFA conta com valores fixos:

TOTVS SFA

TIPO

VALORES

TIPOESTOQUE.DESCRICAO

STRING

'ESTOQUE DISPONIVEL'

TIPOESTOQUE.SGLTIPOESTOQUE

STRING

'EDI'

TIPOESTOQUE.IDNATIVOINTEGER1
TIPOESTOQUE.IDNDISPONIVELPARAPEDIDOINTEGER1
TIPOESTOQUE.ORDEMINTEGER1
TIPOESTOQUE.CODIGOERPSTRING'EDI'


TIPOLOGIA

Os dados da tabela tipologia do Datasul são acessados através do endpoint /dts/datasul-rest/resources/prg/cdp/v1/salesChannelPublic e são gravados com os seguintes campos.

TOTVS SFA

TIPO

DATASUL

TIPOLOGIA.CODIGOCANALVENDA

INTEGER

salesChannelCode(canal-venda.cod-canal-venda)

TIPOLOGIA.DESCRICAO

STRING

salesChannelDesc(canal-venda.descricao)

TIPOLOGIA.CODIGOERPSTRINGEMPRESA + '#' + salesChannelCode(canal-venda.cod-canal-venda)
TIPOLOGIA.IDNREQUERBANCOINTEGERFixo 0
TIPOLOGIA.IDNDISPPRIMEIROPEDIDOINTEGERFixo 1
TIPOLOGIA.IDNREEMBOLSAVELINTEGERFixo 1
TIPOLOGIA.IDNVALIDAVALORLIMITEINTEGERFixo 1
TIPOLOGIA.IDNPERMITEALTERARREEMBOLSOINTEGERFixo 1
TIPOLOGIA.IDNPADRAOINTEGERFixo 0
TIPOLOGIA.IDNATIVOINTEGERFixo 1


TIPO PEDIDO

A entidade tipopedido do TOTVS SFA conta com valores fixos:

TOTVS SFA

TIPO

VALORES

TIPOPEDIDO.IDNATIVOINTEGER1

TIPOPEDIDO.DESCRICAO

STRING

'PEDIDO DE VENDA'

TIPOPEDIDO.IDNDISPONIVELPARAPEDIDO

INTEGER

1

TIPOPEDIDO.IDNCONSOMEFLEXINTEGRALINTEGER0
TIPOPEDIDO.SGLTIPOPEDIDOSTRING'TPV'
TIPOPEDIDO.IDNPADRAOINTEGER1
TIPOPEDIDO.IDNASSINATURAOBRIGATORIAINTEGER0
TIPOPEDIDO.IDNMOVIMENTAFLEXINTEGER0
TIPOPEDIDO.CODIGOSTRING'TPV'
TIPOPEDIDO.CODIGOERPSTRING'TPV'


TIPO PRODUTO

A entidade tipoproduto do TOTVS SFA conta com valores fixos:

TOTVS SFA

TIPO

VALORES

TIPOPRODUTO.IDNATIVOINTEGER1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1

TIPOPRODUTO.DESCRICAO

STRING

'ATIVO IMBOLIZADO'; 'BENEFICIAMENTO'; 'EMBALAGEM'; 'GARANTIA ESTENDIDA';  'GASTOS GERAIS'; 'GENERICO';  'INSUMO AGRICOLA'; 'INSUMOS INDUSTRIAIS';  'PRODUTOS INDUSTRIAIS';  'KIT'; 'KIT'; 'MERCADORIA'; 'MATERIAIS MANFRO'; 'MAO DE OBRA'; 'MATERIA PRIMA'; 'OUTROS INSUMOS'; 'PRODUTO ACABADO';  'PRODUTO INTERMEDIARIO'; 'PRODUTO EM PROCESSO'; 'PRODUTO VEINCULO'; 'SELO DE CONTROLE'; 'SUBPRODUTO'; 'SERVICO'

TIPOPRODUTO.SGLTIPOPRODUTOSTRING'AI', 'BN'; 'EM'; 'GE'; 'GG'; 'GN'; 'IA'; 'II'; 'IN'; 'KT'; 'MC'; 'ME'; 'MM'; ''MO'; 'MP'; 'OI'; 'PA'; 'PI'; 'PP'; 'PV'; 'SL'; 'SP'; 'SV'
TIPOPRODUTO.CODIGOERPSTRING'AI', 'BN'; 'EM'; 'GE'; 'GG'; 'GN'; 'IA'; 'II'; 'IN'; 'KT'; 'MC'; 'ME'; 'MM'; ''MO'; 'MP'; 'OI'; 'PA'; 'PI'; 'PP'; 'PV'; 'SL'; 'SP'; 'SV'


TIPO SITUACAÇÃO PEDIDO PRODUTO

A entidade tipositpedidoproduto do TOTVS SFA conta com valores fixos:

TOTVS SFA

TIPO

VALORES

TIPOSITPEDIDOPRODUTO.IDNATIVOINTEGER1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1

TIPOSITPEDIDOPRODUTO.DESCRICAO

STRING

'NAO FINALIZADO'; 'ABERTO'; 'ATENDIDO PARCIAL', 'ATENDIDO TOTAL'; 'PENDENTE'; 'SUSPENSO'; 'CANCELADO';'FATUR BALCAO'; 'PRODUTO REMOVIDO'; 'ITEM DELETADO'; 'CANCELADO'; 'NORMAL'; 'PENDENTE'

TIPOSITPEDIDOPRODUTO.SGLTIPOSITPEDIDOPRODUTOSTRING'NF'; 'PA'; 'FP'; 'PF'; 'PP'; 'PS'; 'PC'; 'FB'; 'PR'; 'ITCAN'; 'ITCANPROT'; 'ITNOR'; 'ITPEN'
TIPOSITPEDIDOPRODUTO.IDNPERMITEEDITARINTEGER0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0
TIPOSITPEDIDOPRODUTO.CODIGOERPSTRING'NF'; '1'; '2'; '3'; '4'; '5'; '6'; '7'; 'PR'; 'ITCAN'; 'ITCANPROT'; 'ITNOR'; 'ITPEN'


TIPO SITUAÇÃO CADASTRO

A entidade tiposituacaocadastro do TOTVS SFA conta com valores fixos:

TOTVS SFA

TIPO

VALORES

TIPOSITUACAOCADASTRO.IDNATIVOINTEGER1; 1; 1; 1; 1
TIPOSITUACAOCADASTRO.IDNPADRAOINTEGER1; 0; 0; 0; 0

TIPOSITUACAOCADASTRO.DESCRICAO

STRING

'NOVO'; 'REGULAR'; 'REPROVADO'; 'ATUALIZAÇÃO NEGADA'; 'ATUALIZAÇÃO'

TIPOSITUACAOCADASTRO.SGLTIPOSITUACAOCADASTROSTRING'NOV'; 'REG'; 'REP'; 'ATUNEG'; 'ATU'
TIPOSITUACAOCADASTRO.CODIGOERPSTRING'NOV'; 'REG'; 'REP'; 'ATUNEG'; 'ATU'


TIPO TELEFONE

A entidade tipotelefone do TOTVS SFA conta com valores fixos:

TOTVS SFA

TIPO

VALORES

TIPOTELEFONE.DESCRICAOSTRING'PRINCIPAL'; 'TELEFONE 2'; 'TELEX'; 'FAX'
TIPOTELEFONE.CODIGOSTRING'TEL1'; 'TEL2'; 'LEX'; 'FAX'
TIPOTELEFONE.IDNATIVOINTEGER1; 1; 1; 1

TIPOTELEFONE.IDNPADRAO

INTEGER

1; 0; 0; 0

TIPOTELEFONE.IDNDISPONIVELCADASTROINTEGER1; 1; 1; 1
TIPOTELEFONE.IDNEXPORTADOERPINTEGER1; 1; 1; 1
TIPOTELEFONE.CODIGOERPSTRING'TEL1'; 'TEL2'; 'LEX'; 'FAX'


TRANSAÇÃO FISCAL

Os dados da tabela cond-pagto do Datasul são acessados através do endpoint /dts/datasul-rest/resources/prg/cdp/v1/paymentTermsPublic e são salvos na tabela TransacaoFiscal do TOTVS SFA com os seguintes campos:

TOTVS SFA

TIPO

DATASUL

TRANSACAOFISCAL.DESCRICAOSTRINGdescription(cond-pagto.descricao)
TRANSACAOFISCAL.SGLOPERACAOSTRING

CASE 

WHEN type = '1'

THEN 'S'

ELSE 'A'

END

TRANSACAOFISCAL.CODIGOSTRINGcode(natur-oper.nat-operacao)
TRANSACAOFISCAL.IDTIPONOTAFISCALINTEGER

EMPRESA + '#' + code(natur-oper.nat-operacao)

TRANSACAOFISCAL.IDCFOPINTEGEREMPRESA + '#' + cfopCode
TRANSACAOFISCAL.CODIGOERPSTRINGEMPRESA + '#' + code(natur-oper.nat-operacao) + '#' + cfopCode

3 EXPORTAÇÃO DE DADOS

Assim como na importação, o layout de exportação de pedidos e clientes é o mesmo (envio/retorno). Abaixo trataremos da exportação de clientes e pedidos.


CLIENTES

A exportação de clientes consiste em:

  • 1 endereço principal (TIPOLOCAL = PRI);
  • 1 endereço de cobrança (TIPOLOCAL = COB);
  • N endereços de entrega (TIPOLOCAL = COB).


Utilizando os seguintes filtros para exportar clientes novos:

  • Situação do cadastro igual à novo (TIPOSITUACAOCADASTRO.SGLTIPOSITUACAOCADASTRO = ‘NOV’);
  • Parceiros com filtro de não exportado (PARCEIRO.IDNEXPORTADOERP = 0).
  • Parceiros sem codigoERP (PARCEIRO.CODIGOERP IS NULL)


Ou esses filtros caso se trate de uma atualização do cliente:

  • Situação do cadastro igual à atualização (TIPOSITUACAOCADASTRO.SGLTIPOSITUACAOCADASTRO = ‘ATU’);
  • Parceiros ou Locais com filtro de não exportado (PARCEIRO.IDNEXPORTADOERP = 0 OR P.IDPARCEIRO IN (SELECT IDPARCEIRO FROM PARCEIROLOCAL WHERE IDLOCAL IN (SELECT IDLOCAL FROM LOCAL WHERE IDNEXPORTADOERP = 0)))).
  • Parceiros com codigoERP (PARCEIRO.CODIGOERP IS NOT NULL)


Considerações importantes:

  • Caso o cliente não exporte devido à alguma validação do Datasul ou erro da API, o mesmo será reaberto (SGLTIPOSITUACAOCADASTRO = ‘REP’) e uma mensagem será enviada para o usuário cadastrante (PARCEIRO.IDUSUARIOGERADOR);
  • Ao ser reaberto, o mesmo deverá ser analisado e novamente gravado para novo.


Abaixo segue o DE/PARA dos campos:

TAG

TOTVS SFA

DATASUL

ENDEREÇO PRINCIPAL E COBRANCA

activityBranch

''

mgadm.emitente.atividade

additionalCredit

0

mgadm.emitente.lim-adicional

address

coalesce(( select     l.logradouro from     local L inner join PARCEIROLOCAL PL on     L.IDLOCAL = PL.IDLOCAL inner join LOCALTIPOLOCAL LTL on     L.IDLOCAL = LTL.IDLOCAL inner join TIPOLOCAL TL on     TL.IDTIPOLOCAL = LTL.IDTIPOLOCAL     and TL.SGLTIPOLOCAL = 'PRI' inner join CIDADE C on     C.IDCIDADE = L.IDCIDADE where     PL.idparceiro = PARCEIRO.IDPARCEIRO limit 1),'')

mgadm.emitente.endereco

bank

0

mgadm.emitente.cod-banco

bankBranch

''

mgadm.emitente.agencia

billingAddress

coalesce((select     l.logradouro  from     local L inner join PARCEIROLOCAL PL on     L.IDLOCAL = PL.IDLOCAL inner join LOCALTIPOLOCAL LTL on     L.IDLOCAL = LTL.IDLOCAL inner join TIPOLOCAL TL on     TL.IDTIPOLOCAL = LTL.IDTIPOLOCAL     and TL.SGLTIPOLOCAL = 'COB' inner join CIDADE C on     C.IDCIDADE = L.IDCIDADE where     PL.idparceiro = PARCEIRO.IDPARCEIRO limit 1),'')

mgadm.emitente.endereco-cob

billingCity

COALESCE((SELECT DISTINCT C.DESCRICAO FROM LOCAL L INNER JOIN PARCEIROLOCAL PL ON L.IDLOCAL = PL.IDLOCAL INNER JOIN LOCALTIPOLOCAL LTL ON L.IDLOCAL = LTL.IDLOCAL INNER JOIN TIPOLOCAL TL ON TL.IDTIPOLOCAL = LTL.IDTIPOLOCAL AND TL.SGLTIPOLOCAL = 'COB' INNER JOIN CIDADE C ON C.IDCIDADE = L.IDCIDADE WHERE PL.IDPARCEIRO = PARCEIRO.IDPARCEIRO LIMIT 1  ),'') AS "billingCity",

mgadm.emitente.cidade-cob

billingCompleteAddress

''

mgadm.emitente.endereco-cob-text

billingCountry

COALESCE(case when (SELECT 1 FROM LOCAL L INNER JOIN PARCEIROLOCAL PL ON L.IDLOCAL = PL.IDLOCAL INNER JOIN LOCALTIPOLOCAL LTL ON L.IDLOCAL = LTL.IDLOCAL INNER JOIN TIPOLOCAL TL ON TL.IDTIPOLOCAL = LTL.IDTIPOLOCAL AND TL.SGLTIPOLOCAL = 'COB' WHERE PL.IDPARCEIRO = PARCEIRO.IDPARCEIRO LIMIT 1  ) is not null then 'Brasil' else null end,'')

mgadm.emitente.pais-cob

billingNeighborhood

COALESCE((SELECT DISTINCT SUBSTR(COALESCE(L.BAIRRO,''),1,30) FROM LOCAL L INNER JOIN PARCEIROLOCAL PL ON L.IDLOCAL = PL.IDLOCAL INNER JOIN LOCALTIPOLOCAL LTL ON L.IDLOCAL = LTL.IDLOCAL INNER JOIN TIPOLOCAL TL ON TL.IDTIPOLOCAL = LTL.IDTIPOLOCAL AND TL.SGLTIPOLOCAL = 'COB' WHERE PL.IDPARCEIRO = PARCEIRO.IDPARCEIRO LIMIT 1  ),'')

mgadm.emitente.bairro-cob

billingPersonalId

COALESCE(case when (SELECT 1 FROM LOCAL L INNER JOIN PARCEIROLOCAL PL ON L.IDLOCAL = PL.IDLOCAL INNER JOIN LOCALTIPOLOCAL LTL ON L.IDLOCAL = LTL.IDLOCAL INNER JOIN TIPOLOCAL TL ON TL.IDTIPOLOCAL = LTL.IDTIPOLOCAL AND TL.SGLTIPOLOCAL = 'COB' WHERE PL.IDPARCEIRO = PARCEIRO.IDPARCEIRO LIMIT 1  ) is not null then coalesce( PF.documentoidentificacao, PJ.documentoidentificacao ) else null end,'')

mgadm.emitente.cgc-cob

billingState

COALESCE((SELECT DISTINCT SUBSTR(UF.SIGLA,1,2) FROM LOCAL L INNER JOIN PARCEIROLOCAL PL ON L.IDLOCAL = PL.IDLOCAL INNER JOIN LOCALTIPOLOCAL LTL ON L.IDLOCAL = LTL.IDLOCAL INNER JOIN TIPOLOCAL TL ON TL.IDTIPOLOCAL = LTL.IDTIPOLOCAL AND TL.SGLTIPOLOCAL = 'COB' INNER JOIN CIDADE C ON C.IDCIDADE = L.IDCIDADE INNER JOIN UNIDADEFEDERATIVA UF ON C.IDUNIDADEFEDERATIVA = UF.IDUNIDADEFEDERATIVA WHERE PL.IDPARCEIRO = PARCEIRO.IDPARCEIRO LIMIT 1  ),'')

mgadm.emitente.estado-cob

billingZipCode

COALESCE((SELECT DISTINCT SUBSTR(L.CEP,1,12) FROM LOCAL L INNER JOIN PARCEIROLOCAL PL ON L.IDLOCAL = PL.IDLOCAL INNER JOIN LOCALTIPOLOCAL LTL ON L.IDLOCAL = LTL.IDLOCAL INNER JOIN TIPOLOCAL TL ON TL.IDTIPOLOCAL = LTL.IDTIPOLOCAL AND TL.SGLTIPOLOCAL = 'COB' WHERE PL.IDPARCEIRO = PARCEIRO.IDPARCEIRO LIMIT 1  ),'')

mgadm.emitente.cep-cob

birthdate

COALESCE(CASE WHEN PESSOAFISICA.ANONASCIMENTO IS null or PESSOAFISICA.ANONASCIMENTO = 0 THEN NULL ELSE CAST(PESSOAFISICA.ANONASCIMENTO AS VARCHAR(4)) ||'-'|| CAST(PESSOAFISICA.MESNASCIMENTO AS VARCHAR(2)) ||'-'||CAST(PESSOAFISICA.DIANASCIMENTO AS VARCHAR(2)) END,'')

mgadm.emitente.dat-nasc

category

''

mgadm.emitente.categoria

checkingAccount

''

mgadm.emitente.conta-corren

city

(SELECT DISTINCT C.DESCRICAO FROM LOCAL L INNER JOIN PARCEIROLOCAL PL ON L.IDLOCAL = PL.IDLOCAL INNER JOIN LOCALTIPOLOCAL LTL ON L.IDLOCAL = LTL.IDLOCAL INNER JOIN TIPOLOCAL TL ON TL.IDTIPOLOCAL = LTL.IDTIPOLOCAL AND TL.SGLTIPOLOCAL = 'PRI' INNER JOIN CIDADE C ON C.IDCIDADE = L.IDCIDADE WHERE PL.IDPARCEIRO = PARCEIRO.IDPARCEIRO LIMIT 1  )

mgadm.emitente.cidade

comments

COALESCE(PARCEIRO.OBSERVACAO,'') 

mgadm.emitente.observacoes

completeAddress

''

mgadm.emitente.endereco_text

country

'Brasil'

mgadm.emitente.pais

credit

1

mgadm.emitente.ind-cre-cli

creditLimit

0

mgadm.emitente.lim-credito

creditLimitCurrency

0

mgadm.emitente.moeda-libcre

creditLimitDate

''

mgadm.emitente.dt-lim-cred

creditLimitEnd

''

mgadm.emitente.dt-fim-cred

customerClassification

0

mgadm.emitente.cod-classif-cliente

customerCode

NULL

mgadm.emitente.cod-emitente

customerGroup

COALESCE((select cast(split_part(GP.CODIGOERP,'#',2) as INT) from parceirogrupoparceiro PGP inner join GRUPOPARCEIRO GP on GP.idgrupoparceiro = PGP.idgrupoparceiro where PGP.idparceiro = PARCEIRO.idparceiro limit 1),0)

mgadm.emitente.cod-gr-cli

customerName

COALESCE(upper(SUBSTR(PARCEIRO.NOMEPARCEIRO, 1, 80)), '')

mgadm.emitente.nome-emit

defaultHolder

0

mgadm.emitente.port-prefer

defaultModality

0

mgadm.emitente.mod-prefer

deliveryCode

''

mgadm.emitente.cod-entrega

email

COALESCE(P.EMAIL, (SELECT DISTINCT LOWER(LE.EMAIL) FROM LOCAL L INNER JOIN PARCEIROLOCAL PL ON L.IDLOCAL = PL.IDLOCAL INNER JOIN LOCALTIPOLOCAL LTL ON L.IDLOCAL = LTL.IDLOCAL INNER JOIN TIPOLOCAL TL ON TL.IDTIPOLOCAL = LTL.IDTIPOLOCAL AND TL.SGLTIPOLOCAL = 'PRI' INNER JOIN LOCALEMAIL LE ON LE.IDLOCAL = L.IDLOCAL INNER JOIN TIPOEMAIL TE ON TE.IDTIPOEMAIL = LE.IDTIPOEMAIL AND TE.CODIGO = 'PRI' WHERE PL.IDPARCEIRO = PARCEIRO.IDPARCEIRO LIMIT 1  ),'')

mgadm.emitente.e-mail

entityType

CASE WHEN PARCEIRO.SGLTIPOPESSOA= 'PF' THEN 1 ELSE 2 END

mgadm.emitente.natureza

extension1

''

mgadm.emitente.ramal[1]

extension2

''

mgadm.emitente.ramal[2]

holder

0

mgadm.emitente.portador

homePage

COALESCE(SUBSTR(PARCEIRO.HOMEPAGE,1,40),'') 

mgadm.emitente.home-page

ICMSTaxpayer

CASE WHEN PARCEIRO.IDNCONTRIBUINTE = 1 THEN 'true' ELSE 'false' END

mgadm.emitente.contrib-icms

implementationDate

to_char(PARCEIRO.datacadastro, 'YYYY-MM-DD')

mgadm.emitente.data-implant

interstateTransactionType

''

mgadm.emitente.nat-ope-ext

lastSale

''

mgadm.emitente.dt-ult-venda

modality

COALESCE((SELECT DISTINCT CAST(TC.CODIGO AS INT) FROM LOCAL L INNER JOIN PARCEIROLOCAL PL ON L.IDLOCAL = PL.IDLOCAL INNER JOIN LOCALTIPOLOCAL LTL ON L.IDLOCAL = LTL.IDLOCAL INNER JOIN TIPOLOCAL TL ON TL.IDTIPOLOCAL = LTL.IDTIPOLOCAL AND TL.SGLTIPOLOCAL = 'PRI' INNER JOIN LOCALTIPOCOBRANCA LTC ON LTC.IDLOCAL = L.IDLOCAL INNER JOIN TIPOCOBRANCA TC ON TC.IDTIPOCOBRANCA = LTC.IDTIPOCOBRANCA WHERE PL.IDPARCEIRO = Parceiro.IDPARCEIRO LIMIT 1 ),1)

mgadm.emitente.modalidade

monthsInactive

0

mgadm.emitente.nr-mesina

municipalRegistration

COALESCE((SELECT DISTINCT SUBSTR(li.DOCUMENTOIDENTIFICACAO,1,19) FROM LOCAL L INNER JOIN PARCEIROLOCAL PL ON L.IDLOCAL = PL.IDLOCAL INNER JOIN LOCALTIPOLOCAL LTL ON L.IDLOCAL = LTL.IDLOCAL INNER JOIN TIPOLOCAL TL ON TL.IDTIPOLOCAL = LTL.IDTIPOLOCAL AND TL.SGLTIPOLOCAL = 'PRI' INNER JOIN LOCALIDENTIFICACAO LI ON LI.IDLOCAL = L.IDLOCAL INNER JOIN TIPOIDENTIFICACAO TI ON TI.IDTIPOIDENTIFICACAO = LI.IDTIPOIDENTIFICACAO AND TI.SIGLA = 'inscricaomunicipal' WHERE PL.IDPARCEIRO = PARCEIRO.IDPARCEIRO LIMIT 1  ),'ISENTO')

mgadm.emitente.ins-municipal

neighborhood

Lo(SELECT DISTINCT SUBSTR(L.BAIRRO,1,30) FROM LOCAL L INNER JOIN PARCEIROLOCAL PL ON L.IDLOCAL = PL.IDLOCAL INNER JOIN LOCALTIPOLOCAL LTL ON L.IDLOCAL = LTL.IDLOCAL INNER JOIN TIPOLOCAL TL ON TL.IDTIPOLOCAL = LTL.IDTIPOLOCAL AND TL.SGLTIPOLOCAL = 'PRI' WHERE PL.IDPARCEIRO = PARCEIRO.IDPARCEIRO LIMIT 1 )

mgadm.emitente.bairro

NFeEmail

''

mgadm.emitente.cod-email-nfe

parentName

(select cr.resposta from camporesposta cr inner join campo c on c.idcampo = cr.idcampo and c.chave = 'nomeabrev' where cr.idparceiro = p.idparceiro limit 1)

mgadm.emitente.nome-matriz

partialInvoicing

'true'

mgadm.emitente.ind-fat-par

paymentTerms

COALESCE((SELECT DISTINCT cast(C.CODIGO AS INT) FROM LOCAL L INNER JOIN PARCEIROLOCAL PL ON L.IDLOCAL = PL.IDLOCAL INNER JOIN LOCALTIPOLOCAL LTL ON L.IDLOCAL = LTL.IDLOCAL INNER JOIN TIPOLOCAL TL ON TL.IDTIPOLOCAL = LTL.IDTIPOLOCAL AND TL.SGLTIPOLOCAL = 'PRI' INNER JOIN LOCALCONDICAOPAGAMENTO LC ON LC.IDLOCAL = L.IDLOCAL INNER JOIN CONDICAOPAGAMENTO C ON C.IDCONDICAOPAGAMENTO = LC.IDCONDICAOPAGAMENTO WHERE PL.IDPARCEIRO = PARCEIRO.IDPARCEIRO LIMIT 1 ),0)

mgadm.emitente.cod-cond-pag

personalId

COALESCE(coalesce( PESSOAFISICA.documentoidentificacao, PESSOAJURIFICA.documentoidentificacao ),'')

mgadm.emitente.cgc

phone1

COALESCE((SELECT DISTINCT LT.TELEFONE FROM LOCAL L INNER JOIN PARCEIROLOCAL PL ON L.IDLOCAL = PL.IDLOCAL INNER JOIN LOCALTIPOLOCAL LTL ON L.IDLOCAL = LTL.IDLOCAL INNER JOIN TIPOLOCAL TL ON TL.IDTIPOLOCAL = LTL.IDTIPOLOCAL AND TL.SGLTIPOLOCAL = 'PRI' INNER JOIN LOCALTELEFONE LT ON LT.IDLOCAL = L.IDLOCAL  WHERE PL.IDPARCEIRO = PARCEIRO.IDPARCEIRO LIMIT 1  ),'')

mgadm.emitente.telefone[1]

phone2

''

mgadm.emitente.telefone[2]

priceTable

COALESCE((SELECT DISTINCT TB.CODIGO FROM LOCAL L INNER JOIN PARCEIROLOCAL PL ON L.IDLOCAL = PL.IDLOCAL INNER JOIN LOCALTIPOLOCAL LTL ON L.IDLOCAL = LTL.IDLOCAL INNER JOIN TIPOLOCAL TL ON TL.IDTIPOLOCAL = LTL.IDTIPOLOCAL AND TL.SGLTIPOLOCAL = 'PRI' INNER JOIN LOCALTABELAPRECO LTB ON LTB.IDLOCAL = L.IDLOCAL INNER JOIN TABELAPRECO TB ON TB.IDTABELAPRECO = LTB.IDTABELAPRECO WHERE PL.IDPARCEIRO = PARCEIRO.IDPARCEIRO LIMIT 1  ),'')

mgadm.emitente.nr-tabpre

productLine

''

mgadm.emitente.linha-produt

registrationINSS

''

mgadm.emitente.cod-inscr-inss

representativeCode

coalesce(cast(split_part(U.CODIGOERP,'#',2) as int), (select distinct cast(split_part(U2.CODIGOERP,'#',2) as int) from USUARIO U2 inner join USUARIOLOCAL UL2 on UL2.idusuario = U2.idusuario where parceiro.idparceiro = ul2.idparceiro and ul2.codigoerp is not null limit 1))

mgadm.emitente.cod-rep

salesChannel

COALESCE((SELECT DISTINCT CAST(T.CODIGO AS INT) FROM LOCAL L INNER JOIN PARCEIROLOCAL PL ON L.IDLOCAL = PL.IDLOCAL INNER JOIN LOCALTIPOLOCAL LTL ON L.IDLOCAL = LTL.IDLOCAL INNER JOIN TIPOLOCAL TL ON TL.IDTIPOLOCAL = LTL.IDTIPOLOCAL AND TL.SGLTIPOLOCAL = 'PRI' INNER JOIN LOCALTIPOLOGIA LTI ON LTI.IDLOCAL = L.IDLOCAL INNER JOIN TIPOLOGIA T ON T.IDTIPOLOGIA = LTI.IDTIPOLOGIA WHERE PL.IDPARCEIRO = PARCEIRO.IDPARCEIRO LIMIT 1  ),0)

mgadm.emitente.cod-canal-venda

shortName

(select cr.resposta from camporesposta cr inner join campo c on c.idcampo = cr.idcampo and c.chave = 'nomeabrev' where cr.idparceiro = parceiro.idparceiro limit 1)

mgadm.emitente.nome-abrev

shortRegion

''

mgadm.emitente.nome-mic-reg

standardCarrierCode

99999

mgadm.emitente.cod-transp

state

COALESCE((SELECT DISTINCT UF.SIGLA FROM LOCAL L INNER JOIN PARCEIROLOCAL PL ON L.IDLOCAL = PL.IDLOCAL INNER JOIN LOCALTIPOLOCAL LTL ON L.IDLOCAL = LTL.IDLOCAL INNER JOIN TIPOLOCAL TL ON TL.IDTIPOLOCAL = LTL.IDTIPOLOCAL AND TL.SGLTIPOLOCAL = 'PRI' INNER JOIN CIDADE C ON C.IDCIDADE = L.IDCIDADE INNER JOIN UNIDADEFEDERATIVA UF ON C.IDUNIDADEFEDERATIVA = UF.IDUNIDADEFEDERATIVA WHERE PL.IDPARCEIRO = PARCEIRO.IDPARCEIRO LIMIT 1  ),'')

mgadm.emitente.estado

stateRegistration

COALESCE((SELECT DISTINCT SUBSTR(li.DOCUMENTOIDENTIFICACAO,1,19) FROM LOCAL L INNER JOIN PARCEIROLOCAL PL ON L.IDLOCAL = PL.IDLOCAL INNER JOIN LOCALTIPOLOCAL LTL ON L.IDLOCAL = LTL.IDLOCAL INNER JOIN TIPOLOCAL TL ON TL.IDTIPOLOCAL = LTL.IDTIPOLOCAL AND TL.SGLTIPOLOCAL = 'PRI' INNER JOIN LOCALIDENTIFICACAO LI ON LI.IDLOCAL = L.IDLOCAL INNER JOIN TIPOIDENTIFICACAO TI ON TI.IDTIPOIDENTIFICACAO = LI.IDTIPOIDENTIFICACAO AND TI.SIGLA = 'inscricaoestadual' WHERE PL.IDPARCEIRO = PARCEIRO.IDPARCEIRO LIMIT 1  ),'ISENTO')

mgadm.emitente.ins-estadual

supplierGroup

99

mgadm.emitente.cod-gr-forn

tradeName

COALESCE(COALESCE(PARCEIRO.NOMEPARCEIROFANTASIA, PARCEIRO.NOMEPARCEIRO),'')

mgadm.emitente.nom-fantasia

transactionType

''

mgadm.emitente.nat-operacao

type

1

mgadm.emitente.identific

updateDate

to_char(parceiro.dataultimaatualizacao, 'YYYY-MM-DD')

mgadm.emitente.dt-atualiza

updateTime

TO_CHAR(CURRENT_DATE,'HH:MM')

mgadm.emitente.hra-atualiz

zipCode

COALESCE((SELECT DISTINCT SUBSTR(L.CEP,1,12) FROM LOCAL L INNER JOIN PARCEIROLOCAL PL ON L.IDLOCAL = PL.IDLOCAL INNER JOIN LOCALTIPOLOCAL LTL ON L.IDLOCAL = LTL.IDLOCAL INNER JOIN TIPOLOCAL TL ON TL.IDTIPOLOCAL = LTL.IDTIPOLOCAL AND TL.SGLTIPOLOCAL = 'PRI' WHERE PL.IDPARCEIRO = PARCEIRO.IDPARCEIRO LIMIT 1  ),'')

mgadm.emitente.cep

telefax

''

mgadm.emitente.telefax

telex

''

mgadm.emitente.telex

lastUpdate

to_char(parceiro.dataultimaatualizacao, 'YYYY-MM-DD')

mgadm.emitente-log.dtm-alter

ENDEREÇO DE ENTREGA (deliveryPlaces)

deliveryCode

coalesce(SPLIT_PART(LOCAL.codigoerp,'#',5),CAST(LOCAL.IDLOCAL as VARCHAR)) 

mgadm.loc-entr.cod-entrega

address

COALESCE(local.logradouro,'')

mgadm.loc-entr.endereco

mailBox

COALESCE((select le.email from localemail le where le.idlocal = local.idlocal limit 1),'')

mgadm.loc-entr.caixa-postal

zipCode

COALESCE(local.cep,'') 

mgadm.loc-entr.cep

state

COALESCE(unidadefederativa.sigla,'')

mgadm.loc-entr.estado

neighborhood

COALESCE(local.bairro,'')

mgadm.loc-entr.bairro

shortName

(select cr.resposta from camporesposta cr inner join campo c on c.idcampo = cr.idcampo and c.chave = 'nomeabrev' where cr.idparceiro = parceiro.idparceiro limit 1)

mgadm.loc-entr.nome-abrev

country

'Brasil'

mgadm.loc-entr.pais

completeAddress

''

mgadm.loc-entr.endereco_text

city

COALESCE(cidade.descricao,'')

mgadm.loc-entr.cidade

personalId

COALESCE(coalesce(pessoafisica.documentoidentificacao, pessoajuridica.documentoidentificacao ),'')

mgadm.emitente.cgc

stateRegistration

COALESCE((SELECT DISTINCT SUBSTR(localidentificacao.DOCUMENTOIDENTIFICACAO,1,19) 

mgadm.emitente.ins-estadual


PEDIDO

A exportação de pedidos consiste em:

  • Cabeçalho e Itens.

Utilizando os seguintes filtros para exportar:

  • Pedidos de origem diferente de ERP (PED.SGLORIGEMPEDIDO != 'ERP');
  • Pedidos não exportados (IDNEXPORTADOERP = 0);
  • Pedidos sem codigoerp preenchido;
  • Pedidos com situações existentes no Datasul ('1', '2', '3', '4', '5', '6', '7');
  • Pedidos que não contenham pendências de aprovação;
  • Pedidos com situação igual à pendente (SGLTIPOSITUACAOPEDIDO = ‘PP’).

Considerações importantes:

  • Caso o pedido não exporte devido à alguma validação do Datasul ou erro da API, o mesmo será reaberto (SGLTIPOSITUACAOPEDIDO = ‘NF’) e uma mensagem será enviada para o usuário cadastrante (PEDIDO.IDUSUARIOPROFISSIONAL);
  • Ao ser reaberto, o mesmo deverá ser analisado e finalizado.

Abaixo segue o DE/PARA dos campos:

CABEÇALHO PEDIDO

TAG

TOTVS SFA

DATASUL

branchId

COALESCE(split_part(FILIALVEN.CODIGOERP,'#',3), '')

movdis.ped-venda.cod-estabel

cifCity

''

movdis.ped-venda.cidade-cif

codeCarrier

COALESCE((SELECT DISTINCT CAST(SPLIT_PART(TRA.CODIGOERP,'#',3) AS INT) FROM PEDIDOENTREGA PE LEFT JOIN PARCEIRO TRA ON TRA.IDPARCEIRO = PE.IDPARCEIROTRANSPORTADOR  WHERE PE.IDPEDIDO = PED.IDPEDIDO limit 1), 0)

mgadm.transporte.cod-transp

codeReshipmentTransp

COALESCE((SELECT DISTINCT CAST(split_part(TRA_REDESP.CODIGOERP,'#',3) AS INT) FROM PEDIDOENTREGA PE LEFT JOIN PARCEIRO TRA_REDESP ON TRA_REDESP.IDPARCEIRO = PE.IDPARCEIROREDESPACHO  WHERE PE.IDPEDIDO = PED.IDPEDIDO limit 1), 0)

mgadm.transporte.cod-transp

customerCode

COALESCE(CAST(split_part(PARCEIRO.CODIGOERP,'#',3) AS INT), 0) 

movdis.ped-venda.cod-emitente

customerOrderId

COALESCE(PED.NUMEROPEDIDO, '')

movdis.ped-venda.nr-pedcli

deliveryDate

( SELECT
        DISTINCT TO_CHAR(PE.DATAENTREGA, 'YYYY-MM-DD')
    FROM
        PEDIDOENTREGA PE 
    WHERE
        PE.IDPEDIDO = PED.IDPEDIDO 
        and pe.idpedidoproduto is null)

movdis.ped-venda.dt-entrega

emissionDate

TO_CHAR(PED.DATAPEDIDO, 'YYYY-MM-DD')

movdis.ped-venda.dt-emissao

implantationDate

''

movdis.ped-venda.dt-implant

orderId

COALESCE(PED.NUMEROPEDIDOERP, '')

movdis.ped-venda.nr-pedido

orderSituation

COALESCE(CAST(TIPOSITUACAOPEDIDO.CODIGOERP AS INT), 0)

movdis.ped-venda.cod-sit-ped

paymentTerms

COALESCE(CAST(split_part(CONDICAOPAGAMENTO.CODIGOERP,'#',2) AS INT), 0)

movdis.ped-venda.cod-cond-pag

priceTableOrder

COALESCE(split_part(TABELAPRECO.CODIGOERP,'#',2), '')

movdis.ped-venda.nr-tabpre

representativeShortName

COALESCE(USUARIO.LOGIN, '')

movdis.ped-venda.no-ab-reppri

salesChannel

COALESCE(CAST(split_part(TIPOLOGIA.CODIGOERP,'#',2) AS INT), 0)

movdis.ped-venda.cod-canal-venda

shortName

COALESCE((select distinct cr.resposta from CAMPO C inner join camporesposta cr on CR.idcampo = C.idcampo and C.chave = 'nomeabrev' where cr.idparceiro = ped.idparceiro), '')

movdis.ped-venda.nome-abrev

transactionType

''

movdis.ped-venda.nat-operacao

valueFreight

COALESCE((SELECT VALORFRETE FROM PEDIDOENTREGA PE  WHERE PE.IDPEDIDO = PED.IDPEDIDO and pe.idpedidoproduto is null), 0)

movdis.ped-venda.val-frete

valueInsurance

COALESCE((SELECT VALORSEGURO FROM PEDIDOENTREGA PE  WHERE PE.IDPEDIDO = PED.IDPEDIDO and pe.idpedidoproduto is null), 0)

movdis.ped-venda.val-seguro

valuePacking

COALESCE((SELECT VALORDESPESA FROM PEDIDOENTREGA PE  WHERE PE.IDPEDIDO = PED.IDPEDIDO and pe.idpedidoproduto is null), 0) 

movdis.ped-venda.val-embal

ITENS PEDIDO

TAG

TOTVS SFA

DATASUL

delireryDate''movdis.ped-item.dt-entrega
informedDiscountCAST(COALESCE(PEDIDOPRODUTO.VALORDESCONTO, 0) AS NUMERIC(18,2))movdis.ped-item.val-desconto-inform
ipivalueCAST(COALESCE(PEDIDOPRODUTO.VALORIPI, 0) AS NUMERIC(18,2))movdis.ped-item.val-ipi
itemCodeCOALESCE(split_part(PRODUTO.CODIGOERP,'#',2), '')movdis.ped-item.it-codigo
itemPercentageDiscountCAST(COALESCE(PEDIDOPRODUTO.PERCENTUALDESCONTO, 0) AS NUMERIC(18,2))movdis.ped-item.per-des-item
msrUnitCOALESCE(EMBALAGEM.CODIGO, '')movdis.ped-item.cod-un
orderItemSituationCOALESCE(CAST(TIPOSITPEDIDOPRODUTO.CODIGOERP AS INT), CAST(TIPOSITUACAOPEDIDO.CODIGOERP AS INT))movdis.ped-item.cod-sit-item
originalPriceCOALESCE(CAST(PEDIDOPRODUTO.PRECOORIGINAL AS NUMERIC(18, 4)), 0) movdis.ped-item.vl-preori
priceTableCOALESCE(CASE WHEN SPLIT_PART(TABELAPRECOPRODUTO.CODIGOERP,'#',2) IS NOT NULL THEN SPLIT_PART(TABELAPRECOPRODUTO.CODIGOERP,'#',2) ELSE SPLIT_PART(TABELAPRECO.CODIGOERP,'#',2) END, '')movdis.ped-item.nr-tabpre
priceUnitaryCOALESCE(CAST(PEDIDOPRODUTO.PRECOFATURADO AS NUMERIC(18, 5)), 0)movdis.ped-item.vl-preuni
quantityAttentiveCOALESCE(CAST(CASE WHEN PEDIDOPRODUTO.QUANTIDADEFATURADA IS NOT NULL AND PEDIDOPRODUTO.QUANTIDADEFATURADA > 0 THEN PEDIDOPRODUTO.QUANTIDADEFATURADA ELSE PEDIDOPRODUTO.QUANTIDADE END AS NUMERIC(18, 4)), 0)movdis.ped-item.qt-atendida
quantityBillingCOALESCE(CAST(PEDIDOPRODUTO.QUANTIDADE AS NUMERIC(18, 4)), 0)movdis.ped-item.qt-un-fat
quantityPendingCOALESCE(CAST(CASE WHEN PEDIDOPRODUTO.QUANTIDADEPENDENTE IS NOT NULL AND PEDIDOPRODUTO.QUANTIDADEPENDENTE > 0 THEN PEDIDOPRODUTO.QUANTIDADEPENDENTE ELSE PEDIDOPRODUTO.QUANTIDADE END AS NUMERIC(18, 4)), 0)movdis.ped-item.qt-pendente
quantityRequestedCOALESCE(CAST(PEDIDOPRODUTO.QUANTIDADE AS NUMERIC(18, 4)), 0)movdis.ped-item.qt-pedida
shortNameCOALESCE((select distinct cr.resposta from CAMPO C inner join camporesposta cr on CR.idcampo = C.idcampo and C.chave = 'nomeabrev' where cr.idparceiro = ped.idparceiro), '')movdis.ped-item.nome-abrev
sequence(PEDIDOPRODUTO.ORDEM * 10) movdis.ped-item.nr-sequencia
transactionTypeCOALESCE(PEDIDOPRODUTO.NATUREZAOPERACAO, null)movdis.ped-item.nat-operacao
customerOrderIdCOALESCE(PEDIDO.NUMEROPEDIDO, '')movdis.ped-item.nr-pedcli
  • Sem rótulos