From d9b0c7e109e9792b318beeea44089d84ffb1c2d0 Mon Sep 17 00:00:00 2001 From: AI Studio Date: Wed, 12 Aug 2026 22:22:50 +0000 Subject: [PATCH] fix(HistoriaClinica): mejorar el parser de importacion para reconocer Magnesio (Mg, Mg++, Mg+, Magnesemia, etc.) --- src/sections/HistoriaClinica.tsx | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/sections/HistoriaClinica.tsx b/src/sections/HistoriaClinica.tsx index 5cfc492..5f3f9e3 100644 --- a/src/sections/HistoriaClinica.tsx +++ b/src/sections/HistoriaClinica.tsx @@ -1186,7 +1186,7 @@ function SeccionLaboratorios({ lab, otrosLaboratorios = [], patientId, internaci { claves: ['nt-probnp', 'nt probnp', 'nt_probnp', 'probnp', 'pro-bnp', 'pro bnp'], nombre: 'NT-proBNP', unidad: 'pg/mL', esPrincipal: false, esAdicional: true }, { claves: ['procalcitonina', 'pct'], nombre: 'Procalcitonina', unidad: 'ng/mL', esPrincipal: false, esAdicional: true }, { claves: ['fósforo', 'fosforo', 'fosfemia'], nombre: 'Fósforo', unidad: 'mg/dL', esPrincipal: false, esAdicional: true }, - { claves: ['magnesio', 'magnesemia'], nombre: 'Magnesio', unidad: 'mg/dL', esPrincipal: false, esAdicional: true }, + { claves: ['magnesio', 'magnesemia', 'mg++', 'mg+', 'mg2+', 'mg 2+', 'mg.', 'magnesio plasmatico', 'magnesio plasmático', 'magnesio serico', 'magnesio sérico', 'magnesio en sangre', 'mg serico', 'mg sérico', 'mg plasmatico', 'mg plasmático', 'mg'], nombre: 'Magnesio', unidad: 'mg/dL', esPrincipal: false, esAdicional: true }, { claves: ['calcio ionico', 'calcio iónico', 'ca ionico', 'ca iónico', 'ca++ ionico', 'ca++ iónico', 'calcio_ionico'], nombre: 'Calcio Iónico', unidad: 'mmol/L', esPrincipal: false, esAdicional: true }, // Perfil Férrico requested determinations @@ -1199,6 +1199,12 @@ function SeccionLaboratorios({ lab, otrosLaboratorios = [], patientId, internaci ]; const matchClave = (lineaLower: string, clave: string): boolean => { + if (clave === 'mg') { + const execMatch = /(?:^|[^a-z0-9_])mg(?=[:\s=+\d]|$)(?!\/(?:dl|l|24h|ml)|%)/i.exec(lineaLower); + if (!execMatch) return false; + const prefix = lineaLower.substring(0, execMatch.index); + return !/\d+\s*$/.test(prefix); + } if (clave.length > 4) { return lineaLower.includes(clave); } @@ -1244,7 +1250,13 @@ function SeccionLaboratorios({ lab, otrosLaboratorios = [], patientId, internaci subLinea = linea.substring(idxClave + matchedClaveString.length); } - let match = subLinea.match(/(\d+(?:[.,]\d+)?)/); + // Clean parenthesized reference values/ranges if present (e.g. "(1.6 - 2.6 mg/dL)") + let cleanSubLinea = subLinea.replace(/\([^)]*?(?:-|–|—|:|[0-9]\s*[-–—]\s*[0-9]|ref|vr|val|norm|min|max)[^)]*?\)/gi, ' '); + + let match = cleanSubLinea.match(/(\d+(?:[.,]\d+)?)/); + if (!match) { + match = subLinea.match(/(\d+(?:[.,]\d+)?)/); + } if (!match) { match = linea.match(/[a-zA-ZáéíóúñÁÉÍÓÚÑ]+.*?(\d+(?:[.,]\d+)?)/); }