ProtheusClientePadrao (STATUS: PARCIAL)
Documentação Técnica
| Nome do cliente | TO-DO |
| Nome do projeto | TO-DO |
| Biblioteca | wosk_protheus_cliente_padrao |
| Token da Biblioteca |
31e42d08-2d8e-4d74-b4ec-e66ef85f3c66
|
|
URL de Produção
|
https://isnapp.illimitar.pro/bibliotecas/31e42d08-2d8e-4d74-b4ec-e66ef85f3c66/wosk_protheus_cliente_padrao |
| URL de Homologação | https://hmg-isnapp.illimitar.pro/bibliotecas/31e42d08-2d8e-4d74-b4ec-e66ef85f3c66/wosk_protheus_cliente_padrao |
| Data | 23/02/2026 |
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 |
| 23/02/2026 | 1.0 | Maykon/Gustavo | Documentação inicial |
Descrição Geral dos Processos
Escopo deste arquivo:
- Este documento foi gerado exclusivamente a partir de wosk_protheus_padrao/wosk_protheus_padrao.php.
- Classes presentes neste arquivo: Monitor e Queue.
- Classe ausente neste arquivo: Webservice (sem endpoint implementado aqui).
Monitor
Processo:
1. DESCRIÇÃO DO FLUXO
- Responsabilidade: capturar registros de cliente por chave e enfileirar para integração assíncrona no Protheus.
- Disparo: operação manual via Monitor::capturar(chave).
Para cada chave recebida, o processo executa:
- Normaliza a entrada para lista de chaves (suporta chave única ou array).
- Reaproveita token existente do item de fila, consultando Queue::get('', chaveOriginal) quando houver registro.
- Valida formato da chave e deriva filtros (A1_LOJA e A1_COD).
- Executa consulta na fonte de dados do monitor (viewQuery) filtrando por A1_LOJA e A1_COD.
- Sanitiza o registro retornado com trim() recursivo em todos os campos.
- Reestrutura o controle de posição (novoFiltro) com a chave do cliente e a DATA_PARA_TRANSFERENCIA normalizada.
- Monta a chave da fila no formato A1_LOJA-A1_COD e grava o item para processamento assíncrono com status Aguardando Integração.
2. DADOS NECESSÁRIOS PARA O ENDPOINT
Este arquivo não implementa endpoint (WebService). Para o Monitor, o dado necessário para execução manual é a chave do cliente.
Entrada do processo:
- Parâmetro chave: string ou array.
- Formato obrigatório: A1_LOJA-A1_COD.
- Regra: a chave precisa conter exatamente 2 segmentos (separados por -).
Fonte de dados (captura):
- View/Tabela lógica: WOSK_SERVICO_ENVIA_PROTHEUS_CLIENTES_PADRAO
Campos capturados (conjunto completo do viewQuery):
- Identificação: A1_COD, A1_LOJA
- Cadastro: CGC_CPF, NOME, PESSOA, NOME_REDUZ, TIPO, STATUS
- Endereço: ENDERECO, BAIRRO, COMPLEMENTO, UF, CEP, COD_MUNICIPIO_IBGE
- Contato: DDI, DDD, TELEFONE, CONTATO, EMAIL
- Documentos/Complementos: A1_PFISICA, A1_INSCR, INSC_MUNICIPAL, DATA_NASC
- País/Tributos/Outros: COD_PAIS_SISCOMEX, COD_PAIS_BC, A1_CONTA, A1_CONTRIB, A1_TPESSOA, A1_SUFRAMA, A1_CALCSUF, A1_CODMUN
- Controle incremental: DATA_PARA_TRANSFERENCIA
3. REESTRUTURAÇÃO DOS DADOS
3.1 Recuperação do estado do monitor
Momento: Início do capturar()
- Constrói a lista de execução (chaves) a partir do parâmetro chave.
- Recupera token prévio do item de fila (quando existir), garantindo rastreabilidade na regravação do item.
3.2 Reset ao iniciar execução
Momento: Início do loop de chaves
- Para cada chave, prepara variáveis de contexto (chave atual, token associado e filtros derivados).
3.3 Normalização dos filtros
Momento: Pré-consulta (por chave)
- Divide a chave em A1_LOJA e A1_COD.
- Monta a consulta SQL com filtros exatos para recuperar o registro correspondente.
3.4 Atualização do estado para EXECUTANDO
Momento: Antes do enfileiramento
- O item é gravado com status textual Aguardando Integração e situação inicial 0, estabelecendo o ponto de partida do processamento assíncrono.
3.5 Paginação dos registros
Momento: Execução da consulta
- A consulta é executada por chave; o processamento percorre as linhas retornadas via fetch().
3.6 Sanitização dos dados
Momento: Ao ler cada registro
- Aplica trim() recursivamente em todos os campos do registro.
3.7 Atualização do filtro de posição
Momento: Após ler o registro
- Define novoFiltro com:
- A1_LOJA
- A1_COD
- DATA_PARA_TRANSFERENCIA normalizada em Y-m-d H:i:s
3.8 Enfileiramento
Momento: Pós-sanitização (por registro)
- Monta a chave: A1_LOJA-A1_COD.
- Enfileira via Queue::set(chave, registro, [], 'Aguardando Integração', ...).
- Quando houver token prévio, ele é reaproveitado na gravação do item.
3.9 Atualização incremental da posição
Momento: Após inserir na fila
- O controle incremental deste fluxo manual fica registrado no próprio item de fila, via chave e data_adicionado do item gravado/atualizado.
3.10 Finalização
Momento: Conclusão do processamento de todas as chaves
- Encerramento do lote após enfileirar todos os registros encontrados para as chaves informadas.
3.11 Tratamento de erro
Momento: catch(Exception) do capturar()
- Registra a exceção via errorByexception e encerra o ciclo do lote em execução.
4. PERSISTÊNCIA DOS DADOS (BANCO DE DADOS)
4.1 Controle do monitor
Momento: Persistência de estado do monitor (trait wosk_monitor)
- Tabela: {$this->bancoIntegrador}.wosk_monitor.
- Campos persistidos: token, evento, offset, filtro, chave_posicao, situacao, data_posicao, data_iniciado.
4.2 Fila de integração
Momento: Enfileiramento (3.8)
- Tabela: {$this->bancoIntegrador}.wosk_queue.
5. RESULTADO DO PROCESSAMENTO
Execução normal:
- Itens gravados na fila com status Aguardando Integração para envio posterior ao Protheus pela Queue.
Execução com erro:
- Exceção registrada e o lote pode encerrar antes de enfileirar todos os registros planejados.
6. OPERAÇÃO MANUAL – capturar()
Objetivo: enfileirar manualmente um ou mais clientes a partir da chave.
Fluxo:
- Entrada: chave string ou array, no padrão A1_LOJA-A1_COD.
- Para cada chave:
- Reaproveita token do item quando existir na fila.
- Consulta o registro correspondente na fonte WOSK_SERVICO_ENVIA_PROTHEUS_CLIENTES_PADRAO.
- Sanitiza o registro e enfileira para integração com status Aguardando Integração.
Queue
Processo:
1. DESCRIÇÃO DO FLUXO
- Responsabilidade: consumir um item da fila, reestruturar/normalizar dados do cliente para o padrão Protheus e executar o envio, persistindo retorno, tempo e situação do processamento.
- Disparo: execução agendada (cron) chamando Queue::run(token).
Ao iniciar, a fila busca um item via get(token). Se houver registro:
- Atualiza o item para status Enviando e situacao = 1 antes do envio.
- Converte o conteudo persistido em payload de integração via getConteudo(), aplicando o mapeamento de campos definido em $field.
Transformações e normalizações pré-envio:
- A1_NOME e A1_NREDUZ: remove | e remove acentos.
- A1_END, A1_BAIRRO, A1_CONTATO: remove acentos.
- A1_CODPAIS: converte para inteiro e aplica zero-pad até 5 dígitos (STR_PAD_LEFT).
Envio ao Protheus:
- Executa integração via setProtheus('cliente', payload, 'POST', headers).
- Header aplicado: tenantId fixo no formato "01,01SD0001".
Validação e classificação do retorno:
- Se a resposta vier vazia, o processamento gera erro de integração (JSON: NÃO HOUVE RESPOSTA.).
- Se a resposta não puder ser interpretada como array ou não contiver Mensagem, o processamento gera erro de decodificação.
- A mensagem persistida prioriza Mensagem Detalhada quando existir.
- A situacao final é definida por:
- 2 quando sucesso.
- 4 quando houver erro (por code no retorno ou Mensagem = "ERRO").
Ações pós-sucesso:
- Marca o cliente como integrado via setProtheusClienteIntegrado(chave, true).
- Remove itens correlatos de fila para evitar duplicidade, executando exclusões em wosk_queue para as ações ProtheusCliente e ProtheusClienteFull (chaves derivadas da chave original).
Persistência do resultado do item:
- Atualiza o próprio item de fila com retorno, mensagem, dump de requisição (_CURL_DUMP), tempo e situação final.
Notificação de erros:
- O método notificar() consulta itens com acao = 'ProtheusClientePadrao' e situacao = 4 na tabela wosk_queue, formata a mensagem e aciona o mecanismo de notificação interno (_getNotificarErros).
2. DADOS NECESSÁRIOS PARA O ENDPOINT
Este arquivo não implementa endpoint (WebService). Para a Queue, os dados de entrada são os itens persistidos na fila.
Estrutura do item de fila (campos utilizados neste arquivo):
- token: identificador do item para consumo.
- acao: ProtheusClientePadrao.
- chave: A1_LOJA-A1_COD.
- conteudo: registro completo do cliente, conforme viewQuery do monitor.
- data_adicionado: referência temporal gravada no enfileiramento.
3. REESTRUTURAÇÃO DOS DADOS
3.1 Recuperação do item de fila
Momento: Início do run(token)
- Lê item via get(token).
3.2 Reset ao iniciar execução
Momento: Antes do envio
- Atualiza o item para status Enviando e situacao = 1.
3.3 Normalização do payload
Momento: Pré-envio
- Aplica mapeamento de campos via $field durante getConteudo().
3.4 Atualização do estado para EXECUTANDO
Momento: Pré-requisição
- Mantém o item como situacao = 1 até concluir o envio e classificar o retorno.
3.5 Paginação dos registros
Momento: Execução por item (consumo unitário).
3.6 Sanitização dos dados
Momento: Pré-envio ao Protheus
- Remove acentos e caractere | em campos textuais.
- Normaliza A1_CODPAIS para 5 dígitos com zero-pad.
3.7 Atualização do filtro de posição
Momento: Pós-processamento do item
- O item permanece rastreável pela chave e pelo token, com retorno e situação persistidos na fila.
3.8 Envio / Integração
Momento: Envio ao Protheus
- Executa setProtheus('cliente', payload, 'POST', headers).
3.9 Atualização incremental da posição
Momento: Atualização do item
- A posição do processamento é refletida na própria fila por status e situação (1 durante envio; 2 ou 4 ao concluir).
3.10 Finalização
Momento: Pós-resposta do Protheus
- Define situacao final e atualiza o item com retorno, mensagem, dump e tempo.
3.11 Tratamento de erro
Momento: catch(Exception) interno
- Registra erro no retorno, define situacao = 4 e persiste a mensagem no item de fila.
4. PERSISTÊNCIA DOS DADOS (BANCO DE DADOS)
4.1 Controle do monitor
Momento: Persistência do estado do monitor (quando utilizado pela integração)
- Tabela: {$this->bancoIntegrador}.wosk_monitor.
4.2 Fila de integração
Momento: Durante todo o ciclo do item (get/set)
- Tabela: {$this->bancoIntegrador}.wosk_queue.
- Log de falhas internas de persistência (biblioteca wosk_queue): {$this->bancoIntegrador}.wosk_queue_log.
5. RESULTADO DO PROCESSAMENTO
Execução normal:
- Item finalizado com situacao = 2, retorno persistido e marcação do cliente como integrado.
Execução com erro:
- Item finalizado com situacao = 4, mensagem/retorno persistidos para auditoria e notificação.
6. OPERAÇÃO MANUAL – capturar()
Operação manual está definida no Monitor deste arquivo, com enfileiramento do item para consumo pela Queue.
Fluxo do Processo
Critérios de Aceitação
| Processo | Subprocesso | Descrição | Situação esperada |
