ProtheusCupomFiscalFull (STATUS: PARCIAL)
Documentação Técnica
| Nome do cliente | OSKLEN |
| Nome do projeto | Integração LINX → Protheus |
| Biblioteca | wosk_protheus_cupom_fiscal_full |
| 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/Gustavo | Criação da documentação técnica do processo ProtheusCupomFiscalFull. |
Descrição
Esta biblioteca organiza a integração de cupons fiscais completos do LINX para o Protheus, garantindo captura por data ou por chave e envio com validação do retorno.
Capturador
Descrição Conceitual
Permite a captura manual (por identificador composto no padrão F2_FILIAL-F2_DOC-F2_SERIE) e a captura automática (por agendador de tarefas) dos cupons fiscais pendentes, consultando a origem e registrando os itens 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_CUPOM_FULL.
Origem consultada (itens do cupom): view WOSK_SERVICO_ENVIA_PROTHEUS_CUPOM_ITEM_FULL.
Consulta base (utilizada como origem para composição dinâmica de filtros):
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,
DATA_PARA_TRANSFERENCIA
FROM
WOSK_SERVICO_ENVIA_PROTHEUS_CUPOM_FULL (NOLOCK)
Consulta utilizada na captura automática (filtro por data e paginação por posição):
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,
DATA_PARA_TRANSFERENCIA
FROM
WOSK_SERVICO_ENVIA_PROTHEUS_CUPOM_FULL (NOLOCK)
WHERE
DATA_PARA_TRANSFERENCIA >= '<DATA_PARA_TRANSFERENCIA>'
ORDER BY
DATA_PARA_TRANSFERENCIA ASC
OFFSET
<OFFSET> ROWS FETCH NEXT <LIMITE> ROWS ONLY
Consulta utilizada na captura manual (filtros dinâmicos a partir do identificador informado):
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,
DATA_PARA_TRANSFERENCIA
FROM
WOSK_SERVICO_ENVIA_PROTHEUS_CUPOM_FULL (NOLOCK)
WHERE
F2_FILIAL = '<F2_FILIAL>'
AND F2_DOC = '<F2_DOC>'
AND F2_SERIE = '<F2_SERIE>'
Consulta utilizada para compor os itens do cupom:
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,
DATA_PARA_TRANSFERENCIA
FROM
WOSK_SERVICO_ENVIA_PROTHEUS_CUPOM_ITEM_FULL (NOLOCK)
WHERE
D2_FILIAL = '<D2_FILIAL>'
AND D2_DOC = '<D2_DOC>'
AND D2_SERIE = '<D2_SERIE>'
AND D2_CLIENTE = '<D2_CLIENTE>'
AND D2_LOJA = '<D2_LOJA>'
Operações com Dados
- Leitura: consulta as views WOSK_SERVICO_ENVIA_PROTHEUS_CUPOM_FULL e WOSK_SERVICO_ENVIA_PROTHEUS_CUPOM_ITEM_FULL (itens) para obter o registro atual e compor a lista ITENS antes de registrar para processamento assíncrono.
- Captura automática (processamento cronológico): aplica filtro por DATA_PARA_TRANSFERENCIA, ordena por DATA_PARA_TRANSFERENCIA e pagina com OFFSET ... FETCH NEXT ..., garantindo priorização dos registros mais antigos e continuidade por posição.
- Captura manual: recebe um identificador composto no padrão F2_FILIAL-F2_DOC-F2_SERIE, valida o formato (quantidade de partes) e consulta a origem com filtros exatos (F2_FILIAL, F2_DOC, F2_SERIE) para recuperar o cupom solicitado e seus itens.
- Chave de identificação do item: composta no padrão F2_FILIAL-F2_DOC-F2_SERIE, utilizada para registrar o item na fila e para reconstrução de campos na notificação de falhas.
- Persistência de posição/continuidade: registra e atualiza o controle do capturador na tabela wosk_monitor (banco {$this->bancoIntegrador}) usando evento = 'ProtheusCupomFiscalFull', mantendo token, offset, filtro, chave_posicao, situacao, data_posicao, data_iniciado e data.
- Situações registradas no controle: parado/início (0), em processamento (1), concluído (2) e problema (4). Em caso de falha, o campo filtro recebe um histórico em ERRORS[] com DATE e MESSAGE para auditoria.
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.
O item de fila é persistido e atualizado na tabela wosk_queue (banco {$this->bancoIntegrador}) ao longo do processamento, registrando conteúdo, retorno, mensagem, tempo e situação final para auditoria e acompanhamento operacional.
Estruturação de Dados
$field da fila, refletindo os campos enviados ao Protheus no recurso documento_saida.| Campo no payload | Origem no registro atual |
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_XCODREP |
F2_XCODREP |
F2_XCNPJRE |
F2_XCNPJRE |
F2_XMARCA |
F2_XMARCA |
ITENS |
Lista de itens obtida na origem de itens, composta como ITENS[]. |
ITENS[].D2_FILIAL |
D2_FILIAL |
ITENS[].D2_ITEM |
D2_ITEM |
ITENS[].D2_COD |
D2_COD |
ITENS[].D2_TP |
D2_TP |
ITENS[].D2_UM |
D2_UM |
ITENS[].D2_LOCAL |
D2_LOCAL |
ITENS[].D2_QUANT |
D2_QUANT |
ITENS[].D2_PRCVEN |
D2_PRCVEN |
ITENS[].D2_PRUNIT |
D2_PRUNIT |
ITENS[].D2_TOTAL |
D2_TOTAL |
ITENS[].D2_DESC |
D2_DESC |
ITENS[].D2_DESCON |
D2_DESCON |
ITENS[].D2_SEGURO |
D2_SEGURO |
ITENS[].D2_VALFRE |
D2_VALFRE |
ITENS[].D2_DESPESA |
D2_DESPESA |
ITENS[].D2_VALBRUT |
D2_VALBRUT |
ITENS[].D2_EMISSAO |
D2_EMISSAO |
ITENS[].D2_DTDIGIT |
D2_DTDIGIT |
ITENS[].D2_DOC |
D2_DOC |
ITENS[].D2_SERIE |
D2_SERIE |
ITENS[].D2_SDOC |
D2_SDOC |
ITENS[].D2_TIPO |
D2_TIPO |
ITENS[].D2_ESPECIE |
D2_ESPECIE |
ITENS[].D2_CLIENTE |
D2_CLIENTE |
ITENS[].D2_LOJA |
D2_LOJA |
ITENS[].D2_EST |
D2_EST |
ITENS[].D2_CLASFIS |
D2_CLASFIS |
ITENS[].D2_TES |
D2_TES |
ITENS[].D2_CF |
D2_CF |
ITENS[].D2_BASEIPI |
D2_BASEIPI |
ITENS[].D2_IPI |
D2_IPI |
ITENS[].D2_VALIPI |
D2_VALIPI |
ITENS[].D2_BASEICM |
D2_BASEICM |
ITENS[].D2_PICM |
D2_PICM |
ITENS[].D2_VALICM |
D2_VALICM |
ITENS[].D2_BASFECP |
D2_BASFECP |
ITENS[].D2_ALQFECP |
D2_ALQFECP |
ITENS[].D2_VALFECP |
D2_VALFECP |
ITENS[].D2_BRICMS |
D2_BRICMS |
ITENS[].D2_ALIQSOL |
D2_ALIQSOL |
ITENS[].D2_MARGEM |
D2_MARGEM |
ITENS[].D2_ICMSRET |
D2_ICMSRET |
ITENS[].D2_BSFCPST |
D2_BSFCPST |
ITENS[].D2_ALFCPST |
D2_ALFCPST |
ITENS[].D2_VFECPST |
D2_VFECPST |
ITENS[].D2_BASIMP5 |
D2_BASIMP5 |
ITENS[].D2_ALQIMP5 |
D2_ALQIMP5 |
ITENS[].D2_VALIMP5 |
D2_VALIMP5 |
ITENS[].D2_BASIMP6 |
D2_BASIMP6 |
ITENS[].D2_ALQIMP6 |
D2_ALQIMP6 |
ITENS[].D2_VALIMP6 |
D2_VALIMP6 |
ITENS[].D2_BASEPS3 |
D2_BASEPS3 |
ITENS[].D2_ALIQPS3 |
D2_ALIQPS3 |
ITENS[].D2_VALPS3 |
D2_VALPS3 |
ITENS[].D2_BASECF3 |
D2_BASECF3 |
ITENS[].D2_ALIQCF3 |
D2_ALIQCF3 |
ITENS[].D2_VALCF3 |
D2_VALCF3 |
ITENS[].D2_DESCZFP |
D2_DESCZFP |
ITENS[].D2_DESCZFC |
D2_DESCZFC |
ITENS[].D2_BASEDES |
D2_BASEDES |
ITENS[].D2_ALIQCMP |
D2_ALIQCMP |
ITENS[].D2_PDORI |
D2_PDORI |
ITENS[].D2_PDDES |
D2_PDDES |
ITENS[].D2_DIFAL |
D2_PDIFAL |
ITENS[].D2_BSFCCMP |
D2_BSFCCMP |
ITENS[].D2_ALFCCMP |
D2_ALFCCMP |
ITENS[].D2_VFCPDIF |
D2_VFCPDIF |
ITENS[].D2_CCUSTO |
D2_CC |
ITENS[].D2_CONTA |
D2_CONTA |
ITENS[].D2_PESO |
D2_PESO |
ITENS[].D2_ESTOQUE |
D2_ESTOQUE |
ITENS[].D2_NFORI |
D2_NFORI |
ITENS[].D2_SERIORI |
D2_SERIORI |
ITENS[].D2_ITEMORI |
D2_ITEMORI |
ITENS[].D2_XPRMDPR |
D2_XPRMDPR |
ITENS[].D2_XALIQBA |
D2_XALIQBA |
ITENS[].D2_ORIGLAN |
D2_ORIGLAN |
ITENS[].D2_OP |
D2_OP |
ITENS[].D2_XPDWISE |
D2_XPDWISE |
ITENS[].D2_XPDLINX |
D2_XPDLINX |
ITENS[].D2_XCOLEC |
D2_XCOLEC |
ITENS[].D2_XCOLDE |
D2_XCOLDE |
Exemplo de payload enviado (com todos os campos previstos em
$field):{
"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_ICMFRET": "",
"F2_VALIPI": "",
"F2_BASEIPI": "",
"F2_ICMSRET": "",
"F2_BRICMS": "",
"F2_BASIMP5": "",
"F2_BASIMP6": "",
"F2_VALIMP5": "",
"F2_VALIMP6": "",
"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": "",
"F2_DAUTNFE": "",
"F2_HAUTNFE": "",
"F2_XVENPRE": "",
"F3_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": "",
"ITENS": [
{
"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_DIFAL": "",
"D2_BSFCCMP": "",
"D2_ALFCCMP": "",
"D2_VFCPDIF": "",
"D2_CCUSTO": "",
"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": ""
}
]
}
Tratamento de Dados
Antes do envio, os campos numéricos do cupom são padronizados por rotina numérica, garantindo consistência de formato para integração.
- 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: normalizados com o padrão da rotina numérica.
Nos itens (ITENS[]), os campos numéricos também são padronizados, com atenção especial à precisão:
- D2_QUANT: normalizado com 3 casas decimais (setNumeric(..., 3, false)).
- D2_PRCVEN, 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_XPRMDPR, D2_XALIQBA, D2_PDORI, D2_PDDES, D2_DIFAL, D2_BSFCCMP, D2_ALFCCMP, D2_VFCPDIF, D2_PESO: normalizados com o padrão da rotina numérica.
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: <UF_DA_FILIAL>,<F2_FILIAL> (montado a partir dos 2 primeiros caracteres de F2_FILIAL + vírgula + o valor completo de F2_FILIAL)
- Exemplo de payload enviado:
- O payload segue a estrutura descrita na seção “Estruturação de Dados”, incluindo a lista ITENS.
- Tratamento de retorno:
- Ausência de resposta: registra erro com mensagem de “não houve resposta” e finaliza o item como falha.
- Resposta inválida/inesperada: se o retorno não puder ser interpretado como estrutura contendo Mensagem, registra erro de decodificação e finaliza como falha.
- Indicadores de erro: finaliza como falha quando houver code no retorno ou quando Mensagem for ERRO. Quando disponível, utiliza Mensagem Detalhada como mensagem final, consolidando estrutura de erros quando ela vier como objeto/array.
- Exceção de idempotência: quando a mensagem detalhada indicar que o documento já está cadastrado, ajusta o retorno para sucesso (Mensagem = OK) e remove o indicador code, permitindo concluir o item como integrado.
- Sucesso: quando não houver indicadores de erro, finaliza como sucesso e persiste o retorno para auditoria.
Rotinas Inteligentes
setProtheusClienteIntegrado: validada antes da integração do documento. Garante que o cliente relacionado já esteja integrado para evitar envio inconsistente.
link: https://kb.illimitar.pro/books/integracao-linx-protheus/page/setprotheusclienteintegrado
setProtheusDocumentoSaidaIntegrado: executada após confirmação de sucesso. Marca o documento de saída como integrado para consistência do processo completo.
link: https://kb.illimitar.pro/books/integracao-linx-protheus/page/setprotheusdocumentosaidaintegrado
setProtheusCupomEcommerceIntegrado: executada após confirmação de sucesso. Marca o cupom do e-commerce como integrado, evitando reenvios desnecessários.
link: https://kb.illimitar.pro/books/integracao-linx-protheus/page/setprotheuscupomecommerceintegrado
setProtheusCupomFiscalIntegrado: executada após confirmação de sucesso. Registra o cupom fiscal como integrado para encerramento do fluxo de integração.
link: https://kb.illimitar.pro/books/integracao-linx-protheus/page/setprotheuscupomfiscalintegrado
setProtheusDocumentoCancelamentoCupomFiscal: executada após confirmação de sucesso. Dispara o registro de cancelamento do cupom fiscal quando aplicável no processo completo.
link: https://kb.illimitar.pro/books/integracao-linx-protheus/page/setprotheusdocumentocancelamentocupomfiscal
Tratamento de retorno
Ao final do processamento, o item é atualizado na tabela wosk_queue com o retorno do Protheus (quando existir), a mensagem consolidada e a situação final (sucesso/erro/suspenso). O tempo de processamento é registrado para acompanhamento operacional.
Encaminhamento em cenário de erro
Quando ocorre erro na integração (ausência de resposta, resposta inválida ou retorno com indicador de falha), o item é finalizado como erro e permanece registrado em wosk_queue com detalhes de mensagem e retorno, permitindo acompanhamento e reprocessamento conforme necessidade operacional.
Quando a falha estiver relacionada à dependência de integração do cliente, o item pode ser marcado como suspenso até que a condição seja atendida, evitando envio incompleto ao Protheus.
Notificação
wosk_queue (serviço ProtheusCupomFiscalFull e situação de erro), ordenando pela data de processamento para priorizar ocorrências mais antigas. Para compor a listagem, a chave do item é decomposta para preencher F2_FILIAL, F2_DOC e F2_SERIE, e as datas data_adicionado e data são formatadas para apresentação. A mensagem de erro é higienizada para remover prefixos técnicos recorrentes e manter o conteúdo mais relevante, e o alerta é encaminhado por e-mail para os destinatários configurados.Fluxo do Processo
Critérios de Aceitação
| Processo | Subprocesso | Descrição | Situação esperada |
| Capturador | Captura cronológica e controle de posição | Ao consultar a view WOSK_SERVICO_ENVIA_PROTHEUS_CUPOM_FULL com filtro por DATA_PARA_TRANSFERENCIA, ordenação e paginação, deve manter continuidade por posição persistida em wosk_monitor (evento, offset, data_posicao). |
Posição atualizada no controle do capturador e itens pendentes registrados para processamento assíncrono. |
| Capturador | Captura manual por identificador composto | Ao informar um identificador composto no padrão F2_FILIAL-F2_DOC-F2_SERIE, deve consultar a origem com filtros exatos desses campos e registrar o item correspondente para processamento, incluindo a lista ITENS. |
Item pendente registrado para processamento, associado ao cupom solicitado e apto a integração. |
| Fila de Processamento | Integração com Protheus | Ao processar um item pendente em wosk_queue (serviço ProtheusCupomFiscalFull), deve montar o payload conforme $field, aplicar padronização numérica (incluindo D2_QUANT com 3 casas e D2_PRCVEN/D2_PRUNIT com 5 casas) e realizar a requisição ao recurso documento_saida com cabeçalho tenantId. |
Item atualizado em wosk_queue com retorno/mensagem e situação final coerente (sucesso quando não houver erro; erro quando houver ausência de resposta, resposta inválida, code ou Mensagem = ERRO). |
| Fila de Processamento | Notificação de falhas | Quando existirem ocorrências com falha persistidas em wosk_queue para o serviço ProtheusCupomFiscalFull, deve gerar notificação por e-mail priorizando itens mais antigos pela data de processamento. |
Destinatários recebem o alerta com F2_FILIAL, F2_DOC, F2_SERIE e a mensagem higienizada para análise. |

Nenhum comentário