Fix: actualiza estado de cama en tabla camas al cambiar internacion

- Agrega endpoint PUT /api/camas/:id en servidor
- Corrige nombre de tabla SQL de cama a camas
- Actualiza estado de camas en memoria al cambiar internacion
- Agrega retry logic para evitar SQLITE_BUSY
- Mejora delay entre actualizaciones de cama
This commit is contained in:
2026-04-23 23:44:28 -03:00
parent 9f29e2adc5
commit e996f92d71
4 changed files with 88 additions and 22 deletions
+38 -18
View File
@@ -275,26 +275,46 @@ const finalizarInternacion = useCallback((internacionId: string, datos: {
}
const oldCamaId = internacion.camaId;
const newCamaId = datos.camaId;
const newCamaId = datos.camaId;
const pacienteId = datos.pacienteId || internacion.pacienteId;
setState(prev => ({
...prev,
internaciones: prev.internaciones.map(i =>
i.id === internacionId
? { ...i, ...datos }
: i
),
cams: prev.camas.map(c => {
if (c.id === newCamaId && newCamaId !== oldCamaId) {
return { ...c, estado: 'Ocupada', pacienteId, internacionId };
}
if (c.id === oldCamaId && oldCamaId !== newCamaId) {
return { ...c, estado: 'Disponible', pacienteId: undefined, internacionId: undefined };
}
return c;
}),
}));
setState(prev => {
const result = {
...prev,
internaciones: prev.internaciones.map(i =>
i.id === internacionId
? { ...i, ...datos }
: i
),
camas: prev.camas.map(c => {
if (c.id === newCamaId && newCamaId !== oldCamaId) {
return { ...c, estado: 'Ocupada' as const, pacienteId, internacionId };
}
if (c.id === oldCamaId && oldCamaId !== newCamaId) {
return { ...c, estado: 'Disponible' as const, pacienteId: undefined, internacionId: undefined };
}
return c;
}),
};
return result;
});
if (oldCamaId !== newCamaId && newCamaId && oldCamaId) {
setTimeout(() => {
fetch(`${API_BASE}/camas/${newCamaId}`, {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ estado: 'Ocupada' }),
}).catch(() => {});
}, 500);
setTimeout(() => {
fetch(`${API_BASE}/camas/${oldCamaId}`, {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ estado: 'Disponible' }),
}).catch(() => {});
}, 1000);
}
}, [state.internaciones, state.currentUser]);
// Acciones de evoluciones