> ## 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.

# Políticas de menú

> Exige que cada producto lleve sus códigos, para que las órdenes dejen de llegar a X-MART con líneas que nadie puede identificar.

Un producto viaja a X-MART con su **External ID**, y ese es el código con el que sus órdenes vuelven identificadas. Un producto que no lo tiene se vende igual — y sus órdenes llegan sin ese código, así que nadie, aguas abajo, puede asociar la línea a nada. Se descubre semanas después, cuando alguien concilia y los números no cuadran.

Esta pantalla existe para que la cuenta pueda decir **"ningún producto de este tipo sale sin su código"**, y para que Fire lo haga cumplir en los momentos en que puede. Ve a **Restaurant OS → Settings → Menu policies**.

![Pantalla Menu policies con la matriz Required codes: tipos de producto por External ID y Code](https://mintcdn.com/firepos/ehR-GmCF-ETSjLOC/images/manuals/backoffice/menu-policies/01-configuracion.png?fit=max\&auto=format\&n=ehR-GmCF-ETSjLOC\&q=85\&s=478b7a88f57a660000470f0167cfda95)

***

## Lo mínimo que hay que saber

> [!NOTE]
>
> **1. Viene apagada.** Mientras nadie la configure, nada cambia: ningún producto está obligado a tener un código y ninguno se marca.
>
> **2. Es una matriz, y es por vendor.** Las filas son los tipos de producto —**Product**, **Combo**, **Modifier**, **Packaging**— y las columnas son los dos códigos, **External ID** y **Code**. Cada casilla es un interruptor: encendido, el código es obligatorio para ese tipo; apagado, no lo es.
>
> **3. Bloquea lo nuevo y marca lo que ya existe.** Crear un producto o guardar su ficha sin un código obligatorio se rechaza. Los productos que ya no tenían el código **no** se bloquean: siguen vendiéndose y publicándose, y reciben un chip **Missing code** para que los corrijas.

***

## La pantalla

Arriba, junto al título, la insignia **Vendor** te dice qué vendor estás configurando — aquí, *Sandbox Brasil*. Es el vendor elegido en el selector de la parte superior del backoffice, y la política pertenece solo a ese vendor. La descripción dice *"Qué códigos deben tener los productos de este vendor para poder guardarlos."* A la derecha, **Help** abre un panel lateral que explica la pantalla, y **See products that do not comply** abre el listado de productos ya filtrado. Ese botón solo aparece cuando la política que **guardaste** exige algún código.

La tarjeta **Required codes** contiene la matriz. Su nota dice: *"La regla se aplica según el tipo del producto. Una opción de una pregunta creada como Producto sigue la fila Producto."*

| Columna | Qué es |
| - | - |
| **External ID** — *Llega en las órdenes* | El código con el que el producto viaja a X-MART y con el que las órdenes vuelven identificadas |
| **Code** — *Se imprime en el ticket* | El código operativo del punto de venta (PLU). Es el que se imprime |

Cambias los interruptores y luego confirmas con **Save changes**. **Discard** descarta lo que cambiaste. Al guardar, Fire confirma con un mensaje genérico; si no puede, muestra el mensaje del servidor tal como llega, en inglés.

> [!NOTE]
>
> Para ver **Menu policies** tu rol necesita acceso a la pantalla — si tu rol está configurado con submenús explícitos, un administrador tiene que concedérselo. Sin acceso, el ítem no aparece en el menú y, si abres la dirección, te lleva a *acceso denegado*. Para **guardar** no basta el acceso: también necesitas permiso sobre **todo el vendor**. Quien está limitado a una tienda puede ver la política, pero no cambiarla.

> [!WARNING]
>
> **Cambiar la política no cambia nada en los productos.** No completa códigos ni saca ningún producto de la venta. Solo cambia lo que Fire bloquea de ahora en adelante y qué productos muestran **Missing code**.

***

## El camino simple

Casi todas las cuentas necesitan una sola columna: **External ID**, para los tipos que venden.

1. Abre **Restaurant OS → Settings → Menu policies** y revisa la insignia **Vendor**.
2. En la columna **External ID**, enciende **Product**. Haz lo mismo con **Combo** y **Modifier** si también viajan en las órdenes.
3. Toca **Save changes**.
4. Toca **See products that do not comply** y recorre el listado.

> [!TIP]
>
> Si tu único objetivo es que ningún producto llegue a X-MART sin su identificador, con esto ya terminaste. **Code** es otro tema — mira abajo.

***

## Los dos códigos no son lo mismo

| | **External ID** | **Code** |
| - | - | - |
| Para qué sirve | Es el código con el que el producto **viaja a X-MART**, y con el que las órdenes vuelven identificadas | El código operativo del punto de venta (PLU). **Es el que imprime el ticket** |
| Qué pasa si falta | Las órdenes llegan sin ese código | El ticket imprime en su lugar el External ID, si el producto lo tiene |
| Dónde lo escribes | Pestaña **General** del producto | Pestaña **General** del producto. En el diálogo **Add option** de un grupo de modificadores se llama **PLU** |

> [!WARNING]
>
> **En la planilla, la columna código es el External ID, y la columna plu es el Code.** En la ficha del producto los nombres son **External ID** y **Code**. Es una confusión real: mira [Importar y exportar](https://docs.fire.rest/es/manuals/backoffice/data-transfers.md).

***

## Qué hace la política y qué no

### Qué campo lleva el asterisco

Sin política, **External ID** y **Code** no llevan asterisco. Con una, un campo lleva asterisco solo si el vendor exige ese código **para ese tipo de producto**. En la captura de la [ficha del producto](https://docs.fire.rest/es/manuals/backoffice/products.md#los-códigos-y-la-política-de-menú), un *Product* muestra los dos asteriscos porque, en ese entorno, la política exige ambos códigos para **Product**. Con un **Fulfillment type** seleccionado en la ficha, los códigos se heredan y están bloqueados, así que no muestran asterisco.

### Qué bloquea

Fire rechaza en estos casos, y solo cuando el tipo del producto exige un código que no tiene:

| Cuándo | Qué pasa |
| - | - |
| **Crear un producto** | El producto no se crea hasta que lleve los códigos que su tipo exige. |
| **Crear una opción** desde **Add option** en un grupo de modificadores | Lo mismo: la opción es un producto nuevo, nace como **Product** y sigue la fila **Product**. |
| **Guardar la pestaña General** | El guardado se rechaza. El error aparece en el campo vacío. |
| **Guardar la ficha con un cambio de tipo pendiente** | La exigencia del tipo **nuevo** se revisa en el siguiente guardado, **en cualquier pestaña**: incluso Pricing o Categories pueden rechazarse hasta que completes el código. |

Un código hecho solo de espacios cuenta como vacío. Fuera de eso, las pestañas —precios, categorías, imágenes, grupos de modificadores, sugerencias y disponibilidad— guardan normalmente, tenga o no el producto su código. Precios, categorías y menús no esperan al código.

Tocar las pastillas **Modifier / Product / Combo** de la ficha no dispara nada: solo cambia la pantalla y marca la ficha como **Unsaved**. Los asteriscos pasan enseguida a los del tipo nuevo, pero la revisión ocurre al guardar. **Packaging** no tiene pastillas (su tipo no se puede cambiar), pero su fila aplica al crear y al guardar **General**.

**Cómo lo ves:**

* **Guardar General** marca el campo vacío en rojo con *Obligatorio según la política de menú del vendor*, y además aparece un mensaje con la misma razón.

![Pestaña General con el campo Code en rojo y el texto Required by the vendor menu policy debajo](https://mintcdn.com/firepos/vPicrHYYrfN_FcFY/images/manuals/backoffice/products/politica-general-error.png?fit=max\&auto=format\&n=vPicrHYYrfN_FcFY\&q=85\&s=8c04b12f73891a2b0050b9e00de4b282)

* **Crear un producto** marca cada campo faltante de la misma manera.
* **Add option** marca los campos dentro del diálogo — sin mensaje fuera de él — y te mantiene en la pestaña **General** del diálogo.
* **Guardar otra pestaña** con un cambio de tipo pendiente muestra el mensaje *"La política de menú del vendor exige {fields} para {type}."*, con la pista *"Complételo en la pestaña General."* y un botón **Go to General**.

### Qué solo marca

Los productos que **ya existían** sin el código no se bloquean. Siguen vendiéndose y publicándose, y la sincronización de menús no mira la política. Se marcan en dos lugares:

* **En el listado de productos**, un chip **Missing code** junto al nombre. Pasa el cursor encima y el tooltip dice qué falta: *Falta: Código*, *Falta: ID externo* o *Falta: ID externo y Código*. El listado también tiene un filtro, **Any code status**, con una sola opción, **Missing code**. Solo aparece cuando la política exige algo, y **Clear filters** aparece mientras haya algún filtro activo.
* **En la ficha del producto**, un aviso encima de las pestañas, visible en **todas** ellas: *"Este producto no tiene {fields}. La política del vendor lo exige para {type}; las órdenes que lo incluyan llegan sin ese código."* Se basa en los datos **guardados**: se mantiene mientras escribes y desaparece al guardar. No aparece al crear. Con un cambio de tipo pendiente, ya usa el tipo nuevo.

![Listado de productos filtrado por Missing code, con el chip junto a cada nombre](https://mintcdn.com/firepos/vPicrHYYrfN_FcFY/images/manuals/backoffice/products/politica-listado.png?fit=max\&auto=format\&n=vPicrHYYrfN_FcFY\&q=85\&s=098fe256a925e12bd28ba0ff19a7afab)

![Ficha del producto con el aviso de que el producto no tiene Code, encima de las pestañas](https://mintcdn.com/firepos/vPicrHYYrfN_FcFY/images/manuals/backoffice/products/politica-aviso-ficha.png?fit=max\&auto=format\&n=vPicrHYYrfN_FcFY\&q=85\&s=6db7877661419abd925d4fa3ac1b7c7c)

> [!NOTE]
>
> **Por qué no bloquea a los antiguos.** Encender la política no puede sacar productos de la venta: un restaurante en plena operación perdería platos. Dejarlo así tiene un costo real, sin embargo — las órdenes de esos productos siguen llegando sin código hasta que alguien los corrija. El chip y el aviso son lo que mantiene eso a la vista.

### Qué no cubre

* **Los grupos de modificadores.** Un grupo se crea sin código y está bien: no tiene fila en la matriz. La política cubre las **opciones** (que son productos), no el grupo.
* **Asignar un producto que ya existe como opción.** Con **Search and assign product** no se valida nada, así que un producto que no cumple se asigna sin ningún aviso. La regla aplica cuando se escribe un producto, no cuando se asigna.
* **Restaurar un respaldo.** No omite nada: mira [Importar y exportar](https://docs.fire.rest/es/manuals/backoffice/data-transfers.md).

***

## Recetas: cómo se resuelven los casos reales

> [accordion] Las órdenes están llegando a X-MART con líneas sin código
>
> 1. Abre **Menu policies** y enciende **External ID** para **Product** (y para **Combo** o **Modifier** si también aparecen en las órdenes).
> 2. Toca **Save changes**.
> 3. Toca **See products that do not comply**.
> 4. Abre cada producto y completa el **External ID** en **General**.
> 5. Guarda y sincroniza los menús que los contienen desde [Asignación de menús](https://docs.fire.rest/es/manuals/backoffice/menu-assignments.md).
>
> Mientras no corrijas un producto, sus órdenes siguen llegando sin código.

> [accordion] No puedo crear ni guardar un producto: 'Required by the vendor menu policy'
>
> Tu cuenta exige un código para ese tipo y el campo está vacío. Completa el campo marcado en rojo y guarda de nuevo. Si escribiste solo espacios, cuenta como vacío.

> [accordion] No puedo guardar Pricing, Categories u otra pestaña
>
> Revisa si tocaste las pastillas **Modifier / Product / Combo** sin guardar. La ficha sigue con ese cambio de tipo y la política del tipo nuevo se revisa en cada guardado. Completa el código en **General** — el botón **Go to General** te lleva ahí — o deshaz el cambio de tipo.

> [accordion] Un producto muestra Missing code pero se vende bien
>
> Es lo esperado. La política no bloquea los productos que ya existían. El chip te dice que sus órdenes llegan sin ese código: complétalo y el chip desaparece.

> [accordion] Necesito el PLU en todos los tickets
>
> Enciende **Code** para los tipos que imprimen. **Code** es lo que imprime el ticket, así que exígelo únicamente donde un ticket lo necesite.

> [accordion] Encontrar todos los productos que tengo que corregir
>
> En el listado de productos, abre el filtro **Any code status** y elige **Missing code**. O toca **See products that do not comply** desde **Menu policies**: abre el listado ya filtrado.

***

## Casos, de punta a punta

Con **External ID** encendido para **Product** y **Code** apagado:

| Qué haces | Resultado |
| - | - |
| Crear un **Product** sin External ID | Rechazado: *Obligatorio según la política de menú del vendor* |
| Crear un **Product** con External ID y sin Code | Creado |
| Editar el precio de un producto existente que no tiene External ID | Guardado: la pestaña **Pricing** no se valida. El producto sigue mostrando **Missing code** |
| Guardar la pestaña **General** de ese mismo producto sin tocar el External ID | Rechazado: la política aplica a esta pestaña |
| Tocar la pastilla **Product** en un **Modifier** sin External ID y luego guardar cualquier pestaña | Rechazado en ese guardado, porque el tipo nuevo lo exige |
| Crear un **Combo** sin External ID | Creado: **External ID** no está encendido para **Combo** |

***

## Errores que salen caros

> [!WARNING]
>
> **Dar por hecho que un producto sin su código dejó de venderse.** Sigue vendiéndose. El riesgo es el contrario: las órdenes llegan sin código y nada las detiene. Revisa el listado después de encender la política.

> [!WARNING]
>
> **Exigir Code cuando querías External ID.** **Code** es lo que imprime el ticket. Si el objetivo es que X-MART reciba la línea identificada, la columna es **External ID**.

> [!WARNING]
>
> **Configurar la política en el vendor equivocado.** La matriz es por vendor: revisa la insignia **Vendor** antes de tocar **Save changes**.

> [!WARNING]
>
> **Importar una planilla y dar por hecho que arregla los códigos.** Con la política activa, las filas que crean un producto sin el código, o lo vacían, se omiten. Mira [Importar y exportar](https://docs.fire.rest/es/manuals/backoffice/data-transfers.md).

***

## Glosario

| Término | Qué significa |
| - | - |
| **Política de menú** | La matriz, por vendor, de qué códigos exige cada tipo de producto |
| **External ID** | El código con el que el producto viaja a X-MART y con el que las órdenes vuelven identificadas |
| **Code** | El código operativo del punto de venta (PLU). Es el que imprime el ticket |
| **Missing code** (en la interfaz en español: *Falta código*) | Chip en un producto al que le falta un código que su tipo exige |
| **Any code status** (en la interfaz en español: *Cualquier código*) | Filtro del listado de productos; su opción **Missing code** muestra solo los productos a los que les falta un código exigido |
| **Vendor** | La marca o negocio dentro de la cuenta |

***

## Preguntas frecuentes

> [accordion] ¿La política viene activa por defecto?
>
> No. Viene apagada: nada es obligatorio y nada se marca hasta que alguien la configure. Un vendor con todos los interruptores apagados es igual a uno que nunca se configuró.

> [accordion] ¿Aplica a los productos que ya existen?
>
> No los bloquea, pero los marca. Siguen vendiéndose y publicándose, con un chip **Missing code** en el listado y un aviso en la ficha. Solo se rechazan cuando alguien guarda su pestaña **General** o, con un cambio de tipo pendiente, cualquier pestaña.

> [accordion] ¿Aplica también al ID del grupo de modificadores?
>
> No. Un grupo se crea sin código y no está en la matriz. La política aplica a los productos que están detrás de sus opciones.

> [accordion] ¿Aplica si cargo productos por planilla?
>
> Sí, para las filas que crean un producto o vacían un código que tenía: se omiten con una observación. Restaurar un respaldo no omite nada, solo avisa. Mira [Importar y exportar](https://docs.fire.rest/es/manuals/backoffice/data-transfers.md).

> [accordion] ¿Por qué no veo Menu policies?
>
> Tu rol no tiene acceso. Si está configurado con submenús explícitos, un administrador tiene que concedérselo. Si abres la dirección directamente, te lleva a *acceso denegado*.

> [accordion] ¿Por qué la veo pero no puedo guardar?
>
> Guardar requiere permiso sobre todo el vendor, no solo acceso a la pantalla. Si administras solo algunas tiendas, pídele a alguien con permiso sobre todo el vendor que lo haga.

> [accordion] ¿Por qué no veo el filtro Any code status?
>
> Solo aparece cuando la política exige algún código. Con todo apagado no hay nada que filtrar.

***

## Si administras varias cuentas

La misma configuración también está disponible desde administración: **Super Admin → System Administration → Accounts →** el detalle de la cuenta **→** pestaña **Menu policies**. Es la misma matriz, pero muestra **todos los países y vendors de la cuenta a la vez**: una tarjeta por país y, dentro, cada vendor con sus propios **Required codes**. Un solo **Save changes** los guarda todos, y **Cancel** descarta lo que cambiaste. A diferencia de Restaurant OS, no depende del acceso de menú de tu rol: es para superadministradores de la plataforma. Su descripción dice: *"Qué códigos del producto son obligatorios, por vendor y tipo de producto."*

![Pestaña Menu policies en el detalle de la cuenta de Super Admin, con la tarjeta Brasil y la matriz del vendor Sandbox Brasil](https://mintcdn.com/firepos/ehR-GmCF-ETSjLOC/images/manuals/backoffice/menu-policies/02-super-admin.png?fit=max\&auto=format\&n=ehR-GmCF-ETSjLOC\&q=85\&s=7fd2321655ec2ad7d4e5379e7a986993)

***

## Lo que no hace

* **No completa códigos** ni saca productos de la venta: bloquea lo nuevo y marca lo que ya existe.
* **No valida** las demás pestañas del producto mientras el tipo no haya cambiado: precios, categorías, imágenes, grupos de modificadores, sugerencias y disponibilidad guardan normalmente.
* **No exige un código en el grupo de modificadores** en sí, y **no revisa** un producto que asignas a un grupo como opción.
* **No omite nada** al restaurar un respaldo: solo avisa.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.