HEFESTO — Manual Técnico
Sistema de Controle Orçamentário para Facilities
Versão 2.0 | Fevereiro 2025
1. Visão Geral da Arquitetura
O HEFESTO é uma aplicação web fullstack composta por:
- Backend: API REST em NestJS (Node.js) com TypeORM
- Frontend: SPA em React + TypeScript com Vite
- Banco de Dados: SQLite (desenvolvimento) / PostgreSQL (produção)
- Autenticação: JWT com RBAC (Role-Based Access Control)
2. Stack Completa
| Componente |
Tecnologia |
Versão |
| Runtime |
Node.js |
22.x LTS |
| Backend Framework |
NestJS |
10.x |
| ORM |
TypeORM |
0.3.x |
| Frontend Framework |
React |
18.x |
| Build Tool |
Vite |
5.x |
| Linguagem |
TypeScript |
5.x |
| UI Components |
Tailwind CSS |
3.x |
| BD Desenvolvimento |
SQLite3 |
5.x |
| BD Produção |
PostgreSQL |
16.x |
| Auth |
@nestjs/jwt + passport |
10.x |
| HTTP Client |
Axios |
1.x |
| Validação |
class-validator |
0.14.x |
| Documentação API |
@nestjs/swagger |
7.x |
3. Estrutura de Pastas
3.1 Backend
3.2 Frontend
4. Modelo de Dados
4.1 Diagrama de Entidades
O sistema possui 21 entidades principais:
4.2 Descrição das Entidades
| # |
Entidade |
Descrição |
Campos Principais |
| 1 |
perfis |
Perfis de acesso (RBAC) |
id, nome, descricao, permissoes (JSON) |
| 2 |
usuarios |
Usuários do sistema |
id, nome, email, senha_hash, perfil_id, ativo, ultimo_acesso |
| 3 |
locais |
Unidades/edifícios |
id, nome, endereco, cidade, estado, cnpj, ativo |
| 4 |
centros_custo |
Centros de custo por local |
id, codigo, descricao, local_id, ativo |
| 5 |
categorias |
Categorias de serviço |
id, nome, descricao, sla_dias, ativo |
| 6 |
fornecedores |
Cadastro de fornecedores |
id, razao_social, cnpj, contato, email, telefone, ativo, rating |
| 7 |
certidoes |
Certidões de fornecedores |
id, fornecedor_id, tipo, arquivo_url, validade, status |
| 8 |
orcamento_planejado |
Budget por centro de custo/ano |
id, centro_custo_id, ano, mes, valor_planejado, valor_realizado |
| 9 |
demandas |
Demandas de serviço |
id, titulo, descricao, local_id, categoria_id, solicitante_id, status, prioridade, valor_estimado, created_at |
| 10 |
itens_linha |
Itens detalhados da demanda |
id, demanda_id, descricao, quantidade, unidade, valor_unitario |
| 11 |
propostas |
Propostas de fornecedores |
id, demanda_id, fornecedor_id, valor_total, arquivo_url, data_validade, status, observacoes |
| 12 |
workflow_aprovacao |
Etapas de aprovação |
id, demanda_id, etapa, aprovador_id, status, comentario, data_acao |
| 13 |
ordens_servico |
Ordens de serviço emitidas |
id, demanda_id, proposta_id, numero_os, data_inicio, data_fim_prevista, data_fim_real, status |
| 14 |
avaliacoes |
Avaliação pós-execução |
id, ordem_servico_id, avaliador_id, nota, comentario, created_at |
| 15 |
audit_log |
Log de auditoria |
id, usuario_id, acao, entidade, entidade_id, dados_antes, dados_depois, ip, created_at |
| 16 |
alertas |
Notificações e alertas |
id, usuario_id, tipo, mensagem, lido, referencia_tipo, referencia_id, created_at |
| 17 |
esg_metricas |
Métricas ambientais ESG |
id, local_id, tipo (energia/agua/residuos/emissoes_co2), valor, unidade_medida, periodo, observacoes, created_at |
| 18 |
esg_metas |
Metas ESG |
id, local_id, tipo, descricao, valor_alvo, valor_atual, percentual_atingido, status, prazo, created_at |
| 19 |
kpis |
Indicadores de performance calculados |
id, nome, valor, unidade, status_semaforo, centro_custo_id, periodo, calculated_at |
| 20 |
metas |
Metas por centro de custo |
id, centro_custo_id, tipo (orcamento/operacional/esg), descricao, valor_alvo, valor_atual, percentual_atingido, status, prazo, created_at |
| 21 |
alertas_config |
Configuração de alertas inteligentes |
id, tipo, centro_custo_id, categoria_id, limite_percentual, notificar_usuarios (JSON), ativo, created_at |
4.3 Perfis de Acesso (RBAC)
| Perfil |
Permissões |
| Admin |
Acesso total ao sistema, gestão de usuários e configurações |
| Gestor Facilities |
CRUD de demandas, fornecedores, propostas, OS; aprovação nível 1 |
| Aprovador Financeiro |
Aprovação nível 2 (financeiro), visualização de orçamento |
| Diretoria |
Aprovação nível 3 (alçada máxima), dashboard executivo |
| Solicitante |
Abertura de demandas, acompanhamento do próprio pedido |
| Fornecedor |
Envio de propostas, acompanhamento de OS atribuídas |
5. API — Endpoints
5.1 Autenticação (/api/auth)
| Método |
Rota |
Descrição |
| POST |
/api/auth/login |
Login com email/senha → JWT |
| POST |
/api/auth/refresh |
Renovar token |
| POST |
/api/auth/logout |
Invalidar token |
| GET |
/api/auth/me |
Dados do usuário logado |
| POST |
/api/auth/forgot-password |
Solicitar reset de senha |
| POST |
/api/auth/reset-password |
Resetar senha com token |
5.2 Usuários (/api/users)
| Método |
Rota |
Descrição |
| GET |
/api/users |
Listar usuários (paginado) |
| GET |
/api/users/:id |
Detalhes do usuário |
| POST |
/api/users |
Criar usuário |
| PATCH |
/api/users/:id |
Atualizar usuário |
| DELETE |
/api/users/:id |
Desativar usuário |
| GET |
/api/perfis |
Listar perfis |
5.3 Locais (/api/locais)
| Método |
Rota |
Descrição |
| GET |
/api/locais |
Listar locais |
| GET |
/api/locais/:id |
Detalhes do local |
| POST |
/api/locais |
Criar local |
| PATCH |
/api/locais/:id |
Atualizar local |
| DELETE |
/api/locais/:id |
Desativar local |
5.4 Centros de Custo (/api/centros-custo)
| Método |
Rota |
Descrição |
| GET |
/api/centros-custo |
Listar centros de custo |
| GET |
/api/centros-custo/:id |
Detalhes |
| POST |
/api/centros-custo |
Criar centro de custo |
| PATCH |
/api/centros-custo/:id |
Atualizar |
| DELETE |
/api/centros-custo/:id |
Desativar |
5.5 Categorias (/api/categorias)
| Método |
Rota |
Descrição |
| GET |
/api/categorias |
Listar categorias |
| GET |
/api/categorias/:id |
Detalhes |
| POST |
/api/categorias |
Criar categoria |
| PATCH |
/api/categorias/:id |
Atualizar |
| DELETE |
/api/categorias/:id |
Desativar |
5.6 Fornecedores (/api/fornecedores)
| Método |
Rota |
Descrição |
| GET |
/api/fornecedores |
Listar fornecedores |
| GET |
/api/fornecedores/:id |
Detalhes com certidões |
| POST |
/api/fornecedores |
Cadastrar fornecedor |
| PATCH |
/api/fornecedores/:id |
Atualizar fornecedor |
| DELETE |
/api/fornecedores/:id |
Desativar |
| POST |
/api/fornecedores/:id/certidoes |
Upload de certidão |
| GET |
/api/fornecedores/:id/certidoes |
Listar certidões |
| DELETE |
/api/fornecedores/:id/certidoes/:certidaoId |
Remover certidão |
5.7 Demandas (/api/demandas)
| Método |
Rota |
Descrição |
| GET |
/api/demandas |
Listar demandas (filtros: status, local, categoria, período) |
| GET |
/api/demandas/:id |
Detalhes completos da demanda |
| POST |
/api/demandas |
Criar nova demanda |
| PATCH |
/api/demandas/:id |
Atualizar demanda |
| DELETE |
/api/demandas/:id |
Cancelar demanda |
| POST |
/api/demandas/:id/itens |
Adicionar item de linha |
| PATCH |
/api/demandas/:id/itens/:itemId |
Atualizar item |
| DELETE |
/api/demandas/:id/itens/:itemId |
Remover item |
| POST |
/api/demandas/:id/enviar-cotacao |
Enviar para cotação |
| GET |
/api/demandas/:id/comparativo |
Comparativo de propostas |
5.8 Propostas (/api/propostas)
| Método |
Rota |
Descrição |
| GET |
/api/propostas |
Listar propostas |
| GET |
/api/propostas/:id |
Detalhes da proposta |
| POST |
/api/propostas |
Submeter proposta (fornecedor) |
| PATCH |
/api/propostas/:id |
Atualizar proposta |
| DELETE |
/api/propostas/:id |
Retirar proposta |
| POST |
/api/propostas/:id/aceitar |
Aceitar proposta |
| POST |
/api/propostas/:id/rejeitar |
Rejeitar proposta |
| POST |
/api/propostas/:id/ocr |
Processar OCR do arquivo |
5.9 Orçamento (/api/orcamento)
| Método |
Rota |
Descrição |
| GET |
/api/orcamento |
Orçamento geral (filtros: ano, local, centro_custo) |
| GET |
/api/orcamento/:id |
Detalhes da linha orçamentária |
| POST |
/api/orcamento |
Criar linha orçamentária |
| PATCH |
/api/orcamento/:id |
Atualizar valores |
| GET |
/api/orcamento/resumo |
Resumo planejado vs realizado |
| GET |
/api/orcamento/projecao |
Projeção de gastos |
5.10 Workflow (/api/workflow)
| Método |
Rota |
Descrição |
| GET |
/api/workflow/pendentes |
Aprovações pendentes do usuário logado |
| GET |
/api/workflow/demanda/:demandaId |
Histórico de aprovações da demanda |
| POST |
/api/workflow/aprovar |
Aprovar etapa |
| POST |
/api/workflow/rejeitar |
Rejeitar etapa |
| POST |
/api/workflow/devolver |
Devolver para correção |
| GET |
/api/workflow/alçadas |
Consultar alçadas configuradas |
5.11 Dashboard (/api/dashboard)
| Método |
Rota |
Descrição |
| GET |
/api/dashboard/indicadores |
KPIs gerais |
| GET |
/api/dashboard/demandas-por-status |
Demandas agrupadas por status |
| GET |
/api/dashboard/gastos-por-local |
Gastos por unidade |
| GET |
/api/dashboard/gastos-por-categoria |
Gastos por categoria |
| GET |
/api/dashboard/evolucao-mensal |
Série temporal de gastos |
| GET |
/api/dashboard/top-fornecedores |
Ranking de fornecedores |
| GET |
/api/dashboard/sla |
Indicadores de SLA |
5.12 Ordens de Serviço (/api/ordens-servico)
| Método |
Rota |
Descrição |
| GET |
/api/ordens-servico |
Listar OS |
| GET |
/api/ordens-servico/:id |
Detalhes da OS |
| POST |
/api/ordens-servico |
Emitir OS |
| PATCH |
/api/ordens-servico/:id |
Atualizar OS |
| POST |
/api/ordens-servico/:id/iniciar |
Marcar início da execução |
| POST |
/api/ordens-servico/:id/concluir |
Marcar conclusão |
| POST |
/api/ordens-servico/:id/avaliar |
Avaliar serviço prestado |
5.13 Alertas (/api/alertas)
| Método |
Rota |
Descrição |
| GET |
/api/alertas |
Listar alertas do usuário |
| PATCH |
/api/alertas/:id/lido |
Marcar como lido |
| DELETE |
/api/alertas/:id |
Remover alerta |
5.14 ESG / Sustentabilidade (/api/esg)
| Método |
Rota |
Descrição |
| GET |
/api/esg/metricas |
Listar métricas ambientais (filtros: unidade, período, tipo) |
| POST |
/api/esg/metricas |
Registrar métrica ambiental |
| PATCH |
/api/esg/metricas/:id |
Atualizar métrica |
| DELETE |
/api/esg/metricas/:id |
Remover métrica |
| GET |
/api/esg/dashboard |
Dashboard consolidado ESG por unidade/período |
| GET |
/api/esg/metas |
Listar metas ESG |
| POST |
/api/esg/metas |
Criar meta ESG |
| PATCH |
/api/esg/metas/:id |
Atualizar meta ESG |
| GET |
/api/esg/metas/:id/progresso |
Progresso da meta ESG |
Exemplo — POST /api/esg/metricas:
Tipos de métricas suportados: energia (kWh), agua (m³), residuos (kg), emissoes_co2 (tCO₂e).
5.15 KPIs — Indicadores de Performance (/api/kpis)
| Método |
Rota |
Descrição |
| GET |
/api/kpis |
Listar KPIs calculados (filtros: categoria, ano, centro_custo) |
| GET |
/api/kpis/dashboard |
Dashboard de KPIs com status semáforo |
KPIs calculados automaticamente:
| KPI |
Fórmula |
Verde |
Amarelo |
Vermelho |
| % Orçamento Consumido |
realizado / planejado × 100 |
≤ 80% |
81–100% |
> 100% |
| Tempo Médio de OS |
média(data_fim_real - data_inicio) |
≤ SLA |
SLA+20% |
> SLA+20% |
| Rating Fornecedores |
média das avaliações |
≥ 4.0 |
3.0–3.9 |
< 3.0 |
| Taxa Conclusão Demandas |
concluídas / total × 100 |
≥ 90% |
70–89% |
< 70% |
Exemplo — GET /api/kpis/dashboard:
5.16 Auditoria e Compliance (/api/audit)
| Método |
Rota |
Descrição |
| GET |
/api/audit/logs |
Trilha de auditoria completa (filtros: usuario, entidade, período, ação) |
| GET |
/api/audit/compliance-report |
Relatório de conformidade por período |
| GET |
/api/audit/export |
Exportação de logs em CSV ou JSON (?format=csv|json) |
Exemplo — GET /api/audit/logs?entidade=demandas&periodo_inicio=2025-06-01:
5.17 Importação de Dados (/api/import)
| Método |
Rota |
Descrição |
| POST |
/api/import/excel |
Upload de planilha Excel/CSV com validação automática |
Tipos de importação: orcamento, demandas.
Exemplo — POST /api/import/excel (multipart/form-data):
5.18 Relatórios Automatizados (/api/relatorios)
| Método |
Rota |
Descrição |
| GET |
/api/relatorios/orcamento-mensal |
Relatório de orçamento mensal (filtros: ano, mês, local) |
| GET |
/api/relatorios/demandas-periodo |
Demandas por período com status e valores |
| GET |
/api/relatorios/fornecedores-ranking |
Ranking de fornecedores com nota, valor e volume |
| GET |
/api/relatorios/os-performance |
Performance de OS (SLA, tempo médio, conclusão) |
Todos os relatórios suportam ?format=json|csv|pdf.
Exemplo — GET /api/relatorios/fornecedores-ranking?ano=2025&limit=10:
5.19 Metas e Progresso (/api/metas)
| Método |
Rota |
Descrição |
| GET |
/api/metas |
Listar metas (filtros: centro_custo, tipo, status) |
| POST |
/api/metas |
Criar meta |
| PATCH |
/api/metas/:id |
Atualizar meta |
| DELETE |
/api/metas/:id |
Remover meta |
| GET |
/api/metas/progresso |
Progresso geral de todas as metas |
| GET |
/api/metas/:id/progresso |
Progresso de meta específica |
Tipos de meta: orcamento, operacional, esg.
Status: em_andamento, atingida, atrasada.
Exemplo — POST /api/metas:
5.20 Alertas Inteligentes (/api/alertas)
Nota: Os endpoints abaixo complementam os alertas básicos da seção 5.13 com configuração avançada e verificação automática.
| Método |
Rota |
Descrição |
| POST |
/api/alertas/configurar |
Configurar regra de alerta inteligente |
| GET |
/api/alertas/configurar |
Listar configurações de alertas |
| PATCH |
/api/alertas/configurar/:id |
Atualizar configuração |
| DELETE |
/api/alertas/configurar/:id |
Remover configuração |
| POST |
/api/alertas/verificar |
Disparar verificação manual de todos os alertas |
Tipos de alerta: orcamento_excedido, certidao_vencendo, os_atrasada, meta_em_risco.
Exemplo — POST /api/alertas/configurar:
Total: 95 endpoints
6. Autenticação e Autorização
6.1 Fluxo JWT
- Usuário faz POST
/api/auth/login com email e senha
- Backend valida credenciais e retorna
{ accessToken, refreshToken }
- Frontend armazena tokens e envia
Authorization: Bearer <accessToken> em todas as requests
- Token expira em 1h; refresh token expira em 7d
- Frontend usa
/api/auth/refresh para renovar automaticamente
6.2 Guards NestJS
- JwtAuthGuard: valida o token JWT
- RolesGuard: verifica se o perfil do usuário está na lista de roles permitidas
- @CurrentUser(): decorator customizado que injeta o usuário logado
7. Workflow de Aprovação
7.1 Máquina de Estados
7.2 Alçadas de Aprovação
| Faixa de Valor |
Aprovador |
| Até R$ 5.000 |
Gestor Facilities |
| R$ 5.001 — R$ 50.000 |
Gestor Facilities + Aprovador Financeiro |
| R$ 50.001 — R$ 200.000 |
Gestor + Financeiro + Diretoria |
| Acima de R$ 200.000 |
Gestor + Financeiro + Diretoria + CEO |
Cada etapa gera um registro em workflow_aprovacao com timestamp, aprovador e comentário.
8. Como Rodar Localmente
8.1 Pré-requisitos
- Node.js 22.x
- npm 10.x
- Git
8.2 Backend
8.3 Frontend
8.4 Acesso Inicial
9. Deploy em Produção
9.1 Infraestrutura
- Servidor: DigitalOcean Droplet (Ubuntu 24.04, 2 vCPU, 4GB RAM)
- Proxy reverso: Nginx
- SSL: Let's Encrypt (Certbot)
- Processo: PM2 (backend) / Nginx serve build estático (frontend)
- BD: PostgreSQL 16
9.2 Nginx Config
9.3 PM2
10. Variáveis de Ambiente
Backend (.env)
| Variável |
Descrição |
Exemplo |
NODE_ENV |
Ambiente |
production |
PORT |
Porta da API |
3000 |
DB_TYPE |
Tipo de banco |
postgres |
DB_HOST |
Host do banco |
localhost |
DB_PORT |
Porta do banco |
5432 |
DB_USERNAME |
Usuário do banco |
hefesto |
DB_PASSWORD |
Senha do banco |
*** |
DB_DATABASE |
Nome do banco |
hefesto_prod |
JWT_SECRET |
Chave secreta JWT |
minha-chave-secreta-256bits |
JWT_EXPIRATION |
Tempo de expiração do access token |
3600s |
JWT_REFRESH_EXPIRATION |
Tempo de expiração do refresh token |
7d |
CORS_ORIGIN |
Origem permitida |
https://hefesto.exemplo.com.br |
OCR_API_KEY |
Chave da API de OCR |
*** |
SMTP_HOST |
Servidor SMTP |
smtp.gmail.com |
SMTP_PORT |
Porta SMTP |
587 |
SMTP_USER |
Usuário SMTP |
noreply@hefesto.com.br |
SMTP_PASS |
Senha SMTP |
*** |
Frontend (.env)
| Variável |
Descrição |
Exemplo |
VITE_API_URL |
URL base da API |
https://hefesto.exemplo.com.br/api |
VITE_APP_NAME |
Nome da aplicação |
HEFESTO |
Documento gerado automaticamente — HEFESTO v2.0