import { useHospitalStore } from '@/hooks/useHospitalStore'; import { Layout } from '@/sections/Layout'; import { toast } from 'sonner'; import { Dashboard } from '@/sections/Dashboard'; import { MapaCamas } from '@/sections/MapaCamas'; import { Pacientes } from '@/sections/Pacientes'; import { Internaciones } from '@/sections/Internaciones'; import { Evoluciones } from '@/sections/Evoluciones'; import { AcidoBaseSection } from '@/sections/AcidoBase'; import { Cultivos } from '@/sections/Cultivos'; import { HistoriaClinica } from '@/sections/HistoriaClinica'; import { NuevoIngreso } from '@/sections/NuevoIngreso'; import { EditIngreso } from '@/sections/EditIngreso'; import { Login } from '@/sections/Login'; import { GestionUsuarios } from '@/sections/GestionUsuarios'; import { Spinner } from '@/components/ui/spinner'; import { Button } from '@/components/ui/button'; import { ThemeProvider } from "@/components/theme-provider"; import { Toaster } from '@/components/ui/sonner'; import type { Indicacion, MovimientoIndicacion } from '@/types'; function AppContent() { const store = useHospitalStore(); if (!store.isLoaded) { return (
); } if (!store.isAuthenticated) { return ; } const renderVista = () => { switch (store.vistaActual) { case 'dashboard': return ( ); case 'camas': return ( ); case 'pacientes': return ( ); case 'internaciones': return ( { store.setCurrentInternacion(id); store.setVista('historiaclinica'); }} onNuevoIngreso={() => store.setVista('nuevoingreso')} /> ); case 'evoluciones': return ( ); case 'acidobase': return ( ); case 'cultivos': return ( ); case 'historiaclinica': { const internacionId = store.currentInternacionId || sessionStorage.getItem('hospital_current_internacion_id') || ''; const internacion = store.getInternacionById(internacionId); const paciente = internacion ? (store.getPacienteById(internacion.pacienteId) || store.pacientes.find(p => p.id === internacion.pacienteId || p.dni === internacion.pacienteId) || { id: internacion.pacienteId || 'paciente-unknown', apellido: 'Paciente', nombre: 'Sin registrar', dni: internacion.pacienteId || 'N/A', fechaNacimiento: '1990-01-01', sexo: 'Otro' as const, fechaRegistro: new Date().toISOString() }) : undefined; if (!internacion) { if (!store.isLoaded) { return (

Cargando información de la internación...

); } return (

Internación no encontrada (id: {internacionId})

); } return ( e.internacionId === internacion.id)} interconsultas={(store.interconsultas || []).filter(ic => ic.internacionId === internacion.id)} atb={(store.atb || []).filter(a => a.internacionId === internacion.id)} onAgregarEvolucion={store.agregarEvolucion} onActualizarEvolucion={store.actualizarEvolucion} onEliminarEvolucion={store.eliminarEvolucion} onAgregarLaboratorio={(l) => store.agregarLaboratorio({ ...l, internacionId: internacion.id })} onActualizarLaboratorio={store.actualizarLaboratorio} onEliminarLaboratorio={store.eliminarLaboratorio} onAgregarGlucemia={(g) => store.agregarGlucemia({ ...g, internacionId: internacion.id })} onActualizarGlucemia={store.actualizarGlucemia} onEliminarGlucemia={store.eliminarGlucemia} onAgregarAcidoBase={(a) => store.agregarAcidoBase({ ...a, internacionId: internacion.id })} onActualizarAcidoBase={store.actualizarAcidoBase} onEliminarAcidoBase={store.eliminarAcidoBase} onAgregarCultivo={(c) => store.agregarCultivo({ ...c, internacionId: internacion.id })} onActualizarCultivo={store.actualizarCultivo} onEliminarCultivo={store.eliminarCultivo} onAgregarEstudioComplementario={(e) => store.agregarEstudioComplementario({ ...e, internacionId: internacion.id })} onActualizarEstudioComplementario={store.actualizarEstudioComplementario} onEliminarEstudioComplementario={store.eliminarEstudioComplementario} onAgregarInterconsulta={(ic) => store.agregarInterconsulta({ ...ic, internacionId: internacion.id })} onActualizarInterconsulta={store.actualizarInterconsulta} onEliminarInterconsulta={store.eliminarInterconsulta} onAgregarATB={(atb) => store.agregarATB({ ...atb, internacionId: internacion.id })} onActualizarATB={store.actualizarATB} onEliminarATB={store.eliminarATB} indicadores={(Array.isArray(store.indicaciones) ? store.indicaciones : []).filter((i: Indicacion) => i.internacionId === internacion.id)} movimientos={store.getMovimientosByInternacion ? store.getMovimientosByInternacion(internacion.id) : []} onAgregarIndicacion={(i) => store.agregarIndicacion({ ...i, internacionId: internacion.id })} onActualizarIndicacion={store.actualizarIndicacion} onEliminarIndicacion={store.eliminarIndicacion} onAgregarMovimiento={(m: MovimientoIndicacion) => store.agregarMovimientoIndicacion ? store.agregarMovimientoIndicacion({ ...m, internacionId: internacion.id }) : null} onActualizarInternacion={store.actualizarInternacion} onActualizarCama={store.actualizarCama} onVolver={() => store.setVista('internaciones')} onEditarIngreso={() => { if (store.canEditIngreso(internacion.id)) { store.setVista('editaringreso'); } else { toast.error(`Solo el usuario que creó esta internación (${internacion.medicoIngresante}) puede modificar el ingreso.`); } }} canEdit={store.canEditInternacion(internacion.id)} /> ); } case 'nuevoingreso': return ( store.setVista('internaciones')} getGrupoName={(grupoId) => store.grupos.find(a => a.id === grupoId)?.nombre || ''} internaciones={store.internaciones} /> ); case 'editaringreso': { const internacionId = store.currentInternacionId || sessionStorage.getItem('hospital_current_internacion_id') || ''; const internacion = store.getInternacionById(internacionId); const paciente = internacion ? (store.getPacienteById(internacion.pacienteId) || store.pacientes.find(p => p.id === internacion.pacienteId || p.dni === internacion.pacienteId) || { id: internacion.pacienteId || 'paciente-unknown', apellido: 'Paciente', nombre: 'Sin registrar', dni: internacion.pacienteId || 'N/A', fechaNacimiento: '1990-01-01', sexo: 'Otro' as const, fechaRegistro: new Date().toISOString() }) : undefined; if (!internacion) { if (!store.isLoaded) { return (

Cargando información de la internación...

); } return (

Internación no encontrada (id: {internacionId})

); } return ( store.setVista('historiaclinica')} getGrupoName={(grupoId) => store.grupos.find(a => a.id === grupoId)?.nombre || ''} /> ); } case 'usuarios': if (store.currentUser?.rol !== 'admin') { return (

No tiene permisos para acceder a esta sección.

); } return ( ); default: return null; } }; return ( {renderVista()} ); } function App() { return ( ); } export default App;