ligbox-ops-platform/specs/040-desk-design-system-v013/spec.md
Ligbox Spec Hub b03bb2c37c feat(desk): UI/API Spec 039-041 + deploy atómico e smoke GREEN
Commita governance, user-wizard, operational-feed e catálogo RBAC;
adiciona deploy-desk-full.sh, smoke-desk.sh e regra anti-deploy parcial;
documenta credencial VM112 @betinplace.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-02 13:32:15 +00:00

8.6 KiB
Raw Blame History

Spec 040 — Desk Design System v0.13 (UI Operacional)

Criado: 2026-06-29
Solicitado por: Roger
Status: UI Access Control Hub aprovado Roger 2026-06-25 · 0.13.1-ac-hub-ui-aprovado-roger
Prioridade: P0
Versão Desk: 0.13.1-ac-hub-ui-aprovado-roger
Rollback DS v0.13: projects/ops-desk/frontend/staging-snapshot/v0.12.2-pre-ds-20260625/
Rollback UI aprovado: projects/ops-desk/frontend/staging-snapshot/v0.13.1-ac-hub-ui-aprovado-20260625/
Aprovação Obsidian: APROVADO-UI-ROGER-20260625
Estende: Spec 027 (Matriz RBAC), 039 (catálogo autorização), 015 (módulos Desk)
Não inclui: Central Operacional / Operational Feed — ver Spec 041


1. Problema

O Desk v0.12.2 tinha:

  • Modal simples para criar utilizador (1 ecrã)
  • Controle de acesso em split compacto (tabela inline)
  • Aba «Mensagens» = apenas pedidos de cadastro

Roger definiu Design System enterprise (UI principles, visual language, navigation, action patterns, user wizard) e mockups para:

  1. UserWizard — criar utilizador (5 passos, fullscreen)
  2. Access Control Hub — gestão completa na aba Controle de acesso (Matriz)
  3. Vocabulário: Operational feed, Access capabilities, Desactivar conta

A Spec 041 cobre isoladamente a aba Central Operacional (ex-Mensagens).


2. Escopo desta spec (040)

Incluído Excluído (→ 041)
UserWizard fullscreen Feed omnicanal
Access Control Hub /api/v1/ops-inbox/*
Governance API Canais WhatsApp, email inbound
Audit log utilizadores KPIs inbox
Design tokens CSS (ligbox-ds.css)

3. Arquitetura UI

Matriz de Acesso (#view-access-matrix)
└── Aba «Controle de acesso» (tab access-control)
    └── DeskAccessControlHub (DS-FE-004)
        ├── Sub-aba «Gestão de utilizadores»
        │   ├── StatsCard row (KPIs)
        │   ├── Entity cards (lista utilizadores — NÃO tabela primária)
        │   ├── Right detail panel (Detalhes | Access capabilities | Actividades)
        │   └── + Criar utilizador → DeskUserWizard (DS-FE-003)
        └── Sub-aba «Capacidades da função»
            └── DeskAccessControlPanel.paintCapabilitiesOnly (Spec 027/039)

DeskUserWizard (DS-FE-003) — fullscreen modal
├── Step 1 Basic data
├── Step 2 Profile and group
├── Step 3 Access capabilities (module matrix)
├── Step 4 Review
└── Step 5 Success (+ audit + invite link)

4. Registo de ficheiros (referência futura)

Código interno: DS-{tipo}-{nnn} — usar em commits, PRs e tickets.

4.1 Frontend — Design System

Código Ficheiro Global JS Função
DS-FE-001 frontend/assets/ligbox-ds.css Tokens CSS (--lb-*), cards, wizard, modals, layout ops
DS-FE-002 frontend/assets/ligbox-ds.css Cache bust: ?v=20260629v013

4.2 Frontend — Módulos

Código Ficheiro Global JS Função
DS-FE-003 frontend/assets/user-wizard.js window.DeskUserWizard Wizard fullscreen criar utilizador (≥3 passos)
DS-FE-004 frontend/assets/access-control-hub.js window.DeskAccessControlHub Hub img 4 — cards, KPIs, painel direito
DS-FE-005 frontend/assets/access-control-panel.js window.DeskAccessControlPanel Delega hub; sub-aba capacidades (Spec 039)
DS-FE-006 frontend/assets/user-management-panel.js window.DeskUserManagement Edit modal, clone; openEdit() para hub

4.3 Frontend — Integração

Código Ficheiro Alteração
DS-FE-010 frontend/index.html Scripts DS-FE-003/004/005/006, ligbox-ds.css, nav «Central Operacional», footer v0.13.0
DS-FE-011 frontend/assets/app.staging.js Títulos Spec 040/041; renderMessages() delega Spec 041
DS-FE-012 frontend/assets/access-matrix.js Host #am-access-control-hostDeskAccessControlPanel.paint

4.4 API — Backend

Código Ficheiro Router prefix Função
DS-API-001 api/app/desk_governance_store.py Schema SQLite: audit, user_meta, module permissions
DS-API-002 api/app/governance_routes.py /api/v1/governance Wizard, freeze, reset password, audit, stats
DS-API-003 api/app/main.py Registo routers; init schema; version 0.13.0-design-system

4.5 Versionamento e rollback

Código Ficheiro Função
DS-META-001 projects/ops-desk/VERSION 0.13.0-design-system
DS-META-002 frontend/staging-snapshot/v0.12.2-pre-ds-20260625/ Snapshot pré-build + ROLLBACK.md

4.6 Skills (Cursor — design system)

Código Ficheiro Função
DS-SK-001 ~/.cursor/skills/ligbox/product.skill.md Identidade produto
DS-SK-002 ~/.cursor/skills/ligbox/ux.skill.md UX + visual + navigation
DS-SK-003 ~/.cursor/skills/ligbox/permissions.skill.md Hierarquia RBAC UI
DS-SK-004 ~/.cursor/skills/ligbox/onboarding.skill.md User creation flow
DS-SK-005 ~/.cursor/skills/ligbox/messaging.skill.md → aponta Spec 041
DS-SK-006 ~/.cursor/skills/ligbox/audit.skill.md Audit log pattern

5. API Governance (resumo)

Contrato completo: contracts/governance-api.md

Método Endpoint Código acção Descrição
GET /api/v1/governance/modules desk.governance.modules.list Módulos + níveis + grupos
GET /api/v1/governance/users/stats desk.governance.users.stats KPIs gestão utilizadores
GET /api/v1/governance/users/{username}/meta desk.governance.user.meta Meta + internal_id + permissions
POST /api/v1/governance/users/wizard desk.auth.user.create Criar via wizard (audit + invite)
POST /api/v1/governance/users/{username}/freeze desk.auth.user.freeze Congelar/activar + audit
POST /api/v1/governance/users/{username}/reset-password desk.auth.user.password.reset Reset admin + audit
GET /api/v1/governance/audit desk.governance.audit.list Audit por target

Auth: Bearer JWT · can_manage_users (super_admin).


6. Modelo de dados (SQLite)

desk_governance_audit

Coluna Tipo Notas
actor_username TEXT Quem executou
action TEXT ex. user.created, user.frozen
target_type TEXT ex. user
target_id TEXT username
summary TEXT «Created by Super Admin»

desk_user_meta

Coluna Tipo Notas
internal_id TEXT LB-XXXXXXXX
main_group TEXT Ops, Comercial, …
secondary_groups_json TEXT JSON array
module_permissions_json TEXT Desk/OpenPanel/… × none/read/partial/full
invite_token TEXT Link convite

7. User Wizard — fluxo

Ver skill DS-SK-004 e mockups Roger (imgs 12).

Passos UI: Basic data → Profile/group → Access capabilities → Review → Success.

Submit POST /api/v1/governance/users/wizard executa:

  1. INSERT desk_users
  2. INSERT desk_user_meta
  3. INSERT desk_governance_audit (user.created)
  4. E-mail convite (opcional)
  5. Resposta: user, meta, internal_id, invite_link

8. Regras UX (obrigatórias)

  • Create: sempre wizard, mínimo 3 passos, fullscreen
  • Edit: side panel / modal médio (DeskUserManagement.openEdit)
  • Desactivar conta: small modal + audit (nunca «Delete» na UI)
  • Cards > tables para lista primária de utilizadores
  • Paleta: #F6F3EE / #5B1632 / cards #FFFFFF

9. Relação com outras specs

Spec Relação
027 Matriz RBAC; aba Controle de acesso dentro da Matriz
039 Catálogo acções; toggles capacidades da função
041 Central Operacional (aba ex-Mensagens) — spec separada
004 Pedidos cadastro — renderRegistrationRequestsLegacy() preservado

10. Deploy

# VM122 produção
docker cp → ligbox-ops-platform_frontend_1:/usr/share/nginx/html/
docker cp → ligbox-ops-platform_api_1:/app/app/
docker restart ligbox-ops-platform_api_1

Validação:

  • GET https://desk.ligbox.com.br/api/health"version":"0.13.0-design-system"
  • Matriz → Controle de acesso → + Criar utilizador (wizard)