16 KiB
Modelagem de Banco de Dados para BarApp, GarçomApp e Gestão do Bar
Este documento apresenta a modelagem de banco de dados proposta para suportar as funcionalidades dos aplicativos BarApp (cliente), GarçomApp (interno) e o novo Aplicativo de Gestão do Bar, incluindo as entidades, seus atributos e os relacionamentos entre elas.
1. Visão Geral do Modelo
O modelo de dados é projetado para ser relacional, utilizando chaves primárias (PK) e chaves estrangeiras (FK) para estabelecer os relacionamentos. Os tipos de dados são genéricos e devem ser adaptados ao SGBD (Sistema Gerenciador de Banco de Dados) escolhido (e.g., PostgreSQL, MySQL, SQL Server).
2. Tabelas e Atributos
2.1. Usuarios (Clientes do BarApp)
Armazena as informações dos usuários que utilizam o aplicativo cliente.
| Atributo | Tipo de Dado | Restrições/Observações |
|---|---|---|
id_usuario |
UUID | PK (Chave Primária) |
nome_completo |
VARCHAR(255) | NOT NULL |
email |
VARCHAR(255) | NOT NULL, UNIQUE |
senha_hash |
VARCHAR(255) | NOT NULL (Armazenar hash da senha) |
id_google |
VARCHAR(255) | NULLABLE, UNIQUE (Para login social) |
data_cadastro |
TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP |
ultimo_login |
TIMESTAMP | NULLABLE |
limite_tickets_produto |
INTEGER | DEFAULT 10 (Regra de negócio: limite de tickets por produto) |
2.2. Garcons (Usuários do GarçomApp)
Armazena as informações dos funcionários do bar que utilizam o aplicativo interno.
| Atributo | Tipo de Dado | Restrições/Observações |
|---|---|---|
id_garcom |
UUID | PK |
nome_completo |
VARCHAR(255) | NOT NULL |
usuario |
VARCHAR(50) | NOT NULL, UNIQUE (Nome de usuário para login) |
senha_hash |
VARCHAR(255) | NOT NULL (Armazenar hash da senha) |
data_cadastro |
TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP |
ativo |
BOOLEAN | NOT NULL, DEFAULT TRUE |
2.3. Produtos
Armazena os itens do cardápio do bar.
| Atributo | Tipo de Dado | Restrições/Observações |
|---|---|---|
id_produto |
UUID | PK |
nome |
VARCHAR(255) | NOT NULL |
descricao |
TEXT | NULLABLE |
preco |
DECIMAL(10, 2) | NOT NULL |
custo_unitario |
DECIMAL(10, 2) | NULLABLE (Para cálculo de lucratividade) |
estoque_atual |
INTEGER | NOT NULL, DEFAULT 0 |
estoque_minimo |
INTEGER | DEFAULT 0 (Para alertas de estoque baixo) |
url_imagem |
VARCHAR(255) | NULLABLE |
disponivel |
BOOLEAN | NOT NULL, DEFAULT TRUE (Indica se está no cardápio ativo) |
id_categoria |
UUID | FK para CategoriasProduto |
2.4. CategoriasProduto
Armazena as categorias dos produtos do cardápio.
| Atributo | Tipo de Dado | Restrições/Observações |
|---|---|---|
id_categoria |
UUID | PK |
nome_categoria |
VARCHAR(100) | NOT NULL, UNIQUE |
2.5. Tickets
Armazena os tickets comprados pelos clientes.
| Atributo | Tipo de Dado | Restrições/Observações |
|---|---|---|
id_ticket |
UUID | PK |
id_usuario |
UUID | FK para Usuarios (Usuário que comprou o ticket) |
id_produto |
UUID | FK para Produtos |
data_compra |
TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP |
data_validade |
TIMESTAMP | NULLABLE (Prazo de validade do ticket) |
status |
ENUM | NOT NULL ('comprado', 'utilizado', 'transferido') |
data_uso |
TIMESTAMP | NULLABLE (Data e hora em que o ticket foi utilizado) |
id_comanda_origem |
UUID | NULLABLE, FK para Comandas (Se o ticket foi gerado de uma comanda paga) |
2.6. HistoricoTickets
Registra o histórico de eventos de cada ticket (compra, uso, transferência).
| Atributo | Tipo de Dado | Restrições/Observações |
|---|---|---|
id_historico |
UUID | PK |
id_ticket |
UUID | FK para Tickets |
tipo_evento |
ENUM | NOT NULL ('compra', 'uso', 'transferencia_enviada', 'transferencia_recebida') |
data_evento |
TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP |
id_usuario_origem |
UUID | NULLABLE, FK para Usuarios (Usuário que enviou/usou) |
id_usuario_destino |
UUID | NULLABLE, FK para Usuarios (Usuário que recebeu) |
observacoes |
TEXT | NULLABLE |
2.7. CestasCompras
Representa a cesta de compras temporária de um usuário.
| Atributo | Tipo de Dado | Restrições/Observações |
|---|---|---|
id_cesta |
UUID | PK |
id_usuario |
UUID | FK para Usuarios |
data_criacao |
TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP |
status |
ENUM | NOT NULL ('ativa', 'finalizada', 'cancelada') |
2.8. ItensCesta
Armazena os produtos dentro de uma cesta de compras.
| Atributo | Tipo de Dado | Restrições/Observações |
|---|---|---|
id_item_cesta |
UUID | PK |
id_cesta |
UUID | FK para CestasCompras |
id_produto |
UUID | FK para Produtos |
quantidade |
INTEGER | NOT NULL, > 0 |
preco_unitario |
DECIMAL(10, 2) | NOT NULL |
2.9. MetodosPagamento
Tabela de lookup para os métodos de pagamento aceitos.
| Atributo | Tipo de Dado | Restrições/Observações |
|---|---|---|
id_metodo |
INTEGER | PK |
nome_metodo |
VARCHAR(50) | NOT NULL, UNIQUE ('Pix', 'Credito', 'Debito') |
2.10. CartoesCadastrados
Armazena os tokens de cartões de crédito/débito para pagamentos futuros. Importante: Nunca armazenar dados sensíveis do cartão diretamente.
| Atributo | Tipo de Dado | Restrições/Observações |
|---|---|---|
id_cartao |
UUID | PK |
id_usuario |
UUID | FK para Usuarios |
ultimos_digitos |
VARCHAR(4) | NULLABLE (Para exibição ao usuário) |
bandeira |
VARCHAR(50) | NULLABLE |
token_pagamento |
VARCHAR(255) | NOT NULL (Token gerado pelo gateway de pagamento) |
data_cadastro |
TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP |
ativo |
BOOLEAN | NOT NULL, DEFAULT TRUE |
2.11. Eventos
Armazena as informações dos eventos do bar.
| Atributo | Tipo de Dado | Restrições/Observações |
|---|---|---|
id_evento |
UUID | PK |
nome_evento |
VARCHAR(255) | NOT NULL |
data_evento |
TIMESTAMP | NOT NULL |
descricao |
TEXT | NULLABLE |
preco_ingresso |
DECIMAL(10, 2) | NOT NULL |
url_imagem |
VARCHAR(255) | NULLABLE |
ativo |
BOOLEAN | NOT NULL, DEFAULT TRUE |
2.12. Ingressos
Armazena os ingressos comprados pelos clientes para eventos.
| Atributo | Tipo de Dado | Restrições/Observações |
|---|---|---|
id_ingresso |
UUID | PK |
id_usuario |
UUID | FK para Usuarios |
id_evento |
UUID | FK para Eventos |
nome_ingresso |
VARCHAR(255) | NULLABLE (Ex: "Ingresso Pista", "Ingresso VIP") |
data_compra |
TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP |
data_uso |
TIMESTAMP | NULLABLE (Data e hora em que o ingresso foi validado) |
status |
ENUM | NOT NULL ('comprado', 'utilizado') |
2.13. FilaKaraoke
Gerencia a fila de pessoas para o karaokê.
| Atributo | Tipo de Dado | Restrições/Observações |
|---|---|---|
id_fila_karaoke |
UUID | PK |
nome_cantor |
VARCHAR(255) | NOT NULL |
nome_musica |
VARCHAR(255) | NULLABLE |
posicao |
INTEGER | NOT NULL, UNIQUE (Ordem na fila) |
data_entrada |
TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP |
status |
ENUM | NOT NULL ('na_fila', 'cantando', 'cantou') |
2.14. Comandas
Armazena as comandas de consumo dos clientes.
| Atributo | Tipo de Dado | Restrições/Observações |
|---|---|---|
id_comanda |
UUID | PK |
id_garcom |
UUID | FK para Garcons (Garçom que abriu a comanda) |
id_usuario_cliente |
UUID | NULLABLE, FK para Usuarios (Se o cliente for identificado no app) |
numero_mesa |
VARCHAR(50) | NULLABLE |
nome_cliente |
VARCHAR(255) | NULLABLE (Nome do cliente, se não for usuário do app) |
data_abertura |
TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP |
data_fechamento |
TIMESTAMP | NULLABLE |
status |
ENUM | NOT NULL ('aberta', 'aguardando_pagamento', 'paga', 'fechada') |
valor_total |
DECIMAL(10, 2) | NOT NULL, DEFAULT 0.00 |
2.15. ItensComanda
Armazena os produtos adicionados a cada comanda.
| Atributo | Tipo de Dado | Restrições/Observações |
|---|---|---|
id_item_comanda |
UUID | PK |
id_comanda |
UUID | FK para Comandas |
id_produto |
UUID | FK para Produtos |
quantidade |
INTEGER | NOT NULL, > 0 |
preco_unitario |
DECIMAL(10, 2) | NOT NULL |
status_cozinha |
ENUM | NOT NULL ('na_fila', 'preparando', 'pronto', 'entregue') |
observacoes |
TEXT | NULLABLE |
2.16. PagamentosComanda
Registra os pagamentos efetuados para as comandas (total ou parcial).
| Atributo | Tipo de Dado | Restrições/Observações |
|---|---|---|
id_pagamento_comanda |
UUID | PK |
id_comanda |
UUID | FK para Comandas |
id_usuario |
UUID | NULLABLE, FK para Usuarios (Se pago via BarApp) |
valor_pago |
DECIMAL(10, 2) | NOT NULL |
id_metodo_pagamento |
INTEGER | FK para MetodosPagamento |
data_pagamento |
TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP |
tipo_pagamento |
ENUM | NOT NULL ('total', 'parcial') |
id_transacao_gateway |
VARCHAR(255) | NULLABLE (ID da transação no gateway de pagamento) |
2.17. Notificacoes
Armazena as notificações para usuários (clientes ou garçons).
| Atributo | Tipo de Dado | Restrições/Observações |
|---|---|---|
id_notificacao |
UUID | PK |
id_usuario_destino |
UUID | NOT NULL (FK para Usuarios ou Garcons ou Funcionarios) |
tipo_usuario_destino |
ENUM | NOT NULL ('cliente', 'garcom', 'gestao') |
tipo_notificacao |
ENUM | NOT NULL ('pagamento_comanda', 'pedido_pronto', 'transferencia_ticket_recebida', 'estoque_baixo', 'novo_cadastro_cliente', 'novo_evento_criado') |
mensagem |
TEXT | NOT NULL |
data_envio |
TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP |
lida |
BOOLEAN | NOT NULL, DEFAULT FALSE |
referencia_id |
UUID | NULLABLE (ID do ticket, comanda, etc. relacionado) |
2.18. Funcionarios (Usuários do Aplicativo de Gestão)
Armazena informações de todos os funcionários, incluindo aqueles que usam o GarçomApp e os administrativos.
| Atributo | Tipo de Dado | Restrições/Observações |
|---|---|---|
id_funcionario |
UUID | PK |
nome_completo |
VARCHAR(255) | NOT NULL |
cpf |
VARCHAR(14) | NOT NULL, UNIQUE |
data_contratacao |
DATE | NOT NULL |
salario_base |
DECIMAL(10, 2) | NOT NULL |
cargo |
VARCHAR(100) | NOT NULL |
dados_bancarios |
TEXT | NULLABLE (Informações para pagamento, criptografadas) |
usuario_sistema |
VARCHAR(50) | NULLABLE, UNIQUE (Para login no app de gestão) |
senha_hash_sistema |
VARCHAR(255) | NULLABLE (Hash da senha para login no app de gestão) |
ativo |
BOOLEAN | NOT NULL, DEFAULT TRUE |
id_garcom_associado |
UUID | NULLABLE, FK para Garcons (Se for também um garçom) |
2.19. PagamentosSalario
Registra os pagamentos de salário efetuados aos funcionários.
| Atributo | Tipo de Dado | Restrições/Observações |
|---|---|---|
id_pagamento |
UUID | PK |
id_funcionario |
UUID | FK para Funcionarios |
valor_bruto |
DECIMAL(10, 2) | NOT NULL |
descontos |
DECIMAL(10, 2) | NOT NULL, DEFAULT 0.00 |
valor_liquido |
DECIMAL(10, 2) | NOT NULL |
data_pagamento |
DATE | NOT NULL |
periodo_referencia |
VARCHAR(20) | NOT NULL (Ex: "2025-05") |
holerite_url |
VARCHAR(255) | NULLABLE (URL para PDF do holerite, se gerado) |
2.20. Fornecedores
Armazena informações dos fornecedores de mercadorias.
| Atributo | Tipo de Dado | Restrições/Observações |
|---|---|---|
id_fornecedor |
UUID | PK |
nome_fantasia |
VARCHAR(255) | NOT NULL |
razao_social |
VARCHAR(255) | NULLABLE |
cnpj |
VARCHAR(18) | NULLABLE, UNIQUE |
contato |
VARCHAR(255) | NULLABLE (Telefone, E-mail) |
endereco |
TEXT | NULLABLE |
2.21. EntradasMercadoria
Registra as entradas de mercadorias no estoque.
| Atributo | Tipo de Dado | Restrições/Observações |
|---|---|---|
id_entrada |
UUID | PK |
id_fornecedor |
UUID | FK para Fornecedores |
data_entrada |
TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP |
numero_nota_fiscal |
VARCHAR(100) | NULLABLE |
valor_total |
DECIMAL(10, 2) | NOT NULL |
observacoes |
TEXT | NULLABLE |
id_funcionario_responsavel |
UUID | FK para Funcionarios (Quem registrou a entrada) |
2.22. ItensEntradaMercadoria
Detalha os itens de cada entrada de mercadoria.
| Atributo | Tipo de Dado | Restrições/Observações |
|---|---|---|
id_item_entrada |
UUID | PK |
id_entrada |
UUID | FK para EntradasMercadoria |
id_produto |
UUID | FK para Produtos |
quantidade |
INTEGER | NOT NULL, > 0 |
custo_unitario_compra |
DECIMAL(10, 2) | NOT NULL (Custo na data da compra) |
2.23. Permissoes
Define os tipos de permissão para os usuários do aplicativo de gestão.
| Atributo | Tipo de Dado | Restrições/Observações |
|---|---|---|
id_permissao |
UUID | PK |
nome_permissao |
VARCHAR(100) | NOT NULL, UNIQUE (Ex: 'gerenciar_produtos', 'ver_dashboard_vendas') |
descricao |
TEXT | NULLABLE |
2.24. FuncionarioPermissoes
Tabela de ligação para atribuir permissões a funcionários.
| Atributo | Tipo de Dado | Restrições/Observações |
|---|---|---|
id_funcionario_permissao |
UUID | PK |
id_funcionario |
UUID | FK para Funcionarios |
id_permissao |
UUID | FK para Permissoes |
3. Relacionamentos
Abaixo estão os principais relacionamentos entre as tabelas, incluindo as novas adições:
-
Usuarios-
Usuarios.id_usuario1:NTickets.id_usuario -
Usuarios.id_usuario1:NCartoesCadastrados.id_usuario -
Usuarios.id_usuario1:NIngressos.id_usuario -
Usuarios.id_usuario1:NHistoricoTickets.id_usuario_origem -
Usuarios.id_usuario1:NHistoricoTickets.id_usuario_destino -
Usuarios.id_usuario1:NCestasCompras.id_usuario -
Usuarios.id_usuario1:NComandas.id_usuario_cliente(Opcional) -
Usuarios.id_usuario1:NPagamentosComanda.id_usuario(Opcional) -
Usuarios.id_usuario1:NNotificacoes.id_usuario_destino(quandotipo_usuario_destinoé 'cliente')
-
-
Garcons-
Garcons.id_garcom1:NComandas.id_garcom -
Garcons.id_garcom1:NNotificacoes.id_usuario_destino(quandotipo_usuario_destinoé 'garcom') -
Garcons.id_garcom1:1Funcionarios.id_garcom_associado(Opcional, se um garçom também for um funcionário de gestão)
-
-
Produtos-
Produtos.id_produto1:NTickets.id_produto -
Produtos.id_produto1:NItensCesta.id_produto -
Produtos.id_produto1:NItensComanda.id_produto -
Produtos.id_produto1:NItensEntradaMercadoria.id_produto -
Produtos.id_categoriaN:1CategoriasProduto.id_categoria
-
-
TicketsTickets.id_ticket1:NHistoricoTickets.id_ticket
-
CestasComprasCestasCompras.id_cesta1:NItensCesta.id_cesta
-
EventosEventos.id_evento1:NIngressos.id_evento
-
Comandas-
Comandas.id_comanda1:NItensComanda.id_comanda -
Comandas.id_comanda1:NPagamentosComanda.id_comanda -
Comandas.id_comanda1:NTickets.id_comanda_origem(Opcional)
-
-
MetodosPagamentoMetodosPagamento.id_metodo1:NPagamentosComanda.id_metodo_pagamento
-
Funcionarios-
Funcionarios.id_funcionario1:NPagamentosSalario.id_funcionario -
Funcionarios.id_funcionario1:NEntradasMercadoria.id_funcionario_responsavel -
Funcionarios.id_funcionario1:NFuncionarioPermissoes.id_funcionario -
Funcionarios.id_funcionario1:NNotificacoes.id_usuario_destino(quandotipo_usuario_destinoé 'gestao')
-
-
FornecedoresFornecedores.id_fornecedor1:NEntradasMercadoria.id_fornecedor
-
EntradasMercadoriaEntradasMercadoria.id_entrada1:NItensEntradaMercadoria.id_entrada
-
PermissoesPermissoes.id_permissao1:NFuncionarioPermissoes.id_permissao
Esta modelagem expandida fornece uma base robusta para o desenvolvimento de todos os três aplicativos, garantindo a integridade, a organização e a escalabilidade dos dados para as operações do bar.