Ir para o conteúdo principal

ProtheusFornecedorDocumentacao (STATUS: PARCIAL)

Documentação Técnica

Nome do clienteOSKLEN
Nome do projetoIntegração LINX → Protheus
Bibliotecawosk_protheus_fornecedor
Data02/03/2026


Histórico de Versões

DataVersãoModificado porDescrição da Mudança
02/03/20261.0Maykon/GustavoCriação da documentação técnica do processo ProtheusFornecedor.

Descrição

Este endpoint registra e atualiza cadastros de fornecedores, validando consistência e evitando duplicidades por CPF/CNPJ e nome.
O processo persiste os dados nas tabelas internas de cadastro e retorna a confirmação do registro concluído.

Endpoint (API)

Descrição Conceitual

O endpoint recebe os dados cadastrais do fornecedor, valida obrigatoriedade e consistência conforme o dicionário de campos e impede duplicidade por CPF/CNPJ (CGC_CPF) e por nome (FORNECEDOR). Em seguida, persiste o cadastro base em CADASTRO_CLI_FOR e os dados específicos em FORNECEDORES, e opcionalmente cria/atualiza dados adicionais em TRANSPORTADORAS e CLIENTES_ATACADO conforme os indicadores recebidos.

Ao final, retorna Mensagem = OK e Mensagem Detalhada informando sucesso, incluindo complementos de código interno para fornecedor estrangeiro quando aplicável.

Estruturação de Dados

Identificação do endpoint
- Link da biblioteca: /bibliotecas/9a775167-2ab3-4efd-ab6e-af7c6a1b9f6e/wosk_protheus_fornecedor.

Parâmetros de entrada (obrigatórios)
- FORNECEDOR (string, tamanho 25): nome do fornecedor.
- RAZAO_SOCIAL (string, tamanho 90): razão social do fornecedor.
- TIPO (string, tamanho 25): tipo do fornecedor (lista carregada de FORNECEDOR_TIPOS).
- SUBTIPO (string, tamanho 40): sub tipo do fornecedor (lista carregada de FORNECEDOR_SUBTIPO filtrada por TIPO).
- INDICA_TRANSPORTADORA (bool, tamanho 1): indicador para criar/atualizar em TRANSPORTADORAS.
- INDICA_CLIENTE (bool, tamanho 1): indicador para criar/atualizar em CLIENTES_ATACADO.
- FORNECE_MATERIAIS (bool, tamanho 1): indicador de fornecimento de materiais.
- FORNECE_MATERIA_PRIMA (bool, tamanho 1): indicador de fornecimento de matéria prima.
- FORNECE_OUTROS (bool, tamanho 1): indicador de fornecimento de serviços/diversos.
- FORNECE_PRODUTO_ACABADO (bool, tamanho 1): indicador de fornecimento de produto acabado.
- BENEFICIADOR (bool, tamanho 1): indicador de beneficiador.
- FORNECEDOR_PROD_OSK (bool, tamanho 1): 1 para fornecedor produtivo e 0 para não produtivo.
- PJ_PF (bool, tamanho 1): 1 para jurídica e 0 para física.
- CGC_CPF (string, tamanho 19): CNPJ ou CPF do fornecedor.
- RG_IE (string, tamanho 19): RG ou inscrição estadual (quando não existir, informar ISENTO).
- CADASTRAMENTO (datetime, tamanho 19): data de cadastro.
- UF (string, tamanho 2): UF do fornecedor.
- CEP (string, tamanho 9): CEP.
- ENDERECO (string, tamanho 90): logradouro (sem o número).
- NUMERO (string, tamanho 10): número do endereço.
- COMPLEMENTO (string, tamanho 60): complemento do endereço.
- CODIGO_IBGE (string, tamanho 10): código da cidade (IBGE).
- CIDADE (string): nome da cidade (utilizado para endereços de cobrança e entrega no cadastro base).
- BAIRRO (string, tamanho 25): bairro.
- PAIS (string, tamanho 35): país (nome).
- EMAIL (string, tamanho 100): email do fornecedor.
- EMAIL_NFE (string, tamanho 100): email para envio de NFE.
- INATIVO (bool, tamanho 1): 1 para inativo e 0 para ativo.
- INDICADOR_FISCAL_TERCEIRO (string, tamanho 2): código do indicador fiscal (lista carregada de CTB_LX_INDICADOR_FISCAL_TERCEIRO com INATIVO = 0).
- CONTA_CONTABIL (string, tamanho 18): conta contábil (normalizada por máscara interna).
- MOEDA (string, tamanho 6): moeda (lista carregada de MOEDAS).
- CONDICAO_PGTO (string, tamanho 3): condição de pagamento (lista carregada de COND_ENT_PGTOS).

Parâmetros de entrada (opcionais)
- A2_COD (string, tamanho 9): código do fornecedor (usado para fornecedor estrangeiro).
- A2_LOJA (string, tamanho 4): loja do fornecedor (usado para fornecedor estrangeiro).
- IM (string, tamanho 15): inscrição municipal.
- DDI (string, tamanho 5): DDI.
- DDD1 (string, tamanho 5): DDD do primeiro telefone.
- TELEFONE1 (string, tamanho 10): primeiro telefone.
- DDD2 (string, tamanho 5): DDD do segundo telefone.
- TELEFONE2 (string, tamanho 10): segundo telefone.
- CONTATO (string, tamanho 40): contato do fornecedor.
- OBS_DE_FATURAMENTO (string, tamanho 200): observação.

Exemplo de payload enviado
{
  "A2_COD": "",
  "A2_LOJA": "",
  "FORNECEDOR": "FORNECEDOR EXEMPLO",
  "RAZAO_SOCIAL": "RAZAO SOCIAL EXEMPLO",
  "TIPO": "TIPO EXEMPLO",
  "SUBTIPO": "SUBTIPO EXEMPLO",
  "INDICA_TRANSPORTADORA": 0,
  "INDICA_CLIENTE": 0,
  "FORNECE_MATERIAIS": 1,
  "FORNECE_MATERIA_PRIMA": 0,
  "FORNECE_OUTROS": 0,
  "FORNECE_PRODUTO_ACABADO": 0,
  "BENEFICIADOR": 0,
  "FORNECEDOR_PROD_OSK": 1,
  "PJ_PF": 1,
  "CGC_CPF": "00.000.000/0001-00",
  "RG_IE": "ISENTO",
  "IM": null,
  "CADASTRAMENTO": "2026-03-02 00:00:00",
  "UF": "RJ",
  "CEP": "00000-000",
  "ENDERECO": "RUA EXEMPLO",
  "NUMERO": "100",
  "COMPLEMENTO": "SALA 1",
  "CODIGO_IBGE": "0000000",
  "CIDADE": "RIO DE JANEIRO",
  "BAIRRO": "CENTRO",
  "PAIS": "BRASIL",
  "DDI": null,
  "EMAIL": "fornecedor@exemplo.com",
  "EMAIL_NFE": "nfe@exemplo.com",
  "DDD1": null,
  "TELEFONE1": null,
  "DDD2": null,
  "TELEFONE2": null,
  "CONTATO": null,
  "INATIVO": 0,
  "INDICADOR_FISCAL_TERCEIRO": "00",
  "CONTA_CONTABIL": "000000000000000000",
  "MOEDA": "BRL",
  "CONDICAO_PGTO": "000",
  "OBS_DE_FATURAMENTO": null
}



Tratamento de Dados

Pré-validação estrutural: o payload é validado conforme o dicionário de campos, exigindo todos os parâmetros marcados como obrigatórios e respeitando tipo e tamanho. O campo CIDADE é utilizado na persistência do cadastro base para cobrança/entrega mesmo não fazendo parte do dicionário de validação. Quando TIPO estiver preenchido, a lista permitida de SUBTIPO é carregada consultando FORNECEDOR_SUBTIPO com filtro por TIPO.

Validações de unicidade (antes de persistir):
- CPF/CNPJ: consulta FORNECEDORES filtrando por CGC_CPF. Se houver registro e o FORNECEDOR encontrado for diferente do informado, o endpoint retorna erro indicando o conflito (FORNECEDOR, CGC_CPF, CLIFOR).
- Nome do fornecedor: consulta CADASTRO_CLI_FOR filtrando por NOME_CLIFOR = FORNECEDOR. Se houver registro e o CGC_CPF encontrado for diferente do informado, o endpoint retorna erro indicando o conflito (NOME_CLIFOR, CGC_CPF, CLIFOR).

Normalização aplicada antes de gravar:
- CONTA_CONTABIL: ajustada por máscara de conta contábil interna, para padronizar o formato persistido e utilizado nos destinos.

Persistência em CADASTRO_CLI_FOR (transação): o endpoint monta um registro base de cadastro copiando e reestruturando campos do payload (campos exatos):
- NOME_CLIFOR: recebe o valor de FORNECEDOR.
- COBRANCA_ENDERECO, ENTREGA_ENDERECO: copiados de ENDERECO.
- COBRANCA_CIDADE, ENTREGA_CIDADE: copiados de CIDADE (campo esperado no payload para o cadastro base).
- COBRANCA_BAIRRO, ENTREGA_BAIRRO: copiados de BAIRRO.
- COBRANCA_UF, ENTREGA_UF: copiados de UF.
- COBRANCA_CEP, ENTREGA_CEP: copiados de CEP.
- COBRANCA_CGC, ENTREGA_CGC: copiados de CGC_CPF.
- COBRANCA_IE, ENTREGA_IE: copiados de RG_IE.
- COBRANCA_PAIS, ENTREGA_PAIS: copiados de PAIS.
- ENTREGA_RAZAO_SOCIAL: copiado de RAZAO_SOCIAL.
- IM_ENTREGA, IM_COBRANCA: copiados de IM.
- COBRANCA_NUMERO, ENTREGA_NUMERO: copiados de NUMERO.
- COBRANCA_COMPLEMENTO, ENTREGA_COMPLEMENTO: copiados de COMPLEMENTO.
- COD_MUNICIPIO_IBGE, COD_MUNICIPIO_IBGE_ENTREGA: copiados de CODIGO_IBGE.
- COD_MUNICIPIO_IBGE_COBRANCA: é definido internamente a partir de CODIGO_IBGE, porém não é considerado na gravação do cadastro base conforme o mapeamento atual de persistência.
- DATA_PARA_TRANSFERENCIA: para inserção, é gravada como GETDATE() no banco; o retorno da etapa também mantém um valor de data/hora atual para controle do fluxo.

Em seguida, verifica se existe registro anterior em CADASTRO_CLI_FOR filtrando por NOME_CLIFOR, priorizando o mais recente por CADASTRAMENTO descendente:
- Inserção: quando não houver CLIFOR encontrado, é gerado um novo CLIFOR e COD_CLIFOR por sequência (origem da sequência varia conforme INDICA_CLIENTE) e o registro é inserido em CADASTRO_CLI_FOR.
- Atualização: quando houver CLIFOR encontrado, o registro é atualizado em CADASTRO_CLI_FOR por CLIFOR. Se o registro encontrado já possuir CADASTRAMENTO, esse campo não é alterado na atualização.

Persistência em FORNECEDORES (transação): com o CLIFOR definido, o endpoint prepara o registro do fornecedor e grava em FORNECEDORES com as reestruturações (campos exatos):
- SUBTIPO_FORNECEDOR: recebe o valor de SUBTIPO.
- COD_FORNECEDOR: recebe o valor de CLIFOR.
- FORNECE_PROD_ACAB: recebe o valor de FORNECE_PRODUTO_ACABADO.
- FORNECE_MAT_CONSUMO: recebe o valor de FORNECE_MATERIA_PRIMA.
- CTB_CONTA_CONTABIL: recebe o valor de CONTA_CONTABIL.
- DATA_PARA_TRANSFERENCIA: para inserção, é gravada como GETDATE() no banco; em atualização, é enviada data/hora atual como valor do campo (controle de processamento).
Após preparar, insere quando não existir registro em FORNECEDORES por CLIFOR; caso exista, atualiza por CLIFOR.

Persistência opcional em TRANSPORTADORAS (quando INDICA_TRANSPORTADORA = 1): cria/atualiza registro com as transformações (campos exatos):
- TRANSPORTADORA: recebe FORNECEDOR limitado a 25 caracteres.
- CGC: recebe CGC_CPF.
- TELEFONE: recebe TELEFONE1.
- DDD: recebe DDD1.
- INSCRICAO: recebe RG_IE.
- COD_MUNICIPIO_IBGE: recebe CODIGO_IBGE.
- COMPLEMENTO: limitado a 10 caracteres.
- ENDERECO: recebe ENDERECO e, quando NUMERO estiver preenchido, concatena ", <NUMERO>" ao final.
- PF_PJ: recebe 0 quando PJ_PF = 1 (jurídica) e 1 quando PJ_PF = 0 (física).
- DATA_PARA_TRANSFERENCIA: para inserção, é gravada como GETDATE() no banco; em atualização, é enviada data/hora atual como valor do campo (controle de processamento).
A inclusão/atualização é definida consultando TRANSPORTADORAS por TRANSPORTADORA. Se não houver CODIGO_TRANSP, é gerado um novo código sequencial com padding e o registro é inserido; caso exista, atualiza por CODIGO_TRANSP.

Persistência opcional em CLIENTES_ATACADO (quando INDICA_CLIENTE = 1): cria/atualiza registro com valores fixos e reestruturações (campos exatos):
- CLIENTE_ATACADO, MATRIZ_CLIENTE: recebem FORNECEDOR limitado a 25 caracteres.
- COD_CLIENTE: recebe CLIFOR.
- FILIAL: definido como ESTOQUE ATACADO.
- PONTUALIDADE: definido como REGULAR.
- TRANSPORTADORA: definido como BRASPRESS - RIO JANEIRO.
- CONCEITO: definido como BOM.
- TIPO: definido como FORNECEDOR.
- TIPO_BLOQUEIO: definido como INDEFINIDO.
- CONDICAO_PGTO: definido como 020.
- DATA_PARA_TRANSFERENCIA: para inserção, é gravada como GETDATE() no banco; em atualização, é enviada data/hora atual como valor do campo (controle de processamento).
Para inclusão, consulta CLIENTES_ATACADO por CLIENTE_ATACADO e busca REGIAO em CLIENTES_ATACADO por correspondência com a UF; em atualização, atualiza por CLIENTE_ATACADO.

Complemento para fornecedor estrangeiro: quando UF = EX, o retorno preenche A2_COD com CLIFOR e A2_LOJA com 0001.

Integração com o Protheus

Não há chamada de integração externa direta com o Protheus neste endpoint. O processamento consiste em validações, reestruturação e persistência em banco de dados local nas tabelas CADASTRO_CLI_FOR, FORNECEDORES, TRANSPORTADORAS (quando aplicável) e CLIENTES_ATACADO (quando aplicável).

Tratamento de retorno

Sucesso: quando todas as validações passarem e as transações de persistência forem concluídas, o retorno inclui Mensagem = OK e Mensagem Detalhada = Registrado com sucesso..
Erro: quando a validação estrutural falhar, quando houver conflito de unicidade por CGC_CPF ou por nome, quando falhar a obtenção de sequências/códigos, ou quando ocorrer falha de banco durante insert/update, o endpoint interrompe o processamento e retorna exceção com o detalhe correspondente, prefixando a origem quando aplicável (CADASTRO_CLI_FOR, FORNECEDORES, TRANSPORTADORAS, CLIENTES_ATACADO).

Encaminhamento em cenário de erro

Em erro ao inserir/atualizar qualquer uma das tabelas, a transação da etapa correspondente é desfeita (rollback) e o erro é propagado, evitando persistência parcial entre CADASTRO_CLI_FOR, FORNECEDORES, TRANSPORTADORAS e CLIENTES_ATACADO.

Fluxo do Processo

Diagrama sem nome.jpg


Critérios de Aceitação

ProcessoSubprocessoDescriçãoSituação esperada
EndpointValidação de entradaAo receber o payload, deve exigir os campos obrigatórios (por exemplo FORNECEDOR, CGC_CPF, UF, CONTA_CONTABIL, MOEDA, CONDICAO_PGTO) e rejeitar entradas fora de tipo/tamanho.Payload inválido deve ser rejeitado com mensagem de validação; payload válido segue para validações de unicidade.
EndpointUnicidade por CPF/CNPJ e nomeDeve impedir que o mesmo CGC_CPF esteja associado a um FORNECEDOR diferente (consulta em FORNECEDORES) e impedir que o mesmo nome (FORNECEDOR) esteja associado a um CGC_CPF diferente (consulta em CADASTRO_CLI_FOR).Em conflito, deve retornar erro com detalhe do registro encontrado, sem gravar alterações.
EndpointPersistência e condicionaisDeve criar/atualizar o cadastro base em CADASTRO_CLI_FOR e o cadastro do fornecedor em FORNECEDORES. Quando INDICA_TRANSPORTADORA = 1, deve criar/atualizar em TRANSPORTADORAS; quando INDICA_CLIENTE = 1, deve criar/atualizar em CLIENTES_ATACADO, mantendo transação e rollback por etapa.Registros devem ser gravados conforme regra e, em falha de banco, não deve haver persistência parcial (rollback) na etapa com erro.