# Spec 044 — Tasks ## Documentação - [x] Spec índice `spec.md` - [x] Contrato `contracts/ticket-field-mapping.md` - [x] Contrato `contracts/ticket-sync-api.md` - [x] Registo em `SPEC-REGISTRY.md` - [x] Ligações cruzadas specs 010/012/024/041/043 - [x] Sync Obsidian VM130 ## Fase A — Estado actual (baseline) - [x] Portal OB- → Desk via `onboarding.escalated` (VM112) - [x] UI Desk mostra `wizard_ticket_id` (OB-) no painel ticket - [x] FOSS Support nativo em VM123 (sem bridge) - [ ] Inventário endpoints FOSS Support API (Roger validar admin) ## Fase B — Desk → FOSS (espelho) - [ ] Coluna/payload `foss_ticket_id` em `tickets` - [ ] `foss_client.create_support_ticket()` — M2M admin API - [ ] Hook pós-criação ticket Desk: se `billing_accounts.external_customer_id` → espelho FOSS - [ ] Idempotência: não recriar se `foss_ticket_id` já existe - [ ] Unit tests `test_foss_ticket_sync_044.py` ## Fase C — FOSS → Desk (webhook) - [ ] Endpoint `POST /api/v1/webhooks/foss/support` (auth `FOSS_WEBHOOK_SECRET`) - [ ] Plugin/hook FOSS ou cron poll — eventos `ticket.opened`, `ticket.reply`, `ticket.closed` - [ ] Upsert nota / status no ticket Desk correlacionado - [ ] Log em `webhook_events` source=`vm123-foss` ## Fase D — UI Desk - [ ] Painel ticket: badge «FOSS #123» + deep-link `financeiro.ligbox.com.br/admin/support` - [ ] Serviços IaaS / ficha cliente: «Abrir ticket FOSS» (roles sales_admin, sales_support) - [ ] Central Operacional (041): evento `desk_tickets` com `foss_ticket_id` ## Fase E — Portal pós-activação - [ ] Console `/me/suporte` ou FOSS client area — single entry (decisão Roger) - [ ] API Desk `POST /api/v1/support/tickets` → cria Desk + FOSS espelho - [ ] Resposta cliente inclui `tracking_url` (portal ou FOSS) ## Testes E2E - [ ] Roger: OB- onboarding → activar conta → staff responde → cliente vê no FOSS - [ ] Roger: cliente abre ticket FOSS → aparece no Desk Chamados