Ir para o conteúdo principal

ProtheusCancelamentoDocumentoEntrada (STATUS: PARCIAL)

Documentação Técnica

Nome do cliente OSKLEN
Nome do projeto Integração LINX → Protheus
Biblioteca wosk_protheus_cancelamento_documento_entrada
Data 02/03/2026


Histórico de Versões

Data Versão Modificado por Descrição da Mudança
02/03/2026 1.0 Maykon/Gustavo Criação da documentação técnica do processo ProtheusCancelamentoDocumentoEntrada.

Descrição

Esta biblioteca organiza o envio de cancelamentos de documento de entrada do LINX para o Protheus, garantindo validações prévias e rastreabilidade do processamento.
Também controla a captura e o status para facilitar auditoria e correção em cenários de falha.

Capturador

Descrição Conceitual

O capturador consulta a origem de cancelamentos de entradas e registra itens pendentes para processamento assíncrono, mantendo controle de continuidade para evitar duplicidades e permitir retomada segura.
Na consulta principal, o uso de SELECT {{TOP}} limita a quantidade de registros por ciclo, conforme o conceito: CONCEITO_SEMAFARO.

Também permite captura manual por uma ou mais chaves no padrão F1_FILIAL-F1_DOC-F1_SERIE-F1_FORNECE-F1_LOJA-F1_TIPO; para cada chave, consulta a mesma origem com filtros dinâmicos e registra o item correspondente para processamento.

Fonte

Origem consultada: view WOSK_SERVICO_ENVIA_PROTHEUS_ENTRADAS_CANCELAMENTO.

Operações com Dados

  • Leitura (captura por critério de pendência): consulta a origem com filtro de pendência (CAPTURADO_ISNAPP = 0), aplicando limite dinâmico via {{TOP}}.
SELECT {{TOP}}
    F1_FILIAL,
    F1_DOC,
    F1_SERIE,
    F1_EMISSAO,
    F1_FORNECE,
    F1_LOJA,
    F1_TIPO,
    F1_ESPECIE,
    F3_DTCANC,
    F3_CODRSEF,
    F3_PROTOC,
    F1_CHVNFE,
    EXCLUSAO,
    DATA_PARA_TRANSFERENCIA
FROM
    WOSK_SERVICO_ENVIA_PROTHEUS_ENTRADAS_CANCELAMENTO (NOLOCK)
WHERE
    CAPTURADO_ISNAPP = 0
  • Leitura (captura manual por chave): consulta a mesma origem aplicando WHERE construído dinamicamente. A chave exige no mínimo F1_FILIAL-F1_DOC-F1_SERIE; os filtros de F1_FORNECE e F1_LOJA só são incluídos quando presentes na chave.
SELECT
    F1_FILIAL,
    F1_DOC,
    F1_SERIE,
    F1_EMISSAO,
    F1_FORNECE,
    F1_LOJA,
    F1_TIPO,
    F1_ESPECIE,
    F3_DTCANC,
    F3_CODRSEF,
    F3_PROTOC,
    F1_CHVNFE,
    EXCLUSAO,
    DATA_PARA_TRANSFERENCIA
FROM
    WOSK_SERVICO_ENVIA_PROTHEUS_ENTRADAS_CANCELAMENTO (NOLOCK)
WHERE
    F1_FILIAL = '<F1_FILIAL>'
    AND F1_DOC = '<F1_DOC>'
    AND F1_SERIE = '<F1_SERIE>'
    AND F1_FORNECE = '<F1_FORNECE (opcional)>'
    AND F1_LOJA = '<F1_LOJA (opcional)>'
  • Persistência (controle de continuidade): grava/atualiza a posição de execução na tabela wosk_monitor, incluindo evento, offset, filtro, chave_posicao, situacao, data_posicao e data_iniciado.
  • Persistência (itens pendentes): registra os itens para processamento na tabela wosk_queue (banco integrador), utilizando chave composta no padrão F1_FILIAL-F1_DOC-F1_SERIE-F1_FORNECE-F1_LOJA-F1_TIPO.

Fila de Processamento

Descrição Conceitual

A fila recupera um registro pendente e utiliza o conteúdo do registro como base do payload de integração. Em seguida, aplica transformações obrigatórias de padronização e realiza a chamada ao Protheus.

Neste processo, a fila valida pré-requisitos de integração (cliente e documento de cancelamento) antes de efetivar o envio do cancelamento, podendo redirecionar o recurso para documento de saída quando necessário e persistindo o status final do item.

Rotinas Inteligentes

Cliente Integrado: Antes de enviar o cancelamento ao Protheus, ao validar o vínculo do fornecedor (F1_LOJA-F1_FORNECE). Garante que o cancelamento seja encaminhado apenas para fornecedores reconhecidos no Protheus.
link: https://kb.illimitar.pro/books/integracao-linx-protheus/page/cliente-integrado

Documento de Cancelamento de Entrada: Quando F3_CODRSEF for diferente de 102, antes de enviar o cancelamento ao Protheus. Garante consistência do documento de referência no Protheus para o cancelamento
link: https://kb.illimitar.pro/books/integracao-linx-protheus/page/documento-de-cancelamento-de-entrada

Estruturação de Dados

O payload de integração é montado a partir do conteúdo do item pendente. Para o envio de cancelamento de documento de entrada, a lista oficial de campos do payload é:

Campo no payload (Protheus) Campo de origem
F1_FILIAL F1_FILIAL
F1_DOC F1_DOC
F1_SERIE F1_SERIE
F1_EMISSAO F1_EMISSAO
F1_FORNECE F1_FORNECE
F1_LOJA F1_LOJA
F1_TIPO F1_TIPO
F1_ESPECIE F1_ESPECIE
F3_DTCANC F3_DTCANC
F3_CODRSEF F3_CODRSEF
F3_PROTOC F3_PROTOC
F1_CHVNFE F1_CHVNFE

Exemplo de payload enviado:

{
  "F1_FILIAL": "<F1_FILIAL>",
  "F1_DOC": "<F1_DOC>",
  "F1_SERIE": "<F1_SERIE>",
  "F1_EMISSAO": "<F1_EMISSAO>",
  "F1_FORNECE": "<F1_FORNECE>",
  "F1_LOJA": "<F1_LOJA>",
  "F1_TIPO": "<F1_TIPO>",
  "F1_ESPECIE": "<F1_ESPECIE>",
  "F3_DTCANC": "<F3_DTCANC>",
  "F3_CODRSEF": "<F3_CODRSEF>",
  "F3_PROTOC": "<F3_PROTOC>",
  "F1_CHVNFE": "<F1_CHVNFE>"
}

Quando o documento de entrada ainda não estiver integrado e o fluxo exigir envio alternativo, o recurso pode ser trocado para cancelamento de documento de saída e o payload é reestruturado com mapeamento de campos:

Campo no payload (Protheus) Regra / origem
F2_FILIAL F1_FILIAL
F2_DOC F1_DOC
F2_SERIE F1_SERIE
F2_EMISSAO F1_EMISSAO
F2_CLIENTE F1_FORNECE
F2_LOJA F1_LOJA
F2_TIPO F1_TIPO
F2_ESPECIE F1_ESPECIE
F3_DTCANC F3_DTCANC
F3_CODRSEF fixo ENT
F3_PROTOC F3_PROTOC
F2_CHVNFE F1_CHVNFE

Exemplo de payload enviado:

{
  "F2_FILIAL": "<F1_FILIAL>",
  "F2_DOC": "<F1_DOC>",
  "F2_SERIE": "<F1_SERIE>",
  "F2_EMISSAO": "<F1_EMISSAO>",
  "F2_CLIENTE": "<F1_FORNECE>",
  "F2_LOJA": "<F1_LOJA>",
  "F2_TIPO": "<F1_TIPO>",
  "F2_ESPECIE": "<F1_ESPECIE>",
  "F3_DTCANC": "<F3_DTCANC>",
  "F3_CODRSEF": "ENT",
  "F3_PROTOC": "<F3_PROTOC>",
  "F2_CHVNFE": "<F1_CHVNFE>"
}

Tratamento de Dados

  • F3_CODRSEF: avaliado como numérico para decidir se a validação do documento de cancelamento será exigida (quando diferente de 102).
  • endpoint (recurso Protheus): definido como documento_entrada por padrão e trocado para documento_saida quando o documento de entrada não estiver integrado e o fluxo indicar envio alternativo; nesse cenário, o payload é reestruturado para o conjunto F2_* e F3_CODRSEF recebe o valor fixo ENT.
  • tenantId (cabeçalho): formado a partir de F1_FILIAL no padrão <primeiros 2 caracteres>,<F1_FILIAL>.
  • chave (notificação): decomposta em F1_FILIAL, F1_DOC, F1_SERIE, F1_FORNECE, F1_LOJA, F1_TIPO para apresentar os componentes do item com falha.
  • ERRO (notificação): se a mensagem contiver marcador de SQL Server, é extraído o trecho relevante a partir de [SQL Server] até antes de Error :; se existir :, é mantido apenas o conteúdo após o primeiro :; sequências de quebra de linha (escapadas ou reais) são convertidas para quebra de linha padrão.
  • data_adicionado, data (notificação): formatados para d/m/Y H:i:s.

Integração com o Protheus

Chamada de integração com o Protheus

  • Chamada: Requisição HTTP
  • Recurso: documento_entrada ou documento_saida (conforme regra do processo)
  • Método HTTP: PUT
  • Cabeçalhos: "tenantId": "<UF>,<F1_FILIAL>"

Exemplo de payload enviado:

{
  "F1_FILIAL": "<F1_FILIAL>",
  "F1_DOC": "<F1_DOC>",
  "F1_SERIE": "<F1_SERIE>",
  "F1_EMISSAO": "<F1_EMISSAO>",
  "F1_FORNECE": "<F1_FORNECE>",
  "F1_LOJA": "<F1_LOJA>",
  "F1_TIPO": "<F1_TIPO>",
  "F1_ESPECIE": "<F1_ESPECIE>",
  "F3_DTCANC": "<F3_DTCANC>",
  "F3_CODRSEF": "<F3_CODRSEF>",
  "F3_PROTOC": "<F3_PROTOC>",
  "F1_CHVNFE": "<F1_CHVNFE>"
}

Tratamento de retorno:

  • Ausência de resposta: considera erro e finaliza o item com mensagem JSON: NÃO HOUVE RESPOSTA.
  • Resposta inválida: se não for array ou não contiver Mensagem, considera erro e finaliza com mensagem JSON: NÃO FOI POSSÍVEL DECODIFICAR A RESPOSTA.
  • Indicadores de erro: considera erro quando existir campo code no retorno, ou quando Mensagem for ERRO.
  • Mensagem detalhada: quando presente, utiliza Mensagem Detalhada como base da mensagem final.
  • Resalva de sucesso: se houver erro e a mensagem contiver documento de entrada nao cadastrado, o item é tratado como sucesso com a mensagem Cancelado com Sucesso, com resalva (autorizado pelo Juan - 08/04/2025).

Tratamento de retorno

  • Sucesso: quando o retorno estiver decodificado e não houver indicador de erro, o item é finalizado como integrado.
  • Erro: quando houver exceção no fluxo, retorno ausente, retorno inválido ou indicador de erro, o item é finalizado como erro com o retorno armazenado no campo de auditoria.
  • Suspensão: quando a validação prévia do fornecedor não estiver atendida, o item é marcado como suspenso e registra o tipo e a chave de suspensão para permitir retomada após correção do pré-requisito.
  • Persistência de status: o item é atualizado na tabela wosk_queue, incluindo mensagem, retorno decodificado, tempo de processamento e situação final.
  • Persistência de limpeza pós-sucesso: quando aplicável, são removidos registros de suporte nas tabelas ProtheusDocumentoEntrada, ProtheusDocumentoEntradaPontual, ProtheusDevolucaoCupomFiscal, ProtheusDocumentoEntradaLog, ProtheusDocumentoEntradaBase e ProtheusDocumentoEntradaFull, utilizando chaves derivadas de F1_FILIAL, F1_DOC, F1_SERIE, F1_FORNECE e F1_LOJA.

Encaminhamento em cenário de erro

Quando o fornecedor ainda não estiver integrado no Protheus, o item não segue para a integração de cancelamento. Ele é marcado como suspenso, armazenando o motivo e a chave de identificação (no padrão F1_LOJA-F1_FORNECE), permitindo retomar o processamento após a regularização do pré-requisito.

Notificação

A notificação de erros seleciona itens com falha do serviço ProtheusCancelamentoDocumentoEntrada na tabela wosk_queue, priorizando os mais antigos pela ordenação por data de processamento. Em seguida, encaminha a notificação para os destinatários configurados, incluindo a chave do item e a mensagem de erro higienizada.

Origem dos erros: wosk_queue (banco integrador). Destinatários configurados: juan.oliveira@osklen.com.br, kelyton.anderson@osklen.com.br.

Fluxo do Processo

Diagrama sem nome.jpg


Critérios de Aceitação

Processo Subprocesso Descrição Situação esperada
Capturador Captura e continuidade Ao consultar a origem WOSK_SERVICO_ENVIA_PROTHEUS_ENTRADAS_CANCELAMENTO com CAPTURADO_ISNAPP = 0 e limite via SELECT {{TOP}}, deve atualizar a posição de execução em wosk_monitor (offset, chave e datas), evitando duplicidades. Posição persistida em wosk_monitor e itens novos registrados em wosk_queue com chave consistente.
Capturador Captura manual por chave Ao informar uma ou mais chaves com pelo menos F1_FILIAL-F1_DOC-F1_SERIE, deve consultar a origem com WHERE dinâmico (incluindo F1_FORNECE/F1_LOJA quando presentes) e registrar os itens correspondentes para processamento. Itens pendentes registrados em wosk_queue para o serviço ProtheusCancelamentoDocumentoEntrada.
Fila de Processamento Validações e integração Ao processar um item pendente do serviço ProtheusCancelamentoDocumentoEntrada, deve validar o pré-requisito do fornecedor (F1_LOJA-F1_FORNECE), decidir o recurso (documento_entrada ou documento_saida) e enviar ao Protheus via PUT com cabeçalho tenantId no padrão <UF>,<F1_FILIAL>. wosk_queue atualizado com situação final coerente: 2 (sucesso), 3 (suspenso) ou 4 (erro), com mensagem e retorno armazenados.
Fila de Processamento Resalva de sucesso Se o Protheus responder erro com mensagem contendo documento de entrada nao cadastrado, deve tratar o item como sucesso e registrar a mensagem de resalva definida no processo. Item finalizado como sucesso (2) em wosk_queue, com mensagem de resalva persistida.