@@ -546,27 +546,10 @@ library BrokerMath {
546546 // update repaid principal amount
547547 principalToDeduct -= repayPrincipalAmt;
548548 p.principalRepaid += repayPrincipalAmt;
549-
550- if (repayInterestAmt >= accruedInterest) {
551- // all accrued interest fully covered -> safe to reset tracking
552- p.interestRepaid = 0 ;
553- p.lastRepaidTime = block .timestamp ;
554- } else {
555- // partial interest covered -> adjust interestRepaid to preserve outstanding
556- // After principalRepaid increased, getAccruedInterestForFixedPosition() recalculates
557- // with smaller (principal - principalRepaid), producing a lower total (newTotalAccrued).
558- // We set interestRepaid so that: newTotalAccrued - interestRepaid = unpaidInterest
559- uint256 unpaidInterest = accruedInterest - repayInterestAmt;
560- uint256 newTotalAccrued = getAccruedInterestForFixedPosition (p);
561- if (newTotalAccrued >= unpaidInterest) {
562- // exact: outstanding is perfectly preserved
563- p.interestRepaid = newTotalAccrued - unpaidInterest;
564- } else {
565- // edge case: most principal repaid, formula can't represent full outstanding
566- // preserve maximum possible: outstanding = newTotalAccrued (don't reset lastRepaidTime)
567- p.interestRepaid = 0 ;
568- }
569- }
549+ // reset repaid interest to zero (all accrued interest has been cleared)
550+ p.interestRepaid = 0 ;
551+ // reset repaid time to now
552+ p.lastRepaidTime = block .timestamp ;
570553 }
571554
572555 return (interestToDeduct, principalToDeduct, p);
0 commit comments