Actualizacion de sistema: mejoras en seleccion de categorias de cultivos, optimizacion responsive de listado de cultivos e historia clinica, y correccion de componentes

This commit is contained in:
2026-08-16 20:40:26 +00:00
parent 1665c76bba
commit 5b51e4e8eb
14 changed files with 1349 additions and 327 deletions
+77
View File
@@ -11,6 +11,7 @@ import type {
Glucemia,
AcidoBase,
Cultivo,
TipoCultivo,
EstudioComplementario,
Interconsulta,
ATB,
@@ -45,6 +46,7 @@ interface HospitalState {
glucemias: Glucemia[];
acidosBase: AcidoBase[];
cultivos: Cultivo[];
tiposCultivo: TipoCultivo[];
estudiosComplementarios: EstudioComplementario[];
interconsultas: Interconsulta[];
atb: ATB[];
@@ -71,6 +73,7 @@ const defaultState = (): HospitalState => ({
glucemias: [],
acidosBase: [],
cultivos: [],
tiposCultivo: [],
estudiosComplementarios: [],
interconsultas: [],
atb: [],
@@ -104,6 +107,7 @@ export function useHospitalStore() {
const normalized = {
...defaults,
...body,
tiposCultivo: body.tiposCultivo || [],
estudiosComplementarios: body.estudiosComplementarios || [],
interconsultas: body.interconsultas || [],
atb: body.atb || [],
@@ -992,6 +996,75 @@ const actualizarInternacion = useCallback(async (internacionId: string, datos: P
}
}, [state, checkGrupoPermission, apiCall]);
// Acciones de tipos de cultivo
const agregarTipoCultivo = useCallback(async (tipo: Omit<TipoCultivo, 'id'>) => {
const nuevoTipo: TipoCultivo = {
...tipo,
id: generateUUID(),
};
try {
const res = await apiCall('POST', '/tipos-cultivo', nuevoTipo);
const saved = res || nuevoTipo;
setState(prev => ({
...prev,
tiposCultivo: [...prev.tiposCultivo.filter(t => t.id !== saved.id), saved],
}));
toast.success(`Tipo de cultivo "${saved.nombre}" creado exitosamente`);
return saved;
} catch (err) {
console.error('Error al agregar tipo de cultivo:', err);
toast.error(err instanceof Error ? err.message : 'Error al agregar tipo de cultivo');
throw err;
}
}, [apiCall]);
const actualizarTipoCultivo = useCallback(async (id: string, datos: Partial<TipoCultivo>) => {
try {
await apiCall('PUT', `/tipos-cultivo/${id}`, datos);
setState(prev => ({
...prev,
tiposCultivo: prev.tiposCultivo.map(t => t.id === id ? { ...t, ...datos } : t),
}));
toast.success('Tipo de cultivo actualizado exitosamente');
} catch (err) {
console.error('Error al actualizar tipo de cultivo:', err);
toast.error(err instanceof Error ? err.message : 'Error al actualizar tipo de cultivo');
throw err;
}
}, [apiCall]);
const eliminarTipoCultivo = useCallback(async (id: string) => {
try {
await apiCall('DELETE', `/tipos-cultivo/${id}`);
setState(prev => ({
...prev,
tiposCultivo: prev.tiposCultivo.filter(t => t.id !== id),
}));
toast.success('Tipo de cultivo eliminado');
} catch (err) {
console.error('Error al eliminar tipo de cultivo:', err);
toast.error(err instanceof Error ? err.message : 'Error al eliminar tipo de cultivo');
throw err;
}
}, [apiCall]);
const restablecerTiposCultivo = useCallback(async () => {
try {
const res = await apiCall('POST', '/tipos-cultivo/reset');
if (Array.isArray(res)) {
setState(prev => ({
...prev,
tiposCultivo: res,
}));
}
toast.success('Tipos de cultivo restablecidos a valores predeterminados');
} catch (err) {
console.error('Error al restablecer tipos de cultivo:', err);
toast.error('Error al restablecer tipos de cultivo');
throw err;
}
}, [apiCall]);
// Acciones de estudios complementarios
const agregarEstudioComplementario = useCallback(async (estudio: Omit<EstudioComplementario, 'id'>) => {
const internacion = state.internaciones.find(i => i.id === estudio.internacionId);
@@ -1581,6 +1654,10 @@ const actualizarInternacion = useCallback(async (internacionId: string, datos: P
agregarCultivo,
actualizarCultivo,
eliminarCultivo,
agregarTipoCultivo,
actualizarTipoCultivo,
eliminarTipoCultivo,
restablecerTiposCultivo,
agregarEstudioComplementario,
actualizarEstudioComplementario,
eliminarEstudioComplementario,