Micro-ERP acadêmico desenvolvido para a disciplina de Sistemas de Informações Gerenciais.
O projeto implementa o ciclo operacional de uma pequena empresa comercial:
- cadastros mestres
- compras
- estoque
- vendas
- financeiro
- contabilidade básica
Além do backend em Node.js com Express e Sequelize, o sistema também possui uma interface web simples servida pelo próprio servidor.
- Node.js
- Express
- MySQL
- Sequelize ORM
- JavaScript
- HTML, CSS e JavaScript no frontend
O backend segue estrutura em camadas:
src/
controllers/
services/
models/
routes/
database/
middlewares/
utils/
public/
server.js
package.json
Fluxo principal:
Route -> Controller -> Service -> Model
- cadastro, consulta, edição, exclusão e desabilitação de clientes
- cadastro, consulta, edição, exclusão e desabilitação de fornecedores
- cadastro, consulta, edição, exclusão e desabilitação de produtos
- SKU único por produto através do campo
codigo - cálculo e armazenamento de margem de lucro
- controle de estoque mínimo
- cadastro e gestão de usuários
- login com autenticação por token
- perfis de acesso
ADMINeVENDEDOR - cadastro e consulta de plano de contas com estrutura hierárquica
- emissão de pedido de compra
- confirmação de recebimento
- desconto por compra
- registro de NF de entrada
- forma de pagamento
- geração automática de conta a pagar
- atualização automática de estoque
- atualização de custo médio
- lançamento contábil da compra recebida
- entrada automática por compra
- saída automática por venda
- bloqueio de estoque negativo por padrão
- log de movimentações com produto, tipo, quantidade, usuário e motivo
- relatório de necessidade de compra
- emissão de pedido de venda com múltiplos itens
- baixa imediata de estoque
- gravação do preço e custo unitário nos itens da venda
- geração automática de conta a receber
- cálculo simples de imposto sobre venda
- comprovante simples da venda em JSON ou HTML
- listagem de contas a receber
- listagem de contas a pagar
- baixa de títulos
- estorno de baixa
- fluxo de caixa resumido
- lançamentos contábeis automáticos para:
- compra recebida
- venda
- recebimento
- pagamento
- estorno de recebimento
- estorno de pagamento
- relatórios de:
- lucratividade
- impostos
- balanço patrimonial
- DRE
- venda reduz estoque automaticamente
- compra aumenta estoque automaticamente
- o sistema grava o preço unitário da venda no item vendido
- não é permitido editar ou baixar novamente uma conta já paga sem estorno
- o estorno devolve a conta para
PENDENTE - toda compra e venda gera movimentação de estoque
- o vendedor tem acesso apenas ao necessário para operação comercial
- o administrador possui acesso total
- acesso total ao sistema
- gerencia usuários, produtos, fornecedores, compras, financeiro, relatórios e plano de contas
- consulta produtos
- consulta, cria e edita clientes
- registra vendas
- acessa dashboard
Antes de rodar o projeto, você precisa ter instalado:
- Node.js
- MySQL Server 8
Crie um arquivo .env na raiz do projeto com base no exemplo abaixo:
PORT=3000
DB_HOST=localhost
DB_PORT=3306
DB_NAME=micro_erp_academico
DB_USER=root
DB_PASSWORD=123456
AUTH_SECRET=meu-segredo
DEFAULT_ADMIN_EMAIL=admin@microerp.local
DEFAULT_ADMIN_PASSWORD=admin123
SALES_TAX_PERCENT=10
ALLOW_SALE_WITHOUT_STOCK=falsenpm installModo normal:
npm startModo desenvolvimento:
npm run devDepois disso, acesse:
- frontend: http://localhost:3000
- health check: http://localhost:3000/health
O projeto usa sequelize.sync() para criar e ajustar as tabelas automaticamente.
Se o banco ainda não existir, crie no MySQL:
CREATE DATABASE micro_erp_academico;Se o banco estiver vazio, o sistema cria automaticamente um administrador padrão:
- email:
admin@microerp.local - senha:
admin123
Esses valores podem ser alterados pelas variáveis:
DEFAULT_ADMIN_EMAILDEFAULT_ADMIN_PASSWORD
Todas as rotas, exceto login, exigem autenticação com token Bearer.
POST /auth/loginGET /auth/me
POST /produtosGET /produtosGET /produtos/:idPUT /produtos/:idPATCH /produtos/:id/desabilitarDELETE /produtos/:id
POST /clientesGET /clientesGET /clientes/:idPUT /clientes/:idPATCH /clientes/:id/desabilitarDELETE /clientes/:id
POST /fornecedoresGET /fornecedoresGET /fornecedores/:idPUT /fornecedores/:idPATCH /fornecedores/:id/desabilitarDELETE /fornecedores/:id
POST /usuariosGET /usuariosGET /usuarios/:idPUT /usuarios/:idPATCH /usuarios/:id/desabilitarDELETE /usuarios/:id
POST /plano-contasGET /plano-contasGET /plano-contas/:idPUT /plano-contas/:idPATCH /plano-contas/:id/desabilitarDELETE /plano-contas/:id
POST /comprasPOST /compras/receberPOST /compras/contas-pagar/baixar
POST /vendasGET /vendas/:id/comprovanteGET /vendas/:id/comprovante?formato=html
GET /contas-receberPOST /contas-receber/baixarPOST /contas-receber/estornarGET /contas-pagarPOST /contas-pagar/baixarPOST /contas-pagar/estornarGET /fluxo-caixa
GET /relatorios/necessidade-compraGET /relatorios/lucratividadeGET /relatorios/impostosGET /relatorios/balancoGET /relatorios/dre
POST /auth/login
Content-Type: application/json
{
"email": "admin@microerp.local",
"senha": "admin123"
}POST /produtos
Authorization: Bearer SEU_TOKEN
Content-Type: application/json
{
"nome": "Notebook",
"codigo": "SKU-001",
"preco_custo": 2500,
"preco_venda": 3200,
"estoque": 10,
"estoque_minimo": 2
}POST /vendas
Authorization: Bearer SEU_TOKEN
Content-Type: application/json
{
"cliente_id": 1,
"desconto": 50,
"itens": [
{
"produto_id": 1,
"quantidade": 2
}
]
}- o frontend é servido localmente pela pasta
public/ - as permissões variam conforme o perfil do usuário autenticado
- o banco pode ser ajustado automaticamente ao reiniciar o servidor
- o sistema foi construído com foco acadêmico e demonstrativo
Projeto acadêmico do sistema Meu ERP.