Implement exchanges

When a return item has an exchange variant associated to it, when the customer return is processed, that return item is not refunded, but rather the exchange variant is grouped into a new shipment for the existing order with other exchanges for the customer return. 

No new line items are created and no money is refunded for the exchanged items. 

The new inventory units are associated to the original like item so as to allow refund calculation for future returns of this item. 

There are different eligibility rules that stores can implement to determine what variants can be exchanged for, the default being any variant for the same product. 
This seems to be a something possibly hardcoded to your business domain.  Is there a more flexible way to do this as a configuration or something?