# Modulo 6 Operacion (Leads y Captacion)

## Alcance
- Formularios web de captacion (`lead_forms`, `lead_form_fields`).
- Captura de leads (`lead_captures`) por formulario, manual, CSV y API.
- Importacion CSV de leads.
- Asignacion automatica (reglas + round robin).
- Scoring basico por reglas (`lead_score_rules`).
- Conversion de lead a contacto.
- Hardening enterprise (migracion `015_leads_capture_hardening.sql`):
- Anti-spam (honeypot, captcha flag, rate submissions).
- Doble opt-in con token y expiracion.
- Dedupe de lead vs lead/contact.
- Etapas de calificacion (`raw`, `mql`, `sql`, `nurturing`, `discarded`).
- SLA y alertas.
- Jobs de decay de score y reasignacion de leads estancados.
- CSV por lotes (preview/apply/rollback).
- Webhooks de eventos de lead (`lead.created`, `lead.converted`, etc).

## Preparacion
- Ejecutar migracion `014_leads_capture.sql`.
- Ejecutar migracion `015_leads_capture_hardening.sql`.
- Ingresar a `dashboard?tenant=demo&module=leads`.

## Flujo recomendado
1. Crear formulario de lead.
2. Agregar campos al formulario.
3. Probar formulario publico: `GET /lead/form?tenant=demo&form=web-demo`.
4. Importar CSV desde modulo Leads.
5. Revisar score y usuario asignado automaticamente.
6. Convertir lead a contacto.

## CSV esperado
Headers recomendados:
- `full_name,email,phone,company,notes,utm_source,utm_medium,utm_campaign`

## Endpoints clave
- `GET /lead/form?tenant={slug}&form={form_slug}`
- `POST /lead/form/submit?tenant={slug}`
- `POST /leads/forms/create?tenant={slug}`
- `POST /leads/forms/field/add?tenant={slug}`
- `POST /leads/import/csv?tenant={slug}`
- `POST /leads/reassign?tenant={slug}`
- `POST /leads/convert?tenant={slug}`

## API v1
- `GET /api/v1/leads?tenant={slug}&page=1&q=`
- `GET /api/v1/leads/forms?tenant={slug}`
- `GET /api/v1/leads/metrics?tenant={slug}`
- `GET /api/v1/leads/duplicates?tenant={slug}`
- `GET /api/v1/leads/sla-alerts?tenant={slug}`
- `GET /api/v1/leads/webhooks?tenant={slug}`
- `POST /api/v1/leads/import/mock?tenant={slug}`
- `POST /api/v1/leads/convert?tenant={slug}`
- `POST /api/v1/leads/qualification?tenant={slug}`
- `POST /api/v1/leads/score/decay?tenant={slug}`
- `POST /api/v1/leads/sla/monitor?tenant={slug}`
- `POST /api/v1/leads/reassign/stale?tenant={slug}`
- `POST /api/v1/leads/csv/preview?tenant={slug}`
- `POST /api/v1/leads/csv/apply?tenant={slug}`
- `POST /api/v1/leads/csv/rollback?tenant={slug}`
- `POST /api/v1/leads/webhooks?tenant={slug}`
- `POST /api/v1/leads/webhooks/dispatch?tenant={slug}`
