ligbox-ops-platform/projects/ops-desk/api/app/modules/registry.py
Ligbox Spec Hub 821675ab4a Reorganize monorepo into projects/wizard, ops-desk, finance
Specs stay at repo root (cross-VM). Move deploy and code into logical
projects with README per domain, updated manifest.yaml, and symlinks at
legacy paths for VM122 backward compatibility.
2026-06-19 18:55:03 +00:00

140 lines
3.8 KiB
Python

"""Registry de módulos do Ligbox Ops Desk (Spec 015)."""
from __future__ import annotations
from dataclasses import dataclass
@dataclass(frozen=True)
class ModuleDef:
id: str
label: str
description: str
locked: bool = False
nav_views: tuple[str, ...] = ()
default_enabled: bool = True
MODULES: tuple[ModuleDef, ...] = (
ModuleDef(
id="core",
label="Núcleo",
description="Dashboard, tickets, autenticação e conta.",
locked=True,
nav_views=("dashboard", "tickets", "account"),
),
ModuleDef(
id="overview",
label="Audit Overview",
description="Visão clássica por tenant e domínio.",
nav_views=("overview",),
),
ModuleDef(
id="overview-home",
label="Serviços",
description="Orquestração de serviços — clientes, catálogo cPanel e purge OPS (Spec 018).",
nav_views=("overview-home",),
),
ModuleDef(
id="infra",
label="Infra",
description="Health VM112, VM104 e integrações técnicas.",
nav_views=("infra",),
),
ModuleDef(
id="infra2-soc",
label="Infra 2 SOC",
description="Painel visual SOC VM112→VM122.",
nav_views=("infra2",),
),
ModuleDef(
id="funnel-timing",
label="Relógio por fase",
description="Duração entre etapas do onboarding VM112.",
nav_views=(),
),
ModuleDef(
id="wizard-security",
label="Segurança Wizard",
description="CSP, auditoria de inputs e telemetria cibersegurança VM112 (Spec 021).",
nav_views=(),
default_enabled=True,
),
ModuleDef(
id="carbonio-release",
label="Bloqueios Carbonio",
description="Libertar e-mail ACCOUNT_EXISTS — zmprov da via VM112 (Spec 022).",
nav_views=(),
default_enabled=True,
),
ModuleDef(
id="vm112-domains",
label="Domínios VM112",
description="Account Home — domínios orquestrados e purge (testes).",
nav_views=(),
default_enabled=True,
),
ModuleDef(
id="billing-recurrence",
label="Cobrança recorrente",
description="KPI billing, conta cliente e links financeiro (Spec 023).",
nav_views=(),
default_enabled=True,
),
ModuleDef(
id="email-migration",
label="Migração E-mail",
description="Jobs imapsync legado → Carbonio + gate DNS (Spec 019).",
nav_views=("email-migration",),
default_enabled=True,
),
ModuleDef(
id="wazuh-soc",
label="Wazuh SOC Overview",
description="Card e modal de alertas VM104 no Overview.",
nav_views=(),
),
ModuleDef(
id="leads",
label="Leads abandonados",
description="CRM de sessões stale do funil.",
nav_views=("leads",),
),
ModuleDef(
id="events",
label="Eventos webhook",
description="Feed bruto de webhooks VM112 e Wazuh.",
nav_views=("events",),
),
ModuleDef(
id="tenants",
label="Tenants",
description="Registo de nós Ligbox.",
nav_views=("tenants",),
),
ModuleDef(
id="messages",
label="Mensagens",
description="Pedidos de cadastro de administradores.",
nav_views=("messages",),
),
ModuleDef(
id="admin-users",
label="Administradores",
description="Gestão de utilizadores Desk.",
nav_views=("admin",),
),
ModuleDef(
id="modules-admin",
label="Módulos",
description="Activar/desactivar módulos do Desk.",
locked=True,
nav_views=("modules",),
),
)
MODULE_BY_ID = {m.id: m for m in MODULES}
def all_module_ids() -> list[str]:
return [m.id for m in MODULES]