Una agenda donde dos reservas no caben a la vez
Vista de día y de semana: las horas en vertical, las salas o los días en columnas, la línea del momento actual. El solape lo impide la propia base de datos, con una restricción por rango y no con una comprobación en el formulario: una segunda petición simultánea se salta esa comprobación. El margen de limpieza forma parte del tramo ocupado, una solicitud retiene la hora y una cancelación la libera.
Página pública de reserva
En la dirección propia del espacio, cualquiera sin cuenta elige sala, día y hora, ve tachado lo ocupado y deja su solicitud. El precio lo calcula el servidor según las reglas del espacio, la disponibilidad se devuelve sin nombres de clientes y hay límites de frecuencia. Dieciocho comprobaciones se hicieron desde fuera, sin sesión: qué contiene la respuesta, los rechazos por solape, el horario de apertura, el horizonte de reserva y el intento de leer las tablas directamente.
Precio según la franja horaria
55 + 55 + 90 = 200, si la tercera hora entra en tarifa de tarde: el importe se compone por tramos, no multiplicando por una única tarifa. Se calculan las horas extra con su multiplicador y su redondeo por bloques, la señal y la fianza por daños van en campos distintos, y las condiciones de cancelación se definen por escalones. La aceptación del contrato por parte del cliente se guarda como copia del texto: la discusión será sobre lo que aceptó entonces.
Captura: una foto, un documento o un audio se convierten en borrador
Se puede enviar texto, la foto de un recibo, un PDF o una nota de voz. El análisis propone borradores de cinco tipos —reserva, apunte contable, tarea, solicitud, cliente— y líneas sueltas de servicios adicionales con sus importes. El modelo no guarda nada por su cuenta: el registro lo crea una persona al pulsar, y un error de lectura cuesta un solo «descartar». El análisis corre en el servidor, así que ni minimizar la aplicación ni un corte de red lo interrumpen.
Dinero que no se puede contar dos veces
Los totales de la reserva son columnas calculadas de la base de datos, no se pueden sumar mal desde el código; lo pagado lo recalcula un trigger a partir del historial de pagos en lugar de guardarse en un campo aparte. Un apunte de ingreso no puede apuntar a una reserva: si no, un mismo cobro entraría dos veces en el mes. Listado de movimientos del mes, resumen por salas, canales y partidas, umbral de rentabilidad; los límites del mes se calculan en la zona horaria del espacio, no en UTC.
Una base de clientes que no adula
Segmentos: todos, habituales, se están perdiendo, en riesgo, duplicados. «Perdido» se mide según el ritmo del propio cliente: quien viene una vez por semana se ha perdido tras tres semanas de silencio; quien viene una vez por trimestre, no. Los duplicados se buscan por grado de parecido: teléfono coincidente, 100 %; una tilde de más o de menos, 95 %; apellidos distintos con el mismo comienzo no pasan el umbral. Sin esto, la facturación de una persona queda repartida entre dos fichas.
Cinco roles delimitados en la base de datos
Propietario, gerente, recepción, contabilidad y personal. El personal no es que «no vea» el dinero: es que el dinero no le llega. Las políticas sobre reservas, clientes y apuntes exigen el rol, y su propia agenda la recibe por una función donde las columnas de dinero no existen físicamente. Los gastos personales del propietario no los ve ni el gerente consultando directamente. Los permisos se comprobaron con peticiones reales usando tokens de cada rol, no leyendo las políticas.
Solicitudes y tiempo de primera respuesta
Las solicitudes llegan por un enlace-canal —formulario de la web, Tilda, Make, Zapier— y por el bot de Telegram propio del espacio: el bot del dueño, no uno compartido. El sistema marca el momento de la primera respuesta y lo contrasta con el objetivo fijado por el espacio. La recepción con IA sabe proponer horas libres y llevar hasta la solicitud por el mismo camino que la página pública; cada respuesta automática va marcada como automática.
Equipo, tareas y turnos
Invitación por enlace, no por correo: el token solo revela el nombre del espacio y el rol, y el enlace se acepta una única vez. Las tareas se ordenan por urgencia, el responsable mueve el estado y anota el siguiente paso. Los turnos son una cuadrícula semanal «personas × días» con la columna de nombres fijada; la tarifa se copia al turno como instantánea, de modo que subir la tarifa no recalcula los meses ya cerrados.