diff --git a/aceptar.html b/aceptar.html index 4c982b8..2991d80 100644 --- a/aceptar.html +++ b/aceptar.html @@ -51,11 +51,11 @@
- +
-

Resumen del Siniestro

-

--

+

Resumen Inteligente

+

--

@@ -102,29 +102,40 @@ }); // ========================================== - // LÓGICA DE RESUMEN INTELIGENTE (IA JS) + // 🧠 LÓGICA DE RESUMEN INTELIGENTE TIPO "IA" // ========================================== function smartSummarize(text) { - if (!text || text.trim() === "") return "REVISAR AVERÍA"; + if (!text || text.trim() === "") return "Se requiere asistencia técnica en el domicilio."; - // 1. Quitamos saltos de línea y forzamos minúsculas - let clean = text.replace(/(\r\n|\n|\r)/gm, " ").toLowerCase(); + // 1. Limpiamos basura, dobles espacios y saltos de línea + let clean = text.replace(/(\r\n|\n|\r)/gm, " ").replace(/\s+/g, " ").trim(); - // 2. Cortamos si detectamos que empiezan las notas administrativas - const cutIndex = clean.search(/(\bmo\b|\bm\.o\b|\bmaterial\b|\basegurado\b|\btelefono\b|\burgente\b|\bobservaciones\b)/i); - if (cutIndex > 5) clean = clean.substring(0, cutIndex); - - // 3. Separamos por palabras y filtramos las palabras vacías/comunes - const stopWords = ['el', 'la', 'los', 'las', 'un', 'una', 'unos', 'unas', 'de', 'del', 'a', 'ante', 'con', 'para', 'por', 'y', 'e', 'o', 'u', 'en', 'que', 'su', 'se', 'ha', 'al', 'es']; - - let words = clean.replace(/[^\w\sáéíóúüñ]/gi, '').split(/\s+/); // Quitamos comas y puntos - let keywords = words.filter(w => w.length > 2 && !stopWords.includes(w)); - - // 4. Tomamos solo las primeras 5 palabras clave - if (keywords.length > 5) { - return keywords.slice(0, 5).join(' ') + "..."; + // 2. Cortamos el texto justo antes de que empiecen las notas administrativas (teléfonos, pólizas, asegurados) + const cutPattern = /\b(mo\b|m\.o\b|material:|asegurado:|telefono:|teléfono:|urgente:|observaciones:|franquicia:|poliza:|tramitador:)/i; + const cutIndex = clean.search(cutPattern); + if (cutIndex > 10) { + clean = clean.substring(0, cutIndex).trim(); } - return keywords.join(' ') || "REVISAR AVERÍA"; + + // 3. Le damos formato Humano (Primera letra mayúscula, el resto normal para que sea legible) + clean = clean.charAt(0).toUpperCase() + clean.slice(1).toLowerCase(); + + // 4. Extracción de frases clave: Separamos por puntos y cogemos máximo 2 frases + let sentences = clean.match(/[^.!?]+[.!?]+/g); + if (!sentences) { + // Si no había puntos, cortamos elegantemente a los 130 caracteres sin partir palabras + if (clean.length > 130) { + let cutText = clean.substring(0, 130); + return cutText.substring(0, cutText.lastIndexOf(" ")) + "..."; + } + return clean + (clean.endsWith('.') ? '' : '.'); + } + + if (sentences.length >= 2) { + return sentences.slice(0, 2).join(' ').trim() + " ..."; + } + + return sentences[0].trim(); } async function loadAssignmentData() { @@ -139,18 +150,23 @@ document.getElementById('guild').innerText = raw["Gremio"] || "Servicio General"; document.getElementById('ref').innerText = raw["Expediente"] || "Sin Ref"; - // 2. PROCESADO DE DIRECCIÓN (Solo calle, corta antes del número) + // 2. PROCESADO DE DIRECCIÓN ESTRICTO (Corta en el primer número) const fullAddress = raw["Dirección"] || raw["DOMICILIO"] || ""; let streetOnly = fullAddress; - // Busca el primer dígito y corta el string justo antes - const streetMatch = fullAddress.match(/^([^0-9]+)/); - if (streetMatch && streetMatch[1]) { - streetOnly = streetMatch[1].replace(/[,/-]+$/, '').trim(); // Quita comas finales + // Buscamos dónde empieza el número de la calle + const numberIndex = fullAddress.search(/\d/); + if (numberIndex > 3) { // Si el número está después de la 3ra letra (ej: Calle 2) + streetOnly = fullAddress.substring(0, numberIndex).replace(/[,/-]+$/, '').trim(); + } else if (numberIndex === -1) { + // Si es una dirección rara sin números, la dejamos tal cual pero la limpiamos + streetOnly = fullAddress.trim(); } - if(!streetOnly) streetOnly = "Dirección Oculta"; + + // Si nos hemos cargado la calle por error, devolvemos un texto seguro + if(!streetOnly || streetOnly.length < 3) streetOnly = "Calle Oculta"; - const city = raw["Población"] || "Ciudad sin especificar"; + const city = raw["Población"] || "Localidad sin especificar"; const cp = raw["Código Postal"] || "---"; document.getElementById('location-street').innerText = streetOnly;