ProtheusClienteFull
Documentação Técnica
| Nome do cliente | EXEMPLO: TERRAS DE AVENTURA INDUSTRIA DE ARTIGOS ESPORTIVOS SA |
| Nome do projeto | EXEMPLO: IMPLANTAÇÃO PROTHEUS |
| Biblioteca | EXEMPLO: wosk_loja_cliente |
| Token da Biblioteca | EXEMPLO: 1be199d8-98e8-4de7-a92c-e59c2f08edd6 |
|
URL de Produção
|
https://isnapp.illimitar.pro/bibliotecas/ba4e7bb5-4770-4780-beaa-b28980153cc7/wosk/webservice/callback_protheus |
| URL de Homologação | https://hmg-isnapp.illimitar.pro/bibliotecas/ba4e7bb5-4770-4780-beaa-b28980153cc7/wosk/webservice/callback_protheus |
| Data | EXEMPLO: 01/11/2024 |
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 |
| 01/01/9999 | 1.0 | Maykon |
Descrição Geral dos Processos
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum
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 (Queue).
O processo é acionado por agendamento (cron) através do método run(). Sua responsabilidade é:
-
-
Recuperar o estado anterior de execução.
-
Controlar continuidade incremental (offset e chave de posição).
-
Evitar reprocessamento indevido.
-
Garantir ordenação cronológica por DATA_PARA_TRANSFERENCIA.
-
Persistir 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ÍDO (2) → redefine para PARADO (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.
-
-
DADOS NECESSÁRIOS PARA O ENDPOINT
-
O Monitor não expõe endpoint externo. 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.
-
-
REESTRUTURAÇÃO DOS DADOS
-
3.1 Recuperação do estado do monitor
Momento: Início do run()
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 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.
3.5 Paginação dos registros
Momento: Execução da consulta
Critérios:
ORDER BY DATA_PARA_TRANSFERENCIA ASC
Controle:
OFFSET = offset persistido
Limite = configuração interna do monitor
3.6 Sanitização dos dados
Momento: Pós-fetch (antes do enfileiramento)
Transformações aplicadas:
trim() em todos os campos string.
Remoção de espaços laterais.
Padronização de datas via setDateTime() quando aplicável.
Não há alteração estrutural de nomes de campos.
Não há transformação de layout.
3.7 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 formatado para Y-m-d H:i:s
3.8 Enfileiramento
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.
-
-
PERSISTÊNCIA DOS DADOS (BANCO DE DADOS)
-
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 Fila de integração
Tabela:
wosk_queue
Operações realizadas:
INSERT ou UPDATE
Campos persistidos:
chave
payload (JSON completo do registro)
status = 'Aguardando Integração'
situacao = 0
data_referencia = DATA_PARA_TRANSFERENCIA
token (quando reaproveitado)
Não há transformação estrutural no payload nesta etapa.
-
-
RESULTADO DO PROCESSAMENTO
-
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.
-
-
-
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_LOJA
A1_COD -
Sanitiza 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
-
-
Processo:DESCRIÇÃOisDOsimplyFLUXOdummy
textof -
A andQueue typesettingProtheusClienteFull industry.é Loremresponsável Ipsumexclusivamente haspelo beenprocessamento theassíncrono industry'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 standarddo dummymétodo textrun().
Fluxo sincede theexecução:
-
an-
printerRecupera
tookoapróximogalleyregistroofpendentetypedaandfilascrambled(situacaoit=to0).make -
typeAtualiza
specimenobook.statusItparahas"Enviando"survived(situacaonot=only1).five -
butRealiza
alsotransformaçãotheeleapnormalizaçãointodoelectronicpayload.typesetting, -
essentiallyExecuta
unchanged.envioItviawassetProtheus().popularised -
theInterpreta
1960sretornowithdatheAPI.release -
LetrasetAtualiza
sheetssituaçãocontainingpara:Lorem-
passages,2
and(Sucesso)more -
with4
desktop(Erro)publishing
Ipsumrecentlysoftwarelike -
-
PageMakerRegistra
includingtempoversionsdeofexecuçãoLoremeIpsumresposta completa. -
Em caso de erro, pode acionar nova captura via outro monitor.
-
Persiste auditoria final na tabela de fila.
unknownacenturies,remaininginofAldus -
A Queue não consulta view nem controla offset. Sua responsabilidade inicia exclusivamente no momento da leitura da fila.
-
-
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
-
-
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
Em sucesso (situacao = 2):
Executa:
setProtheusClienteIntegrado(chave, true)
Persistência final:
wosk_queue:
retorno (JSON resposta)
mensagem
tempo_execucao
situacao
data_processado
3.11 Tratamento de erro
Momento: catch(Exception)
Ações:
situacao ← 4
mensagem ← erro capturado
retorno ← JSON com erro
Persistência:
Atualiza wosk_queue com erro completo.
Regra adicional:
Se erro (situacao = 4):
-
-
Aciona Monitor ProtheusClientePadrao via capturar().
-
Verifica se novo token foi gerado.
-
Se houver novo token:
Executa setProtheusExcluir(['ProtheusClienteFull'], "chave", chave).
-
Objetivo:
Evitar duplicidade entre integrações Full e Padrão.
-
-
PERSISTÊNCIA DOS DADOS (BANCO DE DADOS)
-
4.1 Controle do monitor
Não aplicável à Queue.
4.2 Fila de integração
Tabela:
wosk_queue
Campos 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 → Integrado com sucesso
4 → Erro
-
-
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.
-
-
-
OPERAÇÃO MANUAL – capturar()
-
Nã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 (situacao = 4).
Consulta:
SELECT em wosk_queue
acao = 'ProtheusClienteFull'
situacao = 4
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.
WebService
Processo:
is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum
| CAMPO | TIPO | TAMANHO | CONTEÚDO | OBRIGATÓRIO |
| key | C | 36 | Chave da API Key para autenticação |
sim |
Exemplos de Request:
{
"key": "34a20688-1bb6-4fcd-9592-d58ca9876de5",
"INTEGRADOR": "cupom",
"FILIAL": "01LJ0206",
"ID": "00000007188082",
"DATA_RETORNO": "2024-10-29 00:37:05",
"SITUACAO": "1",
"MENSAGEM": "GravaBatch Executado com Sucesso",
"DETALHE": {
"ZB_ID": "000000000004156",
"LQ_DOC": "000051206",
"LQ_PDV": "003",
"ERGRVBT": "",
"LQ_HORA": "20:41:19",
"LQ_LOJA": "68",
"LQ_VEND": "000001",
"SITUAGB": "OK",
"LQ_FORMA": "R$",
"LQ_FRETE": 0,
"LQ_SERIE": "65",
"LQ_SITUA": "RX",
"Mensagem": "OK",
"LQ_CARTAO": 752.14,
"LQ_CONDPG": "",
"LQ_EMISNF": "27/07/2025",
"LQ_FILIAL": "01LJ0299",
"LQ_FORMPG": "CC",
"LQ_NOMCLI": "XXXXXX",
"LQ_OUTROS": 139.65,
"LQ_SERSAT": "",
"LQ_TPFRET": "S",
"LQ_VALICM": 178.35,
"LQ_VLRLIQ": 891.79,
"LQ_VLRTOT": 891.79,
"LQ_XCANAL": "VAREJO",
"ZB_DATRET": "29/07/25",
"ZB_FILIAL": "01LJ0299",
"ZB_HORRET": "09:18:00",
"LQ_CLIENTE": "XXXXX",
"LQ_DINHEIR": 0,
"LQ_EMISSAO": "27/07/2025",
"LQ_ESPECIE": "NFCE",
"LQ_KEYNFCE": "XXXXX",
"LQ_NUMCFIS": "000051206",
"LQ_OPERADO": "C24",
"LQ_PARCELA": 0,
"LQ_TIPOCLI": "F",
"LQ_VALBRUT": 891.79,
"LQ_VALMERC": 1044,
"LQ_VENDTEF": "S",
"LQ_VLRDEBI": 0,
"LQ_XNATOPE": "100.80",
"Mensagem Detalhada": "GravaBatch Executado com Sucesso"
}
}
{
"key": "34a20688-1bb6-4fcd-9592-d58ca9876de5",
"INTEGRADOR": "cupom",
"FILIAL": "01LJ0269",
"ID": "00000001352422",
"DATA_RETORNO": "2024-10-29 11:23:20",
"SITUACAO": "0",
"MENSAGEM": "D2_TES: Tipo Operacao '', do Item '0001', Invalido."
}
Exemplos de Response:
{
"INTEGRADOR": "cupom",
"FILIAL": "01LJ0269",
"ID": "00000001352422",
"DATA_RETORNO": "2024-10-29 11:23:20",
"SITUACAO": "0",
"Mensagem Detalhada": "Registrado com sucesso.",
"Mensagem": "OK"
}
{
"success":false,
"message":"Sess\u00e3o Expirou",
"data":false,
"errors":{"reason":"Sess\u00e3o Expirou"}
}
Fluxo do Processo
Critérios de Aceitação
| Processo | Subprocesso | Descrição | Situação esperada |
