# Tasks — Spec 012 Abandoned Onboarding → Lead

**Spec:** `012-abandoned-onboarding-lead`  
**Última atualização:** 2026-06-10

---

## Fase A — Ticket no «Criar conta» ✅

- [x] **T001** Desk: ticket em `onboarding.started` (não só `account.created`)
- [x] **T002** Desk: `account.created` → nota no ticket existente (sem duplicar)
- [x] **T003** Desk: `_backfill_funnel_notes` para `domain.validated` + `dns.applied`
- [x] **T004** VM112: remover `onboarding.started` de `validate-domain`
- [x] **T005** VM112: emitir `onboarding.started` em `POST /account/create` com `email`
- [x] **T006** Scripts `verify-funnel-webhook.sh` — ordem real do funil
- [x] **T007** Spec 012 + BACKLOG actualizados

---

## Fase B — Detecção abandono → Lead ✅

- [x] **T010** Env `ONBOARD_STALE_HOURS` (default 24)
- [x] **T011** Worker job: sessões stale → `crm_track=lead` + `lead_detected_at`
- [x] **T012** `GET /api/v1/crm/leads` — lista tickets lead
- [x] **T013** UI Desk: painel «Leads abandonados» (grid + view + filtro tickets)
- [x] **T014** Badge stale/lead na grid sessões liga ao ticket

---

## Fase C — Outreach

- [ ] **T020** `POST /api/v1/crm/leads/{ticket_id}/contact` — log outreach
- [ ] **T021** `POST /api/v1/crm/leads/{ticket_id}/promote` — promoção manual
- [ ] **T022** Spec 007: push «lead abandonado» → ops_lead
- [ ] **T023** Template e-mail recuperação (VM108 Postfix)

---

## Fase D — CRM externo + Chat

- [ ] **T030** Decisão Roger: canal chat (widget / tablet / outro)
- [ ] **T031** Integração Odoo CRM (lead export idempotente por `ticket_id`)
- [ ] **T032** Webhook CRM inbound — `lead_converted` / `lead_lost`
- [ ] **T033** Documentação quickstart operacional

---

## Verificação

```bash
# Ordem real (domínio → DNS → criar conta)
bash /opt/ligbox-ops-platform/scripts/verify-funnel-webhook.sh

# VM112: onboarding.started só em account/create
ssh root@10.10.10.112 "grep -n onboarding.started /opt/ibytera-mail-portal/backend/app/routers/onboarding.py"
```
