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

# Arquitectura

> Cómo tu POS o RMS se conecta a Fire spark y a cada canal de venta.

## Módulos de Fire spark

![Módulos de la plataforma Fire spark — dashboard, API de integraciones, composición omnicanal de menús, motor de pedidos y storefront.](https://mintcdn.com/firespark/YOn3mtca0qIExfP1/images/modules-diagram.webp?fit=max\&auto=format\&n=YOn3mtca0qIExfP1\&q=85\&s=33fb8d95f915bfb9278766a3e234a760)

## Vista general de la plataforma

Fire spark queda entre tu stack operativo y cada superficie donde el cliente pide. El POS o RMS sigue siendo la fuente de verdad; Fire spark sincroniza menús hacia afuera y enruta pedidos de vuelta.

```mermaid theme={null}
flowchart TB
    subgraph POS["Capa operativa — fuente de verdad"]
        POS1["Toast · Aloha · Symphony · Pixel Point"]
        POS2["Fire POS (RMS nativo)"]
    end

    subgraph FS["Fire spark"]
        DASH["Dashboard"]
        INT["API de integraciones\n/api/integrations/v1"]
        INTEL["Capa omnicanal\ncomposición de menús · routing"]
        ORD["Motor de pedidos\nwebhooks · order.status.changed"]
    end

    subgraph OWNED["Canales propios"]
        SF["Storefront API"]
        APP["App · Web · Kiosco · Call center"]
    end

    subgraph AGG["Agregadores"]
        UE["Uber Eats · Rappi · PedidosYa"]
    end

    POS1 -->|"Menús, precios, disponibilidad"| INT
    POS2 <-->|"Integración nativa"| FS
    INT --> INTEL
    INTEL --> UE
    INTEL --> SF
    SF --> APP

    UE & APP -->|"Pedido del cliente"| ORD
    ORD -->|"Webhook order.status.changed"| INT
    INT -->|"Ticket en cocina"| POS1
    ORD --> POS2

    DASH -.-> INT
```

## Sincronización de menús (POS → canales)

El catálogo sale del POS o RMS hacia Fire spark, que compone y publica menús en cada canal.

```mermaid theme={null}
flowchart LR
    subgraph POS["POS / RMS"]
        CAT["Catálogo maestro"]
    end

    subgraph FS["Fire spark"]
        INT["API de integraciones"]
        COMPOSE["Composición de menús\ncanal · tienda · fulfillment · horario"]
    end

    subgraph CH["Canales de venta"]
        APP["App"]
        WEB["Web"]
        UE["Uber Eats"]
        OTHER["Rappi · PedidosYa · kiosco · …"]
    end

    CAT -->|"PUT /menus\nPUT /menus/products/{id}"| INT
    INT --> COMPOSE
    COMPOSE --> APP & WEB & UE & OTHER
```

## Flujo de pedidos (canales → POS)

Cuando el cliente hace checkout en cualquier canal, Fire spark notifica tu integración y entrega el pedido al POS o RMS.

```mermaid theme={null}
sequenceDiagram
    autonumber
    participant POS as POS / RMS
    participant FS as Fire spark
    participant CH as Canal de venta
    participant INT as Tu servidor de integración

    CH->>FS: Checkout / place order
    FS->>INT: order.status.changed (status injecting)
    INT->>POS: Crear ticket en cocina
    POS->>INT: Siguiente estado de fulfillment
    INT->>FS: PATCH /orders/{id}/status
    FS->>INT: order.status.changed (si está suscrito)
    FS->>CH: Actualización de estado
```

## Composición de menú por contexto

Cada menú compuesto se acota a tienda, canal y fulfillment. Los horarios pueden restringir cuándo está activo.

```mermaid theme={null}
flowchart TB
    MASTER["Catálogo POS"]
    MASTER --> M1["downtown · app · delivery"]
    MASTER --> M2["downtown · uber-eats · delivery"]
    MASTER --> M3["downtown · app · pickup"]
    MASTER --> M4["airport · app · delivery"]

    M1 --> S1["Almuerzo entre semana\n11:00–15:00"]
    M2 --> S2["Subset agregador · todo el día"]
```

## Defaults y overrides acotados

Omite alcance en la URL o el payload para aplicar un menú de forma amplia; override solo donde la operación difiere.

```mermaid theme={null}
flowchart TB
    BASE["PUT /menus\n(sin fulfillment_id · sin store_id · sin channel_id · sin brand_id · schedules: null)\n→ default del comercio · 24/7"]
    BASE --> O1["?channel_id=uber-eats"]
    BASE --> O2["?store_id=airport"]
    BASE --> O3["schedules en la entrada de menú"]
```

| Omisión | Se asume |
| - | - |
| Parámetro `store_id` | Cualquier tienda (`__ANY__`) |
| Parámetro `channel_id` | Cualquier canal (`__ANY__`) |
| `fulfillment_id` en la entrada de menú | Cualquier tipo de fulfillment (`__ANY__`) |
| `schedules: null` | 24 horas, todos los días |

## Modelo de modificadores

Los modificadores son productos. Los grupos definen las reglas de elección sobre el ítem padre.

```mermaid theme={null}
flowchart TB
    COMBO["Combo (producto)"]
    COMBO --> G1["Grupo: Elige bebida\nmin 1 · max 1"]
    G1 --> M1["Cola (producto)"]
    G1 --> M2["Sprite (producto)"]
    G1 --> M3["Agua sin gas (producto)"]
    COMBO --> G2["Grupo: Extras\nmin 0 · max 3"]
    G2 --> M4["Queso extra (producto)"]
    G2 --> M5["Tocino (producto)"]
```

## Infraestructura

![Infraestructura en la nube de Fire spark — servicios API, bases de datos, colas e integraciones con POS y canales de venta.](https://mintcdn.com/firespark/YOn3mtca0qIExfP1/images/infra-diagram.webp?fit=max\&auto=format\&n=YOn3mtca0qIExfP1\&q=85\&s=af0ab4ea89309ae9d3e508ba28579614)


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