ProtheusClienteFull (STATUS: PARCIAL)
Documentação Técnica
| Nome do cliente | |
| Nome do projeto | |
| Biblioteca | wosk_protheus_cliente_full |
| Token da Biblioteca |
d1444b58-fc25-4211-845d-a12be3cc09b7
|
|
URL de Produção
|
https://isnapp.illimitar.pro/ |
| URL de Homologação | https://hmg-isnapp.illimitar.pro/bibliotecas/d1444b58-fc25-4211-845d-a12be3cc09b7/wosk_protheus_cliente_full |
| Data |
Sumário
- Documentação Técnica
- Sumário
- Histórico de Versões
- Descrição Geral dos Processos
- Fluxo do Processo
- Critérios de Aceitação
Histórico de Versões
| Data | Versão | Modificado por | Descrição da Mudança |
| 1.0 | 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:
Monitor captura incrementalmente registros elegíveis.Monitor persiste controle e envia registros para a fila.Queue processa cada item de forma assíncrona.Queue transforma e envia para o Protheus.Queue registra sucesso ou erro com auditoria completa.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
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
estadoregistroanteriorbrutoderetornadoexecução.pela view (incluiCGC_CPF,NOME,ENDERECO, etc.) - data_adicionado:
DATA_PARA_TRANSFERENCIAnormalizada - 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:
Recupera o estado atual do monitor na base de controle.Avalia a situação armazenada:Se CONCLUÍDOMonitor (2)via→Monitor::set()),redefinequandoparautilizadaPARADOpelo(0).Se PARADO (0) → reinicia execução.Se EXECUTANDO (1) → continua do ponto persistido.
Caso iniciado do zero:Offset é redefinido.Chave de posição é limpa.Data de posição é reiniciada.
Normaliza filtros internos.Atualiza situação para EXECUTANDO (1).Executa consulta paginada na view.Para cada registro retornado:Sanitiza dados.Atualiza filtro incremental.Enfileira o registro na Queue.Atualiza offset e posição no controle.
Quando não houver mais registros:Atualiza situação para CONCLUÍDO (2).
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_CODA1_LOJACGC_CPFNOMEPESSOANOME_REDUZENDERECOBAIRROCOMPLEMENTOTIPOUFCOD_MUNICIPIO_IBGECEPDDIDDDTELEFONECONTATOA1_PFISICAA1_INSCRINSC_MUNICIPALDATA_NASCEMAILCOD_PAIS_SISCOMEXCOD_PAIS_BCA1_CONTAA1_CONTRIBA1_TPESSOAA1_SUFRAMAA1_CALCSUFA1_CODMUNSTATUSDATA_PARA_TRANSFERENCIA
Campos obrigatórios para captura incremental:
A1_LOJAA1_CODDATA_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 monitorMomento: Início do capturar()
Dados recuperados da tabela de controle:
offsetchavePosicaodataPosicaofiltrosituacaodataIniciadotoken
Regra:Se situacao = 2 (CONCLUÍDO) → redefinir para 0 (PARADO).
3.2 Reset ao iniciar agendamento/execuçãoMomento: Quando situacao ≠ 1
Ações executadas:
offset ← 0chavePosicao ← ''dataPosicao ← Data/hora atualdataIniciado ← Data/hora atual
3.3 Normalização dos filtrosMomento: 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 EXECUTANDOMomento: Pré-query
situacao ← 1Persistê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:
OFFSET(conceito =cronológico):
delay data), controlando quando um item pode ser processado. Referência: Cronológico.1) Seleção do
3.6e Sanitização dos dadosMomento: Pós-fetch (antes do enfileiramento)
Transformações aplicadas:
trim() em todos os campos string.Remoçmarcação de espaçosestado laterais.(pré-envio):
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_CGCNOME→A1_NOMENOME_REDUZ→A1_NREDUZENDERECO→A1_ENDCOD_PAIS_BC→A1_CODPAISSTATUS→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, háA1_BAIRRO, alteraçãoA1_CONTATO: estrutural de nomes de campos.Não há transformaçremoção de layout.
-
3.7A1_CODPAIS: Atualização do filtro de posiçãoMomento: Após leitura do registro
novoFiltro:
A1_LOJA ← registro atualA1_COD ← registro atualDATA_PARA_TRANSFERENCIA ← registro atual formatadoconvertido para Y-m-dnumérico H:i:s
3.8preenchido Enfileiramentoà esquerdaMomento: 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çãoMomento: Pós-insert na fila
offset ← offset + 1chavePosicao ← chave compostadataPosicao ← DATA_PARA_TRANSFERENCIA
Persistência imediata no controle.
3.10 FinalizaçãoMomento: Quando não houver mais registros
situacao ← 2 (CONCLUÍDO)Persistência do estado final.
3.11 Tratamento de erroMomento: catch(Exception)
situacao ← 4 (PROBLEMA)Registro da mensagem de erro no filtro.Persistência do estado com erro.
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:
processooffsetchave_posicaodata_posicaofiltro (JSON)situacaodata_iniciadotoken
Situações:
0 → Parado1 → Executando2 → Concluído4 → 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:
INSERTesperada: ouarray UPDATE
CamposMensagem persistidos:
chaveopcionalmente Mensagem Detalhada.payload
5) Decisão de situação (JSONpós-envio):
- completoSucesso: do registro)status = 'Aguardando Integração'situacao = (quando 0data_referencia = DATA_PARA_TRANSFERENCIAtoken2reaproveitado)
Nãnã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.
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:
Valida formato da chave.Consulta diretamente a view com filtro:A1_LOJAA1_CODSanitiza os dados (trim).Converte DATA_PARA_TRANSFERENCIA via setDateTime().Monta chave composta.Verifica token existente na fila.Executa Queue::set().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
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:
Recupera o próximo registro pendente da fila (situacao = 0).Atualiza o status para "Enviando" (situacao = 1).Realiza transformação e normalização do payload.Executa envio via setProtheus().Interpreta retorno da API.Atualiza situação para:2 (Sucesso)4 (Erro)
Registra tempo de execução e resposta completa.Em caso de erro, pode acionar nova captura via outro monitor.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_CODA1_LOJAA1_CGC (CGC_CPF)A1_NOMEA1_PESSOAA1_NREDUZA1_ENDA1_BAIRROA1_COMPLEMA1_TIPOA1_ESTA1_COD_MUNA1_CEPA1_DDIA1_DDDA1_TELA1_CONTATOA1_PFISICAA1_INSCRA1_INSCRMA1_DTNASCA1_EMAILA1_PAISA1_CODPAISA1_CONTAA1_CONTRIBA1_TPESSOAA1_SUFRAMAA1_CALCSUFA1_CODMUNA1_MSBLQL
Campos críticos obrigatórios para envio:
A1_CODA1_LOJAA1_NOMEA1_CODPAIS
3. REESTRUTURAÇÃO DOS DADOS
3.1 Recuperação do estado do monitorMomento: 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çãoMomento: Pré-envio
Atualiza registro:
status ← 'Enviando'situacao ← 1
Persistência imediata na tabela wosk_queue.
3.3 Normalização dos filtrosMomento: Pré-transformação
Operação:
getConteudo() → reorganiza payload conforme mapeamento interno $field.
Mapeamento estrutural:
Campos de origem → Campos Protheus
Exemplo:A1_CGC ← CGC_CPFA1_NOME ← NOMEA1_NREDUZ ← NOME_REDUZA1_END ← ENDERECO
Campos não mapeados explicitamente mantêm mesmo nome.
3.4 Atualização do estado para EXECUTANDOMomento: Já definido no item 3.2 (situacao = 1).
3.5 Paginação dos registrosMomento: Seleção via get()
Limite padrão: 10 registros por execução.
3.6 Sanitização dos dadosMomento: 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çãoNão aplicável à Queue (controle é feito via token e situacao).
3.8 EnfileiramentoNão aplicável nesta etapa (já realizado pelo Monitor).
3.9 Atualização incremental da posiçãoNão aplicável.
3.10 FinalizaçãoMomento: 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)mensagemtempo_execucaosituacaodata_processado
3.11 TratamentoAlém de erroMomento:atualizar catch(Exception)
Ações:
situacaodo ←item, 4mensagemo ←fluxo erropadrão capturadoretornoregistra ←auditoria JSONde comintegração erro
Persistência:
OSK_LOG_INTEGRACAO_PROTHEUS.
Atualiza wosk_queue com erro completo.
Regra adicional:
Se
- tenta
- capturar
- o
- mesmo
Acionacliente no processoProtheusClientePadrao(MonitorProtheusClientePadraocorrespondente)viaecapturar().
criadoVerificaverifica senovoumtokenitem foigerado.em wosk_queue.Se
houveronovoitemtoken:ExecutadoProtheusClientePadraoexistir, esta fila pode marcar o item atual para remoção e chamarsetProtheusExcluir([.'ProtheusClienteFull'"ProtheusClienteFull"], "chave", chave)
- mesmo
- Atualização final
Objetivo:Evitaritem: duplicidadequando entrenão integraçõesfor Fullremovido, atualiza wosk_queue com retorno, mensagem, dump de requisição e Padrão.
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
Controlewosk_queue: fila principal do monitorNãoprocesso aplicável(acao à= Queue.
4.2wosk_queue_log: Filalog de falhas de SQL durante escrita de auditoriaOSK_LOG_INTEGRACAO_PROTHEUS: auditoria de integração
Tabela:
wosk_queue
Camposque atualizados:
acao = 'ProtheusClienteFull'chaveconteudo (JSON original)retorno (JSON resposta API)mensagemrequisicao (dump HTTP)tempo_execucaosituacaodata_adicionadodata (processado em)token
Situações:
0 → Aguardando1 → Enviando2 → Integradocasam com sucesso4 → 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()
Nã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
Encadeamento obrigatório: Monitor → Queue.
- Monitor (cron/on-demand): recebe a chave
A1_LOJA-A1_COD, consulta a viewWOSK_SERVICO_ENVIA_PROTHEUS_CLIENTES_FULLe grava/atualiza o item na tabelawosk_queuecomsituacao = 0. - Queue (cron/worker): seleciona itens pendentes (
situacao = 0), marca como em envio (situacao = 1), monta payloadA1_*, envia para o Protheus e grava o resultado (situacao = 2ou4). - Notificação: erros (
situacao = 4) podem ser consolidados e enviados por e-mail viaQueue::notificar(). - Fallback: em erro, pode acionar captura do mesmo cliente em
ProtheusClientePadraoe remover o item desta fila quando aplicável.
Critérios de Aceitação
| Processo | Subprocesso | Descrição | Situação esperada |
| Monitor | Captura por chave | Ao 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. |
| Queue | Envio ao Protheus | O worker deve mapear dados para A1_*, aplicar normalizações e executar POST no serviço de cliente. |
Resposta OK → situacao = 2 e auditoria registrada. |
| Queue | Tratamento de erro | Quando 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ção | Consolidação | Listar erros pendentes do processo e enviar e-mail aos destinatários configurados. | Relatório enviado com chave, datas e mensagem de erro normalizada. |