ligbox-ops-platform/spec.md
Ligbox Spec Hub 3a2c64834b Initial import: ligbox-ops-platform + specs + LAPTOP + obsidian merge (CT130)
Source: VM122 /opt + obsidian-infra + LAPTOP
Hub: CT130 spec-hub 10.10.10.130
2026-06-19 17:26:41 +00:00

388 lines
21 KiB
Markdown
Raw Permalink 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 027 — Matriz de Acesso por Função (Time Ligbox)
**Criado:** 2026-06-19
**Solicitado por:** Roger
**Status:** Draft → Fase 2 implementada (Desk RBAC)
**Prioridade:** P0 (governança operacional)
**Sistemas:** VM112 (Onboard/Mail) · VM122 (Ops Desk) · VM123 (Finance/Hosting)
**Depende de:** Spec **003** (RBAC base), **004** (cadastro), **015** (módulos), **023/024** (billing), **018** (serviços)
**Estende:** Spec 003 — **não substitui** login/MFA/webhooks; adiciona funções e ambientes
---
## Resumo
Esta spec define a **matriz de acesso ao nível de função** para todo o time Ligbox — ops, suporte, financeiro, marketing, SEO, desenvolvimento e funções complementares — com permissões explícitas nos **três ambientes operacionais**:
| VM | IP | Papel |
|----|-----|--------|
| **VM112** | `10.10.10.112` | Wizard onboarding, Carbonio mail tenants, API portal |
| **VM122** | `10.10.10.122` | Ligbox Ops Desk (control plane humano) |
| **VM123** | `10.10.10.123` | FOSSBilling, Odoo 16, OpenPanel (financeiro + sites) |
**Regra de ouro:** humanos **entram sempre pelo Desk (VM122)** ou consolas web dedicadas com conta `@ligbox.com.br`. SSH direto às VMs é excepção para `super_admin` e `devops` — demais funções usam APIs, deep-links e SSO futuro.
**Legenda global**
| Símbolo | Significado |
|---------|-------------|
| ✅ | Acesso total (CRUD / executar) |
| 🔒 | Só leitura (dados podem ser mascarados) |
| 🔗 | Deep-link / abrir consola externa (nova aba) — sem credencial partilhada |
| ⚙️ | Só via API Desk (sem SSH) |
| 🤖 | Conta de sistema / agente autónomo |
| ❌ | Sem acesso |
---
## 1. Catálogo de funções
### 1.1 Funções ops — já existentes (Spec 003)
| ID função | Label Desk | Descrição |
|-----------|------------|-----------|
| `super_admin` | Super Admin | Roger / dono — users, tenants, purge, config global |
| `ops_lead` | Chefe Ops | Gestão operacional, audit, tickets, domínios VM112 |
| `technician` | Suporte | Tickets atribuídos, assist/takeover wizard, migração |
| `noc` | NOC | Monitorização read-only, Wazuh, health — dados sensíveis mascarados |
### 1.2 Funções comercial e negócio (novas)
| ID função | Label Desk | Descrição |
|-----------|------------|-----------|
| `sales_admin` | **Sales Admin** (Gerente Comercial) | Gestão pipeline, preços, equipa comercial, pedidos FOSS, aprovações |
| `sales_support` | **Sales Support** (Analista Comercial) | Atendimento comercial, pedidos, clientes, CRM — sem config admin |
| `finance` | Financeiro | FOSSBilling, Odoo fiscal, validação billing, faturas, inadimplência |
| `marketing` | Marketing | Campanhas, landing, produtos FOSS, leads CRM |
| `seo` | SEO | DNS público, Search Console, performance web, sites OpenPanel |
| `developer` | Developer | Código wizard/Desk, GitHub, deploy, integrações API |
> **Substitui** o role genérico `sales` — usar sempre `sales_admin` ou `sales_support`.
### 1.3 Funções plataforma (recomendadas)
| ID função | Label Desk | Porquê |
|-----------|------------|--------|
| `devops` | DevOps / Infra | Proxmox, Traefik CT114, pfSense, OpenPanel admin — **não** confundir com `developer` |
| `security_analyst` | Segurança / SOC | Incidentes, Wazuh rules, resposta — além do `noc` (só leitura) |
| `content_editor` | Conteúdo / CMS | Sites clientes no OpenPanel — cruza marketing mas foco operacional |
| `agentic_operator` | Operador Agentes IA | Aprova runbooks e acções dos agentes A0A7 antes de remediação |
### 1.4 Funções sistema (não humanas)
| ID função | Tipo | Descrição |
|-----------|------|-----------|
| `api_service` | M2M | Webhooks VM112→122, workers, cron interno |
| `agent_system` | IA | Super-utilizador dos 7 agentes (ver secção 6) |
### 1.5 Funções cliente (fora do time — referência)
| ID função | Onde | Nota |
|-----------|------|------|
| `client_domain_admin` | Wizard `/admin` VM112 | Gerente do domínio — **não** é função Desk |
| `client_readonly` | Futuro portal cliente | Spec futura |
---
## 2. Matriz — Ambiente VM112 (Onboard + Mail)
**Componentes:** `onboard.ligbox.com.br` · `ligbox.com.br` · Carbonio · `ligbox-wizard` API `:8090` · SSH · Carbonio Admin
| Função | Desk assist / wizard | API VM112 | Carbonio admin | SSH VM112 | Purge domínio |
|--------|---------------------|-----------|----------------|-----------|---------------|
| `super_admin` | ✅ takeover | ✅ | ✅ | ✅ | ✅ |
| `ops_lead` | ✅ takeover | ✅ | 🔗 | 🔗 | ✅ |
| `technician` | ✅ takeover* | ⚙️ assist | 🔗 | ❌ | ❌ |
| `noc` | 🔒 observar | 🔒 | ❌ | ❌ | ❌ |
| `finance` | 🔒 ver sessão | 🔒 billing fields | ❌ | ❌ | ❌ |
| `marketing` | 🔒 funil/leads | 🔒 | ❌ | ❌ | ❌ |
| `seo` | 🔒 domínio/DNS | 🔒 dns verify | ❌ | ❌ | ❌ |
| `developer` | ⚙️ dev/staging | ✅ API dev key | ❌ | 🔗 | ❌ |
| `sales_admin` | 🔒 leads + billing | 🔒 | ❌ | ❌ | ❌ |
| `sales_support` | 🔒 leads | 🔒 | ❌ | ❌ | ❌ |
| `devops` | 🔒 infra status | ✅ infra endpoints | 🔗 | ✅ | ⚙️ com root |
| `security_analyst` | 🔒 telemetria | 🔒 | ❌ | 🔗 | ❌ |
| `content_editor` | ❌ | ❌ | ❌ | ❌ | ❌ |
| `agentic_operator` | 🔒 + aprovar | ⚙️ | ❌ | ❌ | ❌ |
| `api_service` | 🤖 webhooks | 🤖 | ❌ | ❌ | ❌ |
\* `technician`: takeover apenas tickets/sessões atribuídas (Spec 010).
**URLs VM112**
| Recurso | URL |
|---------|-----|
| Wizard | `https://onboard.ligbox.com.br` |
| API | `http://10.10.10.112:8090` (LAN) / Traefik interno |
| Webmail admin tenant | `https://mail.{dominio}/` |
| Painel domínio | `https://onboard.ligbox.com.br/admin` |
---
## 3. Matriz — Ambiente VM122 (Ops Desk)
**Componentes:** `desk.ligbox.com.br` · `api.ops.ligbox.com.br` · módulos Spec 015
### 3.1 Módulos Desk × função
| Módulo (ID) | super_admin | ops_lead | technician | noc | finance | sales_admin | sales_support | marketing | seo | developer | devops | security_analyst | content_editor | agentic_operator |
|-------------|:-----------:|:--------:|:----------:|:---:|:-------:|:-----------:|:-------------:|:---------:|:---:|:---------:|:------:|:----------------:|:--------------:|:----------------:|
| `core` (dashboard/tickets) | ✅ | ✅ | ✅ | 🔒 | 🔒 | ✅ | ✅ | 🔒 | 🔒 | 🔒 | 🔒 | 🔒 | 🔒 | 🔒 |
| `overview` | ✅ | ✅ | 🔒 | 🔒 | 🔒 | ✅ | 🔒 | 🔒 | 🔒 | 🔒 | 🔒 | 🔒 | ❌ | 🔒 |
| `overview-home` (Serviços) | ✅ | ✅ | ✅ | 🔒 | 🔒 | ✅ | ✅ | 🔒 | 🔒 | 🔒 | ✅ | 🔒 | 🔒 | 🔒 |
| `infra` / `infra2-soc` | ✅ | ✅ | 🔒 | 🔒 | ❌ | ❌ | ❌ | ❌ | 🔒 | 🔒 | ✅ | ✅ | ❌ | 🔒 |
| `funnel-timing` | ✅ | ✅ | ✅ | 🔒 | 🔒 | ✅ | ✅ | ✅ | ✅ | 🔒 | ❌ | ❌ | ❌ | 🔒 |
| `wazuh-soc` | ✅ | ✅ | 🔒 | 🔒 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | 🔒 | ✅ | ❌ | 🔒 |
| `leads` (abandono CRM) | ✅ | ✅ | ✅ | ❌ | 🔒 | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| `events` (webhooks) | ✅ | ✅ | 🔒 | 🔒 wazuh | 🔒 billing | 🔒 | 🔒 | 🔒 | 🔒 | ⚙️ | ⚙️ | 🔒 | ❌ | ⚙️ |
| `tenants` | ✅ | ✅ | ✅ | 🔒 | 🔒 | ✅ | 🔒 | 🔒 | 🔒 | 🔒 | 🔒 | 🔒 | ❌ | 🔒 |
| `messages` (cadastro) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| `admin-users` | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| `billing-recurrence` (023) | ✅ | ✅ | 🔒 | ❌ | ✅ | ✅ | 🔒 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| `migration` (013) | ✅ | ✅ | ✅ | 🔒 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | 🔒 | ❌ | ❌ | ❌ |
| `assist` (010) | ✅ | ✅ | ✅ | 🔒 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| `modules` (toggle) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
### 3.2 Acções API críticas × função (extensão Spec 003)
| Acção | super_admin | ops_lead | technician | noc | finance | sales_admin | sales_support | marketing | seo | developer | devops | security_analyst | agentic_operator |
|-------|:-----------:|:--------:|:----------:|:---:|:-------:|:-----------:|:-------------:|:---------:|:---:|:---------:|:------:|:----------------:|:----------------:|
| Fechar ticket | ✅ | ✅ | ✅* | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Assist takeover wizard | ✅ | ✅ | ✅* | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Disparar audit manual | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Purge domínio VM112 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ⚙️ | ❌ | ❌ |
| Validar billing (`billing_state`) | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Criar pedido FOSS (VM123) | ✅ | ✅ | ❌ | ❌ | 🔒 | ✅ | ✅ | ❌ | ❌ | ⚙️ | ❌ | ❌ | ❌ |
| Ver CNPJ / morada completa | ✅ | ✅ | ✅ | ❌ masc. | ✅ | ✅ | 🔒 | 🔒 | ❌ | ❌ | ❌ | 🔒 | ❌ |
| Gestão utilizadores Desk | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| PATCH módulos Desk | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Deploy API/frontend | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ |
| Aprovar runbook agente | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
---
## 4. Matriz — Ambiente VM123 (Finance + Hosting)
**Componentes:** FOSSBilling · Odoo 16 · OpenPanel · SSH `:2523`
| Função | FOSSBilling Admin | FOSSBilling Cliente | Odoo 16 | OpenPanel | OpenAdmin | SSH VM123 |
|--------|:-----------------:|:-------------------:|:-------:|:---------:|:---------:|:---------:|
| `super_admin` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| `ops_lead` | 🔗 | 🔒 | 🔗 | 🔗 | 🔗 | 🔗 |
| `technician` | ❌ | ❌ | ❌ | 🔗 site cliente | ❌ | ❌ |
| `noc` | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| `finance` | ✅ | ✅ | ✅ | 🔒 | 🔒 | 🔗 |
| `sales_admin` | ✅ pedidos+clientes+staff RO | ✅ | ✅ Sales Manager | 🔗 | 🔗 Admin | ❌ |
| `sales_support` | ✅ pedidos+clientes | ✅ | ✅ Salesman | 🔗 autologin | ❌ | ❌ |
| `marketing` | 🔒 produtos | ✅ campanhas | ❌ | ✅ sites | 🔗 | ❌ |
| `seo` | ❌ | ❌ | ❌ | ✅ SEO/hosting | 🔗 | ❌ |
| `developer` | ⚙️ API | ❌ | ⚙️ API | ⚙️ bridge | ❌ | 🔗 |
| `devops` | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ |
| `security_analyst` | 🔒 logs | ❌ | ❌ | 🔒 | 🔒 | 🔗 |
| `content_editor` | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
| `agentic_operator` | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| `api_service` | 🤖 webhook | ❌ | 🤖 | 🤖 provision | ❌ | ❌ |
### 4.1 Integração APIs VM123 — perfis de produto
**Documento completo:** [`contracts/vm123-product-roles.md`](contracts/vm123-product-roles.md)
| Produto | API | Auth | Mapeamento função Desk |
|---------|-----|------|------------------------|
| **FOSSBilling** | `POST /api/admin/{module}/{action}` | Basic `admin:API_KEY` | Staff groups: `ligbox-sales-admin`, `ligbox-sales-support`, `ligbox-finance-admin` |
| **Odoo 16** | XML-RPC `/odoo/xmlrpc/2/object` | login + API key | `group_sale_manager``sales_admin`; `group_sale_salesman``sales_support` |
| **OpenPanel** | Bridge `:18087` (Community) ou `:2087/api` (Enterprise) | Bearer JWT / bridge token | `sales_support` = autologin cliente; `devops` = OpenAdmin |
**Diferença Sales Admin vs Sales Support**
| Capacidade | sales_admin (Gerente) | sales_support (Analista) |
|------------|----------------------|--------------------------|
| Desk — validar billing | ✅ | ❌ |
| Desk — leads / funil | ✅ | ✅ |
| FOSS — criar/editar clientes | ✅ | ✅ |
| FOSS — criar pedidos / hosting | ✅ | ✅ |
| FOSS — faturas / preços / produtos | ✅ | 🔒 |
| FOSS — staff / settings | ❌ | ❌ |
| Odoo — CRM manager | ✅ | ❌ |
| Odoo — CRM user | ✅ | ✅ |
| OpenPanel — OpenAdmin | 🔗 | ❌ (só autologin) |
| Fechar tickets comerciais | ✅ | ✅ |
**Provisionamento automático (Fase 3):** ao aprovar cadastro Desk com função `sales_*`, API VM122 cria staff FOSS + user Odoo via `api_service` — ver fluxo no contrato.
**URLs VM123**
| Serviço | URL pública |
|---------|-------------|
| FOSSBilling Admin | `https://financeiro.ligbox.com.br/admin` |
| FOSSBilling Cliente | `https://financeiro.ligbox.com.br/login` |
| Odoo 16 | `https://financeiro.ligbox.com.br/odoo/web/login?db=ligbox` |
| OpenPanel | `https://openpanel.ligbox.com.br` |
| OpenAdmin | `https://openpanel.ligbox.com.br:2087` |
**Integração Desk → VM123 (fase 23):** ficha «Conta do cliente» (Spec 023) abre deep-link FOSS/Odoo; `finance`, `sales_admin` e `sales_support` com botões API no drawer.
---
## 5. Matriz — Consolas externas (deep-link a partir do Desk)
| Consola | super_admin | ops_lead | technician | noc | finance | sales_admin | sales_support | marketing | seo | developer | devops | security_analyst |
|---------|:-----------:|:--------:|:----------:|:---:|:-------:|:-----------:|:-------------:|:---------:|:---:|:---------:|:------:|:----------------:|
| Cloudflare DNS | ✅ | ✅ | 🔗 | ❌ | ❌ | 🔒 | 🔒 | 🔒 | ✅ | ❌ | ✅ | ❌ |
| Traefik CT114 | ✅ | 🔗 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | 🔗 | ✅ | ❌ |
| Proxmox host | ✅ | 🔗 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
| pfSense API | ✅ | 🔗 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | 🔗 |
| Wazuh VM104 | ✅ | ✅ | 🔒 | 🔒 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | 🔒 | ✅ |
| GitHub `itecnologys/*` | ✅ | 🔒 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
| Google Search Console | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | 🔗 | ✅ | ❌ | ❌ | ❌ |
| FOSSBilling Admin | ✅ | 🔗 | ❌ | ❌ | ✅ | ✅ | 🔒 | 🔒 | ❌ | ❌ | ❌ | ❌ |
| Odoo ligbox | ✅ | 🔗 | ❌ | ❌ | ✅ | ✅ | 🔒 | ❌ | ❌ | ❌ | ❌ | ❌ |
---
## 6. Agentes IA (Agentics) — responsabilidades e governança
Os **7 agentes** (VISÃO_PLATAFORMA A0A7) **não são utilizadores humanos**. Operam com role `agent_system` e token dedicado.
| Agente | ID | Responsabilidade | Dados que lê | Acções que executa | Aprovação humana |
|--------|-----|------------------|--------------|-------------------|------------------|
| Orchestrator | A0 | Roteamento e síntese multi-agente | Todos os feeds | Delegar tarefas | `agentic_operator` / `ops_lead` |
| Node Health | A1 | CPU, RAM, serviços Carbonio | VM112 metrics | Alertas, tickets | Auto para info; `ops_lead` para restart |
| Infra Mail | A2 | DNS, LE, Traefik, nginx | DNS, certs, SNI | Sugerir/fix DNS | `devops` ou `ops_lead` antes de aplicar |
| Deliverability | A3 | SPF/DKIM/DMARC | DNS mail | Relatórios | `seo` / `technician` revisão |
| Security Mail | A4 | amavis, spam, clamav | Filas, logs mail | Quarentena sugerida | `security_analyst` |
| Wazuh SOC | A5 | Correlação SIEM | VM104 Wazuh | Alertas Desk | `security_analyst` / `noc` |
| Support Copilot | A6 | Assistência tickets | Tickets, timeline | Rascunho resposta | `technician` envia |
| Remediation | A7 | Runbooks | Playbooks aprovados | Executar após OK | **`agentic_operator` obrigatório** |
### Quem gere agentes no Desk
| Função | Ver sugestões agente | Aprovar runbook A7 | Configurar prompts/modelos |
|--------|---------------------|-------------------|---------------------------|
| `super_admin` | ✅ | ✅ | ✅ |
| `ops_lead` | ✅ | ✅ | 🔒 |
| `agentic_operator` | ✅ | ✅ | ❌ |
| `security_analyst` | ✅ A4/A5 | ✅ scope segurança | ❌ |
| `developer` | ⚙️ | ❌ | ✅ |
| Demais | ❌ ou 🔒 resumo | ❌ | ❌ |
---
## 7. Cadastro e atribuição de função (fluxo)
Estende Spec **004**:
1. Candidato regista-se em `desk.ligbox.com.br/register.html` com `@ligbox.com.br`
2. `super_admin` aprova em **Mensagens** e escolhe **função** (lista secção 1 — incl. `sales_admin` / `sales_support`)
3. Ativação 2-de-3 (e-mail, telefone, TOTP)
4. Desk aplica módulos e permissões conforme matriz desta spec
5. Contas FOSS/Odoo/OpenPanel (VM123) criadas via **provisionamento Fase 3** (`api_service`) ou manualmente — **nunca** partilhar password root VM
### Mapeamento função → módulos default (activação)
| Função | Módulos ON por defeito |
|--------|------------------------|
| `sales_admin` | `core`, `leads`, `funnel-timing`, `overview-home`, `billing-recurrence`, `tenants` |
| `sales_support` | `core`, `leads`, `funnel-timing`, `overview-home`, `tenants` |
| `finance` | `core`, `overview-home`, `billing-recurrence`, `events` (billing) |
| `marketing` | `core`, `leads`, `funnel-timing`, `overview-home` |
| `seo` | `core`, `funnel-timing`, `overview-home`, `leads` |
| `developer` | `core`, `events`, `infra` (read), `overview` |
| `devops` | `core`, `infra`, `infra2-soc`, `overview-home`, `events` |
| `security_analyst` | `core`, `infra2-soc`, `wazuh-soc`, `events` |
| `content_editor` | `core` + acesso OpenPanel (fora Desk) |
| `agentic_operator` | `core`, `overview`, `events`, `infra2-soc` |
### Mapeamento função → VM123 (provisionamento)
| Função | FOSS group | Odoo | OpenPanel |
|--------|------------|------|-----------|
| `sales_admin` | `ligbox-sales-admin` | Sales Manager | OpenAdmin Admin |
| `sales_support` | `ligbox-sales-support` | Salesman | autologin apenas |
| `finance` | `ligbox-finance-admin` | Account Manager | read-only |
Ver [`contracts/vm123-product-roles.md`](contracts/vm123-product-roles.md).
---
## 8. Implementação técnica (fases)
### Fase 1 — Documentação + enum (esta spec) ✅
- Publicar matriz; alinhar Roger
- Actualizar `permissions.py` com constantes `ALL_FUNCTIONS`
### Fase 2 — RBAC Desk (VM122) ✅
- Expandir `ROLES` em `api/app/permissions.py`
- `ROLE_MODULES` map em `registry.py` (Spec 015)
- UI: labels pt-BR no cadastro (Spec 004)
- Testes: `verify-rbac-matrix.sh` por função
### Fase 3 — Deep-links + APIs VM123 ✅ (MVP)
- Drawer «Conta do cliente» → FOSS/Odoo via `/api/v1/vm123/links/client`
- Endpoints `/api/v1/vm123/*` (contrato vm123-product-roles.md)
- Provisionamento staff FOSS + user Odoo ao activar cadastro (`provision_desk_user`)
- **Pré-requisito Odoo:** instalar apps `sale` + `account` na VM123 para grupos standard existirem
### Fase 4 — Agentes
- Service account `agent_system` + fila aprovação `agentic_operator`
- Auditoria de cada acção A7
---
## 9. Requisitos funcionais
- **FR-027-001**: Sistema MUST suportar no mínimo **13 funções humanas** (secção 1) incluindo `sales_admin` e `sales_support`.
- **FR-027-002**: Cada função MUST ter módulos Desk activos por defeito conforme secção 7.
- **FR-027-003**: Nenhuma função excepto `super_admin` e `devops` MUST ter SSH root às VMs por defeito.
- **FR-027-004**: Função `noc` MUST continuar a mascarar CNPJ, morada e e-mails billing (Spec 003).
- **FR-027-005**: Função `finance` MUST poder transicionar `billing_state` (Spec 023).
- **FR-027-006**: Agentes A0A7 MUST NOT autenticar como humanos; usam `agent_system`.
- **FR-027-007**: Acções A7 (remediação) MUST exigir aprovação `agentic_operator` ou `ops_lead`.
- **FR-027-008**: Cadastro MUST restringir e-mail a `@ligbox.com.br` para funções internas.
- **FR-027-009**: `sales_admin` MUST poder validar `billing_state` e criar pedidos FOSS; `sales_support` MUST NOT validar billing nem aceder OpenAdmin.
- **FR-027-010**: Provisionamento VM123 MUST usar APIs em `contracts/vm123-product-roles.md` — sem credenciais root partilhadas.
---
## 10. Fora de âmbito (esta spec)
- SSO Google/Azure
- Permissões por tenant isolado (multi-empresa Ligbox)
- Cliente final (`client_domain_admin`) — permanece no wizard VM112
- Criação automática de contas Linux nas VMs (usar contas app)
---
## 11. Documentos relacionados
| Spec | Relação |
|------|---------|
| **003** | RBAC base (4 roles) — **pai** |
| **004** | Cadastro e atribuição de perfil |
| **015** | Registry módulos Desk |
| **010** | Assist / takeover |
| **013** | Migração e-mail |
| **018** | Serviços / clientes |
| **023** | Billing Desk |
| **024** | VM123 finance stack + APIs produto |
| **021** | Telemetria / segurança wizard |
---
## 12. Critérios de aceite
- [ ] Roger valida matriz secções 26 e Sales Admin vs Support
- [ ] `permissions.py` inclui 13 funções + testes 403
- [ ] Cadastro Desk lista `sales_admin` e `sales_support` no approve
- [ ] Grupos FOSS `ligbox-sales-admin` e `ligbox-sales-support` criados na VM123
- [ ] `sales_admin` abre FOSS + Odoo a partir do Desk
- [ ] `sales_support` cria pedido FOSS sem OpenAdmin
- [ ] Contrato `vm123-product-roles.md` referenciado no deploy VM122
---
*Roger — validar secção 4.1 (APIs VM123) e limites Sales Admin vs Support antes da Fase 2.*