diff --git a/configuracion.html b/configuracion.html index ee36ba9..274be91 100644 --- a/configuracion.html +++ b/configuracion.html @@ -243,6 +243,22 @@ +
+ +

Cuando el cliente pregunte por costes, materiales o qué cubre el seguro, la IA usará el texto de la compañía que coincida con el expediente. La palabra clave se busca dentro del campo "Compañía" del expediente (sin importar mayúsculas ni el resto del texto alrededor).

+ + + +
+ + +
+

Modo "Escribiendo..."

@@ -970,9 +986,10 @@ document.addEventListener("DOMContentLoaded", () => { if (!localStorage.getItem("token")) window.location.href = "index.html"; - showTab('templates'); + showTab('templates'); loadTemplates(); loadWaSettings(); + loadDetectedCompanies(); }); // ========================================== @@ -1170,6 +1187,9 @@ document.getElementById('ai_custom_prompt').value = s.ai_custom_prompt || ""; } + document.getElementById('coverageRulesList').innerHTML = ""; + (s.coverage_rules || []).forEach(r => addCoverageRule(r.keyword, r.text)); + document.getElementById('cfg_delay').checked = s.wa_delay_enabled !== false; document.getElementById('cfg_evt_welcome').checked = s.wa_evt_welcome || false; document.getElementById('cfg_evt_assigned').checked = s.wa_evt_assigned || false; @@ -1180,10 +1200,62 @@ } catch(e) { console.error("Error cargando ajustes WA", e); } } + // 🧾 Condiciones de cobertura por compañía: cada fila es { keyword, text }. La IA + // busca esta "keyword" (sin mayúsculas ni tildes) DENTRO del campo Compañía del + // expediente, así que da igual si viene envuelta en texto de Multiasistencia, + // HomeServe, etc. — con que contenga la palabra clave (ej. "santander") es suficiente. + function addCoverageRule(keyword = "", text = "") { + const wrap = document.createElement('div'); + wrap.className = "coverage-rule-row bg-white border border-slate-200 rounded-lg p-3 space-y-2"; + wrap.innerHTML = ` +
+ + +
+ + `; + document.getElementById('coverageRulesList').appendChild(wrap); + wrap.querySelector('.cr-keyword').value = keyword; + wrap.querySelector('.cr-text').value = text; + if (window.lucide) lucide.createIcons(); + } + + // Saca las compañías tal cual aparecen en tus expedientes recientes, para que + // puedas pulsarlas y usarlas como palabra clave sin tener que adivinar el formato. + async function loadDetectedCompanies() { + try { + const res = await fetch(`${API_URL}/services/active`, { headers: { "Authorization": `Bearer ${localStorage.getItem("token")}` } }); + const data = await res.json(); + if (!data.ok) return; + const seen = new Set(); + (data.services || []).forEach(s => { + const raw = s.raw_data || {}; + const c = (raw["Compañía"] || raw["COMPAÑIA"] || "").toString().trim(); + if (c) seen.add(c); + }); + const box = document.getElementById('detectedCompaniesBox'); + const list = document.getElementById('detectedCompaniesList'); + if (seen.size === 0) { box.classList.add('hidden'); return; } + list.innerHTML = [...seen].sort().map(c => ` + + `).join(''); + box.classList.remove('hidden'); + if (window.lucide) lucide.createIcons(); + } catch (e) { console.error("Error cargando compañías detectadas", e); } + } + async function saveWaSettings() { + const coverageRules = [...document.querySelectorAll('#coverageRulesList .coverage-rule-row')] + .map(row => ({ + keyword: row.querySelector('.cr-keyword').value.trim(), + text: row.querySelector('.cr-text').value.trim() + })) + .filter(r => r.keyword && r.text); + const settings = { wa_ai_enabled: document.getElementById('cfg_ai_enabled').checked, ai_custom_prompt: document.getElementById('ai_custom_prompt') ? document.getElementById('ai_custom_prompt').value : "", + coverage_rules: coverageRules, wa_delay_enabled: document.getElementById('cfg_delay').checked, wa_evt_welcome: document.getElementById('cfg_evt_welcome').checked, wa_evt_assigned: document.getElementById('cfg_evt_assigned').checked,