From 18e900dd528dbcf87600e40626d51ed7a5be47f3 Mon Sep 17 00:00:00 2001 From: Carlos Narro Date: Sun, 31 May 2026 16:11:31 +0200 Subject: [PATCH] =?UTF-8?q?Add=20l=C3=A9xicos=20en=20espa=C3=B1ol=20para?= =?UTF-8?q?=20el=20clasificador=20de=20preferencias?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mvp/b2c/src/lib/voice/lexicon.ts | 60 ++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 mvp/b2c/src/lib/voice/lexicon.ts diff --git a/mvp/b2c/src/lib/voice/lexicon.ts b/mvp/b2c/src/lib/voice/lexicon.ts new file mode 100644 index 0000000..75f7ff2 --- /dev/null +++ b/mvp/b2c/src/lib/voice/lexicon.ts @@ -0,0 +1,60 @@ +import type { Calidad, CategoriaMaterial, TipoReforma } from '@/budget/types'; + +export const CALIDAD_LEXICON: { calidad: Calidad; keywords: string[] }[] = [ + { calidad: 'premium', keywords: ['premium', 'lujo', 'alta gama', 'gama alta', 'lo mejor', 'calidad maxima', 'exclusivo'] }, + { calidad: 'basica', keywords: ['basico', 'economico', 'barato', 'sencillo', 'lo justo', 'ajustado'] }, + { calidad: 'media', keywords: ['normal', 'estandar', 'equilibrado', 'medio'] }, +]; + +export const MATERIAL_LEXICON: { categoria: CategoriaMaterial; keywords: string[] }[] = [ + { categoria: 'suelo', keywords: ['suelo', 'tarima', 'parquet', 'porcelanico', 'ceramico', 'madera', 'vinilo'] }, + { categoria: 'pared', keywords: ['azulejo', 'alicatado', 'baldosa', 'microcemento', 'gres'] }, + { categoria: 'pintura', keywords: ['pintura', 'pintar', 'color de pared'] }, + { categoria: 'mobiliario', keywords: ['mueble', 'muebles', 'armario', 'encimera', 'mobiliario'] }, +]; + +export const ESTRUCTURAL_LEXICON: string[] = [ + 'tirar muro', 'tirar el muro', 'quitar pared', 'tirar pared', 'abrir la cocina', + 'mover el bano', 'mover sanitarios', 'cambiar la distribucion', 'derribar', 'tirar tabique', +]; + +export const ESTILO_LEXICON: string[] = [ + 'nordico', 'industrial', 'minimalista', 'rustico', 'moderno', 'clasico', 'mediterraneo', + 'tonos calidos', 'tonos frios', 'blanco mate', 'madera clara', 'colores neutros', +]; + +export const ELEMENTOS_LEXICON: Record< + TipoReforma, + { key: string; label: string; importe: number; keywords: string[] }[] +> = { + cocina: [ + { key: 'isla_cocina', label: 'Isla de cocina', importe: 120000, keywords: ['isla'] }, + { key: 'peninsula', label: 'Península', importe: 80000, keywords: ['peninsula'] }, + { key: 'electrodomesticos_integrados', label: 'Electrodomésticos integrados', importe: 150000, keywords: ['electrodomesticos integrados', 'integrados', 'encastrados'] }, + ], + bano: [ + { key: 'ducha_obra', label: 'Ducha de obra', importe: 90000, keywords: ['ducha de obra', 'plato a ras', 'plato de obra'] }, + { key: 'doble_lavabo', label: 'Doble lavabo', importe: 45000, keywords: ['doble lavabo', 'dos senos', 'doble seno'] }, + ], + salon: [], + comedor: [], + integral: [ + { key: 'isla_cocina', label: 'Isla de cocina', importe: 120000, keywords: ['isla'] }, + ], + otro: [], +}; + +export const AJUSTE_LEXICON: { + label: string; + tipo: 'fijo' | 'factor'; + valor: number; + motivo: string; + keywords: string[]; +}[] = [ + { label: 'Encimera de piedra natural', tipo: 'fijo', valor: 60000, motivo: 'mención de mármol/cuarzo/granito en la llamada', keywords: ['marmol', 'cuarzo', 'granito', 'silestone', 'piedra natural'] }, + { label: 'Domótica / iluminación inteligente', tipo: 'fijo', valor: 40000, motivo: 'mención de domótica en la llamada', keywords: ['domotica', 'inteligente', 'smart'] }, +]; + +export function normalizeText(s: string): string { + return s.toLowerCase().normalize('NFD').replace(/[̀-ͯ]/g, ''); +}