fix(HistoriaClinica): mejorar el parser de importacion para reconocer Magnesio (Mg, Mg++, Mg+, Magnesemia, etc.)

This commit is contained in:
2026-08-12 22:22:50 +00:00
parent fa99607dd2
commit d9b0c7e109
+14 -2
View File
@@ -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: ['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: ['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: ['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 }, { 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 // Perfil Férrico requested determinations
@@ -1199,6 +1199,12 @@ function SeccionLaboratorios({ lab, otrosLaboratorios = [], patientId, internaci
]; ];
const matchClave = (lineaLower: string, clave: string): boolean => { 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) { if (clave.length > 4) {
return lineaLower.includes(clave); return lineaLower.includes(clave);
} }
@@ -1244,7 +1250,13 @@ function SeccionLaboratorios({ lab, otrosLaboratorios = [], patientId, internaci
subLinea = linea.substring(idxClave + matchedClaveString.length); 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) { if (!match) {
match = linea.match(/[a-zA-ZáéíóúñÁÉÍÓÚÑ]+.*?(\d+(?:[.,]\d+)?)/); match = linea.match(/[a-zA-ZáéíóúñÁÉÍÓÚÑ]+.*?(\d+(?:[.,]\d+)?)/);
} }