diff --git a/server.js b/server.js index 2c4f1c6..35ca891 100644 --- a/server.js +++ b/server.js @@ -1983,6 +1983,17 @@ async function procesarConIA(ownerId, mensajeCliente, datosExpediente) { const descripcionActual = patch["Descripción"] || datosExpediente.averia || ""; const capturaCompleta = !!(nombreActual && direccionActual && descripcionActual); + // 📮 FALLBACK CP: si la IA no separó el código postal como campo propio (p.ej. + // el cliente escribió "Calle Mayor 5, 28013 Madrid" todo junto), lo buscamos + // nosotros mismos en la dirección/población para no dejar el aviso sin CP — + // sin CP, el aviso NO aparece en "Solicitar Servicios" (Bolsa) para operarios + // con zonas configuradas, aunque esté correctamente sin gremio/operario. + if (!patch["Código Postal"] && !datosExpediente.cp) { + const poblacionActual = patch["Población"] || datosExpediente.poblacion || ""; + const cpMatch = `${direccionActual} ${poblacionActual}`.match(/\b\d{5}\b/); + if (cpMatch) patch["Código Postal"] = cpMatch[0]; + } + let workerAsignado = null; let guildAsignado = null; @@ -2128,7 +2139,7 @@ async function procesarConIA(ownerId, mensajeCliente, datosExpediente) { if (datosExpediente.intake_mode) { const faltantes = []; if (!datosExpediente.nombre_cliente) faltantes.push("su nombre completo"); - if (!datosExpediente.direccion) faltantes.push("la dirección exacta de la visita"); + if (!datosExpediente.direccion) faltantes.push("la dirección exacta de la visita (calle, número, código postal y población)"); if (!datosExpediente.averia) faltantes.push(`una breve descripción de lo que necesita${datosExpediente.intake_purpose ? ` (motivo indicado: ${datosExpediente.intake_purpose})` : ''}`); directivaEstricta = `🟡 ESTADO ACTUAL: RECOGIDA INICIAL DE DATOS. Esto es una primera toma de contacto (todavía no hay expediente completo), continúa la conversación ya iniciada.