CREATE PROCEDURE [dbo].[sp_proCalcularFechaFin]
      @fechaInicio DATETIME,
      @idOp VARCHAR(20),
      @etapa INT,
      @codMaquina INT,
      @cuartos INT,
      @modo INT = 1
  AS
  BEGIN
      SET NOCOUNT ON;

      DECLARE @fechaActual DATETIME
      DECLARE @cuartosRestantes INT
      DECLARE @disponible INT

      -- Iniciar desde fecha inicio + 16 minutos (como hace el código original)
      SET @fechaActual = DATEADD(MINUTE, 16, @fechaInicio)
      SET @cuartosRestantes = @cuartos

      -- Loop hasta completar los cuartos necesarios
      WHILE @cuartosRestantes > 1
      BEGIN
          -- Obtener disponibilidad usando el SP existente
          DECLARE @resultado TABLE (respuesta INT)
          DELETE FROM @resultado

          INSERT INTO @resultado
          EXEC sp_proDisponible @fechaActual, @idOp, @etapa, @codMaquina, @modo

          SELECT @disponible = ISNULL(respuesta, 0) FROM @resultado

          -- Si está disponible, descontar un cuarto
          IF @disponible = 0
          BEGIN
              SET @cuartosRestantes = @cuartosRestantes - 1
          END

          -- Avanzar 15 minutos
          SET @fechaActual = DATEADD(MINUTE, 15, @fechaActual)

          -- Protección contra loops infinitos (máximo 365 días)
          IF @fechaActual > DATEADD(DAY, 365, @fechaInicio)
          BEGIN
              BREAK
          END
      END

      -- Retornar fecha fin (menos 1 minuto, como el código original)
      SELECT DATEADD(MINUTE, -1, @fechaActual) AS FechaFin
  END