# SIHO PMS — Fase 10

Se reforzaron renovación, cambio de habitación, servicios extra y check-out.

## Garantías
- Token idempotente por formulario.
- Transacciones MySQL con reintentos.
- Bloqueo `lockForUpdate` de caja, reserva, pago y habitaciones.
- Renovaciones calculadas exclusivamente con tarifas dinámicas activas.
- El precio de servicios se obtiene del servidor, no del navegador.
- Check-out atómico: reserva, pago, habitación y consumos cambian juntos o ninguno cambia.
- Reenvíos y doble clic no duplican cargos ni movimientos.

## Pruebas requeridas
1. Doble clic en renovación.
2. Reenvío de formulario después de respuesta lenta.
3. Dos usuarios intentando cambiar a la misma habitación.
4. Servicio extra repetido con el mismo token.
5. Dos check-outs simultáneos de la misma reserva.
6. Fallo deliberado a mitad de operación para confirmar rollback.
