This approach has a lot of similarities to PriceOps [1] in terms of goals.
I don't see why you want to avoid grandparenting. If the pricing model [2] is versioned and immutable, then keeping customers on their existing Customer Schedule [3] and then using specific migrations to move customers to new schedules makes sense and is easier than either not doing anything, or trying to track customer specific discounts and the accounting related to that.
I don't see why you want to avoid grandparenting. If the pricing model [2] is versioned and immutable, then keeping customers on their existing Customer Schedule [3] and then using specific migrations to move customers to new schedules makes sense and is easier than either not doing anything, or trying to track customer specific discounts and the accounting related to that.
1: https://priceops.org/
2: https://priceops.org/1-model
3: https://priceops.org/2-schedule