Ir para o conteúdo principal

LojaCliente

Documentação Técnica
Nome do clienteOSKLEN
Nome do projetoIntegração LINX → ILLI (Cliente Loja)
Bibliotecawosk_loja_cliente
Data25/03/2026

Histórico de Versões
DataVersãoModificado porDescrição da Mudança
25/03/20261.0Maykon/GustavoCriaçã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
Campo no payload ILLICampo de origem
codigoCODIGO_CLIENTE
nomeCLIENTE_VAREJO
tipo_clienteConstante CLIENTE
filialCadastroFILIAL
generoSEXO
grupoTIPO_VAREJO
complementoOBS
contatosArray montado a partir de DDD, TELEFONE, DDD_CELULAR, CELULAR, EMAIL (ver tabela do array contatos)
situacaoSTATUS (ativo 1 ou inativo conforme regra)
data_nascimentoANIVERSARIO
data_cadastroCADASTRAMENTO
dataDATA_PARA_TRANSFERENCIA
tipo, cnpj, iePessoa jurídica quando CPF_CGC com mais de 11 caracteres; RG_IE como inscrição
tipo, cpf, identidadePessoa física quando CPF_CGC com até 11 caracteres; RG_IE como identidade
Objeto endereco no payload ILLI (endereco.*)
Campo no payload ILLICampo de origem
endereco.cepCEP (somente dígitos, completado à esquerda até 8 posições)
endereco.logradouroTIPO_LOGRADOURO concatenado a ENDERECO (limitado a 250 caracteres)
endereco.numeroNUMERO (somente dígitos)
endereco.complementoCOMPLEMENTO (limitado a 250 caracteres)
endereco.bairroBAIRRO
endereco.cidadeCIDADE
endereco.ufUF (regra especial quando vazio ou com mais de 2 caracteres; estrangeiro usa EX)
endereco.paisPAIS
endereco.codigo_ibgeIBGE ou valor fixo para estrangeiro quando aplicável
endereco.codigo_bacenPAIS_BC
Elementos do array contatos (objetos montados no fluxo)
CampoTipoObrigatórioDescrição
tipostringsimTELEFONE, CELULAR ou EMAIL.
contatostringsimPara 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
  • Cabeçalhos: os definidos internamente pela rotina de integração ILLI (não fixados neste arquivo).
  • 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 4.
Sucesso: quando success não está vazio, situação 2; caso contrário situação 4 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
CampoTipoObrigatórioDescrição
keystringnãoChave de autenticação/controle da chamada.
eventIdstring (UUID)nãoIdentificador do evento de origem.
CLIENTE_VAREJOstring (40)simNome do cliente.
FILIALstring (25)simNome ou código da filial.
ENDERECOstring (90)nãoEndereço sem o tipo de logradouro.
UFstring (2)nãoEstado (UF).
PF_PJstring (1)sim1 pessoa física, 2 pessoa jurídica.
RG_IEstring (19)nãoRG (PF) ou IE (PJ); aceita null.
CPF_CGCstring (19)nãoCPF ou CNPJ conforme o caso.
CIDADEstring (35)nãoMunicípio.
COMPLEMENTOstring (20)nãoComplemento do endereço.
CEPstring (8)nãoCEP.
TELEFONEstring (10)nãoTelefone sem DDD.
ANIVERSARIOdatetime (19)nãoData de aniversário ou nascimento.
DDDstring (4)nãoDDD do telefone.
SEXOstring (1)nãoGênero.
OBSstring (200)nãoObservações.
EMAILstring (100)nãoE-mail.
BAIRROstring (35)nãoBairro.
STATUSstring (1)não1 ativo, 2 cancelado.
PAISstring (40)nãoNome do país.
TIPO_LOGRADOUROstring (10)nãoTipo de logradouro.
NUMEROstring (10)nãoNúmero.
ESTRANGEIROstring (1)sim1 estrangeiro, 0 nacional.
DDD_CELULARstring (4)nãoDDD do celular.
CELULARstring (10)nãoCelular sem DDD.
CODIGO_CLIENTEstring (19)nãoCódigo do cliente na origem; quando ausente pode ser derivado no processamento.
TIPO_VAREJOstring (30)nãoClassificação do cliente no varejo.
OMSstring (1)nãoControla regras de atualização no fluxo interno (0 ou 1).

Exemplo de payload enviado para o endpoint (JSON):

{
  "UF": "RJ",
  "CEP": "20550012",
  "DDD": "",
  "OBS": "",
  "OMS": "0",
  "key": "df9b5d7f-da04-42f1-80b2-6b6bbbc39152",
  "PAIS": "BRASIL",
  "SEXO": "",
  "EMAIL": "",
  "PF_PJ": "1",
  "RG_IE": null,
  "BAIRRO": "Tijuca",
  "CIDADE": "Rio de Janeiro",
  "FILIAL": "TIJUCA RJ",
  "NUMERO": "262",
  "STATUS": "1",
  "CELULAR": "993171172",
  "CPF_CGC": "41270436791",
  "eventId": "1694172b-a576-4d3b-9ab7-9304bb152f14",
  "ENDERECO": "São Francisco Xavier",
  "TELEFONE": "",
  "ANIVERSARIO": "",
  "COMPLEMENTO": "",
  "DDD_CELULAR": "21",
  "ESTRANGEIRO": "0",
  "TIPO_VAREJO": "CLIENTE VAREJO",
  "CLIENTE_VAREJO": "lucy paiva",
  "CODIGO_CLIENTE": "41270436791",
  "TIPO_LOGRADOURO": "Rua"
}

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

wosk_loja_cliente.drawio.jpg


Critérios de Aceitação
ProcessoSubprocessoDescriçãoSituação esperada
CapturadorCaptura e enfileiramentoCom 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.
CapturadorCaptura por códigoPara 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 ProcessamentoIntegração ILLIAo 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 PDVAo 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.