Embalagem Loja
Integração Básica do RUB — entidade obrigatória, de contexto Loja. Na API pública é representada pelo objeto
prices[](schemaStorePrice) dentro deProductStore(JSON 1:1) e pelo schemaProductStorePricena importação massiva (CSV) em/product-store/v1/price.
O que é uma Embalagem Loja
A Embalagem Loja é o preço de venda de cada Embalagem de um produto em cada loja: a unidade de refrigerante a R$ 4,99 na loja 30001; o pack com 6 a R$ 27,90 na mesma loja; a unidade a R$ 5,29 na loja 30002. Ela é o encontro de três coisas: um Produto (Loja), uma Embalagem e um preço.
O preço é uma das informações mais sensíveis da operação de loja, e é em torno dele que o RUB executa a auditoria de etiquetas:
- O RUB conhece o preço vigente de cada Embalagem em cada loja (via Embalagem Loja).
- O colaborador percorre a gôndola lendo etiquetas; o dispositivo compara o preço exposto com o preço vigente.
- Se houver divergência (etiqueta com preço antigo, etiqueta ausente, preço de promoção encerrada), o RUB gera uma tarefa de troca de etiqueta.
- Quando o ERP envia um novo preço, o RUB identifica automaticamente que a etiqueta na gôndola está desatualizada e gera a tarefa antes que o cliente perceba a diferença no caixa.
A Embalagem Loja também alimenta a consulta de preço nos dispositivos (leitura do código de barras mostra o preço da Embalagem correspondente) e a impressão de etiquetas.
Preço unitário × preço da Embalagem
Cada Embalagem Loja carrega dois valores:
PRECO_EMBALAGEM— o valor total pago pela Embalagem (o pack com 6 custa R$ 27,90).PRECO_UNITARIO— o valor por unidade dentro dessa Embalagem (R$ 27,90 / 6 = R$ 4,65).
Isso permite exibir na etiqueta "Pack c/ 6 — R$ 27,90 (R$ 4,65/un)" e comparar o preço unitário entre Embalagens — por exemplo, para destacar que o pack é mais barato por unidade do que a lata avulsa.
graph LR
PROD["Produto @ Loja 30001<br/>8801 CERVEJA LATA"]
PROD --> EL1["Embalagem Loja QTD = 1<br/>unit 4,99 / emb 4,99"]
PROD --> EL12["Embalagem Loja QTD = 12<br/>unit 4,65 / emb 55,80"]
PROD --> EL24["Embalagem Loja QTD = 24<br/>unit 4,49 / emb 107,76"]
Modelo de dados
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
ID_LOJA | INTEIRO | Sim | Código de identificação da Loja. |
PRODUTO | TEXTO(32) | Sim | Código do Produto ao qual a Embalagem pertence. |
QTD | DECIMAL | Sim | Quantidade total da Embalagem (aceita fração) — deve corresponder a uma Embalagem existente. |
PRECO_UNITARIO | NUMERICO(14,6) | Sim | Preço de uma unidade nesta Embalagem. |
PRECO_EMBALAGEM | NUMERICO(14,6) | Sim | Preço total da Embalagem. |
ATIVO | INTEIRO | Não | Indica se a Embalagem está ativa na Loja (0-Não / 1-Sim). |
Chave e identidade
A chave é composta: ID_LOJA + PRODUTO + QTD. Reenviar a chave atualiza os preços — é
exatamente assim que uma alteração de preço é integrada.
Relacionamentos
- Uma Embalagem Loja pertence a um Produto (Loja) e a uma Embalagem.
- Um Produto (Loja) possui uma ou mais Embalagens Loja (ao menos a unitária).
- Depende do Produto (Loja) e da Embalagem já existirem.
Equivalência na API
| Conceito | JSON 1:1 (ProductStore.prices[]) | CSV massivo (ProductStorePrice) | Tipo | Obrigatório |
|---|---|---|---|---|
ID_LOJA | (implícito — store do produto-loja) | store | integer | Sim |
PRODUTO | (implícito — product do produto-loja) | product | string | Sim |
QTD | quantity | quantity | number | Sim |
PRECO_UNITARIO | unit_price | unit_price | number | Não |
PRECO_EMBALAGEM | package_price | package_price | number | Não |
ATIVO | active | active | boolean | Não |
| — | store_codes[] | /product-store/v1/barcode-store | object[] | Não |
| — | properties | colunas extras | object | Não |
Exemplos de uso
Cenário 1 — Preços de um produto na loja (JSON 1:1)
Ao ativar a cerveja 8801 na loja 30001, o ERP envia os preços das três Embalagens junto com o vínculo:
POST /empresa/api/rest/product-store/v1
{
"store": 30001,
"product": "8801",
"active": true,
"cost": 3.10,
"prices": [
{ "quantity": 1, "unit_price": 4.99, "package_price": 4.99, "active": true },
{ "quantity": 12, "unit_price": 4.65, "package_price": 55.80, "active": true },
{ "quantity": 24, "unit_price": 4.49, "package_price": 107.76, "active": true }
]
}
Cenário 2 — Alteração de preço em regime (JSON 1:1)
A lata subiu para R$ 5,29 na loja 30001. O ERP reenvia apenas a Embalagem afetada, pela rota com identificadores no path:
POST /empresa/api/rest/product-store/v1/30001/8801
{
"prices": [
{ "quantity": 1, "unit_price": 5.29, "package_price": 5.29, "active": true }
]
}
Imediatamente o RUB passa a considerar a etiqueta "R$ 4,99" da gôndola como desatualizada e gera a tarefa de troca para a equipe da loja.
Cenário 3 — Carga massiva de preços (CSV)
Na carga inicial, ou na virada de preços semanal, todos os preços da rede são enviados em um arquivo plano, uma linha por loja × produto × quantidade:
POST /empresa/api/rest/product-store/v1/price
Content-Type: text/csv
"store";"product";"quantity";"unit_price";"package_price";"active"
"30001";"8801";"1";"5.29";"5.29";"true"
"30001";"8801";"12";"4.65";"55.80";"true"
"30001";"8801";"24";"4.49";"107.76";"true"
"30002";"8801";"1";"5.49";"5.49";"true"
"30001";"4482";"1";"24.99";"24.99";"true"
"30001";"4482";"6";"23.99";"143.94";"true"
"30001";"7301";"1000";"0.0499";"49.90";"true"
A resposta BulkResponse (id, total, accepted, errors[]) aponta linhas rejeitadas — por
exemplo, quantity sem Embalagem correspondente no produto.
Cenário 4 — Produto de peso variável
Para a mussarela (produto 7301, unidade = grama), o preço por quilo é expresso na Embalagem de
1000 g: unit_price é o preço da grama e package_price é o preço do quilo:
POST /empresa/api/rest/product-store/v1/30001/7301
{
"prices": [ { "quantity": 1000, "unit_price": 0.0499, "package_price": 49.90, "active": true } ]
}
Cenário 5 — Encerrando a venda de uma Embalagem
A loja 30002 deixa de vender a caixa com 24. A Embalagem Loja é inativada, sem remover a Embalagem do produto (que continua válida para recebimento):
POST /empresa/api/rest/product-store/v1/30002/8801
{
"prices": [ { "quantity": 24, "active": false } ]
}
Boas práticas
- Envie o preço assim que ele mudar no ERP — a auditoria de etiquetas só é útil se o RUB souber o preço vigente antes do cliente.
- Garanta que
quantitycorresponda a uma Embalagem já cadastrada para o produto; caso contrário a linha é rejeitada. - Informe
unit_priceepackage_pricede forma consistente (package_price = unit_price × quantity); o RUB usa ambos na etiqueta. - Use
active: falsepara encerrar a venda de uma Embalagem em uma loja, preservando o histórico. - Prefira CSV para viradas de preço em massa (milhares de linhas) e JSON 1:1 para ajustes pontuais durante o dia.
Referência na API
O contrato técnico completo dos endpoints de Preços por Loja (propriedades prices[] no schema ProductStore no envio JSON 1:1, endpoint dedicado /product-store/v1/price para carga massiva CSV e exemplos de requisição/resposta) encontra-se documentado no Swagger oficial:
- Swagger da API: https://api.docs.rub.gicbrasil.com (tag Produtos por Loja)
- Diretrizes da API REST: consulte a Referência da API REST para regras de tenancy, autenticação e fluxo de processamento de lotes.