# 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)

```
┌─────────────────┐     HTTP/REST     ┌─────────────────┐
│   React SPA     │ ◄──────────────► │  NestJS API     │
│   (Vite)        │     JWT Bearer    │  (TypeORM)      │
│   Port 5173     │                   │  Port 3000      │
└─────────────────┘                   └────────┬────────┘
                                               │
                                      ┌────────▼────────┐
                                      │  SQLite / PG    │
                                      └─────────────────┘
```

## 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

```
backend/
├── src/
│   ├── main.ts                    # Bootstrap da aplicação
│   ├── app.module.ts              # Módulo raiz
│   ├── common/                    # Guards, decorators, pipes, interceptors
│   │   ├── guards/
│   │   │   ├── jwt-auth.guard.ts
│   │   │   └── roles.guard.ts
│   │   ├── decorators/
│   │   │   ├── roles.decorator.ts
│   │   │   └── current-user.decorator.ts
│   │   └── interceptors/
│   │       └── audit.interceptor.ts
│   ├── database/                  # Configuração TypeORM, migrations, seeds
│   │   ├── database.module.ts
│   │   ├── migrations/
│   │   └── seeds/
│   └── modules/
│       ├── auth/                  # Autenticação JWT, login, refresh token
│       │   ├── auth.controller.ts
│       │   ├── auth.service.ts
│       │   ├── auth.module.ts
│       │   ├── strategies/
│       │   │   └── jwt.strategy.ts
│       │   └── dto/
│       ├── users/                 # CRUD de usuários e perfis
│       │   ├── users.controller.ts
│       │   ├── users.service.ts
│       │   ├── entities/
│       │   │   ├── usuario.entity.ts
│       │   │   └── perfil.entity.ts
│       │   └── dto/
│       ├── locais/                # Gestão de locais/unidades
│       ├── centros-custo/         # Centros de custo vinculados a locais
│       ├── categorias/            # Categorias de serviço
│       ├── fornecedores/          # Cadastro de fornecedores e certidões
│       ├── demandas/              # Abertura e gestão de demandas
│       ├── propostas/             # Recebimento e comparação de propostas
│       ├── orcamento/             # Orçamento planejado vs realizado
│       ├── workflow/              # Máquina de estados de aprovação
│       ├── dashboard/             # Indicadores e relatórios
│       ├── ordens-servico/        # Emissão e acompanhamento de OS
│       ├── esg/                   # Métricas ESG e sustentabilidade
│       ├── kpis/                  # Indicadores de performance
│       ├── audit/                 # Auditoria e compliance avançado
│       ├── import/                # Importação de dados Excel/CSV
│       ├── relatorios/            # Relatórios automatizados
│       ├── metas/                 # Metas e acompanhamento de progresso
│       └── alertas-inteligentes/  # Configuração e verificação de alertas
├── test/
├── nest-cli.json
├── tsconfig.json
└── package.json
```

### 3.2 Frontend

```
frontend/
├── src/
│   ├── main.tsx                   # Entry point
│   ├── App.tsx                    # Router + Layout
│   ├── assets/                    # Imagens, ícones
│   ├── components/                # Componentes reutilizáveis
│   │   ├── Layout/
│   │   ├── Sidebar/
│   │   ├── Header/
│   │   ├── DataTable/
│   │   ├── StatusBadge/
│   │   └── Charts/
│   ├── pages/
│   │   ├── Login.tsx              # Tela de autenticação
│   │   ├── Dashboard.tsx          # Painel de indicadores
│   │   ├── Demandas.tsx           # Lista de demandas com filtros
│   │   ├── Landing.tsx            # Página inicial / nova demanda
│   │   ├── Fornecedores.tsx       # Gestão de fornecedores
│   │   ├── Orcamentos.tsx         # Orçamento planejado vs realizado
│   │   ├── OrdensServico.tsx      # Ordens de serviço
│   │   ├── Relatorios.tsx         # Relatórios gerenciais
│   │   ├── Usuarios.tsx           # Administração de usuários
│   │   ├── ESG.tsx                # Dashboard ESG e métricas ambientais
│   │   ├── KPIs.tsx               # Painel de indicadores de performance
│   │   ├── Auditoria.tsx          # Logs de auditoria e compliance
│   │   ├── Importacao.tsx         # Upload de planilhas Excel/CSV
│   │   ├── Metas.tsx              # Metas e progresso por centro de custo
│   │   └── Alertas.tsx            # Configuração de alertas inteligentes
│   ├── services/                  # Axios clients e API calls
│   │   └── api.ts
│   ├── types/                     # Interfaces TypeScript
│   └── index.css                  # Tailwind directives
├── vite.config.ts
├── tailwind.config.js
├── tsconfig.json
└── package.json
```

## 4. Modelo de Dados

### 4.1 Diagrama de Entidades

O sistema possui 21 entidades principais:

```
perfis ──< usuarios ──< demandas ──< itens_linha
                │              │
                │              ├──< propostas
                │              │
                │              ├──< workflow_aprovacao
                │              │
                │              └──< ordens_servico ──< avaliacoes
                │
                └──< audit_log

locais ──< centros_custo ──< orcamento_planejado

categorias ──< demandas

fornecedores ──< certidoes
fornecedores ──< propostas

alertas (standalone)

locais ──< esg_metricas
locais ──< esg_metas

centros_custo ──< kpis
centros_custo ──< metas

centros_custo ──< alertas_config
categorias ──< alertas_config
```

### 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`:**
```json
// Request
{
  "local_id": 3,
  "tipo": "energia",
  "valor": 12500.50,
  "unidade_medida": "kWh",
  "periodo": "2025-06",
  "observacoes": "Consumo sede administrativa"
}
// Response 201
{
  "id": 42,
  "local_id": 3,
  "tipo": "energia",
  "valor": 12500.50,
  "unidade_medida": "kWh",
  "periodo": "2025-06",
  "created_at": "2025-06-30T14:00:00Z"
}
```

**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`:**
```json
// Response 200
{
  "periodo": "2025-06",
  "kpis": [
    {
      "nome": "orcamento_consumido",
      "valor": 78.5,
      "unidade": "%",
      "status": "verde",
      "centro_custo": "ADM-001"
    },
    {
      "nome": "tempo_medio_os",
      "valor": 12.3,
      "unidade": "dias",
      "status": "amarelo",
      "centro_custo": "ADM-001"
    }
  ]
}
```

### 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`:**
```json
// Response 200
{
  "total": 245,
  "page": 1,
  "data": [
    {
      "id": 1023,
      "usuario": "joao.silva@empresa.com",
      "acao": "UPDATE",
      "entidade": "demandas",
      "entidade_id": 87,
      "dados_antes": { "status": "EM_COTACAO" },
      "dados_depois": { "status": "PROPOSTAS_RECEBIDAS" },
      "ip": "192.168.1.50",
      "created_at": "2025-06-15T10:32:00Z"
    }
  ]
}
```

### 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):**
```json
// Request: file=planilha.xlsx, tipo=orcamento
// Response 200
{
  "status": "success",
  "registros_importados": 48,
  "registros_com_erro": 2,
  "erros": [
    { "linha": 15, "campo": "valor_planejado", "mensagem": "Valor inválido" },
    { "linha": 32, "campo": "centro_custo_id", "mensagem": "Centro de custo não encontrado" }
  ]
}
```

### 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`:**
```json
// Response 200
{
  "periodo": "2025",
  "ranking": [
    {
      "posicao": 1,
      "fornecedor": "TechServ Ltda",
      "rating": 4.8,
      "total_os": 23,
      "valor_total": 187500.00,
      "sla_cumprido": 95.6
    }
  ]
}
```

### 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`:**
```json
// Request
{
  "centro_custo_id": 5,
  "tipo": "orcamento",
  "descricao": "Reduzir gastos com manutenção em 10%",
  "valor_alvo": 90,
  "unidade": "%",
  "prazo": "2025-12-31"
}
// Response 201
{
  "id": 12,
  "centro_custo_id": 5,
  "tipo": "orcamento",
  "descricao": "Reduzir gastos com manutenção em 10%",
  "valor_alvo": 90,
  "valor_atual": 0,
  "percentual_atingido": 0,
  "status": "em_andamento",
  "prazo": "2025-12-31",
  "created_at": "2025-02-09T15:00:00Z"
}
```

### 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`:**
```json
// Request
{
  "tipo": "orcamento_excedido",
  "centro_custo_id": 5,
  "limite_percentual": 85,
  "notificar_usuarios": [1, 3, 7],
  "ativo": true
}
// Response 201
{
  "id": 8,
  "tipo": "orcamento_excedido",
  "centro_custo_id": 5,
  "limite_percentual": 85,
  "notificar_usuarios": [1, 3, 7],
  "ativo": true,
  "created_at": "2025-02-09T15:00:00Z"
}
```

**Total: 95 endpoints**

## 6. Autenticação e Autorização

### 6.1 Fluxo JWT

1. Usuário faz POST `/api/auth/login` com email e senha
2. Backend valida credenciais e retorna `{ accessToken, refreshToken }`
3. Frontend armazena tokens e envia `Authorization: Bearer <accessToken>` em todas as requests
4. Token expira em 1h; refresh token expira em 7d
5. Frontend usa `/api/auth/refresh` para renovar automaticamente

### 6.2 Guards NestJS

```typescript
@UseGuards(JwtAuthGuard, RolesGuard)
@Roles('admin', 'gestor_facilities')
@Get('demandas')
findAll() { ... }
```

- **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

```
RASCUNHO → EM_ESCOPO → EM_COTAÇÃO → PROPOSTAS_RECEBIDAS
    → EM_COMPARAÇÃO → AGUARDANDO_APROVAÇÃO → APROVADA
    → OS_EMITIDA → EM_EXECUÇÃO → CONCLUÍDA → AVALIADA

Estados alternativos:
    AGUARDANDO_APROVAÇÃO → REJEITADA
    AGUARDANDO_APROVAÇÃO → DEVOLVIDA → EM_ESCOPO
    Qualquer estado → CANCELADA
```

### 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

```bash
cd backend
cp .env.example .env          # Ajustar variáveis
npm install
npm run build
npm run migration:run         # Criar tabelas
npm run seed                  # Dados iniciais
npm start                     # Porta 3000
```

### 8.3 Frontend

```bash
cd frontend
cp .env.example .env          # VITE_API_URL=http://localhost:3000/api
npm install
npm run dev                   # Porta 5173
```

### 8.4 Acesso Inicial

- **Admin:** admin@hefesto.com.br / admin123
- **Swagger:** http://localhost:3000/api/docs

## 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

```nginx
server {
    listen 443 ssl;
    server_name hefesto.exemplo.com.br;

    ssl_certificate /etc/letsencrypt/live/hefesto.exemplo.com.br/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/hefesto.exemplo.com.br/privkey.pem;

    # Frontend (build estático)
    location / {
        root /var/www/hefesto/frontend/dist;
        try_files $uri $uri/ /index.html;
    }

    # API Backend
    location /api {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
```

### 9.3 PM2

```bash
cd /var/www/hefesto/backend
pm2 start dist/main.js --name hefesto-api
pm2 save
pm2 startup
```

## 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*
