ligbox-ops-platform/specs/035-ligbox-mail-bundles-foss-openpanel/spec.md
Ligbox Spec Hub 2d2b74fad8 docs(spec-043): mapa activação cliente e ligações cruzadas
Documenta Wizard→Desk→FOSS→OpenPanel→Odoo com contratos, rollback e
registo SPEC-REGISTRY antes da implementação das fases de activação.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-01 15:06:19 +00:00

698 lines
29 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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)) · **[043 mapa activação](../043-desk-client-activation-sync/contracts/activation-field-mapping.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. 100200) | 1 incluído | **R$ 249/mês** |
| `ligbox-mail-business` | **Ligbox Mail Business** | 25 | 30 GB | 200 GB (config. 100300) | 1 incluído | **R$ 549/mês** |
| `ligbox-mail-enterprise` | **Ligbox Mail Enterprise** | 50 | 50 GB | 300 GB (config. 100500) | 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:**
- **2045% 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 | 2050 |
| 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 100500 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 48/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 13: 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 |