# BI-CCC (Central Command Center) — CambioReal

Sistema de Business Intelligence interno da CambioReal para monitoramento de operações cambiais, análise de clientes e gestão de agentes.

## O que faz

O BI-CCC consolida dados de três produtos de câmbio em dashboards visuais:

- **CambioPay** (BRL→USD): Clientes brasileiros enviam reais convertidos em dólares para destinatários nos EUA
- **CambioPay Reverso** (USD→BRL): Clientes nos EUA enviam dólares convertidos em reais para o Brasil
- **CambioCheckout** (BR→US via Cobrança): Merchants nos EUA recebem pagamentos de clientes brasileiros via links de cobrança

Os dados transacionais vivem em um banco MySQL (RDS na AWS), acessível via VPN Netbird.

## Stack Técnica

| Camada | Tecnologia |
|--------|-----------|
| Runtime | Node.js 20 (Alpine) |
| Framework | Express 4 |
| Banco transacional | MySQL 8 (AWS RDS) — read-only |
| Banco local | SQLite (better-sqlite3) — usuários/auth |
| Gráficos | Chart.js (inline, sem CDN) |
| Autenticação | bcrypt + express-session |
| VPN | Netbird (acesso ao RDS) |
| Deploy | Docker Compose |
| Tema | Dark/Light toggle, estilo Bloomberg terminal |

## Arquitetura

```
┌─────────────────────────────────────────────────┐
│  Browser                                         │
│  HTML + CSS + JS (tudo server-side rendered)     │
│  Chart.js para gráficos                          │
└───────────────────┬─────────────────────────────┘
                    │ HTTP
┌───────────────────▼─────────────────────────────┐
│  server.js (Express)                             │
│  - Rotas HTML (GET /corporate, /admin/bi, etc)   │
│  - API REST (GET /admin/api/bi, etc)             │
│  - Auth middleware (session + roles)             │
│  - Cache layer (stale-while-revalidate)          │
├──────────────────┬──────────────┬───────────────┤
│  src/queries/    │  src/auth.js │  src/*.js     │
│  (MySQL queries) │  (bcrypt)    │  (HTML builders)│
├──────────┬───────┴──────────────┴───────────────┤
│ db-rds.js│  db-local.js                          │
│ (mysql2) │  (better-sqlite3)                     │
├──────────┴──────────────────────────────────────┤
│  MySQL RDS (via Netbird VPN)  │  SQLite local   │
│  cambio_db — transações       │  agentes.db     │
└───────────────────────────────┴─────────────────┘
```

## Estrutura de Arquivos

```
bi-agentes/
├── server.js                 # Rotas + APIs + middleware
├── src/
│   ├── ui-template.js        # Header, footer, CSS vars, tema, Chart.js
│   ├── auth.js               # Login/logout, bcrypt, requireRole middleware
│   ├── cache.js              # Cache em memória com stale-while-revalidate
│   ├── db-rds.js             # Pool MySQL (read-only, 10 conexões)
│   ├── db-local.js           # SQLite — tabela agentes (auth)
│   ├── panels.js             # Configuração de painéis
│   ├── admin-bi.js           # Página: BI Executive
│   ├── admin-cliente.js      # Página: Client 360
│   ├── admin-dashboard.js    # Página: Corporate Dashboard
│   ├── admin-home.js         # Página: Daily Overview
│   ├── admin-panel.js        # Página: Gestão de Usuários
│   ├── admin-providers.js    # Página: Payment Providers
│   ├── dashboard.js          # Página: Dashboard do Agente
│   ├── queries/              # Queries MySQL modulares
│   │   ├── bi.queries.js
│   │   ├── client.queries.js
│   │   ├── compliance.queries.js
│   │   ├── corporate.queries.js
│   │   ├── payin.queries.js
│   │   ├── payout.queries.js
│   │   ├── provider.queries.js
│   │   └── helpers.js
│   ├── services/             # Lógica de negócio
│   │   ├── churn-predictor.js
│   │   └── forecast.js
│   ├── alerts/               # Sistema de alertas
│   │   ├── alert-engine.js
│   │   └── channels.js
│   ├── etl/                  # Pipeline de dados
│   │   ├── daily-sync.js
│   │   └── data-quality.js
│   └── export/
│       └── excel-export.js
├── public/
│   ├── chart.umd.min.js      # Chart.js (carregado inline)
│   ├── login.html
│   └── logo.png
├── scripts/
│   ├── seed-admin.js
│   └── seed-agente.js
├── data/
│   └── agentes.db            # SQLite (persistido via Docker volume)
├── docs/                     # Documentação detalhada
│   ├── INDEX.md
│   ├── API.md
│   ├── ARCHITECTURE.md
│   └── GUIA-USUARIO.md
├── Dockerfile
├── docker-compose.yml
├── docker-entrypoint.sh
└── .env                      # Credenciais (não versionado)
```

## Roles e Permissões

| Role | Acesso | Rota principal |
|------|--------|---------------|
| `admin` | Tudo: Corporate, BI, Clientes, Usuários, Providers | `/corporate` |
| `corporate` | Corporate Dashboard apenas | `/corporate` |
| `agente` | Seu próprio dashboard de transações | `/dashboard` |

## Principais Funcionalidades

- **Corporate Dashboard** — KPIs do período, tendências 30d, três fluxos separados
- **BI Executive** — Revenue analytics, ranking de agentes, retenção, cohort analysis, BI estratégico
- **Client 360** — Profile lifetime, health score, churn risk, merchant detection, netting, revenue intelligence
- **Payment Providers** — Análise de provedores de pagamento
- **Gestão de Usuários** — CRUD de usuários, ativar/desativar, reset de senha
- **Dashboard Agente** — Transações pessoais, KPIs, gráficos
- **Cache inteligente** — Stale-while-revalidate com auto-refresh
- **Export** — Exportação Excel
- **Alertas** — Sistema de alertas com notificação por email
- **Tema** — Dark mode Bloomberg terminal / Light mode institucional

## Deploy

```bash
# Build + restart container
docker compose build bi-ccc && docker compose down bi-ccc && docker compose up -d bi-ccc

# Ver logs
docker logs bi-ccc -f

# Criar usuário admin
docker exec -it bi-ccc node scripts/seed-admin.js
```

O container automaticamente:
1. Inicia Netbird VPN daemon (acesso ao RDS via rede privada)
2. Aguarda conexão VPN (~10s)
3. Roda `node server.js` na porta 3080

## Variáveis de Ambiente

Copie `.env.example` para `.env` e configure:

| Variável | Descrição |
|----------|-----------|
| `MYSQL_URL` | Host do MySQL RDS |
| `USER_MYSQL` | Usuário MySQL (read-only) |
| `PW_MYSQL` | Senha MySQL |
| `SESSION_SECRET` | Secret para express-session |
| `PORT` | Porta do servidor (default: 3080) |
| `NETBIRD_SETUP_KEY` | Chave de setup da VPN Netbird |
| `NETBIRD_MANAGEMENT_URL` | URL do Netbird management |
| `AWESOME_API_TOKEN` | Token para API de cotação USD/BRL |

## Documentação

- [Índice da Documentação](docs/INDEX.md)
- [API Reference](docs/API.md)
- [Arquitetura Técnica](docs/ARCHITECTURE.md)
- [Guia do Usuário](docs/GUIA-USUARIO.md)
- [Guia de Implementação BI-CCC](docs/BI-CCC-Implementation-Guide.md)

## Licença

Uso interno CambioReal.
