# Feature Specification: Orquestração de Serviços — Cliente & Catálogo (018) **Criado:** 2026-06-16 **Solicitado por:** Roger **Status:** Fase 1 concluída (Desk VM122) **Wizard cliente:** inalterado na VM112 — só e-mail (`vm112-mail`) **Prioridade:** P1 **Sistema:** Desk VM122 (+ proxies VM112, futuro multi-wizard) **Módulo Desk:** `overview-home` (nav **Serviços**) **Depende de:** Spec 015 (módulos), Spec 017 (purge domínio VM112) --- ## Resumo A página **Serviços** substitui a visão estreita «Contas / lista de domínios» por um painel operacional estilo **cPanel/WHM**: o técnico sénior selecciona um **cliente** e vê **tiles de serviços** contratados ou disponíveis (e-mail tenant, servidor dedicado, firewall, cloud, Wazuh, site). **Fase 1 (esta entrega):** UI e modelo conceptual no frontend; clientes derivados dos domínios VM112; apenas **E-mail Tenant** activo com purge Spec 017 intacto. **Fase 2:** API Desk `clients` + `service_instances` em SQLite. **Fase 3:** Registry de wizards por `service_catalog.code` e purge por instância. --- ## Problema | Hoje | Necessidade | |------|-------------| | Lista plana de domínios | Vista por **cliente** | | Nome «Contas» ambíguo | **Serviços** — escala para novos produtos | | Purge acoplado à lista | Purge no tile **E-mail Tenant** (Spec 017) | | Um wizard (mail) | Vários wizards futuros (firewall, cloud, Wazuh) | --- ## Nomenclatura | Camada | Valor | |--------|--------| | ID módulo / view | `overview-home` (sem breaking change) | | Menu lateral | **Serviços** | | Título página | **Orquestração de Serviços** | | Subtítulo | *Clientes Ligbox — serviços activos, estado OPS e acções* | | JS global | `DeskServices` (alias `DeskAccounts` para compat.) | --- **Fase 1 (esta entrega):** UI e modelo conceptual no frontend; clientes derivados dos domínios VM112; apenas **E-mail Tenant** activo com purge Spec 017 intacto. **Fase 2:** API Desk `clients` + `service_instances` em SQLite. **Fase 3:** Registry de wizards por `service_catalog.code` e purge por instância. **Fase 4:** Catálogo comercial completo — níveis «Pizza as a Service» + Managed Open Source. **Posicionamento Ligbox (MSP):** > *«Pegamos soluções open source e entregamos como serviço gerenciado — em cloud privada Ligbox, VPS dedicado ou infraestrutura local do cliente.»* --- ## Visão de oferta — «Pizza as a Service» (Roger, 2026) A analogia **Pizza as a Service** descreve **quem gere o quê** entre cliente e provedor. Quanto mais camadas a Ligbox opera, mais «as a service» o produto é — e mais valor (e SLA) o cliente compra. ### Legenda de responsabilidade (camadas da «pizza») | Camada (de baixo para cima) | Equivalente técnico Ligbox | |-----------------------------|----------------------------| | Eletricidade / Gás | Datacenter, energia, link, Hetzner/host | | Fogão | Hypervisor — Proxmox VE, VMs, CTs | | Fogo | SO, rede, firewall base, hardening | | Pizza (massa/base) | Runtime — Docker, Nginx, Traefik, DB engine | | Toppings | Aplicação open source — Carbonio, Nextcloud, ERPNext | | Bebidas | Integrações — DNS, SSL, backup, monitoramento | | Conversas | Uso pelo cliente — utilizadores finais, dados de negócio | **Azul (cliente gere)** · **Laranja (Ligbox gere)** --- ### Nível 1 — Tradicional → Consultoria / Suporte sob demanda *Equivalente: «Feito em casa» — cliente gere tudo; Ligbox ajuda quando chamada.* | Gerido pelo **cliente** | Oferecido pela **Ligbox** | |-------------------------|---------------------------| | Servidores físicos / on-prem | Consultoria Linux | | Rede | Troubleshooting | | Sistema operacional | Instalação inicial | | Banco de dados | Treinamento técnico | | Backup | Auditoria de segurança | | Aplicação | Documentação | | Segurança operacional | — | | Campo catálogo | Valor | |----------------|-------| | `delivery_model` | `traditional` | | `code` (ex.) | `consulting_hour`, `audit_security`, `linux_training` | | Stack típica | Ubuntu Server, Debian, Proxmox VE (no lado do cliente) | | Modelo comercial | Hora técnica · pacote suporte mensal básico | | Wizard Desk | Não — ticket + assist takeover (Spec 010) | | Tile UI | «Suporte» — sem instância provisionada | --- ### Nível 2 — IaaS → Infraestrutura gerenciada *Equivalente: «Leve e Asse» — Ligbox entrega infra pronta; cliente cuida da aplicação.* | Gerido pela **Ligbox** | Gerido pelo **cliente** | |------------------------|-------------------------| | VPS / Cloud | Aplicação | | Virtualização (Proxmox) | Dados | | Firewall (pfSense) | Utilizadores da app | | Backup do servidor | — | | Monitoramento 24/7 | — | | SO + hardening | — | | Campo catálogo | Valor | |----------------|-------| | `delivery_model` | `iaas` | | `code` (ex.) | `managed_vps`, `managed_backup`, `vpn_corporate`, `firewall`, `monitoring_host` | | Stack Ligbox | Proxmox VE, Docker, Nginx, pfSense, Grafana, Prometheus | | Modelo comercial | Mensal fixo — ex. *«Servidor Linux totalmente gerenciado»* | | Wizard Desk | `wizard-iaas-vps` (futuro) — VM, IP, backup job | | Tile UI | Firewall, Cloud/VPS, Monitoring host — badge **IaaS** | **Ligbox hoje (parcial):** regras Proxmox, pfSense WAN, VM112 como nó — encaixa neste nível para a camada «fogão+fogo». --- ### Nível 3 — PaaS → Plataforma gerenciada *Equivalente: «Delivery» — ambiente pronto para deploy; cliente traz código/dados.* | Gerido pela **Ligbox** | Gerido pelo **cliente** | |------------------------|-------------------------| | Infraestrutura (IaaS) | Código da aplicação | | Banco de dados gerido | Dados de negócio | | Deploy / CI/CD | — | | Backup + SSL | — | | Escalabilidade | — | | Campo catálogo | Valor | |----------------|-------| | `delivery_model` | `paas` | | `code` (ex.) | `k8s_managed`, `postgres_managed`, `cicd_pipeline`, `api_hosting` | | Stack Ligbox | Kubernetes, PostgreSQL, Redis, GitLab, Traefik | | Modelo comercial | Mensal por ambiente / por pipeline | | Wizard Desk | `wizard-paas-k8s`, `wizard-paas-db` (futuro) | | Tile UI | DevOps / CI/CD — badge **PaaS** | --- ### Nível 4 — SaaS → Solução completa gerenciada *Equivalente: «Restaurante» — cliente só utiliza.* | Gerido pela **Ligbox** | Gerido pelo **cliente** | |------------------------|-------------------------| | Tudo (infra → app → users ops) | Apenas **uso** — login, conteúdo, processos de negócio | | Actualizações, segurança, backup | — | | Monitoramento, suporte SLA | — | | Campo catálogo | Valor | |----------------|-------| | `delivery_model` | `saas` | | `code` (ex.) | `email_tenant`, `erpnext`, `suitecrm`, `nextcloud`, `wiki_js`, `bitwarden`, `zammad` | | Modelo comercial | Por utilizador/mês · mensal por domínio · tier SLA | | Wizard Desk | `vm112-mail` (e-mail) · wizards por produto (futuro) | | Tile UI | E-mail Tenant (activo Fase 1) — badge **SaaS** | **Ligbox hoje:** **E-mail Tenant** (Carbonio + portal + DNS + Traefik) = **SaaS / Managed Open Source** — produto flagship. --- ### Nível 5 — Managed Open Source Services (MOSP) — modelo ideal MSP Camada comercial que a Ligbox deve priorizar: **software open source operado pela Ligbox; cliente só consome.** | Serviço | Tecnologia | `catalog.code` | Cobrança sugerida | `delivery_model` | |---------|------------|----------------|-------------------|------------------| | E-mail corporativo (tenant) | Carbonio | `email_tenant` | mensal / domínio | `saas` | | E-mail dedicado | Mailcow / VM dedicada | `mail_dedicated` | mensal / servidor | `saas` | | Cloud Storage | Nextcloud | `nextcloud` | por utilizador | `saas` | | ERP | ERPNext | `erpnext` | por utilizador | `saas` | | CRM | SuiteCRM | `suitecrm` | por utilizador | `saas` | | Wiki corporativa | Wiki.js | `wiki_js` | mensal | `saas` | | Password Manager | Bitwarden | `bitwarden` | por utilizador | `saas` | | Helpdesk | Zammad | `zammad` | mensal | `saas` | | Chat corporativo | Mattermost | `mattermost` | mensal | `saas` | | Git privado | Gitea | `gitea` | por utilizador | `saas` | | VPN empresarial | WireGuard | `vpn_corporate` | por empresa | `iaas` | | Monitoramento | Zabbix / Wazuh | `wazuh_domain`, `monitoring_host` | mensal | `iaas` / `saas` | | Backup | Restic + MinIO | `backup_baas` | por GB | `iaas` | | Firewall | pfSense | `firewall` | mensal | `iaas` | | Site / CMS | ligbox-sites | `site_cms` | mensal | `saas` | **Regra de produto:** cada linha do catálogo tem `delivery_model`, `managed_layers[]` (quais camadas da pizza a Ligbox opera) e `wizard_id` quando provisionável. --- ## Portfólio Ligbox — mapa completo (futuro) ### Infraestrutura | Produto | Nível | `code` | Estado Desk | |---------|-------|--------|-------------| | Linux Managed Server | IaaS | `managed_vps` | Planeado | | VPS Management | IaaS | `cloud` | Tile «Em breve» | | Backup as a Service | IaaS | `backup_baas` | Planeado | | Monitoring as a Service | IaaS/SaaS | `monitoring_host` | Parcial (Grafana/Infra) | ### Segurança | Produto | Nível | `code` | Estado Desk | |---------|-------|--------|-------------| | Firewall as a Service | IaaS | `firewall` | Tile «Em breve» | | VPN as a Service | IaaS | `vpn_corporate` | Planeado | | Vulnerability Scanning | Tradicional | `vuln_scan` | Planeado | | Wazuh SOC por domínio | SaaS | `wazuh_domain` | Tile «Em breve» + Infra 2 | ### Aplicações open source (MOSP) | Produto | Nível | `code` | Estado Desk | |---------|-------|--------|-------------| | E-mail Tenant | SaaS | `email_tenant` | **Activo** (Spec 017 purge) | | E-mail dedicado | SaaS | `mail_dedicated` | Tile «Em breve» | | Nextcloud | SaaS | `nextcloud` | Planeado | | ERP (ERPNext) | SaaS | `erpnext` | Planeado | | CRM (SuiteCRM) | SaaS | `suitecrm` | Planeado | | Site / CMS | SaaS | `site_cms` | Derivado VM112 | | Wiki.js | SaaS | `wiki_js` | Planeado | | Bitwarden | SaaS | `bitwarden` | Planeado | | Zammad | SaaS | `zammad` | Planeado | | Mattermost | SaaS | `mattermost` | Planeado | | Gitea | SaaS | `gitea` | Planeado | ### DevOps | Produto | Nível | `code` | Estado Desk | |---------|-------|--------|-------------| | Docker Hosting | PaaS | `docker_hosting` | Planeado | | Kubernetes Hosting | PaaS | `k8s_managed` | Planeado | | CI/CD Pipeline | PaaS | `cicd_pipeline` | Planeado | ### Suporte transversal | Produto | Nível | `code` | Canal Desk | |---------|-------|--------|------------| | SLA empresarial | Overlay | `sla_enterprise` | Tickets + SLA fields | | Monitoramento 24/7 | Overlay | `noc_24x7` | Infra + alertas | | Administração remota | Tradicional | `remote_admin` | Assist takeover | | Consultoria Linux | Tradicional | `consulting_hour` | Tickets | --- ## Modelo conceptual (actualizado) ``` Cliente (org) └── Instância de serviço (service_instance) ├── service_catalog.code (email_tenant, firewall, nextcloud, …) ├── service_catalog.delivery_model (traditional | iaas | paas | saas) ├── managed_layers[] (datacenter, hypervisor, os, runtime, app, ops) ├── status (planned | provisioning | active | degraded | suspended) ├── commercial_plan (hourly | monthly_fixed | per_user | per_gb) ├── wizard_id (vm112-mail, wizard-iaas-vps, …) ├── sla_tier (basic | business | enterprise) └── bindings[] (domain, vm_id, zone_id, agent_id, k8s_ns) ``` ### Matriz de responsabilidade por `delivery_model` | Camada | traditional | iaas | paas | saas | |--------|:-----------:|:----:|:----:|:----:| | Datacenter / link | C | L | L | L | | Hypervisor / VM | C | L | L | L | | SO / rede / firewall | C | L | L | L | | Runtime (Docker, proxy) | C | C | L | L | | BD / deploy / SSL | C | C | L | L | | Aplicação open source | C | C | C | L | | Backup / monitoramento | C | L | L | L | | Utilizadores finais / dados negócio | C | C | C | C | *C = Cliente · L = Ligbox* ### Catálogo de serviços — MVP + roadmap MOSP | code | Label UI | delivery_model | Wizard | Fase Desk | |------|----------|----------------|--------|-----------| | `email_tenant` | E-mail Tenant | saas | `vm112-mail` | **Activo** | | `site_cms` | Site / CMS | saas | `vm112-mail` | Derivado VM112 | | `mail_dedicated` | Servidor E-mail Dedicado | saas | TBD | Em breve | | `firewall` | Firewall (pfSense) | iaas | `wizard-iaas-fw` | Em breve | | `cloud` | Cloud / VPS gerenciado | iaas | `wizard-iaas-vps` | Em breve | | `wazuh_domain` | Wazuh / SOC por domínio | saas | `wizard-soc-wazuh` | Em breve | | `vpn_corporate` | VPN empresarial | iaas | TBD | Planeado | | `backup_baas` | Backup as a Service | iaas | TBD | Planeado | | `nextcloud` | Nextcloud | saas | TBD | Planeado | | `erpnext` | ERP (ERPNext) | saas | TBD | Planeado | | `monitoring_host` | Monitoramento 24/7 | iaas | TBD | Planeado | | `consulting_hour` | Consultoria / suporte | traditional | — (ticket) | Planeado | ### Derivação Fase 1 — Cliente a partir do domínio VM112 Enquanto não existir tabela `clients`: | Campo cliente | Origem | |---------------|--------| | `client_id` | `domain` (chave estável) | | `display_name` | `domain` | | `subtitle` | `portal_admin_email` ou «sem admin portal» | | `health` | `ok` se `carbonio_exists`, senão `warn` | Cada domínio VM112 = **1 cliente** com pelo menos uma instância `email_tenant`. ### Separação VM122 vs VM112 (Roger — clarificação) | Onde | Papel | |------|--------| | **Desk VM122** (`/opt/ligbox-ops-platform`) | Orquestração MOSP — clientes, tenants de oferta, purge OPS, estado | | **Portal VM112** (`/opt/ligbox-wizard`) | **Apenas** wizard e-mail/domínio — Hero e `/onboard` **não** recebem catálogo multi-produto | | **Futuro** | Cada oferta MOSP → wizard próprio (pode provisionar Proxmox, servidor físico, etc.) | A página Serviços no Desk é o **painel do técnico**; os wizards são **um por produto**, nunca um megamenu na Hero da 112. --- ## Reteste E2E — wizard e-mail/domínio (após purge) ### Pré-requisitos 1. Domínio de teste **ausente** em VM112 (lista Serviços vazia para esse domínio) 2. Desk: menu **Serviços** → purge Spec 017 se ainda existir lixo 3. Utilizador Desk: `super_admin` ou `ops_lead` ### Passos | # | Acção | Verificação | |---|--------|-------------| | 1 | Desk → **Serviços** → seleccionar domínio teste | Tile **E-mail Tenant** activo ou cliente ausente | | 2 | Se existir: tile E-mail → **Purge** (senha Root + confirmar domínio) | Domínio desaparece da lista | | 3 | Portal `onboard.ligbox.com.br` ou `onboard.ibytera.com` | Self-Service → registo → `/onboard` | | 4 | Wizard: domínio → DNS → conta → infra | Webhooks no Desk (Tickets/Eventos) | | 5 | Desk → **Serviços** → Actualizar | Cliente reaparece; tenant E-mail **Activo** | | 6 | Modal: infra steps verdes, contas Carbonio | Purge disponível para próximo ciclo | ### Domínios protegidos (sem purge) `ligbox.com.br`, `itecnologys.com` ## UI — Layout 3 colunas ``` ┌─────────────────────────────────────────────────────────────────┐ │ Orquestração de Serviços [Actualizar] │ │ stats: clientes | e-mail activo | sites | logins portal │ ├──────────────┬────────────────────────────┬─────────────────────┤ │ CLIENTES │ SERVIÇOS DO CLIENTE │ ESCOPO OPS │ │ [pesquisa] │ (tiles cPanel) │ (contexto serviço) │ │ • domain A │ [E-mail Tenant] activo │ Carbonio, CF, … │ │ • domain B │ [Site/CMS] activo │ nota purge │ │ │ [Firewall] em breve │ │ │ │ [Cloud] em breve │ │ │ │ [Wazuh] em breve │ │ └──────────────┴────────────────────────────┴─────────────────────┘ ``` ### Coluna Clientes - Lista scrollável de todos os clientes (domínios VM112) - Pesquisa: domínio, e-mail admin, login portal - Badge saúde (verde/laranja) - Clique selecciona cliente e actualiza tiles + escopo ### Coluna Serviços (centro) - Grid de tiles por entrada do `SERVICE_CATALOG` - Estados visuais: `active`, `inactive`, `planned` - **Fase 2+:** badge `delivery_model` (IaaS / PaaS / SaaS / Suporte) e cor por nível - **Fase 2+:** agrupamento por categoria — Infra · Segurança · Apps · DevOps · Suporte - Tile **E-mail Tenant** activo → clique abre **modal Spec 017** (detalhe + purge) - Tile **Site/CMS** → informativo (sem purge separado na Fase 1) - Tiles `planned` → não clicáveis, label «Em breve» + tooltip com stack e modelo comercial ### Coluna Escopo OPS - Lista dos escopos purge / operação quando serviço seleccionado - **E-mail Tenant:** 6 escopos Spec 017 (Carbonio → Desk) - **Futuro:** escopo dinâmico por `service_catalog.purge_scopes_json` - Indicador visual **quem gere** cada camada (matriz pizza — cliente vs Ligbox) - Nota: purge requer senha Root no modal (serviços SaaS provisionados) - Sem cliente seleccionado: texto de ajuda + link para portfólio (doc interna) --- ## Purge (sem regressão — Spec 017) | Item | Mantido | |------|---------| | API | `POST /api/v1/vm112/domains/{domain}/purge` | | Body | `confirm_domain`, `root_password` | | RBAC | `super_admin`, `ops_lead` | | Blocklist | `ligbox.com.br`, `itecnologys.com` | | Escopos VM112 | Carbonio, site, portal, CF, Traefik, Desk | | Modal | `#vm112-domain-modal` (index.html) | O purge continua **por domínio** na Fase 1; na Fase 3 passa a `POST /api/v1/service-instances/{id}/purge` com escopo do catálogo. --- ## RBAC Igual Spec 017 — `can_manage_vm112_domains()` → `super_admin`, `ops_lead`. --- ## API — Fase 1 (sem alteração) Reutiliza endpoints Spec 017: | Método | Path | |--------|------| | GET | `/api/v1/vm112/domains` | | GET | `/api/v1/vm112/domains/{domain}` | | POST | `/api/v1/vm112/domains/{domain}/purge` | --- ## API — Fase 2 (planeada) | Método | Path | Descrição | |--------|------|-----------| | GET | `/api/v1/services/catalog` | Catálogo fixo + `delivery_model`, stack, wizard, preço ref | | GET | `/api/v1/services/catalog/{code}` | Detalhe produto + matriz responsabilidade | | GET | `/api/v1/clients?q=` | Lista clientes | | GET | `/api/v1/clients/{id}` | Cliente + instâncias + bindings + SLA | | POST | `/api/v1/service-instances` | Provisionar (trigger wizard por produto) | | PATCH | `/api/v1/service-instances/{id}` | Suspender, reactivar, alterar plano | | POST | `/api/v1/service-instances/{id}/purge` | Purge por instância (escopo do catálogo) | ### SQLite (Fase 2) ```sql clients ( id, name, tax_id, primary_email, hosting_mode, -- ligbox_cloud | dedicated_vps | customer_onprem sla_tier, created_at ) service_catalog ( code, label, category, -- infra | security | apps | devops | support delivery_model, -- traditional | iaas | paas | saas managed_layers_json, -- ["hypervisor","os","app",…] technology_stack_json, -- ["Carbonio","Traefik",…] wizard_id, commercial_model, -- hourly | monthly_fixed | per_user | per_gb purge_scopes_json, default_enabled ) service_instances ( id, client_id, catalog_code, status, external_ref, meta_json, commercial_plan, monthly_value_cents, provisioned_at, expires_at ) service_bindings ( instance_id, resource_type, resource_id -- resource_type: domain | vm_id | zone_id | agent_id | k8s_namespace | ticket_id ) ``` ### `hosting_mode` do cliente | Valor | Significado | Pizza | |-------|-------------|-------| | `ligbox_cloud` | Hospedado na infra Ligbox (Proxmox/Hetzner) | Ligbox gere datacenter+fogão | | `dedicated_vps` | VPS dedicado gerido pela Ligbox | IaaS+ | | `customer_onprem` | Infra no cliente; Ligbox suporta/audita | Tradicional+ | Um mesmo cliente pode misturar modos por instância de serviço (ex.: e-mail SaaS Ligbox + ERP on-prem com suporte tradicional). --- ## Ficheiros — Fase 1 | Ficheiro | Alteração | |----------|-----------| | `frontend/assets/accounts.js` | Refactor → `DeskServices`, layout 3 colunas | | `frontend/assets/styles.css` | Classes `.servicos-*` | | `frontend/index.html` | Nav «Serviços», cache bust | | `frontend/assets/app.js` | Títulos view | | `api/app/modules/registry.py` | Label módulo «Serviços» | --- ## Critérios de aceite — Fase 1 - [x] Menu mostra **Serviços** (não «Contas») - [x] Lista **todos** os clientes/domínios VM112 na coluna esquerda - [x] Seleccionar cliente mostra tiles de catálogo (≥1 activo para e-mail) - [x] Tile E-mail Tenant abre modal com detalhe + purge funcional - [x] Purge remove domínio e actualiza lista (Spec 017) - [x] Tiles futuros visíveis como «Em breve» - [x] Escopo OPS visível na coluna direita - [x] RBAC inalterado --- ## Critérios de aceite — Fase 2 (catálogo comercial) - [ ] `GET /api/v1/services/catalog` devolve todos os produtos MOSP com `delivery_model` - [ ] Tiles agrupados por categoria (Infra, Segurança, Apps, DevOps, Suporte) - [ ] Badge IaaS / PaaS / SaaS / Suporte em cada tile - [ ] Coluna OPS mostra matriz «cliente vs Ligbox» para serviço seleccionado - [ ] Cliente com `hosting_mode` visível no banner - [ ] Instâncias `traditional` ligadas a tickets (sem wizard) --- ## Critérios de aceite — Fase 3 (multi-wizard) - [ ] Cada `catalog.code` com `wizard_id` abre wizard correcto - [ ] Provisionar firewall → pfSense + regras + binding `vm_id` - [ ] Provisionar Wazuh → agente + binding + link Infra 2 SOC - [ ] Purge por `service_instance` com escopo do catálogo (não hardcoded domínio) --- ## Critérios de aceite — Fase 4 (MSP comercial) - [ ] Plano comercial por instância (`commercial_plan`, valor ref.) - [ ] SLA tier no cliente e alertas quando degradado - [ ] Relatório «o que a Ligbox gere» exportável para proposta comercial (PDF/markdown) - [ ] Upsell: tiles «Não contratado» com CTA interno para técnico sénior --- ## Evolução multi-wizard (Fase 3) 1. `service_catalog.wizard_id` aponta para endpoint VM112 ou outro nó 2. Tile activo com acção «Abrir wizard» / «Retomar onboarding» 3. Wazuh: binding `agent_id` + link para Infra 2 SOC 4. Firewall: binding `vm_id` + link pfSense API 5. Produtos MOSP (Nextcloud, ERPNext): wizard dedicado ou Helm + PaaS base 6. Produtos **traditional**: sem wizard — cria ticket + sessão assist (Spec 010) ### Prioridade sugerida de wizards (Roger) | Ordem | Produto | Nível | Justificativa | |-------|---------|-------|---------------| | 1 | E-mail Tenant | SaaS | **Em produção** — VM112 | | 2 | Firewall pfSense | IaaS | Já existe stack Proxmox + API | | 3 | Wazuh por domínio | SaaS | Infra 2 SOC parcial | | 4 | VPS gerenciado | IaaS | Base para outros produtos | | 5 | Nextcloud | SaaS | Alto valor MOSP | | 6 | ERPNext | SaaS | Upsell empresarial | | 7 | K8s / CI/CD | PaaS | Clientes dev | --- ## Valor para o Técnico de Suporte Sénior | Necessidade OPS | Como a página Serviços responde | |-----------------|----------------------------------| | «O que este cliente comprou?» | Tiles por `delivery_model` + estado | | «O que nós gerimos vs cliente?» | Matriz pizza / `managed_layers` | | «Onde está provisionado?» | Bindings (domínio, VM, zona, agente) | | «Posso apagar para teste?» | Purge Spec 017 (e-mail) → generalizado Fase 3 | | «Qual wizard retomar?» | `wizard_id` + estado `provisioning` | | «Isto é incidente ou gap comercial?» | Tile «Não contratado» vs `degraded` | --- ## Referências - Spec 017 — purge domínio VM112 - Spec 015 — registry módulos `overview-home` - Spec 010 — assist takeover (suporte tradicional) - VM112 API — `/api/admin/domains` - Analogia comercial — **Pizza as a Service** (On-Prem → IaaS → PaaS → SaaS) - Posicionamento MSP — **Managed Open Source Services (MOSP)**