2026-06-10 — Asignación de camas y administración de planos
Se agregó una forma visual de asignar camas. Cada sede carga sus planos (un dibujo de las habitaciones y camas), y dentro de cada actividad el staff ve un mapa donde arrastra a cada inscripto a una cama libre. La cama asignada no es un estado de la inscripción: es un dato más (habitación + número de cama) que se puede cambiar en cualquier momento mientras la inscripción no esté en lista de espera ni cancelada.
Por qué
Antes la cama se cargaba escribiendo a mano la habitación y el número en la ficha de la inscripción, sin ver el conjunto. Con el mapa se ve de un vistazo qué camas están libres y ocupadas, se evita asignar dos personas a la misma cama y la asignación es mucho más rápida.
Qué se descartó del plan original
El análisis inicial (documento
docs/2026-06-06-mapa-de-camas-y-checkin-automatico.mden el repositorio) preveía un check-in automático con mail al huésped y los estadosbed_assigned/arrived/attended. Eso no se implementó y quedó descartado. El ciclo de vida de la inscripción termina enconfirmed, y la cama es solo un dato editable (ver Estados y ciclo de vida).
Administración de planos (por sede)
- Nueva pantalla “Administrar planos” dentro del grupo Configuración del panel de administración. Ahí se crean, editan y borran los planos de la sede.
- Cada plano tiene un nombre, un identificador (slug) y un dibujo en formato SVG. El SVG es el que define las habitaciones y las camas: cada habitación puede marcar si tiene aire acondicionado, y la cantidad de camas determina si es individual (una cama) o compartida (varias).
- Para facilitar la carga, la pantalla incluye un plano de ejemplo, la posibilidad de subir un archivo .svg y un texto de ayuda (prompt) para que una IA convierta la foto de un plano al formato esperado. Muestra una vista previa y el conteo de habitaciones y camas detectadas.
- Los planos son propios de cada sede: lo que se carga en una sede no aparece en las demás.
Mapa de camas (dentro de la actividad)
- Nueva pestaña “Plano de camas” en el detalle de la actividad (solo en actividades, no en promociones).
- Se dibuja el plano real de la sede con las camas superpuestas; se puede hacer zoom y desplazar. Si la sede tiene varios planos, se elige cuál ver; si no tiene ninguno, invita a cargarlo en “Administrar planos”.
- Colores de cada cama: libre (verde), ocupada (roja) y una en proceso de asignación (índigo). Las camas que no cumplen el filtro activo se ven atenuadas.
- Filtros: solo con aire acondicionado, y por tipo de habitación (individual / compartida).
- Cada cama muestra su número y, si está ocupada, el nombre de la persona. Hay tarjetas con el resumen: camas libres, ocupadas, inscriptos sin cama y total.
- Asignar: se arrastra a un inscripto (de la lista “Sin asignar”) hasta una cama libre. Para liberar una cama, se arrastra la persona de vuelta a “Sin asignar”. También se lista aparte a quien tenga una cama cargada que no figura en el plano actual.
- Es visible solo para el staff con permiso para gestionar inscripciones.
Dónde se carga y se cambia la cama
- Desde el mapa de la actividad (pestaña “Plano de camas”), arrastrando.
- Desde la ficha de la inscripción (panel de administración), en la sección “Logística”: ahora la habitación y la cama se eligen con listas desplegables armadas a partir de los planos de la sede (ya no es texto libre). No se puede editar si la inscripción está en lista de espera o cancelada. Si una cama guardada no existe en ningún plano, se conserva y se marca como “(fuera del plano)“.
- La cama también puede cargarse al crear una inscripción desde el panel (alta manual por staff).
- Al cancelar una inscripción, la cama se libera automáticamente.
Backend (API y plugin)
- Los planos se guardan por sitio (cada sede tiene los suyos). Se expusieron endpoints para listar, ver, crear/reemplazar y borrar planos, protegidos por el permiso de gestión de inscripciones. El SVG se sanea al guardar (se quitan scripts y atributos peligrosos).
- La inscripción ya tenía los campos habitación (
attendee_room_slug) y número de cama (attendee_bed_number); se editan con el guardado normal de la inscripción (PATCH). Hay una guarda anti–doble reserva: no se permite asignar la misma cama a dos personas con fechas superpuestas. - Se quitaron del modelo los estados
bed_assigned/arrived/attended. Una migración reescribe esas inscripciones antiguas aconfirmed, conservando la habitación y la cama ya cargadas.
Documentación (este sitio)
- Se publicó esta entrada de Cambios.
- El análisis original quedó marcado como obsoleto/descartado en lo referido al check-in automático y los estados de cama.
Pendientes / a tener en cuenta
No existe un botón “Asignar en el mapa” desde la ficha de la inscripción que preseleccione a la persona en el mapa, ni el intercambio directo de una cama ocupada por otra (hay que liberar primero). El plano se carga como SVG: la conversión desde una foto se hace por fuera (con el prompt de ayuda).