Vacunación nacional, Panamá
En una campaña de vacunación la cola no es una molestia, es parte del protocolo clínico.
- Cuándo
- 2021
- Con
- XPLOR, CTO, plataforma Fluyapp, AstraZeneca, despliegue nacional, salud pública
Como CTO de XPLOR fui el responsable de la plataforma que sostuvo el despliegue de vacunación de AstraZeneca en Panamá, construida sobre el motor de filas de Fluyapp.
El flujo completo de un centro de vacunación
No es «pedir cita». El sistema gobernaba el recorrido entero de cada persona dentro del centro, en varias sedes a la vez y en tiempo real:
- la cita y la llegada,
- el llamado al puesto correspondiente,
- la aplicación de la dosis,
- y la observación post vacunación: los quince minutos en los que el ciudadano tiene que permanecer en el centro, controlado.
Ese último paso es el que cambia el problema. En cualquier otro contexto, quien ya fue atendido se va y deja de ser tu responsabilidad. Aquí sigue dentro, hay que saber exactamente cuándo entró en observación y cuándo puede salir, y el puesto que acaba de liberarse ya tiene a alguien esperando.
Por qué es distinto de gestionar una fila
Una campaña de vacunación tiene el ritmo marcado por fuera: los viales llegan cuando llegan, una vez abiertos tienen una ventana de horas, y el objetivo del día no es atender bien a quien vino sino no desperdiciar dosis. La cola deja de ser una cuestión de comodidad y pasa a ser el instrumento con el que se cumple —o no— un protocolo sanitario.
Y no hay ensayo. Un centro de vacunación abre a una hora concreta, con gente haciendo fila en la calle desde antes, en mitad de una pandemia. El sistema funciona ese día o no funciona.
Lo que dejó
La misma lección que el Tribunal Electoral, en otro registro: cuando el software opera en el mundo físico y hay una persona esperando delante, la disponibilidad no es una métrica del panel de control — es el producto.
El estado que importa
Modelar el centro como una sola cola —la de atención— es el error que llena la sala sin que nadie se dé cuenta. El puesto queda libre; la persona, no.
// El ciudadano vacunado NO se ha ido: está en observación. Son dos
// recursos distintos con dos relojes distintos, y confundirlos es lo
// que hace que la sala se sature con todos los puestos libres.
type Estado =
| { fase: 'esperando' }
| { fase: 'en_puesto'; puesto: PuestoId }
| { fase: 'en_observacion'; desde: Instante; libreEn: Instante }
| { fase: 'alta' };
const OBSERVACION = minutos(15); // protocolo clínico, no cortesía
function aplicarDosis(c: Ciudadano, ahora: Instante): [Estado, Evento[]] {
const libreEn = suma(ahora, OBSERVACION);
return [
{ fase: 'en_observacion', desde: ahora, libreEn },
// Dos cosas a la vez, y por eso son dos eventos: el puesto vuelve a
// la cola de disponibles, y la sala descuenta un asiento hasta que
// termine la observación.
[Evento.puestoLibre(c.puesto), Evento.asientoOcupado(c.id, libreEn)],
];
}
De ahí sale la restricción real del día: los puestos no marcan el ritmo, lo marca el aforo de la sala de observación dividido entre los quince minutos.
Escríbeme
Si estás pensando en hacer algo con IA y quieres hablarlo con alguien que ya lo puso en producción, escríbeme. Contesto yo.
hola@giron.ai