('');
const [dialogoAbierto, setDialogoAbierto] = useState(false);
@@ -44,7 +48,10 @@ export function Evoluciones({
const [fecha, setFecha] = useState(new Date().toISOString().split('T')[0]);
const [hora, setHora] = useState(new Date().toTimeString().slice(0, 5));
+ const defaultMedico = getNombreProfesional(currentUser);
const [medico, setMedico] = useState('');
+ const effectiveMedico = medico || defaultMedico;
+
const [temperatura, setTemperatura] = useState('');
const [presionSistolica, setPresionSistolica] = useState('');
const [presionDiastolica, setPresionDiastolica] = useState('');
@@ -118,7 +125,7 @@ export function Evoluciones({
? internaciones.find(i => i.id === evolucionEditando.internacionId)
: getInternacionActivaByPaciente(pacienteSeleccionado);
- if (!medico.trim()) {
+ if (!effectiveMedico.trim()) {
toast.error('Debe completar el nombre del médico');
return;
}
@@ -156,7 +163,7 @@ export function Evoluciones({
const evolucionData = {
fecha,
hora,
- medico: medico.trim(),
+ medico: effectiveMedico.trim(),
signosVitales,
examenFisico,
novedades: novedades || undefined,
@@ -407,7 +414,7 @@ export function Evoluciones({
setMedico(e.target.value)}
placeholder="Nombre del médico"
/>
@@ -420,7 +427,7 @@ export function Evoluciones({
) : (
diff --git a/src/sections/HistoriaClinica.tsx b/src/sections/HistoriaClinica.tsx
index 2839665..a23e5c1 100644
--- a/src/sections/HistoriaClinica.tsx
+++ b/src/sections/HistoriaClinica.tsx
@@ -2,6 +2,8 @@ import { useState } from 'react';
import { toast } from 'sonner';
import { PDFDocument } from 'pdf-lib';
import { User } from 'lucide-react';
+import { useHospitalStore } from '@/hooks/useHospitalStore';
+import { getNombreProfesional } from '@/lib/utils';
import {
Accordion,
AccordionContent,
@@ -1755,13 +1757,16 @@ function SeccionEvoluciones({ evos, internacionId, add, update, del, canEdit }:
del: (id: string) => void;
canEdit?: boolean;
}) {
+ const { currentUser } = useHospitalStore();
const [dialog, setDialog] = useState(false);
const [edit, setEdit] = useState
(null);
const [evoDetalle, setEvoDetalle] = useState(null);
const [expanded, setExpanded] = useState(null);
const [fecha, setFecha] = useState(new Date().toISOString().split('T')[0]);
const [hora, setHora] = useState(new Date().toTimeString().slice(0, 5));
+ const defaultMedico = getNombreProfesional(currentUser);
const [medico, setMedico] = useState('');
+ const effectiveMedico = medico || defaultMedico;
const [temperatura, setTemperatura] = useState('');
const [presionSistolica, setPresionSistolica] = useState('');
const [presionDiastolica, setPresionDiastolica] = useState('');
@@ -1829,7 +1834,7 @@ function SeccionEvoluciones({ evos, internacionId, add, update, del, canEdit }:
const evosFiltered = evos.filter(e => e.internacionId === internacionId).sort((a, b) => new Date(b.fecha + 'T' + b.hora).getTime() - new Date(a.fecha + 'T' + a.hora).getTime());
const handle = async () => {
- if (!medico.trim()) {
+ if (!effectiveMedico.trim()) {
toast.error('Ingrese el nombre del médico');
return;
}
@@ -1839,7 +1844,7 @@ function SeccionEvoluciones({ evos, internacionId, add, update, del, canEdit }:
const examenFisico = snc || cardiovascular || respiratorio || abdominal || genitourinario || pielAnexos || soma
? { SNC: snc || undefined, Cardiovascular: cardiovascular || undefined, Respiratorio: respiratorio || undefined, Abdominal: abdominal || undefined, Genitourinario: genitourinario || undefined, PielAnexos: pielAnexos || undefined, SOMA: soma || undefined }
: undefined;
- const data = { fecha, hora, medico: medico.trim(), signosVitales, examenFisico, novedades: novedades || undefined, comentario: comentario || undefined, pendientes: pendientes || undefined };
+ const data = { fecha, hora, medico: effectiveMedico.trim(), signosVitales, examenFisico, novedades: novedades || undefined, comentario: comentario || undefined, pendientes: pendientes || undefined };
try {
if (edit) {
@@ -1898,9 +1903,9 @@ function SeccionEvoluciones({ evos, internacionId, add, update, del, canEdit }:
- setMedico(e.target.value)} placeholder="Nombre del médico" />
+ setMedico(e.target.value)} placeholder="Nombre del médico" />
- { reset(); setDialog(false); }}>CancelarGuardar Evolución
+ { reset(); setDialog(false); }}>CancelarGuardar Evolución
{evosFiltered.length === 0 ? (
diff --git a/src/sections/Internaciones.tsx b/src/sections/Internaciones.tsx
index 0d4cb69..9fc615d 100644
--- a/src/sections/Internaciones.tsx
+++ b/src/sections/Internaciones.tsx
@@ -11,7 +11,8 @@ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu';
import { toast } from 'sonner';
import type { Internacion, Paciente, Cama, Area, Evolucion, Laboratorio, Cultivo } from '@/types';
-import { formatDateDDMMYYYY } from '@/lib/utils';
+import { formatDateDDMMYYYY, getNombreProfesional } from '@/lib/utils';
+import { useHospitalStore } from '@/hooks/useHospitalStore';
interface InternacionesProps {
internaciones: Internacion[];
@@ -45,6 +46,7 @@ export function Internaciones({
onVerHC,
onNuevoIngreso,
}: InternacionesProps) {
+ const { currentUser } = useHospitalStore();
const [filtroEstado, setFiltroEstado] = useState<'todas' | 'activas' | 'finalizadas'>('todas');
const [dialogoNuevaAbierto, setDialogoNuevaAbierto] = useState(false);
const [dialogoEgresoAbierto, setDialogoEgresoAbierto] = useState(false);
@@ -58,6 +60,8 @@ export function Internaciones({
const [motivoConsulta, setMotivoConsulta] = useState('');
const [antecedentesEnfermedadActual, setAntecedentesEnfermedadActual] = useState('');
const [medicoIngresante, setMedicoIngresante] = useState('');
+ const defaultMedico = getNombreProfesional(currentUser);
+ const effectiveMedico = medicoIngresante || defaultMedico;
// Formulario nueva internación
const [fechaEgreso, setFechaEgreso] = useState('');
@@ -71,7 +75,7 @@ export function Internaciones({
setDiagnosticoIngreso('');
setEnfermedadActual('');
setAntecedentesEnfermedadActual('');
- setMedicoIngresante('');
+ setMedicoIngresante(getNombreProfesional(currentUser));
};
const resetFormularioEgreso = () => {
@@ -82,7 +86,7 @@ export function Internaciones({
};
const handleIniciarInternacion = async () => {
- if (pacienteSeleccionado && camaSeleccionada && areaSeleccionada && (diagnosticoIngreso || motivoConsulta) && enfermedadActual && medicoIngresante) {
+ if (pacienteSeleccionado && camaSeleccionada && areaSeleccionada && (diagnosticoIngreso || motivoConsulta) && enfermedadActual && effectiveMedico) {
try {
await onIniciarInternacion({
pacienteId: pacienteSeleccionado,
@@ -92,7 +96,7 @@ export function Internaciones({
motivoConsulta,
enfermedadActual,
antecedentesEnfermedadActual: antecedentesEnfermedadActual || undefined,
- medicoIngresante,
+ medicoIngresante: effectiveMedico,
});
toast.success('Internación iniciada correctamente');
resetFormularioNueva();
@@ -344,7 +348,7 @@ export function Internaciones({
) : (
-
-
-
-
- Cama
- Apellido
- Nombre
- Edad
- DNI
- Estado
- Fecha Ingreso
- Duración
- Acciones
-
-
-
- {internacionesFiltradas.map((internacion) => {
- const paciente = getPacienteById(internacion.pacienteId);
- const cama = getCamaById(internacion.camaId);
- const fechaIng = internacion.fechaIngresoClinica
- ? formatDateDDMMYYYY(internacion.fechaIngresoClinica)
- : (internacion.fechaIngreso ? formatDateDDMMYYYY(internacion.fechaIngreso) : '-');
+
+
+
+
+
+ Cama
+ Apellido
+ Nombre
+ Edad
+ DNI
+ Estado
+ Fecha Ingreso
+ Duración
+ Acciones
+
+
+
+ {internacionesFiltradas.map((internacion) => {
+ const paciente = getPacienteById(internacion.pacienteId);
+ const cama = getCamaById(internacion.camaId);
+ const fechaIng = internacion.fechaIngresoClinica
+ ? formatDateDDMMYYYY(internacion.fechaIngresoClinica)
+ : (internacion.fechaIngreso ? formatDateDDMMYYYY(internacion.fechaIngreso) : '-');
- return (
-
-
- {cama ? cama.numero : '-'}
-
-
- {paciente?.apellido || '-'}
-
-
- {paciente?.nombre || '-'}
-
-
- {calcularEdad(paciente?.fechaNacimiento)}
-
-
- {paciente?.dni || '-'}
-
-
- {internacion.activa ? (
-
- Activa
-
- ) : (
-
- Alta
-
- )}
-
-
- {fechaIng}
-
-
- {(() => {
- const dias = calcularDiasDuracion(internacion);
- if (dias === null) return '-';
- const esMenorOIgual10 = dias <= 10;
- return (
-
- {dias} {dias === 1 ? 'día' : 'días'}
+ return (
+
+
+ {cama ? cama.numero : '-'}
+
+
+ {paciente?.apellido || '-'}
+
+
+ {paciente?.nombre || '-'}
+
+
+ {calcularEdad(paciente?.fechaNacimiento)}
+
+
+ {paciente?.dni || '-'}
+
+
+ {internacion.activa ? (
+
+ Activa
- );
- })()}
-
-
-
-
-
-
-
-
-
- { if (typeof onVerHC === 'function') onVerHC(internacion.id); }}>
-
- Ver HC
-
- {internacion.activa && (
- abrirDialogoEgreso(internacion)}>
-
- Registrar Egreso
+ ) : (
+
+ Alta
+
+ )}
+
+
+ {fechaIng}
+
+
+ {(() => {
+ const dias = calcularDiasDuracion(internacion);
+ if (dias === null) return '-';
+ const esMenorOIgual10 = dias <= 10;
+ return (
+
+ {dias} {dias === 1 ? 'día' : 'días'}
+
+ );
+ })()}
+
+
+
+
+
+
+
+
+
+ { if (typeof onVerHC === 'function') onVerHC(internacion.id); }}>
+
+ Ver HC
- )}
-
-
-
-
- );
- })}
-
-
+ {internacion.activa && (
+
abrirDialogoEgreso(internacion)}>
+
+ Registrar Egreso
+
+ )}
+
+
+
+
+ );
+ })}
+
+
+
)}
diff --git a/src/sections/MapaCamas.tsx b/src/sections/MapaCamas.tsx
index a746327..e9f3bc3 100644
--- a/src/sections/MapaCamas.tsx
+++ b/src/sections/MapaCamas.tsx
@@ -3,7 +3,8 @@ import { Bed, CheckCircle2, Clock, Wrench, User, Plus, Trash, Edit2, Save, X } f
import { Card, CardContent } from '@/components/ui/card';
import { Badge } from '@/components/ui/badge';
import { Button } from '@/components/ui/button';
-import { formatDateDDMMYYYY } from '@/lib/utils';
+import { formatDateDDMMYYYY, getNombreProfesional } from '@/lib/utils';
+
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog';
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';
import { Label } from '@/components/ui/label';
@@ -42,7 +43,7 @@ export function MapaCamas({
getPacienteById,
getInternacionById
}: MapaCamasProps) {
- const { canEditCama, canAccessArea } = useHospitalStore();
+ const { canEditCama, canAccessArea, currentUser } = useHospitalStore();
const [filtroSala, setFiltroSala] = useState('todas');
const [filtroTipo, setFiltroTipo] = useState('todos');
const [filtroEstado, setFiltroEstado] = useState('todos');
@@ -53,6 +54,8 @@ export function MapaCamas({
const [enfermedadActual, setEnfermedadActual] = useState('');
const [antecedentesEnfermedadActual, setAntecedentesEnfermedadActual] = useState('');
const [medico, setMedico] = useState('');
+ const defaultMedico = getNombreProfesional(currentUser);
+ const effectiveMedico = medico || defaultMedico;
const [dialogoAbierto, setDialogoAbierto] = useState(false);
// Area dialog state
const [areaDialogOpen, setAreaDialogOpen] = useState(false);
@@ -148,7 +151,7 @@ export function MapaCamas({
});
const handleOcuparCama = () => {
- if (camaSeleccionada && areaSeleccionada && pacienteSeleccionado && diagnostico && enfermedadActual && medico) {
+ if (camaSeleccionada && areaSeleccionada && pacienteSeleccionado && diagnostico && enfermedadActual && effectiveMedico) {
onIniciarInternacion({
pacienteId: pacienteSeleccionado,
camaId: camaSeleccionada.id,
@@ -156,7 +159,7 @@ export function MapaCamas({
diagnosticoIngreso: diagnostico,
enfermedadActual,
antecedentesEnfermedadActual: antecedentesEnfermedadActual || undefined,
- medicoIngresante: medico,
+ medicoIngresante: effectiveMedico,
});
setDialogoAbierto(false);
setCamaSeleccionada(null);
@@ -165,7 +168,7 @@ export function MapaCamas({
setDiagnostico('');
setEnfermedadActual('');
setAntecedentesEnfermedadActual('');
- setMedico('');
+ setMedico(getNombreProfesional(currentUser));
}
};
@@ -414,7 +417,7 @@ export function MapaCamas({
setMedico(e.target.value)}
placeholder="Nombre del médico..."
/>
@@ -422,7 +425,7 @@ export function MapaCamas({
Iniciar Internación
diff --git a/src/sections/NuevoIngreso.tsx b/src/sections/NuevoIngreso.tsx
index 0220e2d..929bdcc 100644
--- a/src/sections/NuevoIngreso.tsx
+++ b/src/sections/NuevoIngreso.tsx
@@ -8,6 +8,8 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@
import { Badge } from '@/components/ui/badge';
import { toast } from 'sonner';
import type { Paciente, Cama, Area, Internacion } from '@/types';
+import { getNombreProfesional } from '@/lib/utils';
+import { useHospitalStore } from '@/hooks/useHospitalStore';
interface NuevoIngresoProps {
pacientes: Paciente[];
@@ -22,12 +24,15 @@ interface NuevoIngresoProps {
}
export function NuevoIngreso({ pacientes, camas, areas, onIniciarInternacion, onAgregarCama, onVolver, getAreaName }: NuevoIngresoProps) {
+ const { currentUser } = useHospitalStore();
const [pacienteSeleccionado, setPacienteSeleccionado] = useState('');
const [busqueda, setBusqueda] = useState('');
const [camaSeleccionada, setCamaSeleccionada] = useState('');
const [camaInput, setCamaInput] = useState('');
const [modoCama, setModoCama] = useState<'seleccionar' | 'escribir'>('seleccionar');
const [medico, setMedico] = useState('');
+ const defaultMedico = getNombreProfesional(currentUser);
+ const effectiveMedico = medico || defaultMedico;
const [fechaIngresoHospital, setFechaIngresoHospital] = useState('');
const [fechaIngresoClinica, setFechaIngresoClinica] = useState('');
const [motivoConsulta, setMotivoConsulta] = useState('');
@@ -131,7 +136,7 @@ export function NuevoIngreso({ pacientes, camas, areas, onIniciarInternacion, on
return;
}
- if (!medico.trim()) {
+ if (!effectiveMedico.trim()) {
toast.error('Debe ingresar el nombre del Médico Ingresante');
return;
}
@@ -176,7 +181,7 @@ export function NuevoIngreso({ pacientes, camas, areas, onIniciarInternacion, on
pacienteId: pacienteSeleccionado,
camaId: camaId,
areaId: newAreaId,
- medicoIngresante: medico.trim(),
+ medicoIngresante: effectiveMedico.trim(),
diagnosticoIngreso: diagnosticoIngreso.trim(),
motivoConsulta: motivoConsulta.trim() || undefined,
enfermedadActual: enfermedadActual.trim(),
@@ -463,7 +468,7 @@ export function NuevoIngreso({ pacientes, camas, areas, onIniciarInternacion, on
setMedico(e.target.value)}
/>
diff --git a/src/sections/SeccionIndicaciones.tsx b/src/sections/SeccionIndicaciones.tsx
index e328bbc..d4d6b65 100644
--- a/src/sections/SeccionIndicaciones.tsx
+++ b/src/sections/SeccionIndicaciones.tsx
@@ -10,6 +10,8 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table';
import { Plus, Pencil, Trash2, X } from 'lucide-react';
import type { Indicacion, IndicacionTipo, ViaAdministracion, TipoPlanHidratacion, TipoInsulina, ATB } from '@/types';
+import { useHospitalStore } from '@/hooks/useHospitalStore';
+import { getNombreProfesional } from '@/lib/utils';
export function SeccionIndicaciones({ recomendaciones, internacionId, pacienteId, add, update, del, movimientos, onAgregarMovimiento, canEdit, atbList = [], addATB, updateATB }: {
recomendaciones: Indicacion[];
@@ -25,12 +27,15 @@ export function SeccionIndicaciones({ recomendaciones, internacionId, pacienteId
addATB?: (a: Omit) => Promise;
updateATB?: (id: string, datos: Partial) => void;
}) {
+ const { currentUser } = useHospitalStore();
const list: Indicacion[] = Array.isArray(recomendaciones) ? recomendaciones : [];
const movs = Array.isArray(movimientos) ? movimientos : [];
const [dialog, setDialog] = useState(false);
const [edit, setEdit] = useState(null);
const [deleteConfirmInd, setDeleteConfirmInd] = useState(null);
- const [deleteMedico, setDeleteMedico] = useState('');
+ const defaultMedico = getNombreProfesional(currentUser);
+ const [deleteMedico, setDeleteMedico] = useState('');
+ const effectiveDeleteMedico = deleteMedico || defaultMedico;
const formatIndicacion = (i: Indicacion): string => {
if (i.tipo === 'Farmacologica' || i.tipo === 'Farmacologica Profilactica' || i.tipo === 'Farmacologica Antibiótico') return `${i.droga || ''} ${i.dosis || ''} ${i.frecuenciaHoras ? `c/${i.frecuenciaHoras}hs` : ''} ${i.via || ''}`.trim();
@@ -80,6 +85,7 @@ export function SeccionIndicaciones({ recomendaciones, internacionId, pacienteId
const [unidadesAlmuerzo, setUnidadesAlmuerzo] = useState('');
const [unidadesNoche, setUnidadesNoche] = useState('');
const [medico, setMedico] = useState('');
+ const effectiveMedico = medico || defaultMedico;
const [showHistorial, setShowHistorial] = useState(false);
const vias: ViaAdministracion[] = ['Via Oral', 'EV', 'IM', 'SC', 'Por GGT', 'Por SNG'];
@@ -104,7 +110,7 @@ export function SeccionIndicaciones({ recomendaciones, internacionId, pacienteId
setUnidadesDesayuno('');
setUnidadesAlmuerzo('');
setUnidadesNoche('');
- setMedico('');
+ setMedico(getNombreProfesional(currentUser));
};
const loadEdit = (i: Indicacion) => {
@@ -129,7 +135,7 @@ export function SeccionIndicaciones({ recomendaciones, internacionId, pacienteId
};
const handleGuardar = async () => {
- if (!medico.trim()) return;
+ if (!effectiveMedico.trim()) return;
if ((tipo === 'Farmacologica' || tipo === 'Farmacologica Profilactica' || tipo === 'Farmacologica Antibiótico') && (!droga.trim() || !dosis.trim())) return;
if (tipo === 'Farmacologica Insulina' && (!unidadesDesayuno && !unidadesAlmuerzo && !unidadesNoche)) return;
if (tipo === 'No Farmacologica' && !indicacionNoFco.trim()) return;
@@ -140,7 +146,7 @@ export function SeccionIndicaciones({ recomendaciones, internacionId, pacienteId
internacionId,
tipo,
estado: 'Activa',
- medicoCrea: medico,
+ medicoCrea: effectiveMedico,
fechaCrea: new Date().toISOString().split('T')[0],
};
@@ -177,7 +183,7 @@ export function SeccionIndicaciones({ recomendaciones, internacionId, pacienteId
internacionId,
tipo: 'Modificacion',
fecha,
- profesional: medico,
+ profesional: effectiveMedico,
indicacionPrevia: formatIndicacion(edit),
indicacionNueva: formatIndicacion({ ...edit, ...data } as Indicacion),
});
@@ -203,7 +209,7 @@ export function SeccionIndicaciones({ recomendaciones, internacionId, pacienteId
internacionId,
tipo: 'Nueva',
fecha,
- profesional: medico,
+ profesional: effectiveMedico,
indicacionNueva: formatIndicacion({ ...data, id: newId } as Indicacion),
});
}
@@ -283,7 +289,7 @@ export function SeccionIndicaciones({ recomendaciones, internacionId, pacienteId
- setMedico(e.target.value)} placeholder="Nombre del médico" />
+ setMedico(e.target.value)} placeholder="Nombre del médico" />
{(tipo === 'Farmacologica' || tipo === 'Farmacologica Antibiótico') && (
@@ -356,7 +362,7 @@ export function SeccionIndicaciones({ recomendaciones, internacionId, pacienteId
setDialog(false)}>Cancelar
- Guardar
+ Guardar
@@ -405,7 +411,7 @@ export function SeccionIndicaciones({ recomendaciones, internacionId, pacienteId
}
{canEdit && {
setDeleteConfirmInd(ind);
- setDeleteMedico(ind.medicoCrea || '');
+ setDeleteMedico(getNombreProfesional(currentUser));
}}>
}
@@ -437,7 +443,7 @@ export function SeccionIndicaciones({ recomendaciones, internacionId, pacienteId
setDeleteMedico(e.target.value)}
placeholder="Nombre del profesional..."
/>
@@ -450,7 +456,7 @@ export function SeccionIndicaciones({ recomendaciones, internacionId, pacienteId
{
- const med = deleteMedico.trim() || deleteConfirmInd.medicoCrea || 'Médico';
+ const med = effectiveDeleteMedico.trim() || deleteConfirmInd.medicoCrea || 'Médico';
const indToDel = deleteConfirmInd;
setDeleteConfirmInd(null);
await handleSuspender(indToDel, med);