ProtheusCupomFiscalEcommerce (STATUS: PARCIAL)
<h2 id="bkmrk-%23-documenta%C3%A7%C3%A3o-t%C3%A9cni">Documentação Técnica</h2>
<table id="bkmrk-nome-do-cliente-exem" class="align-center" style="border-collapse: collapse; width: 100%; height: 118.963px;" border="1"><colgroup><col style="width: 50%;"><col style="width: 50%;"></colgroup>
<tbody>
<tr style="height: 29.7875px;">
<td style="height: 29.7875px;">Nome do cliente</td>
<td style="height: 29.7875px;">OSKLEN</td>
</tr>
<tr style="height: 29.7875px;">
<td style="height: 29.7875px;">Nome do projeto</td>
<td style="height: 29.7875px;">Integração LINX → Protheus</td>
</tr>
<tr style="height: 29.7875px;">
<td style="height: 29.7875px;">Biblioteca</td>
<td style="height: 29.7875px;">wosk_protheus_cupom_fiscal_ecommerce</td>
</tr>
<tr style="height: 29.6px;">
<td style="height: 29.6px;">Data</td>
<td style="height: 29.6px;">27/02/2026</td>
</tr>
</tbody>
</table>
<p id="bkmrk-%24username"><br></p>
<p id="bkmrk-%C2%A0"></p>
<h2 id="bkmrk-%23%23-hist%C3%B3rico-de-vers">Histórico de Versões</h2>
<table id="bkmrk-data-vers%C3%A3o-modifica" style="border-collapse: collapse; width: 100%; height: 60.5938px;" border="1"><colgroup><col style="width: 25%;"><col style="width: 25%;"><col style="width: 25%;"><col style="width: 25%;"></colgroup>
<tbody>
<tr style="height: 30.7969px;">
<td class="align-center" style="height: 30.7969px;">Data</td>
<td class="align-center" style="height: 30.7969px;">Versão</td>
<td class="align-center" style="height: 30.7969px;">Modificado por</td>
<td class="align-center" style="height: 30.7969px;">Descrição da Mudança</td>
</tr>
<tr style="height: 29.7969px;">
<td class="align-center" style="height: 29.7969px;">27/02/2026</td>
<td class="align-center" style="height: 29.7969px;">1.0</td>
<td class="align-center" style="height: 29.7969px;">Maykon/Gustavo</td>
<td class="align-center" style="height: 29.7969px;">Criação da documentação técnica do processo ProtheusCupomFiscalEcommerce.</td>
</tr>
</tbody>
</table>
<p id="bkmrk-%C2%A0-1"></p>
<h2 id="bkmrk-descri%C3%A7%C3%A3o-geral-dos-">Descrição</h2>
<p id="bkmrk-lorem-ipsum-is-simpl">Esta biblioteca organiza o envio de cupons fiscais do e-commerce do LINX para o Protheus, garantindo captura consistente, preparação dos dados e registro do resultado da integração.<br></p>
<p id="bkmrk-%C2%A0-2"></p>
<h2 id="bkmrk-monitor">Capturador</h2>
<p id="bkmrk-processo%3A%C2%A0simply-dum"><a href="https://kb.illimitar.pro/books/documentacao-isnapp/page/monitor" target="_blank" rel="noopener">Descrição Conceitual</a><br><br>Permite a captura manual (por identificador composto) e a captura automática (por agendador de tarefas) dos cupons fiscais de e-commerce pendentes, consultando a origem e registrando os itens para processamento assíncrono.<br><br>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: <a href="https://kb.illimitar.pro/books/documentacao-isnapp/page/cronologico" target="_blank" rel="noopener">Processamento cronológico</a>.</p>
<p id="bkmrk-%C2%A0-3"></p>
<h3 id="bkmrk-fonte">Fonte</h3>
<p id="bkmrk-%7B%7Bfonte-query%7D%7D">Origem consultada: view <code>WOSK_SERVICO_ENVIA_PROTHEUS_CUPOM_ECOMMERCE</code>.<br><br>Origem consultada (itens do cupom): view <code>WOSK_SERVICO_ENVIA_PROTHEUS_CUPOM_ITEM_ECOMMERCE</code>.<br><br>Consulta base (utilizada como origem para composição dinâmica de filtros):<br><br><pre><code>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_ECOMMERCE (NOLOCK)</code></pre><br><br>Consulta utilizada na captura automática (filtro por data e paginação por posição):<br><br><pre><code>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_ECOMMERCE (NOLOCK)
WHERE
DATA_PARA_TRANSFERENCIA >= '<DATA_PARA_TRANSFERENCIA>'
ORDER BY
DATA_PARA_TRANSFERENCIA ASC
OFFSET
<OFFSET> ROWS FETCH NEXT <LIMITE> ROWS ONLY</code></pre><br><br>Consulta utilizada na captura manual (filtros dinâmicos a partir do identificador informado):<br><br><pre><code>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_ECOMMERCE (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>'</code></pre><br><br>Consulta utilizada para compor os itens do cupom:<br><br><pre><code>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_ECOMMERCE (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>'</code></pre></p>
<p id="bkmrk-%C2%A0-4"></p>
<h3 id="bkmrk-opera%C3%A7%C3%B5es-com-dados-">Operações com Dados</h3>
<p id="bkmrk-leitura%3A-consulta-da">- Leitura: consulta as views <code>WOSK_SERVICO_ENVIA_PROTHEUS_CUPOM_ECOMMERCE</code> (cabeçalho) e <code>WOSK_SERVICO_ENVIA_PROTHEUS_CUPOM_ITEM_ECOMMERCE</code> (itens) para obter o registro atual e compor a lista <code>ITENS</code> do cupom antes de registrar para processamento assíncrono.<br><br>- Captura automática (processamento cronológico): aplica filtro por <code>DATA_PARA_TRANSFERENCIA</code>, ordena por <code>DATA_PARA_TRANSFERENCIA</code> e pagina com <code>OFFSET ... FETCH NEXT ...</code>, garantindo priorização dos registros mais antigos e continuidade por posição.<br><br>- Captura manual: recebe um identificador composto, valida o formato (quantidade de partes) e consulta a origem com filtros exatos (<code>F2_FILIAL</code>, <code>F2_DOC</code>, <code>F2_SERIE</code>, <code>F2_CLIENTE</code>, <code>F2_LOJA</code>) para recuperar o cupom solicitado e seus itens.<br><br>- Persistência de posição/continuidade: registra e atualiza o controle do capturador na tabela <code>wosk_monitor</code> (banco <code>{$this->bancoIntegrador}</code>) usando <code>evento = 'ProtheusCupomFiscalEcommerce'</code>, mantendo posição, filtro aplicado, datas e situação para auditoria e retomada.</p>
<div id="bkmrk-"></div>
<p id="bkmrk-%C2%A0-5"></p>
<h2 id="bkmrk-fila-de-processament">Fila de Processamento</h2>
<div id="bkmrk-%7B%7Bdescricao_monitor%7D"></div>
<p id="bkmrk-processo%3A-is-simply-"><a href="https://kb.illimitar.pro/books/documentacao-isnapp/page/queue" target="_blank" rel="noopener">Descrição Conceitual</a></p>
<p id="bkmrk-%C2%A0-6">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.<br><br>O item de fila é persistido e atualizado na tabela <code>wosk_queue</code> (banco <code>{$this->bancoIntegrador}</code>) ao longo do processamento, registrando conteúdo, retorno, mensagem, tempo e situação final para auditoria e acompanhamento operacional.</p>
<h3 id="bkmrk-reestrutura%C3%A7%C3%A3o-e-alt-1">Estruturação de Dados</h3>
<div id="bkmrk-%7B%7Bestruturacao-de-da">
<div>A estrutura oficial do payload de integração é definida pelo array <code>$field</code> da fila, refletindo os campos enviados ao Protheus no recurso <code>documento_saida</code>.<br><br>
<table style="border-collapse: collapse; width: 100%;" border="1">
<colgroup><col style="width: 35%;"><col style="width: 65%;"></colgroup>
<tbody>
<tr>
<td class="align-center">Campo no payload</td>
<td class="align-center">Origem no registro atual</td>
</tr>
<tr><td><code>F2_FILIAL</code></td><td><code>F2_FILIAL</code></td></tr>
<tr><td><code>F2_DOC</code></td><td><code>F2_DOC</code></td></tr>
<tr><td><code>F2_SERIE</code></td><td><code>F2_SERIE</code></td></tr>
<tr><td><code>F2_CLIENTE</code></td><td><code>F2_CLIENTE</code></td></tr>
<tr><td><code>F2_LOJA</code></td><td><code>F2_LOJA</code></td></tr>
<tr><td><code>F2_TIPOCLI</code></td><td><code>F2_TIPOCLI</code></td></tr>
<tr><td><code>F2_EST</code></td><td><code>F2_EST</code></td></tr>
<tr><td><code>F2_DUPL</code></td><td><code>F2_DUPL</code></td></tr>
<tr><td><code>F2_EMISSAO</code></td><td><code>F2_EMISSAO</code></td></tr>
<tr><td><code>F2_DTDIGIT</code></td><td><code>F2_DTDIGIT</code></td></tr>
<tr><td><code>F2_ESPECIE</code></td><td><code>F2_ESPECIE</code></td></tr>
<tr><td><code>F2_TIPO</code></td><td><code>F2_TIPO</code></td></tr>
<tr><td><code>F2_COND</code></td><td><code>F2_COND</code></td></tr>
<tr><td><code>F2_XNATOPE</code></td><td><code>F2_XNATOPE</code></td></tr>
<tr><td><code>F2_XCANAL</code></td><td><code>F2_XCANAL</code></td></tr>
<tr><td><code>F2_XNATUR</code></td><td><code>F2_XNATUR</code></td></tr>
<tr><td><code>F2_TPFRETE</code></td><td><code>F2_TPFRETE</code></td></tr>
<tr><td><code>F2_VALMERC</code></td><td><code>F2_VALMERC</code></td></tr>
<tr><td><code>F2_VALBRUT</code></td><td><code>F2_VALBRUT</code></td></tr>
<tr><td><code>F2_FRETE</code></td><td><code>F2_FRETE</code></td></tr>
<tr><td><code>F2_SEGURO</code></td><td><code>F2_SEGURO</code></td></tr>
<tr><td><code>F2_DESPESA</code></td><td><code>F2_DESPESA</code></td></tr>
<tr><td><code>F2_DESCONT</code></td><td><code>F2_DESCONT</code></td></tr>
<tr><td><code>F2_VALFAT</code></td><td><code>F2_VALFAT</code></td></tr>
<tr><td><code>F2_PREFIXO</code></td><td><code>F2_PREFIXO</code></td></tr>
<tr><td><code>F2_VALICM</code></td><td><code>F2_VALICM</code></td></tr>
<tr><td><code>F2_BASEICM</code></td><td><code>F2_BASEICM</code></td></tr>
<tr><td><code>F2_ICMFRET</code></td><td><code>F2_ICMFRETE</code></td></tr>
<tr><td><code>F2_VALIPI</code></td><td><code>F2_VALIPI</code></td></tr>
<tr><td><code>F2_BASEIPI</code></td><td><code>F2_BASEIPI</code></td></tr>
<tr><td><code>F2_ICMSRET</code></td><td><code>F2_ICMSRET</code></td></tr>
<tr><td><code>F2_BRICMS</code></td><td><code>F2_BRICMS</code></td></tr>
<tr><td><code>F2_BASIMP5</code></td><td><code>F2_BASIMP5</code></td></tr>
<tr><td><code>F2_BASIMP6</code></td><td><code>F2_BASIMP6</code></td></tr>
<tr><td><code>F2_VALIMP5</code></td><td><code>F2_VALIMP5</code></td></tr>
<tr><td><code>F2_VALIMP6</code></td><td><code>F2_VALIMP6</code></td></tr>
<tr><td><code>F2_BASFECP</code></td><td><code>F2_BASFECP</code></td></tr>
<tr><td><code>F2_BSFCCMP</code></td><td><code>F2_BSFCCMP</code></td></tr>
<tr><td><code>F2_BSFCPST</code></td><td><code>F2_BSFCPST</code></td></tr>
<tr><td><code>F2_BASEPS3</code></td><td><code>F2_BASEPS3</code></td></tr>
<tr><td><code>F2_VALPS3</code></td><td><code>F2_VALPS3</code></td></tr>
<tr><td><code>F2_BASECF3</code></td><td><code>F2_BASECF3</code></td></tr>
<tr><td><code>F2_VALCF3</code></td><td><code>F2_VALCF3</code></td></tr>
<tr><td><code>F2_MOEDA</code></td><td><code>F2_MOEDA</code></td></tr>
<tr><td><code>F2_NFORI</code></td><td><code>F2_NFORI</code></td></tr>
<tr><td><code>F2_SERIORI</code></td><td><code>F2_SERIORI</code></td></tr>
<tr><td><code>F2_UFDEST</code></td><td><code>F2_UFDEST</code></td></tr>
<tr><td><code>F2_UFORIG</code></td><td><code>F2_UFORIG</code></td></tr>
<tr><td><code>F2_ESPECI1</code></td><td><code>F2_ESPECI1</code></td></tr>
<tr><td><code>F2_VOLUME1</code></td><td><code>F2_VOLUME1</code></td></tr>
<tr><td><code>F2_PLIQUI</code></td><td><code>F2_PLIQUI</code></td></tr>
<tr><td><code>F2_PBRUTO</code></td><td><code>F2_PBRUTO</code></td></tr>
<tr><td><code>F2_TRANSP</code></td><td><code>F2_TRANSP</code></td></tr>
<tr><td><code>F2_SDOC</code></td><td><code>F2_SDOC</code></td></tr>
<tr><td><code>F2_CHVNFE</code></td><td><code>F2_CHVNFE</code></td></tr>
<tr><td><code>F2_DAUTNFE</code></td><td><code>F1_DAUTNFE</code></td></tr>
<tr><td><code>F2_HAUTNFE</code></td><td><code>F1_HAUTNFE</code></td></tr>
<tr><td><code>F2_XVENPRE</code></td><td><code>F2_XVENPRE</code></td></tr>
<tr><td><code>F3_PROTOC</code></td><td><code>F1_PROTOC</code></td></tr>
<tr><td><code>C5_PARC1</code></td><td><code>C5_PARC1</code></td></tr>
<tr><td><code>C5_PARC2</code></td><td><code>C5_PARC2</code></td></tr>
<tr><td><code>C5_PARC3</code></td><td><code>C5_PARC3</code></td></tr>
<tr><td><code>C5_PARC4</code></td><td><code>C5_PARC4</code></td></tr>
<tr><td><code>C5_PARC5</code></td><td><code>C5_PARC5</code></td></tr>
<tr><td><code>C5_PARC6</code></td><td><code>C5_PARC6</code></td></tr>
<tr><td><code>C5_PARC7</code></td><td><code>C5_PARC7</code></td></tr>
<tr><td><code>C5_PARC8</code></td><td><code>C5_PARC8</code></td></tr>
<tr><td><code>C5_PARC9</code></td><td><code>C5_PARC9</code></td></tr>
<tr><td><code>C5_PARC10</code></td><td><code>C5_PARC10</code></td></tr>
<tr><td><code>C5_PARC11</code></td><td><code>C5_PARC11</code></td></tr>
<tr><td><code>C5_PARC12</code></td><td><code>C5_PARC12</code></td></tr>
<tr><td><code>C5_DATA1</code></td><td><code>C5_DATA1</code></td></tr>
<tr><td><code>C5_DATA2</code></td><td><code>C5_DATA2</code></td></tr>
<tr><td><code>C5_DATA3</code></td><td><code>C5_DATA3</code></td></tr>
<tr><td><code>C5_DATA4</code></td><td><code>C5_DATA4</code></td></tr>
<tr><td><code>C5_DATA5</code></td><td><code>C5_DATA5</code></td></tr>
<tr><td><code>C5_DATA6</code></td><td><code>C5_DATA6</code></td></tr>
<tr><td><code>C5_DATA7</code></td><td><code>C5_DATA7</code></td></tr>
<tr><td><code>C5_DATA8</code></td><td><code>C5_DATA8</code></td></tr>
<tr><td><code>C5_DATA9</code></td><td><code>C5_DATA9</code></td></tr>
<tr><td><code>C5_DATA10</code></td><td><code>C5_DATA10</code></td></tr>
<tr><td><code>C5_DATA11</code></td><td><code>C5_DATA11</code></td></tr>
<tr><td><code>C5_DATA12</code></td><td><code>C5_DATA12</code></td></tr>
<tr><td><code>F3_DTCANC</code></td><td><code>F3_DTCANC</code></td></tr>
<tr><td><code>F3_CODRSEF</code></td><td><code>F3_CODRSEF</code></td></tr>
<tr><td><code>CREPROCESSA</code></td><td><code>CREPROCESSA</code></td></tr>
<tr><td><code>F2_XCODREP</code></td><td><code>F2_XCODREP</code></td></tr>
<tr><td><code>F2_XCNPJRE</code></td><td><code>F2_XCNPJRE</code></td></tr>
<tr><td><code>F2_XMARCA</code></td><td><code>F2_XMARCA</code></td></tr>
<tr><td><code>ITENS</code></td><td>Lista de itens obtida na origem de itens, composta como <code>ITENS[]</code>.</td></tr>
<tr><td><code>ITENS[].D2_FILIAL</code></td><td><code>D2_FILIAL</code></td></tr>
<tr><td><code>ITENS[].D2_ITEM</code></td><td><code>D2_ITEM</code></td></tr>
<tr><td><code>ITENS[].D2_COD</code></td><td><code>D2_COD</code></td></tr>
<tr><td><code>ITENS[].D2_TP</code></td><td><code>D2_TP</code></td></tr>
<tr><td><code>ITENS[].D2_UM</code></td><td><code>D2_UM</code></td></tr>
<tr><td><code>ITENS[].D2_LOCAL</code></td><td><code>D2_LOCAL</code></td></tr>
<tr><td><code>ITENS[].D2_QUANT</code></td><td><code>D2_QUANT</code></td></tr>
<tr><td><code>ITENS[].D2_PRCVEN</code></td><td><code>D2_PRCVEN</code></td></tr>
<tr><td><code>ITENS[].D2_PRUNIT</code></td><td><code>D2_PRUNIT</code></td></tr>
<tr><td><code>ITENS[].D2_TOTAL</code></td><td><code>D2_TOTAL</code></td></tr>
<tr><td><code>ITENS[].D2_DESC</code></td><td><code>D2_DESC</code></td></tr>
<tr><td><code>ITENS[].D2_DESCON</code></td><td><code>D2_DESCON</code></td></tr>
<tr><td><code>ITENS[].D2_SEGURO</code></td><td><code>D2_SEGURO</code></td></tr>
<tr><td><code>ITENS[].D2_VALFRE</code></td><td><code>D2_VALFRE</code></td></tr>
<tr><td><code>ITENS[].D2_DESPESA</code></td><td><code>D2_DESPESA</code></td></tr>
<tr><td><code>ITENS[].D2_VALBRUT</code></td><td><code>D2_VALBRUT</code></td></tr>
<tr><td><code>ITENS[].D2_EMISSAO</code></td><td><code>D2_EMISSAO</code></td></tr>
<tr><td><code>ITENS[].D2_DTDIGIT</code></td><td><code>D2_DTDIGIT</code></td></tr>
<tr><td><code>ITENS[].D2_DOC</code></td><td><code>D2_DOC</code></td></tr>
<tr><td><code>ITENS[].D2_SERIE</code></td><td><code>D2_SERIE</code></td></tr>
<tr><td><code>ITENS[].D2_SDOC</code></td><td><code>D2_SDOC</code></td></tr>
<tr><td><code>ITENS[].D2_TIPO</code></td><td><code>D2_TIPO</code></td></tr>
<tr><td><code>ITENS[].D2_ESPECIE</code></td><td><code>D2_ESPECIE</code></td></tr>
<tr><td><code>ITENS[].D2_CLIENTE</code></td><td><code>D2_CLIENTE</code></td></tr>
<tr><td><code>ITENS[].D2_LOJA</code></td><td><code>D2_LOJA</code></td></tr>
<tr><td><code>ITENS[].D2_EST</code></td><td><code>D2_EST</code></td></tr>
<tr><td><code>ITENS[].D2_CLASFIS</code></td><td><code>D2_CLASFIS</code></td></tr>
<tr><td><code>ITENS[].D2_TES</code></td><td><code>D2_TES</code></td></tr>
<tr><td><code>ITENS[].D2_CF</code></td><td><code>D2_CF</code></td></tr>
<tr><td><code>ITENS[].D2_BASEIPI</code></td><td><code>D2_BASEIPI</code></td></tr>
<tr><td><code>ITENS[].D2_IPI</code></td><td><code>D2_IPI</code></td></tr>
<tr><td><code>ITENS[].D2_VALIPI</code></td><td><code>D2_VALIPI</code></td></tr>
<tr><td><code>ITENS[].D2_BASEICM</code></td><td><code>D2_BASEICM</code></td></tr>
<tr><td><code>ITENS[].D2_PICM</code></td><td><code>D2_PICM</code></td></tr>
<tr><td><code>ITENS[].D2_VALICM</code></td><td><code>D2_VALICM</code></td></tr>
<tr><td><code>ITENS[].D2_BASFECP</code></td><td><code>D2_BASFECP</code></td></tr>
<tr><td><code>ITENS[].D2_ALQFECP</code></td><td><code>D2_ALQFECP</code></td></tr>
<tr><td><code>ITENS[].D2_VALFECP</code></td><td><code>D2_VALFECP</code></td></tr>
<tr><td><code>ITENS[].D2_BRICMS</code></td><td><code>D2_BRICMS</code></td></tr>
<tr><td><code>ITENS[].D2_ALIQSOL</code></td><td><code>D2_ALIQSOL</code></td></tr>
<tr><td><code>ITENS[].D2_MARGEM</code></td><td><code>D2_MARGEM</code></td></tr>
<tr><td><code>ITENS[].D2_ICMSRET</code></td><td><code>D2_ICMSRET</code></td></tr>
<tr><td><code>ITENS[].D2_BSFCPST</code></td><td><code>D2_BSFCPST</code></td></tr>
<tr><td><code>ITENS[].D2_ALFCPST</code></td><td><code>D2_ALFCPST</code></td></tr>
<tr><td><code>ITENS[].D2_VFECPST</code></td><td><code>D2_VFECPST</code></td></tr>
<tr><td><code>ITENS[].D2_BASIMP5</code></td><td><code>D2_BASIMP5</code></td></tr>
<tr><td><code>ITENS[].D2_ALQIMP5</code></td><td><code>D2_ALQIMP5</code></td></tr>
<tr><td><code>ITENS[].D2_VALIMP5</code></td><td><code>D2_VALIMP5</code></td></tr>
<tr><td><code>ITENS[].D2_BASIMP6</code></td><td><code>D2_BASIMP6</code></td></tr>
<tr><td><code>ITENS[].D2_ALQIMP6</code></td><td><code>D2_ALQIMP6</code></td></tr>
<tr><td><code>ITENS[].D2_VALIMP6</code></td><td><code>D2_VALIMP6</code></td></tr>
<tr><td><code>ITENS[].D2_BASEPS3</code></td><td><code>D2_BASEPS3</code></td></tr>
<tr><td><code>ITENS[].D2_ALIQPS3</code></td><td><code>D2_ALIQPS3</code></td></tr>
<tr><td><code>ITENS[].D2_VALPS3</code></td><td><code>D2_VALPS3</code></td></tr>
<tr><td><code>ITENS[].D2_BASECF3</code></td><td><code>D2_BASECF3</code></td></tr>
<tr><td><code>ITENS[].D2_ALIQCF3</code></td><td><code>D2_ALIQCF3</code></td></tr>
<tr><td><code>ITENS[].D2_VALCF3</code></td><td><code>D2_VALCF3</code></td></tr>
<tr><td><code>ITENS[].D2_DESCZFP</code></td><td><code>D2_DESCZFP</code></td></tr>
<tr><td><code>ITENS[].D2_DESCZFC</code></td><td><code>D2_DESCZFC</code></td></tr>
<tr><td><code>ITENS[].D2_BASEDES</code></td><td><code>D2_BASEDES</code></td></tr>
<tr><td><code>ITENS[].D2_ALIQCMP</code></td><td><code>D2_ALIQCMP</code></td></tr>
<tr><td><code>ITENS[].D2_PDORI</code></td><td><code>D2_PDORI</code></td></tr>
<tr><td><code>ITENS[].D2_PDDES</code></td><td><code>D2_PDDES</code></td></tr>
<tr><td><code>ITENS[].D2_DIFAL</code></td><td><code>D2_PDIFAL</code></td></tr>
<tr><td><code>ITENS[].D2_BSFCCMP</code></td><td><code>D2_BSFCCMP</code></td></tr>
<tr><td><code>ITENS[].D2_ALFCCMP</code></td><td><code>D2_ALFCCMP</code></td></tr>
<tr><td><code>ITENS[].D2_VFCPDIF</code></td><td><code>D2_VFCPDIF</code></td></tr>
<tr><td><code>ITENS[].D2_CCUSTO</code></td><td><code>D2_CC</code></td></tr>
<tr><td><code>ITENS[].D2_CONTA</code></td><td><code>D2_CONTA</code></td></tr>
<tr><td><code>ITENS[].D2_PESO</code></td><td><code>D2_PESO</code></td></tr>
<tr><td><code>ITENS[].D2_ESTOQUE</code></td><td><code>D2_ESTOQUE</code></td></tr>
<tr><td><code>ITENS[].D2_NFORI</code></td><td><code>D2_NFORI</code></td></tr>
<tr><td><code>ITENS[].D2_SERIORI</code></td><td><code>D2_SERIORI</code></td></tr>
<tr><td><code>ITENS[].D2_ITEMORI</code></td><td><code>D2_ITEMORI</code></td></tr>
<tr><td><code>ITENS[].D2_XPRMDPR</code></td><td><code>D2_XPRMDPR</code></td></tr>
<tr><td><code>ITENS[].D2_XALIQBA</code></td><td><code>D2_XALIQBA</code></td></tr>
<tr><td><code>ITENS[].D2_ORIGLAN</code></td><td><code>D2_ORIGLAN</code></td></tr>
<tr><td><code>ITENS[].D2_OP</code></td><td><code>D2_OP</code></td></tr>
<tr><td><code>ITENS[].D2_XPDWISE</code></td><td><code>D2_XPDWISE</code></td></tr>
<tr><td><code>ITENS[].D2_XPDLINX</code></td><td><code>D2_XPDLINX</code></td></tr>
<tr><td><code>ITENS[].D2_XCOLEC</code></td><td><code>D2_XCOLEC</code></td></tr>
<tr><td><code>ITENS[].D2_XCOLDE</code></td><td><code>D2_XCOLDE</code></td></tr>
</tbody>
</table>
<br>
Exemplo de payload enviado (com todos os campos previstos em <code>$field</code>):<br><br>
<pre><code>{
"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": ""
}
]
}</code></pre><br><br><br></div>
</div>
<div id="bkmrk--1"></div>
<div id="bkmrk--2"></div>
<div id="bkmrk--3"></div>
<h3 id="bkmrk-tratamento-de-dados">Tratamento de Dados</h3>
<p id="bkmrk-%7B%7Btratamento-de-dado">Antes do envio, os campos numéricos do cupom são padronizados por rotina numérica, garantindo consistência de formato para integração.<br><br>- <code>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</code>: normalizados com o padrão da rotina numérica.<br><br>Nos itens (<code>ITENS[]</code>), os campos numéricos também são padronizados, com atenção especial à precisão:<br><br>- <code>D2_QUANT</code>: normalizado com 3 casas decimais (<code>setNumeric(..., 3, false)</code>).<br>- <code>D2_PRCVEN</code>: normalizado com 5 casas decimais (<code>setNumeric(..., 5, false)</code>).<br>- <code>D2_PRUNIT</code>: normalizado com 5 casas decimais (<code>setNumeric(..., 5, false)</code>).<br><br>- <code>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</code>: normalizados com o padrão da rotina numérica.</p>
<div id="bkmrk-a1_nome%2C-a1_nreduz%3A-"></div>
<p id="bkmrk-%C2%A0-8"></p>
<div id="bkmrk-a1_nome%3A-remove-o-ca"></div>
<h3 id="bkmrk-chamada-de-integra%C3%A7%C3%A3">Integração com o Protheus</h3>
<p id="bkmrk-%7B%7Bintegracao-com-o-p"><strong>Chamada de integração com o Protheus</strong><br>
- Chamada: Requisição HTTP<br>
- Recurso: <code>documento_saida</code><br>
- Método HTTP: <code>POST</code><br>
- Cabeçalhos:<br>
- <code>tenantId</code>: <code><UF_DA_FILIAL>,<F2_FILIAL></code> (montado a partir dos 2 primeiros caracteres de <code>F2_FILIAL</code> + vírgula + o valor completo de <code>F2_FILIAL</code>)<br>
- Exemplo de payload enviado:<br>
- O payload segue a estrutura descrita na seção “Estruturação de Dados”.<br>
- Tratamento de retorno:<br>
- Ausência de resposta: registra erro com mensagem de “não houve resposta” e finaliza o item como falha.<br>
- Resposta inválida/inesperada: se o retorno não puder ser interpretado como estrutura contendo <code>Mensagem</code>, registra erro de decodificação e finaliza como falha.<br>
- Indicadores de erro: finaliza como falha quando houver <code>code</code> no retorno ou quando <code>Mensagem</code> for <code>ERRO</code>. Quando disponível, utiliza <code>Mensagem Detalhada</code> como mensagem final, consolidando estrutura de erros quando ela vier como objeto/array.<br>
- Exceção de idempotência: quando a mensagem detalhada indicar que o documento já está cadastrado, ajusta o retorno para sucesso (<code>Mensagem</code> = <code>OK</code>) e remove o indicador <code>code</code>, permitindo concluir o item como integrado.<br>
- Sucesso: quando não houver indicadores de erro, finaliza como sucesso e persiste o retorno para auditoria.<br><br><strong>Rotinas Inteligentes</strong><br>
setProtheusClienteIntegrado: validada antes da integração do documento. Garante que o cliente relacionado já esteja integrado para evitar envio inconsistente.<br>
link: <a href="https://kb.illimitar.pro/books/integracao-linx-protheus/page/setprotheusclienteintegrado" target="_blank" rel="noopener">https://kb.illimitar.pro/books/integracao-linx-protheus/page/setprotheusclienteintegrado</a><br><br>
setProtheusCupomEcommerceIntegrado: executada após confirmação de sucesso. Marca o cupom como integrado e permite regularizar cenários de reenvio quando necessário.<br>
link: <a href="https://kb.illimitar.pro/books/integracao-linx-protheus/page/setprotheuscupomecommerceintegrado" target="_blank" rel="noopener">https://kb.illimitar.pro/books/integracao-linx-protheus/page/setprotheuscupomecommerceintegrado</a></p>
<p id="bkmrk-%C2%A0-7"></p>
<div id="bkmrk-recurso%3A-cliente-m%C3%A9t"></div>
<h3 id="bkmrk-tratamento-de-retorn">Tratamento de retorno</h3>
<p id="bkmrk-sucesso%3A%C2%A0quando-n%C3%A3o-">Ao final do processamento, o item é atualizado na tabela <code>wosk_queue</code> 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.</p>
<p id="bkmrk-%C2%A0-10"></p>
<h4 id="bkmrk-encaminhamento-em-ce">Encaminhamento em cenário de erro</h4>
<p id="bkmrk-quando-o-protheus-re">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 <code>wosk_queue</code> com detalhes de mensagem e retorno, permitindo acompanhamento e reprocessamento conforme necessidade operacional.<br><br>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.</p>
<div id="bkmrk-existe-um-mecanismo-"></div>
<p id="bkmrk-%C2%A0-11"></p>
<div id="bkmrk-%7B%7Bdescricao_queue%7D%7D"></div>
<div id="bkmrk--4"></div>
<h3 id="bkmrk-notifica%C3%A7%C3%A3o-de-erros">Notificação</h3>
<div id="bkmrk-%7B%7Bnotificacao%7D%7D">
<div>A notificação de erros consulta itens com falha na tabela <code>wosk_queue</code> (serviço <code>ProtheusCupomFiscalEcommerce</code> e situação de erro), ordenando pela data de processamento para priorizar ocorrências mais antigas. Para compor a listagem, o identificador do item é decomposto para preencher <code>F2_DOC</code>, <code>F2_SERIE</code>, <code>F2_CLIENTE</code> e <code>F2_LOJA</code>, e as datas <code>data_adicionado</code> e <code>data</code> 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.</div>
</div>
<div id="bkmrk--5"></div>
<p id="bkmrk-%C2%A0-12"></p>
<h2 id="bkmrk-asdfas">Fluxo do Processo</h2>
<p id="bkmrk--17"><a href="https://kb.illimitar.pro/uploads/images/gallery/2026-02/062diagrama-sem-nome.jpg" target="_blank" rel="noopener"><img src="https://kb.illimitar.pro/uploads/images/gallery/2026-02/scaled-1680-/062diagrama-sem-nome.jpg" alt="Diagrama sem nome.jpg"></a></p>
<p id="bkmrk--18"><br></p>
<h2 id="bkmrk-crit%C3%A9rios-de-aceita%C3%A7">Critérios de Aceitação</h2>
<table id="bkmrk-processo-subprocesso" style="border-collapse: collapse; width: 100%; height: 320px;" border="1"><colgroup><col style="width: 15.0143%;"><col style="width: 20.0191%;"><col style="width: 45.0429%;"><col style="width: 20.0191%;"></colgroup>
<tbody>
<tr style="height: 29.6px;">
<td class="align-center" style="height: 29.6px;">Processo</td>
<td class="align-center" style="height: 29.6px;">Subprocesso</td>
<td class="align-center" style="height: 29.6px;">Descrição</td>
<td class="align-center" style="height: 29.6px;">Situação esperada</td>
</tr>
<tr style="height: 96.8px;">
<td style="height: 96.8px;">Capturador</td>
<td style="height: 96.8px;">Captura cronológica e controle de posição</td>
<td style="height: 96.8px;">Ao consultar a view <code>WOSK_SERVICO_ENVIA_PROTHEUS_CUPOM_ECOMMERCE</code> com filtro por <code>DATA_PARA_TRANSFERENCIA</code>, ordenação e paginação, deve manter continuidade por posição persistida em <code>wosk_monitor</code> (<code>evento</code>, <code>offset</code>, <code>data_posicao</code>).</td>
<td style="height: 96.8px;">Posição atualizada no controle do capturador e itens pendentes registrados para processamento assíncrono.</td>
</tr>
<tr style="height: 113.6px;">
<td style="height: 113.6px;">Capturador</td>
<td style="height: 113.6px;">Captura manual por identificador composto</td>
<td style="height: 113.6px;">Ao informar um identificador composto no padrão <code>F2_FILIAL-F2_DOC-F2_SERIE-F2_CLIENTE-F2_LOJA</code>, deve consultar a origem com filtros exatos desses campos e registrar o item correspondente para processamento, incluindo a lista <code>ITENS</code>.</td>
<td style="height: 113.6px;">Item pendente registrado para processamento, associado ao cupom solicitado e apto a integração.</td>
</tr>
<tr style="height: 110px;">
<td style="height: 110px;">Fila de Processamento</td>
<td style="height: 110px;">Integração com Protheus</td>
<td style="height: 110px;">Ao processar um item pendente em <code>wosk_queue</code> (serviço <code>ProtheusCupomFiscalEcommerce</code>), deve montar o payload conforme <code>$field</code>, aplicar padronização numérica (incluindo <code>D2_QUANT</code> com 3 casas e <code>D2_PRCVEN</code>/<code>D2_PRUNIT</code> com 5 casas) e realizar a requisição ao recurso <code>documento_saida</code> com cabeçalho <code>tenantId</code>.</td>
<td style="height: 110px;">Item atualizado em <code>wosk_queue</code> 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>code</code> ou <code>Mensagem</code> = <code>ERRO</code>).</td>
</tr>
<tr style="height: 110px;">
<td style="height: 110px;">Fila de Processamento</td>
<td style="height: 110px;">Notificação de falhas</td>
<td style="height: 110px;">Quando existirem ocorrências com falha persistidas em <code>wosk_queue</code> para o serviço <code>ProtheusCupomFiscalEcommerce</code>, deve gerar notificação por e-mail priorizando itens mais antigos pela data de processamento.</td>
<td style="height: 110px;">Destinatários recebem o alerta com os principais campos do cupom e a mensagem higienizada para análise.</td>
</tr>
</tbody>
</table>