Actualizar server.js
This commit is contained in:
39
server.js
39
server.js
@@ -1812,7 +1812,7 @@ app.post("/providers/credentials", authMiddleware, async (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// ==========================================
|
// ==========================================
|
||||||
// 📥 RECEPCIÓN DE SERVICIOS (EMBUDO INTELIGENTE FINAL Y DEFINITIVO)
|
// 📥 RECEPCIÓN DE SERVICIOS (EMBUDO INTELIGENTE CON MEMORIA DE URGENCIA)
|
||||||
// ==========================================
|
// ==========================================
|
||||||
app.post("/providers/scraped", authMiddleware, async (req, res) => {
|
app.post("/providers/scraped", authMiddleware, async (req, res) => {
|
||||||
try {
|
try {
|
||||||
@@ -1824,7 +1824,6 @@ app.post("/providers/scraped", authMiddleware, async (req, res) => {
|
|||||||
|
|
||||||
let count = 0;
|
let count = 0;
|
||||||
|
|
||||||
// 🛑 1. CARGAMOS LA CONFIGURACIÓN DE AUTO-DESPACHO DE ESTE PROVEEDOR
|
|
||||||
const credsQ = await pool.query(
|
const credsQ = await pool.query(
|
||||||
"SELECT auto_dispatch FROM provider_credentials WHERE owner_id = $1 AND provider = $2",
|
"SELECT auto_dispatch FROM provider_credentials WHERE owner_id = $1 AND provider = $2",
|
||||||
[req.user.accountId, provider]
|
[req.user.accountId, provider]
|
||||||
@@ -1833,7 +1832,6 @@ app.post("/providers/scraped", authMiddleware, async (req, res) => {
|
|||||||
|
|
||||||
for (const svc of services) {
|
for (const svc of services) {
|
||||||
|
|
||||||
// 2. EXTRAER REFERENCIA (¡AQUÍ ESTABA EL FALLO! HomeServe lo llama "SERVICIO")
|
|
||||||
const ref = svc['service_ref']
|
const ref = svc['service_ref']
|
||||||
|| svc['SERVICIO']
|
|| svc['SERVICIO']
|
||||||
|| svc['Referencia']
|
|| svc['Referencia']
|
||||||
@@ -1841,43 +1839,47 @@ app.post("/providers/scraped", authMiddleware, async (req, res) => {
|
|||||||
|| svc['Expediente']
|
|| svc['Expediente']
|
||||||
|| (svc.raw_data && (svc.raw_data['SERVICIO'] || svc.raw_data['Referencia'] || svc.raw_data['Nº Siniestro'] || svc.raw_data['Expediente']));
|
|| (svc.raw_data && (svc.raw_data['SERVICIO'] || svc.raw_data['Referencia'] || svc.raw_data['Nº Siniestro'] || svc.raw_data['Expediente']));
|
||||||
|
|
||||||
if (!ref) continue; // Si no hay referencia, lo salta. ¡Por eso no actualizaba!
|
if (!ref) continue;
|
||||||
|
|
||||||
// 🔥 3. DETECTOR DE URGENCIAS ANTI-FALLOS (APLASTAMIENTO TOTAL) 🔥
|
// 🔥 3. DETECTOR DE URGENCIAS (SOLO VALORES, CERO FALSOS POSITIVOS) 🔥
|
||||||
let esUrgente = false;
|
let esUrgente = false;
|
||||||
|
|
||||||
// Convertimos TODO el expediente (esté donde esté el dato) a un texto gigante
|
for (const key in svc) {
|
||||||
const todoElTexto = JSON.stringify(svc).toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "");
|
const nombreColumna = key.toLowerCase();
|
||||||
|
const valor = String(svc[key]).toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "");
|
||||||
if (
|
|
||||||
todoElTexto.includes('atencion presencial urgencias') ||
|
// 1. Caso HomeServe (Frases exactas en cualquier valor)
|
||||||
todoElTexto.includes('urgencia') ||
|
if (valor.includes('atencion presencial urgencias') || valor.includes('atencion de la urgencia')) {
|
||||||
todoElTexto.includes('urgente')
|
esUrgente = true;
|
||||||
) {
|
break;
|
||||||
esUrgente = true;
|
}
|
||||||
|
|
||||||
|
// 2. Caso Multiasistencia u otros (Columna "Urgente" = Sí)
|
||||||
|
if ((nombreColumna.includes('urgent') || nombreColumna === 'urgencia') && (valor === 'si' || valor === 'true')) {
|
||||||
|
esUrgente = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 🕵️ 4. EXTRAER GREMIO
|
|
||||||
const guildId = svc.guild_id || svc['guild_id'] || (svc.raw_data && svc.raw_data.guild_id);
|
const guildId = svc.guild_id || svc['guild_id'] || (svc.raw_data && svc.raw_data.guild_id);
|
||||||
|
|
||||||
// 5. GUARDAMOS EN LA BASE DE DATOS
|
|
||||||
const insertRes = await pool.query(`
|
const insertRes = await pool.query(`
|
||||||
INSERT INTO scraped_services (owner_id, provider, service_ref, raw_data, is_urgent)
|
INSERT INTO scraped_services (owner_id, provider, service_ref, raw_data, is_urgent)
|
||||||
VALUES ($1, $2, $3, $4, $5)
|
VALUES ($1, $2, $3, $4, $5)
|
||||||
ON CONFLICT (owner_id, provider, service_ref)
|
ON CONFLICT (owner_id, provider, service_ref)
|
||||||
DO UPDATE SET
|
DO UPDATE SET
|
||||||
raw_data = scraped_services.raw_data || EXCLUDED.raw_data,
|
raw_data = scraped_services.raw_data || EXCLUDED.raw_data,
|
||||||
is_urgent = EXCLUDED.is_urgent
|
is_urgent = scraped_services.is_urgent OR EXCLUDED.is_urgent
|
||||||
RETURNING id, automation_status
|
RETURNING id, automation_status
|
||||||
`, [req.user.accountId, provider, ref, JSON.stringify(svc), esUrgente]);
|
`, [req.user.accountId, provider, ref, JSON.stringify(svc), esUrgente]);
|
||||||
|
|
||||||
const newSvcId = insertRes.rows[0].id;
|
const newSvcId = insertRes.rows[0].id;
|
||||||
const autoStatus = insertRes.rows[0].automation_status;
|
const autoStatus = insertRes.rows[0].automation_status;
|
||||||
|
|
||||||
// 🚀 6. ¡DISPARADOR AUTOMÁTICO DE URGENCIAS!
|
|
||||||
if (esUrgente && guildId && autoDispatchEnabled && (autoStatus === 'manual' || autoStatus === 'pending')) {
|
if (esUrgente && guildId && autoDispatchEnabled && (autoStatus === 'manual' || autoStatus === 'pending')) {
|
||||||
console.log(`⚡ [AUTO-DISPATCH] Lanzando urgencia ${ref} de ${provider} a la bolsa...`);
|
console.log(`⚡ [AUTO-DISPATCH] Lanzando urgencia ${ref} de ${provider} a la bolsa...`);
|
||||||
|
|
||||||
|
const todoElTexto = JSON.stringify(svc).toLowerCase();
|
||||||
const cpMatch = todoElTexto.match(/\b\d{5}\b/);
|
const cpMatch = todoElTexto.match(/\b\d{5}\b/);
|
||||||
const cpFinal = cpMatch ? cpMatch[0] : "00000";
|
const cpFinal = cpMatch ? cpMatch[0] : "00000";
|
||||||
|
|
||||||
@@ -1892,7 +1894,6 @@ app.post("/providers/scraped", authMiddleware, async (req, res) => {
|
|||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(`📥 [CAPTURA] Procesados ${count} servicios de ${provider}. Auto-Despacho: ${autoDispatchEnabled ? 'ON' : 'OFF'}`);
|
|
||||||
res.json({ ok: true, inserted: count });
|
res.json({ ok: true, inserted: count });
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user