Ir para o conteúdo principal

ProtheusDocumentoSaidaLog (STATUS: PARCIAL)

Documentação Técnica

Nome do cliente OSKLEN
Nome do projeto Integração LINX → Protheus
Biblioteca wosk_protheus_documento_saida_fullwosk_protheus_documento_saida_log
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 ProtheusDocumentoSaidaFull.ProtheusDocumentoSaidaLog.

Descrição

Esta biblioteca organiza a integração de documentos de saída do LINX para o Protheus, garantindousando queuma cadafonte documentobaseada sejaem identificado,log preparadopara identificar e enviadopreparar comos seus itens.documentos.

Capturador

Descrição Conceitual

Realiza a captura deCaptura documentos de saída a partir de uma fonte dedicadaem log e encaminha cada documento (com seus itens) para processamento em fila, permitindocom controle de posição para continuidade porentre execuções.

A captura suporta processamento cronológico (ordenação e paginação por data), e filtragem por data.

Tambétambém permite captura manual por identificaçãchave no padrão do documento, montando o filtro de busca dinamicamente e encaminhando o resultado para a fila de integração.F2_FILIAL-F2_DOC-F2_SERIE-F2_CLIENTE-F2_LOJA.

Fonte

Origem consultada: view WOSK_SERVICO_ENVIA_PROTHEUS_SAIDAS_FULLWOSK_SERVICO_ENVIA_PROTHEUS_SAIDAS_LOG.

Operações com Dados

Leitura: consulta documentos na view de saídas Full, usando processamentoProcessamento cronológico (ordenação/paginação por data): paraa capturarcaptura lotesconsulta registros com filtro por DATA_PARA_TRANSFERENCIA, ordena por DATA_PARA_TRANSFERENCIA ASC e manterpagina continuidadecom entreOFFSET/FETCH execuções.NEXT.
link: Cronológico

Consulta base da fonte (projeção completa):

SELECT
    TEMP_FILIAL,
    TEMP_NF_SAIDA,
    TEMP_SERIE_NF,
    F2_FILIAL,
    F2_DOC,
    F2_SERIE,
    F2_CLIENTE,
    F2_LOJA,
    F2_TIPOCLI,
    F2_EST,
    F2_DUPL,
    F2_EMISSAO,
    F2_DTDIGIT,
    F2_ESPECIE,
    F2_TIPO,
    F2_COND,
    F2_XNATOPE,
    F2_XCANAL,
    F2_XNATUR,
    F2_TPFRETE,
    F2_VALMERC,
    F2_VALBRUT,
    F2_FRETE,
    F2_SEGURO,
    F2_DESPESA,
    F2_DESCONT,
    F2_VALFAT,
    F2_PREFIXO,
    F2_VALICM,
    F2_BASEICM,
    F2_ICMFRETE,
    F2_VALIPI,
    F2_BASEIPI,
    F2_ICMSRET,
    F2_BRICMS,
    F2_BASIMP6,
    F2_BASIMP5,
    F2_VALIMP6,
    F2_VALIMP5,
    F2_BASFECP,
    F2_BSFCCMP,
    F2_BSFCPST,
    F2_BASEPS3,
    F2_VALPS3,
    F2_BASECF3,
    F2_VALCF3,
    F2_MOEDA,
    F2_NFORI,
    F2_SERIORI,
    F2_UFDEST,
    F2_UFORIG,
    F2_ESPECI1,
    F2_VOLUME1,
    F2_PLIQUI,
    F2_PBRUTO,
    F2_TRANSP,
    F2_SDOC,
    F2_CHVNFE,
    F1_DAUTNFE,
    F1_HAUTNFE,
    F1_PROTOC,
    C5_PARC1,
    C5_PARC2,
    C5_PARC3,
    C5_PARC4,
    C5_PARC5,
    C5_PARC6,
    C5_PARC7,
    C5_PARC8,
    C5_PARC9,
    C5_PARC10,
    C5_PARC11,
    C5_PARC12,
    C5_DATA1,
    C5_DATA2,
    C5_DATA3,
    C5_DATA4,
    C5_DATA5,
    C5_DATA6,
    C5_DATA7,
    C5_DATA8,
    C5_DATA9,
    C5_DATA10,
    C5_DATA11,
    C5_DATA12,
    F3_DTCANC,
    F3_CODRSEF,
    CREPROCESSA,
    F2_XCODREP,
    F2_XCNPJRE,
    F2_XMARCA,
    F2_XCBSIBS,
    F2_DESCZFR,
    DATA_PARA_TRANSFERENCIA
FROM
    WOSK_SERVICO_ENVIA_PROTHEUS_SAIDAS_FULLWOSK_SERVICO_ENVIA_PROTHEUS_SAIDAS_LOG (NOLOCK)

Consulta cronológica por lote com paginação cronológica (string dinâmica):

SELECT
    --TEMP_FILIAL,
    (mesmasTEMP_NF_SAIDA,
    colunasTEMP_SERIE_NF,
    daF2_FILIAL,
    consultaF2_DOC,
    base)F2_SERIE,
    F2_CLIENTE,
    F2_LOJA,
    F2_TIPOCLI,
    F2_EST,
    F2_DUPL,
    F2_EMISSAO,
    F2_DTDIGIT,
    F2_ESPECIE,
    F2_TIPO,
    F2_COND,
    F2_XNATOPE,
    F2_XCANAL,
    F2_XNATUR,
    F2_TPFRETE,
    F2_VALMERC,
    F2_VALBRUT,
    F2_FRETE,
    F2_SEGURO,
    F2_DESPESA,
    F2_DESCONT,
    F2_VALFAT,
    F2_PREFIXO,
    F2_VALICM,
    F2_BASEICM,
    F2_ICMFRETE,
    F2_VALIPI,
    F2_BASEIPI,
    F2_ICMSRET,
    F2_BRICMS,
    F2_BASIMP6,
    F2_BASIMP5,
    F2_VALIMP6,
    F2_VALIMP5,
    F2_BASFECP,
    F2_BSFCCMP,
    F2_BSFCPST,
    F2_BASEPS3,
    F2_VALPS3,
    F2_BASECF3,
    F2_VALCF3,
    F2_MOEDA,
    F2_NFORI,
    F2_SERIORI,
    F2_UFDEST,
    F2_UFORIG,
    F2_ESPECI1,
    F2_VOLUME1,
    F2_PLIQUI,
    F2_PBRUTO,
    F2_TRANSP,
    F2_SDOC,
    F2_CHVNFE,
    F1_DAUTNFE,
    F1_HAUTNFE,
    F1_PROTOC,
    C5_PARC1,
    C5_PARC2,
    C5_PARC3,
    C5_PARC4,
    C5_PARC5,
    C5_PARC6,
    C5_PARC7,
    C5_PARC8,
    C5_PARC9,
    C5_PARC10,
    C5_PARC11,
    C5_PARC12,
    C5_DATA1,
    C5_DATA2,
    C5_DATA3,
    C5_DATA4,
    C5_DATA5,
    C5_DATA6,
    C5_DATA7,
    C5_DATA8,
    C5_DATA9,
    C5_DATA10,
    C5_DATA11,
    C5_DATA12,
    F3_DTCANC,
    F3_CODRSEF,
    CREPROCESSA,
    DATA_PARA_TRANSFERENCIA
FROM
    WOSK_SERVICO_ENVIA_PROTHEUS_SAIDAS_FULLWOSK_SERVICO_ENVIA_PROTHEUS_SAIDAS_LOG (NOLOCK)
WHERE
    DATA_PARA_TRANSFERENCIA >= '{DATA_PARA_TRANSFERENCIA}'
ORDER BY
    DATA_PARA_TRANSFERENCIA ASC
OFFSET
    {OFFSET} ROWS
FETCH NEXT
    {TOP} ROWS ONLY

Consulta de itens do documento (Full)Log):

SELECT
    D2_FILIAL,
    D2_ITEM,
    D2_COD,
    D2_TP,
    D2_UM,
    D2_LOCAL,
    D2_QUANT,
    D2_PRCVEN,
    D2_PRUNIT,
    D2_TOTAL,
    D2_DESC,
    D2_DESCON,
    D2_SEGURO,
    D2_VALFRE,
    D2_DESPESA,
    D2_VALBRUT,
    D2_EMISSAO,
    D2_DTDIGIT,
    D2_DOC,
    D2_SERIE,
    D2_SDOC,
    D2_TIPO,
    D2_ESPECIE,
    D2_CLIENTE,
    D2_LOJA,
    D2_EST,
    D2_CLASFIS,
    D2_TES,
    D2_CF,
    D2_BASEIPI,
    D2_IPI,
    D2_VALIPI,
    D2_BASEICM,
    D2_PICM,
    D2_VALICM,
    D2_BASFECP,
    D2_ALQFECP,
    D2_VALFECP,
    D2_BRICMS,
    D2_ALIQSOL,
    D2_MARGEM,
    D2_ICMSRET,
    D2_BSFCPST,
    D2_ALFCPST,
    D2_VFECPST,
    D2_BASIMP5,
    D2_ALQIMP5,
    D2_VALIMP5,
    D2_BASIMP6,
    D2_ALQIMP6,
    D2_VALIMP6,
    D2_BASEPS3,
    D2_ALIQPS3,
    D2_VALPS3,
    D2_BASECF3,
    D2_ALIQCF3,
    D2_VALCF3,
    D2_DESCZFP,
    D2_DESCZFC,
    D2_BASEDES,
    D2_ALIQCMP,
    D2_PDORI,
    D2_PDDES,
    D2_PDIFAL,
    D2_BSFCCMP,
    D2_ALFCCMP,
    D2_VFCPDIF,
    D2_CC,
    D2_CONTA,
    D2_PESO,
    D2_ESTOQUE,
    D2_NFORI,
    D2_SERIORI,
    D2_ITEMORI,
    D2_XPRMDPR,
    D2_XALIQBA,
    D2_ORIGLAN,
    D2_OP,
    D2_XPDWISE,
    D2_XPDLINX,
    D2_XCOLEC,
    D2_XCOLDE,
    D2_XIBSBS,
    D2_XIBSAL,
    D2_XIBSVL,
    D2_XCBSBS,
    D2_XCBSAL,
    D2_XCBSVL,
    D2_DESCZFR,
    C6_TOTAL,
    DATA_PARA_TRANSFERENCIA
FROM
    WOSK_SERVICO_ENVIA_PROTHEUS_SAIDAS_ITEM_FULLWOSK_SERVICO_ENVIA_PROTHEUS_SAIDAS_ITEM_LOG (NOLOCK)
WHERE
    D2_FILIAL = '{F2_FILIAL}'
    AND D2_DOC = '{F2_DOC}'
    AND D2_SERIE = '{F2_SERIE}'
    AND D2_CLIENTE = '{F2_CLIENTE}'
    AND D2_LOJA = '{F2_LOJA}'

Captura manual: o filtro WHERE é construídomontado dinamicamente,dinamicamente aceitandoa identificaçãopartir comda 4 ou 5 partes,chave, sempre restringindo por F2_DOC,todos F2_SERIE,os F2_CLIENTEcampos edo F2_LOJA:padrão informado:

SELECT
    --TEMP_FILIAL,
    (mesmasTEMP_NF_SAIDA,
    colunasTEMP_SERIE_NF,
    daF2_FILIAL,
    consultaF2_DOC,
    base)F2_SERIE,
    F2_CLIENTE,
    F2_LOJA,
    F2_TIPOCLI,
    F2_EST,
    F2_DUPL,
    F2_EMISSAO,
    F2_DTDIGIT,
    F2_ESPECIE,
    F2_TIPO,
    F2_COND,
    F2_XNATOPE,
    F2_XCANAL,
    F2_XNATUR,
    F2_TPFRETE,
    F2_VALMERC,
    F2_VALBRUT,
    F2_FRETE,
    F2_SEGURO,
    F2_DESPESA,
    F2_DESCONT,
    F2_VALFAT,
    F2_PREFIXO,
    F2_VALICM,
    F2_BASEICM,
    F2_ICMFRETE,
    F2_VALIPI,
    F2_BASEIPI,
    F2_ICMSRET,
    F2_BRICMS,
    F2_BASIMP6,
    F2_BASIMP5,
    F2_VALIMP6,
    F2_VALIMP5,
    F2_BASFECP,
    F2_BSFCCMP,
    F2_BSFCPST,
    F2_BASEPS3,
    F2_VALPS3,
    F2_BASECF3,
    F2_VALCF3,
    F2_MOEDA,
    F2_NFORI,
    F2_SERIORI,
    F2_UFDEST,
    F2_UFORIG,
    F2_ESPECI1,
    F2_VOLUME1,
    F2_PLIQUI,
    F2_PBRUTO,
    F2_TRANSP,
    F2_SDOC,
    F2_CHVNFE,
    F1_DAUTNFE,
    F1_HAUTNFE,
    F1_PROTOC,
    C5_PARC1,
    C5_PARC2,
    C5_PARC3,
    C5_PARC4,
    C5_PARC5,
    C5_PARC6,
    C5_PARC7,
    C5_PARC8,
    C5_PARC9,
    C5_PARC10,
    C5_PARC11,
    C5_PARC12,
    C5_DATA1,
    C5_DATA2,
    C5_DATA3,
    C5_DATA4,
    C5_DATA5,
    C5_DATA6,
    C5_DATA7,
    C5_DATA8,
    C5_DATA9,
    C5_DATA10,
    C5_DATA11,
    C5_DATA12,
    F3_DTCANC,
    F3_CODRSEF,
    CREPROCESSA,
    DATA_PARA_TRANSFERENCIA
FROM
    WOSK_SERVICO_ENVIA_PROTHEUS_SAIDAS_FULLWOSK_SERVICO_ENVIA_PROTHEUS_SAIDAS_LOG (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}'

Fila de Processamento

Descrição Conceitual

A fila recupera um documento pendente e utiliza o conteúdo completo (cabeçalho e itens) como payload para integração.o no Protheus. Antes do envio, valida dependências e aplica padronizações numéricas obrigatórias,rias garantindopara consistência de valores no Protheus.valores.

Ao final, registra o retorno da integração e a situação do processamento na basetabela de filafila, parapermitindo auditoria, notificação de erros e reprocessamento.

Estruturação de Dados

O payload enviado ao Protheus segue o schema definido no array $field da fila. Abaixo está o mapeamento oficial de origem → payload.

Cabeçalho do documento

Campo no payload Campo de origem
F2_FILIAL F2_FILIAL
F2_DOC F2_DOC
F2_SERIE F2_SERIE
F2_CLIENTE F2_CLIENTE
F2_LOJA F2_LOJA
F2_TIPOCLI F2_TIPOCLI
F2_EST F2_EST
F2_DUPL F2_DUPL
F2_EMISSAO F2_EMISSAO
F2_DTDIGIT F2_DTDIGIT
F2_ESPECIE F2_ESPECIE
F2_TIPO F2_TIPO
F2_COND F2_COND
F2_XNATOPE F2_XNATOPE
F2_XCANAL F2_XCANAL
F2_XNATUR F2_XNATUR
F2_TPFRETE F2_TPFRETE
F2_VALMERC F2_VALMERC
F2_VALBRUT F2_VALBRUT
F2_FRETE F2_FRETE
F2_SEGURO F2_SEGURO
F2_DESPESA F2_DESPESA
F2_DESCONT F2_DESCONT
F2_VALFAT F2_VALFAT
F2_PREFIXO F2_PREFIXO
F2_VALICM F2_VALICM
F2_BASEICM F2_BASEICM
F2_ICMFRET F2_ICMFRETE
F2_VALIPI F2_VALIPI
F2_BASEIPI F2_BASEIPI
F2_ICMSRET F2_ICMSRET
F2_BRICMS F2_BRICMS
F2_BASIMP5 F2_BASIMP5
F2_BASIMP6 F2_BASIMP6
F2_VALIMP5 F2_VALIMP5
F2_VALIMP6 F2_VALIMP6
F2_BASFECP F2_BASFECP
F2_BSFCCMP F2_BSFCCMP
F2_BSFCPST F2_BSFCPST
F2_BASEPS3 F2_BASEPS3
F2_VALPS3 F2_VALPS3
F2_BASECF3 F2_BASECF3
F2_VALCF3 F2_VALCF3
F2_MOEDA F2_MOEDA
F2_NFORI F2_NFORI
F2_SERIORI F2_SERIORI
F2_UFDEST F2_UFDEST
F2_UFORIG F2_UFORIG
F2_ESPECI1 F2_ESPECI1
F2_VOLUME1 F2_VOLUME1
F2_PLIQUI F2_PLIQUI
F2_PBRUTO F2_PBRUTO
F2_TRANSP F2_TRANSP
F2_SDOC F2_SDOC
F2_CHVNFE F2_CHVNFE
F2_DAUTNFE F1_DAUTNFE
F2_HAUTNFE F1_HAUTNFE
F2_XVENPRE F2_XVENPRE
F3_PROTOC F1_PROTOC
C5_PARC1 C5_PARC1
C5_PARC2 C5_PARC2
C5_PARC3 C5_PARC3
C5_PARC4 C5_PARC4
C5_PARC5 C5_PARC5
C5_PARC6 C5_PARC6
C5_PARC7 C5_PARC7
C5_PARC8 C5_PARC8
C5_PARC9 C5_PARC9
C5_PARC10 C5_PARC10
C5_PARC11 C5_PARC11
C5_PARC12 C5_PARC12
C5_DATA1 C5_DATA1
C5_DATA2 C5_DATA2
C5_DATA3 C5_DATA3
C5_DATA4 C5_DATA4
C5_DATA5 C5_DATA5
C5_DATA6 C5_DATA6
C5_DATA7 C5_DATA7
C5_DATA8 C5_DATA8
C5_DATA9 C5_DATA9
C5_DATA10 C5_DATA10
C5_DATA11 C5_DATA11
C5_DATA12 C5_DATA12
F3_DTCANC F3_DTCANC
F3_CODRSEF F3_CODRSEF
CREPROCESSA CREPROCESSA
F2_XCODREPF2_XCODREP
F2_XCNPJREF2_XCNPJRE
F2_XMARCAF2_XMARCA
F2_XCBSIBSF2_XCBSIBS
F2_DESCZFRF2_DESCZFR

ITENS

Campo no payload Campo de origem
D2_FILIAL D2_FILIAL
D2_ITEM D2_ITEM
D2_COD D2_COD
D2_TP D2_TP
D2_UM D2_UM
D2_LOCAL D2_LOCAL
D2_QUANT D2_QUANT
D2_PRCVEN D2_PRCVEN
D2_PRUNIT D2_PRUNIT
D2_TOTAL D2_TOTAL
D2_DESC D2_DESC
D2_DESCON D2_DESCON
D2_SEGURO D2_SEGURO
D2_VALFRE D2_VALFRE
D2_DESPESA D2_DESPESA
D2_VALBRUT D2_VALBRUT
D2_EMISSAO D2_EMISSAO
D2_DTDIGIT D2_DTDIGIT
D2_DOC D2_DOC
D2_SERIE D2_SERIE
D2_SDOC D2_SDOC
D2_TIPO D2_TIPO
D2_ESPECIE D2_ESPECIE
D2_CLIENTE D2_CLIENTE
D2_LOJA D2_LOJA
D2_EST D2_EST
D2_CLASFIS D2_CLASFIS
D2_TES D2_TES
D2_CF D2_CF
D2_BASEIPI D2_BASEIPI
D2_IPI D2_IPI
D2_VALIPI D2_VALIPI
D2_BASEICM D2_BASEICM
D2_PICM D2_PICM
D2_VALICM D2_VALICM
D2_BASFECP D2_BASFECP
D2_ALQFECP D2_ALQFECP
D2_VALFECP D2_VALFECP
D2_BRICMS D2_BRICMS
D2_ALIQSOL D2_ALIQSOL
D2_MARGEM D2_MARGEM
D2_ICMSRET D2_ICMSRET
D2_BSFCPST D2_BSFCPST
D2_ALFCPST D2_ALFCPST
D2_VFECPST D2_VFECPST
D2_BASIMP5 D2_BASIMP5
D2_ALQIMP5 D2_ALQIMP5
D2_VALIMP5 D2_VALIMP5
D2_BASIMP6 D2_BASIMP6
D2_ALQIMP6 D2_ALQIMP6
D2_VALIMP6 D2_VALIMP6
D2_BASEPS3 D2_BASEPS3
D2_ALIQPS3 D2_ALIQPS3
D2_VALPS3 D2_VALPS3
D2_BASECF3 D2_BASECF3
D2_ALIQCF3 D2_ALIQCF3
D2_VALCF3 D2_VALCF3
D2_DESCZFP D2_DESCZFP
D2_DESCZFC D2_DESCZFC
D2_BASEDES D2_BASEDES
D2_ALIQCMP D2_ALIQCMP
D2_PDORI D2_PDORI
D2_PDDES D2_PDDES
D2_DIFAL D2_PDIFAL
D2_BSFCCMP D2_BSFCCMP
D2_ALFCCMP D2_ALFCCMP
D2_VFCPDIF D2_VFCPDIF
D2_CCUSTO D2_CC
D2_CONTA D2_CONTA
D2_PESO D2_PESO
D2_ESTOQUE D2_ESTOQUE
D2_NFORI D2_NFORI
D2_SERIORI D2_SERIORI
D2_ITEMORI D2_ITEMORI
D2_XPRMDPR D2_XPRMDPR
D2_XALIQBA D2_XALIQBA
D2_ORIGLAN D2_ORIGLAN
D2_OP D2_OP
D2_XPDWISED2_XPDWISE
D2_XPDLINXD2_XPDLINX
D2_XCOLECD2_XCOLEC
D2_XCOLDED2_XCOLDE
D2_XIBSBSD2_XIBSBS
D2_XIBSALD2_XIBSAL
D2_XIBSVLD2_XIBSVL
D2_XCBSBSD2_XCBSBS
D2_XCBSALD2_XCBSAL
D2_XCBSVLD2_XCBSVL
D2_DESCZFRD2_DESCZFR
C6_TOTALC6_TOTAL

Exemplo de payload enviado

{
  "F2_FILIAL": "",
  "F2_DOC": "",
  "F2_SERIE": "",
  "F2_CLIENTE": "",
  "F2_LOJA": "",
  "F2_TIPOCLI": "",
  "F2_EST": "",
  "F2_DUPL": "",
  "F2_EMISSAO": "",
  "F2_DTDIGIT": "",
  "F2_ESPECIE": "",
  "F2_TIPO": "",
  "F2_COND": "",
  "F2_XNATOPE": "",
  "F2_XCANAL": "",
  "F2_XNATUR": "",
  "F2_TPFRETE": "",
  "F2_VALMERC": 0,
  "F2_VALBRUT": 0,
  "F2_FRETE": 0,
  "F2_SEGURO": 0,
  "F2_DESPESA": 0,
  "F2_DESCONT": 0,
  "F2_VALFAT": 0,
  "F2_PREFIXO": "",
  "F2_VALICM": 0,
  "F2_BASEICM": 0,
  "F2_ICMFRET": 0,
  "F2_VALIPI": 0,
  "F2_BASEIPI": 0,
  "F2_ICMSRET": 0,
  "F2_BRICMS": 0,
  "F2_BASIMP5": 0,
  "F2_BASIMP6": 0,
  "F2_VALIMP5": 0,
  "F2_VALIMP6": 0,
  "F2_BASFECP": 0,
  "F2_BSFCCMP": 0,
  "F2_BSFCPST": 0,
  "F2_BASEPS3": 0,
  "F2_VALPS3": 0,
  "F2_BASECF3": 0,
  "F2_VALCF3": 0,
  "F2_MOEDA": 0,
  "F2_NFORI": "",
  "F2_SERIORI": "",
  "F2_UFDEST": "",
  "F2_UFORIG": "",
  "F2_ESPECI1": "",
  "F2_VOLUME1": 0,
  "F2_PLIQUI": 0,
  "F2_PBRUTO": 0,
  "F2_TRANSP": "",
  "F2_SDOC": "",
  "F2_CHVNFE": "",
  "F2_DAUTNFE": "",
  "F2_HAUTNFE": "",
  "F2_XVENPRE": "",
  "F3_PROTOC": "",
  "C5_PARC1": 0,
  "C5_PARC2": 0,
  "C5_PARC3": 0,
  "C5_PARC4": 0,
  "C5_PARC5": 0,
  "C5_PARC6": 0,
  "C5_PARC7": 0,
  "C5_PARC8": 0,
  "C5_PARC9": 0,
  "C5_PARC10": 0,
  "C5_PARC11": 0,
  "C5_PARC12": 0,
  "C5_DATA1": "",
  "C5_DATA2": "",
  "C5_DATA3": "",
  "C5_DATA4": "",
  "C5_DATA5": "",
  "C5_DATA6": "",
  "C5_DATA7": "",
  "C5_DATA8": "",
  "C5_DATA9": "",
  "C5_DATA10": "",
  "C5_DATA11": "",
  "C5_DATA12": "",
  "F3_DTCANC": "",
  "F3_CODRSEF": "",
  "CREPROCESSA": "",
  "F2_XCODREP": "",
  "F2_XCNPJRE": "",
  "F2_XMARCA": "",
  "F2_XCBSIBS": "",
  "F2_DESCZFR": 0,
  "ITENS": [
    {
      "D2_FILIAL": "",
      "D2_ITEM": "",
      "D2_COD": "",
      "D2_TP": "",
      "D2_UM": "",
      "D2_LOCAL": "",
      "D2_QUANT": 0,
      "D2_PRCVEN": 0,
      "D2_PRUNIT": 0,
      "D2_TOTAL": 0,
      "D2_DESC": 0,
      "D2_DESCON": 0,
      "D2_SEGURO": 0,
      "D2_VALFRE": 0,
      "D2_DESPESA": 0,
      "D2_VALBRUT": 0,
      "D2_EMISSAO": "",
      "D2_DTDIGIT": "",
      "D2_DOC": "",
      "D2_SERIE": "",
      "D2_SDOC": "",
      "D2_TIPO": "",
      "D2_ESPECIE": "",
      "D2_CLIENTE": "",
      "D2_LOJA": "",
      "D2_EST": "",
      "D2_CLASFIS": "",
      "D2_TES": "",
      "D2_CF": "",
      "D2_BASEIPI": 0,
      "D2_IPI": 0,
      "D2_VALIPI": 0,
      "D2_BASEICM": 0,
      "D2_PICM": 0,
      "D2_VALICM": 0,
      "D2_BASFECP": 0,
      "D2_ALQFECP": 0,
      "D2_VALFECP": 0,
      "D2_BRICMS": 0,
      "D2_ALIQSOL": 0,
      "D2_MARGEM": 0,
      "D2_ICMSRET": 0,
      "D2_BSFCPST": 0,
      "D2_ALFCPST": 0,
      "D2_VFECPST": 0,
      "D2_BASIMP5": 0,
      "D2_ALQIMP5": 0,
      "D2_VALIMP5": 0,
      "D2_BASIMP6": 0,
      "D2_ALQIMP6": 0,
      "D2_VALIMP6": 0,
      "D2_BASEPS3": 0,
      "D2_ALIQPS3": 0,
      "D2_VALPS3": 0,
      "D2_BASECF3": 0,
      "D2_ALIQCF3": 0,
      "D2_VALCF3": 0,
      "D2_DESCZFP": 0,
      "D2_DESCZFC": 0,
      "D2_BASEDES": 0,
      "D2_ALIQCMP": 0,
      "D2_PDORI": 0,
      "D2_PDDES": 0,
      "D2_DIFAL": 0,
      "D2_BSFCCMP": 0,
      "D2_ALFCCMP": 0,
      "D2_VFCPDIF": 0,
      "D2_CCUSTO": "",
      "D2_CONTA": "",
      "D2_PESO": 0,
      "D2_ESTOQUE": "",
      "D2_NFORI": "",
      "D2_SERIORI": "",
      "D2_ITEMORI": "",
      "D2_XPRMDPR": 0,
      "D2_XALIQBA": 0,
      "D2_ORIGLAN": "",
      "D2_OP": "",
      "D2_XPDWISE": "",
      "D2_XPDLINX": "",
      "D2_XCOLEC": "",
      "D2_XCOLDE": "",
      "D2_XIBSBS": 0,
      "D2_XIBSAL": 0,
      "D2_XIBSVL": 0,
      "D2_XCBSBS": 0,
      "D2_XCBSAL": 0,
      "D2_XCBSVL": 0,
      "D2_DESCZFR": 0,
      "C6_TOTAL": 0
    }
  ]
}



Tratamento de Dados

Antes do envio ao Protheus, o payload passa por validações e padronizações obrigatórias para consistência numérica.rica e consistência do relacionamento de devolução.

Validação de dependência
- F2_CLIENTE, F2_LOJA: exige confirmação de integração prévia do cliente; em falha, o item é marcado como suspenso por dependênciancia.
- eF2_TIPO: quando o seguedocumento paraé envio.devolução (F2_TIPO = D), valida a integração prévia do documento de entrada de origem a partir das chaves montadas por item (D2_FILIAL-D2_NFORI-D2_SERIORI-D2_CLIENTE-D2_LOJA); em falha, o item é marcado como suspenso por dependência.

Padronização numérica (setNumeric)
- F2_VALMERC, F2_VALBRUT, F2_FRETE, F2_DESPESA, F2_SEGURO, F2_DESCONT, F2_VALFAT, F2_VALICM, F2_BASEICM, F2_ICMFRET, F2_VALIPI, F2_BASEIPI, F2_ICMSRET, F2_BRICMS, F2_BASIMP5, F2_VALIMP5, F2_BASIMP6, F2_VALIMP6, F2_BASFECP, F2_BSFCCMP, F2_BSFCPST, F2_BASEPS3, F2_VALPS3, F2_BASECF3, F2_VALCF3, F2_MOEDA, F2_VOLUME1, F2_PLIQUI, F2_PBRUTO, C5_PARC1, C5_PARC2, C5_PARC3, C5_PARC4, C5_PARC5, C5_PARC6, C5_PARC7, C5_PARC8, C5_PARC9, C5_PARC10, C5_PARC11, C5_PARC12, F2_DESCZFRC5_PARC12: normalizados com o padrão do setNumeric(...).

- D2_QUANT: normalizado com 3 casas decimais (setNumeric(..., 3, false)).
- D2_PRCVEN,D2_PRCVEN: normalizado com 5 casas decimais (setNumeric(..., 5, false)).
- D2_PRUNIT: normalizado com 5 casas decimais (setNumeric(..., 5, false)).
- D2_TOTAL, D2_DESC, D2_DESCON, D2_SEGURO, D2_VALFRE, D2_DESPESA, D2_VALBRUT, D2_BASEIPI, D2_IPI, D2_VALIPI, D2_BASEICM, D2_PICM, D2_VALICM, D2_BASFECP, D2_ALQFECP, D2_VALFECP, D2_BRICMS, D2_ALIQSOL, D2_MARGEM, D2_ICMSRET, D2_BSFCPST, D2_ALFCPST, D2_VFECPST, D2_BASIMP5, D2_ALQIMP5, D2_VALIMP5, D2_BASIMP6, D2_ALQIMP6, D2_VALIMP6, D2_BASEPS3, D2_ALIQPS3, D2_VALPS3, D2_BASECF3, D2_ALIQCF3, D2_VALCF3, D2_DESCZFP, D2_DESCZFC, D2_BASEDES, D2_ALIQCMP, D2_PDORI, D2_PDDES, D2_DIFAL, D2_BSFCCMP, D2_ALFCCMP, D2_VFCPDIF, D2_PESO, D2_XPRMDPR, D2_XALIQBA, D2_XIBSBS, D2_XIBSAL, D2_XIBSVL, D2_XCBSBS, D2_XCBSAL, D2_XCBSVL, D2_DESCZFR, C6_TOTALD2_XALIQBA: 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_saida
- Método HTTP: POST
- Cabeçalhos:
  - tenantId: <primeiros 2 caracteres de F2_FILIAL>,<F2_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 aMensagem mensagem detalhadaDetalhada 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 (integrado/cancelamento) quando aplicável.correlatos.

Rotinas Inteligentes

Cliente Integrado: chamada no início do processamento, antes do envio ao Protheus. Garante que o cliente do documento esteja integrado para permitir a integração do documento de saída.
link: Cliente Integrado

Documento de Saida Integrado: chamada após retorno de sucesso da integração. Registra/valida o status de integração do documento para manter consistência do processo.
link: Documento de Saida Integrado

Documento de Cancelamento de Saida: chamada após retorno de sucesso da integração. Encaminha o cancelamento correlato para manter o status consistente no Protheus.
link: Documento de Cancelamento de Saida

Tratamento de retorno

Persistência do resultado: o item processado é atualizado na tabela wosk_queue (base integrador), registrando retorno, mensagem, requisição, tempo e situação de processamento, incluindo informações de suspensão por dependência quando aplicável.

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.: cliente ainda não integrado)integrado ou documento de origem ainda pendente), o item pode ser marcado como suspenso,suspenso preservandoe informaçõespermanecer paraaguardando rastreio.regularização. Demais falhas permanecem como erro com mensagem registrada para correção e reprocessamento.

Notificação

Em cenário de falhas, a notificação recuperaseleciona itens com erro na tabelaem wosk_queue para o serviço ProtheusDocumentoSaidaFullProtheusDocumentoSaidaLog, ordenandoordena por data dee processamentoprepara a mensagem para priorizarenvio ocorrênciasde maisrelatório, antigas.extraindo apenas a parte relevante de erros de SQL Server quando aplicável.
SELECT
    `token`,
    `acao`,
    `chave`,
    `data_adicionado`,
    `data`,
    `mensagem` AS 'ERRO'
FROM
    `{BASE_INTEGRADOR}`.`wosk_queue`
WHERE
    `acao` = 'ProtheusDocumentoSaidaFull'ProtheusDocumentoSaidaLog'
    AND `situacao` = 4
ORDER BY
    `data` ASC

Fluxo do Processo

Diagrama sem nome.jpg


Critérios de Aceitação

Processo Subprocesso Descrição Situação esperada
Capturador Captura cronológica e encaminhamento Ao consultar a view WOSK_SERVICO_ENVIA_PROTHEUS_SAIDAS_FULLWOSK_SERVICO_ENVIA_PROTHEUS_SAIDAS_LOG, deve capturar documentos em ordem depor dataDATA_PARA_TRANSFERENCIA e por paginação, anexar os itens correspondentes e encaminhar cada documento para processamento em fila. Documentos capturados são disponibilizados para processamento e auditáveis naem base de fila (wosk_queue).
Fila de Processamento Validação de dependência Antes de integrar o documento de saída, deve validar a integração prévia do cliente (F2_CLIENTE/F2_LOJA); eme, falha,quando F2_TIPO = D, deve suspendervalidar a integração processamentodo documento de entrada de origem montado por dependência.item (D2_FILIAL-D2_NFORI-D2_SERIORI-D2_CLIENTE-D2_LOJA). Processamento suspenso (situacao = 3) quando houver dependência não atendida, com mensagem de dependência registrada na fila.registrada.
Fila de Processamento Normalização numérica Ao preparar o payload, deve normalizar campos numéricos do cabeçalho e itens, aplicando precisão diferenciada para D2_QUANT (3 casas, false) e D2_PRCVEN/D2_PRUNIT (5 casas, false), e normalizando C6_TOTAL. Payload consistente e pronto para envio, com valores padronizados conforme regra.
Fila de Processamento Integração e persistência do retorno Após enviar ao Protheus (POST no recurso documento_saida 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 rotinas inteligentes de integrado/cancelamento. Fila atualizada com situação final e detalhes de auditoria; em sucesso, marcadores correlatos acionados.