01 - Arquitetura do Projeto
🏗️ Visão Geral
A Central Utils é uma plataforma multi-camadas que combina Node.js, Python e Go para processar e automatizar tarefas administrativas e contábeis de empresas. A arquitetura é baseada em microsserviços com uma interface web unificada.
🔄 Fluxo de Dados
┌─────────────────────────────────────────────────────────────────┐
│ FRONTEND (Web Browser) │
│ HTML + JavaScript | Autenticação | Upload de Arquivos │
└─────────────┬──────────────────────────────────────────────────┘
│
├─────── HTTP/REST ────────────┐
│ │
▼ ▼
┌─────────────────────┐ ┌─────────────────────┐
│ Node.js Server │ │ Python FastAPI │
│ (Express) │ │ (Microsserviços) │
│ │ │ │
│ • Socket.io │ │ • PDF Processing │
│ • Auth (Serpro) │◄────►│ • Excel Handling │
│ • File Upload │ │ • Data Transform │
│ • Queue Manager │ │ • Report Generation │
│ • Proxy/Gateway │ │ │
└────────┬────────────┘ └────────┬────────────┘
│ │
│ ┌──────────────────┘
│ │
▼ ▼
┌──────────────────────────┐
│ PostgreSQL Database │
│ (Tabelas principais) │
└──────────────────────────┘
┌──────────────────────────┐
│ Filesystem Storage │
│ (data/uploads/, etc) │
└──────────────────────────┘
📊 Componentes Principais
1️⃣ Frontend (Aplicação Web)
Localização: public/ + src/
Responsabilidades: - Interface de usuário responsiva - Upload de arquivos - Exibição de resultados - Gerenciamento de sessão do usuário - Comunicação em tempo real (Socket.io)
Tecnologias: - HTML5, CSS3, JavaScript vanilla - Sem frameworks (mantém simplicidade) - FormData API para uploads - Fetch API para requisições
Arquivos Principais:
- public/*.html - Páginas individuais
- public/js/*.js - Lógica de cada ferramenta
- public/js/sidebar.js - Menu lateral
- public/js/auth-client.js - Gerenciamento de autenticação
- public/js/upload-helper.js - Utilitários de upload
2️⃣ Backend Node.js (Orquestrador)
Localização: src/
Responsabilidades: - Servidor web principal (Express) - Autenticação de usuários (SERPRO) - Roteamento de requisições - Gerenciamento de uploads - Processamento de filas (background jobs) - WebSocket (Socket.io) para comunicação real-time
Tecnologias: - Express.js - Socket.io - Multer (upload) - axios (requisições HTTP) - pg (PostgreSQL driver) - node-forge (criptografia) - bcryptjs (hash de senhas)
Arquivos Principais:
| Arquivo | Responsabilidade |
|---|---|
src/server.js |
Servidor Express principal, rotas CRUD, endpoints da API |
src/worker.js |
Processador de filas (jobs background) |
src/serpro-auth.js |
Autenticação com SERPRO (tokens, MTLS) |
src/queue.js |
Gerenciador de fila de processamento |
src/parsers.js |
Utilitários de parse (CSV, XML, JSON) |
3️⃣ Backend Python (Microsserviços)
Localização: api/
Responsabilidades: - Processamento de PDFs - Processamento de Excel - Manipulação de dados - Geração de relatórios - Extração de informações
Tecnologias: - FastAPI (web framework) - Uvicorn (ASGI server) - pdfplumber (leitura PDF) - pandas (análise de dados) - openpyxl (manipulação Excel) - PyPDF2 (operações PDF) - PyMuPDF (renderização PDF)
Cores de Processamento (API Modules):
| Módulo | Função |
|---|---|
gerador_atas_core.py |
Gera atas de reunião em Word/PDF |
relatorio_ferias_core.py |
Extrai e separa relatórios de férias |
holerites_core.py |
Separa holerites por empresa |
separador_ferias_funcionario_core.py |
Organiza dados de férias |
separador_csv_baixa_automatica_core.py |
Processa planilhas de baixa |
excel_abas_pdf_core.py |
Converte Excel em PDF |
comprimir_pdf_core.py |
Reduz tamanho de PDFs |
extrator_zip_rar_core.py |
Extrai arquivos compactados |
importador_recebimentos_madre_scp_core.py |
Integração MADRE |
ajuste_diario_gfbr_core.py |
Ajustes contábeis |
integra_api.py |
API principal que expõe os cores |
4️⃣ Backend Go (Opcional)
Localização: go-api/
Responsabilidades: - Processamento de alta performance - Cálculos pesados (quando necessário) - Pode estar desativado
Comando para iniciar:
cd go-api && go run .
🔐 Segurança e Autenticação
Fluxo de Autenticação
1. Usuário faz login na web
↓
2. Requisição POST /login com credenciais
↓
3. server.js autentica com SERPRO (mTLS)
↓
4. SERPRO retorna token JWT
↓
5. Token armazenado no navegador (localStorage/cookie)
↓
6. Requisições subsequentes incluem token no header
↓
7. server.js valida token em cada requisição
Arquivo: src/serpro-auth.js
- Gerencia certificados MTLS
- Cria e valida tokens JWT
- Renova tokens expirados
📤 Fluxo de Upload e Processamento
1. Usuário faz upload no frontend
↓
2. Frontend envia arquivo para server.js (Multer)
↓
3. server.js valida arquivo e move para data/uploads/
↓
4. Cria job na fila de processamento
↓
5. worker.js processa o job:
- Chama microsserviço Python adequado
- Monitora progresso
- Envia eventos via Socket.io
↓
6. Python API processa e retorna resultado
↓
7. Resultado salvo em data/outputs/
↓
8. Frontend notificado via Socket.io
↓
9. Usuário baixa resultado
🗂️ Estrutura de Dados
Diretórios Principais em data/
data/
├── uploads/ # Arquivos subidos
├── outputs/ # Resultados processados
├── atas_geradas/ # Atas geradas
├── atas_modelos/ # Templates de atas
├── excel-abas-pdf/ # Resultados Excel→PDF
├── separador-csv-baixa-automatica/
├── extrator-zip-rar/ # Arquivos extraídos
├── balancete-transitorio/ # Balancetes
├── conciliador-hausen-ocean/ # Dados de conciliação
├── dimob/ # Dados DIMOB
├── ecd-status/ # Status de ECDs
├── pdfa/ # Conversão PDF/A
├── ferias-funcionario/ # Dados de férias
└── formatador-bernardina/ # Dados do formatador
Banco de Dados (PostgreSQL)
Conexão definida em src/server.js:
const pool = new Pool({
host: process.env.DB_HOST,
port: process.env.DB_PORT,
database: process.env.DB_NAME,
user: process.env.DB_USER,
password: process.env.DB_PASS
});
Tabelas esperadas:
- usuarios - Dados de login
- jobs - Fila de processamento
- logs - Auditoria
- (outras conforme necessário)
🔌 APIs Externas Integradas
SERPRO (Governo)
- Autenticação com mTLS
- Certificados em
src/(privado) - API para validação e consultas
MADRE SCP
- Importação de recebimentos
- Documentado em
api/importador_recebimentos_madre_scp_core.py
🚀 Sequência de Inicialização
Desenvolvimento (npm run dev)
$ npm run dev
# Inicia em paralelo:
1. npm run dev:node → Node.js server (porta 3000)
2. npm run dev:py → FastAPI (porta 8001)
3. npm run dev:go → Go API (porta 8002)
Ordem recomendada de inicialização:
1. PostgreSQL (rodar manualmente ou Docker)
2. Python (uvicorn api.integra_api:app --host 127.0.0.1 --port 8001)
3. Node.js (node src/server.js)
4. Frontend abre em http://localhost:3000
Produção
Veja docs/deployment/01-deploy.md
📊 Padrões de Comunicação
REST API
Node.js Server Endpoints:
- POST /api/login - Autenticação
- POST /api/upload - Upload de arquivo
- POST /api/job/:toolName - Iniciar processamento
- GET /api/job/:jobId/status - Status do job
- GET /api/logs - Logs da aplicação
WebSocket (Socket.io)
Eventos emitidos:
- user:authenticated - Usuário autenticado
- job:started - Job iniciado
- job:progress - Progresso do job
- job:completed - Job completado
- job:error - Erro no processamento
- file:ready - Arquivo pronto para download
🔍 Monitoramento e Logs
- Logs Node.js:
console.log→ terminal ou arquivo - Logs Python:
loggingmodule →data/logs/ - Logs Frontend:
consoledo navegador - Auditoria: Tabela
logsno PostgreSQL
🎯 Próximas Seções
Última atualização: Fevereiro 2026