From 2c1d8c0a87d9e6842389bff6e16b804efaf4df45 Mon Sep 17 00:00:00 2001 From: marsalva Date: Fri, 20 Mar 2026 14:53:46 +0000 Subject: [PATCH] Actualizar server.js --- server.js | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/server.js b/server.js index f6c9190..5076fbc 100644 --- a/server.js +++ b/server.js @@ -853,8 +853,37 @@ async function procesarConIA(ownerId, mensajeCliente, datosExpediente) { tramoConfirmado = 'una hora por confirmar'; } + // 馃洃 NUEVO: M脕QUINA DEL TIEMPO (Saber si la cita ya pas贸) + let citaYaPaso = false; + if (tieneCitaConfirmada && datosExpediente.cita) { + const hoyTime = new Date().setHours(0,0,0,0); + const [y, m, d] = datosExpediente.cita.split('-'); + const citaTime = new Date(y, m - 1, d).setHours(0,0,0,0); + if (citaTime < hoyTime) citaYaPaso = true; + } + + // 馃洃 NUEVO: DETECTOR DE ESTADO FINALIZADO + const esEstadoFinal = datosExpediente.estado && (datosExpediente.estado.toLowerCase().includes('finalizado') || datosExpediente.estado.toLowerCase().includes('terminado') || datosExpediente.estado.toLowerCase().includes('anulado')); + + // 馃洃 NUEVO: DETECTOR DE SEGURO VS PARTICULAR + const nombreCia = datosExpediente.compania || "su Aseguradora"; + const esSeguro = !nombreCia.toLowerCase().includes('particular'); + let directivaEstricta = ""; - if (esUrgencia) { + + if (esEstadoFinal) { + if (esSeguro) { + directivaEstricta = `馃洃 ESTADO ACTUAL: SERVICIO CERRADO POR EL T脡CNICO.\nTU 脷NICO OBJETIVO: Informar al cliente que el informe ya ha sido enviado a ${nombreCia} y que estamos a la espera de que ellos nos den respuesta o autorizaci贸n para continuar los trabajos.\nPROHIBICI脫N ABSOLUTA: NO intentes agendar cita ni dar horas. No asumas que la reparaci贸n est谩 100% terminada.`; + } else { + directivaEstricta = `馃洃 ESTADO ACTUAL: SERVICIO FINALIZADO O ANULADO.\nTU 脷NICO OBJETIVO: Despedirte amablemente o dar soporte post-servicio si el cliente particular tiene alguna duda.\nPROHIBICI脫N ABSOLUTA: NO intentes agendar cita ni dar horas. El trabajo ya se ha terminado.`; + } + } else if (citaYaPaso) { + if (esSeguro) { + directivaEstricta = `馃洃 ESTADO ACTUAL: LA CITA YA HA PASADO.\n馃搮 La cita fue el d铆a: ${datosExpediente.cita}.\nTU 脷NICO OBJETIVO: Informar que el t茅cnico ya acudi贸 a la visita y que actualmente estamos tramitando el informe con ${nombreCia}, a la espera de sus instrucciones.\nPROHIBICI脫N ABSOLUTA: No hables en futuro ni propongas m谩s citas.`; + } else { + directivaEstricta = `馃洃 ESTADO ACTUAL: LA CITA YA HA PASADO.\n馃搮 La cita fue el d铆a: ${datosExpediente.cita}.\nTU 脷NICO OBJETIVO: Preguntar amablemente al cliente particular si el t茅cnico acudi贸 y si el problema qued贸 resuelto o si estamos elaborando su presupuesto.\nPROHIBICI脫N ABSOLUTA: No hables en futuro ni agendes.`; + } + } else if (esUrgencia) { directivaEstricta = `馃洃 ESTADO ACTUAL: SERVICIO DE URGENCIA.\nTU 脷NICO OBJETIVO: Tranquilizar al cliente. Dile que al ser urgencia el t茅cnico est谩 avisado.\nPROHIBICI脫N ABSOLUTA: No des cita ni propongas horas.`; } else if (hayCitaPendiente) { directivaEstricta = `馃洃 ESTADO ACTUAL: CITA PENDIENTE DE APROBACI脫N POR T脡CNICO.\n馃搮 Propuesta actual: El d铆a ${datosExpediente.cita_pendiente_fecha} ${tramoPendiente}.\nTU 脷NICO OBJETIVO: Informar al cliente que estamos esperando confirmaci贸n del t茅cnico.\n鈿狅笍 REGLA CR脥TICA: Ignora el historial si no coincide con esta propuesta.\nPROHIBICI脫N ABSOLUTA: No agendes de nuevo.`; @@ -3768,7 +3797,8 @@ app.post("/webhook/evolution", async (req, res) => { s.raw_data->>'Poblaci贸n' as poblacion, s.raw_data->>'appointment_status' as appointment_status, s.raw_data->>'requested_date' as cita_pendiente_fecha, - s.raw_data->>'requested_time' as cita_pendiente_hora + s.raw_data->>'requested_time' as cita_pendiente_hora, + s.raw_data->>'Compa帽铆a' as compania FROM scraped_services s LEFT JOIN users u ON s.assigned_to = u.id LEFT JOIN service_statuses st ON (s.raw_data->>'status_operativo')::text = st.id::text @@ -3825,7 +3855,8 @@ app.post("/webhook/evolution", async (req, res) => { is_urgent: service.is_urgent, appointment_status: service.appointment_status, cita_pendiente_fecha: service.cita_pendiente_fecha, - cita_pendiente_hora: service.cita_pendiente_hora + cita_pendiente_hora: service.cita_pendiente_hora, + compania: service.compania // 馃憟 NUEVO: PASAMOS LA COMPA脩脥A }); if (respuestaIA) {