# Spec 029 — Tickets Workspace (Motor de Tickets)

**Status:** ✅ Reconstruído 2026-06-19  
**Prioridade:** P0 — antes de Live Presence / ASM  
**VM:** VM122 Desk · `desk.ligbox.com.br`

## Resumo

Motor de tickets modular — command center com KPIs, filas inteligentes, painel de detalhe com abas e integração ASM (quando Spec 010 activa).

## Módulos frontend

| Ficheiro | Função |
|----------|--------|
| `tickets-workspace.js` | Lista P0-P2: 8 KPIs, cards, filas, busca, softRefresh |
| `tickets-detail-panel.js` | Detalhe P1: abas Resumo \| Ao vivo \| Funil \| Espelho |
| `desk-live-stub.js` | Fallback se módulo `wizard-live` inactivo |
| `app.js` | Delega `renderTickets` / `renderTicketDetail` |

## Entregas P0 → P2

### P0 — Lista
- 8 KPIs: Abertos, Assistindo, Escalados, Live, Sem dono, Parados, Billing, Wazuh
- Cards com 3 sinais: estado · live/offline · fase/SLA
- Busca por #ticket, domínio, e-mail, sessão, OB-

### P1 — Detalhe + filas
- Abas: Resumo, Ao vivo, Funil, Espelho cliente (pré-ASM)
- Banner próxima acção (assumir, escalar, reabrir ASM…)
- Chips de fila: Live, Parados, Sem dono, Billing, Wazuh, Escalados

### P2 — Interacção
- KPIs clicáveis (filtram lista)
- `softRefresh` no poll global (~30s) sem flash

## Deploy

```bash
# VM122 (quando SSH activo)
bash /opt/ligbox-spec-hub/scripts/deploy-tickets-vm122.sh

# Ou manual
cd /opt/ligbox-ops-platform
git pull
cp -a projects/ops-desk/frontend/assets/tickets*.js frontend/assets/
docker compose -f docker-compose.mvp.yml build frontend && docker compose -f docker-compose.mvp.yml up -d frontend
```

## Dependências

- Spec 003 (auth/RBAC) — `canAssist()`, roles
- Spec 010 (ASM) — abas espelho, resume-wizard (backend)
- Spec 012 (ABANDONADO) — rails stale/lead nos cards
- Spec 015 (módulos) — `DeskModules`
- Spec 027 wizard-live (opcional) — substitui `desk-live-stub.js`

→ Ver [ARCHITECTURE.md](./ARCHITECTURE.md)
