# API Reference — BI-CCC

Documentação dos endpoints HTTP do sistema BI-CCC.

## Base URL

```
http://localhost:3080
```

## Autenticação

O sistema usa autenticação baseada em sessão. Após login bem-sucedido, um cookie de sessão é enviado automaticamente pelo browser.

**Cookie:** `connect.sid`
**Duração:** 8 horas

---

## Endpoints de Autenticação

### POST /login

Processa tentativa de login.

**Content-Type:** `application/x-www-form-urlencoded`

| Campo | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| email | string | Sim | Email do usuário |
| senha | string | Sim | Senha em texto plano |

**Response:** `302` redirect para `/dashboard` (agente), `/corporate` (admin/corporate), ou `/login?error=1` (falha).

**Dados da Sessão:**
```javascript
req.session.agente = {
  id: 1,                    // ID interno SQLite
  email: "user@email.com",
  agente_id: 76,            // ID do agente no RDS (null para admin/corporate)
  nome: "Nome",
  role: "admin"             // admin | corporate | agente
}
```

### GET /logout

Destrói sessão e redireciona para `/login`.

---

## Páginas HTML (Server-Side Rendered)

Todas requerem autenticação via cookie de sessão.

| Rota | Role | Descrição |
|------|------|-----------|
| `GET /corporate` | admin, corporate | Corporate Dashboard |
| `GET /admin/bi` | admin | BI Executive Dashboard |
| `GET /admin/cliente` | admin | Client 360 |
| `GET /admin` | admin | Gestão de Usuários |
| `GET /admin/home` | admin | Daily Overview |
| `GET /admin/providers` | admin | Payment Providers |
| `GET /dashboard` | agente | Dashboard pessoal do agente |

---

## APIs REST — Corporate

Todas retornam JSON e requerem role `admin` ou `corporate`.

### GET /corporate/api/kpis

KPIs de hoje vs média 30 dias.

**Response:**
```json
{
  "hoje": { "total_ops": 42, "volume_brl": 500000, "volume_usd": 100000, "ticket_medio": 2380 },
  "media30d": { "total_ops": 35, "volume_brl": 420000, ... }
}
```

### GET /corporate/api/trend

Tendência dos últimos 30 dias (volume diário).

### GET /corporate/api/top-agentes

Top 5 agentes por volume.

| Param | Tipo | Default | Descrição |
|-------|------|---------|-----------|
| dias | number | 30 | Período em dias (7, 30, 90) |

### GET /corporate/api/kpis-period

KPIs por período customizado.

| Param | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| inicio | date | Sim | Data início (YYYY-MM-DD) |
| fim | date | Sim | Data fim (YYYY-MM-DD) |

### GET /corporate/api/trend-period

Tendência por período customizado.

| Param | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| inicio | date | Sim | Data início |
| fim | date | Sim | Data fim |

---

## APIs REST — BI Executive

Requerem role `admin`.

### GET /admin/api/bi

Dashboard BI completo: KPIs, tendências, ranking de agentes, retenção.

| Param | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| start | date | Sim | Data início (YYYY-MM-DD) |
| end | date | Sim | Data fim (YYYY-MM-DD) |

**Response:** Objeto com `kpis`, `kpisPrev`, `trend`, `topAgentes`, `topClientes`, `retention`.

### GET /admin/api/bi/revenue

Revenue analytics por produto com granularidade.

| Param | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| start | date | Sim | Data início |
| end | date | Sim | Data fim |
| granularity | string | Não | `day`, `month`, `year` (default: `month`) |

### GET /admin/api/bi/strategic

BI estratégico: cohort retention, revenue expansion/contraction, cross-sell, maturidade.

| Param | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| start | date | Sim | Data início |
| end | date | Sim | Data fim |

---

## APIs REST — Client 360

Requerem role `admin`.

### GET /admin/api/clientes/top

Top 20 clientes por volume total (lifetime).

### GET /admin/api/clientes/search

Busca clientes por nome.

| Param | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| q | string | Sim | Termo de busca (mín. 2 caracteres) |

### GET /admin/api/cliente/:id/profile

Profile lifetime do cliente: stats gerais, health score, merchant detection.

| Param | Tipo | Descrição |
|-------|------|-----------|
| id | number | `id_conta` do cliente |

### GET /admin/api/cliente/:id/data

Dados detalhados do cliente por período: KPIs, transações, timeline, insights.

| Param | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| id | number | Sim | `id_conta` do cliente |
| start | date | Sim | Data início |
| end | date | Sim | Data fim |

---

## APIs REST — Outras

### GET /api/cotacao

Cotação USD/BRL em tempo real (proxy para API externa AwesomeAPI).

**Autenticação:** Requerida (qualquer role)

**Response:**
```json
{
  "bid": "5.0123",
  "ask": "5.0234",
  "timestamp": "1706889600"
}
```

---

## Middleware

### requireAuth

Verifica se há sessão ativa. Redireciona para `/login` se não autenticado.

### requireRole(role)

Verifica se o usuário tem a role necessária. Retorna `403` se não autorizado. Admin tem acesso a todas as rotas.

---

## Códigos de Erro

| Código | Significado | Causa Comum |
|--------|-------------|-------------|
| 302 | Redirect | Login/logout, acesso não autorizado |
| 403 | Forbidden | Role insuficiente |
| 500 | Erro interno | Falha conexão RDS, erro de query |
