# Modulo 7 Operacion (Pipeline de Ventas)

## Alcance
- Kanban por etapas para oportunidades abiertas.
- Monto por oportunidad y forecast por categoria.
- Forecast ponderado por probabilidad de etapa.
- Cierre `won/lost`, reapertura y motivos de perdida.
- Historial de movimiento/cierre en `opportunity_stage_history`.
- Checklist y reglas de validacion por etapa.
- Probabilidad dinamica y score de confianza.
- Motivos de ganada y competidores.
- SLA por etapa con alertas.
- Forecast por ventana y escenarios.
- Dashboard ejecutivo de conversion.
- Deteccion de duplicados de oportunidades.

## Preparacion
- Ejecutar migraciones:
- `004_pipeline_order_history.sql`
- `016_pipeline_sales_forecast.sql`
- `017_pipeline_enterprise_hardening.sql`

## Flujo recomendado
1. Crear oportunidad en modulo Pipeline.
2. Mover por etapas en kanban.
3. Ajustar `forecast_category` (`pipeline`, `best_case`, `commit`, `omitted`).
4. Cerrar en `won` o `lost` (si es `lost`, registrar motivo).
5. Reabrir si aplica.
6. Revisar KPIs:
- abiertas
- won/lost
- monto abierto
- forecast ponderado

## Endpoints web
- `POST /pipeline/create?tenant={slug}`
- `POST /pipeline/move?tenant={slug}`
- `POST /pipeline/forecast/update?tenant={slug}`
- `POST /pipeline/close?tenant={slug}`
- `POST /pipeline/reopen?tenant={slug}`
- `POST /pipeline/loss-reason/create?tenant={slug}`
- `POST /pipeline/win-reason/create?tenant={slug}`
- `POST /pipeline/competitor/create?tenant={slug}`

## API v1
- `GET /api/v1/pipeline?tenant={slug}`
- `POST /api/v1/pipeline/move?tenant={slug}`
- `GET /api/v1/pipeline/loss-reasons?tenant={slug}`
- `GET /api/v1/pipeline/win-reasons?tenant={slug}`
- `GET /api/v1/pipeline/competitors?tenant={slug}`
- `GET /api/v1/pipeline/forecast/window?tenant={slug}&from=YYYY-MM-DD&to=YYYY-MM-DD`
- `GET /api/v1/pipeline/scenarios?tenant={slug}`
- `GET /api/v1/pipeline/dashboard?tenant={slug}`
- `POST /api/v1/pipeline/loss-reasons?tenant={slug}`
- `POST /api/v1/pipeline/win-reasons?tenant={slug}`
- `POST /api/v1/pipeline/competitors?tenant={slug}`
- `POST /api/v1/pipeline/forecast?tenant={slug}`
- `POST /api/v1/pipeline/close?tenant={slug}`
- `POST /api/v1/pipeline/reopen?tenant={slug}`
- `POST /api/v1/pipeline/duplicates/scan?tenant={slug}`

## Cron recomendado
- `POST /cron/pipeline-sla?tenant={slug}`
- `POST /cron/pipeline-snapshot?tenant={slug}`
