← Voltar ao índice

🛒 BWC PDV

PDV multi-loja para comércios — vendas (frente de caixa + código de barras + NFC-e), estoque, compras, RH e dashboards.

URL: pdv.bwccorp.com.br
Frontend: Next.js 16
Banco: SQLite (Prisma + libsql)
Repo: local (sem push ainda)
Status: 🟡 Deploy em andamento — porta 3051
Next.js 16 React 19 Prisma SQLite / libsql Tailwind CSS 4 Recharts TypeScript

Especificação do Produto

Missão

Sistema de PDV completo para comércios multi-loja — frente de caixa com leitura de código de barras, emissão de NFC-e, controle de estoque com alertas de mínimo, gestão de compras e fornecedores, módulo de RH e dashboards de vendas com gráficos.

Usuários-alvo

Lojistas, operadores de caixa, gerentes de estoque e gestores de pequenos e médios comércios

Infra

Next.js 16 — porta 3051 → Caddy Reverse Proxy → pdv.bwccorp.com.br

Módulos implementados
Modelos Prisma (10 models)

Store, User, Category, Product, Supplier, Purchase, PurchaseItem, Sale, SaleItem, StockMovement, Employee

Endpoints principais da API

Lojas — /api/stores

GET/api/stores
Lista todas as lojas ativas.
POST/api/stores
Cria nova loja. Body: { name, cnpj?, slug }.

Produtos — /api/products

GET/api/products?storeId=
Lista produtos da loja com categorias. Suporta filtro por storeId.
POST/api/products
Cadastra produto. Body: { storeId, name, barcode?, sku?, categoryId?, costPrice, salePrice, unit, stockQty, minStock, ncm?, cfop? }
GET/api/products/:id
Detalhe do produto com movimentações de estoque e itens de venda.
PUT/api/products/:id
Atualiza produto (todos os campos editáveis).
DELETE/api/products/:id
Remove produto (soft ou hard delete).
POST/api/products/:id/adjust
Ajuste manual de estoque. Body: { qty, reason? }. Registra StockMovement tipo ADJUST.

Categorias — /api/categories

GET/api/categories?storeId=
Lista categorias da loja.
POST/api/categories
Cria categoria. Body: { storeId, name }.

Vendas — /api/sales

GET/api/sales?storeId=
Lista vendas da loja com itens e produtos. Ordena por data decrescente.
POST/api/sales
Registra venda (frente de caixa). Body: { storeId, userId?, customerName?, customerDoc?, paymentMethod?, discount?, items: [{ productId, qty, unitPrice, discount? }] }. Deduz estoque automaticamente e registra StockMovement SALE.

Compras — /api/purchases

GET/api/purchases?storeId=
Lista ordens de compra com fornecedor e itens.
POST/api/purchases
Cria ordem de compra. Body: { storeId, supplierId?, items: [{ productId, qty, unitCost }] }. Gera número NF-XXXXXX sequencial.
PATCH/api/purchases/:id
Atualiza status da compra (ex: DRAFT → RECEIVED). Ao receber, incrementa estoque e registra StockMovement PURCHASE.

Fornecedores — /api/suppliers

GET/api/suppliers?storeId=
Lista fornecedores da loja.
POST/api/suppliers
Cadastra fornecedor. Body: { storeId, name, cnpj?, phone?, email? }.

RH — /api/employees

GET/api/employees?storeId=
Lista funcionários ativos da loja ordenados por nome.
POST/api/employees
Cadastra funcionário. Body: { storeId, name, cpf?, role?, admissionDate?, salary?, phone? }.
PUT/api/employees/:id
Atualiza dados do funcionário.
DELETE/api/employees/:id
Desativa funcionário (soft delete — active: false).

Dashboard — /api/dashboard

GET/api/dashboard?storeId=
Métricas consolidadas: salesToday, salesCount, avgTicket, lowStockCount, chartData (7 dias), topProducts (top 5 por faturamento).

Seed — /api/seed

POST/api/seed
Popula banco com dados iniciais de demonstração (loja, categorias, produtos, fornecedores, funcionários).

Arquitetura de Deploy

bwc-pdv (Next.js 16 — porta 3051)
  └─ SQLite / libsql (adapter Prisma)
       ↑
  Caddy Reverse Proxy → pdv.bwccorp.com.br (HTTPS)
       ↑
  pdv.bwccorp.com.br

Gerado automaticamente — BlackCat Corp • Voltar ao índice