From ac47ad135de0d42a5facfdd47bafbe8497a9de17 Mon Sep 17 00:00:00 2001 From: marsalva Date: Sat, 14 Mar 2026 12:56:38 +0000 Subject: [PATCH] Actualizar server.js --- server.js | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/server.js b/server.js index 61915a1..d85cf32 100644 --- a/server.js +++ b/server.js @@ -1597,6 +1597,63 @@ app.post("/providers/credentials", authMiddleware, async (req, res) => { } catch (e) { res.status(500).json({ ok: false }); } }); +// ========================================== +// đŸ“„ RECEPCIÓN DE SERVICIOS (EMBUDO DIRECTO) +// ========================================== +app.post("/providers/scraped", authMiddleware, async (req, res) => { + try { + const { provider, services } = req.body; + + if (!provider || !Array.isArray(services)) { + return res.status(400).json({ ok: false, error: "Formato de datos invĂĄlido" }); + } + + let count = 0; + for (const svc of services) { + + // 1. Extraer la referencia + const ref = svc['Referencia'] || svc['NÂș Siniestro'] || svc['Expediente'] || svc['service_ref']; + if (!ref) continue; + + // đŸ”„ 2. DETECTOR DIRECTO DE URGENCIAS đŸ”„ + let esUrgente = false; + + // Leemos el estado venga en la columna que venga (HomeServe suele usar 'ACTUALMENTE EN' o 'Estado') + const estadoSvc = String(svc['ACTUALMENTE EN'] || svc['Estado'] || svc['ESTADO'] || "").toLowerCase(); + + // Si el estado contiene la frase exacta de HomeServe o la palabra urgencia + if (estadoSvc.includes('atencion presencial urgencias') || estadoSvc.includes('urgencia')) { + esUrgente = true; + } + + // Por si acaso algĂșn otro proveedor (como Multi) envĂ­a una columna literal llamada "Urgente" + if (String(svc['Urgente']).toLowerCase() === 'sĂ­' || String(svc['URGENTE']).toLowerCase() === 'si' || String(svc['Urgente']).toLowerCase() === 'true') { + esUrgente = true; + } + + // 3. Guardamos en la Base de Datos + await pool.query(` + INSERT INTO scraped_services (owner_id, provider, service_ref, raw_data, is_urgent) + VALUES ($1, $2, $3, $4, $5) + ON CONFLICT (owner_id, provider, service_ref) + DO UPDATE SET + raw_data = scraped_services.raw_data || EXCLUDED.raw_data, + is_urgent = EXCLUDED.is_urgent + `, [req.user.accountId, provider, ref, JSON.stringify(svc), esUrgente]); + + count++; + } + + console.log(`đŸ“„ [CAPTURA] Recibidos ${count} servicios de ${provider}.`); + res.json({ ok: true, inserted: count }); + + } catch (error) { + console.error("❌ Error recibiendo servicios:", error); + res.status(500).json({ ok: false, error: error.message }); + } +}); + + app.get("/providers/scraped", authMiddleware, async (req, res) => { try { const q = await pool.query(`