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

  1. Consulta e Filtros: O job realiza requisições HTTP GET paginadas ao endpoint de descontos respeitando o período configurado (datainicial a dataFinal), o tipo de cliente CRM (tipoclientecrm) e o parâmetro de lojas (todasunidades=N).
  2. 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).
  3. Gravação de Propriedades Extras: Ao aceitar uma promoção, salva no RuB as propriedades extras preco_desconto, inicio_desconto, final_desconto e fator_div_qtd.
  4. 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.
  5. 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:

  1. Como é Decidido se o Preço é ou Não Promocional: Se a chave rpinfoDescontoPropriedadeParaPreco estiver 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.
  2. Recupera o preço regular do produto configurado em chaveDoPrecoNormal (por padrão, Preco).
  3. 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ção rpinfoQuantidadeMinimaCharsCodigoPrecoZero, resultando em 000 por padrão).

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 RuBTipoCampo Origem no ERP (JSON)Descrição
preco_descontoDecimalvlprecofinal / itens[].precos[].precoPreço promocional/final de desconto do produto na loja
inicio_descontoData/HoradatainicialData inicial de vigência da promoção (dd/MM/yyyy)
final_descontoData/HoradatafinalData final de vigência da promoção (dd/MM/yyyy)
fator_div_qtdDecimalfatorDivQtdFator 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)TipoPadrãoDescriçã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)TextoVazioUsuário enviado no cabeçalho HTTP usuario para autenticação no endpoint de descontos.
Senha / Token de Descontos (rpinfoDescontoAuthPass)TextoVazioSenha/Token enviado no cabeçalho HTTP token para autenticação no endpoint de descontos.
Tipo de Cliente CRM (rpinfoDescontoTipoCrm)TextoMSigla que identifica o tipo de cliente CRM enviada no parâmetro tipoclientecrm da query string.
Dias Retroativos (rpinfoDescontoDiasRetroativos)Inteiro0Quantidade de dias subtraídos da data atual para compor o filtro datainicial da consulta.
Dias Futuros (rpinfoDescontoDiasFuturos)Inteiro0Quantidade de dias somados à data atual para compor o filtro dataFinal da consulta.
Tamanho da Página (rpinfoDescontoPageSize)Inteiro10Quantidade de registros por página requisitados no parâmetro quantidade da query string.
Propriedade de Desconto para Preço (rpinfoDescontoPropriedadeParaPreco)TextoVazioNome 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.