Desconto
Esta integração permite a importação de descontos de produtos e preços promocionais do ERP RPInfo para o RuB. O processamento é realizado através de um job agendado que sincroniza os dados periodicamente, aplicando regras de seleção da melhor oferta e validação do Dígito Verificador (DV) compartilhado com a integração de Produto.
Identificação na Agenda de Execuções
- Nome do Job:
Descontos - Grupo:
RPInfo - Chave do Job:
rpinfoDESCONTOS - Endpoint API:
/api/v2/produtos-descontos
Funcionamento Geral
- Consulta e Filtros: O job realiza requisições HTTP GET paginadas ao endpoint de descontos respeitando o período configurado (
datainicialadataFinal), o tipo de cliente CRM (tipoclientecrm) e o parâmetro de lojas (todasunidades=N). - Processamento e Seleção da Melhor Oferta: Para cada desconto retornado, busca os produtos correspondentes no RuB via código de barras ou de-para. Caso o produto já possua promoção ativa, compara os preços e vigências para decidir se a oferta atual deve ser sobrescrita (menor preço ou maior vigência em caso de empate).
- Gravação de Propriedades Extras: Ao aceitar uma promoção, salva no RuB as propriedades extras
preco_desconto,inicio_desconto,final_descontoefator_div_qtd. - Atualização do Dígito Verificador (DV): Executa a rotina centralizada de geração de código de preço do job de Produto, validando se o valor promocional é vantajoso em relação ao preço regular antes de compor o DV.
- Limpeza Automática: Remove automaticamente as propriedades de desconto dos produtos cujas promoções expiraram (data final anterior a ontem).
Fluxo de Execução
graph TD
A["Job Descontos Agendado"] --> B["Calcular Período (Dias Retroativos e Futuros)"]
B --> C["GET /api/v2/produtos-descontos (Paginado)"]
C --> D["Para cada Desconto Retornado"]
D --> E["De-Para do Produto / Código de Barras"]
E --> F{"Avaliar Melhor Oferta?"}
F -- "Menor Preço ou Maior Vigência" --> G["Gravar Propriedades Extras (preco_desconto, vigência, fator)"]
F -- "Preço Maior ou Empate Inferior" --> H["Descartar Registro"]
G --> I["Recalcular Dígito Verificador (DV)"]
C --> J["Limpeza Automática de Promoções Expiradas (final < ontem)"]
I --> K[("Produtos Atualizados no RuB")]
J --> K
Regra de Melhor Oferta e Desempate
Quando um produto recebe múltiplas ofertas ou já possui uma promoção ativa persistida em suas propriedades extras, o RuB harmoniza os dados conforme as seguintes regras:
- Menor Preço Vigente: Se o novo desconto recebido apresentar valor final (
precoFinal) inferior ao preço de desconto atualmente gravado no produto, a nova oferta sobrescreve a anterior. - Desempate por Maior Vigência: Se a nova oferta possuir exatamente o mesmo valor da oferta existente (
precoFinal == precoAtual), o sistema avalia a data de término (datafinal). Se a nova data de término for maior (mais longa no futuro), a vigência é atualizada para a nova data. - Descarte de Ofertas Piores: Se a nova oferta possuir preço superior ao já persistido, ou igual com vigência menor ou igual, o registro é ignorado mantendo a oferta ativa mais vantajosa.
Atualização do Dígito Verificador (DV)
O Dígito Verificador (DV) externo é utilizado nas etiquetas de gôndola e nas rotinas de auditoria de preços. O seu recálculo é centralizado na rotina de geração de código de preço da integração de Produto e executado tanto na carga de produtos quanto na atualização de descontos. Para compreender a composição da máscara e visualizar o fluxo ilustrado passo a passo, consulte a seção Atualização do Dígito Verificador (DV) na documentação de Produto.
Validação de Preço de Desconto vs. Preço Regular
Durante a composição da máscara configurada em formatoCodigoPreco:
- Como é Decidido se o Preço é ou Não Promocional: Se a chave
rpinfoDescontoPropriedadeParaPrecoestiver vazia, o mecanismo não será aplicado. Estando preenchida, o RuB verifica se a variável na máscara corresponde ao valor configurado (por igualdade direta ou por resolução de sinônimos mapeados). Caso positivo, a variável é classificada como preço de desconto; caso contrário, segue o fluxo como preço regular. - Recupera o preço regular do produto configurado em
chaveDoPrecoNormal(por padrão,Preco). - Compara o valor da oferta com o preço regular:
- Oferta Válida (
preco_desconto < precoRegular): O valor promocional é mantido e formatado na máscara do DV. - Oferta Inválida (
preco_desconto >= precoRegular): Quando o preço com desconto for maior ou igual ao preço regular, o componente de desconto é tratado como zero (formatado com preenchimento de zeros conforme a configuraçãorpinfoQuantidadeMinimaCharsCodigoPrecoZero, resultando em000por padrão).
- Oferta Válida (
Destaque sobre a Atualização de DV no Produto e no Desconto:
Tanto a integração de Produto quanto o job de Descontos compartilham a mesma regra para manter a consistência da auditoria em loja. Se uma promoção cadastrada no ERP estiver com valor igual ou superior ao preço regular, o RuB neutraliza o componente de desconto no DV (formatando com zeros conforme rpinfoQuantidadeMinimaCharsCodigoPrecoZero, gerando 000 por padrão), fazendo com que o produto mantenha a mesma chave de verificação de um produto sem oferta ativa. Isso elimina divergências de etiquetas e falsos positivos nas rotinas de auditoria da gôndola. O diagrama do fluxo completo pode ser consultado na seção de Atualização do Dígito Verificador (DV) de Produto.
Atenção à Configuração rpinfoDescontoPropriedadeParaPreco:
Se a chave estiver vazia, o mecanismo não será aplicado: a regra de decisão de menor preço e a supressão de descontos inválidos no Dígito Verificador não serão executadas. Para o funcionamento correto, a configuração avançada rpinfoDescontoPropriedadeParaPreco deve ser preenchida com o nome da propriedade extra de desconto utilizada (por exemplo, preco_desconto).
Propriedades Extras
| Propriedade Extra RuB | Tipo | Campo Origem no ERP (JSON) | Descrição |
|---|---|---|---|
preco_desconto | Decimal | vlprecofinal / itens[].precos[].preco | Preço promocional/final de desconto do produto na loja |
inicio_desconto | Data/Hora | datainicial | Data inicial de vigência da promoção (dd/MM/yyyy) |
final_desconto | Data/Hora | datafinal | Data final de vigência da promoção (dd/MM/yyyy) |
fator_div_qtd | Decimal | fatorDivQtd | Fator divisor de quantidade para cálculo ou aplicação do desconto |
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 |
|---|---|---|---|
URL de Descontos (rpinfoDescontoUrl) | Texto | (rpinfoUrl) | URL base da API de descontos. Se não preenchida, o job utiliza o endereço definido em rpinfoUrl. |
Usuário de Descontos (rpinfoDescontoAuthUser) | Texto | Vazio | Usuário enviado no cabeçalho HTTP usuario para autenticação no endpoint de descontos. |
Senha / Token de Descontos (rpinfoDescontoAuthPass) | Texto | Vazio | Senha/Token enviado no cabeçalho HTTP token para autenticação no endpoint de descontos. |
Tipo de Cliente CRM (rpinfoDescontoTipoCrm) | Texto | M | Sigla que identifica o tipo de cliente CRM enviada no parâmetro tipoclientecrm da query string. |
Dias Retroativos (rpinfoDescontoDiasRetroativos) | Inteiro | 0 | Quantidade de dias subtraídos da data atual para compor o filtro datainicial da consulta. |
Dias Futuros (rpinfoDescontoDiasFuturos) | Inteiro | 0 | Quantidade de dias somados à data atual para compor o filtro dataFinal da consulta. |
Tamanho da Página (rpinfoDescontoPageSize) | Inteiro | 10 | Quantidade de registros por página requisitados no parâmetro quantidade da query string. |
Propriedade de Desconto para Preço (rpinfoDescontoPropriedadeParaPreco) | Texto | Vazio | Nome da propriedade extra de desconto (ex.: preco_desconto) utilizada para determinar o preço promocional na decisão de menor oferta e na validação do Dígito Verificador (DV). Se a chave estiver vazia, o mecanismo não será aplicado. |
Dica de Operação:
Configure rpinfoDescontoDiasFuturos com um valor positivo (ex.: 1 ou 2) para carregar antecipadamente promoções agendadas para os próximos dias, garantindo que a gôndola e os leitores já conheçam os preços futuros.