Skip to content

Pré-pedidos Agendados

Visão Geral

O cliente faz o pedido agora mas indica um horário de retirada/entrega futuro. O sistema armazena o pedido e o envia automaticamente para a cozinha no horário calculado para que esteja pronto no momento combinado.

CaracterísticaDetalhe
Campo no pedidoOrder.scheduledFor (Date ISO 8601)
DisparoBullMQ job com delay = scheduledFor − avgPrepTime
Visibilidade no KDSPedido não aparece no KDS até o horário de disparo
Frontend clientefrontend-react/src/views/customer/CheckoutView.tsx

Localização

CamadaArquivo
Schemabackend/src/orders/schemas/order.schema.tsscheduledFor
Servicebackend/src/orders/orders.service.tsscheduleOrderRelease()
Frontendfrontend-react/src/views/customer/CheckoutView.tsx
PDVfrontend-react/src/views/pdv/PdvTerminalView.tsx

Fluxo

Cliente: escolhe hora de retirada no checkout (ex: 14:30)


POST /t/:slug/orders { ..., scheduledFor: "2026-05-28T14:30:00Z" }


OrdersService.create()
  → Pedido criado com status: 'scheduled' (não vai para KDS)
  → Calcula releaseAt = scheduledFor − branch.avgPrepMinutes
  → Enfileira BullMQ job com delay = releaseAt − now


Job executa no releaseAt:
  → Status muda para 'pending'
  → KitchenGateway.emitNewOrder() → aparece no KDS
  → WhatsApp: "Seu pedido entrou em preparo"

Schema

typescript
// backend/src/orders/schemas/order.schema.ts
@Prop()
scheduledFor?: Date;  // Data/hora de retirada desejada pelo cliente

@Prop()
releaseAt?: Date;     // Calculado: scheduledFor − avgPrepMinutes

Status de pedido agendado:

StatusDescrição
scheduledAguardando horário de disparo — não visível no KDS
pendingDisparado, visível no KDS, em fila de preparo

Configuração

Admin → Configurações → Pedidos Agendados:

CampoDescrição
Habilitar pré-pedidosLiga/desliga o seletor de horário no checkout
Janela de agendamentoQuantas horas à frente o cliente pode agendar (default: 24h)
Tempo médio de preparoUsado para calcular releaseAt (default: branch.kdsSlaMinutes)
Intervalo de horárioGranularidade do seletor (default: 15min)

Visibilidade para o Admin

Em Admin → Pedidos, pedidos agendados aparecem com badge "Agendado para HH:MM". O admin pode:

  • Antecipar — move releaseAt para agora (botão "Preparar agora")
  • Cancelar — estorna se cliente cancelar antes do disparo

API

POST /t/:slug/orders
Body: { ..., scheduledFor: "2026-05-28T14:30:00.000Z" }

GET /t/:slug/admin/orders?status=scheduled
  → Lista pedidos agendados pendentes de disparo

PATCH /t/:slug/admin/orders/:id/release-now
  → Dispara imediatamente (antecipação manual)

Relacionados

Lançado sob a licença MIT.