Um Sistema de Ponto de Venda moderno, modular e escalável projetado para facilitar a colaboração entre desenvolvedores.
| Campo | Descrição |
|---|---|
| Status | ✅ Em Desenvolvimento Ativo |
| Versão | 1.0.0 |
| Licença | MIT |
| Autores | Paulo Dias, Maria Eliza, Iago |
PDV ModernoMS é um sistema de ponto de venda (PDV) moderno, modular e escalável para pequenos e médios comércios. O projeto foi desenvolvido com foco em simplicidade, performance e facilidade de colaboração entre desenvolvedores.
- ✅ Interface Limpa: Design intuitivo baseado em Bootstrap 5.3
- ✅ Operações Rápidas: Poucas cliques para realizar vendas
- ✅ Controle de Estoque: Gerenciamento automático de inventário
- ✅ Autenticação Segura: Sistema de login com roles e permissões
- ✅ Modular: Código organizado em módulos independentes
- ✅ Escalável: Arquitetura preparada para crescimento
Antes de começar, certifique-se de ter instalado:
- PHP >= 8.2
- Composer (Gerenciador de dependências PHP)
- Docker e Docker Compose (para banco de dados)
- Git (controle de versão)
- Symfony CLI (opcional, mas recomendado)
git clone https://github.com/seu-usuario/pdv-mscode-2025.git
cd pdv-mscode-2025# Instalar dependências PHP via Composer
composer install
# Instalar asset mapper (CSS, JS, etc)
php bin/console importmap:install# Copiar arquivo .env.example para .env
cp .env.example .env
# Iniciar containers Docker (MySQL)
docker-compose up -d
# Aguarde alguns segundos para o MySQL inicializar completamente
sleep 10
# Executar migrations (criação de tabelas)
php bin/console doctrine:migrations:migrate# Alguns dados de exemplo já são inseridos nas migrations
# Verifique o banco de dados para confirmar# Iniciar servidor de desenvolvimento
symfony server:start
# Ou usando PHP nativo
php -S localhost:8000 -t public
# A aplicação estará disponível em: http://localhost:8000- URL:
http://localhost:8000 - Login Padrão: (verifique o banco de dados ou migrations)
Gerenciamento completo do ponto de venda em tempo real.
| Funcionalidade | Descrição |
|---|---|
| Nova Venda | Iniciar novo carrinho de compras |
| Adicionar Produtos | Digitar código e adicionar automaticamente |
| Selecionar Cliente | Vincular cliente à venda |
| Remover Produtos | Retirar itens do carrinho |
| Forma de Pagamento | Dinheiro, Cartão, Cheque, PIX |
| Cálculo de Troco | Automático conforme valor recebido |
| Cancelar Venda | Desfazer venda em andamento |
| Histórico | Visualizar todas as vendas realizadas |
Gerenciamento completo de inventário.
| Funcionalidade | Descrição |
|---|---|
| Criar Produto | Nome, código único, preço, quantidade |
| Editar Produto | Atualizar informações |
| Deletar Produto | Soft delete (inativar) |
| Restaurar Produto | Reativar produtos |
| Buscar Produtos | Pesquisa por nome ou código |
| Status de Estoque | Em Estoque / Baixo Estoque / Fora de Estoque |
| Listagem Filtrada | Ver produtos com filtros avançados |
Gerenciamento de dados e histórico de clientes.
| Funcionalidade | Descrição |
|---|---|
| Criar Cliente | Nome, CPF, data de nascimento, contato |
| Editar Cliente | Atualizar informações |
| Deletar Cliente | Soft delete (inativar) |
| Restaurar Cliente | Reativar clientes |
| Detalhes | Visualizar informações completas |
| Endereços | Múltiplos endereços por cliente |
| Histórico de Vendas | Ver todas as compras do cliente |
Gerenciamento de acesso e permissões.
| Funcionalidade | Descrição |
|---|---|
| Criar Usuário | Nome, email, telefone, senha |
| Editar Usuário | Atualizar dados |
| Deletar Usuário | Inativar usuário |
| Restaurar Usuário | Reativar usuário |
| Roles | ROLE_USER, ROLE_ADMIN |
| Autenticação | Login com email e senha |
| Autorização | Permissões baseadas em roles |
Rastreamento de entrada e saída de estoque.
| Funcionalidade | Descrição |
|---|---|
| Registrar Movimentação | Entrada, Saída, Ajuste, Devolução |
| Histórico Completo | Rastreamento total de movimentações |
| Tipos | Entrada, Saída, Ajuste, Devolução |
Visualização de dados em tempo real.
| Funcionalidade | Descrição |
|---|---|
| Resumo de Vendas | Total do dia/período |
| Estoque Baixo | Alertas de produtos com pouca quantidade |
| Produtos Mais Vendidos | Ranking de vendas |
| Gráficos | Visualização intuitiva de dados |
O projeto segue a arquitetura MVC (Model-View-Controller) com uma camada de Services para lógica de negócio complexa.
┌─────────────────────────────────────────┐
│ Frontend (Templates - Twig) │
└────────────────┬────────────────────────┘
│
┌────────────────▼────────────────────────┐
│ Controllers (Requisições HTTP) │
└────────────────┬────────────────────────┘
│
┌────────────────▼────────────────────────┐
│ Services (Lógica de Negócio) │
└────────────────┬────────────────────────┘
│
┌────────────────▼────────────────────────┐
│ Repositories (Acesso ao Banco) │
└────────────────┬────────────────────────┘
│
┌────────────────▼────────────────────────┐
│ Entities (Modelos de Dados) │
└──────────────────────────────────────────┘
pdv-mscode-2025/
│
├── 📁 assets/ # Arquivos estáticos (CSS, JS)
│ ├── app.js # JavaScript principal
│ ├── bootstrap.js # Configuração Bootstrap
│ ├── controllers/ # Stimulus Controllers
│ └── styles/ # Estilos CSS
│
├── 📁 bin/ # Binários executáveis
│ └── console # CLI do Symfony
│
├── 📁 config/ # Configuração da aplicação
│ ├── packages/ # Configuração dos bundles
│ ├── routes/ # Definição de rotas
│ ├── services.yaml # Serviços (DI)
│ └── routes.yaml # Mapeamento de rotas
│
├── 📁 migrations/ # Versionamento do banco de dados
│ └── Version*.php # Migrations numeradas
│
├── 📁 public/ # Raiz acessível ao público
│ └── index.php # Ponto de entrada
│
├── 📁 src/ # Backend (Código principal)
│ ├── Controller/ # Controladores da aplicação
│ │ ├── Caixa/ # Módulo de vendas
│ │ ├── Cliente/ # Módulo de clientes
│ │ ├── Produto/ # Módulo de produtos
│ │ ├── Usuarios/ # Módulo de usuários
│ │ ├── Movimentacao/ # Módulo de movimentações
│ │ ├── Dashboard/ # Dashboard
│ │ └── Seguranca/ # Autenticação
│ │
│ ├── Entity/ # Modelos de dados
│ │ ├── Produtos.php
│ │ ├── Usuarios.php
│ │ ├── Clientes.php
│ │ ├── Vendas.php
│ │ ├── VendasItem.php
│ │ ├── Enderecos.php
│ │ └── Movimentacoes.php
│ │
│ ├── Repository/ # Acesso ao banco de dados
│ │ ├── ProdutosRepository.php
│ │ ├── UsuariosRepository.php
│ │ ├── ClientesRepository.php
│ │ ├── VendasRepository.php
│ │ ├── VendasItemRepository.php
│ │ ├── EnderecosRepository.php
│ │ └── MovimentacoesRepository.php
│ │
│ ├── Services/ # Lógica de negócio
│ │ ├── Authorization/ # Autorização
│ │ ├── Cliente/ # Serviços de cliente
│ │ ├── Produto/ # Serviços de produto
│ │ ├── Usuario/ # Serviços de usuário
│ │ ├── Venda/ # Serviços de venda
│ │ ├── Movimentacao/ # Serviços de movimentação
│ │ ├── Dashboard/ # Serviços do dashboard
│ │ └── Utils/ # Utilitários
│ │
│ ├── Enums/ # Enumerações
│ │ ├── ProdutosStatusEnum.php
│ │ ├── VendasStatusEnum.php
│ │ ├── VendasPagamentoEnum.php
│ │ └── TipoMovimentacoesEnum.php
│ │
│ ├── Exceptions/ # Exceções customizadas
│ └── Kernel.php # Núcleo da aplicação
│
├── 📁 templates/ # Templates Twig (Views)
│ ├── base.html.twig # Template base
│ ├── index.html.twig # Página inicial
│ ├── caixa/ # Templates de vendas
│ ├── clientes/ # Templates de clientes
│ ├── produtos/ # Templates de produtos
│ ├── usuarios/ # Templates de usuários
│ ├── movimentacoes/ # Templates de movimentações
│ ├── dashboard/ # Templates do dashboard
│ ├── seguranca/ # Templates de autenticação
│ └── components/ # Componentes reutilizáveis
│
├── 📁 tests/ # Testes automatizados
│ └── bootstrap.php
│
├── 📁 translations/ # Arquivos de localização
│
├── 📁 var/ # Cache e logs (gerado automaticamente)
│
├── 📄 .env.example # Template de variáveis de ambiente
├── 📄 .editorconfig # Configuração de editor
├── 📄 composer.json # Dependências PHP
├── 📄 composer.lock # Lock file de dependências
├── 📄 docker-compose.yml # Orquestração Docker
├── 📄 phpunit.dist.xml # Configuração de testes
└── 📄 README.md # Você está aqui!
| Tecnologia | Versão | Descrição |
|---|---|---|
| Symfony | 7.3 LTS | Framework PHP moderno |
| Doctrine | 3.5 | ORM para banco de dados |
| Twig | 3.0 | Template engine |
| PHP | >= 8.2 | Linguagem principal |
| Tecnologia | Versão | Descrição |
|---|---|---|
| MySQL | 8.0.32 | Banco relacional |
| Tecnologia | Versão | Descrição |
|---|---|---|
| Bootstrap | 5.3 | Framework CSS |
| Bootstrap Icons | 1.x | Conjunto de ícones |
| Stimulus | JS | Interatividade |
| Turbo | JS | Navegação rápida |
| Tecnologia | Versão | Descrição |
|---|---|---|
| Docker | - | Containerização |
| Docker Compose | - | Orquestração |
Todos os commits devem seguir o padrão abaixo:
<tipo>: <descrição breve>
<corpo detalhado (opcional)>
| Tipo | Descrição | Exemplo |
|---|---|---|
| feat | Nova funcionalidade | feat: Adicionar módulo de movimentações |
| refac | Refatoração de código | refac: Melhorar estrutura de services |
| fix | Correção de bug | fix: Corrigir cálculo de troco |
| chore | Tarefas de manutenção | chore: Atualizar dependências |
| docs | Documentação | docs: Atualizar README |
Título:
[#CODIGO_TASK] [TIPO] Descrição breve
Exemplos:
[#40] [FEAT] Implementar módulo de movimentações[#35] [BUG] Corrigir cálculo de estoque[#42] [REFAC] Melhorar validações de usuário
Descrição PR:
## Descrição
Breve explicação do que foi implementado.
## Screenshots (se aplicável)
Adicione prints da funcionalidade.
## Tipo de Mudança
- [ ] Nova funcionalidade
- [ ] Correção de bug
- [ ] Refatoração
- [ ] Documentação
## Checklist
- [ ] Testado localmente
- [ ] Não há conflitos de merge
- [ ] Segue os padrões do projeto
Tasks são criadas no repositório para organizar o trabalho. Devem conter:
- ✅ Descrição clara e detalhada
- ✅ Critérios de aceitação
- ✅ Screenshots/mockups (quando aplicável)
- ✅ Prioridade
- ✅ Estimativa de esforço (opcional)
Controllers são responsáveis por receber requisições HTTP e retornar respostas.
Estrutura: App\Controller\[Modulo]\[Acao]\Controller
Exemplo: App\Controller\Produto\Criar\Exibir\Controller
Entidades mapeiam tabelas do banco de dados usando Doctrine ORM.
Principais Entidades:
Usuarios- Usuários do sistemaProdutos- Produtos disponíveisClientes- Clientes cadastradosVendas- Vendas realizadasVendasItem- Itens de cada vendaEnderecos- Endereços de clientesMovimentacoes- Movimentações de estoque
Repositories encapsulam queries e operações com o banco de dados.
Responsabilidades:
- Buscar dados (SELECT)
- Criar dados (INSERT)
- Atualizar dados (UPDATE)
- Deletar dados (DELETE - soft delete)
Services contêm a lógica de negócio complexa.
Padrão: App\Services\[Modulo]\[Acao]\[NomeService]Service
Responsabilidades:
- Validações de negócio
- Orquestração de operações
- Lançamento de exceções customizadas
- Cálculos complexos
Enums definem valores fixos e permitidos.
Disponíveis:
ProdutosStatusEnum- Em Estoque, Baixo Estoque, Fora de EstoqueVendasStatusEnum- Em Andamento, Finalizada, CanceladaVendasPagamentoEnum- Dinheiro, Cartão, Cheque, PIXTipoMovimentacoesEnum- Entrada, Saída, Ajuste, Devolução
# Limpar cache
php bin/console cache:clear
# Criar nova entidade
php bin/console make:entity
# Criar nova migration
php bin/console make:migration
# Executar migrations
php bin/console doctrine:migrations:migrate
# Criar novo controller
php bin/console make:controller
# Gerar CRUD completo
php bin/console make:crud Produto
# Listar todas as rotas
php bin/console debug:router
# Criar novo serviço
php bin/console make:service- Sistema de Login: Email + Senha
- Hash: PASSWORD_DEFAULT (bcrypt)
- Sessões: Gerenciadas por Symfony
- Roles: ROLE_USER, ROLE_ADMIN
- Permissões: Baseadas em roles
- Proteção de Rotas: Middleware de autenticação
- Validação de Propriedade: Usuários só acessam seus dados
- ✅ Nunca armazene senhas em texto plano
- ✅ Sempre valide entrada do usuário
- ✅ Use CSRF tokens em formulários
- ✅ Escape output no Twig
- ✅ Use prepared statements (Doctrine)
symfony/framework-bundle: 7.3
symfony/security-bundle: 7.3
doctrine/orm: ^3.5
doctrine/doctrine-bundle: ^2.18
symfony/validator: 7.3
symfony/twig-bundle: 7.3
twig/twig: ^3.0
phpunit/phpunit: ^12.4
symfony/maker-bundle: ^1.0
symfony/web-profiler-bundle: 7.3
# Verificar se containers Docker estão rodando
docker-compose ps
# Reiniciar containers
docker-compose restart
# Ver logs do MySQL
docker-compose logs mysql# Resetar banco (cuidado!)
php bin/console doctrine:database:drop --force
php bin/console doctrine:database:create
php bin/console doctrine:migrations:migrate# Limpar cache completamente
rm -rf var/cache/*
php bin/console cache:clear --no-warmupEste projeto está licenciado sob a MIT License.
Agradecemos a todos os contribuidores e à comunidade por apoiar este projeto!
👨💻 Paulo Dias 👩💻 Maria Eliza 👨💻 Iago