diff --git a/src/sections/SeccionIndicaciones.tsx b/src/sections/SeccionIndicaciones.tsx new file mode 100644 index 0000000..5441284 --- /dev/null +++ b/src/sections/SeccionIndicaciones.tsx @@ -0,0 +1,254 @@ +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' && ( +