Ir para o conteúdo principal

ProtheusDocumentoEntrada (STATUS: PARCIAL)

Documentação Técnica

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


Histórico de Versões

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

Descrição

Este processo prepara documentos de entrada do LINX e os encaminha para integração no Protheus.
O fluxo garante captura controlada, estruturação completa dos dados e registro do resultado de processamento.

Capturador

Descrição Conceitual

Permite capturar documentos de entrada pendentes na origem e registrá-los para processamento em fila, mantendo controle de posição (offset, chave e data) para evitar recapturas e garantir continuidade.

Além da captura automática por agendador de tarefas, permite captura manual por chave informada, montando filtros dinâmicos para localizar um documento específico e registrar seu conteúdo completo para integração.

Fonte

Origem consultada: view WOSK_SERVICO_ENVIA_PROTHEUS_ENTRADAS.

Observação: a consulta utiliza SELECT {{TOP}} para limitar lotes de captura (conceito de semáforo).
link: Semáforo

Operações com Dados

Leitura: consulta documentos com CAPTURADO_ISNAPP = 0 na origem, com limite configurável por lote, e para cada documento recupera seus detalhes (itens e complemento de importação) antes de registrá-lo na fila.

Consulta principal (lote):

SELECT  TOP {{LIMITE_CONFIGURADO}} 
    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_SDOC,
    F1_TRANSP,
    F1_XNATOPE,
    F1_XCANAL,
    F3_DTCANC,
    F3_CODRSEF,
    F1_XCBSIBS,
    CREPROCESSA,
    NOME_CLIFOR,
    DATA_PARA_TRANSFERENCIA
FROM 
    WOSK_SERVICO_ENVIA_PROTHEUS_ENTRADAS (NOLOCK)
WHERE CAPTURADO_ISNAPP = 0

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,
    D1_DESCZFP,
    D1_DESCZFC,
    D1_DESCZFR,
    DKD_XCBSBS,
    DKD_XCBSAL,
    DKD_XCBSVL,
    DKD_XIBSBS,
    DKD_XIBSAL,
    DKD_XIBSVL,
    DATA_PARA_TRANSFERENCIA
FROM 
    WOSK_SERVICO_ENVIA_PROTHEUS_ENTRADAS_ITEM (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}'

Consulta de complemento de importação:

SELECT
                        CD5_FILIAL,
                        CD5_ITEM,
                        CD5_DOC,
                        CD5_SERIE,
                        CD5_ESPEC,
                        CD5_FORNEC,
                        CD5_LOJA,
                        CD5_TPIMP,
                        CD5_DOCIMP,
                        CD5_BSPIS,
                        CD5_ALPIS,
                        CD5_VLPIS,
                        CD5_BSCOF,
                        CD5_ALCOF,
                        CD5_VLCOF,
                        CD5_LOCAL,
                        CD5_DTPCOF,
                        CD5_DTPPIS,
                        CD5_NDI,
                        CD5_DTDI,
                        CD5_LOCDES,
                        CD5_UFDES,
                        CD5_DTDES,
                        CD5_CODEXP,
                        CD5_LOJEXP,
                        CD5_NADIC,
                        CD5_SQADIC,
                        CD5_BCIMP,
                        CD5_CODFAB,
                        CD5_LOJFAB,
                        CD5_DSPAD,
                        CD5_VDESDI,
                        CD5_VLRII,
                        CD5_VLRIOF,
                        CD5_ACDRAW,
                        CD5_VAFRMM,
                        CD5_INTERM,
                        CD5_UFTERC,
                        CD5_CNPJAE,
                        CD5_VTRANS,
                        CD5_SDOC
                    FROM 
                        WOSK_SERVICO_ENVIA_PROTHEUS_ENTRADAS_IMPORTACAO (NOLOCK)
                    WHERE
                        CD5_FILIAL = '{F1_FILIAL}'
                        AND CD5_DOC = '{F1_DOC}'
                        AND CD5_SERIE = '{F1_SERIE}'
                        AND CD5_FORNEC = '{F1_FORNECE}'
                        AND CD5_LOJA = '{F1_LOJA}'

Captura manual: a consulta é montada dinamicamente conforme as partes informadas na chave (filial, documento, série e, opcionalmente, fornecedor/loja/tipo/natureza de operação):

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_SDOC,
                                F1_TRANSP,
                                F1_XNATOPE,
                                F1_XCANAL,
                                F3_DTCANC,
                                F3_CODRSEF,
                                F1_XCBSIBS,
                                CREPROCESSA,
                                NOME_CLIFOR,
                                DATA_PARA_TRANSFERENCIA
                            FROM 
                                WOSK_SERVICO_ENVIA_PROTHEUS_ENTRADAS (NOLOCK)
WHERE
  F1_FILIAL = '{F1_FILIAL}'
  AND F1_DOC = '{F1_DOC}'
  AND F1_SERIE = '{F1_SERIE}'
  [AND F1_FORNECE = '{F1_FORNECE}']
  [AND F1_LOJA = '{F1_LOJA}']
  [AND F1_TIPO = '{F1_TIPO}']
  [AND F1_XNATOPE = '{F1_XNATOPE}']

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.

Durante o processamento, o item é marcado como “Enviando”, tem seu payload normalizado (principalmente valores numéricos e consistência de itens), e ao final tem o retorno registrado com situação de sucesso/erro 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 payload Campo de origem
F1_FILIAL F1_FILIAL
F1_DOC F1_DOC
F1_SERIE F1_SERIE
F1_FORNECE F1_FORNECE
F1_LOJA F1_LOJA
F1_COND F1_COND
F1_XNATUR F1_XNATUR
F1_DUPL F1_DUPL
F1_EMISSAO F1_EMISSAO
F1_DTDIGIT F1_DTDIGIT
F1_RECBMTO F1_RECBMTO
F1_EST F1_EST
F1_ESTPRES F1_ESTPRES
F1_TIPO F1_TIPO
F1_FORMUL F1_FORMUL
F1_ESPECIE F1_ESPECIE
F1_VALMERC F1_VALMERC
F1_VALBRUT F1_VALBRUT
F1_FRETE F1_FRETE
F1_DESPESA F1_DESPESA
F1_SEGURO F1_SEGURO
F1_DESCONT F1_DESCONT
F1_BASEICM F1_BASEICM
F1_VALICM F1_VALICM
F1_BASEIPI F1_BASEIPI
F1_VALIPI F1_VALIPI
F1_BRICMS F1_BRICMS
F1_ICMSRET F1_ICMSRET
F1_BASIMP5 F1_BASIMP5
F1_VALIMP5 F1_VALIMP5
F1_BASIMP6 F1_BASIMP6
F1_VALIMP6 F1_VALIMP6
F1_BASEPS3 BASEPS3
F1_VALPS3 VALPS3
F1_BASECF3 BASECF3
F1_VALCF3 VALCF3
F1_MUORITR F1_MUORITR
F1_UFORITR F1_UFORITR
F1_MUDESTR F1_MUDESTR
F1_UFDESTR F1_UFDESTR
F1_II F1_II
F1_CIF F1CIF
F1_TIPO_NF F1_TIPO_NF
F1_CHVNFE F1_CHVNFE
F1_DAUTNFE F1_DAUTNFE
F1_HAUTNFE F1_HAUTNFE
F3_PROTOC F1_PROTOC
F1_NFELETR F1_NFELETR
F1_EMINFE F1_EMINFE
F1_HORNFE F1_HORNFE
F1_TPFRETE F1_TPFRETE
F1_TPCTE F1_TPCTE
F1_PLIQUI P1_PLIQUI
F1_PBRUTO P1_PBRUTO
F1_ESPECI1 P1_ESPECI1
F1_VOLUME1 P1_VOLUME1
F1_ORIGLAN F1_ORIGLAN
F1_NFORIG F1_NFORIG
F1_SERORIG F1_SERORIG
F1_NUMTRIB F1_NUMTRIB
F1_MOEDA F1_MOEDA
F1_PREFIXO F1_PREFIXO
F1_STATUS F1_STATUS
F1_SDOC F1_SDOC
F1_TRANSP F1_TRANSP
F1_XNATOPE F1_XNATOPE
F1_XCANAL F1_XCANAL
F3_DTCANC F3_DTCANC
F3_CODRSEF F3_CODRSEF
F1_XCBSIBS F1_XCBSIBS
CREPROCESSA CREPROCESSA

ITENS

Campo no payload Campo de origem
D1_FILIAL D1_FILIAL
D1_ITEM D1_ITEM
D1_COD D1_COD
D1_TP B1_TP
D1_UM B1_UM
D1_LOCAL B1_LOCAL
D1_GRUPO B1_GRUPO
D1_TEC D1_TEC
D1_QUANT D1_QUANT
D1_VUNIT D1_VUNIT
D1_TOTAL D1_TOTAL
D1_DESC D1_DESC
D1_VALDESC D1_VALDESC
D1_SEGURO D1_SEGURO
D1_VALFRE D1_VALFRE
D1_DESPESA D1_DESPESA
D1_EMISSAO D1_EMISSAO
D1_DTDIGIT D1_DTDIGIT
D1_DOC D1_DOC
D1_SERIE D1_SERIE
D1_SDOC F1_SDOC
D1_TIPO D1_TIPO
D1_FORNECE D1_FORNECE
D1_LOJA D1_LOJA
D1_CLASFIS D1_CLASFIS
D1_OPER D1_OPER
D1_CF D1_CF
D1_BASEIPI D1_BASEIPI
D1_IPI D1_IPI
D1_VALIPI D1_VALIPI
D1_BASEICM D1_BASEICM
D1_PICM D1_PICM
D1_VALICM D1_VALICM
D1_VRDICMS D1_VRDICMS
D1_VALANTI D1_VALANTI
D1_ICMSDIF D1_ICMSDIF
D1_BASFECP D1_BASFECP
D1_ALQFECP D1_ALQFECP
D1_VALFECP D1_VALFECP
D1_ALIQCMP D1_ALIQCMP
D1_DIFAL D1_DIFAL
D1_BSFCCMP D1_BSFCCMP
D1_ALFCCMP D1_ALFCCMP
D1_VFCPDIF D1_VFCPDIF
D1_AFCPANT D1_AFCPANT
D1_VFCPANT D1_VFCPANT
D1_BRICMS D1_BRICMS
D1_ALIQSOL D1_ALIQSOL
D1_MARGEM D1_MARGEM
D1_ICMSRET D1_ICMSRET
D1_BSFCPST D1_BSFCPST
D1_ALFCPST D1_ALFCPST
D1_VFECPST D1_VFECPST
D1_BASIMP5 D1_BASIMP5
D1_ALQIMP5 D1_ALQIMP5
D1_VALIMP5 D1_VALIMP5
D1_BASIMP6 D1_BASIMP6
D1_ALQIMP6 D1_ALQIMP6
D1_VALIMP6 D1_VALIMP6
D1_ALIQII D1_ALIQII
D1_II D1_II
D1_CIF D1_CIF
D1_TIPO_NF D1_TIPO_NF
D1_OP D1_OP
D1_CC D1_CC
D1_CONTA D1_CONTA
D1_PESO D1_PESO
D1_DATORI D1_DATORI
D1_NFORI D1_NFORI
D1_SERIORI D1_SERIORI
D1_ITEMORI D1_ITEMORI
D1_ORIGLAN D1_ORIGLAN
D1_DESCZFP D1_DESCZFP
D1_DESCZFC D1_DESCZFC
D1_DESCZFR D1_DESCZFR
DKD_XCBSBS DKD_XCBSBS
DKD_XCBSAL DKD_XCBSAL
DKD_XCBSVL DKD_XCBSVL
DKD_XIBSBS DKD_XIBSBS
DKD_XIBSAL DKD_XIBSAL
DKD_XIBSVL DKD_XIBSVL

COMPLEMENTO_IMPORTACAO

Campo no payload Campo de origem
CD5_FILIAL CD5_FILIAL
CD5_ITEM CD5_ITEM
CD5_DOC CD5_DOC
CD5_SERIE CD5_SERIE
CD5_ESPEC CD5_ESPEC
CD5_FORNEC CD5_FORNEC
CD5_LOJA CD5_LOJA
CD5_TPIMP CD5_TPIMP
CD5_DOCIMP CD5_DOCIMP
CD5_BSPIS CD5_BSPIS
CD5_ALPIS CD5_ALPIS
CD5_VLPIS CD5_VLPIS
CD5_BSCOF CD5_BSCOF
CD5_ALCOF CD5_ALCOF
CD5_VLCOF CD5_VLCOF
CD5_LOCAL CD5_LOCAL
CD5_DTPCOF CD5_DTPCOF
CD5_DTPPIS CD5_DTPPIS
CD5_NDI CD5_NDI
CD5_DTDI CD5_DTDI
CD5_LOCDES CD5_LOCDES
CD5_UFDES CD5_UFDES
CD5_DTDES CD5_DTDES
CD5_CODEXP CD5_CODEXP
CD5_LOJEXP CD5_LOJEXP
CD5_NADIC CD5_NADIC
CD5_SQADIC CD5_SQADIC
CD5_BCIMP CD5_BCIMP
CD5_CODFAB CD5_CODFAB
CD5_LOJFAB CD5_LOJFAB
CD5_DSPAD CD5_DSPAD
CD5_VDESDI CD5_VDESDI
CD5_VLRII CD5_VLRII
CD5_VLRIOF CD5_VLRIOF
CD5_ACDRAW CD5_ACDRAW
CD5_VAFRMM CD5_VAFRMM
CD5_INTERM CD5_INTERM
CD5_UFTERC CD5_UFTERC
CD5_CNPJAE CD5_CNPJAE
CD5_VTRANS CD5_VTRANS
CD5_SDOC CD5_SDOC

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": "",
  "F1_XCBSIBS": "",
  "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": "",
      "D1_DESCZFP": 0,
      "D1_DESCZFC": 0,
      "D1_DESCZFR": 0,
      "DKD_XCBSBS": 0,
      "DKD_XCBSAL": 0,
      "DKD_XCBSVL": 0,
      "DKD_XIBSBS": 0,
      "DKD_XIBSAL": 0,
      "DKD_XIBSVL": 0
    }
  ],
  "COMPLEMENTO_IMPORTACAO": [
    {
      "CD5_FILIAL": "",
      "CD5_ITEM": "",
      "CD5_DOC": "",
      "CD5_SERIE": "",
      "CD5_ESPEC": "",
      "CD5_FORNEC": "",
      "CD5_LOJA": "",
      "CD5_TPIMP": "",
      "CD5_DOCIMP": "",
      "CD5_BSPIS": 0,
      "CD5_ALPIS": 0,
      "CD5_VLPIS": 0,
      "CD5_BSCOF": 0,
      "CD5_ALCOF": 0,
      "CD5_VLCOF": 0,
      "CD5_LOCAL": "",
      "CD5_DTPCOF": "",
      "CD5_DTPPIS": "",
      "CD5_NDI": "",
      "CD5_DTDI": "",
      "CD5_LOCDES": "",
      "CD5_UFDES": "",
      "CD5_DTDES": "",
      "CD5_CODEXP": "",
      "CD5_LOJEXP": "",
      "CD5_NADIC": "",
      "CD5_SQADIC": "",
      "CD5_BCIMP": 0,
      "CD5_CODFAB": "",
      "CD5_LOJFAB": "",
      "CD5_DSPAD": 0,
      "CD5_VDESDI": 0,
      "CD5_VLRII": 0,
      "CD5_VLRIOF": 0,
      "CD5_ACDRAW": "",
      "CD5_VAFRMM": 0,
      "CD5_INTERM": "",
      "CD5_UFTERC": "",
      "CD5_CNPJAE": "",
      "CD5_VTRANS": 0,
      "CD5_SDOC": ""
    }
  ]
}



Tratamento de Dados

Antes do envio ao Protheus, o payload é normalizado para consistência numérica e para garantir integridade dos 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, D1_DESCZFP, D1_DESCZFC, D1_DESCZFR, DKD_XCBSBS, DKD_XCBSAL, DKD_XCBSVL, DKD_XIBSBS, DKD_XIBSAL, DKD_XIBSVL: normalizados com o padrão do setNumeric(...).
- CD5_BSPIS, CD5_ALPIS, CD5_VLPIS, CD5_BSCOF, CD5_ALCOF, CD5_VLCOF, CD5_BCIMP, CD5_DSPAD, CD5_VDESDI, CD5_VLRII, CD5_VLRIOF, CD5_VAFRMM: normalizados com o padrão do setNumeric(...).

Consistência dos itens
- D1_ITEM: quando o documento possui itens com numeração duplicada, os itens são renumerados sequencialmente (1..N) para evitar colisões no envio.
- D1_ITEMORI: quando o item referencia um documento de saída (por D1_NFORI e D1_SERIORI), o valor pode ser ajustado para corresponder ao item de origem efetivamente localizado no documento de saída relacionado, com base no produto (D2_COD no documento de saída vs D1_COD no item de entrada).

Estrutura opcional
- COMPLEMENTO_IMPORTACAO: quando a lista existe mas não possui registros, o bloco é removido do payload para evitar envio de estrutura vazia.

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 processo registra o resultado na fila e dispara a marcação de integrado para o documento de entrada e o respectivo cancelamento (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, priorizando a integração prévia da nota fiscal associada. Evita prosseguir com dependências pendentes.
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 a validação/baixa do 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, situacao e dados de suspensão quando existirem.

Situações utilizadas:
- 1: Em envio (marcado no início do processamento).
- 2: Sucesso (retorno OK).
- 3: Suspenso por dependência (quando uma validação prévia relacionada a documento de origem falha e o reprocessamento depende de outro serviço).
- 4: Erro (ausência de resposta, resposta inválida ou retorno sinalizando falha).

Encaminhamento em cenário de erro

Quando a falha ocorre por dependência prévia (ex.: documento de origem ainda não integrado), o item pode ser marcado como suspenso e manter informações de tipo/chave para rastreio da causa. Demais erros são encerrados como falha e permanecem na fila com detalhes 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 ProtheusDocumentoEntrada, ordenando por data de processamento para priorizar ocorrências mais antigas. Também identifica combinações de F1_FORNECE e F1_LOJA envolvidas em erros de fornecedor/loja para suporte ao saneamento.

Consulta de itens com erro (fila):
SELECT
    `token`,
    `acao`, 
    `chave`,
    `data_adicionado`,
    `data`,
    `mensagem` AS 'ERRO'
FROM 
    `{BASE_INTEGRADOR}`.`wosk_queue`
WHERE 
    `acao` = 'ProtheusDocumentoEntrada' AND `situacao` = 4 ORDER BY `data` ASC
Consulta de fornecedores/lojas presentes em erros:
WITH q AS (
  SELECT `token` FROM `{BASE_INTEGRADOR}`.`wosk_queue` WHERE `acao` LIKE 'Protheus%' AND `mensagem` LIKE '%Fornecedor/Loja%' AND `situacao` = 4
  ),
  c AS (
      SELECT `conteudo` FROM `{BASE_INTEGRADOR}`.`wosk_queue` WHERE `token` IN (SELECT `token` FROM q)
  ),
  f AS (
      SELECT JSON_UNQUOTE(JSON_EXTRACT(`conteudo`, '$."F1_FORNECE"')) AS F1_FORNECE, JSON_UNQUOTE(JSON_EXTRACT(`conteudo`, '$."F1_LOJA"')) AS F1_LOJA FROM c
  )
  SELECT F1_FORNECE, F1_LOJA FROM f GROUP BY F1_FORNECE, F1_LOJA

Fluxo do Processo

Diagrama sem nome.jpg


Critérios de Aceitação

Processo Subprocesso Descrição Situação esperada
Capturador Captura e registro na fila Ao identificar registros pendentes na origem (CAPTURADO_ISNAPP = 0) na view WOSK_SERVICO_ENVIA_PROTHEUS_ENTRADAS, deve estruturar a chave no padrão F1_FILIAL-F1_DOC-F1_SERIE-F1_FORNECE-F1_LOJA-F1_TIPO-F1_XNATOPE, anexar ITENS e COMPLEMENTO_IMPORTACAO e registrar o item para processamento. Item pendente registrado em wosk_queue, com conteúdo completo e chave consistente.
Fila de Processamento Normalização e consistência de payload Ao processar um item pendente, deve normalizar os campos numéricos do cabeçalho, itens e complemento; aplicar precisão diferenciada para D1_QUANT (3 casas) e D1_VUNIT (5 casas); e corrigir D1_ITEM quando houver duplicidade, garantindo integridade para envio. Payload consistente e pronto para envio, sem itens duplicados e com valores numéricos padronizados.
Fila de Processamento Integração e persistência do retorno Após enviar ao Protheus (POST no recurso documento_entrada com header tenantId), deve validar a resposta, tratar “já cadastrado” como sucesso, e registrar em wosk_queue o retorno, mensagem e situação final. Em sucesso, deve acionar os marcadores correlatos (integrado/cancelamento) quando aplicável. Fila atualizada com situação final e detalhes para auditoria; em sucesso, documento marcado como integrado e cancelamento encaminhado.
Fila de Processamento Tratamento de erro Se não houver resposta, se a resposta for inválida ou se o retorno indicar falha (code presente ou Mensagem = ERRO), deve registrar o erro na fila com mensagem adequada e permitir rastreio para correção. Item marcado como erro (situacao = 4) em wosk_queue, com mensagem e retorno associados.