From e038c25e9e40686f8bea1cd99f886a79235e0126 Mon Sep 17 00:00:00 2001 From: snlavaise Date: Wed, 12 Aug 2026 03:07:48 +0000 Subject: [PATCH] =?UTF-8?q?Permitir=20eliminar=20Fosfatasa=20Alcalina,=20A?= =?UTF-8?q?lb=C3=BAmina,=20HCM,=20VCM=20y=20sincronizar=20observaciones=20?= =?UTF-8?q?din=C3=A1micamente?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/sections/HistoriaClinica.tsx | 199 ++++++++++++++----------------- 1 file changed, 87 insertions(+), 112 deletions(-) diff --git a/src/sections/HistoriaClinica.tsx b/src/sections/HistoriaClinica.tsx index f770f11..197943d 100644 --- a/src/sections/HistoriaClinica.tsx +++ b/src/sections/HistoriaClinica.tsx @@ -1060,19 +1060,89 @@ function SeccionLaboratorios({ lab, patientId, internacionId, add, update, del, setEdit(null); }; + const buildObservacionesFromResultados = (resultadosArray: ResultadoLaboratorio[]): string => { + const observacionesExtra: string[] = []; + + // 1. Lípidos + const ordenLipidos = ['Colesterol Total', 'Colesterol LDL', 'Colesterol No HDL', 'Colesterol HDL', 'Triglicéridos']; + const lipidosEncontrados = resultadosArray.filter(r => ordenLipidos.includes(r.parametro)); + if (lipidosEncontrados.length > 0) { + observacionesExtra.push('PERFIL LIPIDICO:'); + for (const nombre of ordenLipidos) { + const item = lipidosEncontrados.find(l => l.parametro === nombre); + if (item) { + observacionesExtra.push(`- ${item.parametro}: ${item.valor} ${item.unidad}`); + } + } + } + + // 2. Férricos + const ordenFerricos = ['Hierro', 'Transferrina', 'Porcentaje de Saturación de Transferrina', 'Ferritina', 'Ácido Fólico', 'Vitamina B12']; + const ferricosEncontrados = resultadosArray.filter(r => ordenFerricos.includes(r.parametro)); + if (ferricosEncontrados.length > 0) { + if (observacionesExtra.length > 0) { + observacionesExtra.push(''); + } + observacionesExtra.push('PERFIL FERRICO:'); + for (const nombre of ordenFerricos) { + const item = ferricosEncontrados.find(f => f.parametro === nombre); + if (item) { + observacionesExtra.push(`- ${item.parametro}: ${item.valor} ${item.unidad}`); + } + } + } + + // 3. Independientes + const ordenInd = [ + 'Albúmina', + 'Calcio Total', + 'Fosfatasa Alcalina', + 'LDH', + 'NT-proBNP', + 'Procalcitonina', + 'Fósforo', + 'Magnesio', + 'Calcio Iónico' + ]; + const indEncontrados = resultadosArray.filter(r => ordenInd.includes(r.parametro)); + if (indEncontrados.length > 0) { + if (observacionesExtra.length > 0) { + observacionesExtra.push(''); + } + for (const nombre of ordenInd) { + const item = indEncontrados.find(i => i.parametro === nombre); + if (item) { + observacionesExtra.push(`${item.parametro}: ${item.valor} ${item.unidad}`); + } + } + } + + // 4. VCM & HCM + const ordenHemogramaAdicionales = ['VCM', 'HCM']; + const hemogramaAdicionalesEncontrados = resultadosArray.filter(r => ordenHemogramaAdicionales.includes(r.parametro)); + if (hemogramaAdicionalesEncontrados.length > 0) { + if (observacionesExtra.length > 0) { + observacionesExtra.push(''); + } + for (const nombre of ordenHemogramaAdicionales) { + const item = hemogramaAdicionalesEncontrados.find(h => h.parametro === nombre); + if (item) { + observacionesExtra.push(`${item.parametro}: ${item.valor} ${item.unidad}`); + } + } + } + + return observacionesExtra.join('\n'); + }; + const parseLaboratorioTexto = (texto: string): { resultados: ResultadoLaboratorio[]; observaciones: string } => { const resultados: ResultadoLaboratorio[] = []; - const observacionesExtra: string[] = []; - const lipidosEncontrados: { parametro: string; valor: number; unidad: string }[] = []; - const ferricosEncontrados: { parametro: string; valor: number; unidad: string }[] = []; - const indEncontrados: { parametro: string; valor: number; unidad: string }[] = []; - const hemogramaAdicionalesEncontrados: { parametro: string; valor: number; unidad: string }[] = []; const mapeoParametros: { claves: string[]; nombre: string; unidad: string; esPrincipal: boolean; esAdicional?: boolean }[] = [ { claves: ['hematocrito', 'hto'], nombre: 'Hematocrito', unidad: '%', esPrincipal: true }, - { claves: ['hemoglobina corpuscular media', 'hcm'], nombre: 'HCM', unidad: 'pg', esPrincipal: false }, + { claves: ['hemoglobina corpuscular media', 'hcm'], nombre: 'HCM', unidad: 'pg', esPrincipal: false, esAdicional: true }, { claves: ['hemoglobina', 'hb'], nombre: 'Hemoglobina', unidad: 'g/dL', esPrincipal: true }, - { claves: ['volumen corpuscular medio', 'vcm'], nombre: 'VCM', unidad: 'fL', esPrincipal: false }, + { claves: ['volumen corpuscular medio', 'vcm'], nombre: 'VCM', unidad: 'fL', esPrincipal: false, esAdicional: true }, { claves: ['rdw'], nombre: 'RDW', unidad: '%', esPrincipal: false }, { claves: ['eritroblastos'], nombre: 'Eritroblastos', unidad: '%', esPrincipal: false }, { claves: ['neutrófilos', 'neutrofilos'], nombre: 'Neutrófilos', unidad: '%', esPrincipal: false }, @@ -1115,7 +1185,7 @@ function SeccionLaboratorios({ lab, patientId, internacionId, add, update, del, { claves: ['magnesio', 'mg', 'magnesemia'], 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 (must put Porcentaje Saturación before Transferrina) + // Perfil Férrico requested determinations { claves: ['porcentaje de saturacion de transferrina', 'porcentaje de saturación de transferrina', 'saturacion de transferrina', 'saturación de transferrina', 'sat. transferrina', 'sat transferrina', '% sat', '% de sat', '% saturacion', '% saturación'], nombre: 'Porcentaje de Saturación de Transferrina', unidad: '%', esPrincipal: false, esAdicional: true }, { claves: ['transferrina', 'transferrin'], nombre: 'Transferrina', unidad: 'mg/dL', esPrincipal: false, esAdicional: true }, { claves: ['hierro', 'sideremia', 'fe'], nombre: 'Hierro', unidad: 'µg/dL', esPrincipal: false, esAdicional: true }, @@ -1164,7 +1234,6 @@ function SeccionLaboratorios({ lab, patientId, internacionId, add, update, del, } if (matchedClave) { - // Extraer la porción de texto posterior a la clave/nombre del parámetro para evitar capturar números dentro del nombre (ej: B12, T4) let subLinea = linea; const idxClave = lineaLower.indexOf(matchedClaveString); if (idxClave !== -1) { @@ -1201,45 +1270,6 @@ function SeccionLaboratorios({ lab, patientId, internacionId, add, update, del, unidad: unidadFinal, estado: calcularEstadoLaboratorio(nombreNormalizado, String(valorFinal)) }); - - const isLipido = [ - 'Colesterol Total', - 'Colesterol LDL', - 'Colesterol No HDL', - 'Colesterol HDL', - 'Triglicéridos' - ].includes(nombreNormalizado); - - const isFerrico = [ - 'Hierro', - 'Transferrina', - 'Porcentaje de Saturación de Transferrina', - 'Ferritina', - 'Ácido Fólico', - 'Vitamina B12' - ].includes(nombreNormalizado); - - const isIndependiente = [ - 'Albúmina', - 'Calcio Total', - 'Fosfatasa Alcalina', - 'LDH', - 'NT-proBNP', - 'Procalcitonina', - 'Fósforo', - 'Magnesio', - 'Calcio Iónico' - ].includes(nombreNormalizado); - - if (isLipido) { - lipidosEncontrados.push({ parametro: nombreNormalizado, valor: valorFinal, unidad: unidadFinal }); - } else if (isFerrico) { - ferricosEncontrados.push({ parametro: nombreNormalizado, valor: valorFinal, unidad: unidadFinal }); - } else if (isIndependiente) { - indEncontrados.push({ parametro: nombreNormalizado, valor: valorFinal, unidad: unidadFinal }); - } - } else if (nombreNormalizado === 'VCM' || nombreNormalizado === 'HCM') { - hemogramaAdicionalesEncontrados.push({ parametro: nombreNormalizado, valor: valorFinal, unidad: unidadFinal }); } break; } @@ -1248,67 +1278,8 @@ function SeccionLaboratorios({ lab, patientId, internacionId, add, update, del, } } - if (lipidosEncontrados.length > 0) { - observacionesExtra.push('PERFIL LIPIDICO:'); - const ordenLipidos = ['Colesterol Total', 'Colesterol LDL', 'Colesterol No HDL', 'Colesterol HDL', 'Triglicéridos']; - for (const nombre of ordenLipidos) { - const item = lipidosEncontrados.find(l => l.parametro === nombre); - if (item) { - observacionesExtra.push(`- ${item.parametro}: ${item.valor} ${item.unidad}`); - } - } - } - - if (ferricosEncontrados.length > 0) { - if (observacionesExtra.length > 0) { - observacionesExtra.push(''); - } - observacionesExtra.push('PERFIL FERRICO:'); - const ordenFerricos = ['Hierro', 'Transferrina', 'Porcentaje de Saturación de Transferrina', 'Ferritina', 'Ácido Fólico', 'Vitamina B12']; - for (const nombre of ordenFerricos) { - const item = ferricosEncontrados.find(f => f.parametro === nombre); - if (item) { - observacionesExtra.push(`- ${item.parametro}: ${item.valor} ${item.unidad}`); - } - } - } - - if (indEncontrados.length > 0) { - if (observacionesExtra.length > 0) { - observacionesExtra.push(''); - } - const ordenInd = [ - 'Albúmina', - 'Calcio Total', - 'Fosfatasa Alcalina', - 'LDH', - 'NT-proBNP', - 'Procalcitonina', - 'Fósforo', - 'Magnesio', - 'Calcio Iónico' - ]; - for (const nombre of ordenInd) { - const item = indEncontrados.find(i => i.parametro === nombre); - if (item) { - observacionesExtra.push(`${item.parametro}: ${item.valor} ${item.unidad}`); - } - } - } - - if (hemogramaAdicionalesEncontrados.length > 0) { - if (observacionesExtra.length > 0) { - observacionesExtra.push(''); - } - for (const nombre of ['VCM', 'HCM']) { - const item = hemogramaAdicionalesEncontrados.find(h => h.parametro === nombre); - if (item) { - observacionesExtra.push(`${item.parametro}: ${item.valor} ${item.unidad}`); - } - } - } - - return { resultados, observaciones: observacionesExtra.join('\n') }; + const observacionesStr = buildObservacionesFromResultados(resultados); + return { resultados, observaciones: observacionesStr }; }; const parseAcidoBaseTexto = (texto: string): Omit | null => { @@ -1388,7 +1359,7 @@ function SeccionLaboratorios({ lab, patientId, internacionId, add, update, del, const coreParameters = [ // Hemograma 'hematocrito', 'hto', 'hemoglobina', 'hb', 'leucocitos', 'gb', 'plaquetas', 'plaq', - 'vcm', 'hcm', 'rdw', 'eritroblastos', 'neutrófilos', 'neutrofilos', 'linfocitos', 'monocitos', 'eosinófilos', 'eosinofilos', 'basófilos', 'basofilos', 'vpm', + 'rdw', 'eritroblastos', 'neutrófilos', 'neutrofilos', 'linfocitos', 'monocitos', 'eosinófilos', 'eosinofilos', 'basófilos', 'basofilos', 'vpm', // Glucemia 'glucemia', 'glucosa', // Urea @@ -1398,7 +1369,7 @@ function SeccionLaboratorios({ lab, patientId, internacionId, add, update, del, // Ionograma 'sodio', 'na', 'potasio', 'k', 'k+', 'cloro', 'cl', 'cl-', // Hepatograma - 'bilirrubina total', 'bt', 'bilirrubina directa', 'bd', 'got', 'ast', 'gpt', 'alt', 'proteínas totales', 'proteinas totales', 'fosfatasa alcalina', 'fal', 'albúmina', 'albumina', + 'bilirrubina total', 'bt', 'bilirrubina directa', 'bd', 'got', 'ast', 'gpt', 'alt', 'proteínas totales', 'proteinas totales', // Coagulograma 'tiempo de protrombina', 'tp', 't.p.', 't.p', 'rin', 'inr', 'aptt', 'kptt' ]; @@ -1406,7 +1377,11 @@ function SeccionLaboratorios({ lab, patientId, internacionId, add, update, del, }; const handleEliminarDeterminacion = (index: number) => { - setImportResultados(prev => prev.filter((_, i) => i !== index)); + setImportResultados(prev => { + const filtered = prev.filter((_, i) => i !== index); + setImportObservaciones(buildObservacionesFromResultados(filtered)); + return filtered; + }); }; const handleProcesarTexto = () => {