# Feature Specification: Registry de Módulos Desk (015)

**Criado:** 2026-06-16  
**Solicitado por:** Roger  
**Status:** Implementação  
**Prioridade:** P0 (infraestrutura para evolução modular)

---

## Resumo

Cada funcionalidade nova do Ligbox Ops Desk passa a ser um **módulo** registado. O root pode **activar/desactivar** módulos no menu **Módulos**; código desactivado não corre na UI nem enriquece APIs — **sem quebrar** o núcleo.

---

## Módulos (MVP)

| ID | Label | Locked | Nav / efeito |
|----|-------|--------|----------------|
| `core` | Núcleo | sim | Dashboard, Tickets, Conta, Auth |
| `overview` | Audit Overview | não | menu Overview |
| `overview-home` | Overview Home | não | menu Overview Home |
| `infra` | Infra | não | menu Infra |
| `infra2-soc` | Infra 2 SOC | não | menu Infra 2 |
| `funnel-timing` | Relógio por fase | não | enriquece timeline/audit |
| `wazuh-soc` | Wazuh SOC Overview | não | card/modal VM104 no Overview |
| `leads` | Leads abandonados | não | menu Leads |
| `events` | Eventos webhook | não | menu Eventos |
| `tenants` | Tenants | não | menu Tenants |
| `messages` | Mensagens cadastro | não | menu Mensagens |
| `admin-users` | Administradores | não | menu Administradores |

---

## Persistência

- Ficheiro: `/data/desk_modules.json` (volume Docker)
- Default: todos activos excepto definido em `registry.py`
- Override env: `DESK_MODULES_DISABLED=infra2-soc,funnel-timing` (opcional)

---

## API

| Método | Path | Role |
|--------|------|------|
| GET | `/api/v1/modules` | autenticado |
| PATCH | `/api/v1/modules/{module_id}` | `super_admin` |

Body PATCH: `{ "enabled": true|false }`

---

## Frontend

- Nav items com `data-module="module-id"`
- Boot: `GET /api/v1/modules` → `applyModuleVisibility()`
- `refresh()` ignora views de módulos desactivados
- Menu **Módulos** (só root): toggles + descrição

---

## Princípio de não-regressão

- Módulo OFF → rotas API opcionais devolvem payload **sem** campos do módulo
- Módulo OFF → `render*` do módulo não é chamado
- Núcleo nunca depende de módulos opcionais
