Chamada de Garçom por QR
Visão Geral
O cliente toca em Chamar Garçom na tela do cardápio QR ou escaneia um QR dedicado na mesa. O evento chega imediatamente no painel do admin/staff como uma notificação — sem buzinas, sem campainha física.
| Característica | Detalhe |
|---|---|
| Origem | Botão no MenuView do cliente ou QR dedicado |
| Entrega | WebSocket newOrder com orderType: 'waiter_call' ou evento dedicado |
| Painel | Admin → Pedidos ou notificação in-app |
| Frontend | frontend-react/src/views/customer/MenuView.tsx |
Localização
| Camada | Arquivo |
|---|---|
| Botão cliente | frontend-react/src/views/customer/MenuView.tsx |
| API | backend/src/notifications/in-app-notifications.controller.ts |
| Notificações in-app | backend/src/notifications/in-app-notifications.service.ts |
Fluxo
1. Cliente toca "Chamar Garçom" no cardápio QR
2. POST /t/:slug/notifications/waiter-call { tableId, pdvSlug }
3. Backend cria InAppNotification para os staff/admin do tenant
4. WebSocket emite evento para o painel
5. Admin/staff vê notificação com número da mesa
6. Garçom vai até a mesa e marca a notificação como atendidaAPI
POST /t/:slug/notifications/waiter-call
Body: { tableId: string, pdvSlug: string }
Auth: público (mesmo que o cliente não esteja logado)
→ Cria notificação in-app + emite WebSocket
GET /t/:slug/admin/notifications?type=waiter_call&status=pending
Auth: staff/admin
→ Lista chamadas pendentes
PATCH /t/:slug/admin/notifications/:id/dismiss
Auth: staff/admin
→ Marca como atendidaInAppNotification Schema
| Campo | Tipo | Descrição |
|---|---|---|
tenant | ObjectId | Tenant |
type | string | waiter_call |
metadata.tableId | string | Número da mesa |
metadata.pdvSlug | string | Slug do PDV |
status | pending | dismissed | Estado |
createdAt | Date | Timestamp da chamada |
Configuração
Nenhuma configuração adicional além de ter mesas e PDVs configurados. O botão aparece automaticamente no cardápio QR se tenant.waiterCallEnabled === true (default: true).
Para desabilitar o botão em operações sem garçom (ex.: balcão), acesse:
Admin → Configurações → PDV → Habilitar chamada de garçom → Não