From 0139cf1caf2312faa204fdb4e63fcf75602167a3 Mon Sep 17 00:00:00 2001 From: AI Studio Date: Wed, 12 Aug 2026 22:32:13 +0000 Subject: [PATCH] feat(HistoriaClinica): agregar opciones para editar y eliminar registros de Otros Laboratorios --- src/sections/HistoriaClinica.tsx | 112 ++++++++++++++++++++++++++++++- 1 file changed, 109 insertions(+), 3 deletions(-) diff --git a/src/sections/HistoriaClinica.tsx b/src/sections/HistoriaClinica.tsx index 5f3f9e3..00bde09 100644 --- a/src/sections/HistoriaClinica.tsx +++ b/src/sections/HistoriaClinica.tsx @@ -251,7 +251,7 @@ export function HistoriaClinica({ }: HistoriaClinicaProps) { const [tabActivo, setTabActivo] = useState('evoluciones'); const [portalNode, setPortalNode] = useState(null); - const { pendientes, otrosLaboratorios, agregarOtroLaboratorio } = useHospitalStore(); + const { pendientes, otrosLaboratorios, agregarOtroLaboratorio, actualizarOtroLaboratorio, eliminarOtroLaboratorio } = useHospitalStore(); const indicacionesActivas = (indicadores || []).filter(i => i.estado === 'Activa'); const pendientesActivos = (pendientes || []).filter(p => p.pacienteId === paciente.id && p.estado === 'pendiente'); @@ -579,6 +579,8 @@ export function HistoriaClinica({ del={onEliminarLaboratorio} addAcidoBase={onAgregarAcidoBase} addOtroLaboratorio={agregarOtroLaboratorio} + updateOtroLaboratorio={actualizarOtroLaboratorio} + delOtroLaboratorio={eliminarOtroLaboratorio} canEdit={canEdit} /> @@ -937,7 +939,7 @@ function SeccionGlucemias({ glucemias, patientId, internacionId, add, update, de ); } -function SeccionLaboratorios({ lab, otrosLaboratorios = [], patientId, internacionId, add, update, del, addAcidoBase, addOtroLaboratorio, canEdit, portalNode}: { +function SeccionLaboratorios({ lab, otrosLaboratorios = [], patientId, internacionId, add, update, del, addAcidoBase, addOtroLaboratorio, updateOtroLaboratorio, delOtroLaboratorio, canEdit, portalNode}: { lab: Laboratorio[]; otrosLaboratorios?: OtroLaboratorio[]; patientId: string; @@ -947,6 +949,8 @@ function SeccionLaboratorios({ lab, otrosLaboratorios = [], patientId, internaci del: (id: string) => void; addAcidoBase?: (a: Omit) => void; addOtroLaboratorio?: (o: Omit) => void; + updateOtroLaboratorio?: (id: string, data: Partial) => void; + delOtroLaboratorio?: (id: string) => void; canEdit?: boolean; portalNode?: HTMLDivElement | null; }) { @@ -957,6 +961,61 @@ function SeccionLaboratorios({ lab, otrosLaboratorios = [], patientId, internaci const [nuevaObsFecha, setNuevaObsFecha] = useState(getLocalToday()); const [nuevaObsTexto, setNuevaObsTexto] = useState(''); + const [editOtrosDialog, setEditOtrosDialog] = useState(false); + const [editOtrosItem, setEditOtrosItem] = useState<{ id: string; fecha: string; hora: string; observaciones: string; source: 'lab' | 'otros' } | null>(null); + const [editOtrosFecha, setEditOtrosFecha] = useState(''); + const [editOtrosHora, setEditOtrosHora] = useState(''); + const [editOtrosTexto, setEditOtrosTexto] = useState(''); + + 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 }); + setEditOtrosFecha(item.fecha); + setEditOtrosHora(item.hora || '00:00'); + setEditOtrosTexto(item.observaciones || ''); + setEditOtrosDialog(true); + }; + + const handleSaveEditOtros = () => { + if (!editOtrosItem || !editOtrosTexto.trim()) return; + if (editOtrosItem.source === 'otros') { + if (updateOtroLaboratorio) { + updateOtroLaboratorio(editOtrosItem.id, { + fecha: editOtrosFecha, + hora: editOtrosHora, + observaciones: editOtrosTexto + }); + toast.success('Registro de Otros Laboratorios actualizado'); + } + } else if (editOtrosItem.source === 'lab') { + if (update) { + update(editOtrosItem.id, { + fecha: editOtrosFecha, + hora: editOtrosHora, + observaciones: editOtrosTexto + }); + toast.success('Observación de laboratorio actualizada'); + } + } + setEditOtrosDialog(false); + setEditOtrosItem(null); + }; + + const handleDeleteOtros = (item: { id: string; source: 'lab' | 'otros' }) => { + if (window.confirm('¿Está seguro de que desea eliminar este registro?')) { + if (item.source === 'otros') { + if (delOtroLaboratorio) { + delOtroLaboratorio(item.id); + toast.success('Registro eliminado'); + } + } else if (item.source === 'lab') { + if (update) { + update(item.id, { observaciones: '' }); + toast.success('Observación de laboratorio eliminada'); + } + } + } + }; + const [evolDialog, setEvolDialog] = useState(false); const [edit, setEdit] = useState(null); const [obsLab, setObsLab] = useState(null); @@ -1695,7 +1754,19 @@ function SeccionLaboratorios({ lab, otrosLaboratorios = [], patientId, internaci
{formatDateDDMMYYYY(item.fecha)} {item.hora || ''} - {item.source === 'lab' ? 'Obs. de Lab' : 'Otros'} +
+ {item.source === 'lab' ? 'Obs. de Lab' : 'Otros'} + {canEdit && ( +
+ + +
+ )} +

{item.observaciones}

@@ -1714,6 +1785,41 @@ function SeccionLaboratorios({ lab, otrosLaboratorios = [], patientId, internaci + + + + Editar Registro de Otros Laboratorios + +
+
+
+ + setEditOtrosFecha(e.target.value)} /> +
+
+ + setEditOtrosHora(e.target.value)} /> +
+
+
+ +