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
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
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
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
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. |

Nenhum comentário