+ )}
{(cultivo.sensible || cultivo.resistente) && (
-
+
{cultivo.sensible && (
-
Sensible: {cultivo.sensible}
+
Sensible: {cultivo.sensible}
)}
{cultivo.resistente && (
-
Resistente: {cultivo.resistente}
+
Resistente: {cultivo.resistente}
)}
)}
+ {cultivo.observaciones && (
+
+ Observaciones: {cultivo.observaciones}
+
+ )}
)}
- {cultivo.estado === 'Positivo' && cultivo.germen && (
-
+ {cultivo.estado === 'Positivo' && (
+
-
-
- Germen: {cultivo.germen} {cultivo.fechaResultado ? `(Definitivo: ${cultivo.fechaResultado})` : ''}
-
+ {cultivo.germen && (
+
+
+ Germen: {cultivo.germen} {cultivo.fechaResultado ? `(Definitivo: ${cultivo.fechaResultado})` : ''}
+
+ )}
{cultivo.sensible && (
)}
+
+ {cultivo.observaciones && (
+
+ Observaciones: {cultivo.observaciones}
+
+ )}
)}
{cultivo.estado === 'Negativo' && (
-
-
+
+
Cultivo Negativo
+ {cultivo.observaciones && (
+
+ Observaciones: {cultivo.observaciones}
+
+ )}
)}
diff --git a/src/sections/HistoriaClinica.tsx b/src/sections/HistoriaClinica.tsx
index fba2651..3dc1205 100644
--- a/src/sections/HistoriaClinica.tsx
+++ b/src/sections/HistoriaClinica.tsx
@@ -1,4 +1,4 @@
-import { useState } from 'react';
+import { useState, useEffect } from 'react';
import { createPortal } from 'react-dom';
import { toast } from 'sonner';
import { User } from 'lucide-react';
@@ -55,9 +55,8 @@ import { Label } from '@/components/ui/label';
import { Textarea } from '@/components/ui/textarea';
import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog';
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, SelectGroup, SelectLabel } from '@/components/ui/select';
-import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
+import { Tabs, TabsContent } from '@/components/ui/tabs';
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table';
-import { ScrollArea, ScrollBar } from "@/components/ui/scroll-area"
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu';
import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from 'recharts';
import type { Laboratorio, Glucemia, AcidoBase, Cultivo, Paciente, ResultadoLaboratorio, Internacion, Evolucion, Cama, EstudioComplementario, Interconsulta, ATB, Indicacion, MovimientoIndicacion, Pendiente, OtroLaboratorio } from '@/types';
@@ -203,6 +202,69 @@ function wrapText(text: string, font: { widthOfTextAtSize: (text: string, size:
+function SeccionNotasPaciente({ paciente, canEdit }: { paciente: Paciente; canEdit?: boolean }) {
+ const { actualizarPaciente } = useHospitalStore();
+ const [textoNotas, setTextoNotas] = useState(paciente.notas || '');
+ const [isSaving, setIsSaving] = useState(false);
+ const [guardado, setGuardado] = useState(true);
+
+ useEffect(() => {
+ setTextoNotas(paciente.notas || '');
+ setGuardado(true);
+ }, [paciente.id, paciente.notas]);
+
+ const handleChange = (e: React.ChangeEvent
) => {
+ setTextoNotas(e.target.value);
+ setGuardado(false);
+ };
+
+ const handleGuardar = async () => {
+ try {
+ setIsSaving(true);
+ await actualizarPaciente(paciente.id, { notas: textoNotas });
+ toast.success('Notas del paciente guardadas correctamente');
+ setGuardado(true);
+ } catch (err) {
+ console.error('Error al guardar notas:', err);
+ toast.error('Error al guardar las notas del paciente');
+ } finally {
+ setIsSaving(false);
+ }
+ };
+
+ return (
+
+
+
+
+ {!guardado && (
+
+ Cambios sin guardar
+
+ )}
+
+ {canEdit && (
+
+ )}
+
+
+ );
+}
+
export function HistoriaClinica({
internacion,
paciente,
@@ -389,11 +451,11 @@ export function HistoriaClinica({
>
)}
-
+
Detalle Episodio Actual
-
-
+
+
@@ -527,6 +589,13 @@ export function HistoriaClinica({
+
+
+ Notas
+
+
+
+
@@ -1315,7 +1384,7 @@ function SeccionLaboratorios({ lab, otrosLaboratorios = [], patientId, internaci
}
// Clean parenthesized reference values/ranges if present (e.g. "(1.6 - 2.6 mg/dL)")
- let cleanSubLinea = subLinea.replace(/\([^)]*?(?:-|–|—|:|[0-9]\s*[-–—]\s*[0-9]|ref|vr|val|norm|min|max)[^)]*?\)/gi, ' ');
+ const cleanSubLinea = subLinea.replace(/\([^)]*?(?:-|–|—|:|[0-9]\s*[-–—]\s*[0-9]|ref|vr|val|norm|min|max)[^)]*?\)/gi, ' ');
let match = cleanSubLinea.match(/(\d+(?:[.,]\d+)?)/);
if (!match) {
@@ -1763,10 +1832,10 @@ function SeccionLaboratorios({ lab, otrosLaboratorios = [], patientId, internaci
{item.source === 'lab' ? 'Obs. de Lab' : 'Otros'}
{canEdit && (
-
@@ -2672,12 +2741,14 @@ function SeccionCultivos({ cults, patient, internacionId, add, update, del, canE
setGermen('');
setSensible('');
setResistente('');
+ setObservaciones('');
setSelected(null);
};
const openParcial = (c: Cultivo) => {
setSelected(c);
setProtocolo(c.protocolo || '');
+ setObservaciones(c.observaciones || '');
setGermen(c.germen || '');
setSensible(c.sensible || '');
setResistente(c.resistente || '');
@@ -2687,6 +2758,7 @@ function SeccionCultivos({ cults, patient, internacionId, add, update, del, canE
const openDefinitivo = (c: Cultivo) => {
setSelected(c);
setProtocolo(c.protocolo || '');
+ setObservaciones(c.observaciones || '');
setFechaResultado(c.fechaResultado || getLocalToday());
setEstadoResultado(c.estado === 'Parcial' ? 'Positivo' : c.estado);
setGermen(c.germen || '');
@@ -2725,6 +2797,7 @@ function SeccionCultivos({ cults, patient, internacionId, add, update, del, canE
germen,
sensible,
resistente,
+ observaciones: observaciones || undefined,
fechaResultado: selected.fechaResultado || getLocalToday()
});
setResDialog(false);
@@ -2733,7 +2806,15 @@ function SeccionCultivos({ cults, patient, internacionId, add, update, del, canE
const handleDefinitivo = () => {
if (!selected) return;
- update(selected.id, { protocolo, fechaResultado, estado: estadoResultado, germen, sensible, resistente });
+ update(selected.id, {
+ protocolo,
+ fechaResultado,
+ estado: estadoResultado,
+ germen,
+ sensible,
+ resistente,
+ observaciones: observaciones || undefined
+ });
setEditDialog(false);
resetRes();
};
@@ -2801,6 +2882,7 @@ function SeccionCultivos({ cults, patient, internacionId, add, update, del, canE
setGermen(e.target.value)} placeholder="Ej: Staphylococcos aureus" />
setSensible(e.target.value)} placeholder="Ej: Amikacina, Vancomicina" />
setResistente(e.target.value)} placeholder="Ej: Oxacilina" />
+
{ resetRes(); setResDialog(false); }}>CancelarGuardar Parcial
@@ -2830,6 +2912,7 @@ function SeccionCultivos({ cults, patient, internacionId, add, update, del, canE
setResistente(e.target.value)} placeholder="Ej: Ampicilina, Cefazolina" />
>
)}
+
@@ -2877,29 +2960,44 @@ function SeccionCultivos({ cults, patient, internacionId, add, update, del, canE
{c.estado === 'Parcial' ? 'Fecha Resultado Parcial' : 'Fecha Definitivo'}: {formatDateDDMMYYYY(c.fechaResultado)}
)}
- {c.observaciones &&
}
- {c.estado === 'Parcial' && c.germen && (
-
-
PARCIAL - Germen: {c.germen}
+ {c.estado === 'NAF/Pendiente' && c.observaciones && (
+
+ Observaciones: {c.observaciones}
+
+ )}
+ {c.estado === 'Parcial' && (
+
+ {c.germen && (
+
+ PARCIAL - Germen: {c.germen}
+
+ )}
{(c.sensible || c.resistente) && (
-
+
{c.sensible &&
Sensible: {c.sensible}
}
{c.resistente &&
Resistente: {c.resistente}
}
)}
+ {c.observaciones && (
+
+ Observaciones: {c.observaciones}
+
+ )}
)}
- {c.estado === 'Positivo' && c.germen && (
+ {c.estado === 'Positivo' && (
-
-
-
- Germen: {c.germen}
-
-
+ {c.germen && (
+
+
+
+ Germen: {c.germen}
+
+
+ )}
{(c.sensible || c.resistente) && (
@@ -2922,11 +3020,22 @@ function SeccionCultivos({ cults, patient, internacionId, add, update, del, canE
)}
)}
+
+ {c.observaciones && (
+
+ Observaciones: {c.observaciones}
+
+ )}
)}
{c.estado === 'Negativo' && (
-
-
Sin crecimiento de microorganismos
+
+
Sin crecimiento de microorganismos
+ {c.observaciones && (
+
+ Observaciones: {c.observaciones}
+
+ )}
)}
diff --git a/src/types/index.ts b/src/types/index.ts
index 78b69e4..80b903a 100644
--- a/src/types/index.ts
+++ b/src/types/index.ts
@@ -18,6 +18,7 @@ export interface Paciente {
nacionalidad?: string;
medicacionHabitual?: string;
historiaClinica?: string;
+ notas?: string;
}