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
| Sentido | Componente | Identificação |
|---|---|---|
| ERP -> RuB | Job (Configurações > Agenda de Execuções) | Nome: Auditoria de estoque · Grupo: RPInfo · Chave: rpinfoAuditoriaEstoque |
| RuB -> ERP | Driver de Exportação (Writer) | inventario_rpinfo · Interface: RPInfo (Configurações > Inventário) |
Endpoints da API RPInfo utilizados:
| Finalidade | Método | Endpoint |
|---|---|---|
| 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ção | Valor 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). |
CNPJ | CNPJ 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
- Calcula a janela de consulta:
data inicial = hoje - rpinfoInventarioDiasRetroativosedata final = hoje + rpinfoInventarioDiasFuturos. - Lê o último código processado da loja (
lastId, entidadeAUDITORIA_ESTOQUEemrpinfo_controle; inicia em0). - Consulta no RPInfo as auditorias pendentes a partir do
lastId, de forma paginada (repete a consulta enquanto olastIdavançar). - Ignora os itens cuja chave
{idLoja}_{codigo}já exista emrpinfo_processado. - 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). - 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.
- Marca cada auditoria como processada em
rpinfo_processadoe avança olastIdemrpinfo_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
| Atributo | Valor |
|---|---|
| Código | AUD-{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. |
| Tipo | Tipo de inventário definido em rpinfoInventarioTipoPadrao (padrão 1), se existir. |
| Produtos | Produtos informados pelas auditorias pendentes do RPInfo (sem repetição). |
2. Envio da Contagem (RuB -> ERP)
Funcionamento Geral
- O processo é iniciado após a conclusão de todas as etapas de contagem e finalização do inventário no RuB.
- O sistema resolve o depósito (
idEstoque) no ERP com base no tipo do inventário. - O envio ocorre conforme a versão do endpoint configurada em
rpinfoVersaoEndPointInventario:
| Versão | Comportamento |
|---|---|
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:
InventarioeInventarioProduto.
Detalhamento dos Campos de cada Auditoria (JSON)
| Campo RPInfo | Tipo | Origem RuB / Valor | Descrição |
|---|---|---|---|
id | Número | hash(idInventario + "\|" + idProduto) | Identificador único gerado por hash (Inventário + Produto). |
unidade | Texto | Identificador da unidade (v1.3) / loja.cnpj (v1.1) | Unidade onde o inventário foi realizado (ver Identificador da Unidade). |
codigoProduto | Texto | codigo | Código de barras ou código interno do produto. |
quantidade | Número | qtd | Quantidade total apurada (somatória das contagens). Na v1.3 é enviada com até 3 casas decimais; na v1.1 como inteiro. |
data | Texto | dataHoraIni | Data de início do inventário (formato dd/MM/yyyy). |
idEstoque | Número | idEstoqueParaOTipoInventario{ID} / ...default | Código do depósito no ERP (De-Para por tipo de inventário). Se não configurado, assume 1. |
acumular | Booleano | false | Indica que o valor enviado deve substituir o saldo atual (não acumular). |
Cabeçalho do lote (somente v1.3):
| Campo | Valor |
|---|---|
id | INV-{idInventario}-{unidade} |
origem | RUB |
dataHoraDispositivo | Data/hora de fim do inventário (ou a atual, se vazia), formato dd/MM/yyyy HH:mm:ss Z. |
auditorias | Lista 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) | Tipo | Padrão | Descrição e Como é Aplicada |
|---|---|---|---|
Identificador da unidade para inventário (rpinfoIdentificadorUnidadeInventario) | Lista | Código da Loja no ERP | Define 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) | Inteiro | 3 | Completa 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) | Inteiro | 1 | Job: quantos dias antes de hoje a consulta de auditorias pendentes deve começar. |
Dias a somar para data final (rpinfoInventarioDiasFuturos) | Inteiro | 0 | Job: quantos dias após hoje a consulta de auditorias pendentes deve terminar. |
Tipo de inventário padrão para auditoria RPInfo (rpinfoInventarioTipoPadrao) | Inteiro | 1 | Job: ID do tipo de inventário atribuído aos inventários criados a partir das auditorias do RPInfo. |
Versão do endpoint (rpinfoVersaoEndPointInventario) | Lista | POST 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) | Inteiro | 30 | Writer 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}) | Inteiro | Não definido | Writer: 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) | Inteiro | Não definido | Writer: 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 olastIdda entidadeAUDITORIA_ESTOQUEpor 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ódigoAUD-{número}dos inventários criados pelo job. É criada pelo script de atualizaçãoupdate_005(versão 5 do banco do módulo) - garanta que a atualização foi aplicada antes de ativar o job.
Ativação
- Envio de contagem (RuB -> ERP): em Configurações > Inventário, selecione a interface
RPInfo. - Auditoria de estoque (ERP -> RuB): em Configurações > Agenda de Execuções, crie/ative o gatilho do job
Auditoria de estoque(grupoRPInfo) com a periodicidade desejada. O job não possui gatilho padrão.