https://docs.google.com/document/d/1G1Qa5mk4ZK0DFrRUGIbPfukB8q8BTLCR5NgZr_qJZm8/edit?usp=sharing
O PubManager é um sistema abrangente de gerenciamento de bares projetado para agilizar e simplificar as operações de bares e pubs. Construído em Laravel, Vue.js e MySQL, o PubManager permite que os proprietários de bares gerenciem inventário, acompanhem as vendas, analisem os lucros e interajam com os clientes por meio de uma interface intuitiva e amigável. O back-end robusto do aplicativo permite o registro eficiente de produtos, insumos, matérias-primas, clientes, serviços e vendas diárias, enquanto o front-end fornece gráficos perspicazes para análise de dados de forma eficiente. Com o PubManager, os proprietários de bares podem gerenciar seus negócios com eficiência e melhorar seus resultados com facilidade.
Entende-se que é obrigatório o uso das tecnologias Vue.js, Laravel e MySQL, no projeto, porém foram feitas análises básicas levando em consideração diversas outras tecnologias para se desenvolver a aplicação.
- Fornece um sistema de gerenciamento de banco de dados relacional maduro e estável.
- Oferece excelente desempenho e escalabilidade e pode lidar com grandes conjuntos de dados com facilidade.
- Possui uma grande e ativa comunidade de desenvolvedores e usuários, com muitos recursos e documentação disponíveis.
- Pode exigir mais configuração manual e ajuste em comparação com outros bancos de dados.
- Pode ter limitações quando se trata de lidar com dados não estruturados ou semiestruturados.
- Fornece uma estrutura moderna e rica em recursos para criar aplicativos da web e APIs.
- Oferece uma ampla variedade de funcionalidades integradas, como roteamento, cache e autenticação.
- Possui uma grande e ativa comunidade de desenvolvedores e usuários, com muitos recursos e documentação disponíveis.
- Pode ter uma curva de aprendizado mais acentuada para desenvolvedores que não estão familiarizados com PHP ou com o ecossistema Laravel.
- Pode exigir mais código clichê e configuração em comparação com outras estruturas.
- Fornece uma estrutura moderna e intuitiva para criar interfaces de usuário dinâmicas.
- Oferece excelente desempenho e escalabilidade e pode lidar com interfaces de usuário complexas com facilidade.
- Possui uma grande e ativa comunidade de desenvolvedores e usuários, com muitos recursos e documentação disponíveis.
- Pode ter uma curva de aprendizado mais acentuada para desenvolvedores que não estão familiarizados com JavaScript ou com o ecossistema Vue.js.
- Pode exigir mais instalação e configuração manual em comparação com outras estruturas.
- Fornece recursos avançados para gerenciar grandes conjuntos de dados, como suporte integrado para backup e recuperação, alta disponibilidade e recuperação de desastres.
- Oferece fortes recursos de segurança, incluindo criptografia, autenticação e controle de acesso integrados.
- Oferece excelente integração com outras tecnologias da Microsoft, como ASP.NET Core e Visual Studio.
- Pode ter um custo de licenciamento mais alto em comparação com bancos de dados de código aberto como o MySQL.
- Pode ter uma curva de aprendizado mais acentuada para desenvolvedores que não estão familiarizados com a pilha da Microsoft.
- Fornece recursos avançados para gerenciar grandes conjuntos de dados, como suporte para particionamento, replicação e indexação.
- Oferece excelente desempenho e confiabilidade e pode lidar com consultas e transações complexas com facilidade.
- Oferece fortes recursos de segurança, incluindo criptografia, autenticação e controle de acesso.
- Pode exigir mais ajuste manual e otimização em comparação com outros bancos de dados.
- Pode ter uma curva de aprendizado mais acentuada para desenvolvedores que não estão familiarizados com SQL.
- Oferece excelente integração com outras tecnologias da Microsoft, como Visual Studio e Azure.
- Fornece recursos avançados para criar APIs e serviços da Web, como suporte integrado para injeção de dependência e middleware.
- Oferece fortes recursos de segurança, incluindo suporte integrado para autenticação e autorização.
- Pode ter uma curva de aprendizado mais acentuada para desenvolvedores que não estão familiarizados com a pilha da Microsoft.
- Pode exigir um ambiente Windows para desenvolvimento e implantação.
- Oferece excelente desempenho e escalabilidade e pode lidar com um grande número de solicitações simultâneas com facilidade.
- Fornece um rico ecossistema de bibliotecas e ferramentas, incluindo estruturas populares como Express.js e Nest.js.
- Pode ser executado em uma variedade de plataformas, incluindo Windows, Linux e macOS.
- Pode exigir mais configuração e configuração manual em comparação com outras estruturas.
- Pode exigir uma compreensão mais profunda dos conceitos de programação assíncrona.
- Oferece excelente desempenho e escalabilidade e pode lidar com interfaces de usuário complexas com facilidade.
- Fornece um rico conjunto de ferramentas e bibliotecas, incluindo bibliotecas populares de gerenciamento de estado, como Redux.
- Oferece excelente integração com APIs de back-end e serviços da web.
- Pode exigir mais instalação e configuração manual em comparação com outras estruturas.
- Pode ter uma curva de aprendizado mais acentuada para desenvolvedores que não estão familiarizados com JavaScript.
- Fornece uma estrutura poderosa e rica em recursos para criar aplicativos da web complexos.
- Oferece recursos avançados para criar interfaces de usuário responsivas e integração com APIs de back-end.
- Fornece um conjunto robusto de ferramentas e bibliotecas, incluindo o Angular CLI e a biblioteca RxJS.
- Pode ter uma curva de aprendizado mais acentuada para desenvolvedores que não estão familiarizados com o TypeScript.
- Pode exigir mais código clichê e configuração em comparação com outras estruturas.
Definir escopo do projeto.Definir dados a serem trabalhadosProjetar o esquema do banco de dados para armazenar dados, incluindo tabelas de produtos, insumos, matérias-primas, clientes, serviços e vendas.Definir relações entre as tabelas.Definir análises estatísticas interessantes aos bares.Revisar relações entre as tabelas baseado nas análises estatísticas.Criar repositório no GitHub e README básico | PubManager~~Criar design no FIGMA | PubManager-T1 – Figma~~Criar Trello com as etapas do desenvolvimento.Instalar e configurar a estrutura do banco de dados MySQL.Instalar e configurar a estrutura Laravel para construir a API de back-end.Implementar os endpoints da API para criar, atualizar e recuperar dados do banco de dados.Instalar e configurar a estrutura Vue.js para construir a interface de usuário front-end.Criar componentes Vue.js para exibir e manipular dados, como listas de produtos, registros de vendas e gráficos.Implementar chamadas de API nos componentes Vue.js para recuperar e enviar dados para o back-end.Implementar a autenticação e autorização do usuário usando os recursos integrados do Laravel.- Implementar lógica para analisar dados de vendas e calcular lucros líquidos e também para outras ferramentas estatísticas.
- Criar recursos administrativos para exibir gráficos para análise de dados.
- Testar o aplicativo e corrigir quaisquer bugs, instabilidades ou demais problemas.
- Implantar o aplicativo em um servidor de produção ou serviço de hospedagem.
- Importar dados antigos e sincronizar com a nova realidade de tabelas
Definir o escopo é estabelecer os limites do projeto definindo o que está incluído e excluído dos limites do projeto, ajudando a evitar o aumento do escopo, e por conseguinte dificuldades na hora do desenvolvimento mantendo o projeto em um caminho sólido buscando fugir dos contratempos.
O objetivo principal do projeto é desenvolver um sistema de gerenciamento para bares e pubs que permita o controle do estoque de bebidas e ingredientes, a gravação de receitas no banco de dados e o gerenciamento de produtos vendidos. A aplicação também irá gerar gráficos para visualização do desempenho do bar em relação aos produtos vendidos e permitirá análises estatísticas para identificar tendências e oportunidades de melhoria.
O PubManager será responsável por gerenciar as seguintes funcionalidades:
- Controle de Estoque: O sistema irá permitir o controle do estoque de bebidas e ingredientes, indicando a quantidade em estoque e alertando quando o estoque estiver baixo.
- Gravação de Receitas: O sistema irá permitir a gravação de receitas no banco de dados, indicando a lista de ingredientes necessários para cada produto vendido pelo bar.
- Gerenciamento de Produtos Vendidos: O sistema irá gerenciar os produtos vendidos pelo bar, incluindo bebidas e produtos preparados na cozinha. Os produtos preparados na cozinha serão gerenciados em uma tabela separada das bebidas, e a cada produto preparado, a quantidade de ingredientes será debitada automaticamente do estoque.
- Geração de Gráficos: O sistema irá gerar gráficos para visualizar o desempenho do bar em relação aos produtos vendidos, permitindo uma análise do desempenho diário, mensal e anual.
- Análises Estatísticas: O sistema irá permitir análises estatísticas para identificar tendências e oportunidades de melhoria.
- Armazenamento do Histórico de Preços: O sistema irá armazenar o histórico de preços dos produtos desde o início e vincular esses preços aos produtos através da data de compra e armazenamento no estoque.
- Gerenciamento de Clientes e Usuários: O sistema irá permitir o armazenamento do nome dos clientes e das informações sobre o que cada cliente consumiu, incluindo a data e a hora da compra. O sistema também permitirá o armazenamento de usuários com diferentes níveis de acesso ao banco de dados, para garantir a segurança das informações e permitir o gerenciamento do sistema por diferentes pessoas com funções e responsabilidades específicas.
O PubManager deverá ser desenvolvido como uma aplicação web responsiva, com design moderno e fácil de usar. A aplicação deverá ser desenvolvida usando as melhores práticas de segurança, para proteger as informações do bar e dos clientes. O sistema deverá ser desenvolvido usando tecnologias modernas, no caso Laravel, Vue.JS e MySQL, para garantir a escalabilidade e a manutenção do sistema.
Um bar tem:
- Bebidas alcóolicas e não alcoólicas que não precisam ser preparadas
- Alimentos que não precisam ser preparados
- Bebidas que precisam ser preparadas
- Alimentos que precisam ser preparados
- Receitas das bebidas e alimentos que precisam ser preparadas
- Um estoque (de ingredientes e produtos)
- Clientes
- Comandas que guardam a relação entre quais clientes pediram que tipo de produto em que dia
- Um fluxo de caixa que guarda as informações de entrada e saída
- Funcionários
- Administradores
- Admins
-
id: PK, int
-
name: varchar(255) | AN
-
nick_name: varchar(45)
-
email: varchar(255) | AN
-
email_verified_at: timestamp
-
password: varchar(255)
-
remember_token: varchar(100)
-
access: int(1) - 0=Main Admin, 1=Normal Admin, 2=Inserter
-
created_at: timestamp
-
updated_at: timestamp
-
created_by: FK(Admins->id), int(11)
-
updated_by: FK(Admins->id), int(11)
-
Clients
- id: PK, int
- name: varchar(255)
- created_at: date
- updated_at: date
- created_by: FK(Admins->id), int(11)
- updated_by: FK(Admins->id), int(11)
- Recipes
-
id: PK, int
-
description: text | AN
-
steps: text | AN
-
created_at: date
-
updated_at: date
-
created_by: FK(Admins->id), int(11)
-
updated_by: FK(Admins->id), int(11)
-
Products
- id: PK, int
- name: varchar(255)
- description: text | AN
- alcoholic: binary(false, true)
- preparable: binary(false, true)
- active_recipe: FK(Recipes_History->id), int(11) | AN
- created_at: date
- updated_at: date
- created_by: FK(Admins->id), int(11)
- updated_by: FK(Admins->id), int(11)
- Purchases
-
id: PK, int
-
description: text | AN
-
total_price: decimal(10,2)
-
created_at: date
-
updated_at: date
-
created_by: FK(Admins->id), int(11)
-
updated_by: FK(Admins->id), int(11)
-
Comandas
-
id: PK, int
-
paid: binary
-
created_at: date
-
updated_at: date
-
created_by: FK(Admins->id), int(11)
-
updated_by: FK(Admins->id), int(11)
-
Recipe_Ingredients
-
recipe_id: FK(Recipes->id), int(11)
-
product_id: FK(Products->id), int(11)
-
Product_Recipes
-
recipe_id: FK(Recipes->id), int(11)
-
product_id: FK(Products->id), int(11)
-
Purchases_Products
Compras e seus respectivos produtos. Ou seja ids das compras junto aos ids dos seus respectivos produtos
-
id: PK, int
-
product_id: FK(Products->id), int(11)
-
purchase_id: FK(Purchases->id), int(11)
-
quantity: decimal(10,3)
-
unit: FK(Units->id), int(11)
-
individual_price: decimal(10,2)
-
Products_Prices
-
id: PK, int
-
product_id: FK(Products->id), int(11)
-
price: decimal(10,2)
-
first_date: date
-
last_date: date
-
Comandas_Products
- id: PK, int
- comanda_id: FK(Comandas->id), int(11)
- product_id: FK(Products->id), int(11)
- price: decimal(10,2)
- quantity: decimal(10,3)
- unit: FK(Units->id), int(11)
- Comandas_Clients
-
id: PK, int
-
comanda_id: FK(Comandas->id), int(11)
-
client_id: FK(Clients->id), int(11)
-
Cash_Register
-
id: PK, int
-
comanda_id: FK(Comandas->id), int(11) | AN
-
product_id: FK(Products->id), int(11) | AN
-
name: varchar(255) | AN
-
description: text | AN
-
movement: binary(0, 1)
-
quantity: decimal(10,2)
-
created_at: date
-
updated_at: date
-
created_by: FK(Admins->id), int(11)
-
updated_by: FK(Admins->id), int(11)
-
Stock
Produtos em estoque, stocked_price é o valor gasto na compra dos produtos que são somados a cada adição no stock
- id: PK, int
- product_id: FK(Products->id), int(11) | AN
- quantity: decimal(10,2)
- unit: FK(Units->id), int(11)
- stocked_price: decimal(10,2)
- created_at: date
- updated_at: date
- created_by: FK(Admins->id), int(11)
- updated_by: FK(Admins->id), int(11)
- Um admin pode criar ou atualizar outros admins, produtos, clientes, receitas, compras e comandas. Isso indica uma relação um-para-muitos entre as tabelas Admins e todas as outras tabelas listadas, exceto a tabela Recipes_Products.
- Um produto pode ter várias versões de receita, enquanto uma receita pertence a um único produto. Isso indica uma relação um-para-muitos entre as tabelas Produto e Recipes, resolvida pela criação da tabela intermediária Recipes_History.
- Um produto pode ter várias receitas, e uma receita pode ser usada em vários produtos. Isso indica uma relação muitos-para-muitos entre as tabelas Produto e Recipes, resolvida pela criação da tabela intermediária Recipes_Products.
- Um produto pode estar presente em várias compras, e uma compra pode incluir vários produtos. Isso indica uma relação muitos-para-muitos entre as tabelas Produto e Purchases, resolvida pela criação da tabela intermediária Products_Purchases.
- Um produto pode ter vários preços, e um preço pertence a um único produto. Isso indica uma relação um-para-muitos entre as tabelas Produto e Products_Prices.
- Um produto pode estar em várias comandas, e uma comanda pode ter vários produtos. Isso indica uma relação muitos-para-muitos entre as tabelas Produtos e Comandas, resolvida pela criação da tabela intermediária Products_Comandas.
- Uma comanda pode ter vários clientes e um cliente pode estar em várias comandas. Isso indica uma relação muitos-para-muitos entre as tabelas Comandas e Clientes, resolvida pela criação da tabela intermediária Comandas_Clients.
- Análise de acessos: é possível analisar a distribuição de acessos entre os usuários, obtendo informações como o número de usuários de cada nível de acesso (Main Admin, Normal Admin e Inserter) e identificando possíveis discrepâncias ou desequilíbrios.
- Análise de atividades: é possível analisar as atividades realizadas pelos usuários na tabela Admins, obtendo informações como o número de registros criados ou atualizados por cada usuário em um determinado período de tempo e identificando possíveis gargalos e ineficiências.
- Análise de segurança: é possível analisar a segurança do sistema, verificando o número de tentativas de acesso não autorizado ou de violações de segurança e identificando possíveis pontos fracos ou vulnerabilidades.
- Análise de cadastro: é possível analisar o cadastro dos clientes, obtendo informações como o número de clientes cadastrados em um determinado período de tempo e identificando possíveis tendências ou sazonalidades.
- Análise de comportamento: é possível analisar o comportamento dos clientes, obtendo informações como o valor médio das compras por cliente, o número de compras realizadas por cliente em um determinado período de tempo e identificando possíveis segmentações ou perfis de clientes.
- Análise de satisfação: é possível analisar a satisfação dos clientes, verificando o número de reclamações ou elogios recebidos em um determinado período de tempo e identificando possíveis problemas ou oportunidades de melhoria.
- Análise de estoque: é possível analisar o estoque dos produtos, obtendo informações como a quantidade de cada produto em estoque, o valor total do estoque e identificando possíveis produtos com baixo estoque ou em falta.
- Análise de desempenho: é possível analisar o desempenho dos produtos, obtendo informações como o número de vendas realizadas por produto em um determinado período de tempo, o valor total de vendas por produto e identificando possíveis produtos com baixo desempenho ou oportunidades de melhoria.
- Análise de variação de preço: é possível analisar a variação de preço dos produtos, verificando o histórico de preços na tabela Products_Prices e identificando possíveis tendências de aumento ou diminuição de preços.
- Análise de popularidade: é possível analisar a popularidade das receitas, obtendo informações como o número de vezes que cada receita foi utilizada em um determinado período de tempo e identificando possíveis receitas mais ou menos populares.
- Análise de eficiência: é possível analisar a eficiência das receitas, verificando o custo-benefício de cada receita em relação aos seus ingredientes na tabela Recipes_Products e identificando possíveis receitas com custos elevados ou oportunidades de redução de custos.
- Análise de tendências: é possível analisar tendências de consumo ou de mercado, verificando a utilização de receitas que utilizam ingredientes sazonais.
- Análise de tempo de preparo: é possível analisar o tempo de preparo de cada receita, identificando possíveis receitas com tempos excessivos ou oportunidades de otimização do tempo de preparo.
- Análise de custo dos ingredientes: é possível analisar o custo dos ingredientes necessários para cada receita, identificando possíveis receitas com custos elevados ou oportunidades de redução de custos na aquisição de ingredientes.
- Análise de sazonalidade: é possível analisar a sazonalidade das receitas, verificando a utilização de ingredientes sazonais e identificando possíveis oportunidades de adaptar as receitas para diferentes épocas do ano.
- Análise de frequência de compras: é possível analisar a frequência de compras dos clientes, identificando padrões de compra e possíveis oportunidades de oferecer descontos ou promoções personalizadas para clientes frequentes.
- Análise de itens mais vendidos: é possível analisar os itens mais vendidos em um determinado período de tempo, identificando possíveis oportunidades de promoção ou criação de combos com esses produtos.
- Análise de rentabilidade: é possível analisar a rentabilidade das vendas, verificando a diferença entre o preço de venda e o custo dos produtos vendidos e identificando possíveis oportunidades de aumento da margem de lucro.
- Análise de recomendação: É possível analisar quais produtos são frequentemente comprados juntos pelos clientes, identificando possíveis oportunidades de vendas cruzadas. Essa análise pode ser feita utilizando a tabela de Compras e identificando padrões de compra de produtos pelos clientes.
- Análise de promoções: É possível analisar o impacto das promoções e campanhas de marketing na venda de produtos. Essa análise pode ser feita comparando as vendas de produtos em períodos de promoção e em períodos normais.
- Análise de vendas: É possível analisar as vendas realizadas pela empresa, obtendo informações como o número total de vendas realizadas, o valor total das vendas, a média de vendas por cliente, por produto e por categoria de produtos. Essa análise pode ser feita cruzando informações das tabelas de Compras, Produtos e Clients.
- Análise de lucratividade: Com base nas informações de vendas e dos custos dos produtos, é possível analisar a lucratividade da empresa. Essa análise pode ser feita comparando o valor total de vendas com o custo total de produção e com outras despesas da empresa, tais como aluguel e salários. Rotas API
Method: GET
Return: id, name, nick_name, email, password, access, created_at, updated_at, created_by, updated_by
Method: GET
Return: id, name, created_at, updated_at, created_by, updated_by
Method: GET
Return: id, name, description, alcoholic, need_preparation, active_recipe, created_at, updated_at, created_by, updated_by
Join: id, product_id, price, first_date, last_date - (LAST PRICE)
Method: GET
Return: id, description, steps, created_at, updated_at, created_by, updated_by
Join: id, recipe_id, product_id
Method: GET
Return: id, description, total_price, created_at, updated_at, created_by, updated_by
Join: id, product_id, purchase_id, quantity, unit, individual_price
Method: GET
Return: id, paid, created_at, updated_at, created_by, updated_by
Join products: id, comanda_id, product_id, price, quantity, unit
Join Clients: id, comanda_id, client_id
Method: GET
Return: id, comanda_id, product_id, name, description, movement, quantity, created_at, updated_at, created_by, updated_by
Method: GET
Return: id, product_id, quantity, unit, stocked_price, created_at, updated_at, created_by, updated_by
Nome: Input text - Placeholder = Digite seu nome aqui
Email: Input email - Placeholder = exemplo@mail.com
Senha: Input password - Placeholder = Digite sua senha aqui
Acesso: Select - Opções: Main Admin, Normal Admin, Inserter
Nome: Input text - Placeholder = Digite o nome do cliente aqui
Nome: Input text - Placeholder = Digite o nome do produto aqui
Nome de exibição: Input text - Placeholder = Digite o nome de exibição do produto aqui (opcional)
Descrição: Textarea - Placeholder = Digite a descrição do produto aqui
Alcoólico: Checkbox
Necessita preparo: Checkbox
Receita ativa: Select - Opções: (lista de receitas cadastradas)
Nome: Input text - Placeholder = Digite o nome da receita
Descrição: Textarea - Placeholder = (Opcional) Digite a descrição da receita aqui
Passos: Textarea - Placeholder = (Opcional) Digite os passos da receita aqui
Descrição: Textarea - Placeholder = Digite a descrição da compra aqui
Preço total: Input text - Placeholder = Digite o preço total da compra aqui
Pago: Checkbox
Nome: Input text - Placeholder = Digite o nome da unidade aqui
Abreviação: Input text - Placeholder = Digite a abreviação da unidade aqui
Comanda: Select - Opções: (lista de comandas cadastradas)
Produto: Select - Opções: (lista de produtos cadastrados)
Nome: Input text - Placeholder = Digite o nome da movimentação aqui
Descrição: Textarea - Placeholder = Digite a descrição da movimentação aqui
Tipo: Select - Opções: Saída, Entrada
Quantidade: Input text - Placeholder = Digite a quantidade da movimentação aqui
Produto: Select - Opções: (lista de produtos cadastrados)
Quantidade: Input text - Placeholder = Digite a quantidade do produto em estoque aqui
Preço de compra: Input text - Placeholder = Digite o preço de compra do produto aqui
Para uma melhor visualização use o link direto do figma providenciado