Pular para o conteúdo principal

Cria uma promoção

POST 

/sku/promotion

Cria uma promoção do tipo informado em IDTypeSkuPromotion. Os campos exigidos e ignorados variam por tipo — o body abaixo descreve o conjunto completo, mas o backend só usa o que faz sentido para o tipo escolhido e zera o resto.

Regras por tipo

Tipo 1 — Regular

Desconto em % ou R$ aplicado a todos os produtos ou apenas aos que casam com as restrições (StockKeepingUnitPromotionCategories, StockKeepingUnitPromotionBrands, StockKeepingUnitPromotionProducts, StockKeepingUnitPromotionSkus).

  • Use um entre PercentualDiscountValue (fração 0–1, ex.: 0.10 = 10%) ou NominalDiscountValue (R$).
  • MinOrderValue / MaxOrderValue (opcionais): só vale quando o total do pedido cai nesse intervalo.
  • Para cada restrição há um flag de inclusão/exclusão (BrandsIncluded, CategoriesIncluded, ProductsIncluded, SkusIncluded — default 1 = iguais a; 0 = diferentes de). Quando a lista correspondente é vazia, a restrição não filtra.

Tipo 2 — Compre e Ganhe

Cliente compra MinimumQuantityBuyTogether unidades dos itens em StockKeepingUnitPromotionSkus e ganha (grátis, valor zero) os itens listados em StockKeepingUnitPromotionSkusBuyTogether.

  • StockKeepingUnitPromotionSkus obrigatório (itens que devem ser comprados).
  • StockKeepingUnitPromotionSkusBuyTogether obrigatório (itens de brinde).
  • MinimumQuantityBuyTogether obrigatório e > 0.
  • Campos de desconto/range/restrição são ignorados.

Tipo 3 — Desconto Progressivo

Quanto mais unidades, maior o desconto. Cada faixa em StockKeepingUnitPromotionProgressive tem Quantity (a partir de quantas unidades vale) e DiscountPercent OU FixedPrice (preço unitário fixo).

  • Itens elegíveis: StockKeepingUnitPromotionSkus (SKUs) OU StockKeepingUnitPromotionProducts (produtos pai).
  • Quantity precisa ser único entre as faixas (não pode ter duas faixas com mesma quantidade).
  • Combine com ExactlyQuantity=1 (no cabeçalho) para aplicar a faixa apenas quando a quantidade for múltipla exata (4, 8, 12... para faixa de 4).

Tipo 4 — Compre Junto

Duas listas com descontos separados. Compre MinimumQuantityBuyTogether unidades da lista principal (StockKeepingUnitPromotionSkus) com desconto PercentualDiscountValue; ao adicionar itens da lista complementar (StockKeepingUnitPromotionSkusBuyTogether), eles recebem PercentualDiscountValueBuyTogether.

  • Todos os 4 campos são obrigatórios.
  • PercentualDiscountValue e PercentualDiscountValueBuyTogether em fração 0–1.

Flags do cabeçalho (todos os tipos)

  • Cumulative — quando 1, pode acumular com outras promoções de tipos diferentes no mesmo item (regra de prioridade depois do desempate por maior desconto).
  • CumulativeManualPrice — quando 1, aplica o desconto mesmo se o item já tem um preço manual (preço de venda diferente do preço de lista). Quando 0, a promoção é descartada se houver desconto manual.
  • AllowDifferentItemQuantitySum — quando 1, a MinimumQuantityBuyTogether (Compre e Ganhe / Compre Junto) ou a Quantity da faixa (Progressivo) considera a soma de quantidades de SKUs diferentes que entram na promoção. Quando 0, só conta o mesmo SKU.
  • ExactlyQuantity — quando 1 (Progressivo), aplica a faixa só quando a quantidade for múltiplo exato; quando 0, aplica assim que a quantidade atinge a faixa (com lógica greedy decrescente).
  • OnlyRegisteredConsumer — quando 1, a promoção só é aplicada se o pedido tem IDConsumer informado (cliente cadastrado).
  • DateFrom/DateTo — vigência. Para promoção "para sempre", envie DateFrom = "1900-01-01" e DateTo = "4000-01-01".

Vínculos opcionais

  • StockKeepingUnitPromotionTypeOrders — lista de tipos de pedido (TypeOrder.Status=1) em que a promoção vale. Vazio = vale para todos.
  • StockKeepingUnitPromotionSalesPolicies — lista de políticas comerciais aceitas. Vazio = vale para todas.

Side-effects

  • Cache Redis StockKeepingUnitPromotion:<IDCompany> é regravado com todas as promoções não excluídas/inativas da empresa, ordenadas por tipo → maior % → maior R$.
  • Cache Redis StockKeepingUnitPromotion:<IDCompany>:<id> é regravado com o detalhe (TTL 7 dias).
  • O nome (StockKeepingUnitPromotionName) é gravado sem acentos (normalização NFD).

A resposta é o detalhe completo da promoção criada (mesmo formato de GET /sku/promotion/{id}).

Request

Responses

Promoção criada. Retorna o detalhe (array com 1 item).