Sistema de gestão operacional e financeira voltado para agências, prestadores de serviços e empresas de tecnologia. Centraliza clientes, projetos, ordens de serviço, assinaturas, cobranças e relatórios financeiros em uma única plataforma self-hosted.
| Módulo | Descrição |
|---|---|
| Clientes | Cadastro completo com endereço, contatos, dia de vencimento e histórico |
| Projetos | Vinculados a clientes, com subprojetos e fixação no dashboard |
| Produtos | Catálogo de serviços e produtos com valor de referência |
| Fornecedores | Cadastro de fornecedores para controle de despesas |
| Módulo | Descrição |
|---|---|
| Ordens de Serviço | Criação, acompanhamento e controle de status; apontamentos de horas; geração de orçamento/fatura/recibo em PDF |
| Assinaturas | Cobranças recorrentes (mensal/anual) com renovação automática de protocolos |
| Módulo | Descrição |
|---|---|
| Protocolos | Acordo financeiro por OS ou assinatura com itens de serviço, produtos, recibos, parcelamento e desconto |
| Cobranças | Consolidação de protocolos em faturas por cliente; ciclo pendente → faturada → pago |
| Contas a Pagar | Controle de despesas e pagamentos com categorias por centro de custo |
| Contas Bancárias | Saldo em tempo real, transferências entre contas, suporte a IBAN/SWIFT para pagamentos internacionais |
| Invoice Internacional | Geração de invoice em PDF no padrão exterior (USD/EUR/GBP/BRL) a partir de uma OS |
| Relatórios | Fluxo de Caixa, DRE e Relatório de Despesas |
| Módulo | Descrição |
|---|---|
| Servidores | Cadastro e vínculo de servidores/licenças a clientes e assinaturas |
- Backend: Node.js · TypeScript · Fastify v4
- Banco de dados: MySQL · Sequelize v6
- Frontend: Vue.js 2 (Options API) · Bootstrap 5 · Axios
- PDF: Puppeteer + EJS templates
- Autenticação: JWT + bcrypt
- E-mail: Nodemailer / Resend
- Storage: AWS S3 (upload de arquivos de cobrança)
- Node.js >= 18
- MySQL >= 8
- Google Chrome instalado (para geração de PDFs via Puppeteer)
# Ubuntu/Debian
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt install ./google-chrome-stable_current_amd64.deb# 1. Clone o repositório
git clone https://github.com/santos-jp7/DevEfficiency.git
cd DevEfficiency
# 2. Instale as dependências
npm install
# 3. Configure as variáveis de ambiente
cp .env.example .env
# Edite o .env com suas credenciais
# 4. Build
npm run build
# 5. Inicie o servidor
npm startO banco de dados é criado e atualizado automaticamente no startup via
Sequelize.sync({ alter: true })— sem migrations manuais.
NODE_ENV=production
PORT=3002
# JWT
SECRET=sua_chave_secreta_forte
# MySQL
DB_NAME=devefficiency
DB_USER=root
DB_PASS=senha
DB_HOST=localhost
# E-mail (Nodemailer)
EMAIL_FROM=noreply@suaempresa.com
EMAIL_NAME=DevEfficiency
EMAIL_USER=usuario@smtp.com
EMAIL_PASS=senha_smtp
EMAIL_HOST=smtp.suaempresa.com
EMAIL_CC=admin@suaempresa.comApós iniciar o servidor, acesse http://localhost:3002.
As configurações da empresa (nome, CNPJ, endereço, logo) são definidas em Gestão → Configurações após o primeiro login. Os valores padrão são populados automaticamente no startup via seed.
src/
├── controllers/ # Handlers das rotas (Fastify)
├── hooks/ # Hooks Sequelize (lógica de negócio em beforeSave/afterUpdate)
├── models/ # Modelos Sequelize com associações
├── routes.ts # Registro de todas as rotas
├── views/ # Templates EJS para geração de PDFs
├── seeds/ # Dados iniciais (configurações padrão)
├── utils/ # Utilitários (baixa de cobrança, envio de e-mail etc.)
├── sync.ts # Sincronização do banco de dados
├── app.ts # Configuração do Fastify
└── public/ # Frontend estático (HTML + Vue.js por módulo)
Os PDFs são renderizados server-side via Puppeteer + EJS sem dependências externas de serviço.
| Documento | Endpoint | Template |
|---|---|---|
| Orçamento / Fatura / Recibo (cliente) | GET /api/protocols/pdf?ClientId=X&type=... |
budget_multi.ejs |
| Orçamento de OS | GET /api/os/:id/pdf |
budget.ejs |
| Fatura de cobrança | GET /api/billings/:id/pdf |
billing.ejs |
| Invoice Internacional | GET /api/os/:id/invoice-pdf?currency=USD&BankAccountId=X |
invoice_exterior.ejs |
OS / Assinatura
└── Protocolo (itens · recibos · desconto · parcelas)
└── [Liberado para pagamento]
└── Cobrança pendente
└── [upload NF/boleto] → faturada
└── [baixa] → pago
└── Protocolo fechado
└── Nova renovação (assinatura recorrente)
- Fork o repositório
- Crie uma branch:
git checkout -b feature/minha-funcionalidade - Commit:
git commit -m 'feat: descrição da mudança' - Push:
git push origin feature/minha-funcionalidade - Abra um Pull Request