LojaAjusteEstoque (STATUS: CRIADO)
Documentação Técnica
| Nome do cliente | OSKLEN |
| Nome do projeto | Integração LINX → ILLI ( |
| Biblioteca | |
| Data |
Histórico de Versões
| Data | Versão | Modificado por | Descrição da Mudança |
| 1.0 | Maykon/Gustavo | Criação da documentação técnica do processo Loja |
Descrição
Este serviço de ajusteclientes de estoque por contagemvarejo no LINX encaminhaa aopartir ILLIdo osPDV dados de contagens já marcadas para transferência,integra com o detalheILLI dosvia itensfila ajustados.quando necessário.GaranteCoordena fila,captura integraçãautomática ou por código, valida endereço e registrodocumento e registra o resultado de sucessocada ou erroenvio para cada contagem elegível por filial.acompanhamento.
Capturador
A captura automática consulta a view quando o estado do serviço ESTOQUE_PROD_CONTAGEMCLIENTES_VAREJO está LojaAjusteEstoqueLojaClienteaptoapto, (reiníciocom afiltro partirpor deDATA_PARA_TRANSFERENCIA, situaçordenação concluídapor ou continuação em andamento), restringindo a filiais de loja definidas em ambiente (excluindo estoque centraldata e centro de distribuição), ESTOQUE_AJUSTADO = '1', data mínima de transferência e processamento cronológico (ordenaçãocódigo e paginação por data) com ORDER BY DATA_PARA_TRANSFERENCIA ASC, OFFSET e FETCH NEXT conforme o limite de registros por lote configurado para o serviço , alinhada ao processamento cronológico. Para cada LojaAjusteEstoqueLojaClientelinhalinha, retornada,atualiza obtém-seposição, o detalhe em ESTOQUE_PROD_CTG_AJUSTE, compõe-se a chave NOME_CONTAGEM-FILIAL e o registro é gravadograva na Filafila de Processamentointegração com serviço LojaAjusteEstoqueLojaCliente, atualizando offset,e chave eCODIGO_CLIENTE; dataao definal posiçãodo atélote concluirou em erro, atualiza o ciclo.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 chavecódigo aceita umaum ou mais chavesCODIGO_CLIENTE, no formato NOME_CONTAGEM-FILIAL; sereutiliza a chavemesma nãprojeção tiver duas partes, o fluxo interrompe com erro de chave inválida. Para cada chave válida, consulta-se com filtro ESTOQUE_PROD_CONTAGEMfixoem por nome de contagemlista e filial,enfileira enriquece-secada o registro com ITENS a partir de ESTOQUE_PROD_CTG_AJUSTE e grava-se na Fila de Processamento,registro, preservando o token quando já existir para a mesma chave.
Fonte
Origem consultada: view ESTOQUE_PROD_CONTAGEM. Complemento de linhas de produto: tabela ESTOQUE_PROD_CTG_AJUSTE.
Consulta principal:
SELECT
NOME_CONTAGEM,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,
EMISSAO,CLI.ESTRANGEIRO,
RESPONSAVEL,CLI.TIPO_VAREJO,
CLI.TIPO_BLOQUEIO,
CLI.CADASTRAMENTO,
CLI.OBS,
ESTOQUE_AJUSTADO,CLI.SEXO,
DATA_AJUSTE,CLI.STATUS,
TIPO,
SALDO_ARMAZENADO,
CONTAGEM_POR_AREA_FECHADA,
DATA_PARA_TRANSFERENCIA,
NOME_CONTAGEM_ANTERIORCLI.DATA_PARA_TRANSFERENCIA
FROM
ESTOQUE_PROD_CONTAGEMCLIENTES_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: consultaConsulta da viewtabela com ESTOQUE_PROD_CONTAGEMCLIENTES_VAREJOLEFT JOIN em W_LCF_LX_MUNICIPIO e LCF_LX_PAIS, conforme SQL da seção Fonte; detalhamento de itens por NOME_CONTAGEM na tabela .ESTOQUE_PROD_CTG_AJUSTE
Consulta dinâmica (captura automática): reutiliza a projeção com WHEREfiltro FILIAL IN (...) (lista de filiais de loja, excluindo as removidas no código), ESTOQUE_AJUSTADO = '1',em DATA_PARA_TRANSFERENCIA maior ou igual ao filtro do capturador, , ordenação e paginação (ORDER BY DATA_PARA_TRANSFERENCIA ASCOFFSET e /FETCH) NEXT comconforme o limite de registros por lote configurado para o serviço LojaAjusteEstoqueLojaCliente. e o estado do capturador.
Consulta dinâmica (captura por chave)código): mesma projeção com WHERECODIGO_CLIENTE NOME_CONTAGEMIN = '{parte1}' AND FILIAL = '{parte2}' obtidas da chave.
Detalhamento de itens por contagem: consulta à tabela ESTOQUE_PROD_CTG_AJUSTE com WHERE NOME_CONTAGEM = '{NOME_CONTAGEM}', retornando colunas de produto, grade A1 a A48, custos CUSTO1 a CUSTO4, CM_OPERACAO, DATA_PARA_TRANSFERENCIA, QTDE_AJUSTE, COR_PRODUTO e .PRODUTO(...)
Persistência: estadograva do capturador pelo serviço LojaAjusteEstoque (offset, chave de posição, datas, filtro e situação); registrositens pendentes na tabela da filaFila de integraçãoProcessamento, com serviço e chave LojaAjusteEstoqueLojaClienteNOME_CONTAGEM-FILIALCODIGO_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
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, enviamonta o conteúdocorpo aoJSON recursopara o endpoint ILLI de ajustepessoa/cliente, devalida estoque,IBGE e código BACEN quando aplicável, interpreta o retorno JSON de retorno (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
O conteudo gravado na fila corresponde ao registro atual da view ESTOQUE_PROD_CONTAGEM após inclusão da chave ITENS com o array de linhas lidas de ESTOQUE_PROD_CTG_AJUSTE para o mesmo NOME_CONTAGEM.
Chamada:Requisição HTTPRecurso:e3a6737d-ac74-4ed6-9668-e3921320c29f/ilx_ajuste_estoque/setAjusteMétodo HTTP:POST
Exemplo de payload enviado ao ILLI (JSON):
{
"NOME_CONTAGEM": "<NOME_CONTAGEM>",
"FILIAL": "<FILIAL>",
"EMISSAO": "<EMISSAO>",
"RESPONSAVEL": "<RESPONSAVEL>",
"OBS": "<OBS>",
"ESTOQUE_AJUSTADO": "<ESTOQUE_AJUSTADO>",
"DATA_AJUSTE": "<DATA_AJUSTE>",
"TIPO": "<TIPO>",
"SALDO_ARMAZENADO": "<SALDO_ARMAZENADO>",
"CONTAGEM_POR_AREA_FECHADA": "<CONTAGEM_POR_AREA_FECHADA>",
"DATA_PARA_TRANSFERENCIA": "<DATA_PARA_TRANSFERENCIA>",
"NOME_CONTAGEM_ANTERIOR": "<NOME_CONTAGEM_ANTERIOR>",
"ITENS": [
{
"NOME_CONTAGEM": "<NOME_CONTAGEM>",
"PRODUTO": "<PRODUTO>",
"COR_PRODUTO": "<COR_PRODUTO>",
"QTDE_AJUSTE": "<QTDE_AJUSTE>",
"A1": "<A1>",
"A48": "<A48>",
"CUSTO1": "<CUSTO1>",
"CM_OPERACAO": "<CM_OPERACAO>",
"DATA_PARA_TRANSFERENCIA": "<DATA_PARA_TRANSFERENCIA_ITEM>"
}
]
}| 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 |
| 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 |
| Campo | Tipo | Obrigatório | Descrição |
| |||
|
string | sim | TELEFONE, ou EMAIL. |
|
string | sim | | concatenados
| dígitos; |||
| |||
| |||
| | ||
| |||
| |||
| |||
| |||
| |||
| |||
| |
| |||
| |||
ILLI (estrutura resumida):
|
|||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
| |||
|
Tratamento de Dados
Sobre o registro atual retornado de ESTOQUE_PROD_CONTAGEM anteslido do envioconteudo àna fila:
,ITENSDDDTELEFONE,DDD_CELULAR,CELULAR:passanormalizadosacomconterremoçãoarraydelinhasnãoobtidasdígitosdaeconsultamontagemade entradas emESTOQUE_PROD_CTG_AJUSTEcontatosparacomo mesmotiposNOME_CONTAGEM, preservando os campos,NOME_CONTAGEMTELEFONEPRODUTO,COR_PRODUTO,QTDE_AJUSTE,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20,A21,A22,A23,A24,A25,A26,A27,A28,A29,A30,A31,A32,A33,A34,A35,A36,A37,A38,A39,A40,A41,A42,A43,A44,A45,A46,A47,A48,CUSTO1,CUSTO2,CUSTO3,CUSTO4,eCM_OPERACAOCELULARquando informados.DATA_PARA_TRANSFERENCIAEMAILTIPO_LOGRADOURO,ENDERECO: concatenados para formar o logradouro completo; se o resultado exceder 250 caracteres, aplicadosubstraté 250.COMPLEMENTO: se o comprimento exceder 250 caracteres, aplicadosubstraté 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 aESTRANGEIRO(incluindo uso deEXpara 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 deCPF_CGCapós normalização.- Validação pré-envio: para não estrangeiro com
UFdiferente deEX, exigeIBGEpreenchido; para qualquer registro, exigePAIS_BCpreenchido (mensagens de erro específicas se ausentes).
Na fila, o processamento utiliza o conteúdo do registro como corpo enviado ao ILLI, sem reestruturação adicional de campos no código analisado além do conteúdo já montado na captura.
Integração com o ILLI
Chamada de integração com o ILLI:ILLI (via rotina de integração):
- Chamada:
Requisição HTTP(encapsulada pela rotina de envio ao ILLI). - Recurso:
e3a6737d-ac74-4ed6-9668-e3921320c29f/ilx_ajuste_estoque/setAjuste/bibliotecas/48df1d4a-2a73-4afc-be75-a8104533cda0/ilx_pessoa/setCliente - Método HTTP:
POST CorpoCabeçalhos: os definidos internamente pela rotina deentrada:integração ILLI (não fixados neste arquivo).- Corpo: objeto
ouJSONarraycomcorrespondenteosaocampos mapeados a partir doconteudodo registro dafilafila,(cabeçalho da contagem +incluindoITENSendereco)., Processamento:contatos,envio do payloaddocumentos eleiturametadadosdaderesposta JSON com indicadoressuccessemessage.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 JSON:resposta: lança exceção indicando que não houve resposta;resposta JSON; situação final 4 na tabela da fila de integração.
Resposta semvazia de success e sem 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 trecho após prefixo de JSON não reconhecido, o retorno estruturado pode incluir error e data com o conteúdotrecho analisado.
Notificação
A notificação de erros consulta registros com falha na tabela da fila de integração para o serviço e situação de erro, ordenando pelo horário de processamento para priorizar ocorrências mais antigas.LojaAjusteEstoqueLojaCliente
Endpoint (API)
O endpoint publicaprocessa o cadastro de cliente de varejo a bibliotecapartir parado instanciarcorpo dinamicamenteda asrequisição: classeso internas (por exemplo, capturador ou fila) via parâmetrofluxo de classeentrada é o array de parâmetros no padrã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 plataforma.tabela Oao caminhofinal declaradoda subseção Estruturação de Dados; campos adicionais usados apenas no arquivofluxo dainterno biblioteca(CODIGO_CLIENTE, éTIPO_VAREJO, usadoOMS, comoentre baseoutros) dopodem recursoacompanhar HTTP.o mesmo corpo quando o chamador os informar.
Estruturação de Dados
ACampos invocaçadicionais tratados no fluxo interno de gravação segue (validação contratocomplementar e insert/update em CLIENTES_VAREJO): CODIGO_CLIENTE, TIPO_VAREJO, CADASTRAMENTO, DATA_PARA_TRANSFERENCIA, OMS, entre outros previstos no processamento de publicaçãopersistência.
- Chamada:
Requisição HTTP - Recurso:
/bibliotecas/(caminho declarado no arquivo PHP da biblioteca)01a79ef5-24bc-4bdc-b797-512284913153/wosk_loja_ajuste_estoque1be199d8-98e8-4de7-a92c-e59c2f08edd6/wosk_loja_cliente - Método HTTP:
POST
Exemplo de payload enviado para o endpoint (JSON):
{
"key": "<API_KEY_OU_VAZIO>",
"class"CLIENTE_VAREJO": "Monitor"Nome do Cliente",
"method"FILIAL": "run"01",
"params"PF_PJ": []true,
"ESTRANGEIRO": false,
"CPF_CGC": "12345678901",
"ENDERECO": "Rua Exemplo",
"UF": "SP",
"CEP": "01310100"
}
| Campo | Tipo | Obrigatório | Descrição |
key |
string | não | |
|
string (40) | sim | Nome |
FILIAL |
string |
sim | Nome ou código da |
ENDERECO |
string ( |
não | Endereço sem o tipo de logradouro. |
|
string (2) | não | Estado (UF). |
|
1 2 |
||
|
não | ||
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 |
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. |
Tratamento de Dados
ONo carregamentométodo dinâmicode instanciagravação ado classecadastro em(pré-insert/update e persistência):
CADASTRAMENTO,: definidos com data/hora atual no início do processamento da requisição.WOSK\LojaAjusteEstoque\DATA_PARA_TRANSFERENCIATIPO_VAREJO: se não existir na lista carregada deCLIENTE_VAR_TIPOS, forçado paraCLIENTE VAREJO.ESTRANGEIRO: se vazio, definido como0; seUFconformeforEX, definido como1.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 sentinelaNULL()para onomeinsert.CODIGO_CLIENTE: se vazio após normalização, preenchido comCPF_CGCou, para estrangeiro, comRG_IE; validaçãodoespecíficasegmentoderecebido;obrigatoriedade e tamanho aplicada em seguida.- Inclusão: verifica duplicidade de documento versus código para não
háestrangeiro;transformaçconverteFILIALnumérica para nome viaFILIAIS; prefixaOBScom texto fixo de origem PDV; executa insert parametrizado emCLIENTES_VAREJOconforme colunas previstas para o cadastro. - Alteração: reaproveita
CODIGO_CLIENTE,FILIAL,CADASTRAMENTOeTIPO_VAREJOdo registro localizado; seOMSfor diferente de1, recalculaDATA_PARA_TRANSFERENCIAe aplica estratégia de mesclagem campo a campo conformeCADASTRAMENTOanterior antes doUPDATE; seOMSfor1, o bloco de atualizaçãoadicionalé 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 aCLIENTE_VAR_TIPOSeFILIAISpara 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 nesta(incluindo camadaconflito alémde documento/código).
O endpoint não implementa envio de notificação de erros; o acompanhamento de falhas da resoluçintegração daem classe.fila é tratado na Fila de Processamento.
Fluxo do Processo
Critérios de Aceitação
| Processo | Subprocesso | Descrição | Situação esperada | |
| Capturador | Captura e enfileiramento | Com estado apto e com configurado e gravar cada registro na fila de integração com e . |
Registro pendente na fila com conteúdo |
|
| Capturador | Captura por |
Para cada CODIGO_CLIENTE |
Registros reenfileirados com chave | reutilizado |
| Fila de Processamento | Integração ILLI | Ao processar registro pendente, deve JSON, , 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 |
Fila atualizada com situação |
|
| Endpoint (API) | Ao receber 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 |
