Un menú por local
Cada local tiene exactamente un menú. No existe el concepto de varios menús con nombre (un “menú de desayuno” y un “menú de cena” por separado) para un local: las diferencias por horario se expresan dentro del único menú mediante ventanas de disponibilidad. Al publicar se reemplaza ese único menú completo (se aplica como una diferencia; vea más abajo). Maple guarda internamente el historial de versiones y siempre sirve la versión actual, pero desde su lado el modelo es simple: un local, un menú, que usted publica completo.Si su sistema modela varios menús por local, conviértalos en un solo menú de Maple antes de publicar, normalmente como
categorías separadas con sus propias ventanas de disponibilidad.
El árbol
Un menú es un árbol de tres objetos anidados, con definiciones compartidas a las que se hace referencia desde dentro:- Categoría (Category): una sección del menú (Bebidas, Platos fuertes). Puede tener franjas horarias para que solo aparezca en ciertas ventanas.
- Artículo (Item): un producto. Tiene una o más variantes y puede llevar grupos de modificadores, impuestos y cargos.
- Variante (Variation): una forma comprable de un artículo (Chico / Grande, o simplemente “Regular”). El precio vive aquí. Todo artículo tiene al menos una.
- Grupo de modificadores (Modifier group): un conjunto de opciones (Leche, Ingredientes extra) con reglas de selección. Se define una vez y se comparte, o se define en línea dentro de un artículo. Las opciones pueden llevar a su vez grupos de modificadores anidados.
Asigne su propio catálogo
La mayoría de los integradores ya tiene un modelo de menú. Así se asignan los conceptos típicos; hacerlo bien desde el principio evita los errores más comunes:Los ID externos son suyos
Todo objeto (categoría, artículo, variante, grupo de modificadores, opción, tasa de impuesto, cargo) lleva unexternalId que usted asigna y del que es dueño. Maple nunca lo cambia. Es la base del modelo:
- Volver a publicar con el mismo
externalIdactualiza el mismo objeto en lugar de crear un duplicado. - Los artículos de los pedidos hacen referencia al menú mediante estos ID (
menu_entity_id), de modo que un pedido entrante se asigna directamente a su catálogo. - Maple también genera sus propios ID (
item_…,var_…,ctg_…) en las respuestas como referencia, pero usted direcciona todo por suexternalId. - Los objetos también se referencian entre sí por
externalId. Cuando una referencia a un grupo de modificadores usagroupId, un artículo apunta a una tasa de impuesto contaxRateIds, o una promoción nombra su descuento condiscountId, esos valores son losexternalIdque usted asignó, no los ID generados por Maple.
Precios
Los precios son objetos, no números sueltos, para que el modelo pueda expresar más que un monto fijo. La estructura base es un monto en unidades menores enteras con una moneda:fixed, variable de monto abierto, per_unit para artículos que se pesan, bulk por tramos de cantidad), precios con impuesto incluido, reemplazos por moneda y un monto de comparación (tachado). Para el caso común, un precio fijo en una sola moneda, solo necesita amount. Consulte Dinero y montos.
Modificadores
Un grupo de modificadores tiene reglas de selección y un conjunto de opciones. Las reglas son más completas que un simple mínimo/máximo, lo que permite expresar cosas como “elija hasta 3, pero no más de 2 iguales”:
Referencie un grupo compartido desde un artículo o una variante con
groupId, o defina uno en línea. Las dos formas son mutuamente excluyentes en una misma entrada: una referencia lleva solo groupId; una definición lleva name y options. Mezclarlas se rechaza en lugar de truncarse en silencio. Las opciones pueden llevar sus propios grupos de modificadores anidados para flujos de armado a gusto. Consulte Recetas de menú para ver ejemplos prácticos.
Por ahora, los recursos de pedido exponen los modificadores de primer nivel seleccionados directamente en cada
artículo. Las selecciones anidadas más profundas todavía no se expanden en el recurso del pedido.
Impuestos y cargos
Son definiciones de nivel superior que usted asocia a los artículos por ID:- Categorías y tasas de impuesto: las tasas pueden ser
percentage,flato por tramos (bracket), sobre una base configurable, con impuesto incluido o no. Se asocian contaxCategoryId/taxRateIds. - Cargos (Fees): recargos y depósitos (un depósito por envase o CRV), que se asocian con
feeIds. - Descuentos, promociones y cupones: colecciones opcionales de nivel superior para reducciones de precio.
Disponibilidad y franjas horarias
Las ventanas de disponibilidad son la forma de expresar menús por horario; esto reemplaza la idea de tener varios menús.- Una categoría con una ventana de disponibilidad solo aparece durante ella (desayuno hasta las 11:00).
- Un artículo también puede llevar sus propias ventanas.
- Un objeto sin disponibilidad está siempre disponible.
dayOfWeek: de0(domingo) a6(sábado). Agregue una ventana por cada día activo.startTime/endTime: hora localHH:MM, en formato de 24 horas.
timezone (IANA, por ejemplo America/New_York). Si no se define, el valor predeterminado es UTC, así que configúrelo en su primera publicación; consulte Defina la zona horaria para la disponibilidad.
Una “especialidad del día” o una sección de desayuno es una categoría (o un artículo) con las ventanas adecuadas, dentro del único menú. Consulte la receta de especialidades del día.
Estado de inventario
El estado de inventario esin_stock, out_of_stock o low_stock. Al publicar, omitirlo conserva el valor actual; los objetos nuevos quedan en in_stock de forma predeterminada. Úselo para marcar un artículo como agotado sin volver a publicar la estructura completa del menú.
Publicar reemplaza todo el menú
Siempre envía el menú completo como el estado deseado. Maple lo aplica como una diferencia basada enexternalId:
- La validación es de todo o nada: un
400enumera todos los problemas y no cambia nada. - Volver a publicar algo idéntico no hace nada, y las identidades de los objetos se mantienen estables, así que puede publicar cada vez que cambie el menú sin generar alteraciones.