Fix bed number regex to match MapaCamas sorting order
This commit is contained in:
@@ -62,6 +62,49 @@ export function EditIngreso({
|
|||||||
return nombre !== 'fuera de area';
|
return nombre !== 'fuera de area';
|
||||||
});
|
});
|
||||||
|
|
||||||
|
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 handleSubmit = () => {
|
const handleSubmit = () => {
|
||||||
if (!pacienteSeleccionado || !camaSeleccionada || !areaSeleccionada || !medico || !diagnosticoIngreso || !enfermedadActual) {
|
if (!pacienteSeleccionado || !camaSeleccionada || !areaSeleccionada || !medico || !diagnosticoIngreso || !enfermedadActual) {
|
||||||
alert('Por favor complete los campos obligatorios');
|
alert('Por favor complete los campos obligatorios');
|
||||||
@@ -218,7 +261,7 @@ export function EditIngreso({
|
|||||||
<SelectValue placeholder="Seleccionar cama" />
|
<SelectValue placeholder="Seleccionar cama" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
{camas.map(c => (
|
{sortedCamas.map(c => (
|
||||||
<SelectItem key={c.id} value={c.id}>
|
<SelectItem key={c.id} value={c.id}>
|
||||||
{c.numero} - {getAreaName(c.areaId)}
|
{c.numero} - {getAreaName(c.areaId)}
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
|
|||||||
@@ -127,7 +127,33 @@ export function Internaciones({
|
|||||||
const internacionActiva = internaciones.find(i => i.pacienteId === p.id && i.activa);
|
const internacionActiva = internaciones.find(i => i.pacienteId === p.id && i.activa);
|
||||||
return !internacionActiva;
|
return !internacionActiva;
|
||||||
});
|
});
|
||||||
const camasDisponibles = camas.filter(c => c.estado === 'Disponible');
|
|
||||||
|
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) return esPar ? { grupo: 2, suborden: 0, sala } : { grupo: 1, suborden: 1, sala };
|
||||||
|
if (grupo === 3) return esPar ? { grupo: 3, suborden: 0, sala } : { grupo: 4, suborden: 1, sala };
|
||||||
|
if (grupo === 4) return esPar ? { grupo: 6, suborden: 0, sala } : { 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) {
|
||||||
|
return oa.suborden === 0 ? (oa.sala - ob.sala) : (ob.sala - oa.sala);
|
||||||
|
}
|
||||||
|
return oa.suborden - ob.suborden;
|
||||||
|
});
|
||||||
|
|
||||||
const getAreaName = (areaId?: string) => areas.find(a => a.id === areaId)?.nombre;
|
const getAreaName = (areaId?: string) => areas.find(a => a.id === areaId)?.nombre;
|
||||||
|
|
||||||
const abrirDialogoEgreso = (internacion: Internacion) => {
|
const abrirDialogoEgreso = (internacion: Internacion) => {
|
||||||
@@ -231,7 +257,7 @@ export function Internaciones({
|
|||||||
<SelectValue placeholder="Seleccionar cama" />
|
<SelectValue placeholder="Seleccionar cama" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
{camasDisponibles.map(c => (
|
{sortedCamas.filter(c => c.estado === 'Disponible').map(c => (
|
||||||
<SelectItem key={c.id} value={c.id}>
|
<SelectItem key={c.id} value={c.id}>
|
||||||
{c.numero} - {getAreaName(c.areaId) || 'Sin área'} ({c.tipo})
|
{c.numero} - {getAreaName(c.areaId) || 'Sin área'} ({c.tipo})
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
|
|||||||
@@ -56,6 +56,49 @@ export function NuevoIngreso({ pacientes, camas, areas, onIniciarInternacion, on
|
|||||||
});
|
});
|
||||||
const pacientesSinInternar = pacientes;
|
const pacientesSinInternar = pacientes;
|
||||||
|
|
||||||
|
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 handleSubmit = () => {
|
const handleSubmit = () => {
|
||||||
if (!pacienteSeleccionado || !camaSeleccionada || !areaSeleccionada || !medico || !diagnosticoIngreso || !enfermedadActual) {
|
if (!pacienteSeleccionado || !camaSeleccionada || !areaSeleccionada || !medico || !diagnosticoIngreso || !enfermedadActual) {
|
||||||
alert('Por favor complete los campos obligatorios');
|
alert('Por favor complete los campos obligatorios');
|
||||||
@@ -202,7 +245,7 @@ export function NuevoIngreso({ pacientes, camas, areas, onIniciarInternacion, on
|
|||||||
<SelectValue placeholder="Seleccionar cama" />
|
<SelectValue placeholder="Seleccionar cama" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
{camas.map(c => (
|
{sortedCamas.map(c => (
|
||||||
<SelectItem key={c.id} value={c.id}>
|
<SelectItem key={c.id} value={c.id}>
|
||||||
{c.numero} - {getAreaName(c.areaId)}
|
{c.numero} - {getAreaName(c.areaId)}
|
||||||
</SelectItem>
|
</SelectItem>
|
||||||
|
|||||||
Reference in New Issue
Block a user