# Spec 024 — Card cliente → FOSS → OpenPanel (provisionamento)

**Roger · 2026-06-17**

## O teu raciocínio está correto

1. **Card do cliente (Desk / portal)** — recolhe dados mínimos do comprador.
2. **FOSSBilling** — cria cliente + pedido + activa produto hosting.
3. **OpenPanel** — recebe API call do FOSS (`createAccount`) e cria user hosting.
4. **pfSense** — **não** cria conta; só encaminha tráfego WAN → Traefik → VM123.

```
Internet → 95.216.14.146 (pfSense WAN)
         → NAT :80/:443 → 10.10.10.114 (Traefik)
         → financeiro.ligbox.com.br/foss|/odoo → 10.10.10.123
         → openpanel.ligbox.com.br → 10.10.10.123:2083
```

**NAT pfSense já existente (não precisa duplicar):**
| Regra | WAN | Destino |
|-------|-----|---------|
| Traefik HTTP | 80 | 10.10.10.114 |
| Traefik HTTPS | 443 | 10.10.10.114 |

Novos hostnames só precisam de **DNS Cloudflare** → mesmo IP público.

---

## Campos obrigatórios no card (→ FOSS → OpenPanel)

| Campo no card | Vai para FOSSBilling | Vai para OpenPanel API | Notas |
|---------------|----------------------|------------------------|-------|
| **email** | Cliente `email` | `email` | Login/recuperação |
| **nome / empresa** | Cliente `first_name` / company | — | Facturação |
| **domínio** | Opcional no produto | gera `username` (7 chars + dígito) | ex: `cliente1.com` → user `cliente1x` |
| **senha painel** | Order / hosting password | `password` | Senha OpenPanel user |
| **plano** | Product / `plan_name` | `plan_name` | **Deve coincidir** com plano OpenPanel |
| **CPF/CNPJ** | Cliente custom field | — | Fiscal (Odoo fase 2) |
| **telefone** | Cliente `phone` | — | Suporte |

### Plano OpenPanel criado (VM123)

| name | id | Uso |
|------|-----|-----|
| `ligbox-site-cms` | 3 | Site/CMS Spec 018 |
| `Standard plan` | 1 | Testes |
| `Developer Plus` | 2 | Maior |

**FOSS product** deve usar `plan_name` = `ligbox-site-cms` (exacto).

---

## Config FOSSBilling → Server OpenPanel

Admin FOSS → **System → Hosting plans → New server**

| Campo | Valor |
|-------|-------|
| Manager | OpenPanel |
| Hostname | `10.10.10.123` |
| Port | `2087` |
| Secure | Yes (HTTPS) |
| Username | `ligboxadmin` |
| Password | `LbOpen805353` |

Test connection → depois associar produto hosting ao server + plano `ligbox-site-cms`.

---

## Fluxo automático (pedido pago)

```
Card cliente (email, domínio, plano, senha)
    → FOSSBilling: create client + order
    → FOSSBilling: activate hosting
    → OpenPanel.php: POST /api/users
        { email, username, password, plan_name }
    → OpenPanel: conta hosting criada
    → Email cliente com URL openpanel.ligbox.com.br
```

---

## O que o Desk precisa (Spec 023 fase 2)

No card **Serviços / Site CMS**:
- `client_email` *
- `client_name` *
- `domain` * (para username OpenPanel)
- `hosting_plan` * (dropdown: ligbox-site-cms)
- `panel_password` * (ou gerar)
- `foss_client_id` (após sync)
- `openpanel_username` (read-only após provision)
