diff --git a/src/sections/HistoriaClinica.tsx b/src/sections/HistoriaClinica.tsx index 3dc1205..45dc8e1 100644 --- a/src/sections/HistoriaClinica.tsx +++ b/src/sections/HistoriaClinica.tsx @@ -60,7 +60,7 @@ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@ 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'; -import { formatDateDDMMYYYY, getLocalToday } from '@/lib/utils'; +import { cn, formatDateDDMMYYYY, getLocalToday } from '@/lib/utils'; import { SeccionIndicaciones } from './SeccionIndicaciones'; interface HistoriaClinicaProps { @@ -1031,21 +1031,56 @@ function SeccionLaboratorios({ lab, otrosLaboratorios = [], patientId, internaci const [dialog, setDialog] = useState(false); const [obsDialog, setObsDialog] = useState(false); + const CATEGORIAS_OTROS = [ + "Perfil Lipídico", + "Perfil Tiroideo", + "Autoinmunidad", + "Toracocentesis", + "Líquido Ascitico", + "LCR", + "Otros" + ] as const; + + const getCategoriaBadgeStyle = (cat?: string) => { + switch (cat) { + case 'Perfil Lipídico': + return 'bg-amber-100 text-amber-800 dark:bg-amber-950 dark:text-amber-300 border-amber-200 dark:border-amber-800'; + case 'Perfil Tiroideo': + return 'bg-purple-100 text-purple-800 dark:bg-purple-950 dark:text-purple-300 border-purple-200 dark:border-purple-800'; + case 'Autoinmunidad': + return 'bg-rose-100 text-rose-800 dark:bg-rose-950 dark:text-rose-300 border-rose-200 dark:border-rose-800'; + case 'Toracocentesis': + return 'bg-cyan-100 text-cyan-800 dark:bg-cyan-950 dark:text-cyan-300 border-cyan-200 dark:border-cyan-800'; + case 'Líquido Ascitico': + return 'bg-emerald-100 text-emerald-800 dark:bg-emerald-950 dark:text-emerald-300 border-emerald-200 dark:border-emerald-800'; + case 'LCR': + return 'bg-blue-100 text-blue-800 dark:bg-blue-950 dark:text-blue-300 border-blue-200 dark:border-blue-800'; + case 'Obs. de Lab': + return 'bg-indigo-100 text-indigo-800 dark:bg-indigo-950 dark:text-indigo-300 border-indigo-200 dark:border-indigo-800'; + default: + return 'bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-200 border-gray-200 dark:border-gray-700'; + } + }; + const [otrosDialog, setOtrosDialog] = useState(false); const [nuevaObsFecha, setNuevaObsFecha] = useState(getLocalToday()); const [nuevaObsTexto, setNuevaObsTexto] = useState(''); + const [nuevaObsCategoria, setNuevaObsCategoria] = useState('Otros'); + const [mostrarNuevoFormOtros, setMostrarNuevoFormOtros] = useState(false); const [editOtrosDialog, setEditOtrosDialog] = useState(false); - const [editOtrosItem, setEditOtrosItem] = useState<{ id: string; fecha: string; hora: string; observaciones: string; source: 'lab' | 'otros' } | null>(null); + const [editOtrosItem, setEditOtrosItem] = useState<{ id: string; fecha: string; hora: string; observaciones: string; categoria?: string; source: 'lab' | 'otros' } | null>(null); const [editOtrosFecha, setEditOtrosFecha] = useState(''); const [editOtrosHora, setEditOtrosHora] = useState(''); const [editOtrosTexto, setEditOtrosTexto] = useState(''); + const [editOtrosCategoria, setEditOtrosCategoria] = useState('Otros'); - const handleStartEditOtros = (item: { id: string; fecha: string; hora?: string; observaciones?: string; source: 'lab' | 'otros' }) => { - setEditOtrosItem({ id: item.id, fecha: item.fecha, hora: item.hora || '00:00', observaciones: item.observaciones || '', source: item.source }); + const handleStartEditOtros = (item: { id: string; fecha: string; hora?: string; observaciones?: string; categoria?: string; source: 'lab' | 'otros' }) => { + setEditOtrosItem({ id: item.id, fecha: item.fecha, hora: item.hora || '00:00', observaciones: item.observaciones || '', categoria: item.categoria || 'Otros', source: item.source }); setEditOtrosFecha(item.fecha); setEditOtrosHora(item.hora || '00:00'); setEditOtrosTexto(item.observaciones || ''); + setEditOtrosCategoria(item.categoria || 'Otros'); setEditOtrosDialog(true); }; @@ -1056,7 +1091,8 @@ function SeccionLaboratorios({ lab, otrosLaboratorios = [], patientId, internaci updateOtroLaboratorio(editOtrosItem.id, { fecha: editOtrosFecha, hora: editOtrosHora, - observaciones: editOtrosTexto + observaciones: editOtrosTexto, + categoria: editOtrosCategoria }); toast.success('Registro de Otros Laboratorios actualizado'); } @@ -1776,39 +1812,89 @@ function SeccionLaboratorios({ lab, otrosLaboratorios = [], patientId, internaci
{canEdit && ( -
-

Agregar Nuevo Registro (Otros)

-
-
- - setNuevaObsFecha(e.target.value)} /> +
+ + ¿Desea agregar una nueva observación? + + +
+ )} + + {canEdit && mostrarNuevoFormOtros && ( +
+
+

Agregar Nuevo Registro

+ +
+ +
+
+ +
-
- -