> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fire.rest/llms.txt
> Use this file to discover all available pages before exploring further.

# Atribuição de menus

> Decida qual menu e qual lista de preços cada loja usa em cada canal, e envie o cardápio ao canal a partir de um só lugar.

Você tem o [menu](/pt/manuals/backoffice/menus) montado e a [lista de preços](/pt/manuals/backoffice/price-lists) pronta. Nada disso vende ainda: falta dizer **em que loja, em que canal e para que tipo de entrega** eles são usados. Essa decisão é esta tela, e é também onde se aperta o botão que envia o cardápio ao canal.

Vá em **Restaurant OS → Menu e Produtos → Atribuição de menus**.

<Frame>
  <img src="https://mintcdn.com/firepos/fMgbql6u0dMQH9DE/images/manuals/backoffice/menu-assignments/01-matriz.png?fit=max&auto=format&n=fMgbql6u0dMQH9DE&q=85&s=bc2763c05c08086f3749ae33a399c787" alt="Matriz de atribuição de menus por loja, canal e fulfillment" width="3200" height="2000" data-path="images/manuals/backoffice/menu-assignments/01-matriz.png" />
</Frame>

***

## O mínimo que você precisa saber

<Note>
  **1. A unidade é a linha: loja × canal × fulfillment.** Uma linha para cada combinação possível. A mesma loja aparece várias vezes, uma por canal e tipo de entrega que atende.

  **2. Uma linha precisa de menu *e* de lista de preços.** Com só um deles não dá para sincronizar: o botão fica desabilitado.

  **3. Atribuir não publica. Publicar é o Sync.** E o **Sync** envia o que existe **naquele momento**, não o que existia quando você atribuiu.
</Note>

***

## O caminho simples

Você abriu uma loja nova e ela precisa começar a vender:

1. Filtre por essa loja com o seletor **Store**.
2. Em cada linha que interessa, **Assign menu**.
3. Na mesma linha, **Assign list**.
4. Selecione as linhas e **Sync**.

O status vira **Pending**, e quando o canal confirma fica em **Synced**. É isso.

<Tip>
  Se a sua operação é uma loja e um canal, você já terminou. O resto do manual é para quando são quarenta lojas e todas têm que mudar no mesmo dia.
</Tip>

***

## A matriz: uma linha por combinação

Cada linha é um destino real de venda. Estas são as suas colunas:

| Coluna          | O que ela te diz                                                                 |
| --------------- | -------------------------------------------------------------------------------- |
| **Store**       | A loja, com o código dela embaixo.                                               |
| **Group**       | A que grupos de lojas pertence, em chips coloridos.                              |
| **Channel**     | Web, app, quiosque, agregador…                                                   |
| **Fulfillment** | Delivery, retirada, salão…                                                       |
| **Menu**        | Qual menu usa. Se não tiver, um botão **Assign menu**.                           |
| **Price list**  | Com qual lista é precificada. Se não tiver, **Assign list**.                     |
| **Sync**        | **No record** · **Pending** · **Synced** · **Failed**, mais os avisos, se houve. |
| **Generated**   | Quando o menu foi achatado pela última vez para este destino.                    |

No topo há sete filtros — loja, grupo, canal, fulfillment, menu, lista e status de sync — e uma busca que entra por nome de loja, de menu ou de canal. Com quarenta lojas e cinco canais a matriz tem duzentas linhas: os filtros não são enfeite.

<Info>
  **Para que servem os grupos de lojas.** Um grupo permite filtrar de uma vez todas as lojas de uma região, uma marca ou um formato, e atribuir a elas o mesmo menu numa única operação. Sem grupos, mudar o menu de delivery de uma região é marcar lojas na mão e errar em uma.
</Info>

***

## Atribuir em bloco

Marque várias linhas com as caixas de seleção e a barra de ações em massa aparece: **Assign menu**, **Assign list** e **Sync**, com a contagem do que está selecionado.

<Frame>
  <img src="https://mintcdn.com/firepos/fMgbql6u0dMQH9DE/images/manuals/backoffice/menu-assignments/03-masivo.png?fit=max&auto=format&n=fMgbql6u0dMQH9DE&q=85&s=b9029d9ece0b5d7b582d79e268835132" alt="Barra de ações em massa com linhas selecionadas" width="3200" height="2000" data-path="images/manuals/backoffice/menu-assignments/03-masivo.png" />
</Frame>

O diálogo sempre diz a quantas combinações a mudança vai se aplicar antes de você confirmar.

<Frame>
  <img src="https://mintcdn.com/firepos/fMgbql6u0dMQH9DE/images/manuals/backoffice/menu-assignments/02-asignar-menu.png?fit=max&auto=format&n=fMgbql6u0dMQH9DE&q=85&s=3fe37474a103416e63b96df4bcb75998" alt="Diálogo de atribuição de menu" width="880" height="472" data-path="images/manuals/backoffice/menu-assignments/02-asignar-menu.png" />
</Frame>

Também serve para o contrário: **Remove assignment** tira o menu ou a lista das linhas selecionadas. Uma linha sem menu deixa de poder ser sincronizada, mas conserva o último achatado que já tinha enviado.

Dá para mexer em até **200 combinações** de uma só vez.

***

## A regra do fulfillment

O diálogo de atribuir menu **não mostra todos os menus**. Só os que servem para o fulfillment daquela linha, mais os agnósticos — o Golden, que serve para todos.

É o mesmo critério que faz o fulfillment de um menu ser definitivo: um menu de delivery numa linha de salão não significa nada.

<Warning>
  **Se você selecionou linhas com fulfillments misturados, só vai ver o Golden.** A tela avisa: *"The selection mixes fulfillment types: only agnostic menus (Golden) can be assigned."*

  Não é um erro da tela: é que não existe menu custom que sirva para dois fulfillments. Se você queria atribuir o seu menu de delivery, filtre antes por **Fulfillment** e trabalhe um tipo por vez.
</Warning>

***

## Sincronizar: o que acontece de verdade

O **Sync** faz três coisas, nesta ordem:

1. **Achata o menu.** Pega a estrutura do menu, aplica os preços da lista atribuída e monta um cardápio plano, sem heranças nem fórmulas: a lista literal do que se vende e por quanto.
2. **Envia ao canal.** O status vira **Pending**.
3. **Espera a confirmação.** O canal responde depois, no tempo dele, e o status fica em **Synced** ou **Failed**.

<Frame>
  <img src="https://mintcdn.com/firepos/fMgbql6u0dMQH9DE/images/manuals/backoffice/menu-assignments/04-estados.png?fit=max&auto=format&n=fMgbql6u0dMQH9DE&q=85&s=fd0b977f5465b696291fa0255f20f619" alt="Os quatro estados de sincronização na coluna Sync" width="2736" height="2556" data-path="images/manuals/backoffice/menu-assignments/04-estados.png" />
</Frame>

| Status        | O que significa                            |
| ------------- | ------------------------------------------ |
| **No record** | Esta combinação nunca foi sincronizada.    |
| **Pending**   | Foi enviada e o canal ainda não respondeu. |
| **Synced**    | O canal recebeu e aceitou.                 |
| **Failed**    | O canal recusou.                           |

Enquanto houver linhas em **Pending**, a tela **se atualiza sozinha a cada quinze segundos**. Não precisa recarregar nem ficar olhando: pode sair e voltar.

O botão fica desabilitado — *"Assign a menu and a price list first"* — enquanto faltar o menu ou a lista na linha. É de propósito: sem lista, todos os preços sairiam em zero.

***

## O achatado é de agora, não de ontem

<Info>
  **Não há versões. O Sync envia o estado atual.** Ele pega o menu e a lista exatamente como estão salvos naquele segundo. Não existe "publicar a versão de segunda" nem voltar a um achatado anterior.

  Isso tem uma consequência prática que vale ter em mente: **se alguém deixou o menu pela metade, é isso que sai.** Antes de sincronizar em bloco, vale confirmar que o menu está como deveria.
</Info>

O contrário também é verdade, e é a parte confortável: não é preciso "republicar o menu" depois de mudar um preço. A próxima sincronização daquela linha já leva o preço novo, porque lê a lista na hora.

***

## Sincronizou, mas algo ficou de fora

Uma linha pode terminar em **Synced** e ainda assim ter deixado coisas pelo caminho. Quando isso acontece, aparece um chip de avisos na coluna **Sync**.

| Aviso                                      | O que aconteceu                                                                                   |
| ------------------------------------------ | ------------------------------------------------------------------------------------------------- |
| **Produto sem preço na lista atribuída**   | O produto **não foi enviado**. Se tivesse sido, sairia publicado em **0**.                        |
| **Sugestões fora deste menu**              | O produto sugere um upselling ou cross-selling que não está neste cardápio. A sugestão não viaja. |
| **Grupos de modificadores não resolvidos** | Um grupo de modificadores não pôde ser montado e ficou fora do menu.                              |

<Warning>
  **O primeiro é o que leva vendas em silêncio.** O sync diz **Synced**, o menu chegou ao canal, e aquele produto simplesmente não está no cardápio que o cliente vê. Ninguém recebe um erro: é preciso abrir os avisos para ficar sabendo.

  Resolve-se colocando preço no produto na lista atribuída àquela linha e sincronizando de novo.
</Warning>

***

## Os lotes: 50 por vez, um de cada vez

Dá para selecionar quantas linhas você quiser, mas **cada envio processa no máximo 50**. Se você selecionou 120, as primeiras 50 são enviadas e a tela avisa: *"Syncing the first 50 rows; 70 left for the next round"*.

Além disso, **o canal processa um lote por vendor de cada vez**. Se há um envio em andamento, o seguinte espera.

Não é uma limitação caprichosa: achatar um menu é caro, e mandar duzentos cardápios de uma vez termina em timeouts e sincronizações pela metade, o que é pior do que ir por lotes.

<Tip>
  Se você vai sincronizar muitas linhas, faça em lotes organizados — por região, por canal — em vez de selecionar tudo. Quando algo falhar, você vai saber exatamente qual grupo revisar.
</Tip>

As linhas selecionadas às quais falta menu ou lista **são puladas sozinhas**, e a tela diz quantas foram.

***

## Ver exatamente o que foi enviado

O botão do olho, **View sync preview**, abre o último achatado daquela linha. É a única forma de responder com certeza *"o que o canal recebeu?"*.

<Frame>
  <img src="https://mintcdn.com/firepos/fMgbql6u0dMQH9DE/images/manuals/backoffice/menu-assignments/06-preview.png?fit=max&auto=format&n=fMgbql6u0dMQH9DE&q=85&s=eb31bb8f239a567c98741bc6293af202" alt="Pré-visualização do achatado enviado ao canal" width="3200" height="2000" data-path="images/manuals/backoffice/menu-assignments/06-preview.png" />
</Frame>

Tem três abas:

* **Menu** — o cardápio como ficou: categorias, produtos, preços e modificadores.
* **Snapshot JSON** — o mesmo cardápio, cru.
* **Sync payload JSON** — exatamente o que foi enviado ao canal.

No topo se lê quando foi gerado. Se a linha nunca foi sincronizada, o botão fica desabilitado: *"No snapshot generated yet"*.

Para uma discussão com um canal — *"isso não me chegou"* — as duas últimas abas são a prova.

***

## Mudar o preço de um único destino

Existe uma tela à parte, **Preços e disponibilidade**, para ajustar preços e visibilidade de **um destino pontual** sem abrir o menu nem a lista inteira. Ela trabalha sobre as linhas que já têm menu e lista atribuídos aqui.

Vale conhecer a regra dela, porque não é óbvia:

* O **preço** que você muda ali vive na **lista**, e essa lista pode estar compartilhada por vários destinos.
* A **visibilidade** vive no **menu**, que também pode estar em uso em vários destinos.
* Mas ao salvar **sincroniza só aquela linha**. Os demais destinos pegam a mudança no próximo Sync deles.

Ou seja: a mudança já está salva para todos, mas só um publicou. A própria tela avisa isso num quadro antes de salvar.

***

## Receitas: como os casos reais se resolvem

<AccordionGroup>
  <Accordion title="Colocar uma loja nova para vender">
    1. Filtre pela loja com o seletor **Store**. Vão aparecer as linhas dela, uma por canal e fulfillment.
    2. Selecione todas as que essa loja vai atender.
    3. **Assign list** com a lista que corresponde a ela.
    4. **Assign menu** — lembre de filtrar por **Fulfillment** e fazer um tipo por vez, ou só vai conseguir atribuir o Golden.
    5. Selecione tudo de novo e **Sync**.
    6. Espere os status irem de **Pending** a **Synced**, e veja se alguma linha trouxe avisos.
  </Accordion>

  <Accordion title="Mudar o menu de delivery em toda uma região">
    1. Filtre por **Group** com o grupo daquela região e por **Fulfillment** em delivery.
    2. Selecione todas as linhas.
    3. **Assign menu** com o menu novo. O diálogo confirma a quantas combinações se aplica.
    4. **Sync**. Se forem mais de 50, vá por lotes: a tela diz quantas ficaram.

    A lista de preços não é tocada: mudar o menu não muda quanto as coisas custam.
  </Accordion>

  <Accordion title="Parar de vender num canal">
    1. Filtre por esse **Channel**.
    2. Selecione as linhas.
    3. **Assign menu → Remove assignment**.

    As linhas ficam sem menu e não podem mais ser sincronizadas. Atenção: **isso não apaga do canal o que já foi enviado** — isso se desliga no canal. O que você consegue é que nenhuma mudança futura chegue lá.
  </Accordion>

  <Accordion title="Você subiu preços e quer que cheguem ao canal">
    Depois de salvar o aumento na [lista de preços](/pt/manuals/backoffice/price-lists):

    1. Filtre por **Price list** com a lista que você mexeu. Aparecem todas as linhas que a usam.
    2. Selecione todas.
    3. **Sync**, em lotes de 50.

    Não é preciso abrir nenhum menu: o achatamento lê a lista na hora e leva os preços novos.
  </Accordion>

  <Accordion title="Um produto não aparece no app e ninguém sabe por quê">
    Percorra nesta ordem, que vai do mais comum ao mais raro:

    1. **A linha está em Synced?** Se está em **Failed**, a viagem terminou ali.
    2. **Há avisos?** Se o produto não tem preço na lista atribuída, ele não foi enviado — é a causa mais frequente.
    3. **Abra View sync preview → aba Menu.** Se o produto não está ali, ele não saiu do Fire.
    4. **Abra o [menu](/pt/manuals/backoffice/menus) atribuído.** Veja se ele está retirado (**Removed**) ou oculto (**Hidden**).
    5. **Confira [Esgotados](/pt/manuals/backoffice/out-of-stock).** Ele pode estar desligado pela operação do dia.

    Se ele aparece na pré-visualização e ainda assim não é visto no app, o problema já não está no Fire.
  </Accordion>
</AccordionGroup>

***

## Uma mudança de preço, seguida de ponta a ponta

Você subiu um produto de **10,90** para **11,99** na lista *Delivery*. Isto é o que acontece em cada elo:

| Onde                | O que acontece                                                                             | Precisa fazer algo?  |
| ------------------- | ------------------------------------------------------------------------------------------ | -------------------- |
| **Lista de preços** | Você salva 11,99                                                                           | Pronto               |
| **Menu**            | Não fica sabendo, e nem precisa: o menu não guarda preços                                  | Nada                 |
| **Atribuição**      | As linhas que usam essa lista continuam mostrando **Synced**, com o preço antigo publicado | **Sim: sincronizar** |
| **Sync**            | Achata o menu com a lista *como ela está agora* → 11,99                                    | —                    |
| **Canal**           | Confirma, a linha fica **Synced** e o cliente vê 11,99                                     | —                    |

A linha para olhar é a terceira: **o status Synced não significa que o publicado está em dia**, significa que a última sincronização deu certo. Se você mudou preços depois daquele envio, o canal segue com os anteriores até a próxima.

***

## Erros que saem caro

<Warning>
  **Mudar o menu ou a lista e não sincronizar.** A atribuição fica salva e o canal continua vendendo com o anterior. **Synced** se refere ao último envio, não ao que há hoje no menu.
</Warning>

<Warning>
  **Ignorar o chip de avisos.** O sync dá certo e mesmo assim há produtos que não chegaram ao canal. O mais caro é o que não tem preço na lista atribuída: ele cai do envio sem ninguém receber um erro.
</Warning>

<Warning>
  **Sincronizar 200 linhas e supor que todas foram.** Vão 50 por vez. A tela avisa quantas ficaram, mas o aviso some: se você não olhar de novo, metade das lojas fica com o menu antigo.
</Warning>

<Warning>
  **Sincronizar com o menu pela metade.** O Sync envia o que está salvo naquele momento, sem versões. Um menu que alguém deixou pela metade é publicado pela metade.
</Warning>

<Warning>
  **Tirar a atribuição achando que isso baixa o menu do canal.** Tirá-la impede que mudanças novas cheguem, mas o último envio segue publicado do lado do canal.
</Warning>

***

## Glossário

| Termo                                    | O que significa                                                                           |
| ---------------------------------------- | ----------------------------------------------------------------------------------------- |
| **Linha** *(loja × canal × fulfillment)* | A combinação que é a unidade de tudo o que acontece aqui.                                 |
| **Atribuir**                             | Dizer qual menu e qual lista uma linha usa. Não publica nada.                             |
| **Sync**                                 | Achatar o menu com a sua lista e enviá-lo ao canal. Este sim publica.                     |
| **Achatado** *(snapshot)*                | O cardápio plano que sai do cruzamento entre o menu e a lista, sem heranças nem fórmulas. |
| **Sync payload**                         | O que efetivamente foi enviado ao canal. Aparece na pré-visualização.                     |
| **Aviso**                                | Algo que ficou fora do envio sem fazê-lo falhar.                                          |
| **Grupo de lojas**                       | Uma etiqueta que agrupa lojas para poder filtrá-las e atribuir em bloco.                  |
| **Pending**                              | Foi enviado e o canal ainda não confirmou.                                                |

***

## Perguntas frequentes

<AccordionGroup>
  <Accordion title="Atribuí o menu mas no app não mudou nada">
    Falta sincronizar. Atribuir só registra qual menu aquela linha usa; o canal fica sabendo quando alguém aperta **Sync**.
  </Accordion>

  <Accordion title="O botão de Sync está cinza">
    Falta o menu ou a lista de preços na linha. Os dois são necessários: sem lista, todos os preços seriam publicados em zero. O tooltip diz: *"Assign a menu and a price list first"*.
  </Accordion>

  <Accordion title="Só aparece o menu Golden para eu atribuir">
    Você selecionou linhas com fulfillments misturados. Um menu custom serve para um único tipo de entrega, então numa seleção mista o Golden é o único atribuível. Filtre por **Fulfillment** e faça um tipo por vez.
  </Accordion>

  <Accordion title="A linha ficou em Failed">
    O canal recusou o envio. Verifique se o menu tem produtos e se a lista tem preços, e sincronize aquela linha sozinha para ver se o erro se repete. No menu você também verá o banner *"Sync failed — menu snapshot is outdated"*.
  </Accordion>

  <Accordion title="Posso republicar a versão da semana passada?">
    Não. Não há versionamento: cada Sync achata o menu e a lista exatamente como estão naquele momento. Para voltar atrás, é preciso desfazer a mudança no menu ou na lista e sincronizar de novo.
  </Accordion>
</AccordionGroup>

***

## O que vem por aí

* **Versionamento dos achatados**, para poder republicar um estado anterior sem desfazer mudanças na mão.
* **Status dos canais agregadores**: hoje os agregadores recebem seus eventos, mas o resultado não se reflete no status de sincronização que você vê aqui.
* **Lotes maiores**: o teto de 50 por envio é uma defesa contra timeouts, não um objetivo.
