// abrir_oportunidad
// Abre una oportunidad de venta para un cliente existente. La etapa
// inicial la fija el morfismo ("prospecto"), no el caller — una
// oportunidad siempre nace al principio del pipeline.
//
// ids.cliente: UUID del Cliente (la oportunidad guarda la FK).
// params: { oportunidad_id, titulo, monto:i64, currency:str, timestamp:str }

let opp_id = input.params.oportunidad_id;
if type_of(opp_id) == "()" {
    throw "params.oportunidad_id es obligatorio (idempotencia)"
}

let titulo = input.params.titulo;
if type_of(titulo) == "()" {
    throw "params.titulo es obligatorio"
}

let monto = input.params.monto;
if monto <= 0 {
    throw "monto debe ser positivo"
}

[
    #{
        op: "create",
        entity: "Oportunidad",
        id: opp_id,
        data: #{
            id:         opp_id,
            cliente_id: input.ids.cliente,
            titulo:     titulo,
            monto:      monto,
            currency:   input.params.currency,
            etapa:      "prospecto",
            timestamp:  input.params.timestamp,
        },
    },
]
