Gestión integral de alquiler por habitaciones: contratos, caja, liquidaciones a propietarios y firma digital
Alquilar un piso completo es sencillo. Alquilarlo por habitaciones — coliving o rent to rent — multiplica el trabajo administrativo: cada habitación tiene su inquilino, su contrato, su fianza, su fecha de cobro y su parte proporcional de los gastos comunes. Con cinco pisos y cuatro habitaciones cada uno, eso son veinte relaciones contractuales simultáneas.
RoomManager gestiona ese modelo completo: pisos, habitaciones, inquilinos, alquileres, pagos, fianzas, gastos con comprobante, incidencias, tareas y calendario. Y cierra el círculo por arriba, con el módulo de caja: liquida al propietario del piso lo que le corresponde, genera el recibo y recoge su firma digital.
Además publica una oferta pública de las habitaciones libres, de forma que los interesados envían consultas que entran directamente en el sistema. Es software de gestión con su propia puerta de entrada comercial.
Inventario con servicios asociados a cada piso y a cada habitación por separado, y galería de fotos.
Ficha del inquilino, avatar, documentación y cambio de habitación sin perder el histórico.
Contratos con generación en PDF, fechas, importes y estado.
Registro de cobros por alquiler con su comprobante adjunto.
Control de fianzas entregadas, retenidas y devueltas.
Gastos del piso con subida de comprobante y reparto.
Liquidación al propietario por periodo, con desglose de items, recibo imprimible y firma digital.
Parte de incidencias por habitación o piso con seguimiento.
Trabajo pendiente y avisos por fecha.
Vista unificada de cobros, vencimientos y tareas.
Landing con las habitaciones disponibles y formulario de consulta.
Bandeja de las consultas recibidas desde la oferta pública.
Cifras agregadas de ocupación e ingresos.
Gestión de usuarios y de suscripciones de la plataforma.
Arquitectura híbrida deliberada: las páginas son PHP renderizado en servidor — carga
inmediata y funciona sin JavaScript — pero cada acción interactiva llama a un
endpoint REST de api/ que responde JSON. Son 33
endpoints, uno por recurso, más los webhooks de Stripe y un
health.php para monitorización.
RoomManager/ ├── index.php · landing.php · oferta.php # privado y público ├── login.php · register.php · forgot_password.php · reset_password.php ├── pisos.php · habitaciones.php · inquilinos.php · alquileres.php ├── pagos.php · fianzas.php · gastos.php · caja.php ├── firmar_liquidacion.php · recibo_liquidacion.php # firma y recibo ├── checkout.php · pago_exitoso.php · suscripcion_expirada.php ├── api/ # 33 endpoints REST + webhook_stripe + health ├── config/ # database.php, auth.php ├── includes/ # header, footer, rental_helpers ├── sql/ # schema + 12 migraciones + deploy_safe_upgrade.sh ├── uploads/ # fotos, avatares, comprobantes └── backups/ # volcados previos a migración
22 tablas en el esquema de producción. Las tres de caja son las que hacen posible la liquidación con firma: cabecera, líneas de detalle y estado de firma.
| Tabla | Contenido |
|---|---|
| usuarios | Cuentas de acceso con su suscripción asociada |
| pisos | Inmuebles gestionados |
| habitaciones | Habitaciones de cada piso, con precio y estado |
| inquilinos | Personas alojadas, con avatar y documentación |
| alquileres | Relación contractual entre inquilino y habitación |
| pagos | Cobros registrados con su comprobante |
| fianzas | Fianzas entregadas, retenidas y devueltas |
| gastos | Gastos del piso con comprobante adjunto |
| servicios | Catálogo de servicios (luz, agua, internet, limpieza…) |
| piso_servicios | Servicios contratados a nivel de piso |
| habitacion_servicios | Servicios incluidos en una habitación concreta |
| caja_propietarios | Cuenta corriente de cada propietario |
| caja_liquidaciones | Liquidación por periodo, con su estado de firma |
| caja_liquidacion_items | Líneas de detalle de cada liquidación |
| consultas_habitaciones | Consultas recibidas desde la oferta pública |
| incidencias | Partes de incidencia con seguimiento |
| tareas | Trabajo pendiente asignado |
| recordatorios | Avisos por fecha |
| documentos | Documentación adjunta |
| fotos_habitaciones | Galería por habitación |
| notificaciones | Avisos en la aplicación |
| login_attempts | Intentos de acceso, para el bloqueo por fuerza bruta |
| password_resets | Tokens de recuperación de contraseña |
| preferencias_usuario | Ajustes de interfaz por usuario |
Cobro de la suscripción a la plataforma mediante sesión de Checkout, con páginas de éxito y cancelación.
api/webhook_stripe.php recibe los eventos y activa, renueva o
expira la suscripción del usuario.
Contratos de alquiler y recibos de liquidación exportables e imprimibles.
api/health.php expone el estado del servicio y de la base de
datos para monitorización externa.
password_hash() y verificación por hash.login_attempts..htaccess.
El esquema evolucionó doce veces con inquilinos y cobros reales dentro. En lugar de
un único schema.sql destructivo, cada cambio es una migración numerada
(migration_v2 … migration_v12) acompañada de
deploy_safe_upgrade.sh, que hace copia de seguridad antes de aplicar.
La carpeta backups/ conserva los volcados previos a cada salto.
Una firma dibujada en un canvas no vale nada por sí sola. Lo que le da peso es el
contexto: api/caja_firma.php guarda junto a la firma el nombre
declarado, la dirección IP, la fecha exacta y el estado del proceso. Con eso el
recibo de liquidación es defendible ante el propietario.
Las páginas se renderizan en PHP porque cargan al instante y no dependen de JavaScript; pero cada acción concreta pasa por un endpoint REST. Así el frontend actualiza sin recargar y esos mismos endpoints quedan disponibles para cualquier cliente futuro.
Desarrollador full stack — autor único.
Modelo de datos, los 33 endpoints, el frontend con Bootstrap 5, la integración de Stripe, el circuito de firma digital, la estrategia de migraciones y el despliegue.
En producción en roommanager.tinoprop.com, con datos
reales de pisos, inquilinos y liquidaciones. El esquema va por la doceava migración.
El repositorio no es público al contener configuración de producción y datos de inquilinos reales. Puedo mostrar el código en una entrevista.