Inventário / Auditoria de Estoque

Esta integração trabalha nas duas direções com o módulo de Inventário do RuB:

  • ERP -> RuB (Job Auditoria de estoque): consulta no RPInfo as auditorias de estoque pendentes e cria automaticamente inventários no RuB para os produtos solicitados.
  • RuB -> ERP (Writer inventario_rpinfo): exporta os resultados das contagens de inventário finalizadas no RuB para o RPInfo, visando a atualização de saldos e a auditoria de estoque.

Identificação no RuB

SentidoComponenteIdentificação
ERP -> RuBJob (Configurações > Agenda de Execuções)Nome: Auditoria de estoque · Grupo: RPInfo · Chave: rpinfoAuditoriaEstoque
RuB -> ERPDriver de Exportação (Writer)inventario_rpinfo · Interface: RPInfo (Configurações > Inventário)

Endpoints da API RPInfo utilizados:

FinalidadeMétodoEndpoint
Consultar auditorias pendentes (Job)GET/v1.1/produtounidade/auditoriaestoque/{lastId}/datainicial/{dd-MM-yyyy}/datafinal/{dd-MM-yyyy}?unidades={unidade}
Enviar contagem - versão legada (Writer)POST/v1.1/produtounidade/auditoriaestoque
Enviar contagem - versão oficial (Writer)POST/v1.3/produtounidade/auditoriaestoque

Identificador da Unidade

Tanto o Job quanto o Writer identificam a loja no RPInfo conforme a configuração rpinfoIdentificadorUnidadeInventario:

OpçãoValor enviado/consultado
Código da Loja no ERP (padrão)Código da loja traduzido do RuB para o ERP, completado com zeros à esquerda até o tamanho mínimo definido em rpinfoTamanhoMinimoIdentificadorUnidadeInventario (padrão 3).
CNPJCNPJ cadastrado na loja.

Atenção: se a loja não possuir o identificador configurado (ex.: CNPJ não preenchido), o Job e o Writer geram erro de loja inválida para essa loja.


1. Auditoria de Estoque (ERP -> RuB)

O job Auditoria de estoque é executado por loja e transforma as auditorias solicitadas no RPInfo em inventários no RuB, prontos para contagem.

Funcionamento Geral

  1. Calcula a janela de consulta: data inicial = hoje - rpinfoInventarioDiasRetroativos e data final = hoje + rpinfoInventarioDiasFuturos.
  2. Lê o último código processado da loja (lastId, entidade AUDITORIA_ESTOQUE em rpinfo_controle; inicia em 0).
  3. Consulta no RPInfo as auditorias pendentes a partir do lastId, de forma paginada (repete a consulta enquanto o lastId avançar).
  4. Ignora os itens cuja chave {idLoja}_{codigo} já exista em rpinfo_processado.
  5. Localiza cada produto (codigoProduto) na loja. Produtos não encontrados no RuB geram um warning no log e são ignorados (não são marcados como processados).
  6. Cria um inventário para a execução (os produtos das demais páginas são adicionados ao mesmo inventário), associando o tipo de inventário padrão configurado.
  7. Marca cada auditoria como processada em rpinfo_processado e avança o lastId em rpinfo_controle.

Fluxo de Execução

graph TD
    A["Job Auditoria de estoque (por loja)"] --> B["Resolver identificador da unidade"]
    B --> C["Calcular janela (dias retroativos / futuros)"]
    C --> D["GET /v1.1/produtounidade/auditoriaestoque/{lastId}/datainicial/{ini}/datafinal/{fim}"]
    D --> E{"Há auditorias?"}
    E -- "Não" --> Z[("Fim")]
    E -- "Sim" --> F{"Já processada? (rpinfo_processado)"}
    F -- "Sim" --> D
    F -- "Não" --> G{"Produto existe no RuB?"}
    G -- "Não" --> H["Registrar warning e ignorar"]
    G -- "Sim" --> I["Criar inventário AUD-{sequence} ou adicionar produtos ao inventário da execução"]
    H --> D
    I --> J["Marcar como processada e salvar lastId"]
    J --> D

Inventário Criado no RuB

AtributoValor
CódigoAUD-{número}, gerado pela sequence SEQ_RPINFO_INVENTARIO (única do módulo RPInfo).
Descrição{prefixo} - yyyy-MM-dd HH:mm:ss. O prefixo é o nome do tipo de inventário padrão quando a configuração Utiliza descrição de inventário padrão do módulo Inventário está ativa; caso contrário, Auditoria de Estoque.
TipoTipo de inventário definido em rpinfoInventarioTipoPadrao (padrão 1), se existir.
ProdutosProdutos informados pelas auditorias pendentes do RPInfo (sem repetição).

2. Envio da Contagem (RuB -> ERP)

Funcionamento Geral

  1. O processo é iniciado após a conclusão de todas as etapas de contagem e finalização do inventário no RuB.
  2. O sistema resolve o depósito (idEstoque) no ERP com base no tipo do inventário.
  3. O envio ocorre conforme a versão do endpoint configurada em rpinfoVersaoEndPointInventario:
VersãoComportamento
POST v1.3 (Oficial/Lotes) (padrão)Envia todos os produtos em um único lote identificado por INV-{idInventario}-{unidade}, com origem RUB, e recebe um recibo do RPInfo (registrado no log).
POST v1.1 (Legado)Agrupa os produtos em pacotes de rpinfoQtdProdutosInventario itens (paginação) e envia um POST por pacote.

Fluxo de Execução

graph TD
    A["Finalização de Inventário no RuB"] --> B["Identificar Tipo de Inventário"]
    B --> C["Resolver Depósito ERP (idEstoqueParaOTipoInventario{ID} ou default; padrão 1)"]
    C --> D{"Versão do endpoint (rpinfoVersaoEndPointInventario)"}
    D -- "v1.3" --> E["Montar lote INV-{idInventario}-{unidade}"]
    E --> F["POST /v1.3/produtounidade/auditoriaestoque"]
    F --> G["Recibo retornado pelo RPInfo"]
    D -- "v1.1" --> H["Agrupar Produtos em Pacotes (rpinfoQtdProdutosInventario)"]
    H --> I["POST /v1.1/produtounidade/auditoriaestoque (por pacote)"]
    G --> J[("ERP RPInfo - Auditoria de Estoque / Saldos")]
    I --> J

Origem dos Dados no RuB

Os dados são extraídos do módulo de Inventário:

  • Processo: Finalização de inventário.
  • Entidade: Inventario e InventarioProduto.

Detalhamento dos Campos de cada Auditoria (JSON)

Campo RPInfoTipoOrigem RuB / ValorDescrição
idNúmerohash(idInventario + "\|" + idProduto)Identificador único gerado por hash (Inventário + Produto).
unidadeTextoIdentificador da unidade (v1.3) / loja.cnpj (v1.1)Unidade onde o inventário foi realizado (ver Identificador da Unidade).
codigoProdutoTextocodigoCódigo de barras ou código interno do produto.
quantidadeNúmeroqtdQuantidade total apurada (somatória das contagens). Na v1.3 é enviada com até 3 casas decimais; na v1.1 como inteiro.
dataTextodataHoraIniData de início do inventário (formato dd/MM/yyyy).
idEstoqueNúmeroidEstoqueParaOTipoInventario{ID} / ...defaultCódigo do depósito no ERP (De-Para por tipo de inventário). Se não configurado, assume 1.
acumularBooleanofalseIndica que o valor enviado deve substituir o saldo atual (não acumular).

Cabeçalho do lote (somente v1.3):

CampoValor
idINV-{idInventario}-{unidade}
origemRUB
dataHoraDispositivoData/hora de fim do inventário (ou a atual, se vazia), formato dd/MM/yyyy HH:mm:ss Z.
auditoriasLista dos itens descritos acima. Produtos não encontrados no RuB são ignorados.

Configurações Avançadas e Aplicação

Acesse no RuB em Configurações > Configurações Avançadas > Integração > RPInfo:

Configuração (Chave)TipoPadrãoDescrição e Como é Aplicada
Identificador da unidade para inventário (rpinfoIdentificadorUnidadeInventario)ListaCódigo da Loja no ERPDefine se a unidade é identificada por CNPJ ou pelo código da loja no ERP (Job e Writer).
Tamanho mínimo do identificador da unidade para inventário (rpinfoTamanhoMinimoIdentificadorUnidadeInventario)Inteiro3Completa com zeros à esquerda o código da loja no ERP. Visível somente quando o identificador é Código da Loja no ERP.
Dias a subtrair para data inicial (rpinfoInventarioDiasRetroativos)Inteiro1Job: quantos dias antes de hoje a consulta de auditorias pendentes deve começar.
Dias a somar para data final (rpinfoInventarioDiasFuturos)Inteiro0Job: quantos dias após hoje a consulta de auditorias pendentes deve terminar.
Tipo de inventário padrão para auditoria RPInfo (rpinfoInventarioTipoPadrao)Inteiro1Job: ID do tipo de inventário atribuído aos inventários criados a partir das auditorias do RPInfo.
Versão do endpoint (rpinfoVersaoEndPointInventario)ListaPOST v1.3 (Oficial/Lotes)Writer: escolhe entre o envio legado (v1.1) e o oficial com lotes e recibo (v1.3). (O rótulo na tela é "Versão do endpoint a ser utilizada no Job Produto".)
Quantidade de Produtos por Envio (rpinfoQtdProdutosInventario)Inteiro30Writer v1.1: tamanho de cada lote (página) de produtos enviado no POST. Não se aplica à v1.3.
Depósito por Tipo de Inventário (idEstoqueParaOTipoInventario{ID})InteiroNão definidoWriter: ID do depósito de estoque no ERP para um tipo de inventário do RuB ({ID} é o identificador do tipo). Gerada dinamicamente para cada tipo de inventário.
Depósito Padrão de Inventário (idEstoqueParaOTipoInventariodefault)InteiroNão definidoWriter: depósito utilizado quando o tipo do inventário não tem mapeamento. Se também não estiver definido, é enviado idEstoque = 1.

Banco de Dados

  • rpinfo_controle: guarda o lastId da entidade AUDITORIA_ESTOQUE por loja.
  • rpinfo_processado: guarda a chave {idLoja}_{codigo} das auditorias já transformadas em inventário (evita duplicidade).
  • Sequence SEQ_RPINFO_INVENTARIO: gera o número do código AUD-{número} dos inventários criados pelo job. É criada pelo script de atualização update_005 (versão 5 do banco do módulo) - garanta que a atualização foi aplicada antes de ativar o job.

Ativação

  1. Envio de contagem (RuB -> ERP): em Configurações > Inventário, selecione a interface RPInfo.
  2. Auditoria de estoque (ERP -> RuB): em Configurações > Agenda de Execuções, crie/ative o gatilho do job Auditoria de estoque (grupo RPInfo) com a periodicidade desejada. O job não possui gatilho padrão.