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);
|
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 parseLaboratorioTexto = (texto: string): { resultados: ResultadoLaboratorio[]; observaciones: string } => {
|
||||||
const resultados: ResultadoLaboratorio[] = [];
|
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 }[] = [
|
const mapeoParametros: { claves: string[]; nombre: string; unidad: string; esPrincipal: boolean; esAdicional?: boolean }[] = [
|
||||||
{ claves: ['hematocrito', 'hto'], nombre: 'Hematocrito', unidad: '%', esPrincipal: true },
|
{ 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: ['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: ['rdw'], nombre: 'RDW', unidad: '%', esPrincipal: false },
|
||||||
{ claves: ['eritroblastos'], nombre: 'Eritroblastos', unidad: '%', esPrincipal: false },
|
{ claves: ['eritroblastos'], nombre: 'Eritroblastos', unidad: '%', esPrincipal: false },
|
||||||
{ claves: ['neutrófilos', 'neutrofilos'], nombre: 'Neutrófilos', 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: ['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 },
|
{ 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: ['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: ['transferrina', 'transferrin'], nombre: 'Transferrina', unidad: 'mg/dL', esPrincipal: false, esAdicional: true },
|
||||||
{ claves: ['hierro', 'sideremia', 'fe'], nombre: 'Hierro', unidad: 'µg/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) {
|
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;
|
let subLinea = linea;
|
||||||
const idxClave = lineaLower.indexOf(matchedClaveString);
|
const idxClave = lineaLower.indexOf(matchedClaveString);
|
||||||
if (idxClave !== -1) {
|
if (idxClave !== -1) {
|
||||||
@@ -1201,45 +1270,6 @@ function SeccionLaboratorios({ lab, patientId, internacionId, add, update, del,
|
|||||||
unidad: unidadFinal,
|
unidad: unidadFinal,
|
||||||
estado: calcularEstadoLaboratorio(nombreNormalizado, String(valorFinal))
|
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;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1248,67 +1278,8 @@ function SeccionLaboratorios({ lab, patientId, internacionId, add, update, del,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lipidosEncontrados.length > 0) {
|
const observacionesStr = buildObservacionesFromResultados(resultados);
|
||||||
observacionesExtra.push('PERFIL LIPIDICO:');
|
return { resultados, observaciones: observacionesStr };
|
||||||
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 parseAcidoBaseTexto = (texto: string): Omit<AcidoBase, 'id'> | null => {
|
const parseAcidoBaseTexto = (texto: string): Omit<AcidoBase, 'id'> | null => {
|
||||||
@@ -1388,7 +1359,7 @@ function SeccionLaboratorios({ lab, patientId, internacionId, add, update, del,
|
|||||||
const coreParameters = [
|
const coreParameters = [
|
||||||
// Hemograma
|
// Hemograma
|
||||||
'hematocrito', 'hto', 'hemoglobina', 'hb', 'leucocitos', 'gb', 'plaquetas', 'plaq',
|
'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
|
||||||
'glucemia', 'glucosa',
|
'glucemia', 'glucosa',
|
||||||
// Urea
|
// Urea
|
||||||
@@ -1398,7 +1369,7 @@ function SeccionLaboratorios({ lab, patientId, internacionId, add, update, del,
|
|||||||
// Ionograma
|
// Ionograma
|
||||||
'sodio', 'na', 'potasio', 'k', 'k+', 'cloro', 'cl', 'cl-',
|
'sodio', 'na', 'potasio', 'k', 'k+', 'cloro', 'cl', 'cl-',
|
||||||
// Hepatograma
|
// 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
|
// Coagulograma
|
||||||
'tiempo de protrombina', 'tp', 't.p.', 't.p', 'rin', 'inr', 'aptt', 'kptt'
|
'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) => {
|
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 = () => {
|
const handleProcesarTexto = () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user