LojaAjusteEstoque (STATUS: CRIADO)
Documentação Técnica
| Nome do cliente | OSKLEN |
| Nome do projeto | Integração LINX → ILLI (Ajuste de |
| Biblioteca | wosk_loja_ajuste_estoque |
| 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 Ajuste Estoque (LINX → ILLI). |
Descrição
EstaEste bibliotecaserviço enviade ajuste de estoque por contagem no LINX encaminha ao ILLI os ajustes de estoque originadosdados de contagens nojá LINX,marcadas apóspara selecionartransferência, contagens elegíveis e montarcom o detalhamentodetalhe pordos produto.itens ajustados.ElaGarante garante que cada lote siga fila de processamento,fila, integração e registro de sucesso ou falhaerro para acompanhamento.cada contagem elegível por filial.
Capturador
A captura automática consulta a view ESTOQUE_PROD_CONTAGEM quando o estado internodo serviço LojaAjusteEstoque está apto (reinício a partir de situação reiniciada de concluído para paradoda ou continuação em andamento), aplicandorestringindo filtro pora filiais de loja definidas em ambiente (excluindo estoque central e centro de distribuição), ESTOQUE_AJUSTADO = '1', data mínima de transferência e ordenação/paginaçãoprocessamento porcronológico data, conforme conceito de (ordenação e paginação por datadata) com ORDER BY DATA_PARA_TRANSFERENCIA ASC, OFFSET e FETCH NEXT conforme o limite de registros por lote configurado para o serviço LojaAjusteEstoque. Para cada registrolinha retornado,retornada, obtém-se aso linhas de ajustedetalhe em ESTOQUE_PROD_CTG_AJUSTE, compõe-se a chave NOME_CONTAGEM-FILIAL e o registro é encaminhadogravado àna filaFila de processamentoProcessamento identificada pelocom serviço LojaAjusteEstoque, atualizando-seatualizando offset, chave e data de posição eaté repetindo-concluir o ciclo.
A captura por chave aceita uma ou mais chaves no formato NOME_CONTAGEM-FILIAL; se a leiturachave enquantonão ativer regraduas partes, o fluxo interrompe com erro de paginaçãochave indicarinválida. novaPara página.Acada capturachave dirigidaválida, por chaves percorre uma lista informada, valida o formato em duas partes (NOME_CONTAGEM econsulta-se FILIALESTOQUE_PROD_CONTAGEM), consulta a mesma view com filtro fixo por nome de contagem e WHEREfilialfilial, e, para cada linha retornada, incluienriquece-se o detalhamentoregistro com ITENS a partir de ESTOQUE_PROD_CTG_AJUSTE antese grava-se na Fila de gravarProcessamento, na fila compreservando o token quando já existenteexistir quandopara houver.a mesma chave.
Fonte
Origem consultada: view ESTOQUE_PROD_CONTAGEM.
Complemento de detalheslinhas porde contagem:produto: tabela ESTOQUE_PROD_CTG_AJUSTE.
Operações com Dados
LeituraConsulta principal (base da consulta de captura):
SELECT
NOME_CONTAGEM,
FILIAL,
EMISSAO,
RESPONSAVEL,
OBS,
ESTOQUE_AJUSTADO,
DATA_AJUSTE,
TIPO,
SALDO_ARMAZENADO,
CONTAGEM_POR_AREA_FECHADA,
DATA_PARA_TRANSFERENCIA,
NOME_CONTAGEM_ANTERIOR
FROM
ESTOQUE_PROD_CONTAGEM (NOLOCK)
Operações com Dados
Leitura: consulta da view ESTOQUE_PROD_CONTAGEM conforme SQL da seção Fonte; detalhamento de itens por NOME_CONTAGEM na tabela ESTOQUE_PROD_CTG_AJUSTE.
Consulta dinâmica na (captura automáticatica): (filtroreutiliza ea paginaçprojeção montadoscom em tempo de execução; lista de filiais e valores de data/offset/limit conforme estado e configuração):
.SELECT NOME_CONTAGEM, FILIAL, EMISSAO, RESPONSAVEL, OBS, ESTOQUE_AJUSTADO, DATA_AJUSTE, TIPO, SALDO_ARMAZENADO, CONTAGEM_POR_AREA_FECHADA, DATA_PARA_TRANSFERENCIA, NOME_CONTAGEM_ANTERIOR FROM ESTOQUE_PROD_CONTAGEM (NOLOCK)WHERE FILIAL IN ('...')AND(lista de filiais de loja, excluindo as removidas no código),ESTOQUE_AJUSTADO = '1',ANDDATA_PARA_TRANSFERENCIADATA_PARA_TRANSFERENCIAmaior>=ou'{filtro_DATA_PARA_TRANSFERENCIA}'igual ao filtro do capturador,ORDER BY DATA_PARA_TRANSFERENCIA ASC,OFFSET{offset}eROWSFETCH NEXT{limite}comROWSoONLYlimite de registros por lote configurado para o serviçoLojaAjusteEstoque
Consulta dinâmica na (captura por chavechave): (mesma WHEREporprojeção com NOME_CONTAGEM e FILIAL da chave):
SELECT
NOME_CONTAGEM,
FILIAL,
EMISSAO,
RESPONSAVEL,
OBS,
ESTOQUE_AJUSTADO,
DATA_AJUSTE,
TIPO,
SALDO_ARMAZENADO,
CONTAGEM_POR_AREA_FECHADA,
DATA_PARA_TRANSFERENCIA,
NOME_CONTAGEM_ANTERIOR
FROM
ESTOQUE_PROD_CONTAGEM (NOLOCK)
WHERE NOME_CONTAGEM = '{NOME_CONTAGEM}parte1}' AND FILIAL = '{FILIAL}parte2}' obtidas da chave.
Detalhamento de produtositens por contagemcontagem: (consulta à tabela NOME_CONTAGEMESTOQUE_PROD_CTG_AJUSTEinformado):
SELECT
NOME_CONTAGEM,
PRODUTO,
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,
CM_OPERACAO,
DATA_PARA_TRANSFERENCIA
FROM
ESTOQUE_PROD_CTG_AJUSTE (NOLOCK)
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: estado dado captura mantidocapturador pelo mecanismo do serviço LojaAjusteEstoque (offset, chave,chave de posição, datas, filtro,filtro e situação); registros pendentes e processados armazenados na tabela da fila de integração com serviço LojaAjusteEstoque e chave NOME_CONTAGEM-FILIAL.
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, envia o conteúdo ao endpointrecurso ILLI de ajuste de estoque, interpreta o JSON de retorno (success, message) e grava situação final, mensagem, tempo e auditoria de requisição na própriatabela fila.da Nãofila háde rotinas inteligentes associadas a este arquivo.integração.
Estruturação de Dados
O payloadconteudo enviadogravado aona ILLIfila corresponde ao array conteudo do registro na fila, construído a partiratual da linha deview ESTOQUE_PROD_CONTAGEM maisapós ainclusão da chave ITENS com o array de linhas retornadaslidas de ESTOQUE_PROD_CTG_AJUSTE para o mesmo NOME_CONTAGEM.
- Chamada:
Requisição HTTP - Recurso:
e3a6737d-ac74-4ed6-9668-e3921320c29f/ilx_ajuste_estoque/setAjuste - Mé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 |
Obrigatório | Descrição | |
key |
string | não | Chave interna da fila quando aplicável à plataforma; o envio ao ILLI usa o array de |
NOME_CONTAGEM |
string | sim | Identificador da contagem na view ESTOQUE_PROD_CONTAGEM. |
FILIAL |
string | sim | Código da filial na view ESTOQUE_PROD_CONTAGEM. |
EMISSAO |
string | não | Data ou referência de emissão conforme origem. |
RESPONSAVEL |
string | não | Responsável informado na contagem. |
OBS |
string | não | Observações da contagem. |
ESTOQUE_AJUSTADO |
string | sim | Indicador de estoque ajustado (1 na seleção do capturador). |
DATA_AJUSTE |
string | não | Data do ajuste conforme origem. |
TIPO |
string | não | Tipo da contagem. |
SALDO_ARMAZENADO |
string | não | Saldo armazenado informado. |
CONTAGEM_POR_AREA_FECHADA |
string | não | Indicador de contagem por área fechada. |
DATA_PARA_TRANSFERENCIA |
string | sim | Data e hora mínima de transferência usada no filtro e ordenação do capturador. |
NOME_CONTAGEM_ANTERIOR |
string | não | Referência de contagem anterior quando existir. |
ITENS |
array | sim | Linhas de ESTOQUE_PROD_CTG_AJUSTE para o NOME_CONTAGEM; ver tabela de elementos. |
| Campo | Tipo | Obrigatório | Descrição |
NOME_CONTAGEM |
string |
sim | Repete o identificador da na linha de item. |
|
string |
sim | Código do produto. |
|
string |
sim | Cor do produto. |
|
string |
sim | Quantidade ajustada. |
|
string |
não | Quantidade de grade posição 1. |
|
string |
não | Quantidade de grade posição 2. |
|
string |
não | Quantidade de grade posição 3. |
|
string |
não | Quantidade de grade posição 4. |
|
string |
não | Quantidade de grade posição 5. |
|
string | não | Quantidade de grade posição 6. |
|
string | não | Quantidade de grade posição 7. |
|
string | não | Quantidade de grade posição 8. |
A9 |
string | não | Quantidade de grade posição 9. |
A10 |
string | não | Quantidade de grade posição 10. |
A11 |
string | não | Quantidade de grade posição 11. |
A12 |
string | não | Quantidade de grade posição 12. |
A13 |
string | não | Quantidade de grade posição 13. |
A14 |
string | não | Quantidade de grade posição 14. |
A15 |
string | não | Quantidade de grade posição 15. |
A16 |
string | não | Quantidade de grade posição 16. |
A17 |
string | não | Quantidade de grade posição 17. |
A18 |
string | não | Quantidade de grade posição 18. |
A19 |
string | não | Quantidade de grade posição 19. |
A20 |
string | não | Quantidade de grade posição 20. |
A21 |
string | não | Quantidade de grade posição 21. |
A22 |
string | não | Quantidade de grade posição 22. |
A23 |
string | não | Quantidade de grade posição 23. |
A24 |
string | não | Quantidade de grade posição 24. |
A25 |
string | não | Quantidade de grade posição 25. |
A26 |
string | não | Quantidade de grade posição 26. |
A27 |
string | não | Quantidade de grade posição 27. |
A28 |
string | não | Quantidade de grade posição 28. |
A29 |
string | não | Quantidade de grade posição 29. |
A30 |
string | não | Quantidade de grade posição 30. |
A31 |
string | não | Quantidade de grade posição 31. |
A32 |
string | não | Quantidade de grade posição 32. |
A33 |
string | não | Quantidade de grade posição 33. |
A34 |
string | não | Quantidade de grade posição 34. |
A35 |
string | não | Quantidade de grade posição 35. |
A36 |
string | não | Quantidade de grade posição 36. |
A37 |
string | não | Quantidade de grade posição 37. |
A38 |
string | não | Quantidade de grade posição 38. |
A39 |
string | não | Quantidade de grade posição 39. |
A40 |
string | não | Quantidade de grade posição 40. |
A41 |
string | não | Quantidade de grade posição 41. |
A42 |
string | não | Quantidade de grade posição 42. |
A43 |
string | não | Quantidade de grade posição 43. |
A44 |
string | não | Quantidade de grade posição 44. |
A45 |
string | não | Quantidade de grade posição 45. |
A46 |
string | não | Quantidade de grade posição 46. |
A47 |
string | não | Quantidade de grade posição 47. |
A48 |
string | não | Quantidade de grade posição 48. |
CUSTO1 |
string | não | Custo 1. |
CUSTO2 |
string | não | Custo 2. |
CUSTO3 |
string | não | Custo 3. |
CUSTO4 |
string | não | Custo 4. |
CM_OPERACAO |
string | não | Custo médio ou operação associada conforme origem. |
DATA_PARA_TRANSFERENCIA |
string |
não | Data e |
| | ||
| |
Exemplo
ilustrativo de estrutura do conteudo (valores fictícios):
{
"NOME_CONTAGEM": "...",
"FILIAL": "...",
"EMISSAO": "...",
"RESPONSAVEL": "...",
"OBS": "...",
"ESTOQUE_AJUSTADO": "...",
"DATA_AJUSTE": "...",
"TIPO": "...",
"SALDO_ARMAZENADO": "...",
"CONTAGEM_POR_AREA_FECHADA": "...",
"DATA_PARA_TRANSFERENCIA": "...",
"NOME_CONTAGEM_ANTERIOR": "...",
"ITENS": []
}Tratamento de Dados
Sobre o registro atual retornado da viewde ESTOQUE_PROD_CONTAGEM noantes laçodo deenvio captura:à fila:
ITENS: passa a conter o array de linhas obtidas da consulta aESTOQUE_PROD_CTG_AJUSTEpara o mesmoNOME_CONTAGEM,composto por objetos compreservando oscampos:camposNOME_CONTAGEM,PRODUTO,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,CM_OPERACAO,eDATA_PARA_TRANSFERENCIA.
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.analisado além do conteúdo já montado na captura.
Integração com o ILLI
Chamada de integração com o ILLI (via biblioteca de integração):ILLI:
- Chamada:
Requisição HTTP(encapsulada pela rotina de envio ao ILLI). - Recurso:
e3a6737d-ac74-4ed6-9668-e3921320c29f/ilx_ajuste_estoque/setAjuste - Método HTTP:
conforme implementação padrão da rotina de integração ILLI (corpo JSON com o arrayconteudoPOST). - Corpo de entrada:
objeto/objeto ou array correspondente aoconteudodo registro da fila (camposcabeçalho da contagem +ITENS). - Processamento: envio do payload e leitura da resposta JSON com indicadores
successemessage.
Exemplo
de
conteudo{
"NOME_CONTAGEM": "...",
"FILIAL": "...",
"ITENS": [ { "PRODUTO": "...", "QTDE_AJUSTE": "..." } ]
}Tratamento de retorno
Ausência de resposta JSON: situaçlança exceção deindicando erroque (exceção)não ehouve resposta; situação final 4 na fila.tabela da fila de integração.
Resposta sem success e sem message: tratada como retorno não reconhecido (exceção), situação 4.
Sucesso: quando success não está vazio no JSON,vazio, situação 2; caso contrário situação 4 com mensagem retornada em message quando existir.
Em exceção,o genérica, a mensagem é persistida; se a mensagem indicar trecho após prefixo de erroJSON énão persistida ereconhecido, o retorno estruturado pode incluir error e data quando a mensagem contém prefixo indicando JSON não reconhecido.
Encaminhamento em cenário de erro
Não há, neste fluxo, encaminhamento automático para outro serviço ou biblioteca após falha na integração com o ILLI;conteúdo o registro permanece com o estado de erro registrado na fila.analisado.
Notificação
A notificação de erros consulta registros com falha na tabela da fila de integração para o serviço LojaAjusteEstoque, e situação de erro, ordenando pelo horário de processamento para priorizar ocorrências mais antigas.
Destinatários
Endpoint (API)
O endpoint publica a biblioteca para instanciar dinamicamente as classes internas (por exemplo, capturador ou fila) via parâmetro de classe no padrão da plataforma. O caminho declarado no arquivo da biblioteca é usado como base do recurso HTTP.
Estruturação de Dados
A invocação segue o contrato de publicação de biblioteca: corpo ou parâmetros conforme a plataforma para selecionar a classe alvo e assuntoa sãoperação definidosdesejada.
- Chamada:
osRequisiçãocamposHTTP - Recurso:
incluem/bibliotecas/01a79ef5-24bc-4bdc-b797-512284913153/wosk_loja_ajuste_estoque - Método HTTP:
POST
Exemplo de capturapayload eenviado processamento,para chave,o mensagemendpoint (JSON):
{
"key": "<API_KEY_OU_VAZIO>",
"class": "Monitor",
"method": "run",
"params": []
}
| Campo | Tipo | Obrigatório | Descrição |
|
string | não | Chave ou identificador conforme exigência da plataforma de publicação do |
class |
string | sim | Nome da classe interna a carregar via fábrica da biblioteca (ex.: Monitor, Queue). |
method |
string | variável | Método a executar na instância retornada, conforme contrato da plataforma. |
params |
array | não | Parâmetros do método quando aplicável. |
Tratamento de Dados
O carregamento dinâmico instancia a classe em WOSK\LojaAjusteEstoque\ conforme o nome informado após normalização dedo quebrassegmento recebido; não há transformação adicional de linhanegócio nanesta mensagemcamada dealém erroda pararesolução exibição.da classe.
Fluxo do Processo
Critérios de Aceitação
| Processo | Subprocesso | Descrição | Situação esperada | |
| Capturador | Captura e enfileiramento | Com estado apto e filtros válidos, deve ler ESTOQUE_PROD_CONTAGEM com ESTOQUE_AJUSTADO = '1', filiais de loja permitidas e data mínima de transferência, enriquecer com linhas de ESTOQUE_PROD_CTG_AJUSTE e gravar na fila de integração com chave NOME_CONTAGEM-FILIAL e serviço LojaAjusteEstoque. |
Registro pendente na fila com conteúdo completo e chave consistente. | |
| Capturador | Captura por chave | Para cada chave no formato NOME_CONTAGEM-FILIAL, deve consultar a contagem e reproduzir o encaminhamento à fila com token preservado quando | existir; Chave válida gera atualização na |
|
| Fila de Processamento | Integração ILLI | Ao processar registro pendente, deve enviar o conteudo ao ilx_ajuste_estoque/setAjuste, interpretar o retorno quanto à situação de sucesso ou erro com mensagem (successmessage) e persistir na tabela da fila de integração a situação final (2 ou |
Fila atualizada com situação final, mensagem e auditoria de requisição coerentes com o |
|
| Endpoint (API) | Publicação da biblioteca | Ao receber requisição válida para o caminho da biblioteca, deve resolver a classe solicitada e permitir a execução dos métodos expostos (Monitor, Queue) conforme contrato da plataforma. |
Instância obtida sem erro de reflexão e operação encaminhada conforme parâmetros. |
