Saltar para o conteúdo principal
No Fire, um COMBO é um produto cujo preço não é fixo no catálogo — ele depende das opções que o cliente selecionar nos grupos de modificadores obrigatórios. Ao receber um COMBO em um evento menu.updated, priceInfo.price será sempre 0. Isso é intencional. O Fire pré-calcula o preço mínimo alcançável e o armazena em priceInfo.referencePrice.

Identificar um COMBO no payload

Procure "type": "COMBO" dentro de data.menu.products:
{
  "productId": "combo_001",
  "name": "Box da Torcida",
  "type": "COMBO",
  "priceInfo": {
    "price": 0,
    "referencePrice": 9990
  },
  "productModifiers": [
    {
      "modifierId": "mod_box",
      "position": 1,
      "overrides": [
        {
          "productId": "prod_tiras_6",
          "priceInfo": {
            "price": 3800,
            "referencePrice": 3800
          }
        }
      ]
    }
  ]
}
Nunca exiba priceInfo.price para um COMBO — ele é sempre 0. Use priceInfo.referencePrice como preço de cabeçalho.

Overrides de modificadores

Um produto pode aparecer em vários combos e vários menus. Na lista global products[] ele possui um único preço base. Mas quando esse produto atua como opção de modificador dentro de um combo específico, seu preço naquele combo pode ser diferente — por exemplo, uma batata média que custa R8,00individualmentepodecustarR 8,00 individualmente pode custar R 6,40 quando incluída em um determinado combo. É para isso que serve productModifiers[n].overrides: ele permite que cada combo declare um preço diferente para qualquer uma de suas opções de modificador sem alterar o preço base do produto no catálogo.

Estrutura

Cada entrada em overrides aponta para uma opção de modificador pelo seu productId:
"productModifiers": [
  {
    "modifierId": "mod_batata",
    "position": 2,
    "overrides": [
      {
        "productId": "prod_batata_media",
        "priceInfo": {
          "price": 640,
          "referencePrice": 640
        }
      },
      {
        "productId": "prod_batata_grande",
        "priceInfo": {
          "price": 830,
          "referencePrice": 830
        }
      }
    ]
  }
]
Neste exemplo, prod_batata_media tem preço base de R8,00emproducts[],masooverridedefineR 8,00 em `products[]`, mas o override define R 6,40 para este combo. prod_batata_grande também é sobrescrito para R$ 8,30.

Resolvendo o preço efetivo

Ao processar uma opção de modificador, sempre verifique overrides primeiro:
preço_efetivo = override.priceInfo.price         // se existe um override para este productId
             ?? option_product.priceInfo.price    // caso contrário: preço próprio da opção em products[]
Use o preço efetivo — não o preço base do catálogo — em todos os cálculos: preço de referência, exibição do delta e total do carrinho.

Preço de referência

priceInfo.referencePrice é pré-calculado pelo Fire como o mínimo que o cliente pode pagar pelo combo:
para cada grupo de modificadores obrigatório (minOptions ≥ 1):
  baseline = menor preço efetivo entre as opções do grupo
  subtotal  = baseline × minOptions

preçoReferência = soma de todos os subtotais
Exiba este valor como o preço principal do combo ou como “a partir de R$ 99,90” nos cards de produto. Nunca use priceInfo.price para exibição.

Exemplo — Box da Torcida

Grupo de modificadoresminOptionsOpção mais barata (efetiva)Subtotal
Escolha seu box1R$ 31,00 — 12 CoxinhasR$ 31,00
Escolha sua batata2R$ 6,40 — Batata médiaR$ 12,80
Escolha seu molho2R$ 5,70 — qualquer molhoR$ 11,40
Escolha sua bebida3R$ 14,90 — 400 mlR$ 44,70
Total de referênciaR$ 99,90

Lógica de exibição para o cliente

Exiba os preços relativos à opção mais barata do grupo — não o preço absoluto do catálogo. Assim, o cliente vê quanto custa uma opção premium além da seleção base.
baseline = min preço_efetivo entre todas as opções do grupo
delta    = max(0, preço_efetivo − baseline)
deltaExibição
0”Incluído” ou sem rótulo — esta é a opção base
> 0+R$ X,XX
Aplique esta lógica apenas aos grupos obrigatórios (minOptions ≥ 1). Para grupos opcionais (minOptions = 0), exiba o preço cheio do add-on para cada opção.

Exemplo — Escolha seu box (obrigatório, escolha 1)

OpçãoPreço efetivoBaselineExibido
12 CoxinhasR$ 31,00R$ 31,00Incluído
8 TirasR$ 38,00R$ 31,00+R$ 7,00
6 TirasR$ 41,00R$ 31,00+R$ 10,00
O override para prod_tiras_6 (R$ 38,00) é usado no lugar do seu preço base no catálogo.

Exemplo — Escolha seu molho (obrigatório, todos com mesmo preço)

OpçãoPreço efetivoBaselineExibido
Mel mostardaR$ 5,70R$ 5,70Incluído
BBQR$ 5,70R$ 5,70Incluído
KetchupR$ 5,70R$ 5,70Incluído
Nenhum delta é exibido quando todas as opções têm o mesmo preço.

Total do carrinho

O total exibido no botão “Adicionar ao pedido” atualiza em tempo real conforme o cliente faz suas seleções:
total_carrinho = (preçoReferência + soma dos deltas selecionados) × quantidade
Antes de qualquer opção premium ser selecionada, exiba preçoReferência.