Ir para o conteúdo principal

ProtheusNotaFiscalMarketplacePontual (STATUS: PARCIAL)

Documentação Técnica

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


Histórico de Versões

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

Descrição

Esta biblioteca organiza o envio pontual de notas fiscais de marketplace do LINX para o Protheus, garantindo captura por chave ou por período.

Capturador

Descrição Conceitual

Permite a captura manual (por chave composta) e a captura automática (por agendador de tarefas) de notas fiscais pendentes, consultando a origem e registrando cada item para processamento assíncrono.

A captura automática segue processamento cronológico (ordenação/paginação por data) para priorizar registros mais antigos e manter continuidade por posição; link conceitual: Processamento cronológico.

Fonte

Origem consultada: view WOSK_SERVICO_ENVIA_PROTHEUS_NOTA_OMNIMKTPLACE_PONTUAL.

Origem auxiliar de itens: view WOSK_SERVICO_ENVIA_PROTHEUS_NOTA_OMNIMKTPLACE_ITEM_PONTUAL.

Consulta utilizada na captura automática (janela diária calculada a partir de DATA_PARA_TRANSFERENCIA e paginação conforme OFFSET e limite configurado):

SELECT
    TIPO,
    E1_XFILORI,
    F2_FILIAL,
    F2_DOC,
    F2_SERIE,
    F2_PEDIDO,
    F2_TIPO,
    F2_FORMUL,
    F2_EMISSAO,
    F2_CLIENTE,
    F2_LOJA,
    F2_ESPECIE,
    F2_COND,
    F2_XNATOPE,
    F2_CHVNFE,
    F2_HAUTNFE,
    F2_DAUTNFE,
    F2_PROTOCOLO,
    F2_FRETE,
    F2_SEGURO,
    F2_DESPESA,
    DATA_PARA_TRANSFERENCIA
FROM
    WOSK_SERVICO_ENVIA_PROTHEUS_NOTA_OMNIMKTPLACE_PONTUAL (NOLOCK)
WHERE
    DATA_PARA_TRANSFERENCIA BETWEEN '<DATA_INICIO_DIA>' AND '<DATA_FIM_DIA>'
ORDER BY
    DATA_PARA_TRANSFERENCIA ASC
OFFSET
    <OFFSET> ROWS FETCH NEXT <LIMITE> ROWS ONLY



Consulta utilizada na captura manual (chave informada e WHERE construído dinamicamente):

SELECT
    TIPO,
    E1_XFILORI,
    F2_FILIAL,
    F2_DOC,
    F2_SERIE,
    F2_PEDIDO,
    F2_TIPO,
    F2_FORMUL,
    F2_EMISSAO,
    F2_CLIENTE,
    F2_LOJA,
    F2_ESPECIE,
    F2_COND,
    F2_XNATOPE,
    F2_CHVNFE,
    F2_HAUTNFE,
    F2_DAUTNFE,
    F2_PROTOCOLO,
    F2_FRETE,
    F2_SEGURO,
    F2_DESPESA,
    DATA_PARA_TRANSFERENCIA
FROM
    WOSK_SERVICO_ENVIA_PROTHEUS_NOTA_OMNIMKTPLACE_PONTUAL (NOLOCK)
WHERE
    F2_FILIAL = '<F2_FILIAL>'
    AND F2_DOC = '<F2_DOC>'
    AND F2_SERIE = '<F2_SERIE>'
    AND F2_CLIENTE = '<F2_CLIENTE>'
    AND F2_LOJA = '<F2_LOJA>'



Consulta utilizada para recuperar itens da nota fiscal (itens vinculados à chave principal):

SELECT
    F2_FILIAL,
    F2_DOC,
    F2_SERIE,
    F2_CLIENTE,
    F2_LOJA,
    D2_CCUSTO,
    D2_LOCAL,
    D2_ITEM,
    D2_COD,
    D2_QUANT,
    D2_PRCVEN,
    D2_TOTAL,
    D2_TES,
    D2_BASEICM,
    D2_PICM,
    D2_VALICM,
    D2_DESCON,
    DATA_PARA_TRANSFERENCIA
FROM
    WOSK_SERVICO_ENVIA_PROTHEUS_NOTA_OMNIMKTPLACE_ITEM_PONTUAL (NOLOCK)
WHERE
    F2_FILIAL = '<F2_FILIAL>'
    AND F2_DOC = '<F2_DOC>'
    AND F2_SERIE = '<F2_SERIE>'
    AND F2_CLIENTE = '<F2_CLIENTE>'
    AND F2_LOJA = '<F2_LOJA>'

 

Operações com Dados

- Leitura: consulta a view WOSK_SERVICO_ENVIA_PROTHEUS_NOTA_OMNIMKTPLACE_PONTUAL para obter o registro atual da nota fiscal e montar a chave composta F2_FILIAL-F2_DOC-F2_SERIE-F2_CLIENTE-F2_LOJA.

- Leitura auxiliar de itens: consulta a view WOSK_SERVICO_ENVIA_PROTHEUS_NOTA_OMNIMKTPLACE_ITEM_PONTUAL para obter os itens relacionados à chave, que serão anexados ao conteúdo do item da fila.

- Controle de limite de captura: obtém o limite de itens por ciclo via configuração woskLimiteCaptura::ProtheusNotaFiscalMarketplacePontual, aplicado na paginação da consulta (FETCH NEXT <LIMITE>).

- Registro para processamento: cada nota fiscal capturada é persistida como pendência na tabela wosk_queue sob o serviço ProtheusNotaFiscalMarketplacePontual, com chave composta e conteúdo (incluindo itens) para processamento assíncrono.

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.

Estruturação de Dados

Campo no payload Origem no item de fila (conteúdo)
TIPO TIPO
e1_xfilori E1_XFILORI
f2_filial F2_FILIAL
f2_doc F2_DOC
f2_serie F2_SERIE
f2_pedido F2_PEDIDO
f2_tipo F2_TIPO
f2_formul F2_FORMUL
f2_emissao F2_EMISSAO
f2_cliente F2_CLIENTE
f2_loja F2_LOJA
f2_especie F2_ESPECIE
f2_chvnfe F2_CHVNFE
f2_hautnfe F2_HAUTNFE
f2_dautnfe F2_DAUTNFE
f2_protocolo F2_PROTOCOLO
f2_cond F2_COND
f2_frete F2_FRETE
f2_seguro F2_SEGURO
f2_despesa F2_DESPESA
f2_xnatope F2_XNATOPE
itens[].d2_item D2_ITEM
itens[].d2_cod D2_COD
itens[].d2_quant D2_QUANT
itens[].d2_prcven D2_PRCVEN
itens[].d2_total D2_TOTAL
itens[].d2_tes D2_TES
itens[].d2_baseicm D2_BASEICM
itens[].d2_picm D2_PICM
itens[].d2_valicm D2_VALICM
itens[].D2_DESCON D2_DESCON

Exemplo de payload enviado:

{
  "TIPO": "",
  "e1_xfilori": "",
  "f2_filial": "",
  "f2_doc": "",
  "f2_serie": "",
  "f2_pedido": "",
  "f2_tipo": "",
  "f2_formul": "",
  "f2_emissao": "",
  "f2_cliente": "",
  "f2_loja": "",
  "f2_especie": "",
  "f2_chvnfe": "",
  "f2_hautnfe": "",
  "f2_dautnfe": "",
  "f2_protocolo": "",
  "f2_cond": "",
  "f2_frete": "",
  "f2_seguro": "",
  "f2_despesa": "",
  "f2_xnatope": "",
  "itens": [
    {
      "d2_item": "",
      "d2_cod": "",
      "d2_quant": "",
      "d2_prcven": "",
      "d2_total": "",
      "d2_tes": "",
      "d2_baseicm": "",
      "d2_picm": "",
      "d2_valicm": "",
      "D2_DESCON": ""
    }
  ]
}



Tratamento de Dados

- Validação prévia obrigatória: antes do envio da nota fiscal, valida se o cliente da nota está integrado consultando a rotina inteligente setProtheusClienteIntegrado com a chave F2_LOJA-F2_CLIENTE. Se não estiver integrado, o item é finalizado como suspenso (situacao = 3) com suspensao_tipo e suspensao_chave preenchidos para tratamento posterior.

- Padronização numérica (precisão padrão):
  - f2_frete, f2_seguro, f2_despesa: normalizados com setNumeric(...).
  - itens[].d2_quant, itens[].d2_prcven, itens[].d2_total, itens[].d2_baseicm, itens[].d2_picm, itens[].d2_valicm, itens[].D2_DESCON: normalizados com setNumeric(...).

Rotinas Inteligentes

- Cliente Integrado: validada antes de iniciar o envio da nota fiscal (condição obrigatória por cliente). Garante que a integração da nota fiscal só prossiga quando o cliente estiver pronto para o Protheus.
link: https://kb.illimitar.pro/books/integracao-linx-protheus/page/cliente-integrado

- Nota Fiscal Omni Integrado: executada após retorno de sucesso do Protheus para a nota fiscal. Marca a nota fiscal como integrada usando a chave F2_FILIAL-F2_DOC-F2_SERIE-F2_CLIENTE-F2_LOJA para evitar reprocessamento.
link: https://kb.illimitar.pro/books/integracao-linx-protheus/page/nota-fiscal-omni-integrado

Integração com o Protheus

Chamada de integração com o Protheus
- Chamada: Requisição HTTP
- Recurso: linx/nota_fiscal
- Método HTTP: POST
- Cabeçalhos:
  - tenantId: <prefixo_2_caracteres_de_F2_FILIAL>,<F2_FILIAL>
 

Tratamento de retorno

Ausência de resposta: registra erro com mensagem JSON: NÃO HOUVE RESPOSTA. e finaliza o item como falha.

Resposta inválida/inesperada: quando não houver code no retorno, registra erro com mensagem JSON: NÃO FOI POSSÍVEL DECODIFICAR A RESPOSTA..

Indicadores de sucesso/erro: considera erro quando code for maior que 299; caso contrário, considera sucesso.

Regra de idempotência: quando a mensagem contiver numero de nota fiscal ja gravado, o retorno é reinterpretado como sucesso (força code = 0 e Mensagem = OK).

Sucesso: quando a situação for sucesso, marca a nota fiscal como integrada pela rotina inteligente Nota Fiscal Omni Integrado usando a chave F2_FILIAL-F2_DOC-F2_SERIE-F2_CLIENTE-F2_LOJA.

Quando a prévalidação de cliente não for atendida, o item é finalizado como suspenso (situacao = 3) e a fila registra suspensao_tipo = 'ProtheusCliente' e suspensao_chave = 'F2_LOJA-F2_CLIENTE' para direcionar o tratamento.

Encaminhamento em cenário de erro

Em cenários de falha (ausência de resposta, retorno inválido ou code > 299), o item permanece registrado em wosk_queue com detalhes do retorno e mensagem, permitindo acompanhamento e reprocessamento conforme necessidade operacional. Em cenários de dependência (cliente não integrado), o item é marcado como suspenso (situacao = 3) para impedir processamento indevido até que a condição seja resolvida.

Notificação

A notificação de erros consulta itens com falha na tabela wosk_queue (serviço ProtheusNotaFiscalMarketplacePontual e situação de erro), ordenando pela data de processamento para priorizar ocorrências mais antigas.

Fluxo do Processo

Diagrama sem nome.jpg


Critérios de Aceitação

Processo Subprocesso Descrição Situação esperada
Capturador Captura automática com ordem por data Ao consultar WOSK_SERVICO_ENVIA_PROTHEUS_NOTA_OMNIMKTPLACE_PONTUAL com filtro por DATA_PARA_TRANSFERENCIA, ordenação ascendente e paginação por OFFSET/FETCH, deve manter continuidade por posição persistida em wosk_monitor (evento, offset, chave_posicao, data_posicao, filtro). Posição atualizada em wosk_monitor e itens pendentes registrados na fila com chave composta.
Capturador Captura manual por chave composta Ao informar uma chave no padrão F2_FILIAL-F2_DOC-F2_SERIE-F2_CLIENTE-F2_LOJA, deve consultar a origem filtrando pelos cinco campos e registrar o item correspondente na fila, anexando itens obtidos de WOSK_SERVICO_ENVIA_PROTHEUS_NOTA_OMNIMKTPLACE_ITEM_PONTUAL. Item pendente registrado na fila com conteúdo completo (cabeçalho + itens) para integração.
Fila de Processamento Integração com Protheus Ao processar um item pendente em wosk_queue (serviço ProtheusNotaFiscalMarketplacePontual), deve normalizar campos numéricos com setNumeric(...), incluir cabeçalho tenantId e integrar via POST no recurso linx/nota_fiscal. Item atualizado em wosk_queue com retorno/mensagem e situacao coerente (sucesso quando code não indicar erro; erro quando houver ausência de resposta, retorno inválido ou code > 299).
Fila de Processamento Tratamento de retorno e marcação de integrado Quando a integração retornar sucesso (incluindo o caso de idempotência por mensagem numero de nota fiscal ja gravado), deve marcar a nota como integrada pela rotina inteligente setProtheusNotaFiscalOmniIntegrado e registrar a situação final. Nota fiscal marcada como integrada e item de fila finalizado com situação de sucesso.