import { useState } from 'react'; import { FileText, Plus, Search, Calendar, Clock, Thermometer, Heart, Activity, Wind, Droplets, Pencil, Trash2, ChevronDown, ChevronUp } from 'lucide-react'; import { Card, CardContent } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import type { Evolucion, Internacion, Paciente, SignosVitales, ExamenFisico } from '@/types'; interface EvolucionesProps { evoluciones: Evolucion[]; internaciones: Internacion[]; pacientes: Paciente[]; onAgregarEvolucion: (evolucion: Omit) => void; onActualizarEvolucion?: (id: string, datos: Partial) => void; onEliminarEvolucion: (id: string) => void; getPacienteById: (id: string) => Paciente | undefined; getInternacionActivaByPaciente: (pacienteId: string) => Internacion | undefined; } export function Evoluciones({ evoluciones, internaciones, pacientes, onAgregarEvolucion, onActualizarEvolucion, onEliminarEvolucion, getPacienteById, getInternacionActivaByPaciente }: EvolucionesProps) { const [busqueda, setBusqueda] = useState(''); const [pacienteSeleccionado, setPacienteSeleccionado] = useState(''); const [dialogoAbierto, setDialogoAbierto] = useState(false); const [evolucionExpandida, setEvolucionExpandida] = useState(null); const [evolucionEditando, setEvolucionEditando] = useState(null); const [fecha, setFecha] = useState(new Date().toISOString().split('T')[0]); const [hora, setHora] = useState(new Date().toTimeString().slice(0, 5)); const [medico, setMedico] = useState(''); const [temperatura, setTemperatura] = useState(''); const [presionSistolica, setPresionSistolica] = useState(''); const [presionDiastolica, setPresionDiastolica] = useState(''); const [frecuenciaCardiaca, setFrecuenciaCardiaca] = useState(''); const [frecuenciaRespiratoria, setFrecuenciaRespiratoria] = useState(''); const [saturacionO2, setSaturacionO2] = useState(''); const [snc, setSnc] = useState(''); const [cardiovascular, setCardiovascular] = useState(''); const [respiratorio, setRespiratorio] = useState(''); const [abdominal, setAbdominal] = useState(''); const [genitourinario, setGenitourinario] = useState(''); const [pielAnexos, setPielAnexos] = useState(''); const [soma, setSoma] = useState(''); const [novedades, setNovedades] = useState(''); const [comentario, setComentario] = useState(''); const [pendientes, setPendientes] = useState(''); const resetFormulario = () => { setFecha(new Date().toISOString().split('T')[0]); setHora(new Date().toTimeString().slice(0, 5)); setMedico(''); setTemperatura(''); setPresionSistolica(''); setPresionDiastolica(''); setFrecuenciaCardiaca(''); setFrecuenciaRespiratoria(''); setSaturacionO2(''); setSnc(''); setCardiovascular(''); setRespiratorio(''); setAbdominal(''); setGenitourinario(''); setPielAnexos(''); setSoma(''); setNovedades(''); setComentario(''); setPendientes(''); setEvolucionEditando(null); }; const abrirEditar = (evo: Evolucion) => { setEvolucionEditando(evo); setFecha(evo.fecha); setHora(evo.hora); setMedico(evo.medico); setTemperatura(evo.signosVitales?.temperatura?.toString() || ''); setPresionSistolica(evo.signosVitales?.presionSistolica?.toString() || ''); setPresionDiastolica(evo.signosVitales?.presionDiastolica?.toString() || ''); setFrecuenciaCardiaca(evo.signosVitales?.frecuenciaCardiaca?.toString() || ''); setFrecuenciaRespiratoria(evo.signosVitales?.frecuenciaRespiratoria?.toString() || ''); setSaturacionO2(evo.signosVitales?.saturacionO2?.toString() || ''); setSnc(evo.examenFisico?.SNC || ''); setCardiovascular(evo.examenFisico?.Cardiovascular || ''); setRespiratorio(evo.examenFisico?.Respiratorio || ''); setAbdominal(evo.examenFisico?.Abdominal || ''); setGenitourinario(evo.examenFisico?.Genitourinario || ''); setPielAnexos(evo.examenFisico?.PielAnexos || ''); setSoma(evo.examenFisico?.SOMA || ''); setNovedades(evo.novedades || ''); setComentario(evo.comentario || ''); setPendientes(evo.pendientes || ''); setDialogoAbierto(true); }; const handleGuardar = () => { const internacion = getInternacionActivaByPaciente(pacienteSeleccionado); if (!internacion || !medico) return; const signosVitales: SignosVitales | undefined = temperatura || presionSistolica || frecuenciaCardiaca ? { temperatura: temperatura ? parseFloat(temperatura) : undefined, presionSistolica: presionSistolica ? parseInt(presionSistolica) : undefined, presionDiastolica: presionDiastolica ? parseInt(presionDiastolica) : undefined, frecuenciaCardiaca: frecuenciaCardiaca ? parseInt(frecuenciaCardiaca) : undefined, frecuenciaRespiratoria: frecuenciaRespiratoria ? parseInt(frecuenciaRespiratoria) : undefined, saturacionO2: saturacionO2 ? parseInt(saturacionO2) : undefined, } : undefined; const examenFisico: ExamenFisico | undefined = 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 evolucionData = { fecha, hora, medico, signosVitales, examenFisico, novedades: novedades || undefined, comentario: comentario || undefined, pendientes: pendientes || undefined, }; if (evolucionEditando && onActualizarEvolucion) { onActualizarEvolucion(evolucionEditando.id, evolucionData); } else { onAgregarEvolucion({ ...evolucionData, internacionId: internacion.id }); } resetFormulario(); setDialogoAbierto(false); }; const pacientesInternados = pacientes.filter(p => { const internacion = getInternacionActivaByPaciente(p.id); return internacion !== undefined; }); const evolucionesFiltradas = evoluciones .filter(e => { const internacion = internaciones.find(i => i.id === e.internacionId); if (!internacion) return false; const paciente = getPacienteById(internacion.pacienteId); if (!paciente) return false; return !busqueda || paciente.nombre.toLowerCase().includes(busqueda.toLowerCase()) || paciente.apellido.toLowerCase().includes(busqueda.toLowerCase()) || paciente.dni.includes(busqueda); }) .sort((a, b) => new Date(b.fecha + 'T' + b.hora).getTime() - new Date(a.fecha + 'T' + a.hora).getTime()); const getSignosVitalesTexto = (sv: SignosVitales | undefined) => { if (!sv) return null; const partes: string[] = []; if (sv.presionSistolica && sv.presionDiastolica) partes.push(`PA: ${sv.presionSistolica}/${sv.presionDiastolica}`); if (sv.frecuenciaCardiaca) partes.push(`FC: ${sv.frecuenciaCardiaca}`); if (sv.frecuenciaRespiratoria) partes.push(`FR: ${sv.frecuenciaRespiratoria}`); if (sv.temperatura) partes.push(`T: ${sv.temperatura}°C`); if (sv.saturacionO2) partes.push(`SatO2: ${sv.saturacionO2}%`); return partes.join(' | '); }; return (

Evoluciones Diarias

Registro de evoluciones y signos vitales

{evolucionEditando ? 'Editar Evolución' : 'Nueva Evolución'}
{!evolucionEditando && (
)}
setFecha(e.target.value)} />
setHora(e.target.value)} />

Signos Vitales

setPresionSistolica(e.target.value)} placeholder="120" />
setPresionDiastolica(e.target.value)} placeholder="80" />
setFrecuenciaCardiaca(e.target.value)} placeholder="72" />
setFrecuenciaRespiratoria(e.target.value)} placeholder="16" />
setTemperatura(e.target.value)} placeholder="36.5" />
setSaturacionO2(e.target.value)} placeholder="98" />

Examen Físico