Product Requirements Document
Documento mestre v0.3. Baseline oficial contendo 47 requisitos funcionais e regras de negócio para o sistema QRCODE NA MESA. Revisão v0.2: formaliza o modelo de negócio como SaaS multi-tenant. Revisão v0.3: formaliza cadastro de Mesa (com observação/ponto de referência), geração e impressão de QR Code, cadastro de Organização e de Usuário Interno, integração de CNPJ e pagamento via gateway.
1. Governança e Baseline
Este documento foi formalmente APROVADO pelo comitê sênior e serve como fonte da verdade para o desenvolvimento do ERD e sistemas futuros.
Qualquer alteração nesta baseline exige revisão de versionamento para v0.2 ou superior e nova rodada de aprovação. Esta é a revisão v0.3, motivada pela formalização de Mesa/QR Code/Organização/Pagamento.
2. Modelo de Negócio — SaaS Multi-tenant (novo em v0.2)
O sistema é oferecido como SaaS — múltiplos restaurantes (Organizações) usam a mesma aplicação, com dados completamente isolados entre si. Restaurante Exemplo é a primeira Organização cliente, não o único cliente possível.
Estrutura Organizacional
Isolamento multi-tenant via Postgres (Supabase Cloud) com Row Level Security em toda tabela que carregue dado de uma Organização. Reaproveita o padrão já validado em outros projetos.
Funções: current_org_id(), has_org_role(), platform_admin, tenant_escrita_liberada(). Detalhe técnico no RBAC/RLS v0.2.
Multiunidade
Esta baseline assume 1 Organização = 1 unidade física de restaurante. Uma rede com várias unidades cria uma Organização por unidade, sem hierarquia entre elas.
"Uma conta só gerenciando várias unidades" (holding vendo todas as lojas num painel único) fica fora do escopo — decisão de produto ainda não levantada com o cliente, não um TBD arquitetural bloqueante.
Governança de Cobrança/Assinatura
A função tenant_escrita_liberada() implica um gatilho (assinatura em dia, teste, suspensão) que libera ou bloqueia escrita por Organização.
Este documento não define o gatilho nem o modelo de planos/preços — permanece pendente, não resolver por conta própria.
3. Mesa, QR Code, Organização e Pagamento (novo em v0.3)
Cadastro de Mesa
Gestão cadastra Mesas dentro da própria Organização, com identificador único dentro da Organização (RN-015) — não precisa ser único entre Organizações diferentes.
Inclui campo de observação opcional para ponto de referência da localização física (ex.: "perto da janela", "fundo do salão").
Geração e Impressão de QR Code
Cada Mesa tem exatamente um QR Code ativo (1:1). Token globalmente único — nunca se repete, nem entre Mesas nem entre Organizações (RN-014). Impressão em A7 (7×10cm), A6 (10×15cm) ou A5 (15×21cm), com layout automático: nome do estabelecimento, número da Mesa e o QR Code.
Resolve ERD-TBD-005 parcialmente — cardinalidade definida, mas o ciclo (regenerar/revogar) segue pendente.
Cadastro de Organização (empresa)
É preciso existir uma forma de cadastrar novas Organizações (restaurantes, pizzarias, hamburguerias etc.), mas este documento não define quem pode fazer isso.
Autoatendimento (visitante cria a própria conta) ou onboarding manual (só Platform Admin) têm implicações diferentes de RBAC e cobrança — não resolver por conta própria.
Cadastro/Convite de Usuário Interno
Gestão cadastra ou convida novos Usuários Internos para a própria Organização, consistente com ACESSO-TBD-004.
Cada Usuário Interno vinculado a exatamente uma Organização (ERD-TBD-002, resolvido em v0.2).
Integração com API de CNPJ
No cadastro de Organização, consultar CNPJ pré-preenche razão social/endereço e reduz atrito.
Provedor não definido (Receita Federal direta, BrasilAPI, ReceitaWS ou similar) — impacta custo e disponibilidade. Não escolher por conta própria.
Pagamento do Pedido via Gateway
Intenção de permitir que o Cliente pague o Pedido dentro do sistema, via gateway (InfinityPay/Stone citados só como referência, não como decisão).
Gateway, obrigatoriedade, e divisão de conta por Mesa não definidos. Dado sensível — nunca visível para Cozinha, mesmo tratamento dado a PII (ACESSO-TBD-006).
4. Matriz de Rastreabilidade (Amostra RF ↔ RN)
| ID | Requisito | RN | Critério de Aceite |
|---|---|---|---|
| RF-001 | Acesso ao cardápio via QR Code por mesa. | RN-005 | CA-001: Exibir cardápio vinculado à mesa ativa após scan. |
| RF-002 | Preservar identificação da mesa na jornada. | RN-005 | CA-002: Identificação da mesa mantida no estado da aplicação. |
| RF-003 | Visualizar cardápio sem cadastro. | RN-001 | CA-003: Visualização sem login ou dados pessoais. |
| RF-004 | Navegação por categorias. | — | CA-004: Filtro instantâneo por categoria. |
| RF-005 | Adicionar produtos ao carrinho. | — | CA-005: Feedback visual imediato ao adicionar. |
| RF-012 | Criar pedido vinculado à mesa. | RN-006 | CA-012: Registro no banco com referência obrigatória da mesa. |
| RF-027 | Cadastro de insumos. | — | CA-027: Salvar propriedades básicas no cadastro. |
| RF-034 | Criar ficha técnica. | — | CA-034: Estrutura técnica associada ao produto. |
| RF-041 | Cadastrar Mesa, com observação/ponto de referência opcional. | RN-015 | CA-041: Identificador da Mesa único dentro da Organização; observação opcional. |
| RF-042 | Gerar QR Code único por Mesa. | RN-014 | CA-042: Token do QR Code nunca se repete, nem entre Mesas nem entre Organizações. |
| RF-043 | Imprimir QR Code em A7 (7×10cm), A6 (10×15cm) ou A5 (15×21cm). | RN-014 | CA-043: Layout inclui nome do estabelecimento, número da mesa e o QR Code. |
| RF-044 | Cadastrar nova Organização (empresa) no sistema. | — | CA-044: Cria a Organização e seu primeiro Usuário Interno administrador. |
| RF-045 | Cadastrar/convidar Usuário Interno vinculado a uma Organização. | — | CA-045: Novo usuário vinculado a exatamente uma Organização. |
| RF-046 | Consultar API de CNPJ para pré-preencher dados no cadastro da Organização. | — | CA-046: Campos de razão social/endereço preenchidos automaticamente quando a consulta retornar dados. |
| RF-047 | Permitir que o Cliente pague o Pedido via gateway de pagamento dentro do sistema. | — | CA-047: Pagamento aprovado reflete no status do Pedido. |
* Tabela completa contendo 40 itens preservada em baseline v0.1