Skip to content

Tipos de Negócio

Visão Geral

O campo businessType no schema de Tenant controla quais funcionalidades ficam visíveis e ativas para cada estabelecimento. Isso permite que a mesma plataforma atenda restaurantes, mercados e padarias sem criar caminhos de código completamente separados.

Schema (Mongoose):

ts
businessType?: 'restaurant' | 'mercado' | 'padaria';

O campo é opcional. Quando ausente (undefined), o sistema assume 'restaurant' por retrocompatibilidade.


Tipos Disponíveis

ValorÍconeDescriçãoPadrão
restaurant🍽️Restaurante tradicional — mesas, reservas, cozinha✅ (default)
mercado🏪Mercado / varejo — auto-atendimento e balcão, sem mesas
padaria🥐Padaria / confeitaria — balcão e auto-atendimento, sem reservas

Feature Gates

A lógica é centralizada em uma única expressão reutilizada em vários pontos:

ts
const isRestaurant = !tenant?.businessType || tenant.businessType === 'restaurant';
Funcionalidaderestaurantmercadopadaria
Seção "Mesas" no painel admin
Seção "Reservas" no painel admin
Display de Cozinha (Kitchen View)
Prompt de número de mesa no MenuView
Opção dine_in no CheckoutView
Modo "Mesa" no PDV terminal
Modo "Auto-atendimento" no PDV
Modo "Balcão" no PDV

Compatibilidade Retroativa

Tenants criados antes da implementação do campo businessType terão o campo como undefined. O padrão adotado garante que esses tenants continuem funcionando como restaurantes sem nenhuma migração de dados:

ts
// undefined → trata como 'restaurant' (compatível com dados legados)
const isRestaurant = !tenant?.businessType || tenant.businessType === 'restaurant';

Não usar:

ts
// ❌ Falha para tenants legados (undefined !== 'restaurant')
const isRestaurant = tenant?.businessType === 'restaurant';

Locais de Aplicação

O isRestaurant check deve ser aplicado em:

  • Frontend — AdminLayout: ocultar itens de nav (Mesas, Reservas, Cozinha)
  • Frontend — MenuView: ocultar campo "Número da mesa"
  • Frontend — CheckoutView: ocultar opção dine_in no tipo de entrega
  • Frontend — PdvTerminalView: ocultar modo "Mesa" na seleção de modo

A verificação é feita com o tenant carregado via useTenantStore() ou equivalente.


Definição no Backend

Campo no schema Tenant:

ts
@Prop({ default: undefined })
businessType?: string;

DTOs de criação e edição expõem o campo como opcional:

ts
@IsOptional()
@IsString()
businessType?: string;

A validação de valores aceitos (restaurant | mercado | padaria) é feita no frontend — o backend aceita qualquer string para permitir extensibilidade futura sem deploy obrigatório.

Lançado sob a licença MIT.