import { useState } from 'react'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Card, CardContent } from '@/components/ui/card'; import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; 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 } from '@/types'; export function SeccionIndicaciones({ recomendaciones, internacionId, add, update, del }: { recomendaciones: Indicacion[]; internacionId: string; add: (i: Omit) => void; update: (id: string, datos: Partial) => void; del: (id: string) => void; }) { const [dialog, setDialog] = useState(false); const [edit, setEdit] = useState(null); const [tipo, setTipo] = useState('Farmacologica'); const [droga, setDroga] = useState(''); const [dosis, setDosis] = useState(''); const [frecuenciaHoras, setFrecuenciaHoras] = useState(''); const [via, setVia] = useState('EV'); const [descripcion, setDescripcion] = useState(''); const [tipoPlan, setTipoPlan] = useState('SolucionFisiologica09'); const [cantidadMl, setCantidadMl] = useState(''); const [tiempoHoras, setTiempoHoras] = useState(24); const [medico, setMedico] = useState(''); const [showHistorial, setShowHistorial] = useState(false); const vias: ViaAdministracion[] = ['Oral', 'EV', 'IM', 'SC', 'PorGGT', 'PorSNG']; const planes: TipoPlanHidratacion[] = ['SolucionFisiologica09', 'Dextrosa5', 'Dextrosa10', 'Dextrosa25', 'RingerLactato']; const tipos: IndicacionTipo[] = ['Farmacologica', 'NoFarmacologica', 'Hidratacion']; const reset = () => { setEdit(null); setTipo('Farmacologica'); setDroga(''); setDosis(''); setFrecuenciaHoras(''); setVia('EV'); setDescripcion(''); setTipoPlan('SolucionFisiologica09'); setCantidadMl(''); setTiempoHoras(24); setMedico(''); }; const loadEdit = (i: Indicacion) => { setEdit(i); setTipo(i.tipo); setDroga(i.droga || ''); setDosis(i.dosis || ''); setFrecuenciaHoras(i.frecuenciaHoras || ''); setVia(i.via || 'EV'); setDescripcion(i.descripcion || ''); setTipoPlan(i.tipoPlan || 'SolucionFisiologica09'); setCantidadMl(i.cantidadMl || ''); setTiempoHoras(i.tiempoHoras || 24); setMedico(i.medicoCrea); setDialog(true); }; const handleGuardar = () => { if (!medico.trim()) return; if (tipo === 'Farmacologica' && (!droga.trim() || !dosis.trim())) return; if (tipo === 'NoFarmacologica' && !descripcion.trim()) return; if (tipo === 'Hidratacion' && !cantidadMl) return; const data: any = { internacionId, tipo, estado: 'Activa', medicoCrea: medico, fechaCrea: new Date().toISOString().split('T')[0], }; if (tipo === 'Farmacologica') { data.droga = droga; data.dosis = dosis; data.frecuenciaHoras = frecuenciaHoras || undefined; data.via = via; } else if (tipo === 'NoFarmacologica') { data.descripcion = descripcion; } else { data.tipoPlan = tipoPlan; data.cantidadMl = cantidadMl; data.tiempoHoras = tiempoHoras; } if (edit) { update(edit.id, data); } else { add(data); } setDialog(false); reset(); }; const handleSuspender = (i: Indicacion, suspendioMedico: string) => { update(i.id, { estado: 'Suspendida', medicoSuspende: suspendioMedico, fechaSuspension: new Date().toISOString().split('T')[0], }); }; const indsFilter = (recomendaciones || []).filter(ind => ind.internacionId === internacionId); const activas = indsFilter.filter(ind => ind.estado === 'Activa'); const historial = indsFilter.filter(ind => ind.estado === 'Suspendida'); return (
{edit ? 'Editar' : 'Nueva'} Indicación
setMedico(e.target.value)} placeholder="Nombre del médico" />
{tipo === 'Farmacologica' && ( <>
setDroga(e.target.value)} placeholder="Nombre del medicamento" />
setDosis(e.target.value)} placeholder="Ej: 500mg, 1g, 10ml" />
setFrecuenciaHoras(e.target.value ? parseInt(e.target.value) : '')} placeholder="Cada X horas" />
)} {tipo === 'NoFarmacologica' && (