// @requires context.js hash.js const candidatosBase = $('Code - Normalizar Candidatos Base').all().map((item) => item.json); const contextRows = $input.all().map((item) => item.json); function groupBy(rows, key) { const map = {}; for (const row of rows) { const k = String(row[key]); if (!map[k]) map[k] = []; map[k].push(row); } return map; } const followupRows = contextRows.filter((row) => row.tipo === 'followup'); const taskRows = contextRows.filter((row) => row.tipo === 'task'); const followupsByTicket = groupBy(followupRows, 'tickets_id'); const tasksByTicket = groupBy(taskRows, 'tickets_id'); return candidatosBase.map((base) => { const idKey = String(base.id); const followups = (followupsByTicket[idKey] || []).map((f) => ({ id: f.id, date: f.date, texto: f.texto })); const tasks = (tasksByTicket[idKey] || []).map((t) => ({ id: t.id, date: t.date, status: t.status, texto: t.texto })); const ticket = normalizeTicket(base, { followups, tasks }); const contextHash = buildContextFingerprint(ticket); return { json: { ticket, contextHash } }; });