Actualiza dns-viewer, exec/rollback, fichas VM112/122/123, API Console proxy, token interno wizard e verify script para evitar drift documental. Co-authored-by: Cursor <cursoragent@cursor.com>
698 lines
29 KiB
Markdown
698 lines
29 KiB
Markdown
# Spec 035 — Bundles Ligbox Mail (FOSSBilling + OpenPanel + Nextcloud)
|
||
|
||
**Criado:** 2026-06-21
|
||
**Solicitado por:** Roger
|
||
**Status:** 📋 Draft — aguarda aprovação comercial + Fase 0
|
||
**Prioridade:** P1
|
||
**Relacionado:** Spec **024** (FOSS/OpenPanel) · **028** (bridge CE) · **034** (Nextcloud) · **027** (RBAC) · **010** (Domain Admin) · **018** (catálogo serviços) · **037** ([dns-viewer.md](../037-dns-multi-cloudflare-orchestration/dns-viewer.md))
|
||
|
||
---
|
||
|
||
## Resumo executivo
|
||
|
||
Definir **como vender, provisionar e administrar** pacotes de email profissional Ligbox (Carbonio VM112) + Nextcloud (VM116) + certificação EasyDMARC, usando:
|
||
|
||
| Camada | Função |
|
||
|--------|--------|
|
||
| **FOSSBilling** (VM123) | Catálogo, preços, pedidos, faturação, área cliente |
|
||
| **OpenPanel** (VM123) | Provisionamento hub (backend) — **sem UI exposta ao gerente** |
|
||
| **Área Gerente de Domínio** | Console único SPA — ver [domain-manager-console-ui.md](./domain-manager-console-ui.md) |
|
||
| **Wizard Domain Admin** (VM112) | Criar/gerir contas email, quotas, Nextcloud por domínio |
|
||
| **Desk** (VM122) | Orquestração, health, RBAC staff Ligbox |
|
||
|
||
**Princípio central:** o **Gerente de Domínio** (`admin@{dominio}` ou titular FOSS) configura o bundle e habilita contas. **Utilizadores finais** de email acedem só a webmail + Nextcloud Files — **sem** painel administrativo.
|
||
|
||
---
|
||
|
||
## 1. Ofertas comerciais
|
||
|
||
### 1.1 Planos base (bundles fixos)
|
||
|
||
Estes são os **templates de venda** no FOSSBilling. O cliente pode comprar directamente ou usar como ponto de partida para personalização.
|
||
|
||
| Código FOSS | Nome comercial | Contas email (máx.) | Quota mail / conta | Nextcloud / conta | Subdomínio | Preço sugerido Ligbox* |
|
||
|-------------|----------------|---------------------|--------------------|--------------------|------------|-------------------------|
|
||
| `ligbox-mail-starter` | **Ligbox Mail Starter** | 10 | 20 GB | 100 GB (config. 100–200) | 1 incluído | **R$ 249/mês** |
|
||
| `ligbox-mail-business` | **Ligbox Mail Business** | 25 | 30 GB | 200 GB (config. 100–300) | 1 incluído | **R$ 549/mês** |
|
||
| `ligbox-mail-enterprise` | **Ligbox Mail Enterprise** | 50 | 50 GB | 300 GB (config. 100–500) | 1 incluído | **R$ 999/mês** |
|
||
|
||
\* Preços sugeridos — Roger valida margem antes de publicar no FOSS.
|
||
|
||
**Incluído em todos os bundles:**
|
||
|
||
- Email `@seudominio.com.br` (Carbonio — webmail, IMAP, SMTP, calendário, contactos)
|
||
- Nextcloud Files em `files.{dominio}` (sync desktop/mobile, partilha, links)
|
||
- Certificação email EasyDMARC (SPF, DKIM, DMARC monitorizado — ver §4)
|
||
- 1 conta **Gerente de Domínio** com painel administrativo
|
||
- Suporte DNS (MX, SPF, DMARC) via wizard onboarding
|
||
- **Painel DNS read-only** (gerente + staff) — Spec **037-DNS-VIEWER**
|
||
- TLS Let's Encrypt (mail + files)
|
||
|
||
### 1.2 Bundle personalizado (configurador)
|
||
|
||
Cliente escolhe combinação dentro dos limites operacionais:
|
||
|
||
| Parâmetro | Opções | Notas |
|
||
|-----------|--------|-------|
|
||
| **Nº contas email** | 10 · 25 · 30 · 40 · 50 | Hard cap inicial = 50 (escalar após VM116) |
|
||
| **Quota mail / conta** | 20 · 30 · 40 · 50 GB | Aplica-se Carbonio (hot tier VM112) |
|
||
| **Quota Nextcloud / conta** | 100 · 200 · 300 · 400 · 500 GB | Aplica-se VM116 Files |
|
||
| **Subdomínio** | 1 incluído | ex.: `mail.empresa.com.br` ou site CMS add-on |
|
||
|
||
**Código FOSS:** `ligbox-mail-custom` — produto **configurável** com opções FOSS (ver §5).
|
||
|
||
**Exemplo pedido Roger:** 10 contas × 50 GB mail + 500 GB Nextcloud cada:
|
||
|
||
```
|
||
ligbox-mail-custom
|
||
seats=10
|
||
mail_gb=50
|
||
files_gb=500
|
||
→ Preço calculado: base + (seats × mail_rate) + (seats × files_rate)
|
||
→ Estimativa: ~R$ 890/mês (ver fórmula §1.4)
|
||
```
|
||
|
||
### 1.3 Benchmark concorrência (referência Jun/2026)
|
||
|
||
| Concorrente | Plano | Preço / utilizador / mês | Storage mail | Cloud files | DMARC incluído |
|
||
|-------------|-------|--------------------------|--------------|-------------|----------------|
|
||
| **Google Workspace** | Business Starter | **R$ 40,90** (anual) · USD 7 | 30 GB pooled | Drive incluído | Não |
|
||
| **Google Workspace** | Business Standard | **R$ 81,80** (anual) · USD 14 | 2 TB pooled | Drive | Não |
|
||
| **Microsoft 365** | Business Basic | **~USD 6** (~R$ 35) | 50 GB Exchange | 1 TB OneDrive | Não |
|
||
| **Microsoft 365** | Business Standard | **~USD 12,50** (~R$ 72) | 50 GB | 1 TB + Office | Não |
|
||
| **Zoho Mail** | Premium (BR) | **R$ 20** (anual) | 50 GB | WorkDrive extra | Não |
|
||
| **EasyDMARC** | Plus (MSP) | **~USD 36/mês** (~R$ 200) | — | — | 2 domínios |
|
||
| **Ligbox Mail Business** | 25 contas | **R$ 549/mês** = **R$ 22/conta** | 30 GB + 200 GB NC | Files incluído | **Sim** |
|
||
|
||
**Posicionamento Ligbox:**
|
||
|
||
- **20–45% abaixo** do Google/Microsoft por utilizador em bundles PME
|
||
- **Mais storage mail + files** que Zoho no mesmo tier
|
||
- **EasyDMARC incluído** (valor ~R$ 200/mês separado) — diferencial entregabilidade
|
||
- **Domínio próprio + dados na infra Ligbox** (soberania BR/EU)
|
||
- **Gerente de domínio** controla tudo — sem licença Microsoft por utilizador ocioso
|
||
|
||
### 1.4 Fórmula de preço — bundle custom
|
||
|
||
```
|
||
preço_mensal =
|
||
base_fee # R$ 99 (infra + EasyDMARC pool)
|
||
+ (seats × mail_gb × R$ 0,35) # mail hot tier
|
||
+ (seats × files_gb × R$ 0,08) # nextcloud warm tier
|
||
+ addon_subdomain # R$ 0 (incluído) ou R$ 29 extra
|
||
```
|
||
|
||
**Exemplo:** 10 seats · 50 GB mail · 500 GB files:
|
||
|
||
```
|
||
99 + (10 × 50 × 0,35) + (10 × 500 × 0,08)
|
||
= 99 + 175 + 400 = R$ 674/mês
|
||
```
|
||
|
||
**Desconto anual:** −15% (alinhado Google/Zoho).
|
||
|
||
---
|
||
|
||
## 2. O que cada bundle inclui (feature matrix)
|
||
|
||
### 2.1 Email (Carbonio VM112)
|
||
|
||
| Feature | Starter | Business | Enterprise | Custom |
|
||
|---------|---------|----------|------------|--------|
|
||
| Webmail HTTPS | ✅ | ✅ | ✅ | ✅ |
|
||
| IMAP / SMTP / ActiveSync | ✅ | ✅ | ✅ | ✅ |
|
||
| Calendário / Contactos | ✅ | ✅ | ✅ | ✅ |
|
||
| Alias / lista / forward | ✅ | ✅ | ✅ | ✅ |
|
||
| Quota por caixa | 20 GB | 30 GB | 50 GB | 20–50 |
|
||
| Anti-spam / anti-virus | ✅ | ✅ | ✅ | ✅ |
|
||
| Domain Admin (gerente) | ✅ | ✅ | ✅ | ✅ |
|
||
|
||
### 2.2 Nextcloud (VM116)
|
||
|
||
| Feature | Todos os bundles |
|
||
|---------|------------------|
|
||
| URL `files.{dominio}` | ✅ **sempre** (Files obrigatório no bundle) |
|
||
| Sync desktop / mobile | ✅ |
|
||
| Partilha links + password | ✅ |
|
||
| Quota por utilizador | Configurável 100–500 GB |
|
||
| **App Mail (IMAP → Carbonio)** | **⚙️ Opcional por domínio** — gerente activa/desactiva no `/admin` |
|
||
| OnlyOffice / Collabora | Fase 2 |
|
||
| Versionamento ficheiros | ✅ |
|
||
|
||
#### 2.2.1 Nextcloud Mail — opcional por domínio (decisão Roger 2026-06-21)
|
||
|
||
**Default:** **desactivado** em domínios novos. Webmail Carbonio (`mail.{dominio}`) é sempre a interface email principal.
|
||
|
||
| Estado | O que o utilizador vê |
|
||
|--------|------------------------|
|
||
| **Mail OFF** (default) | `mail.{dom}` webmail Carbonio + `files.{dom}` Nextcloud Files — apps separadas |
|
||
| **Mail ON** | Mail app pré-configurado no Nextcloud (IMAP→Carbonio) + Files na mesma UI |
|
||
|
||
**Quem controla:** Gerente de Domínio em `onboard.ligbox.com.br/admin` → secção **Nextcloud / Files** → toggle **«Activar Mail no Nextcloud»**.
|
||
|
||
**Comportamento técnico:**
|
||
|
||
| Acção gerente | Backend |
|
||
|---------------|---------|
|
||
| Activar Mail domínio | `PATCH bundle_entitlements` + flag NC tenant |
|
||
| Desactivar Mail domínio | Remove contas Mail app (mantém Files + Carbonio) |
|
||
| Criar conta email (Mail ON) | OCS user + pré-config IMAP SMTP (Spec 034 NC-3) |
|
||
| Criar conta email (Mail OFF) | OCS user Files only — sem Mail app |
|
||
|
||
**Carbonio permanece autoridade** — MX, SMTP, quotas mail, OOO, assinatura. Nextcloud Mail é **cliente IMAP opcional**, nunca substituto do servidor.
|
||
|
||
**Motivo:** equipas só-email usam webmail/Outlook; equipas Files+email escolhem Mail unificado — sem impor carga IMAP extra na VM112 a todos.
|
||
|
||
### 2.3 EasyDMARC (certificação email Ligbox)
|
||
|
||
Ligbox opera os servidores de email — **EasyDMARC é incluído no bundle** como garantia de entregabilidade:
|
||
|
||
| Capacidade | Incluído no bundle |
|
||
|------------|-------------------|
|
||
| Monitorização DMARC | ✅ Relatórios agregados |
|
||
| SPF lookup / validação | ✅ |
|
||
| DKIM alinhamento | ✅ Wizard + agente A3 Desk |
|
||
| DMARC policy roadmap | ✅ p=none → quarantine → reject |
|
||
| EasySPF (flatten) | Business+ |
|
||
| Alertas falha autenticação | ✅ email gerente + Desk |
|
||
| Badge «Ligbox Certified Mail» | Fase 2 — selo no webmail |
|
||
|
||
**Modelo operacional:** conta EasyDMARC **MSP Ligbox** (pool) — 1 domínio tenant = 1 slot no pool. Custo interno ~USD 4–8/domínio/mês repartido no bundle.
|
||
|
||
### 2.4 Subdomínio
|
||
|
||
- **Incluído:** 1 subdomínio DNS gerido (ex.: `intranet.empresa.com.br` → site ou redirect)
|
||
- Se bundle incluir **Ligbox Site CMS** (Spec 024): subdomínio aponta OpenPanel hosting
|
||
- Email bundle **sem site:** subdomínio pode ser CNAME para landing ou Nextcloud
|
||
|
||
---
|
||
|
||
## 3. Quem acede a quê (RBAC cliente)
|
||
|
||
```
|
||
┌─────────────────────────────────────┐
|
||
│ DOMÍNIO cliente.com.br │
|
||
└─────────────────────────────────────┘
|
||
│
|
||
┌───────────────────────────┼───────────────────────────┐
|
||
▼ ▼ ▼
|
||
GERENTE DE DOMÍNIO UTILIZADOR EMAIL VISITANTE
|
||
admin@cliente.com.br joao@cliente.com.br (público)
|
||
│ │
|
||
▼ ▼
|
||
┌──────────────┐ ┌──────────────┐
|
||
│ Painel Admin │ │ Webmail │
|
||
│ (§6) │ │ mail.dom │
|
||
│ │ │ Nextcloud │
|
||
│ • contas │ │ files.dom │
|
||
│ • quotas │ │ (sem admin) │
|
||
│ • nextcloud │ └──────────────┘
|
||
│ • DNS/DMARC │ ← Spec 037-DNS-VIEWER (read-only + links)
|
||
│ • faturação │
|
||
└──────────────┘
|
||
```
|
||
|
||
| Actor | Login | Painel admin? | Benefícios |
|
||
|-------|-------|---------------|------------|
|
||
| **Gerente de Domínio** | FOSS cliente → «Gerir domínio» OU `onboard.ligbox.com.br/admin` | **Sim** | Cria contas, quotas, Nextcloud, vê DMARC |
|
||
| **Utilizador email** | `mail.{dom}` webmail · app Nextcloud | **Não** | Email + ficheiros pessoais |
|
||
| **Staff Ligbox** | Desk VM122 | Sim (RBAC Spec 027) | Suporte, override, billing |
|
||
|
||
**Regra Roger:** painel administrativo **≠** webmail. Apenas **1+ gerentes** por domínio (configurável, default 1).
|
||
|
||
---
|
||
|
||
## 4. Arquitectura FOSS + OpenPanel + Mail
|
||
|
||
```mermaid
|
||
flowchart TB
|
||
subgraph Cliente
|
||
GM[Gerente Domínio]
|
||
U[Users email]
|
||
end
|
||
|
||
subgraph VM123["VM123 — Finance"]
|
||
FOSS[FOSSBilling<br/>catálogo + pedidos]
|
||
GW[Gateway pagamento<br/>Boleto + PIX QR]
|
||
OP[OpenPanel<br/>provision backend]
|
||
BR[Bridge :18087]
|
||
end
|
||
|
||
subgraph VM122["VM122 — Desk"]
|
||
DS[API orquestração<br/>FOSS ↔ Wizard ↔ NC]
|
||
end
|
||
|
||
subgraph VM112["VM112 — Mail"]
|
||
WZ[Wizard API]
|
||
DA[Domain Admin SPA<br/>onboard.ligbox.com.br/admin]
|
||
CB[Carbonio]
|
||
end
|
||
|
||
subgraph VM116["VM116 — Files"]
|
||
NC[Nextcloud Hub]
|
||
OCS[OCS Provisioning API]
|
||
end
|
||
|
||
subgraph External
|
||
EDM[EasyDMARC API]
|
||
CF[Cloudflare DNS]
|
||
end
|
||
|
||
GM -->|compra bundle| FOSS
|
||
FOSS -->|boleto / PIX QR| GW
|
||
GW -->|pagamento confirmado| FOSS
|
||
FOSS -->|order paid| BR
|
||
BR -->|provision hub| OP
|
||
FOSS -->|webhook| DS
|
||
DS -->|mail-bundle| WZ
|
||
WZ -->|domínio + contas| CB
|
||
WZ -->|provision OCS| OCS
|
||
OCS --> NC
|
||
WZ -->|registar domínio| EDM
|
||
GM -->|login único| DA
|
||
DA -->|CRUD contas + quotas NC| WZ
|
||
DA -->|resumo plano / faturas| DS
|
||
DS -->|proxy FOSS| FOSS
|
||
U --> CB
|
||
U --> NC
|
||
WZ --> CF
|
||
```
|
||
|
||
### 4.1 Papel de cada sistema (ecossistema completo — Roger 2026-06-21)
|
||
|
||
**Face visível ao gerente:** uma só página — `https://onboard.ligbox.com.br/admin`
|
||
|
||
**Por trás (invisível ao cliente):**
|
||
|
||
| Sistema | VM | Papel |
|
||
|---------|-----|-------|
|
||
| **FOSSBilling** | 123 | Venda, planos, faturas, área «Meus serviços», pedidos |
|
||
| **Gateway pagamento** | 123 | **Boleto bancário + PIX QR Code** — geração, confirmação, baixa automática no FOSS |
|
||
| **OpenPanel** | 123 | Provisionamento **backend** (hub) — **sem UI separada** para mail |
|
||
| **Desk API** | 122 | Orquestração FOSS ↔ Wizard ↔ Nextcloud; webhooks; proxy billing |
|
||
| **Wizard VM112** | 112 | Motor do `/admin` — Carbonio CRUD, limites bundle, DNS |
|
||
| **Nextcloud Hub** | 116 | Files por conta — **gerido pelo gerente no `/admin`** (quotas, activar/desactivar) |
|
||
| **EasyDMARC** | ext. | Certificação SPF/DKIM/DMARC |
|
||
| **Carbonio** | 112 | Motor email (webmail, IMAP) — users finais |
|
||
|
||
### 4.2 Gateway pagamento — Boleto + PIX QR (obrigatório Spec 035)
|
||
|
||
Roger: **não esquecer** — cliente Ligbox precisa pagar com meios BR standard.
|
||
|
||
| Capacidade | Onde | UX cliente |
|
||
|------------|------|------------|
|
||
| **Boleto bancário** | Gateway → módulo FOSS | PDF / linha digitável na área FOSS + email |
|
||
| **PIX QR Code** | Gateway → módulo FOSS | QR na fatura + copia-e-cola |
|
||
| **Cartão** (opcional fase 2) | Gateway | Checkout FOSS |
|
||
| **Confirmação pagamento** | Webhook gateway → FOSS → Desk → Wizard | Activa bundle + limites |
|
||
|
||
**Gateway candidatos:** ASAAS · Iugu · Mercado Pago (decisão §14)
|
||
|
||
**Fluxo:**
|
||
|
||
```
|
||
Cliente escolhe plano FOSS
|
||
→ FOSS gera fatura
|
||
→ Gateway emite boleto + PIX QR
|
||
→ Cliente paga
|
||
→ Webhook confirma
|
||
→ FOSS order = active
|
||
→ Desk provisiona mail + Nextcloud
|
||
→ Gerente entra /admin
|
||
```
|
||
|
||
**No `/admin` (gerente):** resumo «Plano activo / aguardando pagamento» + link «Ver boleto / PIX» (embed FOSS ou API Desk — **não** redireccionar para setup noutro portal).
|
||
|
||
### 4.3 Nextcloud — visão admin no `/admin` (obrigatório Spec 035)
|
||
|
||
Roger: gestão de contas Files **no mesmo painel** — gerente **não** abre consola Nextcloud separada.
|
||
|
||
| Acção gerente | UI `/admin` | Backend |
|
||
|---------------|---------------|---------|
|
||
| Criar conta email | modal contas | Carbonio + **auto-provision NC** |
|
||
| Quota Files por user | slider / dropdown | Nextcloud **OCS API** VM116 |
|
||
| Activar/desactivar Files | toggle | OCS disable user |
|
||
| Ver uso disco domínio | card resumo | OCS quota report |
|
||
| Atalho Files user | botão «Abrir Files» | SSO token → `files.{dominio}` |
|
||
|
||
**Regra:** cada `@dominio` com mail activo → conta Nextcloud espelhada (Spec 034 OCS).
|
||
|
||
**Utilizador final:** só app/web `files.{dominio}` — **sem** admin NC.
|
||
|
||
### 4.4 Papel resumido (versão curta)
|
||
|
||
| Sistema | Papel no bundle email |
|
||
|---------|----------------------|
|
||
| **FOSSBilling** | Venda, upgrade/downgrade, fatura, área «Meus serviços» |
|
||
| **Gateway** | Boleto + PIX QR — cobrança Brasil |
|
||
| **OpenPanel** | Backend provision — **invisível** ao gerente |
|
||
| **Wizard + `/admin`** | **Cockpit único** — mail + Nextcloud + resumo plano |
|
||
| **Desk** | APIs orquestração (FOSS ↔ Wizard ↔ NC) |
|
||
| **Nextcloud VM116** | Storage Files — admin via `/admin`, uso via `files.{dom}` |
|
||
|
||
**Importante:** OpenPanel **não substitui** Carbonio nem Nextcloud admin. FOSS **não substitui** `/admin` para gestão de contas.
|
||
|
||
---
|
||
|
||
## 5. Configuração FOSSBilling
|
||
|
||
### 5.1 Produtos a criar (Admin → Products)
|
||
|
||
#### Produto 1–3: bundles fixos
|
||
|
||
| Campo FOSS | Starter | Business | Enterprise |
|
||
|------------|---------|----------|------------|
|
||
| `title` | Ligbox Mail Starter | Ligbox Mail Business | Ligbox Mail Enterprise |
|
||
| `slug` | ligbox-mail-starter | ligbox-mail-business | ligbox-mail-enterprise |
|
||
| `type` | hosting | hosting | hosting |
|
||
| `pricing` | monthly R$ 249 | monthly R$ 549 | monthly R$ 999 |
|
||
| `setup` | R$ 0 | R$ 0 | R$ 0 |
|
||
| `plugin` | OpenPanel | OpenPanel | OpenPanel |
|
||
| `plugin_config.plan` | ligbox-mail-starter | ligbox-mail-business | ligbox-mail-enterprise |
|
||
|
||
**Custom fields no pedido (obrigatórios):**
|
||
|
||
| Campo | Tipo | Exemplo |
|
||
|-------|------|---------|
|
||
| `domain` | text | `empresa.com.br` |
|
||
| `manager_email` | email | `admin@empresa.com.br` |
|
||
| `manager_name` | text | João Silva |
|
||
|
||
#### Produto 4: bundle custom (configurável)
|
||
|
||
| Campo | Valor |
|
||
|-------|-------|
|
||
| `slug` | ligbox-mail-custom |
|
||
| `type` | hosting + **config options** |
|
||
|
||
**Config options FOSS:**
|
||
|
||
| Option ID | Nome | Tipo | Valores | Preço unitário |
|
||
|-----------|------|------|---------|----------------|
|
||
| `seats` | Nº contas email | dropdown | 10,25,30,40,50 | ver §1.4 |
|
||
| `mail_gb` | GB mail/conta | dropdown | 20,30,40,50 | R$ 0,35/GB/seat |
|
||
| `files_gb` | GB Nextcloud/conta | dropdown | 100,200,300,400,500 | R$ 0,08/GB/seat |
|
||
|
||
### 5.2 Webhook pós-pagamento
|
||
|
||
```
|
||
POST https://desk.ligbox.com.br/api/v1/billing/webhook/foss/order-activated
|
||
{
|
||
"order_id": 123,
|
||
"product_slug": "ligbox-mail-business",
|
||
"client_email": "admin@empresa.com.br",
|
||
"domain": "empresa.com.br",
|
||
"config": {
|
||
"seats": 25,
|
||
"mail_gb": 30,
|
||
"files_gb": 200
|
||
}
|
||
}
|
||
```
|
||
|
||
Desk → Wizard `POST /api/internal/provision/mail-bundle`
|
||
|
||
---
|
||
|
||
## 6. Configuração OpenPanel
|
||
|
||
### 6.1 Planos OpenPanel (OpenAdmin → Plans)
|
||
|
||
Criar planos espelhando FOSS (bridge `plan_name`):
|
||
|
||
| plan_name | Domínios | Contas OP | Notas |
|
||
|-----------|----------|-----------|-------|
|
||
| `ligbox-mail-starter` | 1 | 1 | Hub gerente only |
|
||
| `ligbox-mail-business` | 1 | 1 | idem |
|
||
| `ligbox-mail-enterprise` | 1 | 1 | idem |
|
||
| `ligbox-mail-custom` | 1 | 1 | quotas via metadata JSON |
|
||
| `ligbox-site-cms` | 1 | 1 | **já existe** — add-on site |
|
||
|
||
**Limites OpenPanel CE:** 1 user OpenPanel = gerente. **Não** criar 1 user OP por caixa email.
|
||
|
||
### 6.2 Metadata do plano (JSON em custom field bridge)
|
||
|
||
```json
|
||
{
|
||
"bundle_type": "ligbox_mail",
|
||
"max_seats": 25,
|
||
"mail_gb_per_seat": 30,
|
||
"files_gb_per_seat": 200,
|
||
"easydmarc": true,
|
||
"wizard_domain": "empresa.com.br"
|
||
}
|
||
```
|
||
|
||
### 6.3 Página custom «Ligbox Mail» no OpenPanel (Fase 1)
|
||
|
||
**Objectivo:** gerente loga em `https://openpanel.ligbox.com.br` e vê:
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────┐
|
||
│ Ligbox Mail Console — empresa.com.br │
|
||
├─────────────────────────────────────────────────────────┤
|
||
│ Plano: Business · 12/25 contas · DMARC: ✅ │
|
||
│ │
|
||
│ [ Gerir contas email ] → autologin Domain Admin │
|
||
│ [ Abrir webmail ] → mail.empresa.com.br │
|
||
│ [ Abrir Files ] → files.empresa.com.br │
|
||
│ [ Certificação DMARC ] → modal EasyDMARC status │
|
||
│ [ Faturação ] → financeiro.ligbox.com.br │
|
||
└─────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
**Implementação (escolher 1):**
|
||
|
||
| Opção | Esforço | Recomendação |
|
||
|-------|---------|--------------|
|
||
| **A — Deep-link Desk** | Baixo | OpenPanel mostra links estáticos + token SSO |
|
||
| **B — iframe Domain Admin** | Médio | SPA wizard embutida no OP |
|
||
| **C — Módulo OP custom** | Alto | Plugin PHP/JS nativo OpenPanel |
|
||
|
||
**Recomendação Spec 035:** **Opção A (MVP)** → **Opção B (Fase 2)**.
|
||
|
||
---
|
||
|
||
## 7. Login do Gerente de Domínio — fluxo completo
|
||
|
||
### 7.1 Primeiro acesso (pós-compra)
|
||
|
||
```
|
||
1. Cliente paga bundle no FOSSBilling (financeiro.ligbox.com.br)
|
||
2. FOSS → Bridge OpenPanel: cria user `empresa-hub` + plan ligbox-mail-*
|
||
3. FOSS → email boas-vindas com:
|
||
• Link FOSS cliente: financeiro.ligbox.com.br/login
|
||
• Link OpenPanel hub: openpanel.ligbox.com.br
|
||
• Credenciais temporárias (forçar troca)
|
||
4. Webhook → Wizard:
|
||
• Cria domínio Carbonio
|
||
• Cria admin@empresa.com.br (gerente)
|
||
• Regista EasyDMARC
|
||
• Provisiona Nextcloud tenant
|
||
• Grava bundle limits em DB wizard
|
||
5. Gerente acede OpenPanel OU onboard.ligbox.com.br/admin
|
||
6. Primeiro login → wizard onboarding DNS (MX, SPF, DMARC)
|
||
```
|
||
|
||
### 7.2 Login recorrente (3 caminhos equivalentes)
|
||
|
||
| Caminho | URL | Mecanismo |
|
||
|---------|-----|-----------|
|
||
| **FOSS → Gerir** | `financeiro.ligbox.com.br/client/service/{id}` | Botão «Gerir Mail» → SSO token → OpenPanel ou Domain Admin |
|
||
| **OpenPanel hub** | `openpanel.ligbox.com.br` | Login OP → página Ligbox Mail Console |
|
||
| **Directo Domain Admin** | `onboard.ligbox.com.br/admin` | Login `admin@{dom}` + senha Carbonio/wizard |
|
||
|
||
### 7.3 SSO token (Desk emite)
|
||
|
||
```http
|
||
POST /api/v1/domain-admin/sso-token
|
||
Authorization: Bearer <session gerente>
|
||
Body: { "domain": "empresa.com.br" }
|
||
|
||
Response:
|
||
{
|
||
"redirect_url": "https://onboard.ligbox.com.br/admin?sso=eyJ...",
|
||
"expires_in": 300
|
||
}
|
||
```
|
||
|
||
**Validação:** token assinado HMAC, single-use, domínio no claim = domínio do gerente.
|
||
|
||
### 7.4 O que o gerente faz no painel (Domain Admin SPA)
|
||
|
||
| Acção | Onde executa | Propaga para |
|
||
|-------|--------------|--------------|
|
||
| Criar conta `vendas@` | Domain Admin | Carbonio + Nextcloud (auto) |
|
||
| Alterar quota mail 30→40 GB | Domain Admin | Carbonio zmprov |
|
||
| Alterar quota Files 200→500 GB | Domain Admin | Nextcloud OCS API |
|
||
| Suspender conta | Domain Admin | Carbonio + NC disable |
|
||
| Ver status DMARC | Domain Admin modal | EasyDMARC API |
|
||
| Adicionar alias | Domain Admin | Carbonio |
|
||
| Reset senha user | Domain Admin | Carbonio (+ sync NC fase 2) |
|
||
|
||
**Limite:** gerente **não pode** exceder `max_seats` / quotas do bundle FOSS — wizard valida contra `bundle_entitlements` table.
|
||
|
||
### 7.5 Upgrade de plano
|
||
|
||
```
|
||
Gerente → FOSS «Upgrade para Enterprise»
|
||
→ FOSS recalcula preço
|
||
→ Pagamento confirmado
|
||
→ Webhook atualiza bundle_entitlements
|
||
→ Domain Admin reflecte novos limites (25→50 contas)
|
||
```
|
||
|
||
---
|
||
|
||
## 8. Provisionamento técnico (ordem)
|
||
|
||
| Step | Actor | Acção |
|
||
|------|-------|-------|
|
||
| 1 | FOSS | Order `active` |
|
||
| 2 | Bridge | `POST /api/users` plan=ligbox-mail-* domain=X |
|
||
| 3 | Desk webhook | Recebe order, valida slug |
|
||
| 4 | Wizard | `POST /api/internal/provision/mail-bundle` |
|
||
| 5 | Wizard | Carbonio: `createDomain`, `createAccount admin@` |
|
||
| 6 | Wizard | Nextcloud: OCS create tenant + admin |
|
||
| 7 | Wizard | EasyDMARC: register domain (API) |
|
||
| 8 | Wizard | Cloudflare: MX, SPF, DMARC records |
|
||
| 9 | Traefik CT114 | SNI `mail.{dom}` + `files.{dom}` |
|
||
| 10 | Desk | `billing_accounts.plan_code` = slug · state = active |
|
||
| 11 | FOSS | Email «Domínio pronto» + links login |
|
||
|
||
---
|
||
|
||
## 9. Entitlements (tabela wizard — nova)
|
||
|
||
```sql
|
||
CREATE TABLE bundle_entitlements (
|
||
id INTEGER PRIMARY KEY,
|
||
domain TEXT NOT NULL UNIQUE,
|
||
foss_order_id INTEGER,
|
||
product_slug TEXT NOT NULL,
|
||
max_seats INTEGER NOT NULL,
|
||
mail_gb_per_seat INTEGER NOT NULL,
|
||
files_gb_per_seat INTEGER NOT NULL,
|
||
seats_used INTEGER DEFAULT 1,
|
||
easydmarc_enabled BOOLEAN DEFAULT 1,
|
||
nextcloud_mail_enabled BOOLEAN DEFAULT 0,
|
||
subdomain TEXT,
|
||
dns_mode TEXT, -- ligbox_cf_* | byo_cf | external | openpanel_bind (Spec 037)
|
||
dns_provider TEXT, -- cf_ligbox | cf_byo | openpanel_bind | registrar
|
||
cf_zone_id TEXT,
|
||
expires_at TIMESTAMP,
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
```
|
||
|
||
Wizard **rejeita** `createAccount` se `seats_used >= max_seats`.
|
||
|
||
---
|
||
|
||
## 9.1 DNS Viewer — visibilidade DNS (Spec 037-DNS-VIEWER)
|
||
|
||
Roger (2026-06-25): gerente e staff precisam **ver todos os apontamentos** sem aceder a Cloudflare/OpenPanel directamente.
|
||
|
||
| Actor | Onde vê | Pode editar? |
|
||
|-------|---------|--------------|
|
||
| **Gerente domínio** | Console `/admin` → secção Domínio & DNS | ❌ na Console — link externo se BYO |
|
||
| **Staff Ligbox** | Desk Overview + Serviços IaaS | ❌ — deep-link CF/OP (027) |
|
||
| **Cliente wizard** | Passo DNS onboarding | ❌ — instructions only |
|
||
|
||
**Regra de exibição (037):**
|
||
|
||
| `dns_mode` no entitlements | UI mostra |
|
||
|----------------------------|-----------|
|
||
| `ligbox_cf_*` | Registos **aplicados/planeados** Ligbox + NS Cloudflare |
|
||
| `byo_cf` / `external` / `registrar` | DNS **actual** (público) + instruções |
|
||
|
||
Documento técnico: [037 dns-viewer.md](../037-dns-multi-cloudflare-orchestration/dns-viewer.md)
|
||
UI gerente: [domain-manager-console-ui.md §5.5](./domain-manager-console-ui.md#55-domínio--dns-dns-viewer--spec-037-dns-viewer)
|
||
|
||
**Deploy (2026-06-25):** Console `/admin/dominio` ✅ VM123 · API proxy `GET /api/v1/domain-console/dns/viewer/{domain}` ✅ VM122 · Wizard V4 📋 patches prontos.
|
||
|
||
---
|
||
|
||
## 10. Add-ons FOSS (venda separada)
|
||
|
||
| Slug | Nome | Preço sugerido |
|
||
|------|------|----------------|
|
||
| `ligbox-mail-seat-extra` | +1 conta email | R$ 19/mês |
|
||
| `ligbox-mail-storage-mail` | +10 GB mail (domínio) | R$ 29/mês |
|
||
| `ligbox-mail-storage-files` | +50 GB Nextcloud (domínio) | R$ 39/mês |
|
||
| `ligbox-site-cms` | Site CMS OpenPanel | **já existe** (grátis hoje) |
|
||
| `ligbox-mail-easydmarc-pro` | DMARC enforcement + relatórios 1 ano | R$ 49/mês |
|
||
|
||
---
|
||
|
||
## 11. Fases de implementação
|
||
|
||
| Fase | Entregável | Spec deps |
|
||
|------|------------|-----------|
|
||
| **0** | Produtos FOSS + planos OP + preços publicados | 024, 028 |
|
||
| **1** | Webhook provision mail-bundle + entitlements | 034 Fase 0 |
|
||
| **2** | Domain Admin: quotas NC + seat limits + **DNS Viewer `/admin`** | 034 Fase 1 · **037 dns-viewer** |
|
||
| **3** | OpenPanel Ligbox Mail Console (links SSO) | 028, 035 |
|
||
| **4** | EasyDMARC API integrada + badge | Agent A3 |
|
||
| **5** | Configurador custom FOSS + upgrade flow | 023 |
|
||
|
||
---
|
||
|
||
## 12. Critérios de aceite
|
||
|
||
1. Cliente compra **Ligbox Mail Business** no FOSS → em ≤15 min domínio activo com admin@ funcional.
|
||
2. Gerente loga OpenPanel hub → vê resumo bundle + link «Gerir contas» funcional.
|
||
3. Gerente cria 3 contas email → Nextcloud provisionado automaticamente para cada.
|
||
4. Utilizador `vendas@` acede webmail + files — **sem** acesso admin.
|
||
5. Tentativa criar conta #26 em plano 25 → erro claro «Upgrade plano».
|
||
6. EasyDMARC mostra SPF+DKIM+DMARC ✅ no painel gerente.
|
||
7. Upgrade FOSS Starter→Business → limites actualizados sem re-provision completo.
|
||
8. Gerente abre **Domínio & DNS** → vê tabela read-only completa (037-DNS-VIEWER); domínio Ligbox mostra applied/planned; externo mostra estado público actual.
|
||
|
||
---
|
||
|
||
## 13. Documentos relacionados
|
||
|
||
| Doc | Path |
|
||
|-----|------|
|
||
| Nextcloud integração | `specs/034-nextcloud-carbonio-vm112-integration/spec.md` |
|
||
| FOSS + OpenPanel | `specs/024-openpanel-fossbilling/spec.md` |
|
||
| Bridge API | `specs/028-openpanel-ce-ligbox-reengineering/contracts/foss-bridge-api.md` |
|
||
| Domain Admin | `specs/010-admin-domain-validation/spec.md` |
|
||
| Nextcloud OCS API | `specs/034-.../contracts/nextcloud-provisioning-api.md` |
|
||
| Tasks 035 | `specs/035-ligbox-mail-bundles-foss-openpanel/tasks.md` |
|
||
| FOSS product JSON | `specs/035-ligbox-mail-bundles-foss-openpanel/foss-products.md` |
|
||
| UI Shell unificada | [ligbox-console-shell.md](./ligbox-console-shell.md) |
|
||
| UI Gerente domínio | [domain-manager-console-ui.md](./domain-manager-console-ui.md) |
|
||
| UI Admin Ligbox (sistema) | [ligbox-system-admin-ui.md](./ligbox-system-admin-ui.md) |
|
||
| UI Utilizador email (Fase B) | [user-self-service-ui.md](./user-self-service-ui.md) |
|
||
| **DNS Viewer read-only** | [037 dns-viewer.md](../037-dns-multi-cloudflare-orchestration/dns-viewer.md) |
|
||
|
||
---
|
||
|
||
## 14. Decisões
|
||
|
||
### 14.1 Fixadas (Roger 2026-06-21)
|
||
|
||
| # | Decisão | Valor |
|
||
|---|---------|-------|
|
||
| U1 | Shell visual partilhada | Design system React único |
|
||
| U2 | URL marca | **`console.ligbox.com.br`** — login detecta role |
|
||
| U3 | Ops Wazuh | **Mesmo shell** — `/ops` (Spec 019) |
|
||
| U4 | Tom visual | **Caloroso BR** — banco digital |
|
||
| U5 | Prioridade UI | **Gerente `/admin` primeiro** |
|
||
| U6 | Nextcloud Mail | **Opcional por domínio** — toggle `/admin` |
|
||
| U7 | Padrões UX Spec **030** | Status bar, 3 colunas, cards, context panel |
|
||
| U8 | DNS domínio | **Read-only** — Spec **037-DNS-VIEWER**; Ligbox=planned/applied, externo=actual |
|
||
|
||
Ver: [ligbox-console-shell.md](./ligbox-console-shell.md)
|
||
|
||
### 14.2 Pendentes (Roger)
|
||
|
||
| # | Pergunta | Opções |
|
||
|---|----------|--------|
|
||
| 1 | Preços finais Starter/Business/Enterprise | **Aprovar na Admin Ligbox** (035-C) — não no FOSS |
|
||
| 2 | OpenPanel hub vs só Domain Admin | Backend only ✅ — UI só Console |
|
||
| 3 | Senha única Carbonio+Nextcloud Fase 1? | Sim (sync wizard) vs convite separado |
|
||
| 4 | EasyDMARC pool MSP | Confirmar plano EasyDMARC actual Ligbox |
|
||
| 5 | Gateway pagamento | **ASAAS vs Iugu** — boleto + PIX QR obrigatório Fase 4 |
|