Permitir eliminar Fosfatasa Alcalina, Albúmina, HCM, VCM y sincronizar observaciones dinámicamente
This commit is contained in:
@@ -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<AcidoBase, 'id'> | 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 = () => {
|
||||
|
||||
Reference in New Issue
Block a user