Ir para o conteúdo principal

ProtheusClienteFull (STATUS: PARCIAL)

Documentação Técnica

   
Nome do cliente TO-DOOsklen
Nome do projeto TO-DOIntegração Linx → Protheus (WOSK)
Biblioteca wosk_protheus_cliente_full
Token da Biblioteca
d1444b58-fc25-4211-845d-a12be3cc09b7
URL de Produção
https://isnapp.illimitar.pro//bibliotecas/d1444b58-fc25-4211-845d-a12be3cc09b7/wosk_protheus_cliente_full
URL de Homologação https://hmg-isnapp.illimitar.pro/bibliotecas/d1444b58-fc25-4211-845d-a12be3cc09b7/wosk_protheus_cliente_full
Data ?24/02/2026

Sumário

Histórico de Versões

     
Data Versão Modificado por Descrição da Mudança
?24/02/2026 1.0 MaykonGerado automaticamente
Documentação inicial

Descrição Geral dos Processos

AEsta integraçãobiblioteca ProtheusClienteFull é composta por três camadas lógicas: Monitor, Queue e Sistema Externo (Protheus). O fluxo é totalmente assíncrono, controlado por persistência de estado e executado por agendamentos (cron).

O processo inicia no Monitor, responsável pela captura incremental de registros elegíveis na view WOSK_SERVICO_ENVIA_PROTHEUS_CLIENTES_FULL. O Monitor controla continuidade por meio de offset, chave de posição e data de referência (DATA_PARA_TRANSFERENCIA), evitando reprocessamento indevido e garantindo ordenação cronológica. Cada registro identificado como elegível é sanitizado e enfileirado na tabela wosk_queue com status inicial “Aguardando Integração”. O estado da execução é persistido na tabela wosk_monitor, permitindo retomada controlada em caso de interrupção.

Apósdocumenta o enfileiramento, a responsabilidade é transferida para a Queue ProtheusClienteFull. Essa camada realiza o processamento assíncrono dos registros pendentes na fila (situacao = 0). Para cada item:

  • Atualiza o status para “Enviando”.

  • Reorganiza o payload conforme o mapeamento estrutural exigido pelo Protheus.

  • Aplica normalizações finais (remoção de acentos, limpeza de caracteres inválidos, padronização de códigos).

  • Executa o envio via integração HTTP.

  • Interpreta a resposta da API.

  • Atualiza a situação para sucesso (2) ou erro (4).

  • Persiste retorno, mensagem, tempo de execução.

Em caso de sucesso, o registro é marcado como integrado.
Em caso de erro, o registro permanece armazenado com situacao = 4, mantendo histórico completo da falha e permitindo notificação e reprocessamento controlado.

A rastreabilidade é garantida por:

  • Controle de estado no wosk_monitor.

  • Controle transacional e auditoria detalhada no wosk_queue.

  • Uso de chave composta (A1_LOJA-A1_COD) como identificador único.

  • Persistência de token para controle de reprocessamento.

O fluxo fim-a-fim pode ser resumido da seguinte forma:

  1. Monitor captura incrementalmente registros elegíveis.

  2. Monitor persiste controle e envia registros para a fila.

  3. Queue processa cada item de forma assíncrona.

  4. Queue transforma e envia para o Protheus.

  5. Queue registra sucesso ou erro com auditoria completa.

  6. Em caso de falha, mecanismos de tratamento e notificação são acionados.

A arquitetura separa claramente responsabilidades:

Monitor → captura e controle incremental.
Queue → transformação, envio e auditoria.

Essa separação garante:

  • Escalabilidade (processamento desacoplado).

  • Continuidade transacional.

  • Reprocessamento seguro.

  • Controle de duplicidade.

  • Observabilidade operacional.

Monitor

    1. DESCRIÇÃO DO FLUXO

O Monitor ProtheusClienteFull é responsável exclusivamente pela captura incremental de registros da view WOSK_SERVICO_ENVIA_PROTHEUS_CLIENTES_FULL e pelo encaminhamento estruturado desses registros para a fila de integração de Clientes (Full) para o Protheus. Ela separa o trabalho em duas etapas: uma etapa de captura (Monitor) e outra de processamento assíncrono (Queue).

Na prática, o Monitor localiza os dados do cliente em uma visão de serviço e cria (ou atualiza) um item na fila para integração. Depois, a Queue consome esse item, prepara o payload final e realiza o envio para o Protheus, registrando o resultado para auditoria e acompanhamento.

O processoobjetivo do fluxo é acionadogarantir que o envio ocorra de forma controlada, com rastreabilidade de erros e possibilidade de reprocessamento, sem depender de uma execução única e sincrona.

Monitor

Conceito: Monitor

Processo: 
Classe: WOSK\ProtheusClienteFull\Monitor
Entrada: chave no formato A1_LOJA-A1_COD (ex.: 01SD0001-000123) ou lista de chaves.
Origem dos dados: consulta na view WOSK_SERVICO_ENVIA_PROTHEUS_CLIENTES_FULL com WHERE construído dinamicamente a partir da chave.

Query base (sem filtro):

SELECT
    A1_COD,
    A1_LOJA,
    CGC_CPF,
    NOME,
    PESSOA,
    NOME_REDUZ,
    ENDERECO,
    BAIRRO,
    COMPLEMENTO,
    TIPO,
    UF,
    COD_MUNICIPIO_IBGE,
    CEP,
    DDI,
    DDD,
    TELEFONE,
    CONTATO,
    A1_PFISICA,
    A1_INSCR,
    INSC_MUNICIPAL,
    DATA_NASC,
    EMAIL,
    COD_PAIS_SISCOMEX,
    COD_PAIS_BC,
    A1_CONTA,
    A1_CONTRIB,
    A1_TPESSOA,
    A1_SUFRAMA,
    A1_CALCSUF,
    A1_CODMUN,
    STATUS,
    DATA_PARA_TRANSFERENCIA
FROM
    WOSK_SERVICO_ENVIA_PROTHEUS_CLIENTES_FULL

WHERE dinâmico aplicado por agendamentochave:

WHERE
    A1_LOJA = '{A1_LOJA}'
    AND A1_COD = '{A1_COD}'

Reestruturações e transformações (cron)pré-insert atravésna fila):
- Todos os campos do métodoregistro run(retornado sofrem trim() (não tratado como alteração relevante).
- SuaO responsabilidadecampo DATA_PARA_TRANSFERENCIA é convertido/normalizado para Y-m-d H:i:s e usado como data de captura do item na fila.
- Destaque (conceito cronológico): ao normalizar e usar DATA_PARA_TRANSFERENCIA para ordenar/capturar, o fluxo passa a depender de data/hora como controle de processamento. Referência: Cronológico.

Persistência:
- O Monitor insere/atualiza o item na fila pela Queue (tabela wosk_queue) usando:

  • acao:
      ProtheusClienteFull
    • chave:

      Recuperar{A1_LOJA}-{A1_COD}

    • conteudo: o estadoregistro anteriorbruto deretornado execução.

      pela view (inclui CGC_CPF, NOME, ENDERECO, etc.)
    • data_adicionado: DATA_PARA_TRANSFERENCIA normalizada
    • situacao: 0 (Aguardando integração)

    Controlar- continuidadeA incrementaltabela (offsetwosk_monitor eé chavea persistência padrão de posição).

  • Evitar reprocessamento indevido.

  • Garantir ordenação cronológica por DATA_PARA_TRANSFERENCIA.

  • Persistir o o/controle transacional do processamento.

  • Encaminhar registros válidos para a Queue.

Fluxo de execução:

    1. Recupera o estado atual do monitor na base de controle.

    2. Avalia a situação armazenada:

      • Se CONCLUÍDOMonitor (2)via Monitor::set()), redefinequando parautilizada PARADOpelo (0).

      • Se PARADO (0) → reinicia execução.

      • Se EXECUTANDO (1) → continua do ponto persistido.

    3. Caso iniciado do zero:

      • Offset é redefinido.

      • Chave de posição é limpa.

      • Data de posição é reiniciada.

    4. Normaliza filtros internos.

    5. Atualiza situação para EXECUTANDO (1).

    6. Executa consulta paginada na view.

    7. Para cada registro retornado:

      • Sanitiza dados.

      • Atualiza filtro incremental.

      • Enfileira o registro na Queue.

      • Atualiza offset e posição no controle.

    8. Quando não houver mais registros:

      • Atualiza situação para CONCLUÍDO (2).

    9. Em caso de erro:

      • Atualiza situação para PROBLEMA (4).

      • Registra erro no filtro persistido.

O Monitor não realiza integrações externas nem transformações finais de payload. Sua responsabilidade termina no momento do enfileiramento.

2. DADOS NECESSÁRIOS

Ele opera sobre a view: WOSK_SERVICO_ENVIA_PROTHEUS_CLIENTES_FULL

Campos capturados:

A1_COD
A1_LOJA
CGC_CPF
NOME
PESSOA
NOME_REDUZ
ENDERECO
BAIRRO
COMPLEMENTO
TIPO
UF
COD_MUNICIPIO_IBGE
CEP
DDI
DDD
TELEFONE
CONTATO
A1_PFISICA
A1_INSCR
INSC_MUNICIPAL
DATA_NASC
EMAIL
COD_PAIS_SISCOMEX
COD_PAIS_BC
A1_CONTA
A1_CONTRIB
A1_TPESSOA
A1_SUFRAMA
A1_CALCSUF
A1_CODMUN
STATUS
DATA_PARA_TRANSFERENCIA

Campos obrigatórios para captura incremental:

A1_LOJA
A1_COD
DATA_PARA_TRANSFERENCIA

Esses campos compõem a chave lógica e o controle cronológico da captura.

3. REESTRUTURAÇÃO DOS DADOS

3.1 Recuperação do estado do monitor
Momento: Início do capturar()

Dados recuperados da tabela de controle:

offset
chavePosicao
dataPosicao
filtro
situacao
dataIniciado
token

Regra:
Se situacao = 2 (CONCLUÍDO) → redefinir para 0 (PARADO).

3.2 Reset ao iniciar agendamento/execução
Momento: Quando situacao ≠ 1

Ações executadas:

offset ← 0
chavePosicao ← ''
dataPosicao ← Data/hora atual
dataIniciado ← Data/hora atual

3.3 Normalização dos filtros
Momento: Pré-consulta

Regra:

Se DATA_PARA_TRANSFERENCIA não estiver definida no filtro:
DATA_PARA_TRANSFERENCIA ← data mínima configurada no sistema.

Conversão obrigatória:
DATA_PARA_TRANSFERENCIA → formato DateTime padrão do sistema.

3.4 Atualização do estado para EXECUTANDO
Momento: Pré-query

situacao ← 1
Persistência imediata no controle do monitor.

 

Queue

3.5Conceito: PaginaçQueue

Processo:
 Classe: WOSK\ProtheusClienteFull\Queue
Entrada (obrigatória): token do item na fila (Queue::run(string $token)).

0) Preparação dosdo registrosprocessamento (acionada por cron/worker):
Momento:Antes Execuçde executar run(token) para cada item, o processo pode chamar Queue::prepare(), que delega para _prepare("ProtheusClienteFull"). Essa etapa seleciona tokens pendentes (situacao = 0) e dispara a execução respeitando limites de paralelismo e atraso configurável.

Query de seleção da consultafila (com WHERE dinâmico por atraso):

Critérios:

SELECT 

/*+ SQL_BIG_RESULT */ /*+ SQL_NO_CACHE */ `token` FROM `{$this->bancoIntegrador}`.`wosk_queue` WHERE `acao` = 'ProtheusClienteFull' AND `situacao` = 0 {AND `data` <= '{agora - delay em minutos}'} ORDER BY DATA_PARA_TRANSFERENCIA`data_adicionado` ASC

Controle:

Destaque

OFFSET(conceito =cronológico): offsetquando persistido
Limiteo =delay configuraçestá ativo, a seleção internafiltra por data/hora (data), controlando quando um item pode ser processado. Referência: Cronológico.

1) Seleção do monitor

item

3.6e Sanitização dos dados
Momento: Pós-fetch (antes do enfileiramento)

Transformações aplicadas:

trim() em todos os campos string.
Remoçmarcação de espaçosestado laterais.(pré-envio):

Padronizaç- Lê o item em wosk_queue pelo token.
- Atualiza o mesmo item para “Enviando” com situacao = 1 (início do processamento).

2) Reestruturação do conteúdo (mapeamento de campos):
O conteúdo capturado pelo Monitor vem com nomes como CGC_CPF, NOME, ENDERECO, etc. Antes do envio, a Queue converte isso para o layout esperado no Protheus, produzindo chaves A1_*. Exemplos de mapeamento:

  • CGC_CPF → A1_CGC
  • NOME → A1_NOME
  • NOME_REDUZ → A1_NREDUZ
  • ENDERECO → A1_END
  • COD_PAIS_BC → A1_CODPAIS
  • STATUS → A1_MSBLQL

3) Transformações de dados (pré-envio ao Protheus):
- A1_NOME e A1_NREDUZ: remoção de datasacentos viae setDateTime()do quandocaractere aplicável.

|.
-

NãoA1_END, A1_BAIRRO, alteraçãoA1_CONTATO: estrutural de nomes de campos.
Não há transformaçremoção de layout.

acentos.
-

3.7A1_CODPAIS: Atualização do filtro de posição
Momento: Após leitura do registro

novoFiltro:

A1_LOJA ← registro atual
A1_COD ← registro atual
DATA_PARA_TRANSFERENCIA ← registro atual formatadoconvertido para Y-m-dnumérico H:i:s

e

3.8preenchido Enfileiramentoà esquerda
Momento: Dentro do loop de paginação

Chave composta:

chave = A1_LOJA + '-' + A1_COD

Operação:

Queue::set(
chave,
payload completo,
[],
'Aguardando Integração',
'',
0,
0,
dataReferencia,
token
)

Se falhar:
Lança exceção.

3.9 Atualização incremental da posição
Momento: Pós-insert na fila

offset ← offset + 1
chavePosicao ← chave composta
dataPosicao ← DATA_PARA_TRANSFERENCIA

Persistência imediata no controle.

3.10 Finalização
Momento: Quando não houver mais registros

situacao ← 2 (CONCLUÍDO)
Persistência do estado final.

3.11 Tratamento de erro
Momento: catch(Exception)

situacao ← 4 (PROBLEMA)
Registro da mensagem de erro no filtro.
Persistência do estado com erro.

zeros

4.até PERSISTÊNCIA5 DOS DADOSdígitos (BANCOstr_pad).

4) DEEnvio DADOS)ao Protheus:


-

4.1 Controle do monitor

Identificação lógica do processo:
ProtheusClienteFull

Tabela de persistência de controle:
wosk_monitor

Campos persistidos:

processo
offset
chave_posicao
data_posicao
filtro (JSON)
situacao
data_iniciado
token

Situações:

0 → Parado
1 → Executando
2 → Concluído
4 → Problema

4.2 FilaChamada de integração via setProtheus("cliente", payload, "POST", headers).
- Header utilizado no envio:

Tabela:
wosk_queue

tenantId: "01,01SD0001"

Operações- realizadas:

Resposta

INSERTesperada: ouarray UPDATE

com

CamposMensagem persistidos:

e

chaveopcionalmente Mensagem Detalhada.
payload
5) Decisão de situação (JSONpós-envio):
- completoSucesso: do registro)
status = 'Aguardando Integração'
situacao = 0
data_referencia = DATA_PARA_TRANSFERENCIA
token2
(quando reaproveitado)

o há transformaçcode e Mensagem != "ERRO").
- Erro: situacao = 4 (quando Mensagem == "ERRO" ou quando existe code na resposta, ou exceção estrutural no payloadprocessamento).

6) nestaAções etapa.

e

5.persistências RESULTADO(por DO PROCESSAMENTOsituação):

Execução normal:

    • Todos os registros elegíveis são enfileirados.

    • Offset e posição são atualizados incrementalmente.

    • Monitor finaliza como CONCLUÍDO (2).

    • Rastreamento garantido via wosk_monitor.

Execução com erro:

    • Monitor finaliza como PROBLEMA (4).

    • Última posição permanece persistida.

    • Permite retomada controlada em nova execução.

6. OPERAÇÃO MANUAL – capturar()

Método: capturar($chave)

Finalidade:

Permitir reprocessamento pontual de registros específicos.

Entrada:

chave no formato:
A1_LOJA-A1_COD

Fluxo:

    1. Valida formato da chave.

    2. Consulta diretamente a view com filtro:
      A1_LOJA
      A1_COD

    3. Sanitiza os dados (trim).

    4. Converte DATA_PARA_TRANSFERENCIA via setDateTime().

    5. Monta chave composta.

    6. Verifica token existente na fila.

    7. Executa Queue::set().

    8. Em caso de falha → gera exceção e registra erro.

Responsabilidade:

Não altera estado global do monitor.
Realiza apenas inserção pontual na fila.

Queue

    1. DESCRIÇÃO DO FLUXO

A Queue ProtheusClienteFull é responsável exclusivamente pelo processamento assíncrono dos registros previamente enfileirados pelo Monitor, realizando:

    • Transformação estrutural dos dados.

    • Normalização final para layout Protheus.

    • Envio via integração HTTP.

    • Controle de status.

    • Tratamento de erro.

    • Registro de auditoria.

    • Notificação de falhas.

A Queue é acionada por cron através do método run().

Fluxo de execução:

    1. Recupera o próximo registro pendente da fila (situacao = 0).

    2. Atualiza o status para "Enviando" (situacao = 1).

    3. Realiza transformação e normalização do payload.

    4. Executa envio via setProtheus().

    5. Interpreta retorno da API.

    6. Atualiza situação para:

      • 2 (Sucesso)

      • 4 (Erro)

    7. Registra tempo de execução e resposta completa.

    8. Em caso de erro, pode acionar nova captura via outro monitor.

    9. Persiste auditoria final na tabela de fila.

A Queue não consulta view nem controla offset. Sua responsabilidade inicia exclusivamente no momento da leitura da fila.

2. DADOS NECESSÁRIOS PARA O ENDPOINT

A Queue não expõe endpoint externo.

Ela consome registros persistidos na tabela:

wosk_queue

Campos obrigatórios no payload (conteudo):

A1_COD
A1_LOJA
A1_CGC (CGC_CPF)
A1_NOME
A1_PESSOA
A1_NREDUZ
A1_END
A1_BAIRRO
A1_COMPLEM
A1_TIPO
A1_EST
A1_COD_MUN
A1_CEP
A1_DDI
A1_DDD
A1_TEL
A1_CONTATO
A1_PFISICA
A1_INSCR
A1_INSCRM
A1_DTNASC
A1_EMAIL
A1_PAIS
A1_CODPAIS
A1_CONTA
A1_CONTRIB
A1_TPESSOA
A1_SUFRAMA
A1_CALCSUF
A1_CODMUN
A1_MSBLQL

Campos críticos obrigatórios para envio:

A1_COD
A1_LOJA
A1_NOME
A1_CODPAIS

3. REESTRUTURAÇÃO DOS DADOS

3.1 Recuperação do estado do monitor
Momento: Início do run()

Operação:

Busca na tabela wosk_queue:

acao = 'ProtheusClienteFull'
situacao = 0

Limite configurável (default 10).

3.2 Reset ao iniciar execução
Momento: Pré-envio

Atualiza registro:

status ← 'Enviando'
situacao ← 1

Persistência imediata na tabela wosk_queue.

3.3 Normalização dos filtros
Momento: Pré-transformação

Operação:

getConteudo() → reorganiza payload conforme mapeamento interno $field.

Mapeamento estrutural:

Campos de origem → Campos Protheus

Exemplo:
A1_CGC ← CGC_CPF
A1_NOME ← NOME
A1_NREDUZ ← NOME_REDUZ
A1_END ← ENDERECO

Campos não mapeados explicitamente mantêm mesmo nome.

3.4 Atualização do estado para EXECUTANDO
Momento: Já definido no item 3.2 (situacao = 1).

3.5 Paginação dos registros
Momento: Seleção via get()

Limite padrão: 10 registros por execução.

3.6 Sanitização dos dados
Momento: Pré-envio HTTP

Transformações aplicadas:

A1_NOME:

    • Remoção de acentos.

    • Remoção de caractere '|'.

A1_NREDUZ:

    • Remoção de acentos.

    • Remoção de '|'.

A1_END:

    • Remoção de acentos.

A1_BAIRRO:

    • Remoção de acentos.

A1_CONTATO:

    • Remoção de acentos.

A1_CODPAIS:

    • Conversão para inteiro.

    • Preenchimento com zeros à esquerda.

    • Tamanho fixo de 5 posições.

Não há alteração de estrutura JSON.

3.7 Atualização do filtro de posição
Não aplicável à Queue (controle é feito via token e situacao).

3.8 Enfileiramento
Não aplicável nesta etapa (já realizado pelo Monitor).

3.9 Atualização incremental da posição
Não aplicável.

3.10 Finalização
Momento: Pós-resposta da API

Interpretação do retorno:

Se resposta vazia:
situacao ← 4

Se não for array válido:
situacao ← 4

Se Mensagem = "ERRO":
situacao ← 4

Se code existir:
situacao ← 4

Caso contrário:
situacao ← 2

EmQuando sucesso (situacao = 2):

Executa:
chama setProtheusClienteIntegrado(chave, true)

.

Persistência final:

wosk_queue:
retorno (JSON resposta)
mensagem
tempo_execucao
situacao
data_processado

3.11 TratamentoAlém de erro
Momento:atualizar catch(Exception)

o

Ações:

status

situacaodo item, 4
mensagemo fluxo erropadrão capturado
retornoregistra auditoria JSONde comintegração erro

em

Persistência:

OSK_LOG_INTEGRACAO_PROTHEUS.

Atualiza wosk_queue com erro completo.

Regra adicional:

Se

  • Quando erro (situacao = 4):

      tenta
    1. capturar
        o
      1. mesmo

        Acionacliente no processo ProtheusClientePadrao (Monitor ProtheusClientePadraocorrespondente) viae capturar().

      2. Verificaverifica se novoum tokenitem foi gerado.

        criado
      3. em
      4. wosk_queue.

        Se houvero novoitem token:
        Executado ProtheusClientePadrao existir, esta fila pode marcar o item atual para remoção e chamar setProtheusExcluir(['ProtheusClienteFull'"ProtheusClienteFull"], "chave", chave).

    2. Atualização
    3. final
    do

    Objetivo:
    Evitaritem:
    duplicidadequando entrenão integraçõesfor Fullremovido, atualiza wosk_queue com retorno, mensagem, dump de requisição e Padrão.

    tempo total.
  • 4.Regra PERSISTÊNCIAde DOS DADOSdeduplicação (BANCOpré-insert DEna DADOS)fila):
    Ao inserir itens com situacao = 0, o mecanismo padrão da Queue compara o conteudo com o que já existe para a mesma acao e chave. Se o conteúdo for igual, a inserção pode ser ignorada. O campo DATA_PARA_TRANSFERENCIA é desconsiderado nessa comparação, evitando reprocessos apenas por variação de data/hora.

    Tabelas envolvidas (persistência e auditoria):

    4.1

      Controle
    • wosk_queue: fila principal do monitor
      Nãoprocesso aplicável(acao à= Queue.

      ProtheusClienteFull
      )
    • 4.2

    • wosk_queue_log: Filalog de falhas de SQL durante escrita de auditoria
    • OSK_LOG_INTEGRACAO_PROTHEUS: auditoria de integração

      Tabela:

      para

      wosk_queue

      ações

      Camposque atualizados:

      acao = 'ProtheusClienteFull'
      chave
      conteudo (JSON original)
      retorno (JSON resposta API)
      mensagem
      requisicao (dump HTTP)
      tempo_execucao
      situacao
      data_adicionado
      data (processado em)
      token

      Situações:

      0 → Aguardando
      1 → Enviando
      2 → Integradocasam com sucesso
      4 → Erro

      5. RESULTADO DO PROCESSAMENTO

      Execução com sucesso:

        • Registro atualizado para situacao = 2.

        • Payload enviado ao Protheus.

        • Registro marcado como integrado.

        • Tempo de execução registrado.

        • Auditoria completa armazenada.

      Execução com erro:

        • Registro atualizado para situacao = 4.

        • Mensagem de erro persistida.

        • Dump da requisição armazenado.

        • Pode disparar integração alternativa.

        • Registro permanece disponível para notificação.

        /Protheus/

      6. OPERAÇÃO MANUAL – capturar()

      Notificação aplicável à Queue.

      A Queue não realiza captura manual de registros.
      Sua responsabilidade limita-se ao processamento dos itens já existentes na fila.

      Funcionalidade complementar:

      notificar()

      Objetivo:

      Enviar e-mail com resumo de erros (situacaoconsolidação =via 4).query):
      A rotina Queue::notificar() consulta os erros deste processo diretamente na tabela wosk_queue e envia e-mail para destinatários configurados.

      Consulta:

      SELECT
          em`token`,
          wosk_queue
      acao`acao`, `chave`, `data_adicionado`, `data`, `mensagem` AS 'ERRO' FROM `{$this->bancoIntegrador}`.`wosk_queue` WHERE `acao` = 'ProtheusClienteFull'
      situacao AND `situacao` = 4

      ORDER BY `data` ASC

      Transformações na notificação:

        • Extração de A1_LOJA e A1_COD da chave.

        • Limpeza de mensagens SQL Server.

        • Remoção de prefixos técnicos.

        • Normalização de quebras de linha.

        • Formatação de datas (d/m/Y H:i:s).

      Destinatários fixos configurados internamente.

      Assunto:

      "Erros na Integração do LINX para o PROTHEUS - Cliente - Full"

      Finalidade:

      Garantir visibilidade operacional e rastreabilidade de falhas.

      Fluxo do Processo

      Diagrama sem nome.jpgEncadeamento obrigatório: Monitor → Queue.

      1. Monitor (cron/on-demand): recebe a chave A1_LOJA-A1_COD, consulta a view WOSK_SERVICO_ENVIA_PROTHEUS_CLIENTES_FULL e grava/atualiza o item na tabela wosk_queue com situacao = 0.
      2. Queue (cron/worker): seleciona itens pendentes (situacao = 0), marca como em envio (situacao = 1), monta payload A1_*, envia para o Protheus e grava o resultado (situacao = 2 ou 4).
      3. Notificação: erros (situacao = 4) podem ser consolidados e enviados por e-mail via Queue::notificar().
      4. Fallback: em erro, pode acionar captura do mesmo cliente em ProtheusClientePadrao e remover o item desta fila quando aplicável.


      Critérios de Aceitação


           
      ProcessoSubprocessoDescriçãoSituação esperada
      MonitorCaptura por chaveAo informar A1_LOJA-A1_COD, o Monitor deve montar o WHERE dinamicamente e consultar a view de serviço.Registro encontrado → item criado/atualizado em wosk_queue com situacao = 0.
      QueueEnvio ao ProtheusO worker deve mapear dados para A1_*, aplicar normalizações e executar POST no serviço de cliente.Resposta OK → situacao = 2 e auditoria registrada.
      QueueTratamento de erroQuando houver falha de integração, o item deve permanecer rastreável e elegível para notificação.situacao = 4, mensagem registrada e opção de fallback para ProtheusClientePadrao.
      NotificaçãoConsolidaçãoListar erros pendentes do processo e enviar e-mail aos destinatários configurados.Relatório enviado com chave, datas e mensagem de erro normalizada.