Ir para o conteúdo principal

ProtheusClienteFull (STATUS: PARCIAL)

Documentação Técnica

   
Nome do cliente OsklenOSKLEN
Nome do projeto IntegraçãoINTEGRAÇÃO LinxLINXProtheus (WOSK)PROTHEUS
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 Gerado automaticamenteMaykon/Gustavo DocumentaçCriação inicialda documentação do processo de integração de cliente (Full).

    Descrição Geral dos Processos

    ElaEste separaprocesso realiza a integração trabalho em duas etapas: uma etapacompleta de captura (Monitor) e outracadastros de processamentoclientes, assíncronogarantindo (Queue).

    Na prática, o Monitor localizaque os dados estejam consistentes antes do clienteenvio eme que o acompanhamento do processamento seja rastreável.

    A captura de registros é feita de forma periódica (cron), a partir de uma visão de serviçodados disponível no ambiente de origem, e criaos (ouitens atualiza)capturados umsão itemencaminhados napara processamento assíncrono por fila.

    Em seguida, a fila paraprocessa integração. Depois, a Queue consome essecada item, preparaaplica ajustes de padronização de texto, envia ao destino e atualiza o payloadstatus finaldo eprocessamento, realizapermitindo o envio para o Protheus, registrando o resultado parareprocessamento, auditoria e acompanhamento.

    O objetivo do fluxo é garantir que o envio ocorra de forma controlada, com rastreabilidade de erros e possibilidade de reprocessamento, sem depender de uma execuçnotificação únicaquando ehouver sincrona.falhas.

    Monitor

    Conceito:Descrição MonitorConceitual

    Processo:

    Descrição
    Classe:do WOSK\ProtheusClienteFull\fluxo
    • O Monitor
      Entrada: chaveé noacionado formatopor A1_LOJA-A1_CODcron (ex.:e 01SD0001-000123)busca ouos listadados de chaves.
      Origem dos dados: consulta na view WOSK_SERVICO_ENVIA_PROTHEUS_CLIENTES_FULL com WHERE construído dinamicamenteclientes a partir da chave.

      Queryvisão de origem.
    • Para cada registro encontrado, é montada uma chave única do cliente e o item é enfileirado para processamento assíncrono (Queue), com status inicial.
    • A data de transferência do registro é utilizada como base para agendamento/ordenação do processamento, caracterizando uso do Conceito Cronológico.
    Entrada de dados (semquery)
    filtro):

    A entrada é realizada via query sobre a visão WOSK_SERVICO_ENVIA_PROTHEUS_CLIENTES_FULL. O WHERE é construído dinamicamente de acordo com a chave recebida.

    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 chave:

    WHERE
        A1_LOJA = '{A1_LOJA}<A1_LOJA>'
        AND A1_COD = '{A1_COD}<A1_COD>';

    Reestruturaçõesão e transformações (pré-insert na fila):
    - Todos os campos do registro retornado sofrem trim() (não tratado como alteração relevante).
    -de Odados
    campo
    • Chave do cliente: composta no formato DATA_PARA_TRANSFERENCIAA1_LOJA-A1_COD épara convertido/normalizadoidentificação única no processamento assíncrono.
    • Data de transferência: convertida para formato Y-m-d H:i:s e usadoutilizada como datareferência de capturaagendamento/ordenação na fila (ver Conceito Cronológico).
    Operações com dados (Banco de Dados)
    • Leitura: visão WOSK_SERVICO_ENVIA_PROTHEUS_CLIENTES_FULL.
    • Persistência da fila: inserção 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 itemprocessamento na filatabela pela Queuewosk_queue (tabelabanco wosk_queue)do usando:

      • acao: ProtheusClienteFullintegrador).
      • chaveControle do Monitor: {A1_LOJA}-{A1_COD}
      • conteudo: o registro bruto retornado pela view (inclui CGC_CPF, NOME, ENDERECO, etc.)
      • data_adicionado: DATA_PARA_TRANSFERENCIA normalizada
      • situacao: 0 (Aguardando integração)

      - A tabela wosk_monitor é a persistência padrão de posição/controlecontinuidade na tabela wosk_monitor (banco do Monitor (via Monitor::set())integrador), quandopermitindo utilizadaretomada pelodo agendamento/execuçprocessamento.

    Resultado do processamento

    Ao final, o registro fica disponível na fila para processamento assíncrono, iniciado com status de aguardando integração doe monitor.

    data

    de referência para ordem de processamento.

    Queue

    Conceito:Descrição QueueConceitual

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

    0) Preparaç

    Descrição do processamentofluxo
    (
    • A Queue é acionada por cron/worker):
      Antescron e consome itens pendentes da fila.
    • O item é marcado como em processamento, e o conteúdo é preparado para envio ao destino.
    • Após o envio, a fila é atualizada com o resultado: sucesso ou erro, incluindo mensagem e detalhes de executarretorno.
    • run(token)
    • Quando para cadaerro item,e o processomesmo podecliente chamar Queue::prepare(),foi quecapturado delegano parafluxo _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 fila (com WHERE dinâmico por atraso):

      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_adicionado` ASC

      Destaque (conceito cronológico): quandopadrão, o delayregistro estádo ativo,fluxo a seleção filtra por data/hora (data), controlando quando um itemFull pode ser processado.descartado Referência:para Cronológico.

      1)evitar Seleçduplicidade.

    Reestruturação do item e marcaçalteração de estado (pré-envio):
    - 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:

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

    3) TransformaçõesPadronização de dados (pré-envio ao Protheus):texto
    - A1_NOME e A1_NREDUZ: remoção de acentos em campos de nome/endereço/bairro/contato e eliminação do caractere |.
    - A1_END,em A1_BAIRRO,nomes, A1_CONTATO:para remoçãoevitar inconsistências no destino.

  • Código de acentos.
    - A1_CODPAISpaís
    : convertidonormalizado para numéricosempre e preenchido à esquerda com zeros atépossuir 5 dígitos (str_pad)com zeros à esquerda quando necessário).

  • 4)Identificação Enviodo aotenant: Protheus:
    - Chamadaenvio de integraçcabeçalho de identificação viado setProtheus("cliente",ambiente/tenant payload,junto "POST",à headers).
    -requisição.
  • Header utilizado no envio:

    tenantId: "01,01SD0001"

    - Resposta esperada: array

    Operações com Mensagemdados e opcionalmente Mensagem Detalhada.

    5) Decisão(Banco de situação (pós-envio):
    - Sucesso: situacao = 2 (quando não há code e Mensagem != "ERRO").
    - Erro: situacao = 4 (quando Mensagem == "ERRO" ou quando existe code na resposta, ou exceção no processamento).

    6) Ações e persistências (por situação):

    Dados)
    • QuandoLeitura: sucesso (situacao = 2): chama setProtheusClienteIntegrado(chave, true). Alémconsumo de atualizaritens oda statustabela wosk_queue (banco do item, o fluxo padrão registra auditoria de integração em OSK_LOG_INTEGRACAO_PROTHEUS.
    • Quando erro (situacao = 4): tenta capturar o mesmo cliente no processo ProtheusClientePadrao (Monitor correspondente) e verifica se um item foi criado em wosk_queue. Se o item do ProtheusClientePadrao existir, esta fila pode marcar o item atual para remoção e chamar setProtheusExcluir(["ProtheusClienteFull"], "chave", chave)integrador).
    • Atualização: gravação do retorno, mensagem e status final dona item:tabela wosk_queue.
    • Log de falhas: quando nãoaplicável, for removido, atualiza wosk_queue com retorno, mensagem, dumpregistro de requisiçãodetalhes ede tempoerro total.de banco na tabela wosk_queue_log.

    Resultado do processamento
    • RegraSucesso: o cliente é considerado integrado e o item é finalizado com status de deduplicaçsucesso.
    • Erro: o item é finalizado com status de erro e mensagem explicativa; o processo pode acionar notificação (pré-inserte/ou naevitar fila):
      Ao inserir itens com situacao = 0, o mecanismo padrão da Queue compara o conteudoduplicidade com o quefluxo 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):

      • wosk_queue: fila principal do processo (acao = ProtheusClienteFull)
      • wosk_queue_log: log de falhas de SQL durante escrita de auditoria
      • OSK_LOG_INTEGRACAO_PROTHEUS: auditoria de integração para ações que casam com /Protheus/padrão.

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

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

      Fluxo do Processo

      Encadeamento obrigatório: Monitor → Queue.Diagrama sem nome.jpg

      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

            =omesmo
      Processo Subprocesso Descrição Situação esperada
      Monitor CapturaQuando acionado por cron, deve obter o registro do cliente na visão de origem e gerar uma chave Aoúnica informarno formato A1_LOJA-A1_COD, o Monitor deve montar o WHERE dinamicamente e consultar a view de serviço.. Registro encontradoidentificado e itempronto criado/atualizadopara encaminhamento.
      MonitorEnfileiramentoO registro capturado deve ser enfileirado para processamento assíncrono, com status inicial e agendamento baseado em wosk_queueDATA_PARA_TRANSFERENCIA com(conceito situacaocronológico). Item 0.persistido em wosk_queue e ordenado/agendado conforme a data.
      Queue Envio ao ProtheusProcessamento OAo workerconsumir o item, deve mapear dados para A1_*, aplicar normalizações e executar POST no serviçpadronização de cliente.texto e enviar ao destino; em seguida, deve atualizar o resultado na fila. RespostaFila OKatualizada com situacaostatus =de 2sucesso ou erro e auditoriamensagem registrada.correspondente, mantendo rastreabilidade.
      Queue TratamentoControle de erroduplicidade Quando houver falha deno integraçãenvio e o mesmo cliente já existir no fluxo padrão, o itemregistro do fluxo Full deve permanecerser rastreável e elegíveldescartado para notificação.evitar processamento duplicado. situacaoSem = 4, mensagem registrada e opçãoduplicidade de fallbackregistros na fila 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.cliente.