Recursos
Operaciones
listar · ver · crear · actualizar
Filtros
GET /operations?stage=&operation_type=&lead_id=&open_only=
Las respuestas exponen flow, stage, stage_label e is_terminal.
Crear
POST /operations pasa por la misma primitiva que la aplicación: un lead tiene
como máximo una operación abierta por tipo, así que si ya existe se devuelve
con 200 en vez de crear un duplicado. 201 significa que se creó ahora.
lead_iduuidrequiredoperation_typebuy | rent | sellrequiredstagestringEstado inicial, no una transición: aquí no hay compuerta. Es lo que permite importar una cartera cuyos negocios ya vienen a mitad del embudo.
Actualizar la etapa
PATCH /operations/{id} con stage no es una escritura de columna. Obedece
las reglas del botón « Avanzar »:
- un paso a la vez — saltarse una etapa es
422 invalid_transition; - la compuerta de la etapa actual tiene que estar pasada, si no
422 stage_gate_blockedcon lo que falta endetails.pending_actions; lost·expired·cancelledse alcanzan desde cualquier punto;lostexigelost_reason;won·sold·rentedsolo desde la última etapa activa del recorrido;- una operación cerrada no se mueve (
422 operation_closed).
details.reason lleva la variante legible por máquina: invalid_stage,
invalid_transition, stage_gate_blocked, operation_closed,
lost_reason_required, db_gate_blocked.
La base de datos impone compuertas propias por encima de estas — un alquiler
no cierra sin el depósito pagado, por ejemplo. Salen como 422 con
details.reason = "db_gate_blocked".
Ver Etapas para los tres recorridos completos.