Pular para o conteúdo principal

Aplica promoções ao carrinho do PDV

POST 

/sku/promotion/order/validate

Recebe a lista de itens em montagem no PDV e aplica todas as promoções vigentes retornando o carrinho com os preços recalculados (PriceSelling, PriceSellingTotal, ValueDiscount, ValueDiscountTotal, OriginalPriceSelling, PromotionDiscountPercent) e a lista de promoções usadas (IDStockKeepingUnitPromotion/StockKeepingUnitPromotionName) por item.

Regras de elegibilidade (por promoção × item)

Uma promoção é aplicada quando passa em todos os testes:

  1. Vigência — data/hora atual ∈ [DateFrom, DateTo].
  2. Restrição de marca — quando BrandsIncluded=1, a marca do SKU está na lista; quando BrandsIncluded=0, não está.
  3. Restrição de categoria — mesma lógica de CategoriesIncluded.
  4. Restrição de produto — mesma lógica de ProductsIncluded (compara IDProduct da variação).
  5. Restrição de SKU — mesma lógica de SkusIncluded.
  6. Tipo de pedido — quando StockKeepingUnitPromotionTypeOrders não vazio, IDOrderType precisa estar na lista.
  7. Política comercial — quando StockKeepingUnitPromotionSalesPolicies não vazio, IDCompanySalesPolicy do item precisa estar na lista.
  8. Acúmulo com preço manual — quando CumulativeManualPrice=0 e PriceListTotal ≠ PriceSellingTotal (preço foi alterado manualmente), descarta.
  9. Cliente cadastrado — quando OnlyRegisteredConsumer=1, IDConsumer precisa estar informado.
  10. Faixa de valor do pedido (Regular) — totalvalue ∈ [MinOrderValue, MaxOrderValue].

Cálculo do preço

  • Regular: aplica PercentualDiscountValue (multiplica PriceSellingTotal × (1 - %)) ou NominalDiscountValue × Quantity (com piso em 0).
  • Compre e Ganhe: se Quantity ≥ MinimumQuantityBuyTogether, cada item em SkusBuyTogether é adicionado/atualizado no carrinho com PriceSellingTotal=0 (brinde).
  • Desconto Progressivo (ExactlyQuantity=0): percorre as faixas (ordenadas desc por Quantity) e aplica a primeira em que progressive.Quantity ≤ Quantity ou ≤ GroupedQuantity (com AllowDifferentItemQuantitySum=1).
  • Desconto Progressivo (ExactlyQuantity=1): lógica greedy — para cada faixa (desc por Quantity), encaixa múltiplos exatos (floor(remaining / Quantity)), gera um objeto de carrinho por faixa aplicada, e o resíduo vira um objeto sem desconto.
  • Compre Junto: se Quantity ≥ MinimumQuantityBuyTogether da lista principal e existe item da lista complementar no carrinho, aplica PercentualDiscountValue no principal e PercentualDiscountValueBuyTogether no complementar.

Desempate entre promoções

Quando o mesmo item bate em várias promoções:

  1. Ordena por maior desconto (PreValueDiscountTotal).
  2. Mantém a primeira; mantém também subsequentes desde que mesmo tipo + Cumulative=1 (acumula promoções do mesmo tipo cumulativas) ou tipo diferente (deixa o resto da lógica decidir).

StoreFrontCashierOrderTemp

O endpoint também persiste o estado do carrinho em StoreFrontCashierOrderTemp (vinculado ao caixa aberto via IDStoreFrontCashier/IDBankAccount). Se você passar IDStoreFrontCashierOrderTemp, atualiza esse registro; senão insere um novo e devolve o IDStoreFrontCashierOrderTemp gerado no corpo da resposta. Isso é o que permite o PDV retomar o pedido em outro terminal.

Request

Responses

Carrinho com os preços e promoções recalculados.