@Override
  public HashMap<String, List<Document>> getMoneyMotionRequestsLogs(Deposit deposit) {
    HashMap<String, List<Document>> logs = new LinkedHashMap<String, List<Document>>();
    logs.put("payinaccount", billingSystemUtils.getPayInAccountRequestsUndoneLog(deposit));
    logs.put("outcome", billingSystemUtils.getOutcomeUndoneLog(deposit));

    return logs;
  }
 @Override
 public DepositOutcomeDocument requestEarlyOutcome(Deposit deposit, BigDecimal sum)
     throws RedSaldoException {
   DepositOutcomeDocument depositOutcomeDocument =
       billingSystemUtils.doDepositEarlyOutcomeRequest(deposit.getId(), sum);
   return depositOutcomeDocument;
 }
  @Override
  public DepositPayInAccountDocument requestAdditionalMoneyPayIn(Deposit deposit, BigDecimal sum) {
    DepositPayInAccountDocument depositPayInAccountDocument =
        billingSystemUtils.doDepositAdditionalPayInAccountRequest(deposit.getId(), sum);

    return depositPayInAccountDocument;
  }
  @Override
  public void capitalize(Deposit deposit) throws DepositCapitalizationIllegalStateException {

    System.out.println(
        "capitalization of #"
            .concat(deposit.getId().toString())
            .concat(" next capitalization ")
            .concat(deposit.getNextCapitalization().toString()));

    BigDecimal saldo = billingSystemUtils.getDepositSaldo(deposit.getId());

    if (saldo.compareTo(BigDecimal.ZERO) < 1) {
      System.out.println("Нет денег - нет прибыли");
      throw new DepositCapitalizationIllegalStateException(
          "На счету нет денег. Капитализация невозможна");
    }

    if (deposit.getPercent() == null || deposit.getPercent().compareTo(BigDecimal.ZERO) < 1) {
      throw new DepositCapitalizationIllegalStateException(
          "Не задана процентная ставка. Каитализация невозможна");
    }

    DepositCalculation depositCalculationMonth =
        new DepositCalculation(saldo, 1, deposit.getDepositorFormType());
    depositCalculationMonth.percents = deposit.getPercent();

    BigDecimal sumToAdd =
        depositCalculationService.calculateSumInTheEnd(depositCalculationMonth).add(saldo.negate());

    billingSystemUtils.doDepositPayInMonthlyProfit(
        deposit.getId(), sumToAdd, deposit.getNextCapitalization());

    Calendar calendar = Calendar.getInstance();
    calendar.setTime(deposit.getNextCapitalization());
    calendar.add(Calendar.MONTH, 1);

    deposit.setNextCapitalization(calendar.getTime());

    entityManager.merge(deposit);
  }
 @Override
 public void cancelRequestToOutcomeByDocNumber(String code)
     throws DocumentAlreadyProcessingException, DocumentNotFoundException, RedSaldoException,
         IllegalDocumentStateException {
   billingSystemUtils.cancelRequestBeforeMoneyTransferByDocNumber(code);
 }