Skip to content

Latest commit

 

History

16 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🛍️ AppVendas - Sistema de Gestão de Vendas

Sistema completo de gestão de vendas, estoque, caixa e relatórios desenvolvido com React Native + Expo e SQLite.

📱 Sobre o Projeto

AppVendas é um MVP de um sistema de gestão comercial mobile-first, projetado para pequenos e médios negócios. O aplicativo oferece controle completo de:

  • Estoque: Gestão de produtos, lotes e códigos de barras
  • Vendas: PDV (Ponto de Venda) completo
  • Caixa: Controle de abertura, fechamento e movimentações
  • Relatórios: Dashboards e análises gerenciais

🚀 Tecnologias

  • React Native com Expo (~51.0.0)
  • TypeScript (strict mode)
  • SQLite (expo-sqlite) - Banco de dados local
  • Expo Router - Navegação file-based
  • React Hook Form + Zod - Formulários e validação
  • Expo Camera - Scanner de código de barras
  • Expo Image Picker - Captura e seleção de imagens

📂 Estrutura do Projeto

app/                    # Rotas (Expo Router)
├── (auth)/            # Autenticação
├── (tabs)/            # Menu principal
├── estoque/           # Módulo de estoque
├── vendas/            # Módulo de vendas
├── caixa/             # Módulo de caixa
└── relatorios/        # Relatórios

components/            # Componentes reutilizáveis
├── ui/               # Componentes base (Button, Input, etc)
├── forms/            # Componentes de formulário
└── estoque/          # Componentes específicos do estoque

lib/                   # Bibliotecas e utilitários
├── database/         # SQLite config e queries
│   ├── migrations/   # Migrations versionadas
│   └── queries/      # Queries organizadas por módulo
├── context/          # React Context (Auth, Toast)
├── hooks/            # Custom hooks
├── utils/            # Funções utilitárias
└── validations/      # Schemas Zod

types/                 # Definições TypeScript
constants/            # Constantes (cores, espaçamento)

🎯 Funcionalidades Principais

📦 Módulo Estoque

Listagem de Produtos

  • Busca por nome com debounce
  • Cards com foto, nome, quantidade e preço
  • Badges de alerta (estoque baixo, validade próxima)
  • Pull to refresh

Cadastro de Produto

  • Dados básicos (nome, preços, quantidade)
  • Scanner de múltiplos códigos de barras
  • Sistema de lotes (número, validade, quantidade)
  • Captura de foto (câmera ou galeria)
  • Validação completa com Zod

Detalhes do Produto

  • Visualização completa das informações
  • Histórico de entradas
  • Opções: Inativar ou Excluir
  • Validação de movimentações antes de excluir

Entrada de Estoque

  • Registro de notas fiscais
  • Seleção múltipla de produtos
  • Atualização de lotes e códigos
  • Atualização automática de quantidades

🔐 Autenticação

  • Login com email e senha
  • Armazenamento seguro (Expo Secure Store)
  • Proteção de rotas
  • Logout com limpeza de sessão

📋 Regras do Cursor

Este projeto utiliza Cursor Rules para guiar o desenvolvimento. As regras estão em .cursor/rules/:

  1. 01-projeto-arquitetura.mdc - Arquitetura geral e princípios
  2. 02-autenticacao-navegacao.mdc - Sistema de auth e rotas
  3. 03-banco-de-dados.mdc - Estrutura do SQLite
  4. 04-modulo-estoque.mdc - Implementação do estoque
  5. 05-componentes-ui.mdc - Design system e componentes
  6. 06-validacao-formatacao.mdc - Validações e formatações
  7. 07-tipos-interfaces.mdc - Tipos TypeScript
  8. 08-dependencias-setup.mdc - Setup e dependências

🛠️ Setup do Projeto

Pré-requisitos

  • Node.js 18+
  • npm ou yarn
  • Expo CLI
  • iOS Simulator (Mac) ou Android Studio (Android)

Instalação

# Clonar o repositório
git clone <repo-url>
cd AppVendas

# Instalar dependências
npm install

# Iniciar o projeto
npx expo start

Dependências Principais

# Banco de dados
npx expo install expo-sqlite expo-file-system

# Formulários
npm install react-hook-form @hookform/resolvers zod

# Câmera e imagens
npx expo install expo-camera expo-image-picker expo-image

# Armazenamento
npx expo install expo-secure-store @react-native-async-storage/async-storage

# UI
npx expo install expo-haptics react-native-reanimated

🗄️ Banco de Dados

Estrutura Principal

  • users - Usuários do sistema
  • produtos - Cadastro de produtos
  • codigos_barras - Múltiplos códigos por produto
  • lotes - Controle de lotes e validade
  • entradas - Notas de entrada
  • itens_entrada - Itens das entradas
  • vendas - Registro de vendas
  • itens_venda - Itens das vendas
  • caixa - Controle de caixa
  • movimentacoes_caixa - Movimentações do caixa

Migrations

O sistema utiliza migrations versionadas em lib/database/migrations/. Para adicionar uma nova migration:

  1. Criar arquivo 00X_nome_migration.ts
  2. Implementar função up(db)
  3. Registrar no array de migrations

🎨 Design System

Cores

  • Primary: #007AFF (light) / #0A84FF (dark)
  • Success: #34C759 / #32D74B
  • Warning: #FF9500 / #FF9F0A
  • Danger: #FF3B30 / #FF453A

Componentes Base

  • Button (variantes: primary, secondary, outline, ghost)
  • Input (com validação e error states)
  • Card (elevated, outlined, filled)
  • Modal
  • Toast
  • Badge
  • Loading

📱 Executando o App

# Desenvolvimento
npx expo start

# Android
npx expo start --android

# iOS
npx expo start --ios

# Web
npx expo start --web

🧪 Scripts Úteis

# Lint
npm run lint

# Type check
npm run type-check

# Format
npm run format

# Reset database (dev)
npm run reset-db

🚀 Build e Deploy

# Instalar EAS CLI
npm install -g eas-cli

# Build Android (APK)
eas build --platform android --profile preview

# Build Android (AAB - produção)
eas build --platform android --profile production

# Build iOS
eas build --platform ios

⚙️ Configuração

Permissões (Android/iOS)

  • Câmera: Scanner de código de barras e foto de produtos
  • Galeria: Seleção de imagens da galeria

Configuradas em app.json:

{
  "plugins": [
    ["expo-camera", { "cameraPermission": "..." }],
    ["expo-image-picker", { "photosPermission": "..." }]
  ]
}

📝 Fluxo de Desenvolvimento

1. Criar Nova Feature

  • Definir tipos em types/
  • Criar schema de validação em lib/validations/
  • Implementar queries em lib/database/queries/
  • Criar componentes em components/
  • Implementar tela em app/

2. Boas Práticas

  • ✅ Sempre usar tipos TypeScript explícitos
  • ✅ Validar formulários com Zod
  • ✅ Usar transações para operações múltiplas no SQLite
  • ✅ Implementar loading states e error handling
  • ✅ Adicionar feedback visual (toast, haptics)
  • ❌ Nunca usar any ou dados mockados
  • ❌ Nunca fazer queries sem prepared statements

🐛 Troubleshooting

Database não inicializa

# Resetar database
npm run reset-db
npx expo start --clear

Permissões não funcionam

# Rebuild do app nativo
npx expo prebuild --clean
npx expo run:android
# ou
npx expo run:ios

Erros de tipo TypeScript

# Regenerar tipos do Expo Router
npx expo customize tsconfig.json

📚 Recursos

📄 Licença

Este projeto está sob a licença MIT.

👥 Contribuindo

  1. Fork o projeto
  2. Crie uma branch para sua feature (git checkout -b feature/AmazingFeature)
  3. Commit suas mudanças (git commit -m 'Add some AmazingFeature')
  4. Push para a branch (git push origin feature/AmazingFeature)
  5. Abra um Pull Request

Desenvolvido com ❤️ usando React Native + Expo

About

aplicativo de vendas e estoque

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages