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
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
wosk_queue (serviço ProtheusNotaFiscalMarketplacePontual e situação de erro), ordenando pela data de processamento para priorizar ocorrências mais antigas.Fluxo do Processo
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. |

Nenhum comentário