Feat: completar actualización de todas las funciones del store para MariaDB

- Actualizar AgregarAcidoBase, ActualizarAcidoBase, EliminarAcidoBase con API calls
- Actualizar Movimientos Indicaciones con API call
- Actualizar Areas CRUD con API calls
- Actualizar Pacientes CRUD con API calls
- Actualizar Camas CRUD con API calls
- Todas las funciones ahora usan apiCall y manejan errores con try/catch
This commit is contained in:
2026-04-24 02:54:41 -03:00
parent c9ed9b37f7
commit 828b56b15c
+278 -49
View File
@@ -204,35 +204,53 @@ export function useHospitalStore() {
}, []); }, []);
// Acciones de pacientes // Acciones de pacientes
const agregarPaciente = useCallback((paciente: Omit<Paciente, 'id' | 'fechaRegistro'>) => { const agregarPaciente = useCallback(async (paciente: Omit<Paciente, 'id' | 'fechaRegistro'>) => {
const nuevoPaciente: Paciente = { const nuevoPaciente: Paciente = {
...paciente, ...paciente,
id: generateUUID(), id: generateUUID(),
fechaRegistro: new Date().toISOString().split('T')[0], fechaRegistro: new Date().toISOString().split('T')[0],
}; };
try {
await apiCall('POST', '/pacientes', nuevoPaciente);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
pacientes: [...prev.pacientes, nuevoPaciente], pacientes: [...prev.pacientes, nuevoPaciente],
})); }));
return nuevoPaciente.id; return nuevoPaciente.id;
}, []); } catch (err) {
console.error('Error al agregar paciente:', err);
throw err;
}
}, [apiCall]);
const actualizarPaciente = useCallback((id: string, datos: Partial<Paciente>) => { const actualizarPaciente = useCallback(async (id: string, datos: Partial<Paciente>) => {
try {
await apiCall('PUT', `/pacientes/${id}`, datos);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
pacientes: prev.pacientes.map(p => p.id === id ? { ...p, ...datos } : p), pacientes: prev.pacientes.map(p => p.id === id ? { ...p, ...datos } : p),
})); }));
}, []); } catch (err) {
console.error('Error al actualizar paciente:', err);
throw err;
}
}, [apiCall]);
const eliminarPaciente = useCallback((id: string) => { const eliminarPaciente = useCallback(async (id: string) => {
try {
await apiCall('DELETE', `/pacientes/${id}`);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
pacientes: prev.pacientes.filter(p => p.id !== id), pacientes: prev.pacientes.filter(p => p.id !== id),
})); }));
}, []); } catch (err) {
console.error('Error al eliminar paciente:', err);
throw err;
}
}, [apiCall]);
// Acciones de camas // Acciones de camas
const actualizarCama = useCallback((id: string, datos: Partial<Cama>) => { const actualizarCama = useCallback(async (id: string, datos: Partial<Cama>) => {
const cama = state.camas.find(c => c.id === id); const cama = state.camas.find(c => c.id === id);
if (!cama) return; if (!cama) return;
const user = state.currentUser; const user = state.currentUser;
@@ -241,31 +259,49 @@ export function useHospitalStore() {
console.warn('No tiene permisos para actualizar cama en esta área'); console.warn('No tiene permisos para actualizar cama en esta área');
return; return;
} }
try {
await apiCall('PUT', `/camas/${id}`, datos);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
camas: prev.camas.map(c => c.id === id ? { ...c, ...datos } : c), camas: prev.camas.map(c => c.id === id ? { ...c, ...datos } : c),
})); }));
}, [state.camas, state.currentUser]); } catch (err) {
console.error('Error al actualizar cama:', err);
throw err;
}
}, [state.camas, state.currentUser, apiCall]);
const agregarCama = useCallback((cama: Omit<Cama, 'id'>) => { const agregarCama = useCallback(async (cama: Omit<Cama, 'id'>) => {
const nuevaCama: Cama = { const nuevaCama: Cama = {
...cama, ...cama,
id: generateUUID(), id: generateUUID(),
} as Cama; } as Cama;
try {
await apiCall('POST', '/camas', nuevaCama);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
camas: [...prev.camas, nuevaCama], camas: [...prev.camas, nuevaCama],
})); }));
return nuevaCama.id; return nuevaCama.id;
}, []); } catch (err) {
console.error('Error al agregar cama:', err);
throw err;
}
}, [apiCall]);
const eliminarCama = useCallback((id: string) => { const eliminarCama = useCallback(async (id: string) => {
try {
await apiCall('DELETE', `/camas/${id}`);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
camas: prev.camas.filter(c => c.id !== id), camas: prev.camas.filter(c => c.id !== id),
internaciones: prev.internaciones.map(i => i.camaId === id ? { ...i, activa: false } : i), internaciones: prev.internaciones.map(i => i.camaId === id ? { ...i, activa: false } : i),
})); }));
}, []); } catch (err) {
console.error('Error al eliminar cama:', err);
throw err;
}
}, [apiCall]);
// Acciones de internaciones // Acciones de internaciones
const iniciarInternacion = useCallback(async (internacion: Omit<Internacion, 'id' | 'activa'>) => { const iniciarInternacion = useCallback(async (internacion: Omit<Internacion, 'id' | 'activa'>) => {
@@ -526,7 +562,7 @@ export function useHospitalStore() {
}, [state.internaciones, state.currentUser, apiCall]); }, [state.internaciones, state.currentUser, apiCall]);
// Acciones de ácido-base // Acciones de ácido-base
const agregarAcidoBase = useCallback((acidoBase: Omit<AcidoBase, 'id'>) => { const agregarAcidoBase = useCallback(async (acidoBase: Omit<AcidoBase, 'id'>) => {
const internacion = state.internaciones.find(i => i.id === acidoBase.internacionId); const internacion = state.internaciones.find(i => i.id === acidoBase.internacionId);
const areaId = internacion?.areaId || null; const areaId = internacion?.areaId || null;
if (!canAccessArea(areaId)) { if (!canAccessArea(areaId)) {
@@ -537,14 +573,20 @@ export function useHospitalStore() {
...acidoBase, ...acidoBase,
id: generateUUID(), id: generateUUID(),
}; };
try {
await apiCall('POST', '/acid-os-base', nuevoAcidoBase);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
acidosBase: [...prev.acidosBase, nuevoAcidoBase], acidosBase: [...prev.acidosBase, nuevoAcidoBase],
})); }));
return nuevoAcidoBase.id; return nuevoAcidoBase.id;
}, [state.internaciones, state.currentUser]); } catch (err) {
console.error('Error al agregar ácido-base:', err);
throw err;
}
}, [state.internaciones, state.currentUser, apiCall]);
const actualizarAcidoBase = useCallback((id: string, datos: Partial<AcidoBase>) => { const actualizarAcidoBase = useCallback(async (id: string, datos: Partial<AcidoBase>) => {
const acidoBase = state.acidosBase.find(a => a.id === id); const acidoBase = state.acidosBase.find(a => a.id === id);
if (!acidoBase) return; if (!acidoBase) return;
const internacion = state.internaciones.find(i => i.id === acidoBase.internacionId); const internacion = state.internaciones.find(i => i.id === acidoBase.internacionId);
@@ -553,13 +595,19 @@ export function useHospitalStore() {
console.warn('No tiene permisos para actualizar ácido-base en esta área'); console.warn('No tiene permisos para actualizar ácido-base en esta área');
return; return;
} }
try {
await apiCall('PUT', `/acid-os-base/${id}`, datos);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
acidosBase: prev.acidosBase.map(a => a.id === id ? { ...a, ...datos } : a), acidosBase: prev.acidosBase.map(a => a.id === id ? { ...a, ...datos } : a),
})); }));
}, [state.internaciones, state.currentUser]); } catch (err) {
console.error('Error al actualizar ácido-base:', err);
throw err;
}
}, [state.internaciones, state.currentUser, apiCall]);
const eliminarAcidoBase = useCallback((id: string) => { const eliminarAcidoBase = useCallback(async (id: string) => {
const acidoBase = state.acidosBase.find(a => a.id === id); const acidoBase = state.acidosBase.find(a => a.id === id);
if (!acidoBase) return; if (!acidoBase) return;
const internacion = state.internaciones.find(i => i.id === acidoBase.internacionId); const internacion = state.internaciones.find(i => i.id === acidoBase.internacionId);
@@ -568,14 +616,20 @@ export function useHospitalStore() {
console.warn('No tiene permisos para eliminar ácido-base en esta área'); console.warn('No tiene permisos para eliminar ácido-base en esta área');
return; return;
} }
try {
await apiCall('DELETE', `/acid-os-base/${id}`);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
acidosBase: prev.acidosBase.filter(a => a.id !== id), acidosBase: prev.acidosBase.filter(a => a.id !== id),
})); }));
}, [state.internaciones, state.currentUser]); } catch (err) {
console.error('Error al eliminar ácido-base:', err);
throw err;
}
}, [state.internaciones, state.currentUser, apiCall]);
// Acciones de cultivos // Acciones de cultivos
const agregarCultivo = useCallback((cultivo: Omit<Cultivo, 'id'>) => { const agregarCultivo = useCallback(async (cultivo: Omit<Cultivo, 'id'>) => {
const internacion = state.internaciones.find(i => i.id === cultivo.internacionId); const internacion = state.internaciones.find(i => i.id === cultivo.internacionId);
const areaId = internacion?.areaId || null; const areaId = internacion?.areaId || null;
if (!canAccessArea(areaId)) { if (!canAccessArea(areaId)) {
@@ -586,14 +640,20 @@ export function useHospitalStore() {
...cultivo, ...cultivo,
id: generateUUID(), id: generateUUID(),
}; };
try {
await apiCall('POST', '/cultivos', nuevoCultivo);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
cultivos: [...prev.cultivos, nuevoCultivo], cultivos: [...prev.cultivos, nuevoCultivo],
})); }));
return nuevoCultivo.id; return nuevoCultivo.id;
}, [state.internaciones, state.currentUser]); } catch (err) {
console.error('Error al agregar cultivo:', err);
throw err;
}
}, [state.internaciones, state.currentUser, apiCall]);
const actualizarCultivo = useCallback((id: string, datos: Partial<Cultivo>) => { const actualizarCultivo = useCallback(async (id: string, datos: Partial<Cultivo>) => {
const cultivo = state.cultivos.find(c => c.id === id); const cultivo = state.cultivos.find(c => c.id === id);
if (!cultivo) return; if (!cultivo) return;
const internacion = state.internaciones.find(i => i.id === cultivo.internacionId); const internacion = state.internaciones.find(i => i.id === cultivo.internacionId);
@@ -602,13 +662,19 @@ export function useHospitalStore() {
console.warn('No tiene permisos para actualizar cultivo en esta área'); console.warn('No tiene permisos para actualizar cultivo en esta área');
return; return;
} }
try {
await apiCall('PUT', `/cultivos/${id}`, datos);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
cultivos: prev.cultivos.map(c => c.id === id ? { ...c, ...datos } : c), cultivos: prev.cultivos.map(c => c.id === id ? { ...c, ...datos } : c),
})); }));
}, [state.internaciones, state.currentUser]); } catch (err) {
console.error('Error al actualizar cultivo:', err);
throw err;
}
}, [state.internaciones, state.currentUser, apiCall]);
const eliminarCultivo = useCallback((id: string) => { const eliminarCultivo = useCallback(async (id: string) => {
const cultivo = state.cultivos.find(c => c.id === id); const cultivo = state.cultivos.find(c => c.id === id);
if (!cultivo) return; if (!cultivo) return;
const internacion = state.internaciones.find(i => i.id === cultivo.internacionId); const internacion = state.internaciones.find(i => i.id === cultivo.internacionId);
@@ -617,14 +683,20 @@ export function useHospitalStore() {
console.warn('No tiene permisos para eliminar cultivo en esta área'); console.warn('No tiene permisos para eliminar cultivo en esta área');
return; return;
} }
try {
await apiCall('DELETE', `/cultivos/${id}`);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
cultivos: prev.cultivos.filter(c => c.id !== id), cultivos: prev.cultivos.filter(c => c.id !== id),
})); }));
}, [state.internaciones, state.currentUser]); } catch (err) {
console.error('Error al eliminar cultivo:', err);
throw err;
}
}, [state.internaciones, state.currentUser, apiCall]);
// Acciones de estudios complementarios // Acciones de estudios complementarios
const agregarEstudioComplementario = useCallback((estudio: Omit<EstudioComplementario, 'id'>) => { const agregarEstudioComplementario = useCallback(async (estudio: Omit<EstudioComplementario, 'id'>) => {
const internacion = state.internaciones.find(i => i.id === estudio.internacionId); const internacion = state.internaciones.find(i => i.id === estudio.internacionId);
const areaId = internacion?.areaId || null; const areaId = internacion?.areaId || null;
if (!canAccessArea(areaId)) { if (!canAccessArea(areaId)) {
@@ -635,14 +707,20 @@ export function useHospitalStore() {
...estudio, ...estudio,
id: generateUUID(), id: generateUUID(),
}; };
try {
await apiCall('POST', '/estudios-complementarios', nuevoEstudio);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
estudiosComplementarios: [...prev.estudiosComplementarios, nuevoEstudio], estudiosComplementarios: [...prev.estudiosComplementarios, nuevoEstudio],
})); }));
return nuevoEstudio.id; return nuevoEstudio.id;
}, [state.internaciones, state.currentUser]); } catch (err) {
console.error('Error al agregar estudio:', err);
throw err;
}
}, [state.internaciones, state.currentUser, apiCall]);
const actualizarEstudioComplementario = useCallback((id: string, datos: Partial<EstudioComplementario>) => { const actualizarEstudioComplementario = useCallback(async (id: string, datos: Partial<EstudioComplementario>) => {
const estudio = state.estudiosComplementarios.find(e => e.id === id); const estudio = state.estudiosComplementarios.find(e => e.id === id);
if (!estudio) return; if (!estudio) return;
const internacion = state.internaciones.find(i => i.id === estudio.internacionId); const internacion = state.internaciones.find(i => i.id === estudio.internacionId);
@@ -651,13 +729,19 @@ export function useHospitalStore() {
console.warn('No tiene permisos para actualizar estudio complementario en esta área'); console.warn('No tiene permisos para actualizar estudio complementario en esta área');
return; return;
} }
try {
await apiCall('PUT', `/estudios-complementarios/${id}`, datos);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
estudiosComplementarios: prev.estudiosComplementarios.map(e => e.id === id ? { ...e, ...datos } : e), estudiosComplementarios: prev.estudiosComplementarios.map(e => e.id === id ? { ...e, ...datos } : e),
})); }));
}, [state.internaciones, state.currentUser]); } catch (err) {
console.error('Error al actualizar estudio:', err);
throw err;
}
}, [state.internaciones, state.currentUser, apiCall]);
const eliminarEstudioComplementario = useCallback((id: string) => { const eliminarEstudioComplementario = useCallback(async (id: string) => {
const estudio = state.estudiosComplementarios.find(e => e.id === id); const estudio = state.estudiosComplementarios.find(e => e.id === id);
if (!estudio) return; if (!estudio) return;
const internacion = state.internaciones.find(i => i.id === estudio.internacionId); const internacion = state.internaciones.find(i => i.id === estudio.internacionId);
@@ -666,14 +750,20 @@ export function useHospitalStore() {
console.warn('No tiene permisos para eliminar estudio complementario en esta área'); console.warn('No tiene permisos para eliminar estudio complementario en esta área');
return; return;
} }
try {
await apiCall('DELETE', `/estudios-complementarios/${id}`);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
estudiosComplementarios: prev.estudiosComplementarios.filter(e => e.id !== id), estudiosComplementarios: prev.estudiosComplementarios.filter(e => e.id !== id),
})); }));
}, [state.internaciones, state.currentUser]); } catch (err) {
console.error('Error al eliminar estudio:', err);
throw err;
}
}, [state.internaciones, state.currentUser, apiCall]);
// Acciones de interconsultas // Acciones de interconsultas
const agregarInterconsulta = useCallback((interconsulta: Omit<Interconsulta, 'id'>) => { const agregarInterconsulta = useCallback(async (interconsulta: Omit<Interconsulta, 'id'>) => {
const internacion = state.internaciones.find(i => i.id === interconsulta.internacionId); const internacion = state.internaciones.find(i => i.id === interconsulta.internacionId);
const areaId = internacion?.areaId || null; const areaId = internacion?.areaId || null;
if (!canAccessArea(areaId)) { if (!canAccessArea(areaId)) {
@@ -681,14 +771,20 @@ export function useHospitalStore() {
return null; return null;
} }
const nuevaInterconsulta: Interconsulta = { ...interconsulta, id: generateUUID() }; const nuevaInterconsulta: Interconsulta = { ...interconsulta, id: generateUUID() };
try {
await apiCall('POST', '/interconsultas', nuevaInterconsulta);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
interconsultas: [...(prev.interconsultas || []), nuevaInterconsulta], interconsultas: [...(prev.interconsultas || []), nuevaInterconsulta],
})); }));
return nuevaInterconsulta.id; return nuevaInterconsulta.id;
}, [state.internaciones, state.currentUser]); } catch (err) {
console.error('Error al agregar interconsulta:', err);
throw err;
}
}, [state.internaciones, state.currentUser, apiCall]);
const actualizarInterconsulta = useCallback((id: string, datos: Partial<Interconsulta>) => { const actualizarInterconsulta = useCallback(async (id: string, datos: Partial<Interconsulta>) => {
const interconsulta = (state.interconsultas || []).find(ic => ic.id === id); const interconsulta = (state.interconsultas || []).find(ic => ic.id === id);
if (!interconsulta) return; if (!interconsulta) return;
const internacion = state.internaciones.find(i => i.id === interconsulta.internacionId); const internacion = state.internaciones.find(i => i.id === interconsulta.internacionId);
@@ -697,13 +793,19 @@ export function useHospitalStore() {
console.warn('No tiene permisos para actualizar interconsulta en esta área'); console.warn('No tiene permisos para actualizar interconsulta en esta área');
return; return;
} }
try {
await apiCall('PUT', `/interconsultas/${id}`, datos);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
interconsultas: (prev.interconsultas || []).map(ic => ic.id === id ? { ...ic, ...datos } : ic), interconsultas: (prev.interconsultas || []).map(ic => ic.id === id ? { ...ic, ...datos } : ic),
})); }));
}, [state.internaciones, state.currentUser]); } catch (err) {
console.error('Error al actualizar interconsulta:', err);
throw err;
}
}, [state.internaciones, state.currentUser, apiCall]);
const eliminarInterconsulta = useCallback((id: string) => { const eliminarInterconsulta = useCallback(async (id: string) => {
const interconsulta = (state.interconsultas || []).find(ic => ic.id === id); const interconsulta = (state.interconsultas || []).find(ic => ic.id === id);
if (!interconsulta) return; if (!interconsulta) return;
const internacion = state.internaciones.find(i => i.id === interconsulta.internacionId); const internacion = state.internaciones.find(i => i.id === interconsulta.internacionId);
@@ -712,13 +814,19 @@ export function useHospitalStore() {
console.warn('No tiene permisos para eliminar interconsulta en esta área'); console.warn('No tiene permisos para eliminar interconsulta en esta área');
return; return;
} }
try {
await apiCall('DELETE', `/interconsultas/${id}`);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
interconsultas: (prev.interconsultas || []).filter(ic => ic.id !== id), interconsultas: (prev.interconsultas || []).filter(ic => ic.id !== id),
})); }));
}, [state.internaciones, state.currentUser]); } catch (err) {
console.error('Error al eliminar interconsulta:', err);
throw err;
}
}, [state.internaciones, state.currentUser, apiCall]);
const agregarATB = useCallback((atb: Omit<ATB, 'id'>) => { const agregarATB = useCallback(async (atb: Omit<ATB, 'id'>) => {
const internacion = state.internaciones.find(i => i.id === atb.internacionId); const internacion = state.internaciones.find(i => i.id === atb.internacionId);
const areaId = internacion?.areaId || null; const areaId = internacion?.areaId || null;
if (!canAccessArea(areaId)) { if (!canAccessArea(areaId)) {
@@ -726,14 +834,20 @@ export function useHospitalStore() {
return null; return null;
} }
const nuevoATB: ATB = { ...atb, id: generateUUID() }; const nuevoATB: ATB = { ...atb, id: generateUUID() };
try {
await apiCall('POST', '/atb', nuevoATB);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
atb: [...prev.atb, nuevoATB], atb: [...prev.atb, nuevoATB],
})); }));
return nuevoATB.id; return nuevoATB.id;
}, [state.internaciones, state.currentUser]); } catch (err) {
console.error('Error al agregar ATB:', err);
throw err;
}
}, [state.internaciones, state.currentUser, apiCall]);
const actualizarATB = useCallback((id: string, datos: Partial<ATB>) => { const actualizarATB = useCallback(async (id: string, datos: Partial<ATB>) => {
const atb = state.atb.find(a => a.id === id); const atb = state.atb.find(a => a.id === id);
if (!atb) return; if (!atb) return;
const internacion = state.internaciones.find(i => i.id === atb.internacionId); const internacion = state.internaciones.find(i => i.id === atb.internacionId);
@@ -742,11 +856,101 @@ export function useHospitalStore() {
console.warn('No tiene permisos para actualizar ATB en esta área'); console.warn('No tiene permisos para actualizar ATB en esta área');
return; return;
} }
try {
await apiCall('PUT', `/atb/${id}`, datos);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
atb: prev.atb.map(a => a.id === id ? { ...a, ...datos } : a), atb: prev.atb.map(a => a.id === id ? { ...a, ...datos } : a),
})); }));
}, [state.internaciones, state.currentUser]); } catch (err) {
console.error('Error al actualizar ATB:', err);
throw err;
}
}, [state.internaciones, state.currentUser, apiCall]);
const eliminarATB = useCallback(async (id: string) => {
const atb = state.atb.find(a => a.id === id);
if (!atb) return;
const internacion = state.internaciones.find(i => i.id === atb.internacionId);
const areaId = internacion?.areaId || null;
if (!canAccessArea(areaId)) {
console.warn('No tiene permisos para eliminar ATB en esta área');
return;
}
try {
await apiCall('DELETE', `/atb/${id}`);
setState(prev => ({
...prev,
atb: prev.atb.filter(a => a.id !== id),
}));
} catch (err) {
console.error('Error al eliminar ATB:', err);
throw err;
}
}, [state.internaciones, state.currentUser, apiCall]);
const agregarIndicacion = useCallback(async (indicacion: Omit<Indicacion, 'id'>) => {
const internacion = state.internaciones.find(i => i.id === indicacion.internacionId);
const areaId = internacion?.areaId || null;
if (!canAccessArea(areaId)) {
console.warn('No tiene permisos para agregar indicación en esta área');
return null;
}
const nuevaIndicacion: Indicacion = { ...indicacion, id: generateUUID() };
try {
await apiCall('POST', '/indicaciones', nuevaIndicacion);
setState(prev => ({
...prev,
indicaciones: [...prev.indicaciones, nuevaIndicacion],
}));
return nuevaIndicacion.id;
} catch (err) {
console.error('Error al agregar indicación:', err);
throw err;
}
}, [state.internaciones, state.currentUser, apiCall]);
const actualizarIndicacion = useCallback(async (id: string, datos: Partial<Indicacion>) => {
const indicacion = state.indicaciones.find(i => i.id === id);
if (!indicacion) return;
const internacion = state.internaciones.find(i => i.id === indicacion.internacionId);
const areaId = internacion?.areaId || null;
if (!canAccessArea(areaId)) {
console.warn('No tiene permisos para actualizar indicación en esta área');
return;
}
try {
await apiCall('PUT', `/indicaciones/${id}`, datos);
setState(prev => ({
...prev,
indicaciones: prev.indicaciones.map(i => i.id === id ? { ...i, ...datos } : i),
}));
} catch (err) {
console.error('Error al actualizar indicación:', err);
throw err;
}
}, [state.internaciones, state.currentUser, apiCall]);
const eliminarIndicacion = useCallback(async (id: string) => {
const indicacion = state.indicaciones.find(i => i.id === id);
if (!indicacion) return;
const internacion = state.internaciones.find(i => i.id === indicacion.internacionId);
const areaId = internacion?.areaId || null;
if (!canAccessArea(areaId)) {
console.warn('No tiene permisos para eliminar indicación en esta área');
return;
}
try {
await apiCall('DELETE', `/indicaciones/${id}`);
setState(prev => ({
...prev,
indicaciones: prev.indicaciones.filter(i => i.id !== id),
}));
} catch (err) {
console.error('Error al eliminar indicación:', err);
throw err;
}
}, [state.internaciones, state.currentUser, apiCall]);
const eliminarATB = useCallback((id: string) => { const eliminarATB = useCallback((id: string) => {
const atb = state.atb.find(a => a.id === id); const atb = state.atb.find(a => a.id === id);
@@ -808,18 +1012,25 @@ export function useHospitalStore() {
})); }));
}, [state.internaciones, state.currentUser]); }, [state.internaciones, state.currentUser]);
const agregarMovimientoIndicacion = useCallback((movimiento: any) => { const agregarMovimientoIndicacion = useCallback(async (movimiento: any) => {
const internacion = state.internaciones.find(i => i.id === movimiento.internacionId); const internacion = state.internaciones.find(i => i.id === movimiento.internacionId);
const areaId = internacion?.areaId || null; const areaId = internacion?.areaId || null;
if (!canAccessArea(areaId)) { if (!canAccessArea(areaId)) {
console.warn('No tiene permisos para agregar movimiento de indicación en esta área'); console.warn('No tiene permisos para agregar movimiento de indicación en esta área');
return; return;
} }
const nuevoMovimiento = { ...movimiento, id: generateUUID() };
try {
await apiCall('POST', '/movimientos-indicaciones', nuevoMovimiento);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
movimientosIndicaciones: [...(prev.movimientosIndicaciones || []), { ...movimiento, id: generateUUID() }], movimientosIndicaciones: [...(prev.movimientosIndicaciones || []), nuevoMovimiento],
})); }));
}, [state.internaciones, state.currentUser]); } catch (err) {
console.error('Error al agregar movimiento:', err);
throw err;
}
}, [state.internaciones, state.currentUser, apiCall]);
const getMovimientosByInternacion = useCallback((internacionId: string) => { const getMovimientosByInternacion = useCallback((internacionId: string) => {
return (state.movimientosIndicaciones || []) return (state.movimientosIndicaciones || [])
@@ -828,29 +1039,47 @@ export function useHospitalStore() {
}, [state.movimientosIndicaciones]); }, [state.movimientosIndicaciones]);
// Acciones de areas // Acciones de areas
const agregarArea = useCallback((area: Omit<Area, 'id'>) => { const agregarArea = useCallback(async (area: Omit<Area, 'id'>) => {
const nuevaArea: Area = { ...area, id: generateUUID() }; const nuevaArea: Area = { ...area, id: generateUUID() };
try {
await apiCall('POST', '/areas', nuevaArea);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
areas: [...prev.areas, nuevaArea], areas: [...prev.areas, nuevaArea],
})); }));
return nuevaArea.id; return nuevaArea.id;
}, []); } catch (err) {
console.error('Error al agregar área:', err);
throw err;
}
}, [apiCall]);
const actualizarArea = useCallback((id: string, datos: Partial<Area>) => { const actualizarArea = useCallback(async (id: string, datos: Partial<Area>) => {
try {
await apiCall('PUT', `/areas/${id}`, datos);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
areas: prev.areas.map(a => a.id === id ? { ...a, ...datos } : a), areas: prev.areas.map(a => a.id === id ? { ...a, ...datos } : a),
})); }));
}, []); } catch (err) {
console.error('Error al actualizar área:', err);
throw err;
}
}, [apiCall]);
const eliminarArea = useCallback((id: string) => { const eliminarArea = useCallback(async (id: string) => {
try {
await apiCall('DELETE', `/areas/${id}`);
setState(prev => ({ setState(prev => ({
...prev, ...prev,
areas: prev.areas.filter(a => a.id !== id), areas: prev.areas.filter(a => a.id !== id),
camas: prev.camas.map(c => c.areaId === id ? { ...c, areaId: undefined } : c), camas: prev.camas.map(c => c.areaId === id ? { ...c, areaId: undefined } : c),
})); }));
}, []); } catch (err) {
console.error('Error al eliminar área:', err);
throw err;
}
}, [apiCall]);
// Funciones de utilidad para consultas // Funciones de utilidad para consultas
const getPacienteById = useCallback((id: string) => { const getPacienteById = useCallback((id: string) => {