The reason that binds first, or null when viable.
getTroveMaxBorrowingCapacity(owner), the capacity before the refinance (MK-101).
getTroveInterestRate(owner): the rate the Trove carries now, in basis points (MK-101).
The refinancing fee in MUSD. Zero for a fee exempt account.
The quantity the percentage is applied to: the current NET debt, entire debt minus 200.
Whether the account is fee exempt.
Whether the system is in Recovery Mode right now.
BTC/USD used for every number above.
Principal before the refinance.
Every reason it would be refused, in contract call order. Empty when viable.
The governable refinancingFeePercentage, read live, as a whole percent.
The capacity the refinance WRITES: coll * price / (110 * 1e16) at the current price
(BorrowerOperations.sol:1077-1084), unconditionally. Lower than currentCapacity when the
price has fallen since the capacity was last set, which cuts every later borrow; higher
when it has risen (MK-101).
Entire debt after the refinance.
The Trove's ICR after the refinance, at the current price.
interestRateManager.interestRate(): the rate the Trove WILL carry after the refinance, in
basis points (BorrowerOperations.sol:1069, :1075). It can be higher than
currentInterestRateBps, in which case the refinance raises the rate AND charges fee.
The preview does not refuse that, because the contract does not; it reports it (MK-101).
Principal after: the fee is capitalized, so it grows by exactly the fee.
The system TCR the contract checks, which already includes the capitalized fee.
True only when the contract would let the refinance through.
Result of previewRefinance: a verdict plus every raw number behind it.