Ir para o conteúdo principal

ProtheusDocumentoEntradaLog (STATUS: PARCIAL)

Documentação Técnica

Nome do clienteOSKLEN
Nome do projetoIntegração LINX → Protheus
Bibliotecawosk_protheus_documento_entrada_log
Data03/03/2026


Histórico de Versões

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

Descrição

Este processo captura documentos de entrada a partir da origem de LOG e os prepara para integração no Protheus.
O fluxo garante paginação por data, estruturação completa do payload e registro do resultado do processamento na fila.

Capturador

Descrição Conceitual

Captura documentos de entrada pendentes na origem de LOG e registra cada documento para processamento em fila, mantendo controle de continuidade por offset, chave de posição e data de posição.

A captura aplica filtro por DATA_PARA_TRANSFERENCIA e usa ordenação/paginação por data, caracterizando processamento cronológico (ordenação/paginação por data).
link: Cronológico

Fonte

Origem consultada: view WOSK_SERVICO_ENVIA_PROTHEUS_ENTRADAS_LOG.

Consulta base (a condição de filtro/paginação é aplicada dinamicamente durante o fluxo):

SELECT
    F1_FILIAL,
    F1_DOC,
    F1_SERIE,
    F1_FORNECE,
    F1_LOJA,
    F1_COND,
    F1_XNATUR,
    F1_DUPL,
    F1_EMISSAO,
    F1_DTDIGIT,
    F1_RECBMTO,
    F1_EST,
    F1_ESTPRES,
    F1_TIPO,
    F1_FORMUL,
    F1_ESPECIE,
    F1_VALMERC,
    F1_VALBRUT,
    F1_FRETE,
    F1_DESPESA,
    F1_SEGURO,
    F1_DESCONT,
    F1_BASEICM,
    F1_VALICM,
    F1_BASEIPI,
    F1_VALIPI,
    F1_BRICMS,
    F1_ICMSRET,
    F1_BASIMP5,
    F1_VALIMP5,
    F1_BASIMP6,
    F1_VALIMP6,
    BASEPS3,
    VALPS3,
    BASECF3,
    VALCF3,
    F1_MUORITR,
    F1_UFORITR,
    F1_MUDESTR,
    F1_UFDESTR,
    F1_II,
    F1CIF,
    F1_TIPO_NF,
    F1_CHVNFE,
    F1_DAUTNFE,
    F1_HAUTNFE,
    F1_PROTOC,
    F1_NFELETR,
    F1_EMINFE,
    F1_HORNFE,
    F1_TPFRETE,
    F1_TPCTE,
    P1_PLIQUI,
    P1_PBRUTO,
    P1_ESPECI1,
    P1_VOLUME1,
    F1_ORIGLAN,
    F1_NFORIG,
    F1_SERORIG,
    F1_NUMTRIB,
    F1_MOEDA,
    F1_PREFIXO,
    F1_STATUS,
    F1_ESTPRES_2,
    F1_SDOC,
    F1_TRANSP,
    F1_XNATOPE,
    F1_XCANAL,
    F3_DTCANC,
    F3_CODRSEF,
    CREPROCESSA,
    TEMP_EMISSAO,
    DATA_PARA_TRANSFERENCIA
FROM
    WOSK_SERVICO_ENVIA_PROTHEUS_ENTRADAS_LOG (NOLOCK)

Operações com Dados

Leitura: consulta documentos na origem com filtro por DATA_PARA_TRANSFERENCIA e paginação por data. Para cada documento recuperado, consulta os itens e registra o conteúdo para processamento.

Consulta de itens do documento:

SELECT
    D1_FILIAL,
    D1_ITEM,
    D1_COD,
    B1_TP,
    B1_UM,
    B1_LOCAL,
    B1_GRUPO,
    D1_TEC,
    D1_QUANT,
    D1_VUNIT,
    D1_TOTAL,
    D1_DESC,
    D1_VALDESC,
    D1_SEGURO,
    D1_VALFRE,
    D1_DESPESA,
    D1_EMISSAO,
    D1_DTDIGIT,
    D1_DOC,
    D1_SERIE,
    F1_SDOC,
    D1_TIPO,
    D1_FORNECE,
    D1_LOJA,
    D1_CLASFIS,
    D1_OPER,
    D1_CF,
    D1_BASEIPI,
    D1_IPI,
    D1_VALIPI,
    D1_BASEICM,
    D1_PICM,
    D1_VALICM,
    D1_VRDICMS,
    D1_VALANTI,
    D1_ICMSDIF,
    D1_BASFECP,
    D1_ALQFECP,
    D1_VALFECP,
    D1_ALIQCMP,
    D1_DIFAL,
    D1_BSFCCMP,
    D1_ALFCCMP,
    D1_VFCPDIF,
    D1_AFCPANT,
    D1_VFCPANT,
    D1_BRICMS,
    D1_ALIQSOL,
    D1_MARGEM,
    D1_ICMSRET,
    D1_BSFCPST,
    D1_ALFCPST,
    D1_VFECPST,
    D1_BASIMP5,
    D1_ALQIMP5,
    D1_VALIMP5,
    D1_BASIMP6,
    D1_ALQIMP6,
    D1_VALIMP6,
    D1_ALIQII,
    D1_II,
    D1_CIF,
    D1_TIPO_NF,
    D1_OP,
    D1_CC,
    D1_CONTA,
    D1_PESO,
    D1_DATORI,
    D1_NFORI,
    D1_SERIORI,
    D1_ITEMORI,
    D1_ORIGLAN,
    DATA_PARA_TRANSFERENCIA
FROM
    WOSK_SERVICO_ENVIA_PROTHEUS_ENTRADAS_ITEM_LOG (NOLOCK)
WHERE
    D1_FILIAL = '{F1_FILIAL}'
    AND D1_DOC = '{F1_DOC}'
    AND D1_SERIE = '{F1_SERIE}'
    AND D1_FORNECE = '{F1_FORNECE}'
    AND D1_LOJA = '{F1_LOJA}'

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.

O item é marcado como “Enviando” no início, tem os valores numéricos normalizados (cabeçalho e itens) e, ao final, registra o retorno e a situação final (sucesso/erro/suspenso) para auditoria.

Estruturação de Dados

O payload enviado ao Protheus segue o schema definido na lista de campos da fila. Abaixo está o mapeamento oficial de origem → payload.

Cabeçalho do documento

Campo no payloadCampo de origem
F1_FILIALF1_FILIAL
F1_DOCF1_DOC
F1_SERIEF1_SERIE
F1_FORNECEF1_FORNECE
F1_LOJAF1_LOJA
F1_CONDF1_COND
F1_XNATURF1_XNATUR
F1_DUPLF1_DUPL
F1_EMISSAOF1_EMISSAO
F1_DTDIGITF1_DTDIGIT
F1_RECBMTOF1_RECBMTO
F1_ESTF1_EST
F1_ESTPRESF1_ESTPRES
F1_TIPOF1_TIPO
F1_FORMULF1_FORMUL
F1_ESPECIEF1_ESPECIE
F1_VALMERCF1_VALMERC
F1_VALBRUTF1_VALBRUT
F1_FRETEF1_FRETE
F1_DESPESAF1_DESPESA
F1_SEGUROF1_SEGURO
F1_DESCONTF1_DESCONT
F1_BASEICMF1_BASEICM
F1_VALICMF1_VALICM
F1_BASEIPIF1_BASEIPI
F1_VALIPIF1_VALIPI
F1_BRICMSF1_BRICMS
F1_ICMSRETF1_ICMSRET
F1_BASIMP5F1_BASIMP5
F1_VALIMP5F1_VALIMP5
F1_BASIMP6F1_BASIMP6
F1_VALIMP6F1_VALIMP6
F1_BASEPS3BASEPS3
F1_VALPS3VALPS3
F1_BASECF3BASECF3
F1_VALCF3VALCF3
F1_MUORITRF1_MUORITR
F1_UFORITRF1_UFORITR
F1_MUDESTRF1_MUDESTR
F1_UFDESTRF1_UFDESTR
F1_IIF1_II
F1_CIFF1CIF
F1_TIPO_NFF1_TIPO_NF
F1_CHVNFEF1_CHVNFE
F1_DAUTNFEF1_DAUTNFE
F1_HAUTNFEF1_HAUTNFE
F3_PROTOCF1_PROTOC
F1_NFELETRF1_NFELETR
F1_EMINFEF1_EMINFE
F1_HORNFEF1_HORNFE
F1_TPFRETEF1_TPFRETE
F1_TPCTEF1_TPCTE
F1_PLIQUIP1_PLIQUI
F1_PBRUTOP1_PBRUTO
F1_ESPECI1P1_ESPECI1
F1_VOLUME1P1_VOLUME1
F1_ORIGLANF1_ORIGLAN
F1_NFORIGF1_NFORIG
F1_SERORIGF1_SERORIG
F1_NUMTRIBF1_NUMTRIB
F1_MOEDAF1_MOEDA
F1_PREFIXOF1_PREFIXO
F1_STATUSF1_STATUS
F1_ESTPRES_2F1_ESTPRES_2
F1_SDOCF1_SDOC
F1_TRANSPF1_TRANSP
F1_XNATOPEF1_XNATOPE
F1_XCANALF1_XCANAL
F3_DTCANCF3_DTCANC
F3_CODRSEFF3_CODRSEF
CREPROCESSACREPROCESSA

ITENS

Campo no payloadCampo de origem
D1_FILIALD1_FILIAL
D1_ITEMD1_ITEM
D1_CODD1_COD
D1_TPB1_TP
D1_UMB1_UM
D1_LOCALB1_LOCAL
D1_GRUPOB1_GRUPO
D1_TECD1_TEC
D1_QUANTD1_QUANT
D1_VUNITD1_VUNIT
D1_TOTALD1_TOTAL
D1_DESCD1_DESC
D1_VALDESCD1_VALDESC
D1_SEGUROD1_SEGURO
D1_VALFRED1_VALFRE
D1_DESPESAD1_DESPESA
D1_EMISSAOD1_EMISSAO
D1_DTDIGITD1_DTDIGIT
D1_DOCD1_DOC
D1_SERIED1_SERIE
D1_SDOCF1_SDOC
D1_TIPOD1_TIPO
D1_FORNECED1_FORNECE
D1_LOJAD1_LOJA
D1_CLASFISD1_CLASFIS
D1_OPERD1_OPER
D1_CFD1_CF
D1_BASEIPID1_BASEIPI
D1_IPID1_IPI
D1_VALIPID1_VALIPI
D1_BASEICMD1_BASEICM
D1_PICMD1_PICM
D1_VALICMD1_VALICM
D1_VRDICMSD1_VRDICMS
D1_VALANTID1_VALANTI
D1_ICMSDIFD1_ICMSDIF
D1_BASFECPD1_BASFECP
D1_ALQFECPD1_ALQFECP
D1_VALFECPD1_VALFECP
D1_ALIQCMPD1_ALIQCMP
D1_DIFALD1_DIFAL
D1_BSFCCMPD1_BSFCCMP
D1_ALFCCMPD1_ALFCCMP
D1_VFCPDIFD1_VFCPDIF
D1_AFCPANTD1_AFCPANT
D1_VFCPANTD1_VFCPANT
D1_BRICMSD1_BRICMS
D1_ALIQSOLD1_ALIQSOL
D1_MARGEMD1_MARGEM
D1_ICMSRETD1_ICMSRET
D1_BSFCPSTD1_BSFCPST
D1_ALFCPSTD1_ALFCPST
D1_VFECPSTD1_VFECPST
D1_BASIMP5D1_BASIMP5
D1_ALQIMP5D1_ALQIMP5
D1_VALIMP5D1_VALIMP5
D1_BASIMP6D1_BASIMP6
D1_ALQIMP6D1_ALQIMP6
D1_VALIMP6D1_VALIMP6
D1_ALIQIID1_ALIQII
D1_IID1_II
D1_CIFD1_CIF
D1_TIPO_NFD1_TIPO_NF
D1_OPD1_OP
D1_CCD1_CC
D1_CONTAD1_CONTA
D1_PESOD1_PESO
D1_DATORID1_DATORI
D1_NFORID1_NFORI
D1_SERIORID1_SERIORI
D1_ITEMORID1_ITEMORI
D1_ORIGLAND1_ORIGLAN

Exemplo de payload enviado

{
  "F1_FILIAL": "",
  "F1_DOC": "",
  "F1_SERIE": "",
  "F1_FORNECE": "",
  "F1_LOJA": "",
  "F1_COND": "",
  "F1_XNATUR": "",
  "F1_DUPL": "",
  "F1_EMISSAO": "",
  "F1_DTDIGIT": "",
  "F1_RECBMTO": "",
  "F1_EST": "",
  "F1_ESTPRES": "",
  "F1_TIPO": "",
  "F1_FORMUL": "",
  "F1_ESPECIE": "",
  "F1_VALMERC": 0,
  "F1_VALBRUT": 0,
  "F1_FRETE": 0,
  "F1_DESPESA": 0,
  "F1_SEGURO": 0,
  "F1_DESCONT": 0,
  "F1_BASEICM": 0,
  "F1_VALICM": 0,
  "F1_BASEIPI": 0,
  "F1_VALIPI": 0,
  "F1_BRICMS": 0,
  "F1_ICMSRET": 0,
  "F1_BASIMP5": 0,
  "F1_VALIMP5": 0,
  "F1_BASIMP6": 0,
  "F1_VALIMP6": 0,
  "F1_BASEPS3": 0,
  "F1_VALPS3": 0,
  "F1_BASECF3": 0,
  "F1_VALCF3": 0,
  "F1_MUORITR": "",
  "F1_UFORITR": "",
  "F1_MUDESTR": "",
  "F1_UFDESTR": "",
  "F1_II": 0,
  "F1_CIF": 0,
  "F1_TIPO_NF": "",
  "F1_CHVNFE": "",
  "F1_DAUTNFE": "",
  "F1_HAUTNFE": "",
  "F3_PROTOC": "",
  "F1_NFELETR": "",
  "F1_EMINFE": "",
  "F1_HORNFE": "",
  "F1_TPFRETE": "",
  "F1_TPCTE": "",
  "F1_PLIQUI": 0,
  "F1_PBRUTO": 0,
  "F1_ESPECI1": "",
  "F1_VOLUME1": 0,
  "F1_ORIGLAN": "",
  "F1_NFORIG": "",
  "F1_SERORIG": "",
  "F1_NUMTRIB": "",
  "F1_MOEDA": 0,
  "F1_PREFIXO": "",
  "F1_STATUS": "",
  "F1_SDOC": "",
  "F1_TRANSP": "",
  "F1_XNATOPE": "",
  "F1_XCANAL": "",
  "F3_DTCANC": "",
  "F3_CODRSEF": "",
  "CREPROCESSA": "",
  "ITENS": [
    {
      "D1_FILIAL": "",
      "D1_ITEM": "",
      "D1_COD": "",
      "D1_TP": "",
      "D1_UM": "",
      "D1_LOCAL": "",
      "D1_GRUPO": "",
      "D1_TEC": "",
      "D1_QUANT": 0,
      "D1_VUNIT": 0,
      "D1_TOTAL": 0,
      "D1_DESC": 0,
      "D1_VALDESC": 0,
      "D1_SEGURO": 0,
      "D1_VALFRE": 0,
      "D1_DESPESA": 0,
      "D1_EMISSAO": "",
      "D1_DTDIGIT": "",
      "D1_DOC": "",
      "D1_SERIE": "",
      "D1_SDOC": "",
      "D1_TIPO": "",
      "D1_FORNECE": "",
      "D1_LOJA": "",
      "D1_CLASFIS": "",
      "D1_OPER": "",
      "D1_CF": "",
      "D1_BASEIPI": 0,
      "D1_IPI": 0,
      "D1_VALIPI": 0,
      "D1_BASEICM": 0,
      "D1_PICM": 0,
      "D1_VALICM": 0,
      "D1_VRDICMS": 0,
      "D1_VALANTI": 0,
      "D1_ICMSDIF": 0,
      "D1_BASFECP": 0,
      "D1_ALQFECP": 0,
      "D1_VALFECP": 0,
      "D1_ALIQCMP": 0,
      "D1_DIFAL": 0,
      "D1_BSFCCMP": 0,
      "D1_ALFCCMP": 0,
      "D1_VFCPDIF": 0,
      "D1_AFCPANT": 0,
      "D1_VFCPANT": 0,
      "D1_BRICMS": 0,
      "D1_ALIQSOL": 0,
      "D1_MARGEM": 0,
      "D1_ICMSRET": 0,
      "D1_BSFCPST": 0,
      "D1_ALFCPST": 0,
      "D1_VFECPST": 0,
      "D1_BASIMP5": 0,
      "D1_ALQIMP5": 0,
      "D1_VALIMP5": 0,
      "D1_BASIMP6": 0,
      "D1_ALQIMP6": 0,
      "D1_VALIMP6": 0,
      "D1_ALIQII": 0,
      "D1_II": 0,
      "D1_CIF": 0,
      "D1_TIPO_NF": "",
      "D1_OP": "",
      "D1_CC": "",
      "D1_CONTA": "",
      "D1_PESO": 0,
      "D1_DATORI": "",
      "D1_NFORI": "",
      "D1_SERIORI": "",
      "D1_ITEMORI": "",
      "D1_ORIGLAN": ""
    }
  ]
}



Tratamento de Dados

Antes do envio ao Protheus, o payload é normalizado para consistência numérica no cabeçalho e nos itens.

Padronização numérica (setNumeric)
- F1_VALMERC, F1_VALBRUT, F1_FRETE, F1_DESPESA, F1_SEGURO, F1_DESCONT, F1_BASEICM, F1_VALICM, F1_BASEIPI, F1_VALIPI, F1_BRICMS, F1_ICMSRET, F1_BASIMP5, F1_VALIMP5, F1_BASIMP6, F1_VALIMP6, F1_BASEPS3, F1_VALPS3, F1_BASECF3, F1_VALCF3, F1_II, F1_CIF, F1_PLIQUI, F1_PBRUTO, F1_VOLUME1, F1_MOEDA: normalizados com o padrão do setNumeric(...).
- D1_QUANT: normalizado com 3 casas decimais (setNumeric(..., 3, false)).
- D1_VUNIT: normalizado com 5 casas decimais (setNumeric(..., 5, false)).
- D1_TOTAL, D1_DESC, D1_VALDESC, D1_SEGURO, D1_VALFRE, D1_DESPESA, D1_BASEIPI, D1_IPI, D1_VALIPI, D1_BASEICM, D1_PICM, D1_VALICM, D1_VRDICMS, D1_VALANTI, D1_ICMSDIF, D1_BASFECP, D1_ALQFECP, D1_VALFECP, D1_ALIQCMP, D1_DIFAL, D1_BSFCCMP, D1_ALFCCMP, D1_VFCPDIF, D1_AFCPANT, D1_VFCPANT, D1_BRICMS, D1_ALIQSOL, D1_MARGEM, D1_ICMSRET, D1_BSFCPST, D1_ALFCPST, D1_VFECPST, D1_BASIMP5, D1_ALQIMP5, D1_VALIMP5, D1_BASIMP6, D1_ALQIMP6, D1_VALIMP6, D1_ALIQII, D1_II, D1_CIF, D1_PESO: normalizados com o padrão do setNumeric(...).

Integração com o Protheus

Chamada de integração com o Protheus
- Chamada: Requisição HTTP
- Recurso: documento_entrada
- Método HTTP: POST
- Cabeçalhos:
  - tenantId: <primeiros 2 caracteres de F1_FILIAL>,<F1_FILIAL>

Tratamento de retorno
- Ausência de resposta: gera erro com mensagem JSON: NÃO HOUVE RESPOSTA.
- Resposta inválida/inesperada: se não for array ou não contiver Mensagem, gera erro com JSON: NÃO FOI POSSÍVEL DECODIFICAR A RESPOSTA.
- Ajuste de sucesso por mensagem: quando a mensagem detalhada contém indicação de “já cadastrado”, a resposta é tratada como sucesso (Mensagem = OK) e o campo code é removido (se existir).
- Condição de erro: quando existir code na resposta ou quando Mensagem = ERRO, o processamento é marcado como falha.
- Condição de sucesso: quando o retorno é considerado OK, o item é finalizado como sucesso e aciona os marcadores correlatos quando aplicável.

Rotinas Inteligentes

- Documento de Saida Integrado (rotina inteligente): chamada antes do envio ao Protheus, quando o documento de entrada representa devolução e existe chave de origem (D1_NFORI e D1_SERIORI). Garante que o documento de saída associado esteja integrado para permitir consistência do relacionamento.
link: Documento de Saida Integrado
- Nota Fiscal Omni Integrado (rotina inteligente): chamada antes do envio ao Protheus, quando o documento de entrada está relacionado a devolução no contexto omni. Evita prosseguir com dependências pendentes de integração.
link: Nota Fiscal Omni Integrado
- Documento de Cancelamento de Entrada (rotina inteligente): chamada após o retorno de sucesso do envio do documento de entrada. Encaminha o cancelamento correlato para manter o status consistente no Protheus.
link: Documento de Cancelamento de Entrada

Tratamento de retorno

Persistência do resultado: o item processado é atualizado na tabela wosk_queue (base integrador), registrando retorno, mensagem, requisicao, tempo e situacao.

Situações utilizadas:
- 1: Em envio.
- 2: Sucesso.
- 3: Suspenso por dependência.
- 4: Erro.

Encaminhamento em cenário de erro

Quando a falha ocorre por dependência prévia (ex.: integração de origem não concluída), o item pode ser marcado como suspenso e manter informações de tipo/chave para rastreio. Demais falhas permanecem como erro com mensagem registrada para correção e reprocessamento.

Notificação

Em cenário de falhas, a notificação recupera itens com erro na tabela wosk_queue para o serviço ProtheusDocumentoEntradaLog, ordenando por data de processamento para priorizar ocorrências mais antigas.
SELECT
    `token`,
    `acao`,
    `chave`,
    `data_adicionado`,
    `data`,
    `mensagem` AS 'ERRO'
FROM
    `{BASE_INTEGRADOR}`.`wosk_queue`
WHERE
    `acao` = 'ProtheusDocumentoEntradaLog'
    AND `situacao` = 4
ORDER BY
    `data` ASC

Fluxo do Processo

Diagrama sem nome.jpg


Critérios de Aceitação

ProcessoSubprocessoDescriçãoSituação esperada
CapturadorCaptura paginada por dataAo capturar documentos na view WOSK_SERVICO_ENVIA_PROTHEUS_ENTRADAS_LOG, deve filtrar por DATA_PARA_TRANSFERENCIA e paginar ordenando por data, atualizando o controle de posição (offset/chave/data) a cada lote processado.Processamento avança sem duplicidades, mantendo continuidade por posição e priorizando registros mais antigos.
CapturadorEstruturação do conteúdoPara cada documento capturado, deve consultar os itens na view WOSK_SERVICO_ENVIA_PROTHEUS_ENTRADAS_ITEM_LOG e anexar a lista completa de itens ao conteúdo do item na fila.Conteúdo do item na fila inclui ITENS completos para composição do payload.
Fila de ProcessamentoNormalização numéricaAo processar um item pendente, deve normalizar campos numéricos do cabeçalho e itens, aplicando precisão diferenciada para D1_QUANT (3 casas, false) e D1_VUNIT (5 casas, false).Payload com consistência numérica, pronto para envio ao Protheus.
Fila de ProcessamentoIntegração e persistência do retornoApós enviar ao Protheus (POST no recurso documento_entrada com header tenantId), deve validar a resposta e registrar em wosk_queue o retorno, mensagem e situação final. Quando a mensagem indicar “já cadastrado”, deve tratar como sucesso.Fila atualizada com situação final e detalhes para auditoria; em sucesso, os marcadores correlatos são acionados quando aplicável.