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

# Tipos de display de modificadores

> Cómo RADIO, CHECKBOX y QUANTITY se relacionan con los mínimos y máximos del grupo y del modificador en payloads de menu sync.

Define `display_type` en cada entrada de `pricing.modifiers` del producto modificador. Fire spark valida que el valor coincida con los mínimos y máximos del grupo y del modificador cuando haces upsert de un menú.

> [card] [Guía de sincronización de menús](https://firespark.cloud/docs/es/integrations-api/guides/menu-sync.md)
>
> Lee la guía de menu sync para la estructura del payload, grupos de modificadores
> y modificadores anidados.

## Dónde va el campo

`display_type` **no** se define en el modifier group. Los grupos usan `display_type` solo para layout (`LIST` o `GRID`).

El control de UI por modificador vive en el **producto modificador** bajo `pricing.modifiers`, un objeto por cada `modifier_group_id` donde ese producto aparece como opción:

```json theme={null}
{
  "id": "mod-ranch",
  "pricing": {
    "modifiers": [
      {
        "modifier_group_id": "mg-dipping-sauce",
        "minimum_quantity": 0,
        "maximum_quantity": 2,
        "display_type": "QUANTITY",
        "price": 0.5,
        "is_tax_inclusive": true,
        "tax_rate": 0.15
      }
    ]
  }
}
```

Si omites `display_type`, Fire spark infiere el control a partir de los límites de cantidad del grupo y del modificador según la tabla siguiente. La inferencia es determinística cuando esos límites están presentes.

> [!NOTE]
>
> Cuando el max del grupo es mayor que 1 y omites `maximum_quantity` en la
> entrada del modificador, Fire spark lo trata como quantity-capable e infiere
> `QUANTITY`. Para opciones tipo checkbox en un grupo multi-select, define
> `maximum_quantity: 1`. Un `display_type` explícito es opcional en ese caso —
> documenta la intención para quien consume la API, pero debe coincidir con los
> límites de cantidad si lo envías.

## `display_type` esperado según límites de cantidad

Usa los límites del **grupo** en `modifier_groups[].minimum_quantity` y `modifier_groups[].maximum_quantity`, y los del **modificador** en la entrada correspondiente de `pricing.modifiers` del producto modificador.

| Group min | Group max | Modifier min | Modifier max | `display_type` esperado | UI para el cliente |
| - | - | - | - | - | - |
| `1` | `1` | cualquiera | `1` (u omitido) | `RADIO` | Elegir exactamente una opción |
| `0` | `1` | cualquiera | `1` (u omitido) | `CHECKBOX` | Elegir como máximo una opción opcional |
| cualquiera | `> 1` | cualquiera | `1` | `CHECKBOX` | Activar o desactivar cada opción |
| cualquiera | `> 1` | cualquiera | omitido | `QUANTITY` | Stepper por opción; max omitido se trata como **mayor que 1** |
| cualquiera | `> 1` | cualquiera | `> 1` | `QUANTITY` | Stepper por opción |

> [!NOTE]
>
> Cuando el max del grupo es mayor que 1 y omites `maximum_quantity` en la
> entrada del modificador, la validación lo trata como quantity-capable
> (`QUANTITY`). Define `maximum_quantity: 1` explícitamente cuando la opción
> debe comportarse como checkbox dentro de un grupo multi-select.

### Ejemplos

| Escenario | Group min / max | Modifier max | `display_type` |
| - | - | - | - |
| Bebida obligatoria en combo | `1` / `1` | `1` | `RADIO` |
| Tamaño opcional | `0` / `1` | `1` | `CHECKBOX` |
| Hasta tres toppings | `0` / `3` | `1` | `CHECKBOX` |
| Hasta dos salsas del mismo sabor | `0` / `2` | `2` | `QUANTITY` |
| Porciones extra sin tope por modificador | `0` / `5` | omitido | `QUANTITY` |

## Errores de validación

Menu sync aplica estas reglas en payloads con `style: "DEFAULT"`.

### El modifier group rompe la regla

| Condición | Qué salió mal |
| - | - |
| `group.minimum_quantity > group.maximum_quantity` | Los límites del grupo son inválidos. |
| Group min `1`, max `1`, pero un modificador tiene `maximum_quantity` distinto de `1` | Los grupos single-select obligatorios solo permiten una unidad por opción. |
| Group min `0`, max `1`, pero un modificador tiene `maximum_quantity` distinto de `1` | Los grupos single-select opcionales solo permiten una unidad por opción. |
| Group max `> 1` y un modificador usa `display_type: "RADIO"` | `RADIO` solo es válido cuando **min y max del grupo son `1`**. |

### El modificador rompe la regla

| Condición | Qué salió mal |
| - | - |
| `modifier.minimum_quantity > modifier.maximum_quantity` | Los límites del modificador son inválidos. |
| `modifier.maximum_quantity > group.maximum_quantity` | Una opción no puede superar el tope total del grupo. |
| `display_type` no coincide con el valor esperado de la tabla | Por ejemplo, `QUANTITY` con modifier max `1` en un grupo multi-select, o `RADIO` cuando group min es `0`. |

Ejemplo de rechazo:

```text theme={null}
Modifier "mod-cheese" in group "mg-toppings" has display_type "RADIO" but must be "CHECKBOX": CHECKBOX because the group allows multiple selections (group min 0, max 3) and this modifier is capped at one unit (modifier min 0, max 1).
```

## Flujo de decisión

```mermaid theme={null}
flowchart TD
  START["Leer group min / max"] --> RADIO{"min = 1 y max = 1?"}
  RADIO -->|sí| DT_RADIO["display_type = RADIO"]
  RADIO -->|no| OPT{"min = 0 y max = 1?"}
  OPT -->|sí| DT_CHECKBOX["display_type = CHECKBOX"]
  OPT -->|no| MULTI{"modifier max = 1?"}
  MULTI -->|sí| DT_CHECKBOX_MULTI["display_type = CHECKBOX"]
  MULTI -->|no| DT_QTY["display_type = QUANTITY\n(max omitido cuenta como > 1)"]
```

## Campos relacionados

| Campo | Ámbito | Propósito |
| - | - | - |
| `modifier_groups[].minimum_quantity` | Grupo | Mínimo total de selecciones en el grupo |
| `modifier_groups[].maximum_quantity` | Grupo | Máximo total de selecciones en el grupo |
| `pricing.modifiers[].minimum_quantity` | Modificador | Mínimo de unidades para esta opción |
| `pricing.modifiers[].maximum_quantity` | Modificador | Máximo de unidades para esta opción |
| `pricing.modifiers[].display_type` | Modificador | Control UI: `RADIO`, `CHECKBOX` o `QUANTITY` |

Ver [Upsert menus](https://firespark.cloud/docs/es/integrations-api/menus/put.md) para el schema completo de `pricing.modifiers`.


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