Implementar y centralizar el ordenamiento automatico y riguroso de camas por las reglas de grupos 2XX, 3XX, 4XX

This commit is contained in:
2026-08-11 23:38:31 +00:00
parent 0a0f7782e9
commit e869d6a19e
6 changed files with 64 additions and 158 deletions
+2 -43
View File
@@ -8,7 +8,7 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@
import { Badge } from '@/components/ui/badge';
import { toast } from 'sonner';
import type { Paciente, Cama, Grupo, Internacion } from '@/types';
import { getNombreProfesional, computeSector } from '@/lib/utils';
import { getNombreProfesional, computeSector, sortCamas } from '@/lib/utils';
import { useHospitalStore } from '@/hooks/useHospitalStore';
interface NuevoIngresoProps {
@@ -64,48 +64,7 @@ export function NuevoIngreso({ pacientes, camas, grupos, onIniciarInternacion, o
return !internacionActiva;
});
const parseBedNumber = (numero: string) => {
const match = numero.match(/^(\d{3})-(\d+)$/);
if (!match) return { sala: 0, cama: 0 };
return {
sala: parseInt(match[1]),
cama: parseInt(match[2])
};
};
const sortedCamas = [...camas].sort((a, b) => {
const pa = parseBedNumber(a.numero);
const pb = parseBedNumber(b.numero);
const getOrden = (sala: number) => {
const grupo = Math.floor(sala / 100);
const esPar = sala % 2 === 0;
if (grupo === 2) {
if (esPar) return { grupo: 2, suborden: 0, sala };
return { grupo: 1, suborden: 1, sala };
}
if (grupo === 3) {
if (esPar) return { grupo: 3, suborden: 0, sala };
return { grupo: 4, suborden: 1, sala };
}
if (grupo === 4) {
if (esPar) return { grupo: 6, suborden: 0, sala };
return { grupo: 5, suborden: 1, sala };
}
return { grupo: 10, suborden: 1, sala };
};
const oa = getOrden(pa.sala);
const ob = getOrden(pb.sala);
if (oa.grupo !== ob.grupo) return oa.grupo - ob.grupo;
if (oa.suborden === ob.suborden) {
if (oa.suborden === 0) return (oa.sala || pa.sala) - (ob.sala || pb.sala);
return (ob.sala || 0) - (oa.sala || 0);
}
return oa.suborden - ob.suborden;
});
const sortedCamas = sortCamas(camas);
const handleSubmit = async () => {
// Validaciones explícitas con feedback claro