┌──────────────────────────┐ │ Cliente JS (output_*.js) │ │ getData({tema, …}) │ └────────────┬─────────────┘ │ HTTP GET /api/data?tema=…&nodos=…&minSim=… ▼ ┌─────────────────────────────────────────┐ │ FLUJOS_APP.js – Express /api/data │ │ │ │ 1) Parsea req.query: tema, nodos, minSim│ │ 2) nodesQuery = { tema, subtema?, … } │ │ 3) .find(nodesQuery).limit(nodos) → │ │ wikipediaNodes, noticiasNodes, │ │ torrentsNodes │ │ 4) Combina y formatea a `formattedNodes`│ │ 5) nodeIds = formattedNodes.map(id) │ │ 6) linksQuery = { │ │ noticia1: { $in: nodeIds }, │ │ noticia2: { $in: nodeIds }, │ │ porcentaje_similitud: { $gte: min }│ │ } │ │ 7) comparacionesCollection.find(linksQuery) → rawLinks │ │ 8) Formatea rawLinks a `{ source, target, value }` │ │ 9) Responde `{ nodes: formattedNodes, links: formattedLinks }` │ └────────────┬────────────────────────────┘ │ ▼ ┌───────────────────────────┐ │ Cliente JS recibe JSON │ │ Filtra nodos sin conexiones│ │ Dibuja ForceGraph3D │ └───────────────────────────┘