Ir para o conteúdo principal

LojaCliente (STATUS: DOCUMENTADO)

Documentação Técnica
Nome do cliente OSKLEN
Nome do projeto Integração LINX → ILLI (Cliente Loja)
Biblioteca wosk_loja_cliente
Data 25/03/2026

Histórico de Versões
Data Versão Modificado por Descrição da Mudança
25/03/2026 1.0 Maykon/Gustavo Criação da documentação técnica do processo Loja Cliente (LINX → ILLI).

Descrição

Este serviço de clientes no LINX a partir do PDV integra com o ILLI via fila quando necessário.
Coordena captura automática ou por código, valida endereço e documento e registra o resultado de cada envio para acompanhamento.

Capturador

Descrição Conceitual

A captura automática consulta CLIENTES_VAREJO quando o estado do serviço LojaCliente está apto, com filtro por DATA_PARA_TRANSFERENCIA, ordenação por data e código e paginação conforme o limite configurado para o serviço LojaCliente, alinhada ao processamento cronológico. Para cada linha, atualiza posição, grava na fila de integração com serviço LojaCliente e chave CODIGO_CLIENTE; ao final do lote ou em erro, atualiza o estado do capturador.

A origem dos dados é a tabela CLIENTES_VAREJO com enriquecimento por município e país via view W_LCF_LX_MUNICIPIO e tabela LCF_LX_PAIS. A captura por código aceita um ou mais CODIGO_CLIENTE, reutiliza a mesma projeção com filtro em lista e enfileira cada registro, preservando o token quando já existir para a mesma chave.

Fonte

Consulta principal:

SELECT
    CLI.CODIGO_CLIENTE,
    CLI.CLIENTE_VAREJO,
    CLI.CPF_CGC,
    CLI.RG_IE,
    CLI.ANIVERSARIO,
    CLI.TIPO_LOGRADOURO,
    CLI.ENDERECO,
    CLI.NUMERO,
    CLI.COMPLEMENTO,
    CLI.BAIRRO,
    CLI.CIDADE,
    CLI.UF,
    CLI.CEP,
    CLI.PAIS,
    LLM.COD_MUNICIPIO_IBGE AS IBGE,
    LLP.COD_PAIS_BC AS PAIS_BC,
    CLI.DDD,
    CLI.TELEFONE,
    CLI.DDD_CELULAR,
    CLI.CELULAR,
    CLI.EMAIL,
    CLI.CODIGO_CONTATO,
    CLI.FILIAL,
    CLI.ESTRANGEIRO,
    CLI.TIPO_VAREJO,
    CLI.TIPO_BLOQUEIO,
    CLI.CADASTRAMENTO,
    CLI.OBS,
    CLI.SEXO,
    CLI.STATUS,
    CLI.DATA_PARA_TRANSFERENCIA
FROM
    CLIENTES_VAREJO CLI (NOLOCK)
    LEFT JOIN W_LCF_LX_MUNICIPIO LLM (NOLOCK) ON (
        DBO.FX_REPLACE_CARACTER_ESPECIAL_NFE(DEFAULT, LTRIM(RTRIM(CLI.CIDADE))) = LLM.DESC_MUNICIPIO
        AND CLI.UF = LLM.UF
    )
    LEFT JOIN LCF_LX_PAIS LLP (NOLOCK) ON (CLI.PAIS = LLP.DESC_PAIS)

Operações com Dados

Leitura: Consulta da tabela CLIENTES_VAREJO com LEFT JOIN em W_LCF_LX_MUNICIPIO e LCF_LX_PAIS, conforme SQL da seção Fonte.

Consulta dinâmica (captura automática): reutiliza a projeção com filtro em DATA_PARA_TRANSFERENCIA, ordenação e paginação (OFFSET/FETCH) conforme o limite configurado para o serviço LojaCliente e o estado do capturador.

Consulta dinâmica (captura por código): mesma projeção com CODIGO_CLIENTE IN (...).

Persistência: grava itens pendentes na Fila de Processamento, com serviço LojaCliente e chave CODIGO_CLIENTE (preservando token quando já existir para a mesma chave); o estado do capturador mantém offset, posição e situação da captura.

Fila de Processamento

Descrição Conceitual

A fila recupera um registro pendente e utiliza o conteúdo do registro como base do payload de integração. Em seguida, aplica transformações obrigatórias de padronização e realiza a chamada ao ILLI.
O fluxo marca o registro como em envio, monta o corpo JSON para o endpoint ILLI de pessoa/cliente, valida IBGE e código BACEN quando aplicável, interpreta o retorno JSON (success, message) e grava situação final, mensagem, tempo e auditoria de requisição na tabela da fila de integração.

Estruturação de Dados
Campos raiz do payload ILLI e origem no conteudo (consulta CLIENTES_VAREJO, incluindo IBGE e PAIS_BC via joins)
Campo no payload ILLI Campo de origem
codigo CODIGO_CLIENTE
nome CLIENTE_VAREJO
tipo_cliente Constante CLIENTE
filialCadastro FILIAL
genero SEXO
grupo TIPO_VAREJO
complemento OBS
contatos Array montado a partir de DDD, TELEFONE, DDD_CELULAR, CELULAR, EMAIL (ver tabela do array contatos)
situacao STATUS (ativo 1 ou inativo conforme regra)
data_nascimento ANIVERSARIO
data_cadastro CADASTRAMENTO
data DATA_PARA_TRANSFERENCIA
tipo, cnpj, ie Pessoa jurídica quando CPF_CGC com mais de 11 caracteres; RG_IE como inscrição
tipo, cpf, identidade Pessoa física quando CPF_CGC com até 11 caracteres; RG_IE como identidade
Objeto endereco no payload ILLI (endereco.*)
Campo no payload ILLI Campo de origem
endereco.cep CEP (somente dígitos, completado à esquerda até 8 posições)
endereco.logradouro TIPO_LOGRADOURO concatenado a ENDERECO (limitado a 250 caracteres)
endereco.numero NUMERO (somente dígitos)
endereco.complemento COMPLEMENTO (limitado a 250 caracteres)
endereco.bairro BAIRRO
endereco.cidade CIDADE
endereco.uf UF (regra especial quando vazio ou com mais de 2 caracteres; estrangeiro usa EX)
endereco.pais PAIS
endereco.codigo_ibge IBGE ou valor fixo para estrangeiro quando aplicável
endereco.codigo_bacen PAIS_BC
Elementos do array contatos (objetos montados no fluxo)
Campo Tipo Obrigatório Descrição
tipo string sim TELEFONE, CELULAR ou EMAIL.
contato string sim Para telefone/celular: DDD e número concatenados somente com dígitos; para e-mail: texto do e-mail.

Exemplo ilustrativo de trecho do corpo enviado ao ILLI (estrutura resumida):

{
  "codigo": "...",
  "nome": "...",
  "endereco": {
    "cep": "00000000",
    "referencia": "",
    "logradouro": "...",
    "numero": "...",
    "complemento": "...",
    "bairro": "...",
    "cidade": "...",
    "uf": "...",
    "pais": "...",
    "codigo_ibge": "...",
    "codigo_bacen": "..."
  },
  "tipo_cliente": ["CLIENTE"],
  "filialCadastro": "...",
  "contatos": [
    { "tipo": "TELEFONE", "contato": "11999999999" }
  ],
  "situacao": "1",
  "tipo": "FISICA",
  "cpf": "00000000000"
}
Tratamento de Dados

Sobre o registro atual lido do conteudo na fila:

  • DDD, TELEFONE, DDD_CELULAR, CELULAR: normalizados com remoção de não dígitos e montagem de entradas em contatos com tipos TELEFONE, CELULAR e EMAIL quando informados.
  • TIPO_LOGRADOURO, ENDERECO: concatenados para formar o logradouro completo; se o resultado exceder 250 caracteres, aplicado substr até 250.
  • COMPLEMENTO: se o comprimento exceder 250 caracteres, aplicado substr até 250.
  • CEP: somente dígitos e preenchimento à esquerda com zeros até tamanho 8.
  • NUMERO: somente dígitos no payload de endereço.
  • UF: se vazio ou com mais de 2 caracteres, usa regra condicionada a ESTRANGEIRO (incluindo uso de EX para estrangeiro).
  • CPF_CGC, RG_IE: documentos numéricos padronizados com zeros à esquerda conforme tipo físico ou jurídico; tipo derivado pelo tamanho numérico de CPF_CGC após normalização.
  • Validação pré-envio: para não estrangeiro com UF diferente de EX, exige IBGE preenchido; para qualquer registro, exige PAIS_BC preenchido (mensagens de erro específicas se ausentes).

Integração com o ILLI

Chamada de integração com o ILLI (via rotina de integração):

  • Chamada: Requisição HTTP (encapsulada pela rotina de envio ao ILLI).
  • Recurso: /bibliotecas/48df1d4a-2a73-4afc-be75-a8104533cda0/ilx_pessoa/setCliente
  • Método HTTP: POST
  • Corpo: objeto JSON com os campos mapeados a partir do conteudo do registro da fila, incluindo endereco, contatos, documentos e metadados de cadastro.

Exemplo de corpo enviado (estrutura alinhada ao objeto montado no código; valores ilustrativos):

{
  "id": false,
  "codigo": "00000000000123",
  "nome": "Cliente Exemplo",
  "endereco": {
    "cep": "01310100",
    "referencia": "",
    "logradouro": "RUA EXEMPLO 100",
    "numero": "100",
    "complemento": "SALA 1",
    "bairro": "CENTRO",
    "cidade": "SAO PAULO",
    "uf": "SP",
    "pais": "BRASIL",
    "codigo_ibge": "3550308",
    "codigo_bacen": "1058"
  },
  "tipo_cliente": ["CLIENTE"],
  "filialCadastro": "FILIAL01",
  "genero": "M",
  "grupo": "CLIENTE VAREJO",
  "complemento": "OBS",
  "contatos": [
    { "tipo": "TELEFONE", "contato": "11999999999" }
  ],
  "situacao": "1",
  "data_nascimento": "1990-01-01 00:00:00",
  "data_cadastro": "2024-01-01 10:00:00",
  "data": "2024-01-02 08:00:00",
  "tipo": "FISICA",
  "cpf": "12345678901",
  "identidade": "1234567"
}

Tratamento de retorno

Ausência de resposta: lança exceção indicando que não houve resposta JSON; situação final 4 na tabela da fila de integração.
Resposta vazia de success e message: tratada como retorno não reconhecido (exceção), situação erro.
Sucesso: quando success não está vazio, situação sucesso; caso contrário situação erro com mensagem em message quando existir.
Em exceção genérica, a mensagem é persistida; se a mensagem indicar JSON não reconhecido, o retorno estruturado pode incluir error e data com o trecho analisado.

Notificação

A notificação de erros consulta registros com falha na tabela da fila de integração para o serviço LojaCliente e situação de erro, ordenando pelo horário de processamento para priorizar ocorrências mais antigas.

Endpoint (API)

O endpoint processa o cadastro de clientes a partir do corpo da requisição: o fluxo de entrada é o array de parâmetros no processamento principal, validado contra tipo e obrigatoriedade conforme o schema do serviço, com persistência em CLIENTES_VAREJO e regras de inclusão, atualização, filial e documento. O payload de entrada é um objeto JSON (ou equivalente) cujas chaves correspondem aos campos da tabela na subseção Estruturação de Dados.

  • Chamada: Requisição HTTP
  • Recurso: /bibliotecas/1be199d8-98e8-4de7-a92c-e59c2f08edd6/wosk_loja_cliente (caminho declarado no arquivo PHP da biblioteca)
  • Método HTTP: POST

Campos adicionais tratados no fluxo interno de gravação (validação complementar e insert/update em CLIENTES_VAREJO): CODIGO_CLIENTE, TIPO_VAREJO, CADASTRAMENTO, DATA_PARA_TRANSFERENCIA, OMS, entre outros previstos no processamento de persistência.

Estruturação de Dados
Contrato do payload enviado ao endpoint — validação dos nomes de campo
Campo Tipo Obrigatório Descrição
key string não Identificador ou chave de API conforme exigência da plataforma de publicação do serviço.
CLIENTE_VAREJO string (40) sim Nome do cliente.
FILIAL string (25) sim Nome ou código da filial.
ENDERECO string (90) não Endereço sem o tipo de logradouro.
UF string (2) não Estado (UF).
PF_PJ bool (1) sim 1 pessoa física, 2 pessoa jurídica.
RG_IE string (19) não RG (PF) ou IE (PJ).
CPF_CGC string (19) não CPF ou CNPJ conforme o caso.
CIDADE string (35) não Município.
COMPLEMENTO string (20) não Complemento do endereço.
CEP string (9) não CEP.
TELEFONE string (10) não Telefone sem DDD.
ANIVERSARIO datetime (19) não Data de aniversário ou nascimento.
DDD string (4) não DDD do telefone.
SEXO string (1) não Gênero.
OBS string (200) não Observações.
EMAIL string (100) não E-mail.
BAIRRO string (35) não Bairro.
STATUS number (1) não 1 ativo, 2 cancelado.
PAIS string (40) não Nome do país.
TIPO_LOGRADOURO string (10) não Tipo de logradouro.
NUMERO string (10) não Número.
ESTRANGEIRO bool (1) sim 1 estrangeiro, 0 nacional.
DDD_CELULAR string (4) não DDD do celular.
CELULAR string (10) não Celular sem DDD.

Exemplo de payload enviado para o endpoint (JSON):

{
  "key": "<API_KEY_OU_VAZIO>",
  "CLIENTE_VAREJO": "Nome do Cliente",
  "FILIAL": "01",
  "PF_PJ": true,
  "ESTRANGEIRO": false,
  "CPF_CGC": "12345678901",
  "ENDERECO": "Rua Exemplo",
  "UF": "SP",
  "CEP": "01310100"
}

Tratamento de Dados

No método de gravação do cadastro (pré-insert/update e persistência):

  • CADASTRAMENTO, DATA_PARA_TRANSFERENCIA: definidos com data/hora atual no início do processamento da requisição.
  • TIPO_VAREJO: se não existir na lista carregada de CLIENTE_VAR_TIPOS, forçado para CLIENTE VAREJO.
  • ESTRANGEIRO: se vazio, definido como 0; se UF for EX, definido como 1.
  • SEXO: se vazio, removido do conjunto de parâmetros antes da gravação.
  • CEP: se informado e numericamente zero após avaliação, substituído por sentinela NULL() para o insert.
  • CODIGO_CLIENTE: se vazio após normalização, preenchido com CPF_CGC ou, para estrangeiro, com RG_IE; validação específica de obrigatoriedade e tamanho aplicada em seguida.
  • Inclusão: verifica duplicidade de documento versus código para não estrangeiro; converte FILIAL numérica para nome via FILIAIS; prefixa OBS com texto fixo de origem PDV; executa insert parametrizado em CLIENTES_VAREJO conforme colunas previstas para o cadastro.
  • Alteração: reaproveita CODIGO_CLIENTE, FILIAL, CADASTRAMENTO e TIPO_VAREJO do registro localizado; se OMS for diferente de 1, recalcula DATA_PARA_TRANSFERENCIA e aplica estratégia de mesclagem campo a campo conforme CADASTRAMENTO anterior antes do UPDATE; se OMS for 1, o bloco de atualização é ignorado.

Persistência no LINX

Chamada de persistência no banco LINX:

  • Chamada: Operação em banco (insert ou update parametrizado).
  • Tabelas: CLIENTES_VAREJO (principal); consultas auxiliares a CLIENTE_VAR_TIPOS e FILIAIS para listas e resolução de filial.
  • Processamento: transação com commit ao sucesso ou rollback em falha; erros encapsulados com prefixo CLIENTES_VAREJO: na mensagem.

Tratamento de retorno

Sucesso: retorno com Mensagem igual a OK e Mensagem Detalhada indicando registro com sucesso, além dos campos CODIGO_CLIENTE, CADASTRAMENTO e DATA_PARA_TRANSFERENCIA atualizados no array de resposta.
Falha de validação inicial: exceção com mensagens concatenadas dos erros de campo.
Falha na gravação: exceção com mensagem originada do banco ou regra de negócio (incluindo conflito de documento/código).

O endpoint não implementa envio de notificação de erros; o acompanhamento de falhas da integração em fila é tratado na Fila de Processamento.


Fluxo do Processo

Diagrama sem nome.jpg


Critérios de Aceitação
Processo Subprocesso Descrição Situação esperada
Capturador Captura e enfileiramento Com estado apto e filtro de data válido, deve ler CLIENTES_VAREJO com joins de município e país, paginar pelo limite configurado e gravar cada registro na fila de integração com serviço LojaCliente e chave CODIGO_CLIENTE. Registro pendente na fila com conteúdo alinhado à consulta e posição de captura atualizada.
Capturador Captura por código Para cada CODIGO_CLIENTE informado, deve consultar a mesma projeção e gravar na fila preservando token existente quando houver. Registros reenfileirados com chave consistente e token reutilizado quando aplicável.
Fila de Processamento Integração ILLI Ao processar registro pendente, deve montar o JSON, chamar o recurso /bibliotecas/48df1d4a-2a73-4afc-be75-a8104533cda0/ilx_pessoa/setCliente, interpretar o retorno quanto à situação de sucesso ou erro com mensagem (success, message) e persistir na tabela da fila de integração a situação final (códigos 2 ou 4 conforme o caso), a mensagem retornada e o tempo de processamento. Fila atualizada com situação final e auditoria coerentes com o retorno do ILLI.
Endpoint (API) Cadastro PDV Ao receber payload válido, deve inserir ou atualizar CLIENTES_VAREJO conforme regras de documento, filial e OMS, retornando Mensagem OK em sucesso. Registro gravado no LINX e resposta com código e datas coerentes com a operação.