Add Farmacologica Insulina type with NPH/Glargina and schedule options

This commit is contained in:
2026-04-21 16:51:32 -03:00
parent 9b38794043
commit b8ac55abb0
3 changed files with 70 additions and 8 deletions
+23 -3
View File
@@ -250,14 +250,34 @@ try {
} catch (e) {
// column may already exist
}
try {
db.exec("ALTER TABLE indicaciones ADD COLUMN fechaModificacion TEXT");
try {
db.exec("ALTER TABLE recomendaciones ADD COLUMN fechaModificacion TEXT");
} catch (e) {
// column may already exist
}
try {
db.exec("ALTER TABLE recomendaciones ADD COLUMN tipoInsulina TEXT");
} catch (e) {
// column may already exist
}
try {
db.exec("ALTER TABLE recomendaciones ADD COLUMN unidadesDesayuno INTEGER");
} catch (e) {
// column may already exist
}
try {
db.exec("ALTER TABLE recomendaciones ADD COLUMN unidadesAlmuerzo INTEGER");
} catch (e) {
// column may already exist
}
try {
db.exec("ALTER TABLE recomendaciones ADD COLUMN unidadesNoche INTEGER");
} catch (e) {
// column may already exist
}
}
} catch (e) {
console.log('Error tabla indicaciones:', e.message);
console.log('Error tabla recomendaciones:', e.message);
}
const app = express();
+40 -3
View File
@@ -8,7 +8,7 @@ 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';
import type { Indicacion, IndicacionTipo, ViaAdministracion, TipoPlanHidratacion, TipoInsulina } from '@/types';
export function SeccionIndicaciones({ recomendaciones, internacionId, add, update, del }: {
recomendaciones: Indicacion[];
@@ -31,12 +31,17 @@ export function SeccionIndicaciones({ recomendaciones, internacionId, add, updat
const [cantidadMl, setCantidadMl] = useState<number | ''>('');
const [cantidadMl2, setCantidadMl2] = useState<number | ''>('');
const [tiempoHoras, setTiempoHoras] = useState<number | ''>(24);
const [tipoInsulina, setTipoInsulina] = useState<TipoInsulina>('NPH');
const [unidadesDesayuno, setUnidadesDesayuno] = useState<number | ''>('');
const [unidadesAlmuerzo, setUnidadesAlmuerzo] = useState<number | ''>('');
const [unidadesNoche, setUnidadesNoche] = useState<number | ''>('');
const [medico, setMedico] = useState('');
const [showHistorial, setShowHistorial] = useState(false);
const vias: ViaAdministracion[] = ['Oral', 'EV', 'IM', 'SC', 'Por GGT', 'Por SNG'];
const planes: TipoPlanHidratacion[] = ['SF 0.9%', 'Dextrosa 5%', 'Dextrosa 10%', 'Dextrosa 25%', 'Ringer Lactato'];
const tipos: IndicacionTipo[] = ['Farmacologica', 'No Farmacologica', 'PHP', 'Paralelo', 'Alterno'];
const tiposInsulina: TipoInsulina[] = ['NPH', 'Glargina'];
const tipos: IndicacionTipo[] = ['Farmacologica', 'Farmacologica Insulina', 'No Farmacologica', 'PHP', 'Paralelo', 'Alterno'];
const reset = () => {
setEdit(null);
@@ -51,6 +56,10 @@ export function SeccionIndicaciones({ recomendaciones, internacionId, add, updat
setCantidadMl('');
setCantidadMl2('');
setTiempoHoras(24);
setTipoInsulina('NPH');
setUnidadesDesayuno('');
setUnidadesAlmuerzo('');
setUnidadesNoche('');
setMedico('');
};
@@ -67,6 +76,10 @@ export function SeccionIndicaciones({ recomendaciones, internacionId, add, updat
setCantidadMl(i.cantidadMl || '');
setCantidadMl2(i.cantidadMl2 || '');
setTiempoHoras(i.tiempoHoras || 24);
setTipoInsulina(i.tipoInsulina || 'NPH');
setUnidadesDesayuno(i.unidadesDesayuno || '');
setUnidadesAlmuerzo(i.unidadesAlmuerzo || '');
setUnidadesNoche(i.unidadesNoche || '');
setMedico(i.medicoCrea);
setDialog(true);
};
@@ -74,6 +87,7 @@ export function SeccionIndicaciones({ recomendaciones, internacionId, add, updat
const handleGuardar = () => {
if (!medico.trim()) return;
if (tipo === 'Farmacologica' && (!droga.trim() || !dosis.trim())) return;
if (tipo === 'Farmacologica Insulina' && (!unidadesDesayuno && !unidadesAlmuerzo && !unidadesNoche)) return;
if (tipo === 'No Farmacologica' && !descripcion.trim()) return;
if ((tipo === 'PHP' || tipo === 'Paralelo') && !cantidadMl) return;
if (tipo === 'Alterno' && (!cantidadMl || !cantidadMl2)) return;
@@ -91,6 +105,11 @@ export function SeccionIndicaciones({ recomendaciones, internacionId, add, updat
data.dosis = dosis;
data.frecuenciaHoras = frecuenciaHoras || undefined;
data.via = via;
} else if (tipo === 'Farmacologica Insulina') {
data.tipoInsulina = tipoInsulina;
data.unidadesDesayuno = unidadesDesayuno || undefined;
data.unidadesAlmuerzo = unidadesAlmuerzo || undefined;
data.unidadesNoche = unidadesNoche || undefined;
} else if (tipo === 'No Farmacologica') {
data.descripcion = descripcion;
} else if (tipo === 'PHP' || tipo === 'Paralelo') {
@@ -176,6 +195,17 @@ export function SeccionIndicaciones({ recomendaciones, internacionId, add, updat
</>
)}
{tipo === 'Farmacologica Insulina' && (
<>
<div><Label>Tipo de Insulina</Label><Select value={tipoInsulina} onValueChange={(v: TipoInsulina) => setTipoInsulina(v)}><SelectTrigger><SelectValue /></SelectTrigger><SelectContent>{tiposInsulina.map(t => <SelectItem key={t} value={t}>{t}</SelectItem>)}</SelectContent></Select></div>
<div className="grid grid-cols-3 gap-2">
<div><Label>Pre Desayuno (U)</Label><Input type="number" value={unidadesDesayuno} onChange={e => setUnidadesDesayuno(e.target.value ? parseInt(e.target.value) : '')} placeholder="U" /></div>
<div><Label>Pre Almuerzo (U)</Label><Input type="number" value={unidadesAlmuerzo} onChange={e => setUnidadesAlmuerzo(e.target.value ? parseInt(e.target.value) : '')} placeholder="U" /></div>
<div><Label>23hs (U)</Label><Input type="number" value={unidadesNoche} onChange={e => setUnidadesNoche(e.target.value ? parseInt(e.target.value) : '')} placeholder="U" /></div>
</div>
</>
)}
{tipo === 'No Farmacologica' && (
<div><Label>Descripción *</Label><textarea className="w-full p-2 border rounded-md text-sm min-h-[80px] bg-transparent dark:bg-input/30" value={descripcion} onChange={e => setDescripcion(e.target.value)} placeholder="Ej: Control de signos vitales, Dieta, etc." /></div>
)}
@@ -226,6 +256,13 @@ export function SeccionIndicaciones({ recomendaciones, internacionId, add, updat
{ind.tipo === 'Farmacologica' && (
<div className="font-medium">{ind.droga} {ind.dosis} {ind.frecuenciaHoras ? `c/${ind.frecuenciaHoras}hs` : ''} {ind.via}</div>
)}
{ind.tipo === 'Farmacologica Insulina' && (
<div className="font-medium">{ind.tipoInsulina}
{ind.unidadesDesayuno && ` - Desayuno: ${ind.unidadesDesayuno}U`}
{ind.unidadesAlmuerzo && ` - Almuerzo: ${ind.unidadesAlmuerzo}U`}
{ind.unidadesNoche && ` - 23hs: ${ind.unidadesNoche}U`}
</div>
)}
{ind.tipo === 'No Farmacologica' && (
<div className="font-medium">{ind.descripcion}</div>
)}
@@ -291,10 +328,10 @@ export function SeccionIndicaciones({ recomendaciones, internacionId, add, updat
<TableCell>{ind.medicoSuspende || '-'}</TableCell>
<TableCell>
{ind.tipo === 'Farmacologica' && `${ind.droga} ${ind.dosis} ${ind.frecuenciaHoras ? `c/${ind.frecuenciaHoras}hs` : ''} ${ind.via}`}
{ind.tipo === 'Farmacologica Insulina' && `${ind.tipoInsulina}${ind.unidadesDesayuno ? ` - Desayuno: ${ind.unidadesDesayuno}U` : ''}${ind.unidadesAlmuerzo ? ` - Almuerzo: ${ind.unidadesAlmuerzo}U` : ''}${ind.unidadesNoche ? ` - 23hs: ${ind.unidadesNoche}U` : ''}`}
{ind.tipo === 'No Farmacologica' && ind.descripcion}
{(ind.tipo === 'PHP' || ind.tipo === 'Paralelo') && `${ind.tipoPlan} ${ind.cantidadMl}ml en ${ind.tiempoHoras}hs`}
{ind.tipo === 'Alterno' && `${ind.tipoPlan} ${ind.cantidadMl}ml + ${ind.tipoPlan2} ${ind.cantidadMl2}ml en ${ind.tiempoHoras}hs`}
{ind.tipo === 'Alterno' && `${ind.tipoPlan} ${ind.cantidadMl}ml + ${ind.tipoPlan2} ${ind.cantidadMl2}ml`}
</TableCell>
</TableRow>
))}
+6 -1
View File
@@ -172,7 +172,8 @@ export interface ATB {
fechaFinalizacion?: string;
}
export type IndicacionTipo = 'Farmacologica' | 'No Farmacologica' | 'PHP' | 'Paralelo' | 'Alterno';
export type IndicacionTipo = 'Farmacologica' | 'Farmacologica Insulina' | 'No Farmacologica' | 'PHP' | 'Paralelo' | 'Alterno';
export type TipoInsulina = 'NPH' | 'Glargina';
export type ViaAdministracion = 'Oral' | 'EV' | 'IM' | 'SC' | 'Por GGT' | 'Por SNG';
export type TipoPlanHidratacion = 'SF 0.9%' | 'Dextrosa 5%' | 'Dextrosa 10%' | 'Dextrosa 25%' | 'Ringer Lactato';
@@ -190,6 +191,10 @@ export interface Indicacion {
cantidadMl?: number;
cantidadMl2?: number;
tiempoHoras?: number;
tipoInsulina?: TipoInsulina;
unidadesDesayuno?: number;
unidadesAlmuerzo?: number;
unidadesNoche?: number;
estado: 'Activa' | 'Suspendida';
medicoCrea: string;
fechaCrea: string;