From ec71eadd42dddd538238d9bc466207714a033728 Mon Sep 17 00:00:00 2001 From: Sergio Nicolas Lavaise Date: Fri, 24 Apr 2026 00:11:37 -0300 Subject: [PATCH] =?UTF-8?q?Fix:=20permisos=20para=20crear/editar=20ingreso?= =?UTF-8?q?s=20en=20=C3=A1rea=20'Fuera=20de=20=C3=A1rea'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Usuarios pueden crear ingresos en 'Fuera de área' - Usuarios pueden editar ingresos en 'Fuera de área' - canEditInArea permite editar ingresos de 'Fuera de área' --- src/hooks/useHospitalStore.ts | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/hooks/useHospitalStore.ts b/src/hooks/useHospitalStore.ts index facd4d9..ddd6e5a 100644 --- a/src/hooks/useHospitalStore.ts +++ b/src/hooks/useHospitalStore.ts @@ -208,11 +208,13 @@ export function useHospitalStore() { })); }, []); - // Acciones de internaciones +// Acciones de internaciones const iniciarInternacion = useCallback((internacion: Omit) => { const user = state.currentUser; const areaId = internacion.areaId || null; - if (user && user.rol !== 'admin' && areaId && user.areaId !== areaId) { + const area = state.areas.find(a => a.id === areaId); + const esFueraDeArea = area && (area.nombre || '').trim().toLowerCase() === 'fuera de area'; + if (user && user.rol !== 'admin' && !esFueraDeArea && areaId && user.areaId !== areaId) { console.warn('No tiene permisos para iniciar internación en esta área'); return null; } @@ -224,14 +226,14 @@ export function useHospitalStore() { setState(prev => ({ ...prev, internaciones: [...prev.internaciones, nuevaInternacion], - camas: prev.camas.map(c => + camaS: prev.camas.map(c => c.id === internacion.camaId ? { ...c, estado: 'Ocupada', pacienteId: internacion.pacienteId, internacionId: nuevaInternacion.id } : c ), })); return nuevaInternacion.id; - }, [state.currentUser]); + }, [state.currentUser, state.areas]); const finalizarInternacion = useCallback((internacionId: string, datos: { fechaEgreso: string; @@ -269,13 +271,15 @@ const finalizarInternacion = useCallback((internacionId: string, datos: { if (!internacion) return; const user = state.currentUser; const areaId = internacion.areaId || null; - if (user && user.rol !== 'admin' && areaId && user.areaId !== areaId) { + const area = state.areas.find(a => a.id === areaId); + const esFueraDeArea = area && (area.nombre || '').trim().toLowerCase() === 'fuera de area'; + if (user && user.rol !== 'admin' && !esFueraDeArea && areaId && user.areaId !== areaId) { console.warn('No tiene permisos para actualizar internación en esta área'); return; } const oldCamaId = internacion.camaId; -const newCamaId = datos.camaId; + const newCamaId = datos.camaId; const pacienteId = datos.pacienteId || internacion.pacienteId; setState(prev => { @@ -927,8 +931,11 @@ const getEstadisticas = useCallback(() => { if (!user) return false; if (user.rol === 'admin') return true; if (!areaId) return false; + const area = state.areas.find(a => a.id === areaId); + const esFueraDeArea = area && (area.nombre || '').trim().toLowerCase() === 'fuera de area'; + if (esFueraDeArea) return true; return user.areaId === areaId; - }, [state.currentUser]); + }, [state.currentUser, state.areas]); const canEditCama = useCallback((camaId: string): boolean => { const areaId = getCamaAreaId(camaId);