Improved

Preço por unidade de medida no carrinho (m², m, kg...)

Público: agências e times técnicos que mantêm o storefront de lojas Wake
Tipo de mudança: aditiva (não quebra integrações existentes)
Status: disponível em produção

1. O que mudou

O produto do carrinho no checkout agora expõe três campos GraphQL adicionais em checkout { products }:

  • multiplicationFactor: Decimal! — fator de conversão do produto, com até 2 casas decimais
  • quantityWithMultiplicationFactor: Decimal! — quantidade convertida para a unidade de exibição
  • unitPriceWithMultiplicationFactor: Decimal! — preço unitário convertido para a unidade de exibição

Eles permitem exibir no carrinho e no minicart a mesma unidade de medida usada no anúncio e na página de produto — por exemplo, "14,40 m² × R$ 34,72/m²" no lugar de "5 caixas × R$ 100,00".

Nada foi removido ou renomeado. quantity, ajustedPrice e totalAdjustedPrice continuam existindo, com o mesmo nome, tipo e valor de antes.

2. Para que serve

Produtos vendidos em embalagem fechada, mas anunciados por unidade de medida (m², metro linear, kg), exibiam no carrinho o preço da caixa enquanto o anúncio exibia o preço por unidade. O Google Merchant Center passou a validar o preço também durante a simulação da jornada de compra, e essa divergência gerava reprovação de anúncios. Os novos campos entregam ao tema os valores já convertidos, sem necessidade de cálculo ou manipulação de preço no JavaScript.

3. Como os valores são calculados

quantityWithMultiplicationFactor = quantity × multiplicationFactor
unitPriceWithMultiplicationFactor = ajustedPrice ÷ multiplicationFactor

Ambos são arredondados em 2 casas decimais.

Os campos são de exibição. Eles não alteram o valor cobrado: o total da linha, os totais do carrinho e o valor do pedido continuam baseados na unidade de venda.

Por conta do arredondamento, quantityWithMultiplicationFactor × unitPriceWithMultiplicationFactor pode divergir alguns centavos do total da linha. Para exibir o total, use sempre totalAdjustedPrice.

4. Comportamento quando não há fator cadastrado

O fator vem do cadastro do produto. Quando o produto não possui fator, multiplicationFactor retorna 0, quantityWithMultiplicationFactor é igual a quantity e unitPriceWithMultiplicationFactor é igual a ajustedPrice.

Valores iguais a zero ou negativos são tratados como "sem multiplicador". Integrações existentes não mudam de comportamento.

Fatores menores que 1 também são suportados: a quantidade convertida diminui e o preço unitário convertido aumenta.

5. Onde o campo está disponível

Os campos estão acessíveis em checkout { products }. Não estão disponíveis em checkout { orders { products } } nem nos produtos de kit.

6. Como consultar

query {
  checkout(checkoutId: "00000000-0000-0000-0000-000000000000") {
    products {
      productVariantId
      name
      quantity
      ajustedPrice
      totalAdjustedPrice
      multiplicationFactor
      quantityWithMultiplicationFactor
      unitPriceWithMultiplicationFactor
    }
  }
}

Resposta para uma caixa de piso que cobre 2,88 m², com 5 caixas a R$ 100,00:

{
  "data": {
    "checkout": {
      "products": [
        {
          "productVariantId": 354848,
          "name": "Piso Cerâmico 60x60",
          "quantity": 5,
          "ajustedPrice": 100.00,
          "totalAdjustedPrice": 500.00,
          "multiplicationFactor": 2.88,
          "quantityWithMultiplicationFactor": 14.40,
          "unitPriceWithMultiplicationFactor": 34.72
        }
      ]
    }
  }
}

7. O que a agência precisa fazer

  • Confirmar com o lojista que o fator de conversão está cadastrado nos produtos vendidos por unidade de medida
  • Incluir os três campos na query de checkout usada pelo tema
  • Ajustar a exibição do item no carrinho e no minicart — mostrando a unidade de medida isoladamente ou junto do valor da embalagem, conforme a decisão do lojista
  • Manter totalAdjustedPrice como fonte do total da linha
  • Remover eventuais cálculos ou manipulações de preço feitos por JavaScript no tema
  • Validar com um produto sem fator cadastrado, garantindo que a exibição atual se mantém

Documentação de referência: https://wakecommerce.readme.io/docs/query-checkout#products