if (newBalance.compareTo(BigDecimal.ZERO) < 0) что тут происходит? после каждой интерации происходит сравнение с начальным балансом?