Files
RRBEC/doc/Banco de dados/Modelagem de Banco de Dados.md

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_usuario 1:N Tickets.id_usuario

    • Usuarios.id_usuario 1:N CartoesCadastrados.id_usuario

    • Usuarios.id_usuario 1:N Ingressos.id_usuario

    • Usuarios.id_usuario 1:N HistoricoTickets.id_usuario_origem

    • Usuarios.id_usuario 1:N HistoricoTickets.id_usuario_destino

    • Usuarios.id_usuario 1:N CestasCompras.id_usuario

    • Usuarios.id_usuario 1:N Comandas.id_usuario_cliente (Opcional)

    • Usuarios.id_usuario 1:N PagamentosComanda.id_usuario (Opcional)

    • Usuarios.id_usuario 1:N Notificacoes.id_usuario_destino (quando tipo_usuario_destino é 'cliente')

  • Garcons

    • Garcons.id_garcom 1:N Comandas.id_garcom

    • Garcons.id_garcom 1:N Notificacoes.id_usuario_destino (quando tipo_usuario_destino é 'garcom')

    • Garcons.id_garcom 1:1 Funcionarios.id_garcom_associado (Opcional, se um garçom também for um funcionário de gestão)

  • Produtos

    • Produtos.id_produto 1:N Tickets.id_produto

    • Produtos.id_produto 1:N ItensCesta.id_produto

    • Produtos.id_produto 1:N ItensComanda.id_produto

    • Produtos.id_produto 1:N ItensEntradaMercadoria.id_produto

    • Produtos.id_categoria N:1 CategoriasProduto.id_categoria

  • Tickets

    • Tickets.id_ticket 1:N HistoricoTickets.id_ticket
  • CestasCompras

    • CestasCompras.id_cesta 1:N ItensCesta.id_cesta
  • Eventos

    • Eventos.id_evento 1:N Ingressos.id_evento
  • Comandas

    • Comandas.id_comanda 1:N ItensComanda.id_comanda

    • Comandas.id_comanda 1:N PagamentosComanda.id_comanda

    • Comandas.id_comanda 1:N Tickets.id_comanda_origem (Opcional)

  • MetodosPagamento

    • MetodosPagamento.id_metodo 1:N PagamentosComanda.id_metodo_pagamento
  • Funcionarios

    • Funcionarios.id_funcionario 1:N PagamentosSalario.id_funcionario

    • Funcionarios.id_funcionario 1:N EntradasMercadoria.id_funcionario_responsavel

    • Funcionarios.id_funcionario 1:N FuncionarioPermissoes.id_funcionario

    • Funcionarios.id_funcionario 1:N Notificacoes.id_usuario_destino (quando tipo_usuario_destino é 'gestao')

  • Fornecedores

    • Fornecedores.id_fornecedor 1:N EntradasMercadoria.id_fornecedor
  • EntradasMercadoria

    • EntradasMercadoria.id_entrada 1:N ItensEntradaMercadoria.id_entrada
  • Permissoes

    • Permissoes.id_permissao 1:N FuncionarioPermissoes.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.