The calculation time methods of `calculateNextDueDate` and `_canLiquidateLoan` are inconsistent
The calculation time methods of `calculateNextDueDate` and `_canLiquidateLoan` are inconsistent\\n```\\nFile: TellerV2.sol\\n 854     function calculateNextDueDate(uint256 _bidId)\\n 855         public\\n 856         view\\n 857         returns (uint32 dueDate_)\\n 858     {\\n 859         Bid storage bid = bids[_bidId];\\n 860         if (bids[_bidId].state != BidState.ACCEPTED) return dueDate_;\\n 861\\n 862         uint32 lastRepaidTimestamp = lastRepaidTimestamp(_bidId);\\n 863\\n 864         // Calculate due date if payment cycle is set to monthly\\n 865         if (bidPaymentCycleType[_bidId] == PaymentCycleType.Monthly) {\\n 866             // Calculate the cycle number the last repayment was made\\n 867             uint256 lastPaymentCycle = BPBDTL.diffMonths(\\n 868                 bid.loanDetails.acceptedTimestamp,\\n 869               \\n```\\n\\nThe `calculateNextDueDate` function is used by the borrower to query the date of the next repayment. Generally speaking, the borrower will think that as long as the repayment is completed at this point in time, the collateral will not be liquidated.\\n```\\nFile: TellerV2.sol\\n 953     function _canLiquidateLoan(uint256 _bidId, uint32 _liquidationDelay)\\n 954         internal\\n 955         view\\n 956         returns (bool)\\n 957     {\\n 958         Bid storage bid = bids[_bidId];\\n 959\\n 960         // Make sure loan cannot be liquidated if it is not active\\n 961         if (bid.state != BidState.ACCEPTED) return false;\\n 962\\n 963         if (bidDefaultDuration[_bidId] == 0) return false;\\n 964\\n 965         return (uint32(block.timestamp) -\\n 966             _liquidationDelay -\\n 967             lastRepaidTimestamp(_bidId) >\\n 968             bidDefaultDuration[_bidId]);\\n 969     }\\n```\\n\\nHowever, when the `_canLiquidateLoan` function actually judges whether it can be liquidated, the time calculation mechanism is completely different from that of `calculateNextDueDate` function, which may cause that if the time point calculated by `_canLiquidateLoan` is earlier than the time point of `calculateNextDueDate` function, the borrower may also be liquidated in the case of legal repayment.\\nBorrowers cannot query the specific liquidation time point, but can only query whether they can be liquidated through the `isLoanDefaulted` function or `isLoanLiquidateable` function. When they query that they can be liquidated, they may have already been liquidated.
It is recommended to verify that the liquidation time point cannot be shorter than the repayment period and allow users to query the exact liquidation time point.
Borrowers may be liquidated if repayments are made on time.
```\\nFile: TellerV2.sol\\n 854     function calculateNextDueDate(uint256 _bidId)\\n 855         public\\n 856         view\\n 857         returns (uint32 dueDate_)\\n 858     {\\n 859         Bid storage bid = bids[_bidId];\\n 860         if (bids[_bidId].state != BidState.ACCEPTED) return dueDate_;\\n 861\\n 862         uint32 lastRepaidTimestamp = lastRepaidTimestamp(_bidId);\\n 863\\n 864         // Calculate due date if payment cycle is set to monthly\\n 865         if (bidPaymentCycleType[_bidId] == PaymentCycleType.Monthly) {\\n 866             // Calculate the cycle number the last repayment was made\\n 867             uint256 lastPaymentCycle = BPBDTL.diffMonths(\\n 868                 bid.loanDetails.acceptedTimestamp,\\n 869               \\n```\\n