Um sistema de gerenciamento de Pet Shop full-stack (Java/Spring + React/Next.js) com dashboard de BI, módulos de gerenciamento (CRUDs) e executor de SQL. Perfeito para estudos, portfólio e como base para novos projetos.
Nada vende melhor o projeto do que vê-lo funcionando. Aqui está o Dashboard de Business Intelligence em ação:
Este é um projeto full-stack completo que simula um sistema de gestão (ERP) para um Pet Shop. O diferencial deste repositório é que ele não foi apenas codificado, mas sim projetado seguindo um processo formal de modelagem de banco de dados.
O objetivo é servir como um boilerplate robusto ou um projeto de estudo para desenvolvedores interessados.
Este Projeto:
- Conecta um backend Java (Spring Boot com JDBC) a um banco de dados MySQL.
- Consume uma API REST em um frontend moderno React (Next.js).
- Implementa um Dashboard de BI com gráficos dinâmicos (Chart.js).
- Ve na prática como um Esquema Relacional bem definido se traduz em uma aplicação funcional.
- Sobre o Projeto
- Funcionalidades
- Tecnologias Utilizadas
- Como Executar
- Design e Artefatos do Banco de Dados
- Roadmap
- Licença
A tela principal do sistema é um dashboard analítico que consome dados agregados diretamente do banco de dados para fornecer insights sobre o negócio.
- KPIs Dinâmicos: Cards de resumo (Faturamento Total, Novos Clientes, etc.).
- Filtros Globais: Filtre todos os gráficos por período (dia, mês, ano).
- Gráficos Interativos:
- Faturamento (Diário, Mensal, Anual).
- Top 5 Clientes e Produtos.
- Novos Clientes por Mês.
- E muito mais...
[GALERIA DE IMAGENS DO DASHBOARD COM FILTROS APLICADOS]
O módulo de Ponto de Venda oferece uma interface ágil e segura para o registro de saídas de produtos, garantindo a consistência do estoque em tempo real através de transações ACID.
- Fluxo de Caixa Dinâmico: Seleção rápida de produtos com busca inteligente, montagem de carrinho e cálculo automático de subtotais e troco.
- Controle de Estoque em Tempo Real: O sistema valida a disponibilidade dos itens instantaneamente (via Triggers no banco), impedindo a venda de produtos sem saldo e baixando o estoque automaticamente após a confirmação.
- Rastreabilidade Completa: Cada venda é vinculada obrigatoriamente a um Cliente e ao Atendente responsável, gerando dados para relatórios de fidelidade e comissões.
- Múltiplos Pagamentos: Suporte nativo para registro de diferentes formas de pagamento (Crédito, Débito, PIX, Dinheiro).
[GALERIA DE IMAGENS DA TELA DE CAIXA / PDV]
🩺 Gestão Clínica & Registro de Serviços Um módulo dedicado ao fluxo de atendimento veterinário, permitindo o registro ágil e detalhado de consultas, exames e procedimentos realizados.
- Busca Inteligente de Pacientes: Sistema de autocomplete que permite localizar o animal rapidamente pelo nome, pelo nome do tutor ou pelo CPF, agilizando o início do atendimento na recepção ou consultório.
- Prontuário Digital Simplificado: Ao selecionar um paciente, o sistema exibe instantaneamente um "Card de Resumo" com dados vitais do pet (espécie, raça) e contato do dono, garantindo a identificação correta antes do registro.
- Registro Clínico Estruturado: Formulário padronizado para documentação de Sintomas Relatados e Diagnóstico/Descrição do Serviço, vinculando cada atendimento obrigatoriamente a um Veterinário responsável (validado via banco de dados).
- Histórico Unificado: Cada registro alimenta a tabela Consulta_Atende, construindo um histórico clínico permanente e acessível para o animal.
details>[GALERIA DE IMAGENS DA TELA DE REGISTRO DE SERVIÇOS]
O sistema possui módulos de gerenciamento completos (Criar, Ler, Atualizar, Excluir) para todas as entidades de "dados mestres" do negócio.
- Gerenciar Clientes
- Gerenciar Funcionários (com lógica de especialização para Veterinários, Atendentes e Funcionários Gerais)
- Gerenciar Produtos
- Gerenciar Fornecedores
- Gerenciar Pets (associados aos seus donos)
[GALERIA DE IMAGENS DAS TELAS DE GERENCIAMENTO (CRUDs)]
[GALERIA DE IMAGENS DE UM MODAL DE EDIÇÃO/CRIAÇÃO ABERTO]
Recursos avançados para gerenciamento e depuração do banco de dados.
- Executor de Consultas SQL: Uma interface que permite executar queries
SELECT(e outras consultas seguras) diretamente no banco de dados e ver o resultado em uma tabela dinâmica. - Log de Auditoria: Uma tela que exibe os logs de auditoria de alteração de preço, alimentada diretamente por uma
TRIGGERno banco de dados.
[IMAGEM DA TELA DO EXECUTOR SQL COM UMA QUERY E RESULTADO]
| Backend (Servidor) | Frontend (Cliente) | Banco de Dados |
|---|---|---|
JDBC |
||
Triggers Procedures |
||
Spring Web |
CSS Modules |
Views Functions |
Spring JDBC (Template) |
React Icons |
Índices |
Siga estes passos para configurar e executar o projeto localmente.
- Git
- Java 17 (ou superior)
- Node.js 18 (ou superior)
- Um servidor MySQL (recomendo XAMPP ou MySQL Workbench)
Este é o coração do projeto. O setup é simplificado e requer a execução de apenas um arquivo.
- Navegue até a pasta
database/na raiz deste projeto. - Execute o script
full_schema.sqlno seu banco de dados recém-criado.
Este script único cuidará de tudo:
- Criação de todas as tabelas.
- Inserção de dados de teste (para popular o dashboard).
- Criação das Funções, Procedimentos, Views de BI e Triggers.
(Para fins de desenvolvimento e consulta, os scripts individuais também estão disponíveis nesta pasta.)
- Clone o repositório:
git clone [https://github.com/fthenri/pet-shop-bd-v2.git](https://github.com/fthenri/pet-shop-bd-v2.git) cd pet-shop-bd-v2 - Configure o Acesso ao BD:
Crie o arquivo
backend/src/main/resources/application.properties(se não existir) e adicione suas credenciais do MySQL:spring.datasource.url=jdbc:mysql://localhost:3306/PetShop spring.datasource.username=seu_usuario_mysql spring.datasource.password=sua_senha_mysql spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
- Navegue até a pasta do backend e execute:
O servidor estará rodando em
cd backend ./mvnw spring-boot:runhttp://localhost:8080.
- Em um novo terminal, navegue até a pasta do frontend:
cd frontend - Instale as dependências:
npm install
- Execute o servidor de desenvolvimento:
Abra
npm run dev
http://localhost:3000no seu navegador para ver a aplicação.
Este projeto foi desenvolvido usando uma abordagem Database-First. Todo o design do sistema foi planejado antes da primeira linha de código, usando artefatos de modelagem.
A descrição textual que deu origem ao projeto, definindo as regras de negócio.
Clique para expandir a Definição do Minimundo
Descrição do Cenário:
Um Pet Shop oferece uma variedade de serviços (como banho, tosa, consultas veterinárias) e vende produtos (como ração, brinquedos e acessórios). A empresa precisa de um sistema para gerenciar as informações de clientes e seus pets, registrar vendas de produtos e analisar o desempenho do negócio para tomar decisões mais informadas.
Objetivos da Aplicação:
- Centralizar e organizar as informações sobre clientes, seus pets e funcionários.
- Fornecer insights sobre as operações do negócio por meio de relatórios e um dashboard visual.
Perguntas/Relatórios Importantes:
- Quais são os serviços e produtos mais populares?
- Qual é a receita mensal proveniente de serviços em comparação com a de produtos?
- Qual é o perfil dos clientes mais frequentes?
-
Cliente: A pessoa física responsável pelos pets e pelas transações.
- cpf (chave primária)
- nome
- data_cadastro
- endereco (composto: logradouro, numero, bairro, cidade, estado, cep)
- telefone (multivalorado)
- cpf (chave primária)
-
Pet (Entidade Fraca): O animal de estimação atendido no Pet Shop. Depende de um Cliente.
- nome_pet (chave parcial)
- especie
- raca
- data_nascimento
- observacoes (alergias, condições médicas)
- nome_pet (chave parcial)
-
Funcionário (Generalista): Representa qualquer pessoa que trabalhe no Pet Shop.
- cod_funcionario (chave primária)
- nome
- cpf
- data_admissao
- Especializações: Veterinário, Atendente
- cod_funcionario (chave primária)
-
Fornecedor: A empresa que fornece os produtos.
- cnpj (chave primária)
- razao_social
- contato_principal
- cnpj (chave primária)
-
Produto: Itens físicos vendidos na loja.
- cod_produto (chave primária)
- nome_produto
- descricao
- preco_venda
- quantidade_estoque
- cod_produto (chave primária)
-
Consulta: Registro de um atendimento clínico.
- num_consulta (chave primária)
- data_hora
- diagnostico
- sintomas_relatados
- num_consulta (chave primária)
-
Exame: Exame solicitado durante uma consulta.
- nome_exame (chave parcial)
- data_solicitacao
- resultado
- nome_exame (chave parcial)
-
Venda: O registro mestre de uma transação comercial.
- num_venda (chave primária)
- data_hora
- valor_total
- forma_pagamento
- num_venda (chave primária)
-
Pesquisa: Pesquisas de satisfação realizadas com clientes.
- id_pesquisa (chave primária)
- (diversos atributos de perfil)
- id_client (chave estrangeira para Cliente)
- id_pesquisa (chave primária)
- Cliente e Pet (1:N): "possui" (Relacionamento de Identificação).
- Funcionário (1:N): "supervisiona" (Auto-relacionamento).
- Fornecedor e Produto (1:N): "fornecer".
- Venda e Produto (N:M): "contem" (com atributo
quantidade). - Veterinário, Pet e Consulta (Ternário): "Atende".
- Consulta e Exame (1:N): "prescrever" (Relacionamento de Identificação).
- Atendente e Venda (1:N): "registra".
- Cliente e Venda (1:N): "efetua".
- Cliente e Pesquisa (1:N): (Relacionamento para pesquisa).
O diagrama Entidade-Relacionamento de alto nível.
[IMAGEM DO MODELO CONCEITUAL]
A transição do modelo conceitual para um rascunho do esquema relacional.
[IMAGEM DO MODELO LÓGICO]
O esquema relacional derivado do MER, mostrando as tabelas, atributos e chaves estrangeiras.
[IMAGEM DO ESQUEMA RELACIONAL]
A definição detalhada de cada atributo (tipo de dado, tamanho, restrições) para cada entidade do banco de dados.
Clique para expandir o Dicionário de Dados
Representa os clientes donos dos pets.
| Nome do Atributo | Tipo de Dado | Tamanho/Precisão | Descrição | Observações/Restrições |
|---|---|---|---|---|
| cpf | VARCHAR | 11 | CPF do cliente, usado para identificação única. | PK (Chave Primária), Obrigatório, Único |
| nome | VARCHAR | 150 | Nome completo do cliente. | Obrigatório |
| data_cadastro | DATE | Data em que o cliente foi cadastrado no sistema. | Obrigatório | |
| logradouro | VARCHAR | 200 | Nome da rua/avenida do endereço do cliente. | Opcional |
| numero | VARCHAR | 10 | Número do imóvel no endereço. | Opcional |
| bairro | VARCHAR | 50 | Bairro do endereço. | Opcional |
| cidade | VARCHAR | 50 | Cidade do endereço. | Opcional |
| estado | CHAR | 2 | Sigla do estado (UF). | Opcional |
| cep | VARCHAR | 8 | Código de Endereçamento Postal (sem formatação). | Opcional |
| telefone | VARCHAR | 15 | Telefone de contato do cliente. | Multivalorado |
Representa os animais de estimação. É uma entidade fraca, dependente de Cliente.
| Nome do Atributo | Tipo de Dado | Tamanho/Precisão | Descrição | Observações/Restrições |
|---|---|---|---|---|
| cpf_cliente | VARCHAR | 11 | CPF do cliente dono do pet. | PK (parte), FK para Cliente |
| nome_pet | VARCHAR | 50 | Nome do animal de estimação. | PK (parte), Chave Parcial |
| especie | VARCHAR | 30 | Espécie do animal (ex: 'Cachorro', 'Gato'). | Obrigatório |
| raca | VARCHAR | 50 | Raça do animal. | Obrigatório |
| data_nascimento | DATE | Data de nascimento aproximada do pet. | Opcional | |
| observacoes | TEXT | Campo para informações relevantes (alergias, etc.). | Opcional |
Representa os funcionários do Pet Shop (superclasse).
| Nome do Atributo | Tipo de Dado | Tamanho/Precisão | Descrição | Observações/Restrições |
|---|---|---|---|---|
| cod_funcionario | INTEGER | Código identificador único do funcionário. | PK. Auto-incremento | |
| nome | VARCHAR | 150 | Nome completo do funcionário. | Obrigatório |
| cpf | VARCHAR | 11 | CPF do funcionário. | Obrigatório, Único |
| data_admissao | DATE | Data em que o funcionário foi admitido. | Obrigatório | |
| cod_supervisor | INTEGER | Código do funcionário que o supervisiona. | FK para Funcionario, Opcional (Pode ser NULO) |
Subclasses de Funcionario. Elas herdam todos os atributos acima.
| Entidade | Nome do Atributo | Tipo de Dado | Tamanho/Precisão | Descrição | Observações/Restrições |
|---|---|---|---|---|---|
| Veterinario | cod_funcionario | INTEGER | Identificador herdado. | PK, FK para Funcionario | |
| CRMV | VARCHAR | 10 | Registro no Conselho Regional de Med. Veterinária. | Obrigatório, Único | |
| Atendente | cod_funcionario | INTEGER | Identificador herdado. | PK, FK para Funcionario |
Representa as empresas que fornecem produtos para o Pet Shop.
| Nome do Atributo | Tipo de Dado | Tamanho/Precisão | Descrição | Observações/Restrições |
|---|---|---|---|---|
| cnpj | VARCHAR | 14 | CNPJ do fornecedor (sem formatação). | PK (Chave Primária), Obrigatório, Único |
| razao_social | VARCHAR | 200 | Nome empresarial do fornecedor. | Obrigatório |
| contato_principal | VARCHAR | 15 | Telefone de contato do Fornecedor. | Obrigatório |
Representa os itens à venda.
| Nome do Atributo | Tipo de Dado | Tamanho/Precisão | Descrição | Observações/Restrições |
|---|---|---|---|---|
| cod_produto | INTEGER | Código identificador único do produto. | PK. Auto-incremento | |
| nome_produto | VARCHAR | 100 | Nome/Título do produto. | Obrigatório |
| descricao | TEXT | Descrição detalhada do produto. | Opcional | |
| preco_venda | DECIMAL | 10, 2 | Preço unitário de venda do produto. | Obrigatório |
| quantidade_estoque | INTEGER | Quantidade atual do produto em estoque. | Obrigatório | |
| cod_fornecedor | INTEGER | Código do fornecedor do produto. | FK para Fornecedor, Obrigatório |
Registra cada transação de venda.
| Nome do Atributo | Tipo de Dado | Tamanho/Precisão | Descrição | Observações/Restrições |
|---|---|---|---|---|
| num_venda | INTEGER | Número identificador único da venda. | PK, Auto-incremento | |
| data_hora | TIMESTAMP | Data e hora exatas da transação. | Obrigatório | |
| valor_total | DECIMAL | 10, 2 | Soma total dos itens da venda. | Obrigatório |
| forma_pagamento | VARCHAR | 50 | Método de pagamento (ex: 'Cartão de Crédito'). | Obrigatório |
| cpf_cliente | VARCHAR | 11 | Cliente que efetuou a compra. | FK para Cliente, Obrigatório |
| cod_funcionario | INTEGER | Funcionário que registrou a venda. | FK para Funcionario, Obrigatório |
Registra os atendimentos veterinários.
| Nome do Atributo | Tipo de Dado | Tamanho/Precisão | Descrição | Observações/Restrições |
|---|---|---|---|---|
| num_consulta | INTEGER | Número identificador único da consulta. | PK. Auto-incremento | |
| data_hora | TIMESTAMP | Data e hora exatas da consulta. | Obrigatório | |
| sintomas_relatados | TEXT | Sintomas descritos pelo dono do pet. | Opcional | |
| diagnostico | TEXT | Diagnóstico fornecido pelo veterinário. | Opcional | |
| cpf_cliente_pet | VARCHAR | 11 | CPF do dono do pet atendido. | FK para Pet, Obrigatório |
| nome_pet | VARCHAR | 50 | Nome do pet atendido. | FK para Pet, Obrigatório |
| cod_veterinario | INTEGER | Veterinário que realizou a consulta. | FK para Veterinario, Obrigatório |
Registra os exames solicitados em uma consulta. Entidade fraca, dependente de Consulta.
| Nome do Atributo | Tipo de Dado | Tamanho/Precisão | Descrição | Observações/Restrições |
|---|---|---|---|---|
| num_consulta | INTEGER | Consulta que originou o pedido de exame. | PK (parte), FK para Consulta | |
| nome_exame | VARCHAR | 100 | Nome do exame solicitado (ex: 'Hemograma'). | PK (parte), Chave Parcial |
| data_solicitacao | DATE | Data em que o exame foi solicitado. | Obrigatório | |
| resultado | TEXT | Laudo/Resultado do exame. | Opcional |
Registra os hábitos de consumo dos clientes e características dos pets no petshop.
| Atributo | Descrição | Tipo de Dado | Observações |
|---|---|---|---|
| Id_pesquisa | Identificador único da pesquisa | INT (PK) | Chave primária da tabela |
| Idade_Cliente | Idade do cliente que respondeu | INT | Valor em anos |
| Genero | Gênero do cliente | VARCHAR(20) | Ex: "Masculino", "Feminino", "Outro" |
| Distancia_km | Distância da residência do cliente até o local (em km) | DECIMAL(5,2) | Ex: 12.35 km |
| Tipo_Pet_1 | Espécie do primeiro pet | VARCHAR(30) | Ex: "Cachorro", "Gato", "Ave" |
| Idade_Pet_1 | Idade do primeiro pet | INT | Valor em anos |
| Peso_kg_Pet_1 | Peso do primeiro pet | DECIMAL(5,2) | Ex: 8.50 kg |
| Possui_Segundo_Pet | Indica se o cliente tem um segundo pet | BOOLEAN | 0 = Não, 1 = Sim |
| Tipo_Pet_2 | Espécie do segundo pet | VARCHAR(30) | Preenchido apenas se Possui_Segundo_Pet = 1 |
| Idade_Pet_2 | Idade do segundo pet | INT | Valor em anos |
| Peso_kg_Pet_2 | Peso do segundo pet | DECIMAL(5,2) | Ex: 12.00 kg |
| Gasto_Mensal_BRL | Gasto médio mensal do cliente com pets (em R$) | DECIMAL(10,2) | Ex: 350.75 |
| Frequencia_Visitas | Frequência de visitas ao estabelecimento | VARCHAR(50) | Ex: "Semanal", "Mensal", "Trimestral" |
| Servico_Principal | Serviço mais utilizado pelo cliente | VARCHAR(50) | Ex: "Banho", "Consulta veterinária", "Hotelzinho" |
| Nota_Satisfacao | Nota de satisfação dada pelo cliente | INT | Escala de 0 a 10 (ou conforme definido) |
| Id_Client | Identificador do cliente que respondeu | INT (FK) | Chave estrangeira (referencia a entidade Cliente) |
O sistema de gestão (CRUDs e BI) está completo, mas a fundação do banco de dados permite a implementação de módulos operacionais:
- Módulo de Ponto de Venda (PDV): Uma interface para registrar
VendaseConsultasem tempo real, interagindo com as tabelas transacionais (Venda,contem,Consulta_Atende). - Módulo de Registro de Serviços: Interface para registrar
Consultasem tempo real, interagindo com a tabelaConsulta_Atende. - Adicionar Faturamento a Serviços: Refatorar o banco de dados para adicionar uma coluna
valorna tabelaConsulta_Atende, permitindo que o módulo "Registrar Serviço" se torne também um fluxo financeiro. - Módulo de Agenda: Uma tela de calendário para veterinários visualizarem e gerenciarem seus horários (
Consulta_Atende).
Distribuído sob a licença MIT. Veja LICENSE para mais informações.

















