Fix: permisos para crear/editar ingresos en área 'Fuera de área'

- Usuarios pueden crear ingresos en 'Fuera de área'
- Usuarios pueden editar ingresos en 'Fuera de área'
- canEditInArea permite editar ingresos de 'Fuera de área'
This commit is contained in:
2026-04-24 00:11:37 -03:00
parent ed76be8351
commit ec71eadd42
+12 -5
View File
@@ -212,7 +212,9 @@ export function useHospitalStore() {
const iniciarInternacion = useCallback((internacion: Omit<Internacion, 'id' | 'activa'>) => { const iniciarInternacion = useCallback((internacion: Omit<Internacion, 'id' | 'activa'>) => {
const user = state.currentUser; const user = state.currentUser;
const areaId = internacion.areaId || null; 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'); console.warn('No tiene permisos para iniciar internación en esta área');
return null; return null;
} }
@@ -224,14 +226,14 @@ export function useHospitalStore() {
setState(prev => ({ setState(prev => ({
...prev, ...prev,
internaciones: [...prev.internaciones, nuevaInternacion], internaciones: [...prev.internaciones, nuevaInternacion],
camas: prev.camas.map(c => camaS: prev.camas.map(c =>
c.id === internacion.camaId c.id === internacion.camaId
? { ...c, estado: 'Ocupada', pacienteId: internacion.pacienteId, internacionId: nuevaInternacion.id } ? { ...c, estado: 'Ocupada', pacienteId: internacion.pacienteId, internacionId: nuevaInternacion.id }
: c : c
), ),
})); }));
return nuevaInternacion.id; return nuevaInternacion.id;
}, [state.currentUser]); }, [state.currentUser, state.areas]);
const finalizarInternacion = useCallback((internacionId: string, datos: { const finalizarInternacion = useCallback((internacionId: string, datos: {
fechaEgreso: string; fechaEgreso: string;
@@ -269,7 +271,9 @@ const finalizarInternacion = useCallback((internacionId: string, datos: {
if (!internacion) return; if (!internacion) return;
const user = state.currentUser; const user = state.currentUser;
const areaId = internacion.areaId || null; 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'); console.warn('No tiene permisos para actualizar internación en esta área');
return; return;
} }
@@ -927,8 +931,11 @@ const getEstadisticas = useCallback(() => {
if (!user) return false; if (!user) return false;
if (user.rol === 'admin') return true; if (user.rol === 'admin') return true;
if (!areaId) return false; 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; return user.areaId === areaId;
}, [state.currentUser]); }, [state.currentUser, state.areas]);
const canEditCama = useCallback((camaId: string): boolean => { const canEditCama = useCallback((camaId: string): boolean => {
const areaId = getCamaAreaId(camaId); const areaId = getCamaAreaId(camaId);