Flow ERP é um ERP para pequenas e médias empresas (PME) focado em controle de estoque e vendas. A solução possui backend construído com Node.js, TypeScript, Express e Prisma ORM, utilizando PostgreSQL como banco de dados.
- Auth: autenticação JWT com bcrypt, middleware de roles (ADMIN, VENDEDOR, ESTOQUISTA)
- Users: CRUD completo com proteção de roles, hash de senha no update e proteção do último ADMIN
- Categories: CRUD com proteção contra exclusão de categoria com produtos vinculados
- Products: CRUD com soft delete (deactivate), estoque inicial na criação, preço de custo e venda, SKU único
- Customers: CRUD com soft delete, validação matemática de CPF e CNPJ, proteção contra exclusão com vendas vinculadas
- Stock: controle de estoque com soft lock (reserve/release), entrada, saída, ajuste manual, alerta de estoque baixo e histórico de movimentações
- Sales: criação de pedido com múltiplos itens, reserva de estoque, confirmação de pagamento, cancelamento com liberação de estoque, correlationId para rastreamento
- Payments: processamento de pagamento com idempotency key, estorno com devolução ao estoque
- AuditLog: rastreamento de todas as operações com correlationId, listagem por usuário e por operação
- Runtime: Node.js
- Linguagem: TypeScript
- Framework: Express
- ORM: Prisma v7
- Banco de dados: PostgreSQL
- Autenticação: JWT (
jsonwebtoken) - Hash de senha: bcrypt
- Testes: Jest, ts-jest, jest-mock-extended
- Documentação: Swagger (
swagger-ui-express,swagger-jsdoc) - Container: Docker
Padrão Route → Controller → Service → Prisma → PostgreSQL
routes/: definição das rotas com middlewares de autenticação e autorização por rolecontrollers/: recebe a requisição HTTP, valida entrada básica e chama o serviceservices/: lógica de negócio, validações e transaçõesmiddleware/:isAuthenticated(JWT) eisAuthorized(roles)shared/errors.ts: classeAppErrorcomstatusCodepara padronizar erros HTTPshared/validators.ts: validação matemática de CPF e CNPJ (algoritmo Receita Federal)lib/prisma.ts: instância global dePrismaClientcom adapterPrismaPgdocs/:swagger.ts+ arquivos YML por módulo
POST /sales→ valida cliente, usuário e estoque → cria venda → reserva estoque (soft lock) → geracorrelationIdPATCH /sales/:id/payment→ confirma pagamento com idempotency key → baixa definitiva no estoque → registra no AuditLogPATCH /sales/:id/cancel→ cancela venda → libera estoque reservado → registra no AuditLogPATCH /payments/:id/refund→ estorna pagamento → devolve ao estoque → registra no AuditLog
Todas as rotas têm prefixo /api/v1
- Auth:
POST /sessions - Users:
GET /users,POST /users,PUT /users/:id,DELETE /users/:id - Me:
GET /me - Categories:
GET /categories,POST /categories,PUT /categories/:id,DELETE /categories/:id - Products:
GET /products,GET /products/:id,POST /products,PUT /products/:id,PATCH /products/:id/deactivate - Customers:
GET /customers,GET /customers/:id,POST /customers,PUT /customers/:id,PATCH /customers/:id/deactivate - Stock:
GET /stock/:productId,GET /stock/:productId/movements,GET /stock/low,POST /stock/entry,POST /stock/adjustment - Sales:
GET /sales,GET /sales/:id,POST /sales,PATCH /sales/:id/payment,PATCH /sales/:id/cancel - Payments:
GET /payments,GET /payments/:id,POST /payments,PATCH /payments/:id/refund - Audit:
GET /audit,GET /audit/user/:userId,GET /audit/correlation/:correlationId - Docs:
GET /api/v1/docs(Swagger UI)
DATABASE_URL="postgresql://usuario:senha@localhost:5432/bold_stock"
PORT=3000
NODE_ENV=development
JWT_SECRET="sua_chave_secreta"npm run dev # inicia em modo desenvolvimento
npm run build # compila TypeScript
npm test # roda os testes
npm run test:coverage # testa com relatório de coberturabackend/
├── prisma/
│ └── schema.prisma
└── src/
├── controllers/
├── services/
├── routes/
├── middleware/
├── shared/
├── lib/
├── docs/
├── __tests__/
└── server.ts
UserCustomerCategoryProductStockStockMovementSaleSaleItemPaymentAuditLog
Role:ADMIN,VENDEDOR,ESTOQUISTASaleStatus:PENDING,CONFIRMED,CANCELLEDPaymentMethod:PIX,CARD,CASHPaymentStatus:PENDING,CONFIRMED,FAILED,REFUNDEDMovementType:ENTRY,EXIT,RESERVE,RELEASE,ADJUSTMENT
- ADMIN: acesso total
- VENDEDOR: clientes, leitura de produtos, vendas e fiscal
- ESTOQUISTA: produtos, estoque e categorias
- Framework: Jest com ts-jest
- Mock: jest-mock-extended para simular Prisma sem banco real
- Cobertura: 85% geral
- Casos: 91 testes no total
- Arquivos:
src/__tests__/com um arquivo por módulo
A documentação da API está disponível em:
GET /api/v1/docs
- Configure o
.envantes de iniciar o servidor - Execute
npm run migrateapós configurar o banco - Use o Swagger para explorar os endpoints e testar a API
⚠️ Projeto em desenvolvimento. Novas funcionalidades estão previstas para futuras versões.
Produced by Zenith Studios - Gomezz.Dev