// DECISION DETERMINISTICA ESTRICTA (Create vs Update) // Llave: el ID de la opp de SUCURSAL (unico en GHL), guardado como custom field // "ID Oportunidad Sucursal" en la opp de Marca. Buscamos entre las opps del // contacto en Marca una cuyo custom field valga exactamente ese id. // - Si hay match -> UPDATE (esa opp exacta). // - Si NO hay match -> CREATE (sin fallback por nombre). const result = $input.first().json; const opportunities = result.opportunities || []; const sucursalOppId = $('Datos de Lead').first().json.Oportunidad.opportunity_id; let action = 'CREATE'; let opportunityId = null; let matchReason = ''; const match = opportunities.find(o => (o.customFields || []).some(cf => { const v = cf.fieldValueString ?? cf.fieldValue ?? ''; return String(v) === String(sucursalOppId); }) ); if (match) { action = 'UPDATE'; opportunityId = match.id; matchReason = 'Match por ID Oportunidad Sucursal'; } else { action = 'CREATE'; matchReason = 'Sin match por ID Oportunidad Sucursal -> CREATE (contacto tiene ' + opportunities.length + ' opps)'; } return [{ json: { action, opportunityId, matchReason, sucursalOppId, contactId: $('Set Contact ID Resuelto').first().json.contactId, totalOppsContacto: opportunities.length } }];