# Spec 044 — Sincronização Tickets: Portal ↔ Desk ↔ FOSS **Criado:** 2026-07-01 **Solicitado por:** Roger **Status:** 📋 **Especificado — implementação pendente** **Prioridade:** P1 (suporte unificado pós-activação) **Sistemas:** VM112 Portal · VM122 Desk · VM123 FOSSBilling --- ## Resumo Hoje existem **três filas de tickets isoladas**: | Sistema | ID | Estado | |---------|-----|--------| | Portal wizard (VM112) | `OB-XXXXXXXX` | ✅ Activo — JSON local + portal cliente | | Desk Ops (VM122) | `#N` / `CH-*` | ✅ Activo — webhook VM112 | | FOSS Support (VM123) | `foss_ticket_id` | ❌ **Sem sync** com portal/Desk | Esta spec define a **ponte bidireccional** Desk ↔ FOSS, preservando o portal wizard como canal de entrada do cliente e o Desk como **fonte de verdade operacional**. **Contratos:** - [ticket-field-mapping.md](./contracts/ticket-field-mapping.md) — chaves de correlação - [ticket-sync-api.md](./contracts/ticket-sync-api.md) — webhooks e endpoints API **Chat bruto:** [CHAT_BRUTO_WEBMAIL_GATE_TICKETS_SPEC043_044_20260701.txt](../../chat-bruto/CHAT_BRUTO_WEBMAIL_GATE_TICKETS_SPEC043_044_20260701.txt) --- ## Specs relacionadas | Spec | Relação | |------|---------| | [001](../001-webhook-vm112-integration/spec.md) | Webhooks VM112 → Desk (base) | | [010](../010-desk-assist-takeover/spec.md) | Escalada, ASM, `onboarding.escalated` | | [012](../012-abandoned-onboarding-lead/spec.md) | Ticket único por jornada onboarding | | [024](../024-openpanel-fossbilling/spec.md) | FOSS VM123, módulo Support | | [027](../027-desk-rbac-function-matrix/contracts/vm123-product-roles.md) | `support` FOSS, roles comercial | | [039](../039-ligbox-ops-authorization-catalog/spec.md) | `vm123_foss.support.ticket` | | [041](../041-desk-operational-feed/spec.md) | Central Operacional — canal Tickets | | [043](../043-desk-client-activation-sync/spec.md) | `external_customer_id` FOSS pós-activação | --- ## Arquitectura alvo ``` ┌─────────────────────────────────────────────────────────────────────────┐ │ VM112 — Portal (onboard.ligbox.com.br) │ │ OB-* tickets · POST /api/onboarding/support/ticket │ │ Cliente acompanha: GET .../support/ticket/{OB-}/public │ └───────────────────────────────┬─────────────────────────────────────────┘ │ webhook onboarding.escalated (+ started) ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ VM122 — Desk (fonte de verdade ops) │ │ tickets.payload: wizard_ticket_id, foss_ticket_id, external_customer_id│ │ Staff: Chamados · Serviços · Central Operacional (041) │ └───────────────┬───────────────────────────────┬─────────────────────────┘ │ POST espelho (M2M) │ webhook FOSS → Desk ▼ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ VM123 — FOSSBilling Support │ │ Cliente: financeiro.ligbox.com.br/support │ │ Staff: /admin/support · API /api/admin/support/* │ └─────────────────────────────────────────────────────────────────────────┘ ``` --- ## Regras de negócio 1. **Um incidente = um ticket Desk** — nunca duplicar `#N` para a mesma `session_id` ou `foss_ticket_id`. 2. **Portal OB-** continua a existir para onboarding; Desk grava `wizard_ticket_id` no payload (já parcialmente implementado na UI). 3. **FOSS espelho** só após `external_customer_id` conhecido (Spec 043) — tickets de onboarding pré-FOSS ficam só Desk + OB-. 4. **Sync bidireccional de estado:** `open` ↔ `in_progress` ↔ `resolved` ↔ `closed` (mapa em contrato). 5. **Cliente pós-activação** pode abrir ticket no FOSS client area **ou** no portal/console Ligbox; ambos convergem no Desk. --- ## Fases de implementação | Fase | Entrega | VM | |------|---------|-----| | **A** | Documentação + contratos (esta spec) | CT130 | | **B** | `foss_client.create_support_ticket()` + espelho Desk→FOSS | VM122 | | **C** | Webhook FOSS → Desk (`POST /api/v1/webhooks/foss/support`) | VM122 + VM123 | | **D** | UI Desk: link FOSS ticket + badge sync | VM122 | | **E** | Portal pós-activação: criar via Desk API (propaga FOSS) | VM112 / Console | Ver [tasks.md](./tasks.md). --- ## Fora de escopo (v1) - OTRS (→ Spec 011) - Sync automático e-mail inbound (→ Spec 041 fase B) - Tickets Odoo Helpdesk --- ## Validação Roger ```bash # 1) Cliente abre OB- no wizard → Desk #N com wizard_ticket_id # 2) Activar conta (Spec 043) → external_customer_id preenchido # 3) Staff responde no Desk → foss_ticket_id criado no FOSS # 4) Cliente responde no FOSS → webhook actualiza nota no Desk #N ```